diff --git a/patches/@effect%2Fopenapi-generator@4.0.0-rc.109.patch b/patches/@effect%2Fopenapi-generator@4.0.0-rc.109.patch index 26aeefb..bd0baef 100644 --- a/patches/@effect%2Fopenapi-generator@4.0.0-rc.109.patch +++ b/patches/@effect%2Fopenapi-generator@4.0.0-rc.109.patch @@ -38,15 +38,9 @@ index aad332ba5abf58db21178942761dee147b382235..4c062f5928cc75c85de4186d60c32d22 return `HttpApiSchema.StreamSse(${options})`; } if (media.effectStream === "uint8array") { -@@ -359,7 +361,7 @@ const renderSecurityScheme = securityScheme => { - return source; - }; - const toOperationKey = operation => `${operation.method}:${operation.path}`; +@@ -364 +364 @@ -const toHttpApiPath = path => path.replace(/{([^}]+)}/g, ":$1"); -+const toHttpApiPath = path => path.replace(/:/g, "%3A").replace(/{([^}]+)}/g, ":$1"); - const toStatus = status => { - if (!/^\d{3}$/.test(status)) { - return; ++const toHttpApiPath = path => path; diff --git a/dist/OpenApiGenerator.js b/dist/OpenApiGenerator.js index a1c2dce0a23131373824e1a0f11fdfb361faabb5..4207d1022f8b6741ddcd47ed95b875dc20ec3529 100644 --- a/dist/OpenApiGenerator.js @@ -154,22 +148,6 @@ index 02be5759b1bcbc48da4a3e72cb2a852c9143558e..b71826d7f02e66659737d726327656d0 } return joinSchemas(payloads) -@@ -513,7 +513,17 @@ const renderSecurityScheme = (securityScheme: ParsedOpenApiSecurityScheme): stri - - const toOperationKey = (operation: ParsedOperation): string => `${operation.method}:${operation.path}` - +@@ -516 +516 @@ -const toHttpApiPath = (path: string): string => path.replace(/{([^}]+)}/g, ":$1") -+// REST-RPC-style OpenAPI paths (e.g. `/clusters/{id}:resume`) embed a literal -+// `:action` suffix alongside the `{param}` placeholder. Effect's HttpApiClient -+// path compiler treats every `:word` occurrence in a compiled endpoint path as -+// an Express-style path parameter, with no way to distinguish a literal colon -+// from a parameter marker. Percent-encoding literal colons before rewriting -+// `{param}` to `:param` keeps the parameter rewrite unambiguous: only colons -+// we just introduced remain unescaped, so the client compiler no longer -+// mistakes the literal action suffix for a second path parameter. The server -+// (and any RFC 3986-compliant router) decodes `%3A` back to `:` before route -+// matching, so the request is unchanged on the wire. -+const toHttpApiPath = (path: string): string => path.replace(/:/g, "%3A").replace(/{([^}]+)}/g, ":$1") - - const toStatus = (status: string): number | undefined => { - if (!/^\d{3}$/.test(status)) { ++const toHttpApiPath = (path: string): string => path diff --git a/patches/effect@4.0.0-rc.109.patch b/patches/effect@4.0.0-rc.109.patch index 08bcf56..00f5b1c 100644 --- a/patches/effect@4.0.0-rc.109.patch +++ b/patches/effect@4.0.0-rc.109.patch @@ -25,6 +25,39 @@ index 874e19f9968cd1f1a072803730ef3e46ffbb808c..7230a334b76f5c201d6f6fd7225ab633 }; const formatSubcommandName = (name, alias) => alias ? `${name}, ${alias}` : name; /** +diff --git a/dist/unstable/httpapi/HttpApiClient.js b/dist/unstable/httpapi/HttpApiClient.js +index 9036e8e06ff04fbf3b2e42e085bb8bfcedf16b68..ec31b9ff1eceb5dac5b0954e601037c60d772442 100644 +--- a/dist/unstable/httpapi/HttpApiClient.js ++++ b/dist/unstable/httpapi/HttpApiClient.js +@@ -298,7 +298,7 @@ export const urlBuilder = (api, options) => { + return builder; + }; + // ---------------------------------------------------------------------------- +-const paramsRegExp = /(\/?):(\w+)(\?)?/g; ++const paramsRegExp = /(^|[/.]):(\w+)(\?)?(?=\/|\.|$)|\{([^}:]+)(:\*)?\}/g; + const compilePath = path => { + if (!paramsRegExp.test(path)) { + return _ => path; +@@ -306,7 +306,8 @@ const compilePath = path => { + paramsRegExp.lastIndex = 0; + return params => { + paramsRegExp.lastIndex = 0; +- return path.replace(paramsRegExp, (_, slash, key, optional) => { ++ return path.replace(paramsRegExp, (_, slash, colonKey, optional, templateKey, wildcard) => { ++ const key = colonKey ?? templateKey; + const value = params[key]; + if (value === undefined) { + if (optional !== undefined) { +@@ -314,7 +315,8 @@ const compilePath = path => { + } + throw new Error(`Missing path parameter: ${key}`); + } +- return `${slash}${encodeURIComponent(value)}`; ++ const encoded = wildcard === undefined ? encodeURIComponent(value) : value.split("/").map(encodeURIComponent).join("/"); ++ return colonKey === undefined ? encoded : `${slash}${encoded}`; + }); + }; + }; diff --git a/dist/unstable/httpapi/HttpApiEndpoint.d.ts b/dist/unstable/httpapi/HttpApiEndpoint.d.ts index e95cfc448c7fd374d1781c59b601dec9703fd9a1..e2047691b17e9a16fbaa86b752161f8c6e89b000 100644 --- a/dist/unstable/httpapi/HttpApiEndpoint.d.ts @@ -59,6 +92,33 @@ index 13cc142d69796ce24d5155fdd263f53772be972a..98455abaec5b9fdfce25867578e674b7 } const formatSubcommandName = (name: string, alias: string | undefined): string => alias ? `${name}, ${alias}` : name +diff --git a/src/unstable/httpapi/HttpApiClient.ts b/src/unstable/httpapi/HttpApiClient.ts +index 365329af41ab4f3e4ec462baadf905c31cc24cf2..8c9466bcc496e4e247f2181bcf7d74b5699fac3d 100644 +--- a/src/unstable/httpapi/HttpApiClient.ts ++++ b/src/unstable/httpapi/HttpApiClient.ts +@@ -707 +707 @@ +-const paramsRegExp = /(\/?):(\w+)(\?)?/g ++const paramsRegExp = /(^|[/.]):(\w+)(\?)?(?=\/|\.|$)|\{([^}:]+)(:\*)?\}/g +@@ -713,7 +713,8 @@ const compilePath = (path: string) => { + paramsRegExp.lastIndex = 0 + return (params: Record) => { + paramsRegExp.lastIndex = 0 +- return path.replace(paramsRegExp, (_, slash: string, key: string, optional: string | undefined) => { ++ return path.replace(paramsRegExp, (_, slash: string | undefined, colonKey: string | undefined, optional: string | undefined, templateKey: string | undefined, wildcard: string | undefined) => { ++ const key = colonKey ?? templateKey + const value = params[key] + if (value === undefined) { + if (optional !== undefined) { +@@ -721,7 +722,8 @@ const compilePath = (path: string) => { + } + throw new Error(`Missing path parameter: ${key}`) + } +- return `${slash}${encodeURIComponent(value)}` ++ const encoded = wildcard === undefined ? encodeURIComponent(value) : value.split("/").map(encodeURIComponent).join("/") ++ return colonKey === undefined ? encoded : `${slash}${encoded}` + }) + } + } diff --git a/src/unstable/httpapi/HttpApiEndpoint.ts b/src/unstable/httpapi/HttpApiEndpoint.ts index 331b4ff84e85e70193eda8371ce63ebed659b9b9..c30c0fc94cb3751b8b6a43f551e3999c7d10d04d 100644 --- a/src/unstable/httpapi/HttpApiEndpoint.ts diff --git a/src/generated/openapi-api.gen.ts b/src/generated/openapi-api.gen.ts index 4d29fad..0ea3f74 100644 --- a/src/generated/openapi-api.gen.ts +++ b/src/generated/openapi-api.gen.ts @@ -3706,52 +3706,52 @@ class SnippetsGroup extends HttpApiGroup.make("Snippets") .annotate(OpenApi.Identifier, "snippets.create") .annotate(OpenApi.Summary, "Create snippet") .annotate(OpenApi.Description, "Creates a reusable code snippet in the workspace. Snippets are async JavaScript functions executed in a sandboxed runtime with access to platform.request() for API calls."), - HttpApiEndpoint.get("snippetsListUsage", "/snippets%3Ausage", { headers: SnippetsListUsageHeaders, success: SnippetsListUsage200, error: [SnippetsListUsage401.pipe(HttpApiSchema.status(401)), SnippetsListUsage403.pipe(HttpApiSchema.status(403))] }) + HttpApiEndpoint.get("snippetsListUsage", "/snippets:usage", { headers: SnippetsListUsageHeaders, success: SnippetsListUsage200, error: [SnippetsListUsage401.pipe(HttpApiSchema.status(401)), SnippetsListUsage403.pipe(HttpApiSchema.status(403))] }) .middleware(BearerAuthSecurityMiddleware) .annotate(OpenApi.Identifier, "snippets.listUsage") .annotate(OpenApi.Summary, "List snippet dashboard usage in workspace") .annotate(OpenApi.Description, "Returns dashboard references for snippets in the workspace specified in the workspace context."), - HttpApiEndpoint.get("snippetsGetUsage", "/snippets/:id%3Ausage", { params: SnippetsGetUsagePathParams, success: SnippetsGetUsage200, error: [SnippetsGetUsage401.pipe(HttpApiSchema.status(401)), SnippetsGetUsage403.pipe(HttpApiSchema.status(403)), SnippetsGetUsage404.pipe(HttpApiSchema.status(404))] }) + HttpApiEndpoint.get("snippetsGetUsage", "/snippets/{id}:usage", { params: SnippetsGetUsagePathParams, success: SnippetsGetUsage200, error: [SnippetsGetUsage401.pipe(HttpApiSchema.status(401)), SnippetsGetUsage403.pipe(HttpApiSchema.status(403)), SnippetsGetUsage404.pipe(HttpApiSchema.status(404))] }) .middleware(BearerAuthSecurityMiddleware) .annotate(OpenApi.Identifier, "snippets.getUsage") .annotate(OpenApi.Summary, "Get snippet dashboard usage") .annotate(OpenApi.Description, "Returns dashboard references for one snippet."), - HttpApiEndpoint.get("snippetsGet", "/snippets/:id", { params: SnippetsGetPathParams, success: SnippetsGet200, error: [SnippetsGet401.pipe(HttpApiSchema.status(401)), SnippetsGet403.pipe(HttpApiSchema.status(403)), SnippetsGet404.pipe(HttpApiSchema.status(404))] }) + HttpApiEndpoint.get("snippetsGet", "/snippets/{id}", { params: SnippetsGetPathParams, success: SnippetsGet200, error: [SnippetsGet401.pipe(HttpApiSchema.status(401)), SnippetsGet403.pipe(HttpApiSchema.status(403)), SnippetsGet404.pipe(HttpApiSchema.status(404))] }) .middleware(BearerAuthSecurityMiddleware) .annotate(OpenApi.Identifier, "snippets.get") .annotate(OpenApi.Summary, "Get snippet details") .annotate(OpenApi.Description, "Returns a snippet including its code and display type."), - HttpApiEndpoint.delete("snippetsDelete", "/snippets/:id", { params: SnippetsDeletePathParams, headers: SnippetsDeleteHeaders, success: HttpApiSchema.Empty(204), error: [SnippetsDelete401.pipe(HttpApiSchema.status(401)), SnippetsDelete404.pipe(HttpApiSchema.status(404)), SnippetsDelete409.pipe(HttpApiSchema.status(409))] }) + HttpApiEndpoint.delete("snippetsDelete", "/snippets/{id}", { params: SnippetsDeletePathParams, headers: SnippetsDeleteHeaders, success: HttpApiSchema.Empty(204), error: [SnippetsDelete401.pipe(HttpApiSchema.status(401)), SnippetsDelete404.pipe(HttpApiSchema.status(404)), SnippetsDelete409.pipe(HttpApiSchema.status(409))] }) .middleware(BearerAuthSecurityMiddleware) .annotate(OpenApi.Identifier, "snippets.delete") .annotate(OpenApi.Summary, "Archive snippet") .annotate(OpenApi.Description, "Archives a snippet while preserving its runs and dashboard revision history. Fails with 409 while an active dashboard references it."), - HttpApiEndpoint.patch("snippetsUpdate", "/snippets/:id", { params: SnippetsUpdatePathParams, headers: SnippetsUpdateHeaders, payload: [SnippetsUpdateRequestJson, HttpApiSchema.NoContent], success: SnippetsUpdate200, error: [SnippetsUpdate401.pipe(HttpApiSchema.status(401)), SnippetsUpdate404.pipe(HttpApiSchema.status(404)), SnippetsUpdate409.pipe(HttpApiSchema.status(409))] }) + HttpApiEndpoint.patch("snippetsUpdate", "/snippets/{id}", { params: SnippetsUpdatePathParams, headers: SnippetsUpdateHeaders, payload: [SnippetsUpdateRequestJson, HttpApiSchema.NoContent], success: SnippetsUpdate200, error: [SnippetsUpdate401.pipe(HttpApiSchema.status(401)), SnippetsUpdate404.pipe(HttpApiSchema.status(404)), SnippetsUpdate409.pipe(HttpApiSchema.status(409))] }) .middleware(BearerAuthSecurityMiddleware) .annotate(OpenApi.Identifier, "snippets.update") .annotate(OpenApi.Summary, "Update snippet") .annotate(OpenApi.Description, "Updates snippet properties. Only provided fields are changed. Dashboards using this snippet will pick up code changes on next run."), - HttpApiEndpoint.post("snippetsExecute", "/snippets%3Aexecute", { headers: SnippetsExecuteHeaders, payload: [SnippetsExecuteRequestJson, HttpApiSchema.NoContent], success: SnippetsExecute200, error: [SnippetsExecute401.pipe(HttpApiSchema.status(401)), SnippetsExecute403.pipe(HttpApiSchema.status(403)), SnippetsExecute422.pipe(HttpApiSchema.status(422))] }) + HttpApiEndpoint.post("snippetsExecute", "/snippets:execute", { headers: SnippetsExecuteHeaders, payload: [SnippetsExecuteRequestJson, HttpApiSchema.NoContent], success: SnippetsExecute200, error: [SnippetsExecute401.pipe(HttpApiSchema.status(401)), SnippetsExecute403.pipe(HttpApiSchema.status(403)), SnippetsExecute422.pipe(HttpApiSchema.status(422))] }) .middleware(BearerAuthSecurityMiddleware) .annotate(OpenApi.Identifier, "snippets.execute") .annotate(OpenApi.Summary, "Execute ad-hoc snippet code") .annotate(OpenApi.Description, "Executes ad-hoc JavaScript in the snippet sandbox and returns the synchronous result. Does not persist a snippet or run resource."), - HttpApiEndpoint.post("snippetsExecuteStored", "/snippets/:id%3Aexecute", { params: SnippetsExecuteStoredPathParams, payload: [SnippetsExecuteStoredRequestJson, HttpApiSchema.NoContent], success: SnippetsExecuteStored200, error: [SnippetsExecuteStored401.pipe(HttpApiSchema.status(401)), SnippetsExecuteStored404.pipe(HttpApiSchema.status(404)), SnippetsExecuteStored409.pipe(HttpApiSchema.status(409)), SnippetsExecuteStored422.pipe(HttpApiSchema.status(422))] }) + HttpApiEndpoint.post("snippetsExecuteStored", "/snippets/{id}:execute", { params: SnippetsExecuteStoredPathParams, payload: [SnippetsExecuteStoredRequestJson, HttpApiSchema.NoContent], success: SnippetsExecuteStored200, error: [SnippetsExecuteStored401.pipe(HttpApiSchema.status(401)), SnippetsExecuteStored404.pipe(HttpApiSchema.status(404)), SnippetsExecuteStored409.pipe(HttpApiSchema.status(409)), SnippetsExecuteStored422.pipe(HttpApiSchema.status(422))] }) .middleware(BearerAuthSecurityMiddleware) .annotate(OpenApi.Identifier, "snippets.executeStored") .annotate(OpenApi.Summary, "Execute stored snippet") .annotate(OpenApi.Description, "Fetches a stored snippet by ID server-side, executes its code in the snippet sandbox, and returns the synchronous result."), - HttpApiEndpoint.get("snippetsListRuns", "/snippets/:id/runs", { params: SnippetsListRunsPathParams, query: SnippetsListRunsQuery, success: SnippetsListRuns200, error: [SnippetsListRuns401.pipe(HttpApiSchema.status(401)), SnippetsListRuns403.pipe(HttpApiSchema.status(403))] }) + HttpApiEndpoint.get("snippetsListRuns", "/snippets/{id}/runs", { params: SnippetsListRunsPathParams, query: SnippetsListRunsQuery, success: SnippetsListRuns200, error: [SnippetsListRuns401.pipe(HttpApiSchema.status(401)), SnippetsListRuns403.pipe(HttpApiSchema.status(403))] }) .middleware(BearerAuthSecurityMiddleware) .annotate(OpenApi.Identifier, "snippets.listRuns") .annotate(OpenApi.Summary, "List snippet runs") .annotate(OpenApi.Description, "Returns runs for a snippet. Use `view=basic` for a compact listing."), - HttpApiEndpoint.post("snippetsCreateRun", "/snippets/:id/runs", { params: SnippetsCreateRunPathParams, headers: SnippetsCreateRunHeaders, payload: [SnippetsCreateRunRequestJson, HttpApiSchema.NoContent], success: SnippetsCreateRun201.pipe(HttpApiSchema.status(201)), error: [SnippetsCreateRun401.pipe(HttpApiSchema.status(401)), SnippetsCreateRun403.pipe(HttpApiSchema.status(403)), SnippetsCreateRun409.pipe(HttpApiSchema.status(409)), SnippetsCreateRun422.pipe(HttpApiSchema.status(422))] }) + HttpApiEndpoint.post("snippetsCreateRun", "/snippets/{id}/runs", { params: SnippetsCreateRunPathParams, headers: SnippetsCreateRunHeaders, payload: [SnippetsCreateRunRequestJson, HttpApiSchema.NoContent], success: SnippetsCreateRun201.pipe(HttpApiSchema.status(201)), error: [SnippetsCreateRun401.pipe(HttpApiSchema.status(401)), SnippetsCreateRun403.pipe(HttpApiSchema.status(403)), SnippetsCreateRun409.pipe(HttpApiSchema.status(409)), SnippetsCreateRun422.pipe(HttpApiSchema.status(422))] }) .middleware(BearerAuthSecurityMiddleware) .annotate(OpenApi.Identifier, "snippets.createRun") .annotate(OpenApi.Summary, "Create snippet run") .annotate(OpenApi.Description, "Creates a new snippet run resource under a snippet and starts execution. Idempotent with Idempotency-Key; callers receive the created run resource and Location header."), - HttpApiEndpoint.get("snippetsGetRun", "/snippets/:id/runs/:run_id", { params: SnippetsGetRunPathParams, success: SnippetsGetRun200, error: [SnippetsGetRun401.pipe(HttpApiSchema.status(401)), SnippetsGetRun403.pipe(HttpApiSchema.status(403)), SnippetsGetRun404.pipe(HttpApiSchema.status(404))] }) + HttpApiEndpoint.get("snippetsGetRun", "/snippets/{id}/runs/{run_id}", { params: SnippetsGetRunPathParams, success: SnippetsGetRun200, error: [SnippetsGetRun401.pipe(HttpApiSchema.status(401)), SnippetsGetRun403.pipe(HttpApiSchema.status(403)), SnippetsGetRun404.pipe(HttpApiSchema.status(404))] }) .middleware(BearerAuthSecurityMiddleware) .annotate(OpenApi.Identifier, "snippets.getRun") .annotate(OpenApi.Summary, "Get snippet run") @@ -3764,7 +3764,7 @@ class SnippetRunsGroup extends HttpApiGroup.make("Snippet Runs") .annotate(OpenApi.Identifier, "snippetRuns.list") .annotate(OpenApi.Summary, "List workspace snippet runs") .annotate(OpenApi.Description, "Returns durable snippet execution activity for the selected workspace, newest first."), - HttpApiEndpoint.get("snippetRunsGet", "/snippet_runs/:id", { params: SnippetRunsGetPathParams, headers: SnippetRunsGetHeaders, success: SnippetRunsGet200, error: [SnippetRunsGet401.pipe(HttpApiSchema.status(401)), SnippetRunsGet403.pipe(HttpApiSchema.status(403)), SnippetRunsGet404.pipe(HttpApiSchema.status(404))] }) + HttpApiEndpoint.get("snippetRunsGet", "/snippet_runs/{id}", { params: SnippetRunsGetPathParams, headers: SnippetRunsGetHeaders, success: SnippetRunsGet200, error: [SnippetRunsGet401.pipe(HttpApiSchema.status(401)), SnippetRunsGet403.pipe(HttpApiSchema.status(403)), SnippetRunsGet404.pipe(HttpApiSchema.status(404))] }) .middleware(BearerAuthSecurityMiddleware) .annotate(OpenApi.Identifier, "snippetRuns.get") .annotate(OpenApi.Summary, "Get workspace snippet run") @@ -3786,67 +3786,67 @@ class DashboardsGroup extends HttpApiGroup.make("Dashboards") .annotate(OpenApi.Identifier, "dashboards.getWorkspaceOverview") .annotate(OpenApi.Summary, "Get the workspace overview dashboard") .annotate(OpenApi.Description, "Returns the unique shared Workspace overview and its ordered widget configuration."), - HttpApiEndpoint.get("dashboardsGet", "/dashboards/:id", { params: DashboardsGetPathParams, success: DashboardsGet200, error: [DashboardsGet401.pipe(HttpApiSchema.status(401)), DashboardsGet403.pipe(HttpApiSchema.status(403)), DashboardsGet404.pipe(HttpApiSchema.status(404))] }) + HttpApiEndpoint.get("dashboardsGet", "/dashboards/{id}", { params: DashboardsGetPathParams, success: DashboardsGet200, error: [DashboardsGet401.pipe(HttpApiSchema.status(401)), DashboardsGet403.pipe(HttpApiSchema.status(403)), DashboardsGet404.pipe(HttpApiSchema.status(404))] }) .middleware(BearerAuthSecurityMiddleware) .annotate(OpenApi.Identifier, "dashboards.get") .annotate(OpenApi.Summary, "Get dashboard details") .annotate(OpenApi.Description, "Returns a dashboard including its widget layout and snippet references."), - HttpApiEndpoint.delete("dashboardsDelete", "/dashboards/:id", { params: DashboardsDeletePathParams, headers: DashboardsDeleteHeaders, success: HttpApiSchema.Empty(204), error: [DashboardsDelete401.pipe(HttpApiSchema.status(401)), DashboardsDelete404.pipe(HttpApiSchema.status(404)), DashboardsDelete409.pipe(HttpApiSchema.status(409))] }) + HttpApiEndpoint.delete("dashboardsDelete", "/dashboards/{id}", { params: DashboardsDeletePathParams, headers: DashboardsDeleteHeaders, success: HttpApiSchema.Empty(204), error: [DashboardsDelete401.pipe(HttpApiSchema.status(401)), DashboardsDelete404.pipe(HttpApiSchema.status(404)), DashboardsDelete409.pipe(HttpApiSchema.status(409))] }) .middleware(BearerAuthSecurityMiddleware) .annotate(OpenApi.Identifier, "dashboards.delete") .annotate(OpenApi.Summary, "Delete dashboard") .annotate(OpenApi.Description, "Permanently deletes a dashboard. Referenced snippets are not affected."), - HttpApiEndpoint.patch("dashboardsUpdate", "/dashboards/:id", { params: DashboardsUpdatePathParams, headers: DashboardsUpdateHeaders, payload: [DashboardsUpdateRequestJson, HttpApiSchema.NoContent], success: DashboardsUpdate200, error: [DashboardsUpdate401.pipe(HttpApiSchema.status(401)), DashboardsUpdate404.pipe(HttpApiSchema.status(404)), DashboardsUpdate409.pipe(HttpApiSchema.status(409))] }) + HttpApiEndpoint.patch("dashboardsUpdate", "/dashboards/{id}", { params: DashboardsUpdatePathParams, headers: DashboardsUpdateHeaders, payload: [DashboardsUpdateRequestJson, HttpApiSchema.NoContent], success: DashboardsUpdate200, error: [DashboardsUpdate401.pipe(HttpApiSchema.status(401)), DashboardsUpdate404.pipe(HttpApiSchema.status(404)), DashboardsUpdate409.pipe(HttpApiSchema.status(409))] }) .middleware(BearerAuthSecurityMiddleware) .annotate(OpenApi.Identifier, "dashboards.update") .annotate(OpenApi.Summary, "Update dashboard") .annotate(OpenApi.Description, "Update dashboard metadata. Widget mutations use the `/widgets` sub-collection."), - HttpApiEndpoint.get("dashboardsListRevisions", "/dashboards/:id/revisions", { params: DashboardsListRevisionsPathParams, query: DashboardsListRevisionsQuery, success: DashboardsListRevisions200, error: [DashboardsListRevisions401.pipe(HttpApiSchema.status(401)), DashboardsListRevisions403.pipe(HttpApiSchema.status(403)), DashboardsListRevisions404.pipe(HttpApiSchema.status(404)), DashboardsListRevisions422.pipe(HttpApiSchema.status(422))] }) + HttpApiEndpoint.get("dashboardsListRevisions", "/dashboards/{id}/revisions", { params: DashboardsListRevisionsPathParams, query: DashboardsListRevisionsQuery, success: DashboardsListRevisions200, error: [DashboardsListRevisions401.pipe(HttpApiSchema.status(401)), DashboardsListRevisions403.pipe(HttpApiSchema.status(403)), DashboardsListRevisions404.pipe(HttpApiSchema.status(404)), DashboardsListRevisions422.pipe(HttpApiSchema.status(422))] }) .middleware(BearerAuthSecurityMiddleware) .annotate(OpenApi.Identifier, "dashboards.listRevisions") .annotate(OpenApi.Summary, "List dashboard revisions") .annotate(OpenApi.Description, "Lists immutable dashboard revisions from newest to oldest."), - HttpApiEndpoint.post("dashboardsCreateRevision", "/dashboards/:id/revisions", { params: DashboardsCreateRevisionPathParams, headers: DashboardsCreateRevisionHeaders, payload: DashboardsCreateRevisionRequestJson, success: HttpApiSchema.WithHeaders(DashboardsCreateRevision201.pipe(HttpApiSchema.status(201)), DashboardsCreateRevision201Headers), error: [DashboardsCreateRevision401.pipe(HttpApiSchema.status(401)), DashboardsCreateRevision403.pipe(HttpApiSchema.status(403)), DashboardsCreateRevision404.pipe(HttpApiSchema.status(404)), DashboardsCreateRevision409.pipe(HttpApiSchema.status(409)), DashboardsCreateRevision422.pipe(HttpApiSchema.status(422))] }) + HttpApiEndpoint.post("dashboardsCreateRevision", "/dashboards/{id}/revisions", { params: DashboardsCreateRevisionPathParams, headers: DashboardsCreateRevisionHeaders, payload: DashboardsCreateRevisionRequestJson, success: HttpApiSchema.WithHeaders(DashboardsCreateRevision201.pipe(HttpApiSchema.status(201)), DashboardsCreateRevision201Headers), error: [DashboardsCreateRevision401.pipe(HttpApiSchema.status(401)), DashboardsCreateRevision403.pipe(HttpApiSchema.status(403)), DashboardsCreateRevision404.pipe(HttpApiSchema.status(404)), DashboardsCreateRevision409.pipe(HttpApiSchema.status(409)), DashboardsCreateRevision422.pipe(HttpApiSchema.status(422))] }) .middleware(BearerAuthSecurityMiddleware) .annotate(OpenApi.Identifier, "dashboards.createRevision") .annotate(OpenApi.Summary, "Create dashboard revision") .annotate(OpenApi.Description, "Atomically saves and activates a complete ordered dashboard snapshot as one immutable revision."), - HttpApiEndpoint.get("dashboardsGetRevision", "/dashboards/:id/revisions/:revision_id", { params: DashboardsGetRevisionPathParams, success: DashboardsGetRevision200, error: [DashboardsGetRevision401.pipe(HttpApiSchema.status(401)), DashboardsGetRevision403.pipe(HttpApiSchema.status(403)), DashboardsGetRevision404.pipe(HttpApiSchema.status(404)), DashboardsGetRevision422.pipe(HttpApiSchema.status(422))] }) + HttpApiEndpoint.get("dashboardsGetRevision", "/dashboards/{id}/revisions/{revision_id}", { params: DashboardsGetRevisionPathParams, success: DashboardsGetRevision200, error: [DashboardsGetRevision401.pipe(HttpApiSchema.status(401)), DashboardsGetRevision403.pipe(HttpApiSchema.status(403)), DashboardsGetRevision404.pipe(HttpApiSchema.status(404)), DashboardsGetRevision422.pipe(HttpApiSchema.status(422))] }) .middleware(BearerAuthSecurityMiddleware) .annotate(OpenApi.Identifier, "dashboards.getRevision") .annotate(OpenApi.Summary, "Get dashboard revision") .annotate(OpenApi.Description, "Returns one immutable dashboard revision and its snippet version drift."), - HttpApiEndpoint.post("dashboardsRestoreRevision", "/dashboards/:id/revisions/:revision_id%3Arestore", { params: DashboardsRestoreRevisionPathParams, headers: DashboardsRestoreRevisionHeaders, payload: DashboardsRestoreRevisionRequestJson, success: HttpApiSchema.WithHeaders(DashboardsRestoreRevision201.pipe(HttpApiSchema.status(201)), DashboardsRestoreRevision201Headers), error: [DashboardsRestoreRevision401.pipe(HttpApiSchema.status(401)), DashboardsRestoreRevision403.pipe(HttpApiSchema.status(403)), DashboardsRestoreRevision404.pipe(HttpApiSchema.status(404)), DashboardsRestoreRevision409.pipe(HttpApiSchema.status(409)), DashboardsRestoreRevision422.pipe(HttpApiSchema.status(422))] }) + HttpApiEndpoint.post("dashboardsRestoreRevision", "/dashboards/{id}/revisions/{revision_id}:restore", { params: DashboardsRestoreRevisionPathParams, headers: DashboardsRestoreRevisionHeaders, payload: DashboardsRestoreRevisionRequestJson, success: HttpApiSchema.WithHeaders(DashboardsRestoreRevision201.pipe(HttpApiSchema.status(201)), DashboardsRestoreRevision201Headers), error: [DashboardsRestoreRevision401.pipe(HttpApiSchema.status(401)), DashboardsRestoreRevision403.pipe(HttpApiSchema.status(403)), DashboardsRestoreRevision404.pipe(HttpApiSchema.status(404)), DashboardsRestoreRevision409.pipe(HttpApiSchema.status(409)), DashboardsRestoreRevision422.pipe(HttpApiSchema.status(422))] }) .middleware(BearerAuthSecurityMiddleware) .annotate(OpenApi.Identifier, "dashboards.restoreRevision") .annotate(OpenApi.Summary, "Restore dashboard revision") .annotate(OpenApi.Description, "Restores an immutable snapshot by creating and activating a new dashboard revision."), - HttpApiEndpoint.post("dashboardsResetToRecommended", "/dashboards/:id%3AresetToRecommended", { params: DashboardsResetToRecommendedPathParams, headers: DashboardsResetToRecommendedHeaders, success: HttpApiSchema.WithHeaders(DashboardsResetToRecommended201.pipe(HttpApiSchema.status(201)), DashboardsResetToRecommended201Headers), error: [DashboardsResetToRecommended401.pipe(HttpApiSchema.status(401)), DashboardsResetToRecommended403.pipe(HttpApiSchema.status(403)), DashboardsResetToRecommended404.pipe(HttpApiSchema.status(404)), DashboardsResetToRecommended409.pipe(HttpApiSchema.status(409)), DashboardsResetToRecommended422.pipe(HttpApiSchema.status(422))] }) + HttpApiEndpoint.post("dashboardsResetToRecommended", "/dashboards/{id}:resetToRecommended", { params: DashboardsResetToRecommendedPathParams, headers: DashboardsResetToRecommendedHeaders, success: HttpApiSchema.WithHeaders(DashboardsResetToRecommended201.pipe(HttpApiSchema.status(201)), DashboardsResetToRecommended201Headers), error: [DashboardsResetToRecommended401.pipe(HttpApiSchema.status(401)), DashboardsResetToRecommended403.pipe(HttpApiSchema.status(403)), DashboardsResetToRecommended404.pipe(HttpApiSchema.status(404)), DashboardsResetToRecommended409.pipe(HttpApiSchema.status(409)), DashboardsResetToRecommended422.pipe(HttpApiSchema.status(422))] }) .middleware(BearerAuthSecurityMiddleware) .annotate(OpenApi.Identifier, "dashboards.resetToRecommended") .annotate(OpenApi.Summary, "Reset the Workspace overview to the recommended configuration") .annotate(OpenApi.Description, "Replaces the shared Workspace overview configuration with the current recommended built-ins and creates one immutable revision."), - HttpApiEndpoint.get("dashboardsListWidgets", "/dashboards/:id/widgets", { params: DashboardsListWidgetsPathParams, query: DashboardsListWidgetsQuery, success: DashboardsListWidgets200, error: [DashboardsListWidgets401.pipe(HttpApiSchema.status(401)), DashboardsListWidgets403.pipe(HttpApiSchema.status(403)), DashboardsListWidgets404.pipe(HttpApiSchema.status(404))] }) + HttpApiEndpoint.get("dashboardsListWidgets", "/dashboards/{id}/widgets", { params: DashboardsListWidgetsPathParams, query: DashboardsListWidgetsQuery, success: DashboardsListWidgets200, error: [DashboardsListWidgets401.pipe(HttpApiSchema.status(401)), DashboardsListWidgets403.pipe(HttpApiSchema.status(403)), DashboardsListWidgets404.pipe(HttpApiSchema.status(404))] }) .middleware(BearerAuthSecurityMiddleware) .annotate(OpenApi.Identifier, "dashboards.listWidgets") .annotate(OpenApi.Summary, "List dashboard widgets") .annotate(OpenApi.Description, "Lists widgets for a dashboard."), - HttpApiEndpoint.post("dashboardsCreateWidget", "/dashboards/:id/widgets", { params: DashboardsCreateWidgetPathParams, headers: DashboardsCreateWidgetHeaders, payload: [DashboardsCreateWidgetRequestJson, HttpApiSchema.NoContent], success: DashboardsCreateWidget201.pipe(HttpApiSchema.status(201)), error: [DashboardsCreateWidget401.pipe(HttpApiSchema.status(401)), DashboardsCreateWidget403.pipe(HttpApiSchema.status(403)), DashboardsCreateWidget404.pipe(HttpApiSchema.status(404)), DashboardsCreateWidget409.pipe(HttpApiSchema.status(409)), DashboardsCreateWidget422.pipe(HttpApiSchema.status(422))] }) + HttpApiEndpoint.post("dashboardsCreateWidget", "/dashboards/{id}/widgets", { params: DashboardsCreateWidgetPathParams, headers: DashboardsCreateWidgetHeaders, payload: [DashboardsCreateWidgetRequestJson, HttpApiSchema.NoContent], success: DashboardsCreateWidget201.pipe(HttpApiSchema.status(201)), error: [DashboardsCreateWidget401.pipe(HttpApiSchema.status(401)), DashboardsCreateWidget403.pipe(HttpApiSchema.status(403)), DashboardsCreateWidget404.pipe(HttpApiSchema.status(404)), DashboardsCreateWidget409.pipe(HttpApiSchema.status(409)), DashboardsCreateWidget422.pipe(HttpApiSchema.status(422))] }) .middleware(BearerAuthSecurityMiddleware) .annotate(OpenApi.Identifier, "dashboards.createWidget") .annotate(OpenApi.Summary, "Create dashboard widget") .annotate(OpenApi.Description, "Creates a widget as a child resource under a dashboard."), - HttpApiEndpoint.get("dashboardsGetWidget", "/dashboards/:id/widgets/:wgt_id", { params: DashboardsGetWidgetPathParams, success: DashboardsGetWidget200, error: [DashboardsGetWidget401.pipe(HttpApiSchema.status(401)), DashboardsGetWidget403.pipe(HttpApiSchema.status(403)), DashboardsGetWidget404.pipe(HttpApiSchema.status(404))] }) + HttpApiEndpoint.get("dashboardsGetWidget", "/dashboards/{id}/widgets/{wgt_id}", { params: DashboardsGetWidgetPathParams, success: DashboardsGetWidget200, error: [DashboardsGetWidget401.pipe(HttpApiSchema.status(401)), DashboardsGetWidget403.pipe(HttpApiSchema.status(403)), DashboardsGetWidget404.pipe(HttpApiSchema.status(404))] }) .middleware(BearerAuthSecurityMiddleware) .annotate(OpenApi.Identifier, "dashboards.getWidget") .annotate(OpenApi.Summary, "Get dashboard widget") .annotate(OpenApi.Description, "Returns a single dashboard widget."), - HttpApiEndpoint.delete("dashboardsDeleteWidget", "/dashboards/:id/widgets/:wgt_id", { params: DashboardsDeleteWidgetPathParams, headers: DashboardsDeleteWidgetHeaders, success: HttpApiSchema.Empty(204), error: [DashboardsDeleteWidget401.pipe(HttpApiSchema.status(401)), DashboardsDeleteWidget403.pipe(HttpApiSchema.status(403)), DashboardsDeleteWidget404.pipe(HttpApiSchema.status(404)), DashboardsDeleteWidget409.pipe(HttpApiSchema.status(409))] }) + HttpApiEndpoint.delete("dashboardsDeleteWidget", "/dashboards/{id}/widgets/{wgt_id}", { params: DashboardsDeleteWidgetPathParams, headers: DashboardsDeleteWidgetHeaders, success: HttpApiSchema.Empty(204), error: [DashboardsDeleteWidget401.pipe(HttpApiSchema.status(401)), DashboardsDeleteWidget403.pipe(HttpApiSchema.status(403)), DashboardsDeleteWidget404.pipe(HttpApiSchema.status(404)), DashboardsDeleteWidget409.pipe(HttpApiSchema.status(409))] }) .middleware(BearerAuthSecurityMiddleware) .annotate(OpenApi.Identifier, "dashboards.deleteWidget") .annotate(OpenApi.Summary, "Delete dashboard widget") .annotate(OpenApi.Description, "Deletes a dashboard widget. Snippet references are preserved."), - HttpApiEndpoint.patch("dashboardsUpdateWidget", "/dashboards/:id/widgets/:wgt_id", { params: DashboardsUpdateWidgetPathParams, headers: DashboardsUpdateWidgetHeaders, payload: [DashboardsUpdateWidgetRequestJson, HttpApiSchema.NoContent], success: DashboardsUpdateWidget200, error: [DashboardsUpdateWidget401.pipe(HttpApiSchema.status(401)), DashboardsUpdateWidget403.pipe(HttpApiSchema.status(403)), DashboardsUpdateWidget404.pipe(HttpApiSchema.status(404)), DashboardsUpdateWidget409.pipe(HttpApiSchema.status(409)), DashboardsUpdateWidget422.pipe(HttpApiSchema.status(422))] }) + HttpApiEndpoint.patch("dashboardsUpdateWidget", "/dashboards/{id}/widgets/{wgt_id}", { params: DashboardsUpdateWidgetPathParams, headers: DashboardsUpdateWidgetHeaders, payload: [DashboardsUpdateWidgetRequestJson, HttpApiSchema.NoContent], success: DashboardsUpdateWidget200, error: [DashboardsUpdateWidget401.pipe(HttpApiSchema.status(401)), DashboardsUpdateWidget403.pipe(HttpApiSchema.status(403)), DashboardsUpdateWidget404.pipe(HttpApiSchema.status(404)), DashboardsUpdateWidget409.pipe(HttpApiSchema.status(409)), DashboardsUpdateWidget422.pipe(HttpApiSchema.status(422))] }) .middleware(BearerAuthSecurityMiddleware) .annotate(OpenApi.Identifier, "dashboards.updateWidget") .annotate(OpenApi.Summary, "Update dashboard widget") @@ -3864,22 +3864,22 @@ class ProductsGroup extends HttpApiGroup.make("Products") .annotate(OpenApi.Identifier, "products.create") .annotate(OpenApi.Summary, "Create product") .annotate(OpenApi.Description, "Creates a Product backed by an existing Package and package version pin. Package source import belongs to the Packages API."), - HttpApiEndpoint.get("productsGet", "/products/:id", { params: ProductsGetPathParams, headers: ProductsGetHeaders, success: ProductsGet200, error: [ProductsGet401.pipe(HttpApiSchema.status(401)), ProductsGet403.pipe(HttpApiSchema.status(403)), ProductsGet404.pipe(HttpApiSchema.status(404))] }) + HttpApiEndpoint.get("productsGet", "/products/{id}", { params: ProductsGetPathParams, headers: ProductsGetHeaders, success: ProductsGet200, error: [ProductsGet401.pipe(HttpApiSchema.status(401)), ProductsGet403.pipe(HttpApiSchema.status(403)), ProductsGet404.pipe(HttpApiSchema.status(404))] }) .middleware(BearerAuthSecurityMiddleware) .annotate(OpenApi.Identifier, "products.get") .annotate(OpenApi.Summary, "Get product details") .annotate(OpenApi.Description, "Returns product metadata including the backing Package and marketplace settings."), - HttpApiEndpoint.patch("productsUpdate", "/products/:id", { params: ProductsUpdatePathParams, headers: ProductsUpdateHeaders, payload: [ProductsUpdateRequestJson, HttpApiSchema.NoContent], success: ProductsUpdate200, error: [ProductsUpdate401.pipe(HttpApiSchema.status(401)), ProductsUpdate403.pipe(HttpApiSchema.status(403)), ProductsUpdate404.pipe(HttpApiSchema.status(404)), ProductsUpdate409.pipe(HttpApiSchema.status(409)), ProductsUpdate422.pipe(HttpApiSchema.status(422))] }) + HttpApiEndpoint.patch("productsUpdate", "/products/{id}", { params: ProductsUpdatePathParams, headers: ProductsUpdateHeaders, payload: [ProductsUpdateRequestJson, HttpApiSchema.NoContent], success: ProductsUpdate200, error: [ProductsUpdate401.pipe(HttpApiSchema.status(401)), ProductsUpdate403.pipe(HttpApiSchema.status(403)), ProductsUpdate404.pipe(HttpApiSchema.status(404)), ProductsUpdate409.pipe(HttpApiSchema.status(409)), ProductsUpdate422.pipe(HttpApiSchema.status(422))] }) .middleware(BearerAuthSecurityMiddleware) .annotate(OpenApi.Identifier, "products.update") .annotate(OpenApi.Summary, "Update product") .annotate(OpenApi.Description, "Updates Product metadata, marketplace listing state, and the package version pin for future offers and installs."), - HttpApiEndpoint.post("productsArchive", "/products/:id%3Aarchive", { params: ProductsArchivePathParams, headers: ProductsArchiveHeaders, payload: [ProductsArchiveRequestJson, HttpApiSchema.NoContent], success: ProductsArchive200, error: [ProductsArchive401.pipe(HttpApiSchema.status(401)), ProductsArchive403.pipe(HttpApiSchema.status(403)), ProductsArchive404.pipe(HttpApiSchema.status(404)), ProductsArchive409.pipe(HttpApiSchema.status(409)), ProductsArchive422.pipe(HttpApiSchema.status(422))] }) + HttpApiEndpoint.post("productsArchive", "/products/{id}:archive", { params: ProductsArchivePathParams, headers: ProductsArchiveHeaders, payload: [ProductsArchiveRequestJson, HttpApiSchema.NoContent], success: ProductsArchive200, error: [ProductsArchive401.pipe(HttpApiSchema.status(401)), ProductsArchive403.pipe(HttpApiSchema.status(403)), ProductsArchive404.pipe(HttpApiSchema.status(404)), ProductsArchive409.pipe(HttpApiSchema.status(409)), ProductsArchive422.pipe(HttpApiSchema.status(422))] }) .middleware(BearerAuthSecurityMiddleware) .annotate(OpenApi.Identifier, "products.archive") .annotate(OpenApi.Summary, "Archive product") .annotate(OpenApi.Description, "Archives the product and removes it from active marketplace listings. The row persists with state `archived` for audit/history/revenue-attribution. Active installs and past orders are unaffected; backing packages remain independently managed and unchanged. Dashboard callers can still render historical product context."), - HttpApiEndpoint.post("productsUnarchive", "/products/:id%3Aunarchive", { params: ProductsUnarchivePathParams, headers: ProductsUnarchiveHeaders, payload: [ProductsUnarchiveRequestJson, HttpApiSchema.NoContent], success: ProductsUnarchive200, error: [ProductsUnarchive401.pipe(HttpApiSchema.status(401)), ProductsUnarchive403.pipe(HttpApiSchema.status(403)), ProductsUnarchive404.pipe(HttpApiSchema.status(404)), ProductsUnarchive409.pipe(HttpApiSchema.status(409)), ProductsUnarchive422.pipe(HttpApiSchema.status(422))] }) + HttpApiEndpoint.post("productsUnarchive", "/products/{id}:unarchive", { params: ProductsUnarchivePathParams, headers: ProductsUnarchiveHeaders, payload: [ProductsUnarchiveRequestJson, HttpApiSchema.NoContent], success: ProductsUnarchive200, error: [ProductsUnarchive401.pipe(HttpApiSchema.status(401)), ProductsUnarchive403.pipe(HttpApiSchema.status(403)), ProductsUnarchive404.pipe(HttpApiSchema.status(404)), ProductsUnarchive409.pipe(HttpApiSchema.status(409)), ProductsUnarchive422.pipe(HttpApiSchema.status(422))] }) .middleware(BearerAuthSecurityMiddleware) .annotate(OpenApi.Identifier, "products.unarchive") .annotate(OpenApi.Summary, "Unarchive product") @@ -3887,12 +3887,12 @@ class ProductsGroup extends HttpApiGroup.make("Products") .annotate(OpenApi.Description, "Marketplace product catalog resources.") {} class ClustersGroup extends HttpApiGroup.make("Clusters") - .add(HttpApiEndpoint.get("clustersGetComputeSettings", "/clusters/:id/compute_settings", { params: ClustersGetComputeSettingsPathParams, headers: ClustersGetComputeSettingsHeaders, success: ClustersGetComputeSettings200, error: [ClustersGetComputeSettings401.pipe(HttpApiSchema.status(401)), ClustersGetComputeSettings403.pipe(HttpApiSchema.status(403)), ClustersGetComputeSettings404.pipe(HttpApiSchema.status(404))] }) + .add(HttpApiEndpoint.get("clustersGetComputeSettings", "/clusters/{id}/compute_settings", { params: ClustersGetComputeSettingsPathParams, headers: ClustersGetComputeSettingsHeaders, success: ClustersGetComputeSettings200, error: [ClustersGetComputeSettings401.pipe(HttpApiSchema.status(401)), ClustersGetComputeSettings403.pipe(HttpApiSchema.status(403)), ClustersGetComputeSettings404.pipe(HttpApiSchema.status(404))] }) .middleware(BearerAuthSecurityMiddleware) .annotate(OpenApi.Identifier, "clusters.getComputeSettings") .annotate(OpenApi.Summary, "Get cluster compute settings") .annotate(OpenApi.Description, "Returns autoscaling state, current machine usage, the configured limit, and the etag required for updates."), - HttpApiEndpoint.patch("clustersUpdateComputeSettings", "/clusters/:id/compute_settings", { params: ClustersUpdateComputeSettingsPathParams, headers: ClustersUpdateComputeSettingsHeaders, payload: ClustersUpdateComputeSettingsRequestJson, success: ClustersUpdateComputeSettings200, error: [ClustersUpdateComputeSettings400.pipe(HttpApiSchema.status(400)), ClustersUpdateComputeSettings401.pipe(HttpApiSchema.status(401)), ClustersUpdateComputeSettings403.pipe(HttpApiSchema.status(403)), ClustersUpdateComputeSettings404.pipe(HttpApiSchema.status(404)), ClustersUpdateComputeSettings409.pipe(HttpApiSchema.status(409)), ClustersUpdateComputeSettings422.pipe(HttpApiSchema.status(422)), ClustersUpdateComputeSettings429.pipe(HttpApiSchema.status(429)), ClustersUpdateComputeSettings503.pipe(HttpApiSchema.status(503))] }) + HttpApiEndpoint.patch("clustersUpdateComputeSettings", "/clusters/{id}/compute_settings", { params: ClustersUpdateComputeSettingsPathParams, headers: ClustersUpdateComputeSettingsHeaders, payload: ClustersUpdateComputeSettingsRequestJson, success: ClustersUpdateComputeSettings200, error: [ClustersUpdateComputeSettings400.pipe(HttpApiSchema.status(400)), ClustersUpdateComputeSettings401.pipe(HttpApiSchema.status(401)), ClustersUpdateComputeSettings403.pipe(HttpApiSchema.status(403)), ClustersUpdateComputeSettings404.pipe(HttpApiSchema.status(404)), ClustersUpdateComputeSettings409.pipe(HttpApiSchema.status(409)), ClustersUpdateComputeSettings422.pipe(HttpApiSchema.status(422)), ClustersUpdateComputeSettings429.pipe(HttpApiSchema.status(429)), ClustersUpdateComputeSettings503.pipe(HttpApiSchema.status(503))] }) .middleware(BearerAuthSecurityMiddleware) .annotate(OpenApi.Identifier, "clusters.updateComputeSettings") .annotate(OpenApi.Summary, "Update cluster compute settings") @@ -3907,77 +3907,77 @@ class ClustersGroup extends HttpApiGroup.make("Clusters") .annotate(OpenApi.Identifier, "clusters.create") .annotate(OpenApi.Summary, "Create cluster") .annotate(OpenApi.Description, "Creates a managed cluster and returns an async Operation envelope. State for in-flight operations is eventually consistent and may lag actual execution by a few seconds. State for completed operations (`done: true`) is immutable."), - HttpApiEndpoint.get("clustersGet", "/clusters/:id", { params: ClustersGetPathParams, headers: ClustersGetHeaders, success: ClustersGet200, error: [ClustersGet401.pipe(HttpApiSchema.status(401)), ClustersGet403.pipe(HttpApiSchema.status(403)), ClustersGet404.pipe(HttpApiSchema.status(404))] }) + HttpApiEndpoint.get("clustersGet", "/clusters/{id}", { params: ClustersGetPathParams, headers: ClustersGetHeaders, success: ClustersGet200, error: [ClustersGet401.pipe(HttpApiSchema.status(401)), ClustersGet403.pipe(HttpApiSchema.status(403)), ClustersGet404.pipe(HttpApiSchema.status(404))] }) .middleware(BearerAuthSecurityMiddleware) .annotate(OpenApi.Identifier, "clusters.get") .annotate(OpenApi.Summary, "Get cluster") .annotate(OpenApi.Description, "Gets a cluster by id."), - HttpApiEndpoint.delete("clustersDelete", "/clusters/:id", { params: ClustersDeletePathParams, headers: ClustersDeleteHeaders, success: ClustersDelete202.pipe(HttpApiSchema.status(202)), error: [ClustersDelete401.pipe(HttpApiSchema.status(401)), ClustersDelete403.pipe(HttpApiSchema.status(403)), ClustersDelete404.pipe(HttpApiSchema.status(404)), ClustersDelete409.pipe(HttpApiSchema.status(409))] }) + HttpApiEndpoint.delete("clustersDelete", "/clusters/{id}", { params: ClustersDeletePathParams, headers: ClustersDeleteHeaders, success: ClustersDelete202.pipe(HttpApiSchema.status(202)), error: [ClustersDelete401.pipe(HttpApiSchema.status(401)), ClustersDelete403.pipe(HttpApiSchema.status(403)), ClustersDelete404.pipe(HttpApiSchema.status(404)), ClustersDelete409.pipe(HttpApiSchema.status(409))] }) .middleware(BearerAuthSecurityMiddleware) .annotate(OpenApi.Identifier, "clusters.delete") .annotate(OpenApi.Summary, "Delete cluster") .annotate(OpenApi.Description, "Tears down the cluster asynchronously after active installs, managed workers, and machine snapshots have been removed. Returns an Operation envelope. Caller must be a workspace owner."), - HttpApiEndpoint.patch("clustersUpdate", "/clusters/:id", { params: ClustersUpdatePathParams, headers: ClustersUpdateHeaders, payload: [ClustersUpdateRequestJson, HttpApiSchema.NoContent], success: ClustersUpdate200, error: [ClustersUpdate401.pipe(HttpApiSchema.status(401)), ClustersUpdate403.pipe(HttpApiSchema.status(403)), ClustersUpdate404.pipe(HttpApiSchema.status(404)), ClustersUpdate409.pipe(HttpApiSchema.status(409))] }) + HttpApiEndpoint.patch("clustersUpdate", "/clusters/{id}", { params: ClustersUpdatePathParams, headers: ClustersUpdateHeaders, payload: [ClustersUpdateRequestJson, HttpApiSchema.NoContent], success: ClustersUpdate200, error: [ClustersUpdate401.pipe(HttpApiSchema.status(401)), ClustersUpdate403.pipe(HttpApiSchema.status(403)), ClustersUpdate404.pipe(HttpApiSchema.status(404)), ClustersUpdate409.pipe(HttpApiSchema.status(409))] }) .middleware(BearerAuthSecurityMiddleware) .annotate(OpenApi.Identifier, "clusters.update") .annotate(OpenApi.Summary, "Update cluster") .annotate(OpenApi.Description, "Updates editable cluster fields."), - HttpApiEndpoint.post("clustersImport", "/clusters%3Aimport", { headers: ClustersImportHeaders, payload: [ClustersImportRequestJson, HttpApiSchema.NoContent], success: ClustersImport200, error: [ClustersImport401.pipe(HttpApiSchema.status(401)), ClustersImport403.pipe(HttpApiSchema.status(403))] }) + HttpApiEndpoint.post("clustersImport", "/clusters:import", { headers: ClustersImportHeaders, payload: [ClustersImportRequestJson, HttpApiSchema.NoContent], success: ClustersImport200, error: [ClustersImport401.pipe(HttpApiSchema.status(401)), ClustersImport403.pipe(HttpApiSchema.status(403))] }) .middleware(BearerAuthSecurityMiddleware) .annotate(OpenApi.Identifier, "clusters.import") .annotate(OpenApi.Summary, "Import cluster") .annotate(OpenApi.Description, "Imports an existing cluster from kubeconfig."), - HttpApiEndpoint.get("clustersGetCapabilities", "/clusters/:id/capabilities", { params: ClustersGetCapabilitiesPathParams, headers: ClustersGetCapabilitiesHeaders, success: ClustersGetCapabilities200, error: [ClustersGetCapabilities401.pipe(HttpApiSchema.status(401)), ClustersGetCapabilities403.pipe(HttpApiSchema.status(403)), ClustersGetCapabilities404.pipe(HttpApiSchema.status(404))] }) + HttpApiEndpoint.get("clustersGetCapabilities", "/clusters/{id}/capabilities", { params: ClustersGetCapabilitiesPathParams, headers: ClustersGetCapabilitiesHeaders, success: ClustersGetCapabilities200, error: [ClustersGetCapabilities401.pipe(HttpApiSchema.status(401)), ClustersGetCapabilities403.pipe(HttpApiSchema.status(403)), ClustersGetCapabilities404.pipe(HttpApiSchema.status(404))] }) .middleware(BearerAuthSecurityMiddleware) .annotate(OpenApi.Identifier, "clusters.getCapabilities") .annotate(OpenApi.Summary, "Get cluster capabilities") .annotate(OpenApi.Description, "Gets the last observed Kubernetes capability snapshot for a cluster."), - HttpApiEndpoint.post("clustersRefreshCapabilities", "/clusters/:id/capabilities%3Arefresh", { params: ClustersRefreshCapabilitiesPathParams, headers: ClustersRefreshCapabilitiesHeaders, success: ClustersRefreshCapabilities202.pipe(HttpApiSchema.status(202)), error: [ClustersRefreshCapabilities401.pipe(HttpApiSchema.status(401)), ClustersRefreshCapabilities403.pipe(HttpApiSchema.status(403)), ClustersRefreshCapabilities404.pipe(HttpApiSchema.status(404)), ClustersRefreshCapabilities409.pipe(HttpApiSchema.status(409))] }) + HttpApiEndpoint.post("clustersRefreshCapabilities", "/clusters/{id}/capabilities:refresh", { params: ClustersRefreshCapabilitiesPathParams, headers: ClustersRefreshCapabilitiesHeaders, success: ClustersRefreshCapabilities202.pipe(HttpApiSchema.status(202)), error: [ClustersRefreshCapabilities401.pipe(HttpApiSchema.status(401)), ClustersRefreshCapabilities403.pipe(HttpApiSchema.status(403)), ClustersRefreshCapabilities404.pipe(HttpApiSchema.status(404)), ClustersRefreshCapabilities409.pipe(HttpApiSchema.status(409))] }) .middleware(BearerAuthSecurityMiddleware) .annotate(OpenApi.Identifier, "clusters.refreshCapabilities") .annotate(OpenApi.Summary, "Refresh cluster capabilities") .annotate(OpenApi.Description, "Refreshes observed cluster capability facts. The API returns an Operation envelope because cluster inspection runs asynchronously."), - HttpApiEndpoint.post("clustersSuspend", "/clusters/:id%3Asuspend", { params: ClustersSuspendPathParams, headers: ClustersSuspendHeaders, success: ClustersSuspend202.pipe(HttpApiSchema.status(202)), error: [ClustersSuspend401.pipe(HttpApiSchema.status(401)), ClustersSuspend403.pipe(HttpApiSchema.status(403)), ClustersSuspend404.pipe(HttpApiSchema.status(404)), ClustersSuspend409.pipe(HttpApiSchema.status(409))] }) + HttpApiEndpoint.post("clustersSuspend", "/clusters/{id}:suspend", { params: ClustersSuspendPathParams, headers: ClustersSuspendHeaders, success: ClustersSuspend202.pipe(HttpApiSchema.status(202)), error: [ClustersSuspend401.pipe(HttpApiSchema.status(401)), ClustersSuspend403.pipe(HttpApiSchema.status(403)), ClustersSuspend404.pipe(HttpApiSchema.status(404)), ClustersSuspend409.pipe(HttpApiSchema.status(409))] }) .middleware(BearerAuthSecurityMiddleware) .annotate(OpenApi.Identifier, "clusters.suspend") .annotate(OpenApi.Summary, "Suspend cluster") .annotate(OpenApi.Description, "Suspends a running cluster. The API returns an Operation envelope because teardown and drain are asynchronous."), - HttpApiEndpoint.post("clustersResume", "/clusters/:id%3Aresume", { params: ClustersResumePathParams, headers: ClustersResumeHeaders, success: ClustersResume202.pipe(HttpApiSchema.status(202)), error: [ClustersResume401.pipe(HttpApiSchema.status(401)), ClustersResume403.pipe(HttpApiSchema.status(403)), ClustersResume404.pipe(HttpApiSchema.status(404)), ClustersResume409.pipe(HttpApiSchema.status(409))] }) + HttpApiEndpoint.post("clustersResume", "/clusters/{id}:resume", { params: ClustersResumePathParams, headers: ClustersResumeHeaders, success: ClustersResume202.pipe(HttpApiSchema.status(202)), error: [ClustersResume401.pipe(HttpApiSchema.status(401)), ClustersResume403.pipe(HttpApiSchema.status(403)), ClustersResume404.pipe(HttpApiSchema.status(404)), ClustersResume409.pipe(HttpApiSchema.status(409))] }) .middleware(BearerAuthSecurityMiddleware) .annotate(OpenApi.Identifier, "clusters.resume") .annotate(OpenApi.Summary, "Resume cluster") .annotate(OpenApi.Description, "Resumes a suspended cluster and returns an async Operation envelope."), - HttpApiEndpoint.get("clustersGetKubeconfig", "/clusters/:id/kubeconfig", { params: ClustersGetKubeconfigPathParams, headers: ClustersGetKubeconfigHeaders, success: ClustersGetKubeconfig200, error: [ClustersGetKubeconfig401.pipe(HttpApiSchema.status(401)), ClustersGetKubeconfig403.pipe(HttpApiSchema.status(403)), ClustersGetKubeconfig404.pipe(HttpApiSchema.status(404)), ClustersGetKubeconfig500] }) + HttpApiEndpoint.get("clustersGetKubeconfig", "/clusters/{id}/kubeconfig", { params: ClustersGetKubeconfigPathParams, headers: ClustersGetKubeconfigHeaders, success: ClustersGetKubeconfig200, error: [ClustersGetKubeconfig401.pipe(HttpApiSchema.status(401)), ClustersGetKubeconfig403.pipe(HttpApiSchema.status(403)), ClustersGetKubeconfig404.pipe(HttpApiSchema.status(404)), ClustersGetKubeconfig500] }) .middleware(BearerAuthSecurityMiddleware) .annotate(OpenApi.Identifier, "clusters.getKubeconfig") .annotate(OpenApi.Summary, "Get cluster kubeconfig") .annotate(OpenApi.Description, "Returns a cluster admin kubeconfig for workspace owners and admins. Successful credential disclosure is fail-closed on a cluster-scoped audit record."), - HttpApiEndpoint.get("clustersProxyKube", "/clusters/:id/kube_proxy/:path%3A*", { params: ClustersProxyKubePathParams, headers: ClustersProxyKubeHeaders, success: HttpApiSchema.Empty(200), error: [ClustersProxyKube401.pipe(HttpApiSchema.status(401)), ClustersProxyKube403.pipe(HttpApiSchema.status(403)), ClustersProxyKube404.pipe(HttpApiSchema.status(404))] }) + HttpApiEndpoint.get("clustersProxyKube", "/clusters/{id}/kube_proxy/{path:*}", { params: ClustersProxyKubePathParams, headers: ClustersProxyKubeHeaders, success: HttpApiSchema.Empty(200), error: [ClustersProxyKube401.pipe(HttpApiSchema.status(401)), ClustersProxyKube403.pipe(HttpApiSchema.status(403)), ClustersProxyKube404.pipe(HttpApiSchema.status(404))] }) .middleware(BearerAuthSecurityMiddleware) .annotate(OpenApi.Identifier, "clusters.proxyKube") .annotate(OpenApi.Summary, "Proxy cluster API") .annotate(OpenApi.Description, "Proxy kube-apiserver traffic through the public API. `path:*` is forwarded verbatim to upstream."), - HttpApiEndpoint.post("clustersExec", "/clusters/:id%3Aexec", { params: ClustersExecPathParams, headers: ClustersExecHeaders, payload: [ClustersExecRequestJson, HttpApiSchema.NoContent], success: ClustersExec200, error: [ClustersExec401.pipe(HttpApiSchema.status(401)), ClustersExec403.pipe(HttpApiSchema.status(403)), ClustersExec404.pipe(HttpApiSchema.status(404)), ClustersExec409.pipe(HttpApiSchema.status(409))] }) + HttpApiEndpoint.post("clustersExec", "/clusters/{id}:exec", { params: ClustersExecPathParams, headers: ClustersExecHeaders, payload: [ClustersExecRequestJson, HttpApiSchema.NoContent], success: ClustersExec200, error: [ClustersExec401.pipe(HttpApiSchema.status(401)), ClustersExec403.pipe(HttpApiSchema.status(403)), ClustersExec404.pipe(HttpApiSchema.status(404)), ClustersExec409.pipe(HttpApiSchema.status(409))] }) .middleware(BearerAuthSecurityMiddleware) .annotate(OpenApi.Identifier, "clusters.exec") .annotate(OpenApi.Summary, "Execute command in cluster") .annotate(OpenApi.Description, "Runs a structured command in a pod and returns the result inline. No LRO wrapper by design."), - HttpApiEndpoint.get("clustersListWorkerBootstraps", "/clusters/:id/worker_bootstraps", { params: ClustersListWorkerBootstrapsPathParams, query: ClustersListWorkerBootstrapsQuery, headers: ClustersListWorkerBootstrapsHeaders, success: ClustersListWorkerBootstraps200, error: [ClustersListWorkerBootstraps401.pipe(HttpApiSchema.status(401)), ClustersListWorkerBootstraps403.pipe(HttpApiSchema.status(403)), ClustersListWorkerBootstraps404.pipe(HttpApiSchema.status(404))] }) + HttpApiEndpoint.get("clustersListWorkerBootstraps", "/clusters/{id}/worker_bootstraps", { params: ClustersListWorkerBootstrapsPathParams, query: ClustersListWorkerBootstrapsQuery, headers: ClustersListWorkerBootstrapsHeaders, success: ClustersListWorkerBootstraps200, error: [ClustersListWorkerBootstraps401.pipe(HttpApiSchema.status(401)), ClustersListWorkerBootstraps403.pipe(HttpApiSchema.status(403)), ClustersListWorkerBootstraps404.pipe(HttpApiSchema.status(404))] }) .middleware(BearerAuthSecurityMiddleware) .annotate(OpenApi.Identifier, "clusters.listWorkerBootstraps") .annotate(OpenApi.Summary, "List cluster worker bootstraps") .annotate(OpenApi.Description, "Lists worker-bootstrap tokens for the cluster. Cursor-paginated. Includes revoked / expired tokens by default — filter via the `status` query when implemented."), - HttpApiEndpoint.post("clustersCreateWorkerBootstrap", "/clusters/:id/worker_bootstraps", { params: ClustersCreateWorkerBootstrapPathParams, headers: ClustersCreateWorkerBootstrapHeaders, payload: [ClustersCreateWorkerBootstrapRequestJson, HttpApiSchema.NoContent], success: HttpApiSchema.WithHeaders(ClustersCreateWorkerBootstrap201.pipe(HttpApiSchema.status(201)), ClustersCreateWorkerBootstrap201Headers), error: [ClustersCreateWorkerBootstrap401.pipe(HttpApiSchema.status(401)), ClustersCreateWorkerBootstrap403.pipe(HttpApiSchema.status(403)), ClustersCreateWorkerBootstrap404.pipe(HttpApiSchema.status(404))] }) + HttpApiEndpoint.post("clustersCreateWorkerBootstrap", "/clusters/{id}/worker_bootstraps", { params: ClustersCreateWorkerBootstrapPathParams, headers: ClustersCreateWorkerBootstrapHeaders, payload: [ClustersCreateWorkerBootstrapRequestJson, HttpApiSchema.NoContent], success: HttpApiSchema.WithHeaders(ClustersCreateWorkerBootstrap201.pipe(HttpApiSchema.status(201)), ClustersCreateWorkerBootstrap201Headers), error: [ClustersCreateWorkerBootstrap401.pipe(HttpApiSchema.status(401)), ClustersCreateWorkerBootstrap403.pipe(HttpApiSchema.status(403)), ClustersCreateWorkerBootstrap404.pipe(HttpApiSchema.status(404))] }) .middleware(BearerAuthSecurityMiddleware) .annotate(OpenApi.Identifier, "clusters.createWorkerBootstrap") .annotate(OpenApi.Summary, "Create worker bootstrap") .annotate(OpenApi.Description, "Issues a new worker-bootstrap row and returns its metadata."), - HttpApiEndpoint.get("clustersGetWorkerBootstrap", "/clusters/:id/worker_bootstraps/:wbs_id", { params: ClustersGetWorkerBootstrapPathParams, headers: ClustersGetWorkerBootstrapHeaders, success: ClustersGetWorkerBootstrap200, error: [ClustersGetWorkerBootstrap401.pipe(HttpApiSchema.status(401)), ClustersGetWorkerBootstrap403.pipe(HttpApiSchema.status(403)), ClustersGetWorkerBootstrap404.pipe(HttpApiSchema.status(404))] }) + HttpApiEndpoint.get("clustersGetWorkerBootstrap", "/clusters/{id}/worker_bootstraps/{wbs_id}", { params: ClustersGetWorkerBootstrapPathParams, headers: ClustersGetWorkerBootstrapHeaders, success: ClustersGetWorkerBootstrap200, error: [ClustersGetWorkerBootstrap401.pipe(HttpApiSchema.status(401)), ClustersGetWorkerBootstrap403.pipe(HttpApiSchema.status(403)), ClustersGetWorkerBootstrap404.pipe(HttpApiSchema.status(404))] }) .middleware(BearerAuthSecurityMiddleware) .annotate(OpenApi.Identifier, "clusters.getWorkerBootstrap") .annotate(OpenApi.Summary, "Get cluster worker bootstrap") .annotate(OpenApi.Description, "Returns a single worker-bootstrap token by ID, including its current status and expiry timestamp."), - HttpApiEndpoint.post("clustersRevokeWorkerBootstrap", "/clusters/:id/worker_bootstraps/:wbs_id%3Arevoke", { params: ClustersRevokeWorkerBootstrapPathParams, headers: ClustersRevokeWorkerBootstrapHeaders, success: ClustersRevokeWorkerBootstrap202.pipe(HttpApiSchema.status(202)), error: [ClustersRevokeWorkerBootstrap401.pipe(HttpApiSchema.status(401)), ClustersRevokeWorkerBootstrap403.pipe(HttpApiSchema.status(403)), ClustersRevokeWorkerBootstrap404.pipe(HttpApiSchema.status(404)), ClustersRevokeWorkerBootstrap409.pipe(HttpApiSchema.status(409))] }) + HttpApiEndpoint.post("clustersRevokeWorkerBootstrap", "/clusters/{id}/worker_bootstraps/{wbs_id}:revoke", { params: ClustersRevokeWorkerBootstrapPathParams, headers: ClustersRevokeWorkerBootstrapHeaders, success: ClustersRevokeWorkerBootstrap202.pipe(HttpApiSchema.status(202)), error: [ClustersRevokeWorkerBootstrap401.pipe(HttpApiSchema.status(401)), ClustersRevokeWorkerBootstrap403.pipe(HttpApiSchema.status(403)), ClustersRevokeWorkerBootstrap404.pipe(HttpApiSchema.status(404)), ClustersRevokeWorkerBootstrap409.pipe(HttpApiSchema.status(409))] }) .middleware(BearerAuthSecurityMiddleware) .annotate(OpenApi.Identifier, "clusters.revokeWorkerBootstrap") .annotate(OpenApi.Summary, "Revoke worker bootstrap") @@ -3995,56 +3995,56 @@ class MachinesGroup extends HttpApiGroup.make("Machines") .annotate(OpenApi.Identifier, "machines.create") .annotate(OpenApi.Summary, "Create machine") .annotate(OpenApi.Description, "Creates a machine and returns a long-running operation envelope."), - HttpApiEndpoint.get("machinesGet", "/machines/:id", { params: MachinesGetPathParams, headers: MachinesGetHeaders, success: MachinesGet200, error: [MachinesGet401.pipe(HttpApiSchema.status(401)), MachinesGet403.pipe(HttpApiSchema.status(403)), MachinesGet404.pipe(HttpApiSchema.status(404))] }) + HttpApiEndpoint.get("machinesGet", "/machines/{id}", { params: MachinesGetPathParams, headers: MachinesGetHeaders, success: MachinesGet200, error: [MachinesGet401.pipe(HttpApiSchema.status(401)), MachinesGet403.pipe(HttpApiSchema.status(403)), MachinesGet404.pipe(HttpApiSchema.status(404))] }) .middleware(BearerAuthSecurityMiddleware) .annotate(OpenApi.Identifier, "machines.get") .annotate(OpenApi.Summary, "Get machine") .annotate(OpenApi.Description, "Returns a machine by ID."), - HttpApiEndpoint.delete("machinesDelete", "/machines/:id", { params: MachinesDeletePathParams, headers: MachinesDeleteHeaders, success: MachinesDelete202.pipe(HttpApiSchema.status(202)), error: [MachinesDelete401.pipe(HttpApiSchema.status(401)), MachinesDelete403.pipe(HttpApiSchema.status(403)), MachinesDelete404.pipe(HttpApiSchema.status(404)), MachinesDelete409.pipe(HttpApiSchema.status(409)), MachinesDelete503.pipe(HttpApiSchema.status(503))] }) + HttpApiEndpoint.delete("machinesDelete", "/machines/{id}", { params: MachinesDeletePathParams, headers: MachinesDeleteHeaders, success: MachinesDelete202.pipe(HttpApiSchema.status(202)), error: [MachinesDelete401.pipe(HttpApiSchema.status(401)), MachinesDelete403.pipe(HttpApiSchema.status(403)), MachinesDelete404.pipe(HttpApiSchema.status(404)), MachinesDelete409.pipe(HttpApiSchema.status(409)), MachinesDelete503.pipe(HttpApiSchema.status(503))] }) .middleware(BearerAuthSecurityMiddleware) .annotate(OpenApi.Identifier, "machines.delete") .annotate(OpenApi.Summary, "Delete machine") .annotate(OpenApi.Description, "Deletes a machine and returns a long-running operation envelope."), - HttpApiEndpoint.patch("machinesUpdate", "/machines/:id", { params: MachinesUpdatePathParams, headers: MachinesUpdateHeaders, payload: [MachinesUpdateRequestJson, HttpApiSchema.NoContent], success: MachinesUpdate200, error: [MachinesUpdate401.pipe(HttpApiSchema.status(401)), MachinesUpdate403.pipe(HttpApiSchema.status(403)), MachinesUpdate404.pipe(HttpApiSchema.status(404)), MachinesUpdate409.pipe(HttpApiSchema.status(409))] }) + HttpApiEndpoint.patch("machinesUpdate", "/machines/{id}", { params: MachinesUpdatePathParams, headers: MachinesUpdateHeaders, payload: [MachinesUpdateRequestJson, HttpApiSchema.NoContent], success: MachinesUpdate200, error: [MachinesUpdate401.pipe(HttpApiSchema.status(401)), MachinesUpdate403.pipe(HttpApiSchema.status(403)), MachinesUpdate404.pipe(HttpApiSchema.status(404)), MachinesUpdate409.pipe(HttpApiSchema.status(409))] }) .middleware(BearerAuthSecurityMiddleware) .annotate(OpenApi.Identifier, "machines.update") .annotate(OpenApi.Summary, "Update machine") .annotate(OpenApi.Description, "Updates machine metadata."), - HttpApiEndpoint.post("machinesSuspend", "/machines/:id%3Asuspend", { params: MachinesSuspendPathParams, headers: MachinesSuspendHeaders, payload: [MachinesSuspendRequestJson, HttpApiSchema.NoContent], success: MachinesSuspend202.pipe(HttpApiSchema.status(202)), error: [MachinesSuspend401.pipe(HttpApiSchema.status(401)), MachinesSuspend403.pipe(HttpApiSchema.status(403)), MachinesSuspend404.pipe(HttpApiSchema.status(404)), MachinesSuspend409.pipe(HttpApiSchema.status(409)), MachinesSuspend503.pipe(HttpApiSchema.status(503))] }) + HttpApiEndpoint.post("machinesSuspend", "/machines/{id}:suspend", { params: MachinesSuspendPathParams, headers: MachinesSuspendHeaders, payload: [MachinesSuspendRequestJson, HttpApiSchema.NoContent], success: MachinesSuspend202.pipe(HttpApiSchema.status(202)), error: [MachinesSuspend401.pipe(HttpApiSchema.status(401)), MachinesSuspend403.pipe(HttpApiSchema.status(403)), MachinesSuspend404.pipe(HttpApiSchema.status(404)), MachinesSuspend409.pipe(HttpApiSchema.status(409)), MachinesSuspend503.pipe(HttpApiSchema.status(503))] }) .middleware(BearerAuthSecurityMiddleware) .annotate(OpenApi.Identifier, "machines.suspend") .annotate(OpenApi.Summary, "Suspend machine") .annotate(OpenApi.Description, "Suspends a machine and returns a long-running operation envelope. On providers that recycle instances during suspension, the machine ID stays stable but the public IP usually changes on resume unless a floating IP is attached."), - HttpApiEndpoint.post("machinesResume", "/machines/:id%3Aresume", { params: MachinesResumePathParams, headers: MachinesResumeHeaders, payload: [MachinesResumeRequestJson, HttpApiSchema.NoContent], success: MachinesResume202.pipe(HttpApiSchema.status(202)), error: [MachinesResume401.pipe(HttpApiSchema.status(401)), MachinesResume403.pipe(HttpApiSchema.status(403)), MachinesResume404.pipe(HttpApiSchema.status(404)), MachinesResume409.pipe(HttpApiSchema.status(409)), MachinesResume503.pipe(HttpApiSchema.status(503))] }) + HttpApiEndpoint.post("machinesResume", "/machines/{id}:resume", { params: MachinesResumePathParams, headers: MachinesResumeHeaders, payload: [MachinesResumeRequestJson, HttpApiSchema.NoContent], success: MachinesResume202.pipe(HttpApiSchema.status(202)), error: [MachinesResume401.pipe(HttpApiSchema.status(401)), MachinesResume403.pipe(HttpApiSchema.status(403)), MachinesResume404.pipe(HttpApiSchema.status(404)), MachinesResume409.pipe(HttpApiSchema.status(409)), MachinesResume503.pipe(HttpApiSchema.status(503))] }) .middleware(BearerAuthSecurityMiddleware) .annotate(OpenApi.Identifier, "machines.resume") .annotate(OpenApi.Summary, "Resume machine") .annotate(OpenApi.Description, "Resumes a suspended machine and returns a long-running operation envelope. The machine ID stays stable, but provider_resource.public_ip can change after resume on providers that recycle instances during suspension."), - HttpApiEndpoint.get("machinesListDriftReports", "/machines/:id/drift_reports", { params: MachinesListDriftReportsPathParams, query: MachinesListDriftReportsQuery, headers: MachinesListDriftReportsHeaders, success: MachinesListDriftReports200, error: [MachinesListDriftReports401.pipe(HttpApiSchema.status(401)), MachinesListDriftReports403.pipe(HttpApiSchema.status(403)), MachinesListDriftReports404.pipe(HttpApiSchema.status(404))] }) + HttpApiEndpoint.get("machinesListDriftReports", "/machines/{id}/drift_reports", { params: MachinesListDriftReportsPathParams, query: MachinesListDriftReportsQuery, headers: MachinesListDriftReportsHeaders, success: MachinesListDriftReports200, error: [MachinesListDriftReports401.pipe(HttpApiSchema.status(401)), MachinesListDriftReports403.pipe(HttpApiSchema.status(403)), MachinesListDriftReports404.pipe(HttpApiSchema.status(404))] }) .middleware(BearerAuthSecurityMiddleware) .annotate(OpenApi.Identifier, "machines.listDriftReports") .annotate(OpenApi.Summary, "List machine drift reports") .annotate(OpenApi.Description, "Unsupported. This scaffold-only endpoint has no production handler. Do not call it in production.") .annotate(OpenApi.Deprecated, true), - HttpApiEndpoint.post("machinesCreateDriftReport", "/machines/:id/drift_reports", { params: MachinesCreateDriftReportPathParams, headers: MachinesCreateDriftReportHeaders, payload: [MachinesCreateDriftReportRequestJson, HttpApiSchema.NoContent], success: HttpApiSchema.WithHeaders(MachinesCreateDriftReport201.pipe(HttpApiSchema.status(201)), MachinesCreateDriftReport201Headers), error: [MachinesCreateDriftReport401.pipe(HttpApiSchema.status(401)), MachinesCreateDriftReport403.pipe(HttpApiSchema.status(403)), MachinesCreateDriftReport404.pipe(HttpApiSchema.status(404))] }) + HttpApiEndpoint.post("machinesCreateDriftReport", "/machines/{id}/drift_reports", { params: MachinesCreateDriftReportPathParams, headers: MachinesCreateDriftReportHeaders, payload: [MachinesCreateDriftReportRequestJson, HttpApiSchema.NoContent], success: HttpApiSchema.WithHeaders(MachinesCreateDriftReport201.pipe(HttpApiSchema.status(201)), MachinesCreateDriftReport201Headers), error: [MachinesCreateDriftReport401.pipe(HttpApiSchema.status(401)), MachinesCreateDriftReport403.pipe(HttpApiSchema.status(403)), MachinesCreateDriftReport404.pipe(HttpApiSchema.status(404))] }) .middleware(BearerAuthSecurityMiddleware) .annotate(OpenApi.Identifier, "machines.createDriftReport") .annotate(OpenApi.Summary, "Create machine drift report") .annotate(OpenApi.Description, "Unsupported. This scaffold-only endpoint has no production handler. Do not call it in production.") .annotate(OpenApi.Deprecated, true), - HttpApiEndpoint.get("machinesGetDriftReport", "/machines/:id/drift_reports/:report_id", { params: MachinesGetDriftReportPathParams, headers: MachinesGetDriftReportHeaders, success: MachinesGetDriftReport200, error: [MachinesGetDriftReport401.pipe(HttpApiSchema.status(401)), MachinesGetDriftReport403.pipe(HttpApiSchema.status(403)), MachinesGetDriftReport404.pipe(HttpApiSchema.status(404))] }) + HttpApiEndpoint.get("machinesGetDriftReport", "/machines/{id}/drift_reports/{report_id}", { params: MachinesGetDriftReportPathParams, headers: MachinesGetDriftReportHeaders, success: MachinesGetDriftReport200, error: [MachinesGetDriftReport401.pipe(HttpApiSchema.status(401)), MachinesGetDriftReport403.pipe(HttpApiSchema.status(403)), MachinesGetDriftReport404.pipe(HttpApiSchema.status(404))] }) .middleware(BearerAuthSecurityMiddleware) .annotate(OpenApi.Identifier, "machines.getDriftReport") .annotate(OpenApi.Summary, "Get machine drift report") .annotate(OpenApi.Description, "Unsupported. This scaffold-only endpoint has no production handler. Do not call it in production.") .annotate(OpenApi.Deprecated, true), - HttpApiEndpoint.get("machinesListSuspensionEvents", "/machines/:id/suspension_events", { params: MachinesListSuspensionEventsPathParams, query: MachinesListSuspensionEventsQuery, headers: MachinesListSuspensionEventsHeaders, success: MachinesListSuspensionEvents200, error: [MachinesListSuspensionEvents401.pipe(HttpApiSchema.status(401)), MachinesListSuspensionEvents403.pipe(HttpApiSchema.status(403)), MachinesListSuspensionEvents404.pipe(HttpApiSchema.status(404))] }) + HttpApiEndpoint.get("machinesListSuspensionEvents", "/machines/{id}/suspension_events", { params: MachinesListSuspensionEventsPathParams, query: MachinesListSuspensionEventsQuery, headers: MachinesListSuspensionEventsHeaders, success: MachinesListSuspensionEvents200, error: [MachinesListSuspensionEvents401.pipe(HttpApiSchema.status(401)), MachinesListSuspensionEvents403.pipe(HttpApiSchema.status(403)), MachinesListSuspensionEvents404.pipe(HttpApiSchema.status(404))] }) .middleware(BearerAuthSecurityMiddleware) .annotate(OpenApi.Identifier, "machines.listSuspensionEvents") .annotate(OpenApi.Summary, "List machine suspension events") .annotate(OpenApi.Description, "Unsupported. This scaffold-only endpoint has no production handler. Do not call it in production.") .annotate(OpenApi.Deprecated, true), - HttpApiEndpoint.get("machinesGetSuspensionEvent", "/machines/:id/suspension_events/:event_id", { params: MachinesGetSuspensionEventPathParams, headers: MachinesGetSuspensionEventHeaders, success: MachinesGetSuspensionEvent200, error: [MachinesGetSuspensionEvent401.pipe(HttpApiSchema.status(401)), MachinesGetSuspensionEvent403.pipe(HttpApiSchema.status(403)), MachinesGetSuspensionEvent404.pipe(HttpApiSchema.status(404))] }) + HttpApiEndpoint.get("machinesGetSuspensionEvent", "/machines/{id}/suspension_events/{event_id}", { params: MachinesGetSuspensionEventPathParams, headers: MachinesGetSuspensionEventHeaders, success: MachinesGetSuspensionEvent200, error: [MachinesGetSuspensionEvent401.pipe(HttpApiSchema.status(401)), MachinesGetSuspensionEvent403.pipe(HttpApiSchema.status(403)), MachinesGetSuspensionEvent404.pipe(HttpApiSchema.status(404))] }) .middleware(BearerAuthSecurityMiddleware) .annotate(OpenApi.Identifier, "machines.getSuspensionEvent") .annotate(OpenApi.Summary, "Get machine suspension event") @@ -4063,17 +4063,17 @@ class ComputeConfigsGroup extends HttpApiGroup.make("ComputeConfigs") .annotate(OpenApi.Identifier, "computeConfigs.create") .annotate(OpenApi.Summary, "Create compute config") .annotate(OpenApi.Description, "Creates a compute config row."), - HttpApiEndpoint.get("computeConfigsGet", "/compute_configs/:id", { params: ComputeConfigsGetPathParams, headers: ComputeConfigsGetHeaders, success: ComputeConfigsGet200, error: [ComputeConfigsGet401.pipe(HttpApiSchema.status(401)), ComputeConfigsGet403.pipe(HttpApiSchema.status(403)), ComputeConfigsGet404.pipe(HttpApiSchema.status(404))] }) + HttpApiEndpoint.get("computeConfigsGet", "/compute_configs/{id}", { params: ComputeConfigsGetPathParams, headers: ComputeConfigsGetHeaders, success: ComputeConfigsGet200, error: [ComputeConfigsGet401.pipe(HttpApiSchema.status(401)), ComputeConfigsGet403.pipe(HttpApiSchema.status(403)), ComputeConfigsGet404.pipe(HttpApiSchema.status(404))] }) .middleware(BearerAuthSecurityMiddleware) .annotate(OpenApi.Identifier, "computeConfigs.get") .annotate(OpenApi.Summary, "Get compute config") .annotate(OpenApi.Description, "Returns a compute config by ID."), - HttpApiEndpoint.delete("computeConfigsDelete", "/compute_configs/:id", { params: ComputeConfigsDeletePathParams, headers: ComputeConfigsDeleteHeaders, success: ComputeConfigsDelete200, error: [ComputeConfigsDelete401.pipe(HttpApiSchema.status(401)), ComputeConfigsDelete403.pipe(HttpApiSchema.status(403)), ComputeConfigsDelete404.pipe(HttpApiSchema.status(404)), ComputeConfigsDelete409.pipe(HttpApiSchema.status(409))] }) + HttpApiEndpoint.delete("computeConfigsDelete", "/compute_configs/{id}", { params: ComputeConfigsDeletePathParams, headers: ComputeConfigsDeleteHeaders, success: ComputeConfigsDelete200, error: [ComputeConfigsDelete401.pipe(HttpApiSchema.status(401)), ComputeConfigsDelete403.pipe(HttpApiSchema.status(403)), ComputeConfigsDelete404.pipe(HttpApiSchema.status(404)), ComputeConfigsDelete409.pipe(HttpApiSchema.status(409))] }) .middleware(BearerAuthSecurityMiddleware) .annotate(OpenApi.Identifier, "computeConfigs.delete") .annotate(OpenApi.Summary, "Delete compute config") .annotate(OpenApi.Description, "Deletes a compute config."), - HttpApiEndpoint.patch("computeConfigsUpdate", "/compute_configs/:id", { params: ComputeConfigsUpdatePathParams, headers: ComputeConfigsUpdateHeaders, payload: [ComputeConfigsUpdateRequestJson, HttpApiSchema.NoContent], success: ComputeConfigsUpdate200, error: [ComputeConfigsUpdate401.pipe(HttpApiSchema.status(401)), ComputeConfigsUpdate403.pipe(HttpApiSchema.status(403)), ComputeConfigsUpdate404.pipe(HttpApiSchema.status(404)), ComputeConfigsUpdate409.pipe(HttpApiSchema.status(409))] }) + HttpApiEndpoint.patch("computeConfigsUpdate", "/compute_configs/{id}", { params: ComputeConfigsUpdatePathParams, headers: ComputeConfigsUpdateHeaders, payload: [ComputeConfigsUpdateRequestJson, HttpApiSchema.NoContent], success: ComputeConfigsUpdate200, error: [ComputeConfigsUpdate401.pipe(HttpApiSchema.status(401)), ComputeConfigsUpdate403.pipe(HttpApiSchema.status(403)), ComputeConfigsUpdate404.pipe(HttpApiSchema.status(404)), ComputeConfigsUpdate409.pipe(HttpApiSchema.status(409))] }) .middleware(BearerAuthSecurityMiddleware) .annotate(OpenApi.Identifier, "computeConfigs.update") .annotate(OpenApi.Summary, "Update compute config") @@ -4091,21 +4091,21 @@ class OffersGroup extends HttpApiGroup.make("Offers") .annotate(OpenApi.Identifier, "offers.create") .annotate(OpenApi.Summary, "Create offer") .annotate(OpenApi.Description, "Creates an Offer for a product or a specific package version. Idempotency is workspace-scoped: reusing an `Idempotency-Key` with the same create intent returns the original Offer, while reusing it with a changed create intent returns HTTP 409 Conflict. Product-only requests that expire before an Offer is created retain their resolved-version binding and reject key reuse for 24 hours after reservation expiry; after that retention window the abandoned binding may be purged. When `product_id` is supplied without `package_version_id`, the server resolves the product’s current package version pin, validates `field_values` against that resolved version’s input schema, and stores the concrete package version on the Offer. Customers reach the Offer at `/i/` to start an install. When `allowed_emails` is non-empty, only those email addresses can use the Offer; when empty or omitted, any authenticated customer can."), - HttpApiEndpoint.get("offersGet", "/offers/:id", { params: OffersGetPathParams, success: OffersGet200, error: [OffersGet401.pipe(HttpApiSchema.status(401)), OffersGet403.pipe(HttpApiSchema.status(403)), OffersGet404.pipe(HttpApiSchema.status(404))] }) + HttpApiEndpoint.get("offersGet", "/offers/{id}", { params: OffersGetPathParams, success: OffersGet200, error: [OffersGet401.pipe(HttpApiSchema.status(401)), OffersGet403.pipe(HttpApiSchema.status(403)), OffersGet404.pipe(HttpApiSchema.status(404))] }) .middleware(BearerAuthSecurityMiddleware) .annotate(OpenApi.Identifier, "offers.get") .annotate(OpenApi.Summary, "Get offer details") .annotate(OpenApi.Description, "Returns the full offer record including pre-fill values and email allowlist. Caller must be a member of the offer’s workspace."), - HttpApiEndpoint.get("offersResolve", "/offers%3Aresolve", { query: OffersResolveQuery, success: OffersResolve200, error: [OffersResolve403.pipe(HttpApiSchema.status(403)), OffersResolve404.pipe(HttpApiSchema.status(404))] }) + HttpApiEndpoint.get("offersResolve", "/offers:resolve", { query: OffersResolveQuery, success: OffersResolve200, error: [OffersResolve403.pipe(HttpApiSchema.status(403)), OffersResolve404.pipe(HttpApiSchema.status(404))] }) .annotate(OpenApi.Identifier, "offers.resolve") .annotate(OpenApi.Summary, "Resolve offer by short hash") .annotate(OpenApi.Description, "Resolves an offer from the customer-clicked URL `/i/`. Anonymous callers receive the publicly-safe subset of fields needed to render the landing page (product name, logo, seller name, status, tier). Authenticated callers authorized to claim through an open allowlist or a verified-email match additionally receive entitled pre-fill values. Customer resolve never returns seller owner metadata or the configured email allowlist. Authenticated callers whose email is not on a configured allowlist receive 403."), - HttpApiEndpoint.post("offersArchive", "/offers/:id%3Aarchive", { params: OffersArchivePathParams, headers: OffersArchiveHeaders, success: OffersArchive200, error: [OffersArchive401.pipe(HttpApiSchema.status(401)), OffersArchive403.pipe(HttpApiSchema.status(403)), OffersArchive404.pipe(HttpApiSchema.status(404)), OffersArchive409.pipe(HttpApiSchema.status(409)), OffersArchive422.pipe(HttpApiSchema.status(422))] }) + HttpApiEndpoint.post("offersArchive", "/offers/{id}:archive", { params: OffersArchivePathParams, headers: OffersArchiveHeaders, success: OffersArchive200, error: [OffersArchive401.pipe(HttpApiSchema.status(401)), OffersArchive403.pipe(HttpApiSchema.status(403)), OffersArchive404.pipe(HttpApiSchema.status(404)), OffersArchive409.pipe(HttpApiSchema.status(409)), OffersArchive422.pipe(HttpApiSchema.status(422))] }) .middleware(BearerAuthSecurityMiddleware) .annotate(OpenApi.Identifier, "offers.archive") .annotate(OpenApi.Summary, "Archive offer") .annotate(OpenApi.Description, "Archives the offer and blocks new redemptions. The offer row remains for history and audit; callers receive the full Offer with `status: \"archived\"`. Idempotent: already-archived offers return unchanged. If-Match is required for optimistic concurrency."), - HttpApiEndpoint.post("offersUnarchive", "/offers/:id%3Aunarchive", { params: OffersUnarchivePathParams, headers: OffersUnarchiveHeaders, success: OffersUnarchive200, error: [OffersUnarchive401.pipe(HttpApiSchema.status(401)), OffersUnarchive403.pipe(HttpApiSchema.status(403)), OffersUnarchive404.pipe(HttpApiSchema.status(404)), OffersUnarchive409.pipe(HttpApiSchema.status(409)), OffersUnarchive422.pipe(HttpApiSchema.status(422))] }) + HttpApiEndpoint.post("offersUnarchive", "/offers/{id}:unarchive", { params: OffersUnarchivePathParams, headers: OffersUnarchiveHeaders, success: OffersUnarchive200, error: [OffersUnarchive401.pipe(HttpApiSchema.status(401)), OffersUnarchive403.pipe(HttpApiSchema.status(403)), OffersUnarchive404.pipe(HttpApiSchema.status(404)), OffersUnarchive409.pipe(HttpApiSchema.status(409)), OffersUnarchive422.pipe(HttpApiSchema.status(422))] }) .middleware(BearerAuthSecurityMiddleware) .annotate(OpenApi.Identifier, "offers.unarchive") .annotate(OpenApi.Summary, "Unarchive offer") @@ -4113,7 +4113,7 @@ class OffersGroup extends HttpApiGroup.make("Offers") .annotate(OpenApi.Description, "Marketplace offers and redemption tracking.") {} class OrderDraftsGroup extends HttpApiGroup.make("Order Drafts") - .add(HttpApiEndpoint.post("orderDraftsCreate", "/offers/:offer/order_drafts", { params: OrderDraftsCreatePathParams, headers: OrderDraftsCreateHeaders, success: OrderDraftsCreate201.pipe(HttpApiSchema.status(201)), error: [OrderDraftsCreate401.pipe(HttpApiSchema.status(401)), OrderDraftsCreate403.pipe(HttpApiSchema.status(403)), OrderDraftsCreate404.pipe(HttpApiSchema.status(404)), OrderDraftsCreate422.pipe(HttpApiSchema.status(422))] }) + .add(HttpApiEndpoint.post("orderDraftsCreate", "/offers/{offer}/order_drafts", { params: OrderDraftsCreatePathParams, headers: OrderDraftsCreateHeaders, success: OrderDraftsCreate201.pipe(HttpApiSchema.status(201)), error: [OrderDraftsCreate401.pipe(HttpApiSchema.status(401)), OrderDraftsCreate403.pipe(HttpApiSchema.status(403)), OrderDraftsCreate404.pipe(HttpApiSchema.status(404)), OrderDraftsCreate422.pipe(HttpApiSchema.status(422))] }) .middleware(BearerAuthSecurityMiddleware) .annotate(OpenApi.Identifier, "orderDrafts.create") .annotate(OpenApi.Summary, "Create order draft") @@ -4123,47 +4123,47 @@ class OrderDraftsGroup extends HttpApiGroup.make("Order Drafts") .annotate(OpenApi.Identifier, "orderDrafts.list") .annotate(OpenApi.Summary, "List order drafts") .annotate(OpenApi.Description, "Returns order drafts for one offer. `?offer=` is required in v1; `?status=` can further filter by wizard phase. With a workspace context (token-implied or `Akua-Context`), only workspace-member-visible drafts are returned and `field_values` is omitted."), - HttpApiEndpoint.get("orderDraftsGet", "/order_drafts/:id", { params: OrderDraftsGetPathParams, success: OrderDraftsGet200, error: [OrderDraftsGet401.pipe(HttpApiSchema.status(401)), OrderDraftsGet403.pipe(HttpApiSchema.status(403)), OrderDraftsGet404.pipe(HttpApiSchema.status(404))] }) + HttpApiEndpoint.get("orderDraftsGet", "/order_drafts/{id}", { params: OrderDraftsGetPathParams, success: OrderDraftsGet200, error: [OrderDraftsGet401.pipe(HttpApiSchema.status(401)), OrderDraftsGet403.pipe(HttpApiSchema.status(403)), OrderDraftsGet404.pipe(HttpApiSchema.status(404))] }) .middleware(BearerAuthSecurityMiddleware) .annotate(OpenApi.Identifier, "orderDrafts.get") .annotate(OpenApi.Summary, "Get order draft details") .annotate(OpenApi.Description, "Returns the order draft row. The order draft’s own customer sees the full record including `field_values`; workspace members of the parent offer see the row with `field_values` omitted."), - HttpApiEndpoint.post("orderDraftsCancel", "/order_drafts/:id%3Acancel", { params: OrderDraftsCancelPathParams, headers: OrderDraftsCancelHeaders, success: OrderDraftsCancel200, error: [OrderDraftsCancel401.pipe(HttpApiSchema.status(401)), OrderDraftsCancel403.pipe(HttpApiSchema.status(403)), OrderDraftsCancel404.pipe(HttpApiSchema.status(404)), OrderDraftsCancel409.pipe(HttpApiSchema.status(409)), OrderDraftsCancel422.pipe(HttpApiSchema.status(422))] }) + HttpApiEndpoint.post("orderDraftsCancel", "/order_drafts/{id}:cancel", { params: OrderDraftsCancelPathParams, headers: OrderDraftsCancelHeaders, success: OrderDraftsCancel200, error: [OrderDraftsCancel401.pipe(HttpApiSchema.status(401)), OrderDraftsCancel403.pipe(HttpApiSchema.status(403)), OrderDraftsCancel404.pipe(HttpApiSchema.status(404)), OrderDraftsCancel409.pipe(HttpApiSchema.status(409)), OrderDraftsCancel422.pipe(HttpApiSchema.status(422))] }) .middleware(BearerAuthSecurityMiddleware) .annotate(OpenApi.Identifier, "orderDrafts.cancel") .annotate(OpenApi.Summary, "Cancel order draft") .annotate(OpenApi.Description, "Terminates an in-flight order draft, returning the updated record. Allowed for the order draft’s own customer or any member of the parent offer’s workspace. Idempotent — cancelling a terminated order draft returns it unchanged. Allocated cluster resources are released and any in-flight install workflow is terminated; previously-completed work is NOT undone."), - HttpApiEndpoint.post("orderDraftsClaim", "/order_drafts/:id%3Aclaim", { params: OrderDraftsClaimPathParams, headers: OrderDraftsClaimHeaders, payload: OrderDraftsClaimRequestJson, success: OrderDraftsClaim200, error: [OrderDraftsClaim401.pipe(HttpApiSchema.status(401)), OrderDraftsClaim403.pipe(HttpApiSchema.status(403)), OrderDraftsClaim404.pipe(HttpApiSchema.status(404)), OrderDraftsClaim409.pipe(HttpApiSchema.status(409)), OrderDraftsClaim422.pipe(HttpApiSchema.status(422))] }) + HttpApiEndpoint.post("orderDraftsClaim", "/order_drafts/{id}:claim", { params: OrderDraftsClaimPathParams, headers: OrderDraftsClaimHeaders, payload: OrderDraftsClaimRequestJson, success: OrderDraftsClaim200, error: [OrderDraftsClaim401.pipe(HttpApiSchema.status(401)), OrderDraftsClaim403.pipe(HttpApiSchema.status(403)), OrderDraftsClaim404.pipe(HttpApiSchema.status(404)), OrderDraftsClaim409.pipe(HttpApiSchema.status(409)), OrderDraftsClaim422.pipe(HttpApiSchema.status(422))] }) .middleware(BearerAuthSecurityMiddleware) .annotate(OpenApi.Identifier, "orderDrafts.claim") .annotate(OpenApi.Summary, "Claim order draft") .annotate(OpenApi.Description, "Binds the calling authenticated user to an anonymous order draft using a one-time claim token (R13 + AIP-147 INPUT_ONLY)."), - HttpApiEndpoint.post("orderDraftsSelectWorkspace", "/order_drafts/:id%3AselectWorkspace", { params: OrderDraftsSelectWorkspacePathParams, headers: OrderDraftsSelectWorkspaceHeaders, payload: OrderDraftsSelectWorkspaceRequestJson, success: OrderDraftsSelectWorkspace200, error: [OrderDraftsSelectWorkspace401.pipe(HttpApiSchema.status(401)), OrderDraftsSelectWorkspace403.pipe(HttpApiSchema.status(403)), OrderDraftsSelectWorkspace404.pipe(HttpApiSchema.status(404)), OrderDraftsSelectWorkspace409.pipe(HttpApiSchema.status(409)), OrderDraftsSelectWorkspace422.pipe(HttpApiSchema.status(422))] }) + HttpApiEndpoint.post("orderDraftsSelectWorkspace", "/order_drafts/{id}:selectWorkspace", { params: OrderDraftsSelectWorkspacePathParams, headers: OrderDraftsSelectWorkspaceHeaders, payload: OrderDraftsSelectWorkspaceRequestJson, success: OrderDraftsSelectWorkspace200, error: [OrderDraftsSelectWorkspace401.pipe(HttpApiSchema.status(401)), OrderDraftsSelectWorkspace403.pipe(HttpApiSchema.status(403)), OrderDraftsSelectWorkspace404.pipe(HttpApiSchema.status(404)), OrderDraftsSelectWorkspace409.pipe(HttpApiSchema.status(409)), OrderDraftsSelectWorkspace422.pipe(HttpApiSchema.status(422))] }) .middleware(BearerAuthSecurityMiddleware) .annotate(OpenApi.Identifier, "orderDrafts.selectWorkspace") .annotate(OpenApi.Summary, "Select order workspace") .annotate(OpenApi.Description, "Selects the customer workspace for an order draft, or creates a new workspace for the order. This advances the draft from workspace selection to compute allocation."), - HttpApiEndpoint.post("orderDraftsSubmitConfigure", "/order_drafts/:id%3AsubmitConfiguration", { params: OrderDraftsSubmitConfigurePathParams, headers: OrderDraftsSubmitConfigureHeaders, payload: OrderDraftsSubmitConfigureRequestJson, success: OrderDraftsSubmitConfigure200, error: [OrderDraftsSubmitConfigure401.pipe(HttpApiSchema.status(401)), OrderDraftsSubmitConfigure403.pipe(HttpApiSchema.status(403)), OrderDraftsSubmitConfigure404.pipe(HttpApiSchema.status(404)), OrderDraftsSubmitConfigure409.pipe(HttpApiSchema.status(409)), OrderDraftsSubmitConfigure422.pipe(HttpApiSchema.status(422))] }) + HttpApiEndpoint.post("orderDraftsSubmitConfigure", "/order_drafts/{id}:submitConfiguration", { params: OrderDraftsSubmitConfigurePathParams, headers: OrderDraftsSubmitConfigureHeaders, payload: OrderDraftsSubmitConfigureRequestJson, success: OrderDraftsSubmitConfigure200, error: [OrderDraftsSubmitConfigure401.pipe(HttpApiSchema.status(401)), OrderDraftsSubmitConfigure403.pipe(HttpApiSchema.status(403)), OrderDraftsSubmitConfigure404.pipe(HttpApiSchema.status(404)), OrderDraftsSubmitConfigure409.pipe(HttpApiSchema.status(409)), OrderDraftsSubmitConfigure422.pipe(HttpApiSchema.status(422))] }) .middleware(BearerAuthSecurityMiddleware) .annotate(OpenApi.Identifier, "orderDrafts.submitConfigure") .annotate(OpenApi.Summary, "Submit configure values") .annotate(OpenApi.Description, "Persists the customer’s configure-form values on the order draft and advances it to the payment phase, returning the updated record. Values are validated against the package version’s schema."), - HttpApiEndpoint.post("orderDraftsCreateWorkerBootstrap", "/order_drafts/:id%3AcreateWorkerBootstrap", { params: OrderDraftsCreateWorkerBootstrapPathParams, payload: [OrderDraftsCreateWorkerBootstrapRequestJson, HttpApiSchema.NoContent], success: OrderDraftsCreateWorkerBootstrap200, error: [OrderDraftsCreateWorkerBootstrap401.pipe(HttpApiSchema.status(401)), OrderDraftsCreateWorkerBootstrap403.pipe(HttpApiSchema.status(403)), OrderDraftsCreateWorkerBootstrap404.pipe(HttpApiSchema.status(404)), OrderDraftsCreateWorkerBootstrap409.pipe(HttpApiSchema.status(409))] }) + HttpApiEndpoint.post("orderDraftsCreateWorkerBootstrap", "/order_drafts/{id}:createWorkerBootstrap", { params: OrderDraftsCreateWorkerBootstrapPathParams, payload: [OrderDraftsCreateWorkerBootstrapRequestJson, HttpApiSchema.NoContent], success: OrderDraftsCreateWorkerBootstrap200, error: [OrderDraftsCreateWorkerBootstrap401.pipe(HttpApiSchema.status(401)), OrderDraftsCreateWorkerBootstrap403.pipe(HttpApiSchema.status(403)), OrderDraftsCreateWorkerBootstrap404.pipe(HttpApiSchema.status(404)), OrderDraftsCreateWorkerBootstrap409.pipe(HttpApiSchema.status(409))] }) .middleware(BearerAuthSecurityMiddleware) .annotate(OpenApi.Identifier, "orderDrafts.createWorkerBootstrap") .annotate(OpenApi.Summary, "Create order draft worker bootstrap") .annotate(OpenApi.Description, "Creates a short-lived worker bootstrap token and renders command/cloud-init data for the cluster allocated to this order draft. Only valid while the draft is waiting for compute bootstrap."), - HttpApiEndpoint.get("orderDraftsListCheckoutSessions", "/order_drafts/:id/checkout_sessions", { params: OrderDraftsListCheckoutSessionsPathParams, query: OrderDraftsListCheckoutSessionsQuery, success: OrderDraftsListCheckoutSessions200, error: [OrderDraftsListCheckoutSessions401.pipe(HttpApiSchema.status(401)), OrderDraftsListCheckoutSessions403.pipe(HttpApiSchema.status(403)), OrderDraftsListCheckoutSessions404.pipe(HttpApiSchema.status(404))] }) + HttpApiEndpoint.get("orderDraftsListCheckoutSessions", "/order_drafts/{id}/checkout_sessions", { params: OrderDraftsListCheckoutSessionsPathParams, query: OrderDraftsListCheckoutSessionsQuery, success: OrderDraftsListCheckoutSessions200, error: [OrderDraftsListCheckoutSessions401.pipe(HttpApiSchema.status(401)), OrderDraftsListCheckoutSessions403.pipe(HttpApiSchema.status(403)), OrderDraftsListCheckoutSessions404.pipe(HttpApiSchema.status(404))] }) .middleware(BearerAuthSecurityMiddleware) .annotate(OpenApi.Identifier, "orderDrafts.listCheckoutSessions") .annotate(OpenApi.Summary, "List order draft checkout sessions") .annotate(OpenApi.Description, "Returns historical checkout session rows for the order draft (current and past) for resume/audit workflows."), - HttpApiEndpoint.post("orderDraftsCreateCheckoutSession", "/order_drafts/:id/checkout_sessions", { params: OrderDraftsCreateCheckoutSessionPathParams, headers: OrderDraftsCreateCheckoutSessionHeaders, success: OrderDraftsCreateCheckoutSession201.pipe(HttpApiSchema.status(201)), error: [OrderDraftsCreateCheckoutSession401.pipe(HttpApiSchema.status(401)), OrderDraftsCreateCheckoutSession403.pipe(HttpApiSchema.status(403)), OrderDraftsCreateCheckoutSession404.pipe(HttpApiSchema.status(404)), OrderDraftsCreateCheckoutSession409.pipe(HttpApiSchema.status(409)), OrderDraftsCreateCheckoutSession422.pipe(HttpApiSchema.status(422)), OrderDraftsCreateCheckoutSession500] }) + HttpApiEndpoint.post("orderDraftsCreateCheckoutSession", "/order_drafts/{id}/checkout_sessions", { params: OrderDraftsCreateCheckoutSessionPathParams, headers: OrderDraftsCreateCheckoutSessionHeaders, success: OrderDraftsCreateCheckoutSession201.pipe(HttpApiSchema.status(201)), error: [OrderDraftsCreateCheckoutSession401.pipe(HttpApiSchema.status(401)), OrderDraftsCreateCheckoutSession403.pipe(HttpApiSchema.status(403)), OrderDraftsCreateCheckoutSession404.pipe(HttpApiSchema.status(404)), OrderDraftsCreateCheckoutSession409.pipe(HttpApiSchema.status(409)), OrderDraftsCreateCheckoutSession422.pipe(HttpApiSchema.status(422)), OrderDraftsCreateCheckoutSession500] }) .middleware(BearerAuthSecurityMiddleware) .annotate(OpenApi.Identifier, "orderDrafts.createCheckoutSession") .annotate(OpenApi.Summary, "Create order draft checkout session") .annotate(OpenApi.Description, "Creates a Stripe Checkout Session for the current order-draft payment revision, or returns the existing open session when it still has enough remaining lifetime. Stale sessions are expired and superseded before a replacement is created."), - HttpApiEndpoint.get("orderDraftsGetCheckoutSession", "/order_drafts/:id/checkout_sessions/:chk_id", { params: OrderDraftsGetCheckoutSessionPathParams, success: OrderDraftsGetCheckoutSession200, error: [OrderDraftsGetCheckoutSession401.pipe(HttpApiSchema.status(401)), OrderDraftsGetCheckoutSession403.pipe(HttpApiSchema.status(403)), OrderDraftsGetCheckoutSession404.pipe(HttpApiSchema.status(404))] }) + HttpApiEndpoint.get("orderDraftsGetCheckoutSession", "/order_drafts/{id}/checkout_sessions/{chk_id}", { params: OrderDraftsGetCheckoutSessionPathParams, success: OrderDraftsGetCheckoutSession200, error: [OrderDraftsGetCheckoutSession401.pipe(HttpApiSchema.status(401)), OrderDraftsGetCheckoutSession403.pipe(HttpApiSchema.status(403)), OrderDraftsGetCheckoutSession404.pipe(HttpApiSchema.status(404))] }) .middleware(BearerAuthSecurityMiddleware) .annotate(OpenApi.Identifier, "orderDrafts.getCheckoutSession") .annotate(OpenApi.Summary, "Get order draft checkout session") @@ -4184,17 +4184,17 @@ class OperationsGroup extends HttpApiGroup.make("Operations") .annotate(OpenApi.Identifier, "operations.list") .annotate(OpenApi.Summary, "List operations") .annotate(OpenApi.Description, "Workspace-scoped list of long-running operations, newest first. Without filters returns every operation in the workspace; with `?owner_type=install&owner_id=` narrows to a single entity.\n\nState for in-flight operations is eventually consistent — may lag actual execution by a few seconds. State for completed operations (`done: true`) is immutable."), - HttpApiEndpoint.get("operationsGet", "/operations/:id", { params: OperationsGetPathParams, headers: OperationsGetHeaders, success: OperationsGet200, error: [OperationsGet401.pipe(HttpApiSchema.status(401)), OperationsGet403.pipe(HttpApiSchema.status(403)), OperationsGet404.pipe(HttpApiSchema.status(404))] }) + HttpApiEndpoint.get("operationsGet", "/operations/{id}", { params: OperationsGetPathParams, headers: OperationsGetHeaders, success: OperationsGet200, error: [OperationsGet401.pipe(HttpApiSchema.status(401)), OperationsGet403.pipe(HttpApiSchema.status(403)), OperationsGet404.pipe(HttpApiSchema.status(404))] }) .middleware(BearerAuthSecurityMiddleware) .annotate(OpenApi.Identifier, "operations.get") .annotate(OpenApi.Summary, "Get operation details + steps") .annotate(OpenApi.Description, "Returns the operation row plus its per-step progress events. Clients poll this endpoint while `done` is false; when `done` flips true, `response` carries the typed result (`SUCCEEDED`) or `error.message` carries the failure reason. Prefer `POST /v1/operations/{id}:wait` for sync \"wait until done\" semantics — it long-polls server-side instead of asking the client to tight-poll.\n\nState for in-flight operations is eventually consistent — may lag actual execution by a few seconds. State for completed operations (`done: true`) is immutable."), - HttpApiEndpoint.post("operationsWait", "/operations/:id%3Await", { params: OperationsWaitPathParams, query: OperationsWaitQuery, success: OperationsWait200, error: [OperationsWait401.pipe(HttpApiSchema.status(401)), OperationsWait403.pipe(HttpApiSchema.status(403)), OperationsWait404.pipe(HttpApiSchema.status(404))] }) + HttpApiEndpoint.post("operationsWait", "/operations/{id}:wait", { params: OperationsWaitPathParams, query: OperationsWaitQuery, success: OperationsWait200, error: [OperationsWait401.pipe(HttpApiSchema.status(401)), OperationsWait403.pipe(HttpApiSchema.status(403)), OperationsWait404.pipe(HttpApiSchema.status(404))] }) .middleware(BearerAuthSecurityMiddleware) .annotate(OpenApi.Identifier, "operations.wait") .annotate(OpenApi.Summary, "Wait for an operation to reach a terminal state") .annotate(OpenApi.Description, "Long-polls server-side until the operation reaches a terminal state (`SUCCEEDED`, `FAILED`, `CANCELLED`) or the timeout elapses. Returns the latest `Operation` either way — check `done` to distinguish.\n\nServer-side this is a live subscription on the operation row, not a polling loop, so the response fires within milliseconds of the workflow reaching its terminal state.\n\nState for in-flight operations is eventually consistent — may lag actual execution by a few seconds. State for completed operations (`done: true`) is immutable."), - HttpApiEndpoint.post("operationsCancel", "/operations/:id%3Acancel", { params: OperationsCancelPathParams, headers: OperationsCancelHeaders, success: OperationsCancel202.pipe(HttpApiSchema.status(202)), error: [OperationsCancel401.pipe(HttpApiSchema.status(401)), OperationsCancel403.pipe(HttpApiSchema.status(403)), OperationsCancel404.pipe(HttpApiSchema.status(404)), OperationsCancel422.pipe(HttpApiSchema.status(422))] }) + HttpApiEndpoint.post("operationsCancel", "/operations/{id}:cancel", { params: OperationsCancelPathParams, headers: OperationsCancelHeaders, success: OperationsCancel202.pipe(HttpApiSchema.status(202)), error: [OperationsCancel401.pipe(HttpApiSchema.status(401)), OperationsCancel403.pipe(HttpApiSchema.status(403)), OperationsCancel404.pipe(HttpApiSchema.status(404)), OperationsCancel422.pipe(HttpApiSchema.status(422))] }) .middleware(BearerAuthSecurityMiddleware) .annotate(OpenApi.Identifier, "operations.cancel") .annotate(OpenApi.Summary, "Request operation cancellation") @@ -4212,42 +4212,42 @@ class PackagesGroup extends HttpApiGroup.make("Packages") .annotate(OpenApi.Identifier, "packages.create") .annotate(OpenApi.Summary, "Create package") .annotate(OpenApi.Description, "Creates a package from one OCI Helm source as a long-running operation."), - HttpApiEndpoint.get("packagesGet", "/packages/:id", { params: PackagesGetPathParams, query: PackagesGetQuery, headers: PackagesGetHeaders, success: PackagesGet200, error: [PackagesGet401.pipe(HttpApiSchema.status(401)), PackagesGet403.pipe(HttpApiSchema.status(403)), PackagesGet404.pipe(HttpApiSchema.status(404))] }) + HttpApiEndpoint.get("packagesGet", "/packages/{id}", { params: PackagesGetPathParams, query: PackagesGetQuery, headers: PackagesGetHeaders, success: PackagesGet200, error: [PackagesGet401.pipe(HttpApiSchema.status(401)), PackagesGet403.pipe(HttpApiSchema.status(403)), PackagesGet404.pipe(HttpApiSchema.status(404))] }) .middleware(BearerAuthSecurityMiddleware) .annotate(OpenApi.Identifier, "packages.get") .annotate(OpenApi.Summary, "Get package details") .annotate(OpenApi.Description, "Returns a single package and the `latest_version_id` pointer for this workspace."), - HttpApiEndpoint.delete("packagesDelete", "/packages/:id", { params: PackagesDeletePathParams, headers: PackagesDeleteHeaders, success: HttpApiSchema.Empty(204), error: [PackagesDelete401.pipe(HttpApiSchema.status(401)), PackagesDelete403.pipe(HttpApiSchema.status(403)), PackagesDelete404.pipe(HttpApiSchema.status(404)), PackagesDelete409.pipe(HttpApiSchema.status(409))] }) + HttpApiEndpoint.delete("packagesDelete", "/packages/{id}", { params: PackagesDeletePathParams, headers: PackagesDeleteHeaders, success: HttpApiSchema.Empty(204), error: [PackagesDelete401.pipe(HttpApiSchema.status(401)), PackagesDelete403.pipe(HttpApiSchema.status(403)), PackagesDelete404.pipe(HttpApiSchema.status(404)), PackagesDelete409.pipe(HttpApiSchema.status(409))] }) .middleware(BearerAuthSecurityMiddleware) .annotate(OpenApi.Identifier, "packages.delete") .annotate(OpenApi.Summary, "Delete package") .annotate(OpenApi.Description, "Deletes a Package and its PackageVersions only when no Product references the Package and no Install references any PackageVersion."), - HttpApiEndpoint.get("packagesListVersions", "/packages/:id/versions", { params: PackagesListVersionsPathParams, query: PackagesListVersionsQuery, headers: PackagesListVersionsHeaders, success: PackagesListVersions200, error: [PackagesListVersions401.pipe(HttpApiSchema.status(401)), PackagesListVersions403.pipe(HttpApiSchema.status(403)), PackagesListVersions404.pipe(HttpApiSchema.status(404))] }) + HttpApiEndpoint.get("packagesListVersions", "/packages/{id}/versions", { params: PackagesListVersionsPathParams, query: PackagesListVersionsQuery, headers: PackagesListVersionsHeaders, success: PackagesListVersions200, error: [PackagesListVersions401.pipe(HttpApiSchema.status(401)), PackagesListVersions403.pipe(HttpApiSchema.status(403)), PackagesListVersions404.pipe(HttpApiSchema.status(404))] }) .middleware(BearerAuthSecurityMiddleware) .annotate(OpenApi.Identifier, "packages.listVersions") .annotate(OpenApi.Summary, "List package versions") .annotate(OpenApi.Description, "Returns published versions of a package, newest first."), - HttpApiEndpoint.post("packagesCreateVersion", "/packages/:id/versions", { params: PackagesCreateVersionPathParams, headers: PackagesCreateVersionHeaders, payload: [PackagesCreateVersionRequestJson, HttpApiSchema.NoContent], success: PackagesCreateVersion201.pipe(HttpApiSchema.status(201)), error: [PackagesCreateVersion401.pipe(HttpApiSchema.status(401)), PackagesCreateVersion403.pipe(HttpApiSchema.status(403)), PackagesCreateVersion404.pipe(HttpApiSchema.status(404)), PackagesCreateVersion409.pipe(HttpApiSchema.status(409)), PackagesCreateVersion422.pipe(HttpApiSchema.status(422))] }) + HttpApiEndpoint.post("packagesCreateVersion", "/packages/{id}/versions", { params: PackagesCreateVersionPathParams, headers: PackagesCreateVersionHeaders, payload: [PackagesCreateVersionRequestJson, HttpApiSchema.NoContent], success: PackagesCreateVersion201.pipe(HttpApiSchema.status(201)), error: [PackagesCreateVersion401.pipe(HttpApiSchema.status(401)), PackagesCreateVersion403.pipe(HttpApiSchema.status(403)), PackagesCreateVersion404.pipe(HttpApiSchema.status(404)), PackagesCreateVersion409.pipe(HttpApiSchema.status(409)), PackagesCreateVersion422.pipe(HttpApiSchema.status(422))] }) .middleware(BearerAuthSecurityMiddleware) .annotate(OpenApi.Identifier, "packages.createVersion") .annotate(OpenApi.Summary, "Create package version") .annotate(OpenApi.Description, "Registers an immutable version for an existing OCI-backed package. Akua verifies the supplied version metadata against the published artifact before durable registration. Requires published Package import access. Hosted packages publish versions through the package creation workflow."), - HttpApiEndpoint.get("packagesGetVersion", "/packages/:id/versions/:version_id", { params: PackagesGetVersionPathParams, headers: PackagesGetVersionHeaders, success: PackagesGetVersion200, error: [PackagesGetVersion401.pipe(HttpApiSchema.status(401)), PackagesGetVersion403.pipe(HttpApiSchema.status(403)), PackagesGetVersion404.pipe(HttpApiSchema.status(404))] }) + HttpApiEndpoint.get("packagesGetVersion", "/packages/{id}/versions/{version_id}", { params: PackagesGetVersionPathParams, headers: PackagesGetVersionHeaders, success: PackagesGetVersion200, error: [PackagesGetVersion401.pipe(HttpApiSchema.status(401)), PackagesGetVersion403.pipe(HttpApiSchema.status(403)), PackagesGetVersion404.pipe(HttpApiSchema.status(404))] }) .middleware(BearerAuthSecurityMiddleware) .annotate(OpenApi.Identifier, "packages.getVersion") .annotate(OpenApi.Summary, "Get package version details") .annotate(OpenApi.Description, "Returns a single version entry for a package."), - HttpApiEndpoint.get("packagesGetVersionInputs", "/packages/:id/versions/:version_id/inputs", { params: PackagesGetVersionInputsPathParams, headers: PackagesGetVersionInputsHeaders, success: PackagesGetVersionInputs200, error: [PackagesGetVersionInputs401.pipe(HttpApiSchema.status(401)), PackagesGetVersionInputs403.pipe(HttpApiSchema.status(403)), PackagesGetVersionInputs404.pipe(HttpApiSchema.status(404))] }) + HttpApiEndpoint.get("packagesGetVersionInputs", "/packages/{id}/versions/{version_id}/inputs", { params: PackagesGetVersionInputsPathParams, headers: PackagesGetVersionInputsHeaders, success: PackagesGetVersionInputs200, error: [PackagesGetVersionInputs401.pipe(HttpApiSchema.status(401)), PackagesGetVersionInputs403.pipe(HttpApiSchema.status(403)), PackagesGetVersionInputs404.pipe(HttpApiSchema.status(404))] }) .middleware(BearerAuthSecurityMiddleware) .annotate(OpenApi.Identifier, "packages.getVersionInputs") .annotate(OpenApi.Summary, "Get package version input schema") .annotate(OpenApi.Description, "Returns the version input schema used by the install wizard, typically generated JSON Schema."), - HttpApiEndpoint.get("packagesGetArtifacthubValuesSchema", "/packages/artifacthub/:package_id/versions/:version/values_schema", { params: PackagesGetArtifacthubValuesSchemaPathParams, query: PackagesGetArtifacthubValuesSchemaQuery, success: PackagesGetArtifacthubValuesSchema200, error: PackagesGetArtifacthubValuesSchema401.pipe(HttpApiSchema.status(401)) }) + HttpApiEndpoint.get("packagesGetArtifacthubValuesSchema", "/packages/artifacthub/{package_id}/versions/{version}/values_schema", { params: PackagesGetArtifacthubValuesSchemaPathParams, query: PackagesGetArtifacthubValuesSchemaQuery, success: PackagesGetArtifacthubValuesSchema200, error: PackagesGetArtifacthubValuesSchema401.pipe(HttpApiSchema.status(401)) }) .middleware(BearerAuthSecurityMiddleware) .annotate(OpenApi.Identifier, "packages.getArtifacthubValuesSchema") .annotate(OpenApi.Summary, "Resolve Artifact Hub chart values + schema") .annotate(OpenApi.Description, "Fetches a chart's values from Artifact Hub and returns them with a JSON Schema — the chart's published schema (when present) merged over a schema inferred from the values, so the editor always has defaults to show."), - HttpApiEndpoint.post("packagesImportPublished", "/packages%3Aimport", { headers: PackagesImportPublishedHeaders, payload: [PackagesImportPublishedRequestJson, HttpApiSchema.NoContent], success: PackagesImportPublished201.pipe(HttpApiSchema.status(201)), error: [PackagesImportPublished401.pipe(HttpApiSchema.status(401)), PackagesImportPublished403.pipe(HttpApiSchema.status(403)), PackagesImportPublished409.pipe(HttpApiSchema.status(409)), PackagesImportPublished422.pipe(HttpApiSchema.status(422))] }) + HttpApiEndpoint.post("packagesImportPublished", "/packages:import", { headers: PackagesImportPublishedHeaders, payload: [PackagesImportPublishedRequestJson, HttpApiSchema.NoContent], success: PackagesImportPublished201.pipe(HttpApiSchema.status(201)), error: [PackagesImportPublished401.pipe(HttpApiSchema.status(401)), PackagesImportPublished403.pipe(HttpApiSchema.status(403)), PackagesImportPublished409.pipe(HttpApiSchema.status(409)), PackagesImportPublished422.pipe(HttpApiSchema.status(422))] }) .middleware(BearerAuthSecurityMiddleware) .annotate(OpenApi.Identifier, "packages.importPublished") .annotate(OpenApi.Summary, "Import published package") @@ -4265,82 +4265,82 @@ class WorkspacesGroup extends HttpApiGroup.make("Workspaces") .annotate(OpenApi.Identifier, "workspaces.create") .annotate(OpenApi.Summary, "Create workspace") .annotate(OpenApi.Description, "Creates a workspace for the authenticated user."), - HttpApiEndpoint.get("workspacesGet", "/workspaces/:id", { params: WorkspacesGetPathParams, success: WorkspacesGet200, error: [WorkspacesGet401.pipe(HttpApiSchema.status(401)), WorkspacesGet403.pipe(HttpApiSchema.status(403)), WorkspacesGet404.pipe(HttpApiSchema.status(404))] }) + HttpApiEndpoint.get("workspacesGet", "/workspaces/{id}", { params: WorkspacesGetPathParams, success: WorkspacesGet200, error: [WorkspacesGet401.pipe(HttpApiSchema.status(401)), WorkspacesGet403.pipe(HttpApiSchema.status(403)), WorkspacesGet404.pipe(HttpApiSchema.status(404))] }) .middleware(BearerAuthSecurityMiddleware) .annotate(OpenApi.Identifier, "workspaces.get") .annotate(OpenApi.Summary, "Get workspace") .annotate(OpenApi.Description, "Returns the details of a workspace."), - HttpApiEndpoint.delete("workspacesDelete", "/workspaces/:id", { params: WorkspacesDeletePathParams, headers: WorkspacesDeleteHeaders, success: WorkspacesDelete202.pipe(HttpApiSchema.status(202)), error: [WorkspacesDelete401.pipe(HttpApiSchema.status(401)), WorkspacesDelete403.pipe(HttpApiSchema.status(403)), WorkspacesDelete404.pipe(HttpApiSchema.status(404)), WorkspacesDelete409.pipe(HttpApiSchema.status(409)), WorkspacesDelete504.pipe(HttpApiSchema.status(504))] }) + HttpApiEndpoint.delete("workspacesDelete", "/workspaces/{id}", { params: WorkspacesDeletePathParams, headers: WorkspacesDeleteHeaders, success: WorkspacesDelete202.pipe(HttpApiSchema.status(202)), error: [WorkspacesDelete401.pipe(HttpApiSchema.status(401)), WorkspacesDelete403.pipe(HttpApiSchema.status(403)), WorkspacesDelete404.pipe(HttpApiSchema.status(404)), WorkspacesDelete409.pipe(HttpApiSchema.status(409)), WorkspacesDelete504.pipe(HttpApiSchema.status(504))] }) .middleware(BearerAuthSecurityMiddleware) .annotate(OpenApi.Identifier, "workspaces.delete") .annotate(OpenApi.Summary, "Delete workspace") .annotate(OpenApi.Description, "Asynchronously deletes a workspace and all of its workspace-owned resources."), - HttpApiEndpoint.patch("workspacesUpdate", "/workspaces/:id", { params: WorkspacesUpdatePathParams, headers: WorkspacesUpdateHeaders, payload: [WorkspacesUpdateRequestJson, HttpApiSchema.NoContent], success: WorkspacesUpdate200, error: [WorkspacesUpdate401.pipe(HttpApiSchema.status(401)), WorkspacesUpdate403.pipe(HttpApiSchema.status(403)), WorkspacesUpdate409.pipe(HttpApiSchema.status(409)), WorkspacesUpdate422.pipe(HttpApiSchema.status(422))] }) + HttpApiEndpoint.patch("workspacesUpdate", "/workspaces/{id}", { params: WorkspacesUpdatePathParams, headers: WorkspacesUpdateHeaders, payload: [WorkspacesUpdateRequestJson, HttpApiSchema.NoContent], success: WorkspacesUpdate200, error: [WorkspacesUpdate401.pipe(HttpApiSchema.status(401)), WorkspacesUpdate403.pipe(HttpApiSchema.status(403)), WorkspacesUpdate409.pipe(HttpApiSchema.status(409)), WorkspacesUpdate422.pipe(HttpApiSchema.status(422))] }) .middleware(BearerAuthSecurityMiddleware) .annotate(OpenApi.Identifier, "workspaces.update") .annotate(OpenApi.Summary, "Update workspace") .annotate(OpenApi.Description, "Updates workspace metadata for the selected workspace."), - HttpApiEndpoint.get("workspacesListMembers", "/workspaces/:id/members", { params: WorkspacesListMembersPathParams, headers: WorkspacesListMembersHeaders, success: WorkspacesListMembers200, error: [WorkspacesListMembers401.pipe(HttpApiSchema.status(401)), WorkspacesListMembers403.pipe(HttpApiSchema.status(403)), WorkspacesListMembers404.pipe(HttpApiSchema.status(404))] }) + HttpApiEndpoint.get("workspacesListMembers", "/workspaces/{id}/members", { params: WorkspacesListMembersPathParams, headers: WorkspacesListMembersHeaders, success: WorkspacesListMembers200, error: [WorkspacesListMembers401.pipe(HttpApiSchema.status(401)), WorkspacesListMembers403.pipe(HttpApiSchema.status(403)), WorkspacesListMembers404.pipe(HttpApiSchema.status(404))] }) .middleware(BearerAuthSecurityMiddleware) .annotate(OpenApi.Identifier, "workspaces.listMembers") .annotate(OpenApi.Summary, "List workspace members") .annotate(OpenApi.Description, "Returns the members and roles for a workspace."), - HttpApiEndpoint.post("workspacesAddMember", "/workspaces/:id/members", { params: WorkspacesAddMemberPathParams, headers: WorkspacesAddMemberHeaders, payload: [WorkspacesAddMemberRequestJson, HttpApiSchema.NoContent], success: HttpApiSchema.Empty(201), error: [WorkspacesAddMember401.pipe(HttpApiSchema.status(401)), WorkspacesAddMember403.pipe(HttpApiSchema.status(403)), WorkspacesAddMember409.pipe(HttpApiSchema.status(409)), WorkspacesAddMember422.pipe(HttpApiSchema.status(422))] }) + HttpApiEndpoint.post("workspacesAddMember", "/workspaces/{id}/members", { params: WorkspacesAddMemberPathParams, headers: WorkspacesAddMemberHeaders, payload: [WorkspacesAddMemberRequestJson, HttpApiSchema.NoContent], success: HttpApiSchema.Empty(201), error: [WorkspacesAddMember401.pipe(HttpApiSchema.status(401)), WorkspacesAddMember403.pipe(HttpApiSchema.status(403)), WorkspacesAddMember409.pipe(HttpApiSchema.status(409)), WorkspacesAddMember422.pipe(HttpApiSchema.status(422))] }) .middleware(BearerAuthSecurityMiddleware) .annotate(OpenApi.Identifier, "workspaces.addMember") .annotate(OpenApi.Summary, "Add workspace member") .annotate(OpenApi.Description, "Adds a user to a workspace with the requested role."), - HttpApiEndpoint.delete("workspacesRemoveMember", "/workspaces/:id/members/:userId", { params: WorkspacesRemoveMemberPathParams, headers: WorkspacesRemoveMemberHeaders, success: HttpApiSchema.Empty(204), error: [WorkspacesRemoveMember400.pipe(HttpApiSchema.status(400)), WorkspacesRemoveMember401.pipe(HttpApiSchema.status(401)), WorkspacesRemoveMember403.pipe(HttpApiSchema.status(403)), WorkspacesRemoveMember404.pipe(HttpApiSchema.status(404)), WorkspacesRemoveMember409.pipe(HttpApiSchema.status(409))] }) + HttpApiEndpoint.delete("workspacesRemoveMember", "/workspaces/{id}/members/{userId}", { params: WorkspacesRemoveMemberPathParams, headers: WorkspacesRemoveMemberHeaders, success: HttpApiSchema.Empty(204), error: [WorkspacesRemoveMember400.pipe(HttpApiSchema.status(400)), WorkspacesRemoveMember401.pipe(HttpApiSchema.status(401)), WorkspacesRemoveMember403.pipe(HttpApiSchema.status(403)), WorkspacesRemoveMember404.pipe(HttpApiSchema.status(404)), WorkspacesRemoveMember409.pipe(HttpApiSchema.status(409))] }) .middleware(BearerAuthSecurityMiddleware) .annotate(OpenApi.Identifier, "workspaces.removeMember") .annotate(OpenApi.Summary, "Remove workspace member") .annotate(OpenApi.Description, "Removes a user from a workspace."), - HttpApiEndpoint.patch("workspacesUpdateMember", "/workspaces/:id/members/:userId", { params: WorkspacesUpdateMemberPathParams, headers: WorkspacesUpdateMemberHeaders, payload: [WorkspacesUpdateMemberRequestJson, HttpApiSchema.NoContent], success: HttpApiSchema.Empty(200), error: [WorkspacesUpdateMember400.pipe(HttpApiSchema.status(400)), WorkspacesUpdateMember401.pipe(HttpApiSchema.status(401)), WorkspacesUpdateMember403.pipe(HttpApiSchema.status(403)), WorkspacesUpdateMember404.pipe(HttpApiSchema.status(404)), WorkspacesUpdateMember409.pipe(HttpApiSchema.status(409))] }) + HttpApiEndpoint.patch("workspacesUpdateMember", "/workspaces/{id}/members/{userId}", { params: WorkspacesUpdateMemberPathParams, headers: WorkspacesUpdateMemberHeaders, payload: [WorkspacesUpdateMemberRequestJson, HttpApiSchema.NoContent], success: HttpApiSchema.Empty(200), error: [WorkspacesUpdateMember400.pipe(HttpApiSchema.status(400)), WorkspacesUpdateMember401.pipe(HttpApiSchema.status(401)), WorkspacesUpdateMember403.pipe(HttpApiSchema.status(403)), WorkspacesUpdateMember404.pipe(HttpApiSchema.status(404)), WorkspacesUpdateMember409.pipe(HttpApiSchema.status(409))] }) .middleware(BearerAuthSecurityMiddleware) .annotate(OpenApi.Identifier, "workspaces.updateMember") .annotate(OpenApi.Summary, "Update workspace member role") .annotate(OpenApi.Description, "Updates the role of a workspace member."), - HttpApiEndpoint.get("workspacesGetSubscription", "/workspaces/:id/subscription", { params: WorkspacesGetSubscriptionPathParams, headers: WorkspacesGetSubscriptionHeaders, success: WorkspacesGetSubscription200, error: [WorkspacesGetSubscription401.pipe(HttpApiSchema.status(401)), WorkspacesGetSubscription403.pipe(HttpApiSchema.status(403)), WorkspacesGetSubscription404.pipe(HttpApiSchema.status(404))] }) + HttpApiEndpoint.get("workspacesGetSubscription", "/workspaces/{id}/subscription", { params: WorkspacesGetSubscriptionPathParams, headers: WorkspacesGetSubscriptionHeaders, success: WorkspacesGetSubscription200, error: [WorkspacesGetSubscription401.pipe(HttpApiSchema.status(401)), WorkspacesGetSubscription403.pipe(HttpApiSchema.status(403)), WorkspacesGetSubscription404.pipe(HttpApiSchema.status(404))] }) .middleware(BearerAuthSecurityMiddleware) .annotate(OpenApi.Identifier, "workspaces.getSubscription") .annotate(OpenApi.Summary, "Get workspace subscription") .annotate(OpenApi.Description, "Returns billing subscription information for a workspace."), - HttpApiEndpoint.get("workspacesGetAccessState", "/workspaces/:id/access_state", { params: WorkspacesGetAccessStatePathParams, headers: WorkspacesGetAccessStateHeaders, success: WorkspacesGetAccessState200, error: [WorkspacesGetAccessState401.pipe(HttpApiSchema.status(401)), WorkspacesGetAccessState403.pipe(HttpApiSchema.status(403)), WorkspacesGetAccessState404.pipe(HttpApiSchema.status(404))] }) + HttpApiEndpoint.get("workspacesGetAccessState", "/workspaces/{id}/access_state", { params: WorkspacesGetAccessStatePathParams, headers: WorkspacesGetAccessStateHeaders, success: WorkspacesGetAccessState200, error: [WorkspacesGetAccessState401.pipe(HttpApiSchema.status(401)), WorkspacesGetAccessState403.pipe(HttpApiSchema.status(403)), WorkspacesGetAccessState404.pipe(HttpApiSchema.status(404))] }) .middleware(BearerAuthSecurityMiddleware) .annotate(OpenApi.Identifier, "workspaces.getAccessState") .annotate(OpenApi.Summary, "Get workspace access state") .annotate(OpenApi.Description, "Returns whether the workspace is currently accessible and why."), - HttpApiEndpoint.get("workspacesGetManagement", "/workspaces/:id/management", { params: WorkspacesGetManagementPathParams, headers: WorkspacesGetManagementHeaders, success: WorkspacesGetManagement200, error: [WorkspacesGetManagement401.pipe(HttpApiSchema.status(401)), WorkspacesGetManagement403.pipe(HttpApiSchema.status(403)), WorkspacesGetManagement404.pipe(HttpApiSchema.status(404))] }) + HttpApiEndpoint.get("workspacesGetManagement", "/workspaces/{id}/management", { params: WorkspacesGetManagementPathParams, headers: WorkspacesGetManagementHeaders, success: WorkspacesGetManagement200, error: [WorkspacesGetManagement401.pipe(HttpApiSchema.status(401)), WorkspacesGetManagement403.pipe(HttpApiSchema.status(403)), WorkspacesGetManagement404.pipe(HttpApiSchema.status(404))] }) .middleware(BearerAuthSecurityMiddleware) .annotate(OpenApi.Identifier, "workspaces.getManagement") .annotate(OpenApi.Summary, "Get workspace management access") .annotate(OpenApi.Description, "Returns the organization currently allowed to manage this customer-owned workspace."), - HttpApiEndpoint.post("workspacesRevokeManagement", "/workspaces/:id%3ArevokeManagement", { params: WorkspacesRevokeManagementPathParams, headers: WorkspacesRevokeManagementHeaders, success: HttpApiSchema.Empty(204), error: [WorkspacesRevokeManagement401.pipe(HttpApiSchema.status(401)), WorkspacesRevokeManagement403.pipe(HttpApiSchema.status(403)), WorkspacesRevokeManagement404.pipe(HttpApiSchema.status(404)), WorkspacesRevokeManagement409.pipe(HttpApiSchema.status(409))] }) + HttpApiEndpoint.post("workspacesRevokeManagement", "/workspaces/{id}:revokeManagement", { params: WorkspacesRevokeManagementPathParams, headers: WorkspacesRevokeManagementHeaders, success: HttpApiSchema.Empty(204), error: [WorkspacesRevokeManagement401.pipe(HttpApiSchema.status(401)), WorkspacesRevokeManagement403.pipe(HttpApiSchema.status(403)), WorkspacesRevokeManagement404.pipe(HttpApiSchema.status(404)), WorkspacesRevokeManagement409.pipe(HttpApiSchema.status(409))] }) .middleware(BearerAuthSecurityMiddleware) .annotate(OpenApi.Identifier, "workspaces.revokeManagement") .annotate(OpenApi.Summary, "Revoke workspace management access") .annotate(OpenApi.Description, "Removes organization-level management access while preserving customer ownership and the running workspace."), - HttpApiEndpoint.post("workspacesCancelSubscription", "/workspaces/:id/subscription%3Acancel", { params: WorkspacesCancelSubscriptionPathParams, headers: WorkspacesCancelSubscriptionHeaders, payload: [WorkspacesCancelSubscriptionRequestJson, HttpApiSchema.NoContent], success: WorkspacesCancelSubscription202.pipe(HttpApiSchema.status(202)), error: [WorkspacesCancelSubscription401.pipe(HttpApiSchema.status(401)), WorkspacesCancelSubscription403.pipe(HttpApiSchema.status(403)), WorkspacesCancelSubscription404.pipe(HttpApiSchema.status(404)), WorkspacesCancelSubscription409.pipe(HttpApiSchema.status(409))] }) + HttpApiEndpoint.post("workspacesCancelSubscription", "/workspaces/{id}/subscription:cancel", { params: WorkspacesCancelSubscriptionPathParams, headers: WorkspacesCancelSubscriptionHeaders, payload: [WorkspacesCancelSubscriptionRequestJson, HttpApiSchema.NoContent], success: WorkspacesCancelSubscription202.pipe(HttpApiSchema.status(202)), error: [WorkspacesCancelSubscription401.pipe(HttpApiSchema.status(401)), WorkspacesCancelSubscription403.pipe(HttpApiSchema.status(403)), WorkspacesCancelSubscription404.pipe(HttpApiSchema.status(404)), WorkspacesCancelSubscription409.pipe(HttpApiSchema.status(409))] }) .middleware(BearerAuthSecurityMiddleware) .annotate(OpenApi.Identifier, "workspaces.cancelSubscription") .annotate(OpenApi.Summary, "Cancel workspace subscription") .annotate(OpenApi.Description, "Cancels or schedules cancellation for a workspace subscription."), - HttpApiEndpoint.post("workspacesReactivateSubscription", "/workspaces/:id/subscription%3Areactivate", { params: WorkspacesReactivateSubscriptionPathParams, headers: WorkspacesReactivateSubscriptionHeaders, payload: [WorkspacesReactivateSubscriptionRequestJson, HttpApiSchema.NoContent], success: WorkspacesReactivateSubscription202.pipe(HttpApiSchema.status(202)), error: [WorkspacesReactivateSubscription401.pipe(HttpApiSchema.status(401)), WorkspacesReactivateSubscription403.pipe(HttpApiSchema.status(403)), WorkspacesReactivateSubscription404.pipe(HttpApiSchema.status(404)), WorkspacesReactivateSubscription409.pipe(HttpApiSchema.status(409))] }) + HttpApiEndpoint.post("workspacesReactivateSubscription", "/workspaces/{id}/subscription:reactivate", { params: WorkspacesReactivateSubscriptionPathParams, headers: WorkspacesReactivateSubscriptionHeaders, payload: [WorkspacesReactivateSubscriptionRequestJson, HttpApiSchema.NoContent], success: WorkspacesReactivateSubscription202.pipe(HttpApiSchema.status(202)), error: [WorkspacesReactivateSubscription401.pipe(HttpApiSchema.status(401)), WorkspacesReactivateSubscription403.pipe(HttpApiSchema.status(403)), WorkspacesReactivateSubscription404.pipe(HttpApiSchema.status(404)), WorkspacesReactivateSubscription409.pipe(HttpApiSchema.status(409))] }) .middleware(BearerAuthSecurityMiddleware) .annotate(OpenApi.Identifier, "workspaces.reactivateSubscription") .annotate(OpenApi.Summary, "Reactivate workspace subscription") .annotate(OpenApi.Description, "Reactivates a workspace subscription and clears cancellation schedule."), - HttpApiEndpoint.post("workspacesChangeSubscriptionTier", "/workspaces/:id/subscription%3AchangeTier", { params: WorkspacesChangeSubscriptionTierPathParams, headers: WorkspacesChangeSubscriptionTierHeaders, payload: [WorkspacesChangeSubscriptionTierRequestJson, HttpApiSchema.NoContent], success: WorkspacesChangeSubscriptionTier202.pipe(HttpApiSchema.status(202)), error: [WorkspacesChangeSubscriptionTier401.pipe(HttpApiSchema.status(401)), WorkspacesChangeSubscriptionTier403.pipe(HttpApiSchema.status(403)), WorkspacesChangeSubscriptionTier404.pipe(HttpApiSchema.status(404)), WorkspacesChangeSubscriptionTier409.pipe(HttpApiSchema.status(409))] }) + HttpApiEndpoint.post("workspacesChangeSubscriptionTier", "/workspaces/{id}/subscription:changeTier", { params: WorkspacesChangeSubscriptionTierPathParams, headers: WorkspacesChangeSubscriptionTierHeaders, payload: [WorkspacesChangeSubscriptionTierRequestJson, HttpApiSchema.NoContent], success: WorkspacesChangeSubscriptionTier202.pipe(HttpApiSchema.status(202)), error: [WorkspacesChangeSubscriptionTier401.pipe(HttpApiSchema.status(401)), WorkspacesChangeSubscriptionTier403.pipe(HttpApiSchema.status(403)), WorkspacesChangeSubscriptionTier404.pipe(HttpApiSchema.status(404)), WorkspacesChangeSubscriptionTier409.pipe(HttpApiSchema.status(409))] }) .middleware(BearerAuthSecurityMiddleware) .annotate(OpenApi.Identifier, "workspaces.changeSubscriptionTier") .annotate(OpenApi.Summary, "Change workspace subscription tier") .annotate(OpenApi.Description, "Schedules a subscription tier change for the workspace."), - HttpApiEndpoint.get("workspacesListSubscriptionChangeRequests", "/workspaces/:id/subscription/change_requests", { params: WorkspacesListSubscriptionChangeRequestsPathParams, query: WorkspacesListSubscriptionChangeRequestsQuery, headers: WorkspacesListSubscriptionChangeRequestsHeaders, success: WorkspacesListSubscriptionChangeRequests200, error: [WorkspacesListSubscriptionChangeRequests401.pipe(HttpApiSchema.status(401)), WorkspacesListSubscriptionChangeRequests403.pipe(HttpApiSchema.status(403)), WorkspacesListSubscriptionChangeRequests404.pipe(HttpApiSchema.status(404))] }) + HttpApiEndpoint.get("workspacesListSubscriptionChangeRequests", "/workspaces/{id}/subscription/change_requests", { params: WorkspacesListSubscriptionChangeRequestsPathParams, query: WorkspacesListSubscriptionChangeRequestsQuery, headers: WorkspacesListSubscriptionChangeRequestsHeaders, success: WorkspacesListSubscriptionChangeRequests200, error: [WorkspacesListSubscriptionChangeRequests401.pipe(HttpApiSchema.status(401)), WorkspacesListSubscriptionChangeRequests403.pipe(HttpApiSchema.status(403)), WorkspacesListSubscriptionChangeRequests404.pipe(HttpApiSchema.status(404))] }) .middleware(BearerAuthSecurityMiddleware) .annotate(OpenApi.Identifier, "workspaces.listSubscriptionChangeRequests") .annotate(OpenApi.Summary, "List subscription change requests") .annotate(OpenApi.Description, "Returns subscription tier change requests for workspace."), - HttpApiEndpoint.get("workspacesGetSubscriptionChangeRequest", "/workspaces/:id/subscription/change_requests/:req_id", { params: WorkspacesGetSubscriptionChangeRequestPathParams, headers: WorkspacesGetSubscriptionChangeRequestHeaders, success: WorkspacesGetSubscriptionChangeRequest200, error: [WorkspacesGetSubscriptionChangeRequest401.pipe(HttpApiSchema.status(401)), WorkspacesGetSubscriptionChangeRequest403.pipe(HttpApiSchema.status(403)), WorkspacesGetSubscriptionChangeRequest404.pipe(HttpApiSchema.status(404))] }) + HttpApiEndpoint.get("workspacesGetSubscriptionChangeRequest", "/workspaces/{id}/subscription/change_requests/{req_id}", { params: WorkspacesGetSubscriptionChangeRequestPathParams, headers: WorkspacesGetSubscriptionChangeRequestHeaders, success: WorkspacesGetSubscriptionChangeRequest200, error: [WorkspacesGetSubscriptionChangeRequest401.pipe(HttpApiSchema.status(401)), WorkspacesGetSubscriptionChangeRequest403.pipe(HttpApiSchema.status(403)), WorkspacesGetSubscriptionChangeRequest404.pipe(HttpApiSchema.status(404))] }) .middleware(BearerAuthSecurityMiddleware) .annotate(OpenApi.Identifier, "workspaces.getSubscriptionChangeRequest") .annotate(OpenApi.Summary, "Get subscription change request") @@ -4358,7 +4358,7 @@ class APITokensGroup extends HttpApiGroup.make("API Tokens") .annotate(OpenApi.Identifier, "apiTokens.create") .annotate(OpenApi.Summary, "Create an API token") .annotate(OpenApi.Description, "Creates a workspace API token. The full plaintext token is returned in the response and never shown again - store it securely."), - HttpApiEndpoint.delete("apiTokensRevoke", "/api_tokens/:id", { params: ApiTokensRevokePathParams, headers: ApiTokensRevokeHeaders, success: HttpApiSchema.Empty(204), error: [ApiTokensRevoke401.pipe(HttpApiSchema.status(401)), ApiTokensRevoke403.pipe(HttpApiSchema.status(403)), ApiTokensRevoke404.pipe(HttpApiSchema.status(404))] }) + HttpApiEndpoint.delete("apiTokensRevoke", "/api_tokens/{id}", { params: ApiTokensRevokePathParams, headers: ApiTokensRevokeHeaders, success: HttpApiSchema.Empty(204), error: [ApiTokensRevoke401.pipe(HttpApiSchema.status(401)), ApiTokensRevoke403.pipe(HttpApiSchema.status(403)), ApiTokensRevoke404.pipe(HttpApiSchema.status(404))] }) .middleware(BearerAuthSecurityMiddleware) .annotate(OpenApi.Identifier, "apiTokens.revoke") .annotate(OpenApi.Summary, "Revoke an API token") @@ -4375,57 +4375,57 @@ class InstallsGroup extends HttpApiGroup.make("Installs") .annotate(OpenApi.Identifier, "installs.create") .annotate(OpenApi.Summary, "Create install") .annotate(OpenApi.Description, "Creates a product-based or direct installation. Akua processes the installation in the background and returns an Operation envelope to poll for progress."), - HttpApiEndpoint.get("installsGet", "/installs/:id", { params: InstallsGetPathParams, headers: InstallsGetHeaders, success: InstallsGet200, error: [InstallsGet401.pipe(HttpApiSchema.status(401)), InstallsGet403.pipe(HttpApiSchema.status(403)), InstallsGet404.pipe(HttpApiSchema.status(404))] }) + HttpApiEndpoint.get("installsGet", "/installs/{id}", { params: InstallsGetPathParams, headers: InstallsGetHeaders, success: InstallsGet200, error: [InstallsGet401.pipe(HttpApiSchema.status(401)), InstallsGet403.pipe(HttpApiSchema.status(403)), InstallsGet404.pipe(HttpApiSchema.status(404))] }) .middleware(BearerAuthSecurityMiddleware) .annotate(OpenApi.Identifier, "installs.get") .annotate(OpenApi.Summary, "Get install details") .annotate(OpenApi.Description, "Returns current install metadata."), - HttpApiEndpoint.delete("installsDelete", "/installs/:id", { params: InstallsDeletePathParams, headers: InstallsDeleteHeaders, success: InstallsDelete202.pipe(HttpApiSchema.status(202)), error: [InstallsDelete401.pipe(HttpApiSchema.status(401)), InstallsDelete403.pipe(HttpApiSchema.status(403)), InstallsDelete409.pipe(HttpApiSchema.status(409))] }) + HttpApiEndpoint.delete("installsDelete", "/installs/{id}", { params: InstallsDeletePathParams, headers: InstallsDeleteHeaders, success: InstallsDelete202.pipe(HttpApiSchema.status(202)), error: [InstallsDelete401.pipe(HttpApiSchema.status(401)), InstallsDelete403.pipe(HttpApiSchema.status(403)), InstallsDelete409.pipe(HttpApiSchema.status(409))] }) .middleware(BearerAuthSecurityMiddleware) .annotate(OpenApi.Identifier, "installs.delete") .annotate(OpenApi.Summary, "Delete install") .annotate(OpenApi.Description, "Deletes an install and cascades resource cleanup asynchronously. Returns an Operation envelope to poll for progress."), - HttpApiEndpoint.post("installsUpdateVersion", "/installs/:id%3Aupdate", { params: InstallsUpdateVersionPathParams, headers: InstallsUpdateVersionHeaders, payload: InstallsUpdateVersionRequestJson, success: InstallsUpdateVersion202.pipe(HttpApiSchema.status(202)), error: [InstallsUpdateVersion401.pipe(HttpApiSchema.status(401)), InstallsUpdateVersion403.pipe(HttpApiSchema.status(403)), InstallsUpdateVersion404.pipe(HttpApiSchema.status(404)), InstallsUpdateVersion409.pipe(HttpApiSchema.status(409))] }) + HttpApiEndpoint.post("installsUpdateVersion", "/installs/{id}:update", { params: InstallsUpdateVersionPathParams, headers: InstallsUpdateVersionHeaders, payload: InstallsUpdateVersionRequestJson, success: InstallsUpdateVersion202.pipe(HttpApiSchema.status(202)), error: [InstallsUpdateVersion401.pipe(HttpApiSchema.status(401)), InstallsUpdateVersion403.pipe(HttpApiSchema.status(403)), InstallsUpdateVersion404.pipe(HttpApiSchema.status(404)), InstallsUpdateVersion409.pipe(HttpApiSchema.status(409))] }) .middleware(BearerAuthSecurityMiddleware) .annotate(OpenApi.Identifier, "installs.updateVersion") .annotate(OpenApi.Summary, "Update install version") .annotate(OpenApi.Description, "Requests a selected PackageVersion from the same Package. The current version changes only after the new git-backed render deploys successfully."), - HttpApiEndpoint.post("installsRestore", "/installs/:id%3Arestore", { params: InstallsRestorePathParams, headers: InstallsRestoreHeaders, payload: InstallsRestoreRequestJson, success: InstallsRestore202.pipe(HttpApiSchema.status(202)), error: [InstallsRestore401.pipe(HttpApiSchema.status(401)), InstallsRestore403.pipe(HttpApiSchema.status(403)), InstallsRestore404.pipe(HttpApiSchema.status(404)), InstallsRestore409.pipe(HttpApiSchema.status(409))] }) + HttpApiEndpoint.post("installsRestore", "/installs/{id}:restore", { params: InstallsRestorePathParams, headers: InstallsRestoreHeaders, payload: InstallsRestoreRequestJson, success: InstallsRestore202.pipe(HttpApiSchema.status(202)), error: [InstallsRestore401.pipe(HttpApiSchema.status(401)), InstallsRestore403.pipe(HttpApiSchema.status(403)), InstallsRestore404.pipe(HttpApiSchema.status(404)), InstallsRestore409.pipe(HttpApiSchema.status(409))] }) .middleware(BearerAuthSecurityMiddleware) .annotate(OpenApi.Identifier, "installs.restore") .annotate(OpenApi.Summary, "Restore install render") .annotate(OpenApi.Description, "Restores a prior successful same-Package render by copying its git tree into a new forward commit. Existing git history is never rewritten."), - HttpApiEndpoint.patch("installsSetAutomaticUpdates", "/installs/:id/automatic_updates", { params: InstallsSetAutomaticUpdatesPathParams, headers: InstallsSetAutomaticUpdatesHeaders, payload: InstallsSetAutomaticUpdatesRequestJson, success: InstallsSetAutomaticUpdates200, error: [InstallsSetAutomaticUpdates401.pipe(HttpApiSchema.status(401)), InstallsSetAutomaticUpdates403.pipe(HttpApiSchema.status(403)), InstallsSetAutomaticUpdates404.pipe(HttpApiSchema.status(404)), InstallsSetAutomaticUpdates409.pipe(HttpApiSchema.status(409))] }) + HttpApiEndpoint.patch("installsSetAutomaticUpdates", "/installs/{id}/automatic_updates", { params: InstallsSetAutomaticUpdatesPathParams, headers: InstallsSetAutomaticUpdatesHeaders, payload: InstallsSetAutomaticUpdatesRequestJson, success: InstallsSetAutomaticUpdates200, error: [InstallsSetAutomaticUpdates401.pipe(HttpApiSchema.status(401)), InstallsSetAutomaticUpdates403.pipe(HttpApiSchema.status(403)), InstallsSetAutomaticUpdates404.pipe(HttpApiSchema.status(404)), InstallsSetAutomaticUpdates409.pipe(HttpApiSchema.status(409))] }) .middleware(BearerAuthSecurityMiddleware) .annotate(OpenApi.Identifier, "installs.setAutomaticUpdates") .annotate(OpenApi.Summary, "Set automatic install updates") .annotate(OpenApi.Description, "Enables or disables automatic PackageVersion updates for one install."), - HttpApiEndpoint.get("installsListRenders", "/installs/:id/renders", { params: InstallsListRendersPathParams, query: InstallsListRendersQuery, headers: InstallsListRendersHeaders, success: InstallsListRenders200, error: [InstallsListRenders401.pipe(HttpApiSchema.status(401)), InstallsListRenders403.pipe(HttpApiSchema.status(403)), InstallsListRenders404.pipe(HttpApiSchema.status(404))] }) + HttpApiEndpoint.get("installsListRenders", "/installs/{id}/renders", { params: InstallsListRendersPathParams, query: InstallsListRendersQuery, headers: InstallsListRendersHeaders, success: InstallsListRenders200, error: [InstallsListRenders401.pipe(HttpApiSchema.status(401)), InstallsListRenders403.pipe(HttpApiSchema.status(403)), InstallsListRenders404.pipe(HttpApiSchema.status(404))] }) .middleware(BearerAuthSecurityMiddleware) .annotate(OpenApi.Identifier, "installs.listRenders") .annotate(OpenApi.Summary, "List install renders") .annotate(OpenApi.Description, "Lists render artifacts for an install."), - HttpApiEndpoint.post("installsCreateRender", "/installs/:id/renders", { params: InstallsCreateRenderPathParams, headers: InstallsCreateRenderHeaders, payload: [InstallsCreateRenderRequestJson, HttpApiSchema.NoContent], success: InstallsCreateRender201.pipe(HttpApiSchema.status(201)), error: [InstallsCreateRender401.pipe(HttpApiSchema.status(401)), InstallsCreateRender403.pipe(HttpApiSchema.status(403)), InstallsCreateRender404.pipe(HttpApiSchema.status(404)), InstallsCreateRender409.pipe(HttpApiSchema.status(409))] }) + HttpApiEndpoint.post("installsCreateRender", "/installs/{id}/renders", { params: InstallsCreateRenderPathParams, headers: InstallsCreateRenderHeaders, payload: [InstallsCreateRenderRequestJson, HttpApiSchema.NoContent], success: InstallsCreateRender201.pipe(HttpApiSchema.status(201)), error: [InstallsCreateRender401.pipe(HttpApiSchema.status(401)), InstallsCreateRender403.pipe(HttpApiSchema.status(403)), InstallsCreateRender404.pipe(HttpApiSchema.status(404)), InstallsCreateRender409.pipe(HttpApiSchema.status(409))] }) .middleware(BearerAuthSecurityMiddleware) .annotate(OpenApi.Identifier, "installs.createRender") .annotate(OpenApi.Summary, "Create install render") .annotate(OpenApi.Description, "Starts a render attempt and records the resulting render artifact metadata."), - HttpApiEndpoint.get("installsGetRender", "/installs/:id/renders/:render_id", { params: InstallsGetRenderPathParams, headers: InstallsGetRenderHeaders, success: InstallsGetRender200, error: [InstallsGetRender401.pipe(HttpApiSchema.status(401)), InstallsGetRender403.pipe(HttpApiSchema.status(403)), InstallsGetRender404.pipe(HttpApiSchema.status(404))] }) + HttpApiEndpoint.get("installsGetRender", "/installs/{id}/renders/{render_id}", { params: InstallsGetRenderPathParams, headers: InstallsGetRenderHeaders, success: InstallsGetRender200, error: [InstallsGetRender401.pipe(HttpApiSchema.status(401)), InstallsGetRender403.pipe(HttpApiSchema.status(403)), InstallsGetRender404.pipe(HttpApiSchema.status(404))] }) .middleware(BearerAuthSecurityMiddleware) .annotate(OpenApi.Identifier, "installs.getRender") .annotate(OpenApi.Summary, "Get install render") .annotate(OpenApi.Description, "Returns a single render artifact."), - HttpApiEndpoint.get("installsGetStatus", "/installs/:id/status", { params: InstallsGetStatusPathParams, headers: InstallsGetStatusHeaders, success: InstallsGetStatus200, error: [InstallsGetStatus401.pipe(HttpApiSchema.status(401)), InstallsGetStatus403.pipe(HttpApiSchema.status(403)), InstallsGetStatus404.pipe(HttpApiSchema.status(404))] }) + HttpApiEndpoint.get("installsGetStatus", "/installs/{id}/status", { params: InstallsGetStatusPathParams, headers: InstallsGetStatusHeaders, success: InstallsGetStatus200, error: [InstallsGetStatus401.pipe(HttpApiSchema.status(401)), InstallsGetStatus403.pipe(HttpApiSchema.status(403)), InstallsGetStatus404.pipe(HttpApiSchema.status(404))] }) .middleware(BearerAuthSecurityMiddleware) .annotate(OpenApi.Identifier, "installs.getStatus") .annotate(OpenApi.Summary, "Get install status") .annotate(OpenApi.Description, "Returns the live install deploy status for dashboards and health checks."), - HttpApiEndpoint.get("installsListPods", "/installs/:id/pods", { params: InstallsListPodsPathParams, headers: InstallsListPodsHeaders, success: InstallsListPods200, error: [InstallsListPods401.pipe(HttpApiSchema.status(401)), InstallsListPods403.pipe(HttpApiSchema.status(403)), InstallsListPods404.pipe(HttpApiSchema.status(404))] }) + HttpApiEndpoint.get("installsListPods", "/installs/{id}/pods", { params: InstallsListPodsPathParams, headers: InstallsListPodsHeaders, success: InstallsListPods200, error: [InstallsListPods401.pipe(HttpApiSchema.status(401)), InstallsListPods403.pipe(HttpApiSchema.status(403)), InstallsListPods404.pipe(HttpApiSchema.status(404))] }) .middleware(BearerAuthSecurityMiddleware) .annotate(OpenApi.Identifier, "installs.listPods") .annotate(OpenApi.Summary, "List install pods") .annotate(OpenApi.Description, "Returns current pod names and containers for the install."), - HttpApiEndpoint.get("installsGetLogs", "/installs/:id/logs", { params: InstallsGetLogsPathParams, query: InstallsGetLogsQuery, headers: InstallsGetLogsHeaders, success: HttpApiSchema.StreamSse({ events: InstallsGetLogs200Sse, error: InstallsGetLogs200SseError }), error: [InstallsGetLogs401.pipe(HttpApiSchema.status(401)), InstallsGetLogs403.pipe(HttpApiSchema.status(403)), InstallsGetLogs404.pipe(HttpApiSchema.status(404))] }) + HttpApiEndpoint.get("installsGetLogs", "/installs/{id}/logs", { params: InstallsGetLogsPathParams, query: InstallsGetLogsQuery, headers: InstallsGetLogsHeaders, success: HttpApiSchema.StreamSse({ events: InstallsGetLogs200Sse, error: InstallsGetLogs200SseError }), error: [InstallsGetLogs401.pipe(HttpApiSchema.status(401)), InstallsGetLogs403.pipe(HttpApiSchema.status(403)), InstallsGetLogs404.pipe(HttpApiSchema.status(404))] }) .middleware(BearerAuthSecurityMiddleware) .annotate(OpenApi.Identifier, "installs.getLogs") .annotate(OpenApi.Summary, "Stream install logs") @@ -4438,7 +4438,7 @@ class RepositoriesGroup extends HttpApiGroup.make("Repositories") .annotate(OpenApi.Identifier, "repositories.list") .annotate(OpenApi.Summary, "List repositories in workspace") .annotate(OpenApi.Description, "Lists repositories visible in the workspace. Filterable by `purpose` (deploy / package / repository_change_request). Wire IDs prefixed `repo_...`. Cursor-paginated."), - HttpApiEndpoint.get("repositoriesGet", "/repositories/:id", { params: RepositoriesGetPathParams, query: RepositoriesGetQuery, headers: RepositoriesGetHeaders, success: RepositoriesGet200, error: [RepositoriesGet401.pipe(HttpApiSchema.status(401)), RepositoriesGet403.pipe(HttpApiSchema.status(403)), RepositoriesGet404.pipe(HttpApiSchema.status(404))] }) + HttpApiEndpoint.get("repositoriesGet", "/repositories/{id}", { params: RepositoriesGetPathParams, query: RepositoriesGetQuery, headers: RepositoriesGetHeaders, success: RepositoriesGet200, error: [RepositoriesGet401.pipe(HttpApiSchema.status(401)), RepositoriesGet403.pipe(HttpApiSchema.status(403)), RepositoriesGet404.pipe(HttpApiSchema.status(404))] }) .middleware(BearerAuthSecurityMiddleware) .annotate(OpenApi.Identifier, "repositories.get") .annotate(OpenApi.Summary, "Get repository details") @@ -4456,27 +4456,27 @@ class RepositoryChangeRequestsGroup extends HttpApiGroup.make("Repository change .annotate(OpenApi.Identifier, "repositoryChangeRequests.create") .annotate(OpenApi.Summary, "Create repository change request") .annotate(OpenApi.Description, "Creates a fork-backed repository change request. Fork write credentials are minted separately."), - HttpApiEndpoint.post("repositoryChangeRequestsCreateToken", "/repository_change_requests/:id%3AcreateToken", { params: RepositoryChangeRequestsCreateTokenPathParams, headers: RepositoryChangeRequestsCreateTokenHeaders, payload: [RepositoryChangeRequestsCreateTokenRequestJson, HttpApiSchema.NoContent], success: RepositoryChangeRequestsCreateToken201.pipe(HttpApiSchema.status(201)), error: [RepositoryChangeRequestsCreateToken400.pipe(HttpApiSchema.status(400)), RepositoryChangeRequestsCreateToken401.pipe(HttpApiSchema.status(401)), RepositoryChangeRequestsCreateToken403.pipe(HttpApiSchema.status(403)), RepositoryChangeRequestsCreateToken404.pipe(HttpApiSchema.status(404)), RepositoryChangeRequestsCreateToken409.pipe(HttpApiSchema.status(409))] }) + HttpApiEndpoint.post("repositoryChangeRequestsCreateToken", "/repository_change_requests/{id}:createToken", { params: RepositoryChangeRequestsCreateTokenPathParams, headers: RepositoryChangeRequestsCreateTokenHeaders, payload: [RepositoryChangeRequestsCreateTokenRequestJson, HttpApiSchema.NoContent], success: RepositoryChangeRequestsCreateToken201.pipe(HttpApiSchema.status(201)), error: [RepositoryChangeRequestsCreateToken400.pipe(HttpApiSchema.status(400)), RepositoryChangeRequestsCreateToken401.pipe(HttpApiSchema.status(401)), RepositoryChangeRequestsCreateToken403.pipe(HttpApiSchema.status(403)), RepositoryChangeRequestsCreateToken404.pipe(HttpApiSchema.status(404)), RepositoryChangeRequestsCreateToken409.pipe(HttpApiSchema.status(409))] }) .middleware(BearerAuthSecurityMiddleware) .annotate(OpenApi.Identifier, "repositoryChangeRequests.createToken") .annotate(OpenApi.Summary, "Create repository change request token") .annotate(OpenApi.Description, "Mints short-lived credentials for pushing changes to the fork repository."), - HttpApiEndpoint.get("repositoryChangeRequestsGet", "/repository_change_requests/:id", { params: RepositoryChangeRequestsGetPathParams, headers: RepositoryChangeRequestsGetHeaders, success: RepositoryChangeRequestsGet200, error: [RepositoryChangeRequestsGet401.pipe(HttpApiSchema.status(401)), RepositoryChangeRequestsGet403.pipe(HttpApiSchema.status(403)), RepositoryChangeRequestsGet404.pipe(HttpApiSchema.status(404))] }) + HttpApiEndpoint.get("repositoryChangeRequestsGet", "/repository_change_requests/{id}", { params: RepositoryChangeRequestsGetPathParams, headers: RepositoryChangeRequestsGetHeaders, success: RepositoryChangeRequestsGet200, error: [RepositoryChangeRequestsGet401.pipe(HttpApiSchema.status(401)), RepositoryChangeRequestsGet403.pipe(HttpApiSchema.status(403)), RepositoryChangeRequestsGet404.pipe(HttpApiSchema.status(404))] }) .middleware(BearerAuthSecurityMiddleware) .annotate(OpenApi.Identifier, "repositoryChangeRequests.get") .annotate(OpenApi.Summary, "Get repository change request") .annotate(OpenApi.Description, "Returns one fork-backed repository change request."), - HttpApiEndpoint.post("repositoryChangeRequestsAccept", "/repository_change_requests/:id%3Aaccept", { params: RepositoryChangeRequestsAcceptPathParams, headers: RepositoryChangeRequestsAcceptHeaders, success: RepositoryChangeRequestsAccept200, error: [RepositoryChangeRequestsAccept401.pipe(HttpApiSchema.status(401)), RepositoryChangeRequestsAccept403.pipe(HttpApiSchema.status(403)), RepositoryChangeRequestsAccept404.pipe(HttpApiSchema.status(404)), RepositoryChangeRequestsAccept409.pipe(HttpApiSchema.status(409))] }) + HttpApiEndpoint.post("repositoryChangeRequestsAccept", "/repository_change_requests/{id}:accept", { params: RepositoryChangeRequestsAcceptPathParams, headers: RepositoryChangeRequestsAcceptHeaders, success: RepositoryChangeRequestsAccept200, error: [RepositoryChangeRequestsAccept401.pipe(HttpApiSchema.status(401)), RepositoryChangeRequestsAccept403.pipe(HttpApiSchema.status(403)), RepositoryChangeRequestsAccept404.pipe(HttpApiSchema.status(404)), RepositoryChangeRequestsAccept409.pipe(HttpApiSchema.status(409))] }) .middleware(BearerAuthSecurityMiddleware) .annotate(OpenApi.Identifier, "repositoryChangeRequests.accept") .annotate(OpenApi.Summary, "Accept repository change request") .annotate(OpenApi.Description, "Validates and merges a repository change request into its parent repository."), - HttpApiEndpoint.post("repositoryChangeRequestsReject", "/repository_change_requests/:id%3Areject", { params: RepositoryChangeRequestsRejectPathParams, headers: RepositoryChangeRequestsRejectHeaders, payload: [RepositoryChangeRequestsRejectRequestJson, HttpApiSchema.NoContent], success: RepositoryChangeRequestsReject200, error: [RepositoryChangeRequestsReject401.pipe(HttpApiSchema.status(401)), RepositoryChangeRequestsReject403.pipe(HttpApiSchema.status(403)), RepositoryChangeRequestsReject404.pipe(HttpApiSchema.status(404)), RepositoryChangeRequestsReject409.pipe(HttpApiSchema.status(409))] }) + HttpApiEndpoint.post("repositoryChangeRequestsReject", "/repository_change_requests/{id}:reject", { params: RepositoryChangeRequestsRejectPathParams, headers: RepositoryChangeRequestsRejectHeaders, payload: [RepositoryChangeRequestsRejectRequestJson, HttpApiSchema.NoContent], success: RepositoryChangeRequestsReject200, error: [RepositoryChangeRequestsReject401.pipe(HttpApiSchema.status(401)), RepositoryChangeRequestsReject403.pipe(HttpApiSchema.status(403)), RepositoryChangeRequestsReject404.pipe(HttpApiSchema.status(404)), RepositoryChangeRequestsReject409.pipe(HttpApiSchema.status(409))] }) .middleware(BearerAuthSecurityMiddleware) .annotate(OpenApi.Identifier, "repositoryChangeRequests.reject") .annotate(OpenApi.Summary, "Reject repository change request") .annotate(OpenApi.Description, "Rejects a repository change request and records the reason."), - HttpApiEndpoint.post("repositoryChangeRequestsWithdraw", "/repository_change_requests/:id%3Awithdraw", { params: RepositoryChangeRequestsWithdrawPathParams, headers: RepositoryChangeRequestsWithdrawHeaders, success: RepositoryChangeRequestsWithdraw200, error: [RepositoryChangeRequestsWithdraw401.pipe(HttpApiSchema.status(401)), RepositoryChangeRequestsWithdraw403.pipe(HttpApiSchema.status(403)), RepositoryChangeRequestsWithdraw404.pipe(HttpApiSchema.status(404)), RepositoryChangeRequestsWithdraw409.pipe(HttpApiSchema.status(409))] }) + HttpApiEndpoint.post("repositoryChangeRequestsWithdraw", "/repository_change_requests/{id}:withdraw", { params: RepositoryChangeRequestsWithdrawPathParams, headers: RepositoryChangeRequestsWithdrawHeaders, success: RepositoryChangeRequestsWithdraw200, error: [RepositoryChangeRequestsWithdraw401.pipe(HttpApiSchema.status(401)), RepositoryChangeRequestsWithdraw403.pipe(HttpApiSchema.status(403)), RepositoryChangeRequestsWithdraw404.pipe(HttpApiSchema.status(404)), RepositoryChangeRequestsWithdraw409.pipe(HttpApiSchema.status(409))] }) .middleware(BearerAuthSecurityMiddleware) .annotate(OpenApi.Identifier, "repositoryChangeRequests.withdraw") .annotate(OpenApi.Summary, "Withdraw repository change request") @@ -4494,22 +4494,22 @@ class SecretsGroup extends HttpApiGroup.make("Secrets") .annotate(OpenApi.Identifier, "secrets.create") .annotate(OpenApi.Summary, "Create secret") .annotate(OpenApi.Description, "Creates a workspace-scoped Secret with metadata and the first version. The plaintext value is consumed and never echoed."), - HttpApiEndpoint.get("secretsGet", "/secrets/:id", { params: SecretsGetPathParams, headers: SecretsGetHeaders, success: SecretsGet200, error: [SecretsGet401.pipe(HttpApiSchema.status(401)), SecretsGet403.pipe(HttpApiSchema.status(403)), SecretsGet404.pipe(HttpApiSchema.status(404))] }) + HttpApiEndpoint.get("secretsGet", "/secrets/{id}", { params: SecretsGetPathParams, headers: SecretsGetHeaders, success: SecretsGet200, error: [SecretsGet401.pipe(HttpApiSchema.status(401)), SecretsGet403.pipe(HttpApiSchema.status(403)), SecretsGet404.pipe(HttpApiSchema.status(404))] }) .middleware(BearerAuthSecurityMiddleware) .annotate(OpenApi.Identifier, "secrets.get") .annotate(OpenApi.Summary, "Get secret") .annotate(OpenApi.Description, "Returns secret metadata. Plaintext values are never returned."), - HttpApiEndpoint.delete("secretsDelete", "/secrets/:id", { params: SecretsDeletePathParams, query: SecretsDeleteQuery, headers: SecretsDeleteHeaders, success: HttpApiSchema.Empty(204), error: [SecretsDelete400.pipe(HttpApiSchema.status(400)), SecretsDelete401.pipe(HttpApiSchema.status(401)), SecretsDelete403.pipe(HttpApiSchema.status(403)), SecretsDelete404.pipe(HttpApiSchema.status(404)), SecretsDelete409.pipe(HttpApiSchema.status(409))] }) + HttpApiEndpoint.delete("secretsDelete", "/secrets/{id}", { params: SecretsDeletePathParams, query: SecretsDeleteQuery, headers: SecretsDeleteHeaders, success: HttpApiSchema.Empty(204), error: [SecretsDelete400.pipe(HttpApiSchema.status(400)), SecretsDelete401.pipe(HttpApiSchema.status(401)), SecretsDelete403.pipe(HttpApiSchema.status(403)), SecretsDelete404.pipe(HttpApiSchema.status(404)), SecretsDelete409.pipe(HttpApiSchema.status(409))] }) .middleware(BearerAuthSecurityMiddleware) .annotate(OpenApi.Identifier, "secrets.delete") .annotate(OpenApi.Summary, "Delete secret") .annotate(OpenApi.Description, "Soft-deletes a secret and keeps version payloads recoverable until purge_at. Use force=true to immediately destroy version payloads."), - HttpApiEndpoint.patch("secretsUpdate", "/secrets/:id", { params: SecretsUpdatePathParams, headers: SecretsUpdateHeaders, payload: [SecretsUpdateRequestJson, HttpApiSchema.NoContent], success: SecretsUpdate200, error: [SecretsUpdate400.pipe(HttpApiSchema.status(400)), SecretsUpdate401.pipe(HttpApiSchema.status(401)), SecretsUpdate403.pipe(HttpApiSchema.status(403)), SecretsUpdate404.pipe(HttpApiSchema.status(404)), SecretsUpdate409.pipe(HttpApiSchema.status(409))] }) + HttpApiEndpoint.patch("secretsUpdate", "/secrets/{id}", { params: SecretsUpdatePathParams, headers: SecretsUpdateHeaders, payload: [SecretsUpdateRequestJson, HttpApiSchema.NoContent], success: SecretsUpdate200, error: [SecretsUpdate400.pipe(HttpApiSchema.status(400)), SecretsUpdate401.pipe(HttpApiSchema.status(401)), SecretsUpdate403.pipe(HttpApiSchema.status(403)), SecretsUpdate404.pipe(HttpApiSchema.status(404)), SecretsUpdate409.pipe(HttpApiSchema.status(409))] }) .middleware(BearerAuthSecurityMiddleware) .annotate(OpenApi.Identifier, "secrets.update") .annotate(OpenApi.Summary, "Update secret") .annotate(OpenApi.Description, "Updates secret metadata only. Rotate values with POST /secrets/{id}/versions."), - HttpApiEndpoint.post("secretsUndelete", "/secrets/:id%3Aundelete", { params: SecretsUndeletePathParams, headers: SecretsUndeleteHeaders, success: SecretsUndelete200, error: [SecretsUndelete401.pipe(HttpApiSchema.status(401)), SecretsUndelete403.pipe(HttpApiSchema.status(403)), SecretsUndelete404.pipe(HttpApiSchema.status(404)), SecretsUndelete409.pipe(HttpApiSchema.status(409))] }) + HttpApiEndpoint.post("secretsUndelete", "/secrets/{id}:undelete", { params: SecretsUndeletePathParams, headers: SecretsUndeleteHeaders, success: SecretsUndelete200, error: [SecretsUndelete401.pipe(HttpApiSchema.status(401)), SecretsUndelete403.pipe(HttpApiSchema.status(403)), SecretsUndelete404.pipe(HttpApiSchema.status(404)), SecretsUndelete409.pipe(HttpApiSchema.status(409))] }) .middleware(BearerAuthSecurityMiddleware) .annotate(OpenApi.Identifier, "secrets.undelete") .annotate(OpenApi.Summary, "Restore a soft-deleted secret") @@ -4519,37 +4519,37 @@ class SecretsGroup extends HttpApiGroup.make("Secrets") .annotate(OpenApi.Identifier, "secrets.validateToken") .annotate(OpenApi.Summary, "Validate a provider token") .annotate(OpenApi.Description, "Probes a customer-supplied cloud-provider API token with a cheap read-only call to confirm it authenticates, without storing it. Use before creating a `cloud_provider/*` secret."), - HttpApiEndpoint.get("secretsListVersions", "/secrets/:id/versions", { params: SecretsListVersionsPathParams, query: SecretsListVersionsQuery, headers: SecretsListVersionsHeaders, success: SecretsListVersions200, error: [SecretsListVersions401.pipe(HttpApiSchema.status(401)), SecretsListVersions403.pipe(HttpApiSchema.status(403)), SecretsListVersions404.pipe(HttpApiSchema.status(404))] }) + HttpApiEndpoint.get("secretsListVersions", "/secrets/{id}/versions", { params: SecretsListVersionsPathParams, query: SecretsListVersionsQuery, headers: SecretsListVersionsHeaders, success: SecretsListVersions200, error: [SecretsListVersions401.pipe(HttpApiSchema.status(401)), SecretsListVersions403.pipe(HttpApiSchema.status(403)), SecretsListVersions404.pipe(HttpApiSchema.status(404))] }) .middleware(BearerAuthSecurityMiddleware) .annotate(OpenApi.Identifier, "secrets.listVersions") .annotate(OpenApi.Summary, "List secret versions") .annotate(OpenApi.Description, "Lists secret versions. Metadata only; plaintext values are never returned."), - HttpApiEndpoint.post("secretsCreateVersion", "/secrets/:id/versions", { params: SecretsCreateVersionPathParams, headers: SecretsCreateVersionHeaders, payload: [SecretsCreateVersionRequestJson, HttpApiSchema.NoContent], success: SecretsCreateVersion201.pipe(HttpApiSchema.status(201)), error: [SecretsCreateVersion400.pipe(HttpApiSchema.status(400)), SecretsCreateVersion401.pipe(HttpApiSchema.status(401)), SecretsCreateVersion403.pipe(HttpApiSchema.status(403)), SecretsCreateVersion404.pipe(HttpApiSchema.status(404))] }) + HttpApiEndpoint.post("secretsCreateVersion", "/secrets/{id}/versions", { params: SecretsCreateVersionPathParams, headers: SecretsCreateVersionHeaders, payload: [SecretsCreateVersionRequestJson, HttpApiSchema.NoContent], success: SecretsCreateVersion201.pipe(HttpApiSchema.status(201)), error: [SecretsCreateVersion400.pipe(HttpApiSchema.status(400)), SecretsCreateVersion401.pipe(HttpApiSchema.status(401)), SecretsCreateVersion403.pipe(HttpApiSchema.status(403)), SecretsCreateVersion404.pipe(HttpApiSchema.status(404))] }) .middleware(BearerAuthSecurityMiddleware) .annotate(OpenApi.Identifier, "secrets.createVersion") .annotate(OpenApi.Summary, "Create secret version") .annotate(OpenApi.Description, "Appends a new immutable SecretVersion. Plaintext is never echoed."), - HttpApiEndpoint.get("secretsGetVersion", "/secrets/:id/versions/:vid", { params: SecretsGetVersionPathParams, headers: SecretsGetVersionHeaders, success: SecretsGetVersion200, error: [SecretsGetVersion401.pipe(HttpApiSchema.status(401)), SecretsGetVersion403.pipe(HttpApiSchema.status(403)), SecretsGetVersion404.pipe(HttpApiSchema.status(404))] }) + HttpApiEndpoint.get("secretsGetVersion", "/secrets/{id}/versions/{vid}", { params: SecretsGetVersionPathParams, headers: SecretsGetVersionHeaders, success: SecretsGetVersion200, error: [SecretsGetVersion401.pipe(HttpApiSchema.status(401)), SecretsGetVersion403.pipe(HttpApiSchema.status(403)), SecretsGetVersion404.pipe(HttpApiSchema.status(404))] }) .middleware(BearerAuthSecurityMiddleware) .annotate(OpenApi.Identifier, "secrets.getVersion") .annotate(OpenApi.Summary, "Get secret version") .annotate(OpenApi.Description, "Returns metadata for one secret version. Plaintext is never returned."), - HttpApiEndpoint.post("secretsEnableVersion", "/secrets/:id/versions/:vid%3Aenable", { params: SecretsEnableVersionPathParams, headers: SecretsEnableVersionHeaders, success: SecretsEnableVersion200, error: [SecretsEnableVersion401.pipe(HttpApiSchema.status(401)), SecretsEnableVersion403.pipe(HttpApiSchema.status(403)), SecretsEnableVersion404.pipe(HttpApiSchema.status(404)), SecretsEnableVersion409.pipe(HttpApiSchema.status(409))] }) + HttpApiEndpoint.post("secretsEnableVersion", "/secrets/{id}/versions/{vid}:enable", { params: SecretsEnableVersionPathParams, headers: SecretsEnableVersionHeaders, success: SecretsEnableVersion200, error: [SecretsEnableVersion401.pipe(HttpApiSchema.status(401)), SecretsEnableVersion403.pipe(HttpApiSchema.status(403)), SecretsEnableVersion404.pipe(HttpApiSchema.status(404)), SecretsEnableVersion409.pipe(HttpApiSchema.status(409))] }) .middleware(BearerAuthSecurityMiddleware) .annotate(OpenApi.Identifier, "secrets.enableVersion") .annotate(OpenApi.Summary, "Enable a disabled secret version") .annotate(OpenApi.Description, "Re-enables a disabled SecretVersion. The newly-enabled version becomes eligible for `:access` calls again. Idempotent: enabling an already-enabled version returns 200 with no state change. Returns 409 ABORTED with a stale-revision hint if If-Match mismatches. Returns 409 if the version has been destroyed (irreversible)."), - HttpApiEndpoint.post("secretsDisableVersion", "/secrets/:id/versions/:vid%3Adisable", { params: SecretsDisableVersionPathParams, headers: SecretsDisableVersionHeaders, success: SecretsDisableVersion200, error: [SecretsDisableVersion401.pipe(HttpApiSchema.status(401)), SecretsDisableVersion403.pipe(HttpApiSchema.status(403)), SecretsDisableVersion404.pipe(HttpApiSchema.status(404)), SecretsDisableVersion409.pipe(HttpApiSchema.status(409))] }) + HttpApiEndpoint.post("secretsDisableVersion", "/secrets/{id}/versions/{vid}:disable", { params: SecretsDisableVersionPathParams, headers: SecretsDisableVersionHeaders, success: SecretsDisableVersion200, error: [SecretsDisableVersion401.pipe(HttpApiSchema.status(401)), SecretsDisableVersion403.pipe(HttpApiSchema.status(403)), SecretsDisableVersion404.pipe(HttpApiSchema.status(404)), SecretsDisableVersion409.pipe(HttpApiSchema.status(409))] }) .middleware(BearerAuthSecurityMiddleware) .annotate(OpenApi.Identifier, "secrets.disableVersion") .annotate(OpenApi.Summary, "Disable secret version") .annotate(OpenApi.Description, "Marks a secret version as disabled."), - HttpApiEndpoint.post("secretsDestroyVersion", "/secrets/:id/versions/:vid%3Adestroy", { params: SecretsDestroyVersionPathParams, headers: SecretsDestroyVersionHeaders, success: SecretsDestroyVersion200, error: [SecretsDestroyVersion401.pipe(HttpApiSchema.status(401)), SecretsDestroyVersion403.pipe(HttpApiSchema.status(403)), SecretsDestroyVersion404.pipe(HttpApiSchema.status(404)), SecretsDestroyVersion409.pipe(HttpApiSchema.status(409))] }) + HttpApiEndpoint.post("secretsDestroyVersion", "/secrets/{id}/versions/{vid}:destroy", { params: SecretsDestroyVersionPathParams, headers: SecretsDestroyVersionHeaders, success: SecretsDestroyVersion200, error: [SecretsDestroyVersion401.pipe(HttpApiSchema.status(401)), SecretsDestroyVersion403.pipe(HttpApiSchema.status(403)), SecretsDestroyVersion404.pipe(HttpApiSchema.status(404)), SecretsDestroyVersion409.pipe(HttpApiSchema.status(409))] }) .middleware(BearerAuthSecurityMiddleware) .annotate(OpenApi.Identifier, "secrets.destroyVersion") .annotate(OpenApi.Summary, "Destroy secret version") .annotate(OpenApi.Description, "Irreversibly destroys a secret version payload and keeps metadata for audit."), - HttpApiEndpoint.post("secretsAccessVersion", "/secrets/:id/versions/:vid%3Aaccess", { params: SecretsAccessVersionPathParams, headers: SecretsAccessVersionHeaders, success: SecretsAccessVersion200, error: [SecretsAccessVersion401.pipe(HttpApiSchema.status(401)), SecretsAccessVersion403.pipe(HttpApiSchema.status(403)), SecretsAccessVersion404.pipe(HttpApiSchema.status(404)), SecretsAccessVersion409.pipe(HttpApiSchema.status(409)), SecretsAccessVersion410.pipe(HttpApiSchema.status(410))] }) + HttpApiEndpoint.post("secretsAccessVersion", "/secrets/{id}/versions/{vid}:access", { params: SecretsAccessVersionPathParams, headers: SecretsAccessVersionHeaders, success: SecretsAccessVersion200, error: [SecretsAccessVersion401.pipe(HttpApiSchema.status(401)), SecretsAccessVersion403.pipe(HttpApiSchema.status(403)), SecretsAccessVersion404.pipe(HttpApiSchema.status(404)), SecretsAccessVersion409.pipe(HttpApiSchema.status(409)), SecretsAccessVersion410.pipe(HttpApiSchema.status(410))] }) .middleware(BearerAuthSecurityMiddleware) .annotate(OpenApi.Identifier, "secrets.accessVersion") .annotate(OpenApi.Summary, "Access secret version plaintext") @@ -4567,44 +4567,44 @@ class OrganizationsGroup extends HttpApiGroup.make("Organizations") .annotate(OpenApi.Identifier, "organizations.create") .annotate(OpenApi.Summary, "Create organization") .annotate(OpenApi.Description, "Creates a new organization. The authenticated user becomes the initial owner."), - HttpApiEndpoint.get("organizationsGet", "/organizations/:id", { params: OrganizationsGetPathParams, success: OrganizationsGet200, error: [OrganizationsGet401.pipe(HttpApiSchema.status(401)), OrganizationsGet403.pipe(HttpApiSchema.status(403)), OrganizationsGet404.pipe(HttpApiSchema.status(404))] }) + HttpApiEndpoint.get("organizationsGet", "/organizations/{id}", { params: OrganizationsGetPathParams, success: OrganizationsGet200, error: [OrganizationsGet401.pipe(HttpApiSchema.status(401)), OrganizationsGet403.pipe(HttpApiSchema.status(403)), OrganizationsGet404.pipe(HttpApiSchema.status(404))] }) .middleware(BearerAuthSecurityMiddleware) .annotate(OpenApi.Identifier, "organizations.get") .annotate(OpenApi.Summary, "Get organization details") .annotate(OpenApi.Description, "Returns details for an organization the authenticated user belongs to."), - HttpApiEndpoint.delete("organizationsDelete", "/organizations/:id", { params: OrganizationsDeletePathParams, headers: OrganizationsDeleteHeaders, success: HttpApiSchema.Empty(204), error: [OrganizationsDelete400.pipe(HttpApiSchema.status(400)), OrganizationsDelete401.pipe(HttpApiSchema.status(401)), OrganizationsDelete403.pipe(HttpApiSchema.status(403)), OrganizationsDelete404.pipe(HttpApiSchema.status(404))] }) + HttpApiEndpoint.delete("organizationsDelete", "/organizations/{id}", { params: OrganizationsDeletePathParams, headers: OrganizationsDeleteHeaders, success: HttpApiSchema.Empty(204), error: [OrganizationsDelete400.pipe(HttpApiSchema.status(400)), OrganizationsDelete401.pipe(HttpApiSchema.status(401)), OrganizationsDelete403.pipe(HttpApiSchema.status(403)), OrganizationsDelete404.pipe(HttpApiSchema.status(404))] }) .middleware(BearerAuthSecurityMiddleware) .annotate(OpenApi.Identifier, "organizations.delete") .annotate(OpenApi.Summary, "Delete organization") .annotate(OpenApi.Description, "Deletes an organization after validating membership, workspace ownership, and owner protection."), - HttpApiEndpoint.patch("organizationsUpdate", "/organizations/:id", { params: OrganizationsUpdatePathParams, headers: OrganizationsUpdateHeaders, payload: [OrganizationsUpdateRequestJson, HttpApiSchema.NoContent], success: OrganizationsUpdate200, error: [OrganizationsUpdate400.pipe(HttpApiSchema.status(400)), OrganizationsUpdate401.pipe(HttpApiSchema.status(401)), OrganizationsUpdate403.pipe(HttpApiSchema.status(403)), OrganizationsUpdate404.pipe(HttpApiSchema.status(404)), OrganizationsUpdate409.pipe(HttpApiSchema.status(409))] }) + HttpApiEndpoint.patch("organizationsUpdate", "/organizations/{id}", { params: OrganizationsUpdatePathParams, headers: OrganizationsUpdateHeaders, payload: [OrganizationsUpdateRequestJson, HttpApiSchema.NoContent], success: OrganizationsUpdate200, error: [OrganizationsUpdate400.pipe(HttpApiSchema.status(400)), OrganizationsUpdate401.pipe(HttpApiSchema.status(401)), OrganizationsUpdate403.pipe(HttpApiSchema.status(403)), OrganizationsUpdate404.pipe(HttpApiSchema.status(404)), OrganizationsUpdate409.pipe(HttpApiSchema.status(409))] }) .middleware(BearerAuthSecurityMiddleware) .annotate(OpenApi.Identifier, "organizations.update") .annotate(OpenApi.Summary, "Update organization") .annotate(OpenApi.Description, "Updates profile fields on an organization. Requires owner or admin role in the organization."), - HttpApiEndpoint.get("organizationsListMembers", "/organizations/:id/members", { params: OrganizationsListMembersPathParams, query: OrganizationsListMembersQuery, success: OrganizationsListMembers200, error: [OrganizationsListMembers401.pipe(HttpApiSchema.status(401)), OrganizationsListMembers403.pipe(HttpApiSchema.status(403))] }) + HttpApiEndpoint.get("organizationsListMembers", "/organizations/{id}/members", { params: OrganizationsListMembersPathParams, query: OrganizationsListMembersQuery, success: OrganizationsListMembers200, error: [OrganizationsListMembers401.pipe(HttpApiSchema.status(401)), OrganizationsListMembers403.pipe(HttpApiSchema.status(403))] }) .middleware(BearerAuthSecurityMiddleware) .annotate(OpenApi.Identifier, "organizations.listMembers") .annotate(OpenApi.Summary, "List organization members") .annotate(OpenApi.Description, "Lists a page of organization members. Requires membership in the organization."), - HttpApiEndpoint.post("organizationsAddMember", "/organizations/:id/members", { params: OrganizationsAddMemberPathParams, headers: OrganizationsAddMemberHeaders, payload: [OrganizationsAddMemberRequestJson, HttpApiSchema.NoContent], success: OrganizationsAddMember201.pipe(HttpApiSchema.status(201)), error: [OrganizationsAddMember400.pipe(HttpApiSchema.status(400)), OrganizationsAddMember401.pipe(HttpApiSchema.status(401)), OrganizationsAddMember403.pipe(HttpApiSchema.status(403)), OrganizationsAddMember409.pipe(HttpApiSchema.status(409))] }) + HttpApiEndpoint.post("organizationsAddMember", "/organizations/{id}/members", { params: OrganizationsAddMemberPathParams, headers: OrganizationsAddMemberHeaders, payload: [OrganizationsAddMemberRequestJson, HttpApiSchema.NoContent], success: OrganizationsAddMember201.pipe(HttpApiSchema.status(201)), error: [OrganizationsAddMember400.pipe(HttpApiSchema.status(400)), OrganizationsAddMember401.pipe(HttpApiSchema.status(401)), OrganizationsAddMember403.pipe(HttpApiSchema.status(403)), OrganizationsAddMember409.pipe(HttpApiSchema.status(409))] }) .middleware(BearerAuthSecurityMiddleware) .annotate(OpenApi.Identifier, "organizations.addMember") .annotate(OpenApi.Summary, "Add organization member") .annotate(OpenApi.Description, "Adds a user to the organization with the supplied role (defaults to `member`). Requires owner or admin role."), - HttpApiEndpoint.get("organizationsListInvitations", "/organizations/:id/invitations", { params: OrganizationsListInvitationsPathParams, query: OrganizationsListInvitationsQuery, success: OrganizationsListInvitations200, error: [OrganizationsListInvitations401.pipe(HttpApiSchema.status(401)), OrganizationsListInvitations403.pipe(HttpApiSchema.status(403))] }) + HttpApiEndpoint.get("organizationsListInvitations", "/organizations/{id}/invitations", { params: OrganizationsListInvitationsPathParams, query: OrganizationsListInvitationsQuery, success: OrganizationsListInvitations200, error: [OrganizationsListInvitations401.pipe(HttpApiSchema.status(401)), OrganizationsListInvitations403.pipe(HttpApiSchema.status(403))] }) .middleware(BearerAuthSecurityMiddleware) .annotate(OpenApi.Identifier, "organizations.listInvitations") .annotate(OpenApi.Summary, "List pending organization invitations"), - HttpApiEndpoint.post("organizationsCreateInvitation", "/organizations/:id/invitations", { params: OrganizationsCreateInvitationPathParams, payload: [OrganizationsCreateInvitationRequestJson, HttpApiSchema.NoContent], success: OrganizationsCreateInvitation201.pipe(HttpApiSchema.status(201)), error: [OrganizationsCreateInvitation400.pipe(HttpApiSchema.status(400)), OrganizationsCreateInvitation401.pipe(HttpApiSchema.status(401)), OrganizationsCreateInvitation403.pipe(HttpApiSchema.status(403)), OrganizationsCreateInvitation409.pipe(HttpApiSchema.status(409))] }) + HttpApiEndpoint.post("organizationsCreateInvitation", "/organizations/{id}/invitations", { params: OrganizationsCreateInvitationPathParams, payload: [OrganizationsCreateInvitationRequestJson, HttpApiSchema.NoContent], success: OrganizationsCreateInvitation201.pipe(HttpApiSchema.status(201)), error: [OrganizationsCreateInvitation400.pipe(HttpApiSchema.status(400)), OrganizationsCreateInvitation401.pipe(HttpApiSchema.status(401)), OrganizationsCreateInvitation403.pipe(HttpApiSchema.status(403)), OrganizationsCreateInvitation409.pipe(HttpApiSchema.status(409))] }) .middleware(BearerAuthSecurityMiddleware) .annotate(OpenApi.Identifier, "organizations.createInvitation") .annotate(OpenApi.Summary, "Invite an organization member by email"), - HttpApiEndpoint.post("organizationsResendInvitation", "/organizations/:id/invitations/:invitationId/resend", { params: OrganizationsResendInvitationPathParams, success: OrganizationsResendInvitation200, error: [OrganizationsResendInvitation401.pipe(HttpApiSchema.status(401)), OrganizationsResendInvitation403.pipe(HttpApiSchema.status(403)), OrganizationsResendInvitation404.pipe(HttpApiSchema.status(404)), OrganizationsResendInvitation409.pipe(HttpApiSchema.status(409))] }) + HttpApiEndpoint.post("organizationsResendInvitation", "/organizations/{id}/invitations/{invitationId}/resend", { params: OrganizationsResendInvitationPathParams, success: OrganizationsResendInvitation200, error: [OrganizationsResendInvitation401.pipe(HttpApiSchema.status(401)), OrganizationsResendInvitation403.pipe(HttpApiSchema.status(403)), OrganizationsResendInvitation404.pipe(HttpApiSchema.status(404)), OrganizationsResendInvitation409.pipe(HttpApiSchema.status(409))] }) .middleware(BearerAuthSecurityMiddleware) .annotate(OpenApi.Identifier, "organizations.resendInvitation") .annotate(OpenApi.Summary, "Resend an organization invitation"), - HttpApiEndpoint.delete("organizationsCancelInvitation", "/organizations/:id/invitations/:invitationId", { params: OrganizationsCancelInvitationPathParams, success: HttpApiSchema.Empty(204), error: [OrganizationsCancelInvitation401.pipe(HttpApiSchema.status(401)), OrganizationsCancelInvitation403.pipe(HttpApiSchema.status(403)), OrganizationsCancelInvitation404.pipe(HttpApiSchema.status(404))] }) + HttpApiEndpoint.delete("organizationsCancelInvitation", "/organizations/{id}/invitations/{invitationId}", { params: OrganizationsCancelInvitationPathParams, success: HttpApiSchema.Empty(204), error: [OrganizationsCancelInvitation401.pipe(HttpApiSchema.status(401)), OrganizationsCancelInvitation403.pipe(HttpApiSchema.status(403)), OrganizationsCancelInvitation404.pipe(HttpApiSchema.status(404))] }) .middleware(BearerAuthSecurityMiddleware) .annotate(OpenApi.Identifier, "organizations.cancelInvitation") .annotate(OpenApi.Summary, "Cancel an organization invitation"), @@ -4612,17 +4612,17 @@ class OrganizationsGroup extends HttpApiGroup.make("Organizations") .middleware(BearerAuthSecurityMiddleware) .annotate(OpenApi.Identifier, "organizations.acceptInvitation") .annotate(OpenApi.Summary, "Accept an organization invitation"), - HttpApiEndpoint.delete("organizationsRemoveMember", "/organizations/:id/members/:userId", { params: OrganizationsRemoveMemberPathParams, headers: OrganizationsRemoveMemberHeaders, success: HttpApiSchema.Empty(204), error: [OrganizationsRemoveMember400.pipe(HttpApiSchema.status(400)), OrganizationsRemoveMember401.pipe(HttpApiSchema.status(401)), OrganizationsRemoveMember403.pipe(HttpApiSchema.status(403)), OrganizationsRemoveMember404.pipe(HttpApiSchema.status(404)), OrganizationsRemoveMember409.pipe(HttpApiSchema.status(409))] }) + HttpApiEndpoint.delete("organizationsRemoveMember", "/organizations/{id}/members/{userId}", { params: OrganizationsRemoveMemberPathParams, headers: OrganizationsRemoveMemberHeaders, success: HttpApiSchema.Empty(204), error: [OrganizationsRemoveMember400.pipe(HttpApiSchema.status(400)), OrganizationsRemoveMember401.pipe(HttpApiSchema.status(401)), OrganizationsRemoveMember403.pipe(HttpApiSchema.status(403)), OrganizationsRemoveMember404.pipe(HttpApiSchema.status(404)), OrganizationsRemoveMember409.pipe(HttpApiSchema.status(409))] }) .middleware(BearerAuthSecurityMiddleware) .annotate(OpenApi.Identifier, "organizations.removeMember") .annotate(OpenApi.Summary, "Remove organization member") .annotate(OpenApi.Description, "Removes a member from the organization. Self-removal is always allowed; removing other users requires owner or admin role. The last owner cannot be removed."), - HttpApiEndpoint.patch("organizationsUpdateMemberRole", "/organizations/:id/members/:userId", { params: OrganizationsUpdateMemberRolePathParams, headers: OrganizationsUpdateMemberRoleHeaders, payload: [OrganizationsUpdateMemberRoleRequestJson, HttpApiSchema.NoContent], success: OrganizationsUpdateMemberRole200, error: [OrganizationsUpdateMemberRole400.pipe(HttpApiSchema.status(400)), OrganizationsUpdateMemberRole401.pipe(HttpApiSchema.status(401)), OrganizationsUpdateMemberRole403.pipe(HttpApiSchema.status(403)), OrganizationsUpdateMemberRole404.pipe(HttpApiSchema.status(404)), OrganizationsUpdateMemberRole409.pipe(HttpApiSchema.status(409))] }) + HttpApiEndpoint.patch("organizationsUpdateMemberRole", "/organizations/{id}/members/{userId}", { params: OrganizationsUpdateMemberRolePathParams, headers: OrganizationsUpdateMemberRoleHeaders, payload: [OrganizationsUpdateMemberRoleRequestJson, HttpApiSchema.NoContent], success: OrganizationsUpdateMemberRole200, error: [OrganizationsUpdateMemberRole400.pipe(HttpApiSchema.status(400)), OrganizationsUpdateMemberRole401.pipe(HttpApiSchema.status(401)), OrganizationsUpdateMemberRole403.pipe(HttpApiSchema.status(403)), OrganizationsUpdateMemberRole404.pipe(HttpApiSchema.status(404)), OrganizationsUpdateMemberRole409.pipe(HttpApiSchema.status(409))] }) .middleware(BearerAuthSecurityMiddleware) .annotate(OpenApi.Identifier, "organizations.updateMemberRole") .annotate(OpenApi.Summary, "Update member role") .annotate(OpenApi.Description, "Updates the role of an existing member. Only the organization's owner may change roles."), - HttpApiEndpoint.get("organizationsListManagedWorkspaces", "/organizations/:id/workspaces", { params: OrganizationsListManagedWorkspacesPathParams, query: OrganizationsListManagedWorkspacesQuery, success: OrganizationsListManagedWorkspaces200, error: [OrganizationsListManagedWorkspaces401.pipe(HttpApiSchema.status(401)), OrganizationsListManagedWorkspaces403.pipe(HttpApiSchema.status(403))] }) + HttpApiEndpoint.get("organizationsListManagedWorkspaces", "/organizations/{id}/workspaces", { params: OrganizationsListManagedWorkspacesPathParams, query: OrganizationsListManagedWorkspacesQuery, success: OrganizationsListManagedWorkspaces200, error: [OrganizationsListManagedWorkspaces401.pipe(HttpApiSchema.status(401)), OrganizationsListManagedWorkspaces403.pipe(HttpApiSchema.status(403))] }) .middleware(BearerAuthSecurityMiddleware) .annotate(OpenApi.Identifier, "organizations.listManagedWorkspaces") .annotate(OpenApi.Summary, "List managed workspaces") @@ -4640,7 +4640,7 @@ class NotificationsGroup extends HttpApiGroup.make("Notifications") .annotate(OpenApi.Identifier, "notifications.getUnreadCount") .annotate(OpenApi.Summary, "Count unread notifications") .annotate(OpenApi.Description, "Returns the number of unread in-app notifications for the authenticated user."), - HttpApiEndpoint.patch("notificationsMarkRead", "/notifications/:id/read", { params: NotificationsMarkReadPathParams, success: HttpApiSchema.Empty(204), error: NotificationsMarkRead401.pipe(HttpApiSchema.status(401)) }) + HttpApiEndpoint.patch("notificationsMarkRead", "/notifications/{id}/read", { params: NotificationsMarkReadPathParams, success: HttpApiSchema.Empty(204), error: NotificationsMarkRead401.pipe(HttpApiSchema.status(401)) }) .middleware(BearerAuthSecurityMiddleware) .annotate(OpenApi.Identifier, "notifications.markRead") .annotate(OpenApi.Summary, "Mark a notification as read") @@ -4658,7 +4658,7 @@ class QuotasGroup extends HttpApiGroup.make("Quotas") .annotate(OpenApi.Identifier, "quotas.list") .annotate(OpenApi.Summary, "List quota usage for the authenticated user") .annotate(OpenApi.Description, "Returns current usage and limits for all quota metrics. With workspace context, allocation quotas are scoped to that workspace. Without context, allocation quotas retain the user-wide view. Rate quotas are user-scoped, and concurrency quotas are per-cluster when `cluster_id` is supplied."), - HttpApiEndpoint.get("quotasGet", "/quotas/:metric", { params: QuotasGetPathParams, success: QuotasGet200, error: [QuotasGet401.pipe(HttpApiSchema.status(401)), QuotasGet404.pipe(HttpApiSchema.status(404))] }) + HttpApiEndpoint.get("quotasGet", "/quotas/{metric}", { params: QuotasGetPathParams, success: QuotasGet200, error: [QuotasGet401.pipe(HttpApiSchema.status(401)), QuotasGet404.pipe(HttpApiSchema.status(404))] }) .middleware(BearerAuthSecurityMiddleware) .annotate(OpenApi.Identifier, "quotas.get") .annotate(OpenApi.Summary, "Get quota usage for a specific metric") @@ -4689,7 +4689,7 @@ class RegistryGroup extends HttpApiGroup.make("Registry") .annotate(OpenApi.Identifier, "registry.createCredential") .annotate(OpenApi.Summary, "Create registry credential") .annotate(OpenApi.Description, "Adds a registry credential to the workspace for OCI proxy authentication."), - HttpApiEndpoint.delete("registryDeleteCredential", "/registry_connections/:id", { params: RegistryDeleteCredentialPathParams, headers: RegistryDeleteCredentialHeaders, success: HttpApiSchema.Empty(204), error: [RegistryDeleteCredential401.pipe(HttpApiSchema.status(401)), RegistryDeleteCredential403.pipe(HttpApiSchema.status(403)), RegistryDeleteCredential404.pipe(HttpApiSchema.status(404))] }) + HttpApiEndpoint.delete("registryDeleteCredential", "/registry_connections/{id}", { params: RegistryDeleteCredentialPathParams, headers: RegistryDeleteCredentialHeaders, success: HttpApiSchema.Empty(204), error: [RegistryDeleteCredential401.pipe(HttpApiSchema.status(401)), RegistryDeleteCredential403.pipe(HttpApiSchema.status(403)), RegistryDeleteCredential404.pipe(HttpApiSchema.status(404))] }) .middleware(BearerAuthSecurityMiddleware) .annotate(OpenApi.Identifier, "registry.deleteCredential") .annotate(OpenApi.Summary, "Delete registry credential") @@ -4707,22 +4707,22 @@ class AgentsGroup extends HttpApiGroup.make("Agents") .annotate(OpenApi.Identifier, "agents.create") .annotate(OpenApi.Summary, "Create agent") .annotate(OpenApi.Description, "Creates a durable workspace-scoped agent identity."), - HttpApiEndpoint.get("agentsGet", "/agents/:id", { params: AgentsGetPathParams, success: AgentsGet200, error: [AgentsGet401.pipe(HttpApiSchema.status(401)), AgentsGet403.pipe(HttpApiSchema.status(403)), AgentsGet404.pipe(HttpApiSchema.status(404))] }) + HttpApiEndpoint.get("agentsGet", "/agents/{id}", { params: AgentsGetPathParams, success: AgentsGet200, error: [AgentsGet401.pipe(HttpApiSchema.status(401)), AgentsGet403.pipe(HttpApiSchema.status(403)), AgentsGet404.pipe(HttpApiSchema.status(404))] }) .middleware(BearerAuthSecurityMiddleware) .annotate(OpenApi.Identifier, "agents.get") .annotate(OpenApi.Summary, "Get agent") .annotate(OpenApi.Description, "Gets one agent."), - HttpApiEndpoint.delete("agentsArchive", "/agents/:id", { params: AgentsArchivePathParams, success: AgentsArchive200, error: [AgentsArchive401.pipe(HttpApiSchema.status(401)), AgentsArchive403.pipe(HttpApiSchema.status(403)), AgentsArchive404.pipe(HttpApiSchema.status(404))] }) + HttpApiEndpoint.delete("agentsArchive", "/agents/{id}", { params: AgentsArchivePathParams, success: AgentsArchive200, error: [AgentsArchive401.pipe(HttpApiSchema.status(401)), AgentsArchive403.pipe(HttpApiSchema.status(403)), AgentsArchive404.pipe(HttpApiSchema.status(404))] }) .middleware(BearerAuthSecurityMiddleware) .annotate(OpenApi.Identifier, "agents.archive") .annotate(OpenApi.Summary, "Archive agent") .annotate(OpenApi.Description, "Archives an agent and stops future ambient triggers."), - HttpApiEndpoint.patch("agentsUpdate", "/agents/:id", { params: AgentsUpdatePathParams, headers: AgentsUpdateHeaders, payload: [AgentsUpdateRequestJson, HttpApiSchema.NoContent], success: AgentsUpdate200, error: [AgentsUpdate401.pipe(HttpApiSchema.status(401)), AgentsUpdate403.pipe(HttpApiSchema.status(403)), AgentsUpdate404.pipe(HttpApiSchema.status(404)), AgentsUpdate409.pipe(HttpApiSchema.status(409)), AgentsUpdate422.pipe(HttpApiSchema.status(422)), AgentsUpdate503.pipe(HttpApiSchema.status(503))] }) + HttpApiEndpoint.patch("agentsUpdate", "/agents/{id}", { params: AgentsUpdatePathParams, headers: AgentsUpdateHeaders, payload: [AgentsUpdateRequestJson, HttpApiSchema.NoContent], success: AgentsUpdate200, error: [AgentsUpdate401.pipe(HttpApiSchema.status(401)), AgentsUpdate403.pipe(HttpApiSchema.status(403)), AgentsUpdate404.pipe(HttpApiSchema.status(404)), AgentsUpdate409.pipe(HttpApiSchema.status(409)), AgentsUpdate422.pipe(HttpApiSchema.status(422)), AgentsUpdate503.pipe(HttpApiSchema.status(503))] }) .middleware(BearerAuthSecurityMiddleware) .annotate(OpenApi.Identifier, "agents.update") .annotate(OpenApi.Summary, "Update agent") .annotate(OpenApi.Description, "Updates mutable agent configuration. Lifecycle state changes use archive."), - HttpApiEndpoint.post("agentsEnable", "/agents/:id%3Aenable", { params: AgentsEnablePathParams, success: AgentsEnable200, error: [AgentsEnable401.pipe(HttpApiSchema.status(401)), AgentsEnable403.pipe(HttpApiSchema.status(403)), AgentsEnable404.pipe(HttpApiSchema.status(404))] }) + HttpApiEndpoint.post("agentsEnable", "/agents/{id}:enable", { params: AgentsEnablePathParams, success: AgentsEnable200, error: [AgentsEnable401.pipe(HttpApiSchema.status(401)), AgentsEnable403.pipe(HttpApiSchema.status(403)), AgentsEnable404.pipe(HttpApiSchema.status(404))] }) .middleware(BearerAuthSecurityMiddleware) .annotate(OpenApi.Identifier, "agents.enable") .annotate(OpenApi.Summary, "Enable agent") @@ -4735,7 +4735,7 @@ class AgentSkillsGroup extends HttpApiGroup.make("Agent skills") .annotate(OpenApi.Identifier, "agentSkills.list") .annotate(OpenApi.Summary, "List agent skills") .annotate(OpenApi.Description, "Lists published agent skills visible to the workspace."), - HttpApiEndpoint.get("agentSkillsGet", "/agent_skills/:id", { params: AgentSkillsGetPathParams, success: AgentSkillsGet200, error: [AgentSkillsGet401.pipe(HttpApiSchema.status(401)), AgentSkillsGet403.pipe(HttpApiSchema.status(403)), AgentSkillsGet404.pipe(HttpApiSchema.status(404))] }) + HttpApiEndpoint.get("agentSkillsGet", "/agent_skills/{id}", { params: AgentSkillsGetPathParams, success: AgentSkillsGet200, error: [AgentSkillsGet401.pipe(HttpApiSchema.status(401)), AgentSkillsGet403.pipe(HttpApiSchema.status(403)), AgentSkillsGet404.pipe(HttpApiSchema.status(404))] }) .middleware(BearerAuthSecurityMiddleware) .annotate(OpenApi.Identifier, "agentSkills.get") .annotate(OpenApi.Summary, "Get agent skill") @@ -4747,7 +4747,7 @@ class AgentTemplatesGroup extends HttpApiGroup.make("Agent templates") .annotate(OpenApi.Identifier, "agentTemplates.list") .annotate(OpenApi.Summary, "List agent templates") .annotate(OpenApi.Description, "Lists platform-curated agent templates visible to the workspace."), - HttpApiEndpoint.get("agentTemplatesGet", "/agent_templates/:id", { params: AgentTemplatesGetPathParams, success: AgentTemplatesGet200, error: [AgentTemplatesGet401.pipe(HttpApiSchema.status(401)), AgentTemplatesGet403.pipe(HttpApiSchema.status(403)), AgentTemplatesGet404.pipe(HttpApiSchema.status(404))] }) + HttpApiEndpoint.get("agentTemplatesGet", "/agent_templates/{id}", { params: AgentTemplatesGetPathParams, success: AgentTemplatesGet200, error: [AgentTemplatesGet401.pipe(HttpApiSchema.status(401)), AgentTemplatesGet403.pipe(HttpApiSchema.status(403)), AgentTemplatesGet404.pipe(HttpApiSchema.status(404))] }) .middleware(BearerAuthSecurityMiddleware) .annotate(OpenApi.Identifier, "agentTemplates.get") .annotate(OpenApi.Summary, "Get agent template") @@ -4776,22 +4776,22 @@ class AgentSessionsGroup extends HttpApiGroup.make("Agent sessions") .annotate(OpenApi.Identifier, "agentSessions.create") .annotate(OpenApi.Summary, "Create agent session") .annotate(OpenApi.Description, "Creates a durable workspace-scoped session for an agent."), - HttpApiEndpoint.get("agentSessionsDetectConflicts", "/agent_sessions%3AdetectConflicts", { query: AgentSessionsDetectConflictsQuery, headers: AgentSessionsDetectConflictsHeaders, success: AgentSessionsDetectConflicts200, error: [AgentSessionsDetectConflicts401.pipe(HttpApiSchema.status(401)), AgentSessionsDetectConflicts403.pipe(HttpApiSchema.status(403))] }) + HttpApiEndpoint.get("agentSessionsDetectConflicts", "/agent_sessions:detectConflicts", { query: AgentSessionsDetectConflictsQuery, headers: AgentSessionsDetectConflictsHeaders, success: AgentSessionsDetectConflicts200, error: [AgentSessionsDetectConflicts401.pipe(HttpApiSchema.status(401)), AgentSessionsDetectConflicts403.pipe(HttpApiSchema.status(403))] }) .middleware(BearerAuthSecurityMiddleware) .annotate(OpenApi.Identifier, "agentSessions.detectConflicts") .annotate(OpenApi.Summary, "Detect agent work conflicts") .annotate(OpenApi.Description, "Finds active agent sessions that have already referenced the same repository, install, cluster, or repository change request."), - HttpApiEndpoint.get("agentSessionsGet", "/agent_sessions/:id", { params: AgentSessionsGetPathParams, success: AgentSessionsGet200, error: [AgentSessionsGet401.pipe(HttpApiSchema.status(401)), AgentSessionsGet403.pipe(HttpApiSchema.status(403)), AgentSessionsGet404.pipe(HttpApiSchema.status(404))] }) + HttpApiEndpoint.get("agentSessionsGet", "/agent_sessions/{id}", { params: AgentSessionsGetPathParams, success: AgentSessionsGet200, error: [AgentSessionsGet401.pipe(HttpApiSchema.status(401)), AgentSessionsGet403.pipe(HttpApiSchema.status(403)), AgentSessionsGet404.pipe(HttpApiSchema.status(404))] }) .middleware(BearerAuthSecurityMiddleware) .annotate(OpenApi.Identifier, "agentSessions.get") .annotate(OpenApi.Summary, "Get agent session") .annotate(OpenApi.Description, "Gets one agent session."), - HttpApiEndpoint.delete("agentSessionsArchive", "/agent_sessions/:id", { params: AgentSessionsArchivePathParams, success: AgentSessionsArchive200, error: [AgentSessionsArchive401.pipe(HttpApiSchema.status(401)), AgentSessionsArchive403.pipe(HttpApiSchema.status(403)), AgentSessionsArchive404.pipe(HttpApiSchema.status(404))] }) + HttpApiEndpoint.delete("agentSessionsArchive", "/agent_sessions/{id}", { params: AgentSessionsArchivePathParams, success: AgentSessionsArchive200, error: [AgentSessionsArchive401.pipe(HttpApiSchema.status(401)), AgentSessionsArchive403.pipe(HttpApiSchema.status(403)), AgentSessionsArchive404.pipe(HttpApiSchema.status(404))] }) .middleware(BearerAuthSecurityMiddleware) .annotate(OpenApi.Identifier, "agentSessions.archive") .annotate(OpenApi.Summary, "Archive agent session") .annotate(OpenApi.Description, "Archives an agent session and requests runtime cleanup."), - HttpApiEndpoint.post("agentSessionsSetRetention", "/agent_sessions/:id%3AsetRetention", { params: AgentSessionsSetRetentionPathParams, payload: [AgentSessionsSetRetentionRequestJson, HttpApiSchema.NoContent], success: AgentSessionsSetRetention200, error: [AgentSessionsSetRetention401.pipe(HttpApiSchema.status(401)), AgentSessionsSetRetention403.pipe(HttpApiSchema.status(403)), AgentSessionsSetRetention404.pipe(HttpApiSchema.status(404))] }) + HttpApiEndpoint.post("agentSessionsSetRetention", "/agent_sessions/{id}:setRetention", { params: AgentSessionsSetRetentionPathParams, payload: [AgentSessionsSetRetentionRequestJson, HttpApiSchema.NoContent], success: AgentSessionsSetRetention200, error: [AgentSessionsSetRetention401.pipe(HttpApiSchema.status(401)), AgentSessionsSetRetention403.pipe(HttpApiSchema.status(403)), AgentSessionsSetRetention404.pipe(HttpApiSchema.status(404))] }) .middleware(BearerAuthSecurityMiddleware) .annotate(OpenApi.Identifier, "agentSessions.setRetention") .annotate(OpenApi.Summary, "Set agent session retention") @@ -4809,17 +4809,17 @@ class AgentTurnsGroup extends HttpApiGroup.make("Agent turns") .annotate(OpenApi.Identifier, "agentTurns.create") .annotate(OpenApi.Summary, "Submit agent turn") .annotate(OpenApi.Description, "Submits one instruction to an agent session."), - HttpApiEndpoint.get("agentTurnsGet", "/agent_turns/:id", { params: AgentTurnsGetPathParams, success: AgentTurnsGet200, error: [AgentTurnsGet401.pipe(HttpApiSchema.status(401)), AgentTurnsGet403.pipe(HttpApiSchema.status(403)), AgentTurnsGet404.pipe(HttpApiSchema.status(404))] }) + HttpApiEndpoint.get("agentTurnsGet", "/agent_turns/{id}", { params: AgentTurnsGetPathParams, success: AgentTurnsGet200, error: [AgentTurnsGet401.pipe(HttpApiSchema.status(401)), AgentTurnsGet403.pipe(HttpApiSchema.status(403)), AgentTurnsGet404.pipe(HttpApiSchema.status(404))] }) .middleware(BearerAuthSecurityMiddleware) .annotate(OpenApi.Identifier, "agentTurns.get") .annotate(OpenApi.Summary, "Get agent turn") .annotate(OpenApi.Description, "Gets one agent turn."), - HttpApiEndpoint.post("agentTurnsCancel", "/agent_turns/:id%3Acancel", { params: AgentTurnsCancelPathParams, headers: AgentTurnsCancelHeaders, success: AgentTurnsCancel200, error: [AgentTurnsCancel401.pipe(HttpApiSchema.status(401)), AgentTurnsCancel403.pipe(HttpApiSchema.status(403)), AgentTurnsCancel404.pipe(HttpApiSchema.status(404)), AgentTurnsCancel422.pipe(HttpApiSchema.status(422))] }) + HttpApiEndpoint.post("agentTurnsCancel", "/agent_turns/{id}:cancel", { params: AgentTurnsCancelPathParams, headers: AgentTurnsCancelHeaders, success: AgentTurnsCancel200, error: [AgentTurnsCancel401.pipe(HttpApiSchema.status(401)), AgentTurnsCancel403.pipe(HttpApiSchema.status(403)), AgentTurnsCancel404.pipe(HttpApiSchema.status(404)), AgentTurnsCancel422.pipe(HttpApiSchema.status(422))] }) .middleware(BearerAuthSecurityMiddleware) .annotate(OpenApi.Identifier, "agentTurns.cancel") .annotate(OpenApi.Summary, "Cancel agent turn") .annotate(OpenApi.Description, "Cancels a running or queued agent turn."), - HttpApiEndpoint.post("agentTurnsEmit", "/agent_turns/:id%3Aemit", { params: AgentTurnsEmitPathParams, headers: AgentTurnsEmitHeaders, payload: [AgentTurnsEmitRequestJson, HttpApiSchema.NoContent], success: AgentTurnsEmit201.pipe(HttpApiSchema.status(201)), error: [AgentTurnsEmit401.pipe(HttpApiSchema.status(401)), AgentTurnsEmit403.pipe(HttpApiSchema.status(403)), AgentTurnsEmit404.pipe(HttpApiSchema.status(404)), AgentTurnsEmit409.pipe(HttpApiSchema.status(409)), AgentTurnsEmit422.pipe(HttpApiSchema.status(422))] }) + HttpApiEndpoint.post("agentTurnsEmit", "/agent_turns/{id}:emit", { params: AgentTurnsEmitPathParams, headers: AgentTurnsEmitHeaders, payload: [AgentTurnsEmitRequestJson, HttpApiSchema.NoContent], success: AgentTurnsEmit201.pipe(HttpApiSchema.status(201)), error: [AgentTurnsEmit401.pipe(HttpApiSchema.status(401)), AgentTurnsEmit403.pipe(HttpApiSchema.status(403)), AgentTurnsEmit404.pipe(HttpApiSchema.status(404)), AgentTurnsEmit409.pipe(HttpApiSchema.status(409)), AgentTurnsEmit422.pipe(HttpApiSchema.status(422))] }) .middleware(BearerAuthSecurityMiddleware) .annotate(OpenApi.Identifier, "agentTurns.emit") .annotate(OpenApi.Summary, "Emit agent turn event") @@ -4834,7 +4834,7 @@ class AgentProviderExchangesGroup extends HttpApiGroup.make("Agent provider exch .annotate(OpenApi.Description, "Lists redacted provider proxy request and response metadata for one agent turn.")) {} class AgentEventsGroup extends HttpApiGroup.make("Agent events") - .add(HttpApiEndpoint.get("agentEventsStream", "/agent_events%3Astream", { query: AgentEventsStreamQuery, headers: AgentEventsStreamHeaders, success: HttpApiSchema.Empty(200), error: [AgentEventsStream401.pipe(HttpApiSchema.status(401)), AgentEventsStream403.pipe(HttpApiSchema.status(403))] }) + .add(HttpApiEndpoint.get("agentEventsStream", "/agent_events:stream", { query: AgentEventsStreamQuery, headers: AgentEventsStreamHeaders, success: HttpApiSchema.Empty(200), error: [AgentEventsStream401.pipe(HttpApiSchema.status(401)), AgentEventsStream403.pipe(HttpApiSchema.status(403))] }) .middleware(BearerAuthSecurityMiddleware) .annotate(OpenApi.Identifier, "agentEvents.stream") .annotate(OpenApi.Summary, "Stream agent events") @@ -4852,19 +4852,19 @@ class ApprovalRequestsGroup extends HttpApiGroup.make("Approval requests") .annotate(OpenApi.Identifier, "approvalRequests.list") .annotate(OpenApi.Summary, "List approval requests") .annotate(OpenApi.Description, "Lists pending and resolved approval requests in the workspace."), - HttpApiEndpoint.post("approvalRequestsResolve", "/approval_requests/:id%3Aresolve", { params: ApprovalRequestsResolvePathParams, headers: ApprovalRequestsResolveHeaders, payload: [ApprovalRequestsResolveRequestJson, HttpApiSchema.NoContent], success: ApprovalRequestsResolve200, error: [ApprovalRequestsResolve401.pipe(HttpApiSchema.status(401)), ApprovalRequestsResolve403.pipe(HttpApiSchema.status(403)), ApprovalRequestsResolve404.pipe(HttpApiSchema.status(404)), ApprovalRequestsResolve422.pipe(HttpApiSchema.status(422))] }) + HttpApiEndpoint.post("approvalRequestsResolve", "/approval_requests/{id}:resolve", { params: ApprovalRequestsResolvePathParams, headers: ApprovalRequestsResolveHeaders, payload: [ApprovalRequestsResolveRequestJson, HttpApiSchema.NoContent], success: ApprovalRequestsResolve200, error: [ApprovalRequestsResolve401.pipe(HttpApiSchema.status(401)), ApprovalRequestsResolve403.pipe(HttpApiSchema.status(403)), ApprovalRequestsResolve404.pipe(HttpApiSchema.status(404)), ApprovalRequestsResolve422.pipe(HttpApiSchema.status(422))] }) .middleware(BearerAuthSecurityMiddleware) .annotate(OpenApi.Identifier, "approvalRequests.resolve") .annotate(OpenApi.Summary, "Resolve approval request") .annotate(OpenApi.Description, "Approves or rejects an approval request.")) {} class WorkspaceSubdomainsGroup extends HttpApiGroup.make("Workspace subdomains") - .add(HttpApiEndpoint.get("workspaceSubdomainsGet", "/workspaces/:id/subdomain", { params: WorkspaceSubdomainsGetPathParams, success: WorkspaceSubdomainsGet200, error: [WorkspaceSubdomainsGet401.pipe(HttpApiSchema.status(401)), WorkspaceSubdomainsGet403.pipe(HttpApiSchema.status(403)), WorkspaceSubdomainsGet404.pipe(HttpApiSchema.status(404))] }) + .add(HttpApiEndpoint.get("workspaceSubdomainsGet", "/workspaces/{id}/subdomain", { params: WorkspaceSubdomainsGetPathParams, success: WorkspaceSubdomainsGet200, error: [WorkspaceSubdomainsGet401.pipe(HttpApiSchema.status(401)), WorkspaceSubdomainsGet403.pipe(HttpApiSchema.status(403)), WorkspaceSubdomainsGet404.pipe(HttpApiSchema.status(404))] }) .middleware(BearerAuthSecurityMiddleware) .annotate(OpenApi.Identifier, "workspaceSubdomains.get") .annotate(OpenApi.Summary, "Get workspace subdomain") .annotate(OpenApi.Description, "Returns the singleton workspace subdomain resource."), - HttpApiEndpoint.post("workspaceSubdomainsSetName", "/workspaces/:id/subdomain%3AsetName", { params: WorkspaceSubdomainsSetNamePathParams, headers: WorkspaceSubdomainsSetNameHeaders, payload: [WorkspaceSubdomainsSetNameRequestJson, HttpApiSchema.NoContent], success: WorkspaceSubdomainsSetName202.pipe(HttpApiSchema.status(202)), error: [WorkspaceSubdomainsSetName401.pipe(HttpApiSchema.status(401)), WorkspaceSubdomainsSetName403.pipe(HttpApiSchema.status(403)), WorkspaceSubdomainsSetName409.pipe(HttpApiSchema.status(409))] }) + HttpApiEndpoint.post("workspaceSubdomainsSetName", "/workspaces/{id}/subdomain:setName", { params: WorkspaceSubdomainsSetNamePathParams, headers: WorkspaceSubdomainsSetNameHeaders, payload: [WorkspaceSubdomainsSetNameRequestJson, HttpApiSchema.NoContent], success: WorkspaceSubdomainsSetName202.pipe(HttpApiSchema.status(202)), error: [WorkspaceSubdomainsSetName401.pipe(HttpApiSchema.status(401)), WorkspaceSubdomainsSetName403.pipe(HttpApiSchema.status(403)), WorkspaceSubdomainsSetName409.pipe(HttpApiSchema.status(409))] }) .middleware(BearerAuthSecurityMiddleware) .annotate(OpenApi.Identifier, "workspaceSubdomains.setName") .annotate(OpenApi.Summary, "Set workspace subdomain name") @@ -4872,27 +4872,27 @@ class WorkspaceSubdomainsGroup extends HttpApiGroup.make("Workspace subdomains") .annotate(OpenApi.Description, "Workspace subdomain identity.") {} class PreviewHostnamesGroup extends HttpApiGroup.make("Preview hostnames") - .add(HttpApiEndpoint.get("previewHostnamesList", "/installs/:id/preview_hostnames", { params: PreviewHostnamesListPathParams, query: PreviewHostnamesListQuery, headers: PreviewHostnamesListHeaders, success: PreviewHostnamesList200, error: [PreviewHostnamesList401.pipe(HttpApiSchema.status(401)), PreviewHostnamesList403.pipe(HttpApiSchema.status(403))] }) + .add(HttpApiEndpoint.get("previewHostnamesList", "/installs/{id}/preview_hostnames", { params: PreviewHostnamesListPathParams, query: PreviewHostnamesListQuery, headers: PreviewHostnamesListHeaders, success: PreviewHostnamesList200, error: [PreviewHostnamesList401.pipe(HttpApiSchema.status(401)), PreviewHostnamesList403.pipe(HttpApiSchema.status(403))] }) .middleware(BearerAuthSecurityMiddleware) .annotate(OpenApi.Identifier, "previewHostnames.list") .annotate(OpenApi.Summary, "List preview hostnames") .annotate(OpenApi.Description, "Lists preview hostnames belonging to an install."), - HttpApiEndpoint.get("previewHostnamesGet", "/installs/:id/preview_hostnames/:preview_hostname_id", { params: PreviewHostnamesGetPathParams, headers: PreviewHostnamesGetHeaders, success: PreviewHostnamesGet200, error: [PreviewHostnamesGet401.pipe(HttpApiSchema.status(401)), PreviewHostnamesGet403.pipe(HttpApiSchema.status(403)), PreviewHostnamesGet404.pipe(HttpApiSchema.status(404))] }) + HttpApiEndpoint.get("previewHostnamesGet", "/installs/{id}/preview_hostnames/{preview_hostname_id}", { params: PreviewHostnamesGetPathParams, headers: PreviewHostnamesGetHeaders, success: PreviewHostnamesGet200, error: [PreviewHostnamesGet401.pipe(HttpApiSchema.status(401)), PreviewHostnamesGet403.pipe(HttpApiSchema.status(403)), PreviewHostnamesGet404.pipe(HttpApiSchema.status(404))] }) .middleware(BearerAuthSecurityMiddleware) .annotate(OpenApi.Identifier, "previewHostnames.get") .annotate(OpenApi.Summary, "Get preview hostname") .annotate(OpenApi.Description, "Returns one preview hostname belonging to an install."), - HttpApiEndpoint.delete("previewHostnamesDelete", "/installs/:id/preview_hostnames/:preview_hostname_id", { params: PreviewHostnamesDeletePathParams, headers: PreviewHostnamesDeleteHeaders, success: PreviewHostnamesDelete202.pipe(HttpApiSchema.status(202)), error: [PreviewHostnamesDelete401.pipe(HttpApiSchema.status(401)), PreviewHostnamesDelete403.pipe(HttpApiSchema.status(403)), PreviewHostnamesDelete409.pipe(HttpApiSchema.status(409))] }) + HttpApiEndpoint.delete("previewHostnamesDelete", "/installs/{id}/preview_hostnames/{preview_hostname_id}", { params: PreviewHostnamesDeletePathParams, headers: PreviewHostnamesDeleteHeaders, success: PreviewHostnamesDelete202.pipe(HttpApiSchema.status(202)), error: [PreviewHostnamesDelete401.pipe(HttpApiSchema.status(401)), PreviewHostnamesDelete403.pipe(HttpApiSchema.status(403)), PreviewHostnamesDelete409.pipe(HttpApiSchema.status(409))] }) .middleware(BearerAuthSecurityMiddleware) .annotate(OpenApi.Identifier, "previewHostnames.delete") .annotate(OpenApi.Summary, "Delete preview hostname") .annotate(OpenApi.Description, "Starts a workflow that releases a preview hostname."), - HttpApiEndpoint.post("previewHostnamesBindPinned", "/installs/:id/preview_hostnames%3AbindPinned", { params: PreviewHostnamesBindPinnedPathParams, headers: PreviewHostnamesBindPinnedHeaders, payload: [PreviewHostnamesBindPinnedRequestJson, HttpApiSchema.NoContent], success: PreviewHostnamesBindPinned202.pipe(HttpApiSchema.status(202)), error: [PreviewHostnamesBindPinned401.pipe(HttpApiSchema.status(401)), PreviewHostnamesBindPinned403.pipe(HttpApiSchema.status(403))] }) + HttpApiEndpoint.post("previewHostnamesBindPinned", "/installs/{id}/preview_hostnames:bindPinned", { params: PreviewHostnamesBindPinnedPathParams, headers: PreviewHostnamesBindPinnedHeaders, payload: [PreviewHostnamesBindPinnedRequestJson, HttpApiSchema.NoContent], success: PreviewHostnamesBindPinned202.pipe(HttpApiSchema.status(202)), error: [PreviewHostnamesBindPinned401.pipe(HttpApiSchema.status(401)), PreviewHostnamesBindPinned403.pipe(HttpApiSchema.status(403))] }) .middleware(BearerAuthSecurityMiddleware) .annotate(OpenApi.Identifier, "previewHostnames.bindPinned") .annotate(OpenApi.Summary, "Bind pinned preview hostname") .annotate(OpenApi.Description, "Starts a workflow that binds an immutable preview hostname to one render."), - HttpApiEndpoint.post("previewHostnamesBindFloating", "/installs/:id/preview_hostnames%3AbindFloating", { params: PreviewHostnamesBindFloatingPathParams, headers: PreviewHostnamesBindFloatingHeaders, payload: [PreviewHostnamesBindFloatingRequestJson, HttpApiSchema.NoContent], success: PreviewHostnamesBindFloating202.pipe(HttpApiSchema.status(202)), error: [PreviewHostnamesBindFloating401.pipe(HttpApiSchema.status(401)), PreviewHostnamesBindFloating403.pipe(HttpApiSchema.status(403))] }) + HttpApiEndpoint.post("previewHostnamesBindFloating", "/installs/{id}/preview_hostnames:bindFloating", { params: PreviewHostnamesBindFloatingPathParams, headers: PreviewHostnamesBindFloatingHeaders, payload: [PreviewHostnamesBindFloatingRequestJson, HttpApiSchema.NoContent], success: PreviewHostnamesBindFloating202.pipe(HttpApiSchema.status(202)), error: [PreviewHostnamesBindFloating401.pipe(HttpApiSchema.status(401)), PreviewHostnamesBindFloating403.pipe(HttpApiSchema.status(403))] }) .middleware(BearerAuthSecurityMiddleware) .annotate(OpenApi.Identifier, "previewHostnames.bindFloating") .annotate(OpenApi.Summary, "Bind floating preview hostname") @@ -4900,27 +4900,27 @@ class PreviewHostnamesGroup extends HttpApiGroup.make("Preview hostnames") .annotate(OpenApi.Description, "Install preview hostnames and routing state.") {} class CustomDomainsGroup extends HttpApiGroup.make("Custom domains") - .add(HttpApiEndpoint.get("customDomainsList", "/workspaces/:id/custom_domains", { params: CustomDomainsListPathParams, query: CustomDomainsListQuery, success: CustomDomainsList200, error: [CustomDomainsList401.pipe(HttpApiSchema.status(401)), CustomDomainsList403.pipe(HttpApiSchema.status(403))] }) + .add(HttpApiEndpoint.get("customDomainsList", "/workspaces/{id}/custom_domains", { params: CustomDomainsListPathParams, query: CustomDomainsListQuery, success: CustomDomainsList200, error: [CustomDomainsList401.pipe(HttpApiSchema.status(401)), CustomDomainsList403.pipe(HttpApiSchema.status(403))] }) .middleware(BearerAuthSecurityMiddleware) .annotate(OpenApi.Identifier, "customDomains.list") .annotate(OpenApi.Summary, "List custom domains") .annotate(OpenApi.Description, "Lists custom domains belonging to a workspace."), - HttpApiEndpoint.post("customDomainsCreate", "/workspaces/:id/custom_domains", { params: CustomDomainsCreatePathParams, headers: CustomDomainsCreateHeaders, payload: [CustomDomainsCreateRequestJson, HttpApiSchema.NoContent], success: CustomDomainsCreate202.pipe(HttpApiSchema.status(202)), error: [CustomDomainsCreate401.pipe(HttpApiSchema.status(401)), CustomDomainsCreate403.pipe(HttpApiSchema.status(403))] }) + HttpApiEndpoint.post("customDomainsCreate", "/workspaces/{id}/custom_domains", { params: CustomDomainsCreatePathParams, headers: CustomDomainsCreateHeaders, payload: [CustomDomainsCreateRequestJson, HttpApiSchema.NoContent], success: CustomDomainsCreate202.pipe(HttpApiSchema.status(202)), error: [CustomDomainsCreate401.pipe(HttpApiSchema.status(401)), CustomDomainsCreate403.pipe(HttpApiSchema.status(403))] }) .middleware(BearerAuthSecurityMiddleware) .annotate(OpenApi.Identifier, "customDomains.create") .annotate(OpenApi.Summary, "Create custom domain") .annotate(OpenApi.Description, "Creates a custom domain and starts routing reconciliation."), - HttpApiEndpoint.get("customDomainsGet", "/workspaces/:id/custom_domains/:custom_domain_id", { params: CustomDomainsGetPathParams, success: CustomDomainsGet200, error: [CustomDomainsGet401.pipe(HttpApiSchema.status(401)), CustomDomainsGet403.pipe(HttpApiSchema.status(403)), CustomDomainsGet404.pipe(HttpApiSchema.status(404))] }) + HttpApiEndpoint.get("customDomainsGet", "/workspaces/{id}/custom_domains/{custom_domain_id}", { params: CustomDomainsGetPathParams, success: CustomDomainsGet200, error: [CustomDomainsGet401.pipe(HttpApiSchema.status(401)), CustomDomainsGet403.pipe(HttpApiSchema.status(403)), CustomDomainsGet404.pipe(HttpApiSchema.status(404))] }) .middleware(BearerAuthSecurityMiddleware) .annotate(OpenApi.Identifier, "customDomains.get") .annotate(OpenApi.Summary, "Get custom domain") .annotate(OpenApi.Description, "Returns one custom domain belonging to a workspace."), - HttpApiEndpoint.delete("customDomainsDelete", "/workspaces/:id/custom_domains/:custom_domain_id", { params: CustomDomainsDeletePathParams, headers: CustomDomainsDeleteHeaders, success: CustomDomainsDelete202.pipe(HttpApiSchema.status(202)), error: [CustomDomainsDelete401.pipe(HttpApiSchema.status(401)), CustomDomainsDelete403.pipe(HttpApiSchema.status(403)), CustomDomainsDelete409.pipe(HttpApiSchema.status(409))] }) + HttpApiEndpoint.delete("customDomainsDelete", "/workspaces/{id}/custom_domains/{custom_domain_id}", { params: CustomDomainsDeletePathParams, headers: CustomDomainsDeleteHeaders, success: CustomDomainsDelete202.pipe(HttpApiSchema.status(202)), error: [CustomDomainsDelete401.pipe(HttpApiSchema.status(401)), CustomDomainsDelete403.pipe(HttpApiSchema.status(403)), CustomDomainsDelete409.pipe(HttpApiSchema.status(409))] }) .middleware(BearerAuthSecurityMiddleware) .annotate(OpenApi.Identifier, "customDomains.delete") .annotate(OpenApi.Summary, "Delete custom domain") .annotate(OpenApi.Description, "Starts a workflow that releases a custom domain."), - HttpApiEndpoint.patch("customDomainsUpdate", "/workspaces/:id/custom_domains/:custom_domain_id", { params: CustomDomainsUpdatePathParams, headers: CustomDomainsUpdateHeaders, payload: [CustomDomainsUpdateRequestJson, HttpApiSchema.NoContent], success: CustomDomainsUpdate202.pipe(HttpApiSchema.status(202)), error: [CustomDomainsUpdate401.pipe(HttpApiSchema.status(401)), CustomDomainsUpdate403.pipe(HttpApiSchema.status(403)), CustomDomainsUpdate409.pipe(HttpApiSchema.status(409))] }) + HttpApiEndpoint.patch("customDomainsUpdate", "/workspaces/{id}/custom_domains/{custom_domain_id}", { params: CustomDomainsUpdatePathParams, headers: CustomDomainsUpdateHeaders, payload: [CustomDomainsUpdateRequestJson, HttpApiSchema.NoContent], success: CustomDomainsUpdate202.pipe(HttpApiSchema.status(202)), error: [CustomDomainsUpdate401.pipe(HttpApiSchema.status(401)), CustomDomainsUpdate403.pipe(HttpApiSchema.status(403)), CustomDomainsUpdate409.pipe(HttpApiSchema.status(409))] }) .middleware(BearerAuthSecurityMiddleware) .annotate(OpenApi.Identifier, "customDomains.update") .annotate(OpenApi.Summary, "Update custom domain") @@ -4938,7 +4938,7 @@ class CloudflareGroup extends HttpApiGroup.make("Cloudflare") .annotate(OpenApi.Identifier, "cloudflare.createCredential") .annotate(OpenApi.Summary, "Create Cloudflare credential") .annotate(OpenApi.Description, "Adds a Cloudflare API credential to the workspace. The API token is stored as a platform Secret and is never returned."), - HttpApiEndpoint.delete("cloudflareDeleteCredential", "/cloudflare_connections/:id", { params: CloudflareDeleteCredentialPathParams, headers: CloudflareDeleteCredentialHeaders, success: HttpApiSchema.Empty(204), error: [CloudflareDeleteCredential401.pipe(HttpApiSchema.status(401)), CloudflareDeleteCredential403.pipe(HttpApiSchema.status(403)), CloudflareDeleteCredential404.pipe(HttpApiSchema.status(404)), CloudflareDeleteCredential409.pipe(HttpApiSchema.status(409))] }) + HttpApiEndpoint.delete("cloudflareDeleteCredential", "/cloudflare_connections/{id}", { params: CloudflareDeleteCredentialPathParams, headers: CloudflareDeleteCredentialHeaders, success: HttpApiSchema.Empty(204), error: [CloudflareDeleteCredential401.pipe(HttpApiSchema.status(401)), CloudflareDeleteCredential403.pipe(HttpApiSchema.status(403)), CloudflareDeleteCredential404.pipe(HttpApiSchema.status(404)), CloudflareDeleteCredential409.pipe(HttpApiSchema.status(409))] }) .middleware(BearerAuthSecurityMiddleware) .annotate(OpenApi.Identifier, "cloudflare.deleteCredential") .annotate(OpenApi.Summary, "Delete Cloudflare credential") @@ -4951,7 +4951,7 @@ class AccessDecisionsGroup extends HttpApiGroup.make("Access Decisions") .annotate(OpenApi.Identifier, "accessDecisions.explain") .annotate(OpenApi.Summary, "Explain an access decision") .annotate(OpenApi.Description, "Explains whether the authenticated requester can perform an access action and why."), - HttpApiEndpoint.post("accessDecisionsExplainBatch", "/access_decisions%3AexplainBatch", { headers: AccessDecisionsExplainBatchHeaders, payload: [AccessDecisionsExplainBatchRequestJson, HttpApiSchema.NoContent], success: AccessDecisionsExplainBatch200, error: [AccessDecisionsExplainBatch401.pipe(HttpApiSchema.status(401)), AccessDecisionsExplainBatch403.pipe(HttpApiSchema.status(403)), AccessDecisionsExplainBatch404.pipe(HttpApiSchema.status(404)), AccessDecisionsExplainBatch422.pipe(HttpApiSchema.status(422))] }) + HttpApiEndpoint.post("accessDecisionsExplainBatch", "/access_decisions:explainBatch", { headers: AccessDecisionsExplainBatchHeaders, payload: [AccessDecisionsExplainBatchRequestJson, HttpApiSchema.NoContent], success: AccessDecisionsExplainBatch200, error: [AccessDecisionsExplainBatch401.pipe(HttpApiSchema.status(401)), AccessDecisionsExplainBatch403.pipe(HttpApiSchema.status(403)), AccessDecisionsExplainBatch404.pipe(HttpApiSchema.status(404)), AccessDecisionsExplainBatch422.pipe(HttpApiSchema.status(422))] }) .middleware(BearerAuthSecurityMiddleware) .annotate(OpenApi.Identifier, "accessDecisions.explainBatch") .annotate(OpenApi.Summary, "Explain multiple access decisions") diff --git a/test/generate-effect-api.test.ts b/test/generate-effect-api.test.ts index 2f4ece6..2b4f9b6 100644 --- a/test/generate-effect-api.test.ts +++ b/test/generate-effect-api.test.ts @@ -65,6 +65,27 @@ it.effect("generates only PUBLIC operations", () => }), ); +it.effect("preserves OpenAPI path templates for the client", () => + Effect.gen(function* () { + const layer = Layer.succeed(ScriptFiles, { + readText: () => + Effect.succeed(JSON.stringify(specWithEmbeddedPathParameters())), + writeText: () => Effect.void, + }); + + const generated = yield* generateEffectApi(sourcePath, outputPath).pipe( + Effect.provide(layer), + ); + + expect(generated).toContain( + 'HttpApiEndpoint.post("documentsSelectWorkspace", "/v1/documents/{id}.{format}:selectWorkspace"', + ); + expect(generated).toContain( + 'HttpApiEndpoint.get("documentsGetPath", "/v1/documents/{path:*}"', + ); + }), +); + it.effect( "fails with a typed error when the generator reports a public contract warning", () => @@ -303,6 +324,58 @@ function specWithMixedVisibility() { }; } +function specWithEmbeddedPathParameters() { + return { + openapi: "3.1.0", + info: { title: "Public API", version: "1.0.0" }, + paths: { + "/v1/documents/{id}.{format}:selectWorkspace": { + post: { + operationId: "documents.selectWorkspace", + "x-platform-visibility": "PUBLIC", + tags: ["Documents"], + parameters: [ + { + name: "id", + in: "path", + required: true, + schema: { type: "string" }, + }, + { + name: "format", + in: "path", + required: true, + schema: { type: "string" }, + }, + ], + security: [], + responses: { 204: { description: "Selected" } }, + }, + }, + "/v1/documents/{path:*}": { + get: { + operationId: "documents.getPath", + "x-platform-visibility": "PUBLIC", + tags: ["Documents"], + parameters: [ + { + name: "path", + in: "path", + required: true, + schema: { type: "string" }, + }, + ], + security: [], + responses: { 204: { description: "Found" } }, + }, + }, + }, + components: { schemas: {}, securitySchemes: {} }, + security: [], + tags: [{ name: "Documents" }], + }; +} + function typeAssertions(source: string): readonly ts.Node[] { const sourceFile = ts.createSourceFile( "openapi-api.gen.ts", diff --git a/test/generated-command.test.ts b/test/generated-command.test.ts index 74ca626..f7853e7 100644 --- a/test/generated-command.test.ts +++ b/test/generated-command.test.ts @@ -1,6 +1,12 @@ import { describe, expect, test } from "@effect/vitest"; -import { Effect, Layer, Stream } from "effect"; +import { Effect, Layer, Schema, Stream } from "effect"; import { FetchHttpClient } from "effect/unstable/http"; +import { + HttpApi, + HttpApiClient, + HttpApiEndpoint, + HttpApiGroup, +} from "effect/unstable/httpapi"; import { generatedCommandView } from "../src/commands/generated"; import { GeneratedCommandFailure } from "../src/commands/generated"; @@ -15,6 +21,68 @@ import { } from "../src/runtime/services"; describe("generated public commands", () => { + test("compiles brace templates without breaking legacy colon parameters", () => { + const params = Schema.Struct({ + id: Schema.optional(Schema.String), + format: Schema.optional(Schema.String), + path: Schema.optional(Schema.String), + }); + const api = HttpApi.make("pathCompatibility").add( + HttpApiGroup.make("paths") + .add( + HttpApiEndpoint.get("legacy", "/documents/:id.:format", { + params, + success: Schema.Void, + }), + ) + .add( + HttpApiEndpoint.get("optional", "/documents/:id?", { + params, + success: Schema.Void, + }), + ) + .add( + HttpApiEndpoint.get( + "template", + "/documents/{id}.{format}:selectWorkspace", + { params, success: Schema.Void }, + ), + ) + .add( + HttpApiEndpoint.get("wildcard", "/documents/{path:*}", { + params, + success: Schema.Void, + }), + ) + .add( + HttpApiEndpoint.get("customVerb", "/offers:resolve", { + success: Schema.Void, + }), + ), + ); + const urls = HttpApiClient.urlBuilder(api, { + baseUrl: "https://api.example.test/v1", + }); + + expect( + urls.paths.legacy({ params: { id: "document/id", format: "json" } }), + ).toBe("https://api.example.test/documents/document%2Fid.json"); + expect(urls.paths.optional({ params: {} })).toBe( + "https://api.example.test/documents", + ); + expect( + urls.paths.template({ params: { id: "document/id", format: "json" } }), + ).toBe( + "https://api.example.test/documents/document%2Fid.json:selectWorkspace", + ); + expect(urls.paths.wildcard({ params: { path: "api/v1/node:name" } })).toBe( + "https://api.example.test/documents/api/v1/node%3Aname", + ); + expect(urls.paths.customVerb()).toBe( + "https://api.example.test/offers:resolve", + ); + }); + test("workspaces.list sends the decoded query and bearer token", async () => { let received: Request | undefined; const result = await runGenerated( @@ -92,7 +160,7 @@ describe("generated public commands", () => { expect(result.data).toEqual(operation); expect(received?.method).toBe("POST"); expect(received?.url).toBe( - "https://api.akua.dev/v1/clusters/clu_123%3Aresume", + "https://api.akua.dev/v1/clusters/clu_123:resume", ); expect(received?.headers.get("if-match")).toBe("etag-1"); }); @@ -116,11 +184,64 @@ describe("generated public commands", () => { expect(result.data).toEqual(operation); expect(received?.method).toBe("POST"); expect(received?.url).toBe( - "https://api.akua.dev/v1/machines/mch_123%3Aresume", + "https://api.akua.dev/v1/machines/mch_123:resume", ); expect(received?.headers.get("if-match")).toBe("etag-1"); }); + test("order-drafts select-workspace sends a literal custom verb suffix", async () => { + let received: Request | undefined; + await expect( + runGenerated( + "orderDrafts.selectWorkspace", + ["--input", "-"], + JSON.stringify({ + path: { id: "odft:123" }, + headers: { "if-match": "0" }, + body: { kind: "existing", workspace_id: "ws_123" }, + }), + (input, init) => { + received = new Request(input, init); + return Promise.resolve( + Response.json( + { + success: false, + errors: [{ code: 5, message: "Order draft not found." }], + result: {}, + }, + { status: 404 }, + ), + ); + }, + ), + ).rejects.toMatchObject({ reason: "api", status: 404 }); + + expect(received?.method).toBe("POST"); + expect(received?.url).toBe( + "https://api.akua.dev/v1/order_drafts/odft%3A123:selectWorkspace", + ); + }); + + test("clusters proxy-kube preserves wildcard path separators", async () => { + let received: Request | undefined; + const result = await runGenerated( + "clusters.proxyKube", + ["--input", "-"], + JSON.stringify({ + path: { id: "clu:123", path: "api/v1/nodes" }, + }), + (input, init) => { + received = new Request(input, init); + return Promise.resolve(new Response(null, { status: 200 })); + }, + ); + + expect(result.data).toBeUndefined(); + expect(received?.url).toBe( + "https://api.akua.dev/v1/clusters/clu%3A123/kube_proxy/api/v1/nodes", + ); + }); + test("rejects malformed and excess input before transport", async () => { let requests = 0; const transport = () => {