Documentation
¶
Index ¶
- func APIAuth(srv *server.Server) func(http.Handler) http.Handler
- func AddAppTag(srv *server.Server) http.HandlerFunc
- func AppIDFromContext(ctx context.Context) string
- func AppLogs(srv *server.Server) http.HandlerFunc
- func CatalogHandler(srv *server.Server) http.HandlerFunc
- func CheckIDP(ctx context.Context, srv *server.Server) error
- func CreateApp(srv *server.Server) http.HandlerFunc
- func CreateTag(srv *server.Server) http.HandlerFunc
- func CreateToken(srv *server.Server) http.HandlerFunc
- func DeleteApp(srv *server.Server) http.HandlerFunc
- func DeleteTag(srv *server.Server) http.HandlerFunc
- func DisableApp(srv *server.Server) http.HandlerFunc
- func EnableApp(srv *server.Server) http.HandlerFunc
- func EnrollCredential(srv *server.Server) http.HandlerFunc
- func ExchangeBootstrapToken(srv *server.Server) http.HandlerFunc
- func ExchangeVaultCredential(srv *server.Server) http.HandlerFunc
- func GetApp(srv *server.Server) http.HandlerFunc
- func GetAppRuntime(srv *server.Server) http.HandlerFunc
- func GetCurrentUser(srv *server.Server) http.HandlerFunc
- func GetSystemChecks(srv *server.Server) http.HandlerFunc
- func GetTaskStatus(srv *server.Server) http.HandlerFunc
- func GetUser(srv *server.Server) http.HandlerFunc
- func GrantAccess(srv *server.Server) http.HandlerFunc
- func HardDeleteApp(srv *server.Server, purge bool, w http.ResponseWriter, r *http.Request, ...)
- func ListAccess(srv *server.Server) http.HandlerFunc
- func ListAppSessions(srv *server.Server) http.HandlerFunc
- func ListAppTags(srv *server.Server) http.HandlerFunc
- func ListApps(srv *server.Server) http.HandlerFunc
- func ListAppsV2(srv *server.Server) http.HandlerFunc
- func ListBundles(srv *server.Server) http.HandlerFunc
- func ListDeployments(srv *server.Server) http.HandlerFunc
- func ListTags(srv *server.Server) http.HandlerFunc
- func ListTokens(srv *server.Server) http.HandlerFunc
- func ListUsers(srv *server.Server) http.HandlerFunc
- func NewManagementRouter(srv *server.Server) http.Handler
- func NewRouter(srv *server.Server, startBG func(), orch *orchestrator.Orchestrator, ...) http.Handler
- func PostPackages(srv *server.Server) http.HandlerFunc
- func PostRefresh(srv *server.Server) http.HandlerFunc
- func PostRefreshRollback(srv *server.Server) http.HandlerFunc
- func RemoveAppTag(srv *server.Server) http.HandlerFunc
- func RenameTag(srv *server.Server) http.HandlerFunc
- func RestoreApp(srv *server.Server) http.HandlerFunc
- func RevokeAccess(srv *server.Server) http.HandlerFunc
- func RevokeAllTokens(srv *server.Server) http.HandlerFunc
- func RevokeToken(srv *server.Server) http.HandlerFunc
- func RollbackApp(srv *server.Server) http.HandlerFunc
- func RunSystemChecks(srv *server.Server) http.HandlerFunc
- func StartApp(srv *server.Server) http.HandlerFunc
- func StopApp(srv *server.Server) http.HandlerFunc
- func TaskLogs(srv *server.Server) http.HandlerFunc
- func UpdateApp(srv *server.Server) http.HandlerFunc
- func UpdateUser(srv *server.Server) http.HandlerFunc
- func UploadBundle(srv *server.Server) http.HandlerFunc
- func UserAuth(srv *server.Server) func(http.Handler) http.Handler
- func WorkerAuth(signingKey *auth.SigningKey) func(http.Handler) http.Handler
- func WorkerIDFromContext(ctx context.Context) string
- type AppResponse
Constants ¶
This section is empty.
Variables ¶
This section is empty.
Functions ¶
func APIAuth ¶ added in v0.0.2
APIAuth returns a chi middleware that authenticates control-plane requests.
Authentication sources tried in order:
- Session cookie (OIDC session)
- PAT (Authorization: Bearer by_...)
- Reject (401)
func AddAppTag ¶ added in v0.0.2
func AddAppTag(srv *server.Server) http.HandlerFunc
AddAppTag attaches a tag to an app. Requires owner/collaborator/admin.
@Summary Add tag to app
@Description Attach a tag to an app. Requires owner, collaborator, or admin role.
@Tags tags
@Accept json
@Param id path string true "App ID (UUID) or name"
@Param body body addAppTagRequest true "Tag to attach"
@Success 204 "Tag attached"
@Failure 400 {object} errorResponse
@Failure 404 {object} errorResponse
@Failure 500 {object} errorResponse
@Security BearerAuth
@Router /apps/{id}/tags [post]
func AppIDFromContext ¶ added in v0.0.3
AppIDFromContext extracts the app ID set by WorkerAuth middleware.
func AppLogs ¶
func AppLogs(srv *server.Server) http.HandlerFunc
AppLogs streams logs from the LogStore for a specific worker.
@Summary Stream app logs
@Description Stream worker logs for an app. Returns buffered output immediately; streams live lines unless stream=false.
@Tags apps
@Produce plain
@Param id path string true "App ID (UUID) or name"
@Param worker_id query string true "Worker ID"
@Param stream query string false "Set to 'false' to return buffered logs only"
@Success 200 "Log output (text/plain, chunked)"
@Failure 400 {object} errorResponse
@Failure 404 {object} errorResponse
@Security BearerAuth
@Router /apps/{id}/logs [get]
func CatalogHandler ¶ added in v0.0.2
func CatalogHandler(srv *server.Server) http.HandlerFunc
CatalogHandler returns GET /api/v1/catalog — a paginated, RBAC-filtered listing of apps with metadata, tags, and search/filter support.
@Summary List catalog
@Description Paginated, RBAC-filtered app listing with tags and search. Deprecated — use GET /apps with search/tag params.
@Tags catalog
@Produce json
@Param search query string false "Search by name/title"
@Param tag query string false "Filter by tag name"
@Param page query int false "Page number" default(1)
@Param per_page query int false "Items per page (1-100)" default(20)
@Success 200 {object} catalogResponse
@Failure 500 {object} errorResponse
@Security BearerAuth
@Deprecated
@Router /catalog [get]
func CreateApp ¶
func CreateApp(srv *server.Server) http.HandlerFunc
CreateApp creates a new application.
@Summary Create app
@Description Create a new application owned by the caller.
@Tags apps
@Accept json
@Produce json
@Param body body createAppRequest true "App name"
@Success 201 {object} AppResponse
@Failure 400 {object} errorResponse
@Failure 403 {object} errorResponse
@Failure 409 {object} errorResponse
@Failure 500 {object} errorResponse
@Security BearerAuth
@Router /apps [post]
func CreateTag ¶ added in v0.0.2
func CreateTag(srv *server.Server) http.HandlerFunc
CreateTag creates a new tag (admin only).
@Summary Create tag
@Description Create a new tag. Admin only. Name must be a lowercase slug.
@Tags tags
@Accept json
@Produce json
@Param body body createTagRequest true "Tag name"
@Success 201 {object} tagResponse
@Failure 400 {object} errorResponse
@Failure 404 {object} errorResponse
@Failure 409 {object} errorResponse
@Failure 500 {object} errorResponse
@Security BearerAuth
@Router /tags [post]
func CreateToken ¶ added in v0.0.2
func CreateToken(srv *server.Server) http.HandlerFunc
CreateToken handles POST /api/v1/users/me/tokens — create a new PAT. Session-only: PATs cannot create other PATs.
@Summary Create personal access token
@Description Create a new PAT. Can only be called via browser session (not via another PAT). The token value is returned only once.
@Tags tokens
@Accept json
@Produce json
@Param body body createTokenRequest true "Token name and optional expiry"
@Success 201 {object} createTokenResponse
@Failure 400 {object} errorResponse
@Failure 401 {object} errorResponse
@Failure 403 {object} errorResponse
@Failure 500 {object} errorResponse
@Security BearerAuth
@Router /users/me/tokens [post]
func DeleteApp ¶
func DeleteApp(srv *server.Server) http.HandlerFunc
DeleteApp soft-deletes an application (or hard-deletes with ?purge=true, admin only).
@Summary Delete app
@Description Soft-delete an app, stopping all workers. Use ?purge=true for permanent deletion (admin only, app must be soft-deleted first).
@Tags apps
@Param id path string true "App ID (UUID) or name"
@Param purge query bool false "Permanently delete (admin only)"
@Success 204 "Deleted"
@Failure 403 {object} errorResponse
@Failure 404 {object} errorResponse
@Failure 409 {object} errorResponse
@Failure 500 {object} errorResponse
@Security BearerAuth
@Router /apps/{id} [delete]
func DeleteTag ¶ added in v0.0.2
func DeleteTag(srv *server.Server) http.HandlerFunc
DeleteTag deletes a tag by ID (admin only). Cascades to app_tags.
@Summary Delete tag
@Description Delete a tag. Admin only. Cascades to all app-tag associations.
@Tags tags
@Param tagID path string true "Tag ID"
@Success 204 "Deleted"
@Failure 404 {object} errorResponse
@Failure 500 {object} errorResponse
@Security BearerAuth
@Router /tags/{tagID} [delete]
func DisableApp ¶ added in v0.0.3
func DisableApp(srv *server.Server) http.HandlerFunc
DisableApp handles POST /api/v1/apps/{id}/disable.
@Summary Disable app
@Description Disable an app, draining active sessions and stopping all workers.
@Tags apps
@Produce json
@Param id path string true "App ID (UUID) or name"
@Success 200 {object} appResponseV2JSON
@Failure 404 {object} errorResponse
@Failure 500 {object} errorResponse
@Security BearerAuth
@Router /apps/{id}/disable [post]
func EnableApp ¶ added in v0.0.3
func EnableApp(srv *server.Server) http.HandlerFunc
EnableApp handles POST /api/v1/apps/{id}/enable.
@Summary Enable app
@Description Enable an app, allowing it to accept traffic and start workers.
@Tags apps
@Produce json
@Param id path string true "App ID (UUID) or name"
@Success 200 {object} appResponseV2JSON
@Failure 404 {object} errorResponse
@Failure 500 {object} errorResponse
@Security BearerAuth
@Router /apps/{id}/enable [post]
func EnrollCredential ¶ added in v0.0.2
func EnrollCredential(srv *server.Server) http.HandlerFunc
EnrollCredential handles POST /api/v1/users/me/credentials/{service}. Stores a user's credential in OpenBao's KV v2 store.
@Summary Enroll credential
@Description Store a credential (API key) for an external service in the vault.
@Tags credentials
@Accept json
@Param service path string true "Service name (alphanumeric, hyphens, underscores)"
@Success 204 "Credential stored"
@Failure 400 {object} errorResponse
@Failure 401 {object} errorResponse
@Failure 500 {object} errorResponse
@Failure 503 {object} errorResponse
@Security BearerAuth
@Router /users/me/credentials/{service} [post]
func ExchangeBootstrapToken ¶ added in v0.0.3
func ExchangeBootstrapToken(srv *server.Server) http.HandlerFunc
ExchangeBootstrapToken handles POST /api/v1/bootstrap.
Exchanges a one-time bootstrap token for a real PAT. The bootstrap token is burned after the first successful exchange.
func ExchangeVaultCredential ¶ added in v0.0.2
func ExchangeVaultCredential(srv *server.Server) http.HandlerFunc
ExchangeVaultCredential handles POST /api/v1/credentials/vault. Accepts a session reference token (as Bearer auth), validates it, and returns a scoped OpenBao token.
This endpoint does NOT use the standard API bearer token auth. The session reference token is its own authentication — it proves the caller was routed through the proxy to a specific worker.
@Summary Exchange vault credential
@Description Exchange a proxy session reference token for a scoped OpenBao vault token. Used internally by workers.
@Tags credentials
@Produce json
@Success 200 {object} vaultExchangeResponse
@Failure 401 {object} errorResponse
@Failure 502 {object} errorResponse
@Failure 503 {object} errorResponse
@Router /credentials/vault [post]
func GetApp ¶
func GetApp(srv *server.Server) http.HandlerFunc
GetApp returns a single application by ID or name.
@Summary Get app
@Description Get a single application by UUID or name. Returns 404 if not found or caller has no access.
@Tags apps
@Produce json
@Param id path string true "App ID (UUID) or name"
@Success 200 {object} appResponseV2JSON
@Failure 404 {object} errorResponse
@Failure 500 {object} errorResponse
@Security BearerAuth
@Router /apps/{id} [get]
func GetAppRuntime ¶ added in v0.0.3
func GetAppRuntime(srv *server.Server) http.HandlerFunc
GetAppRuntime returns live operational data for an app (collaborator+).
@Summary Get app runtime
@Description Returns live workers, sessions, container stats, and activity metrics for an app.
@Tags apps
@Produce json
@Param id path string true "App ID (UUID) or name"
@Success 200 {object} runtimeResponse
@Failure 404 {object} errorResponse
@Failure 500 {object} errorResponse
@Security BearerAuth
@Router /apps/{id}/runtime [get]
func GetCurrentUser ¶ added in v0.0.3
func GetCurrentUser(srv *server.Server) http.HandlerFunc
GetCurrentUser returns GET /api/v1/users/me — caller's own profile.
@Summary Get current user
@Description Returns the authenticated caller's profile (sub, email, name, role).
@Tags users
@Produce json
@Success 200 {object} currentUserResponse
@Failure 401 {object} errorResponse
@Failure 500 {object} errorResponse
@Security BearerAuth
@Router /users/me [get]
func GetSystemChecks ¶ added in v0.0.3
func GetSystemChecks(srv *server.Server) http.HandlerFunc
GetSystemChecks returns the latest cached system check report.
@Summary Get system check report
@Description Returns the latest cached system check report. Admin only.
@Tags system
@Produce json
@Success 200 {object} preflight.Report
@Failure 403 {object} errorResponse
@Router /api/v1/system/checks [get]
func GetTaskStatus ¶
func GetTaskStatus(srv *server.Server) http.HandlerFunc
GetTaskStatus returns the status of a background task.
@Summary Get task status
@Description Returns the current status (running, completed, failed) of a background task.
@Tags tasks
@Produce json
@Param taskID path string true "Task ID"
@Success 200 {object} taskStatusResponse
@Failure 404 {object} errorResponse
@Security BearerAuth
@Router /tasks/{taskID} [get]
func GetUser ¶ added in v0.0.2
func GetUser(srv *server.Server) http.HandlerFunc
GetUser handles GET /api/v1/users/{sub} — get a single user.
@Summary Get user
@Description Get a single user by sub. Admin only.
@Tags users
@Produce json
@Param sub path string true "User sub (OIDC subject)"
@Success 200 {object} db.UserRow
@Failure 403 {object} errorResponse
@Failure 404 {object} errorResponse
@Failure 500 {object} errorResponse
@Security BearerAuth
@Router /users/{sub} [get]
func GrantAccess ¶ added in v0.0.2
func GrantAccess(srv *server.Server) http.HandlerFunc
GrantAccess grants access to an app for a user.
@Summary Grant access
@Description Grant a user viewer or collaborator access to an app. Requires owner or admin role.
@Tags access
@Accept json
@Param id path string true "App ID (UUID) or name"
@Param body body grantRequest true "Access grant"
@Success 204 "Access granted"
@Failure 400 {object} errorResponse
@Failure 404 {object} errorResponse
@Failure 500 {object} errorResponse
@Security BearerAuth
@Router /apps/{id}/access [post]
func HardDeleteApp ¶ added in v0.0.3
func HardDeleteApp(srv *server.Server, purge bool, w http.ResponseWriter, r *http.Request, caller *auth.CallerIdentity, id string)
HardDeleteApp handles DELETE /api/v1/apps/{id}?purge=true — admin-only permanent deletion.
func ListAccess ¶ added in v0.0.2
func ListAccess(srv *server.Server) http.HandlerFunc
ListAccess lists all access grants for an app.
@Summary List access grants
@Description List all ACL entries for an app. Requires owner or admin role.
@Tags access
@Produce json
@Param id path string true "App ID (UUID) or name"
@Success 200 {array} accessGrantResponse
@Failure 404 {object} errorResponse
@Failure 500 {object} errorResponse
@Security BearerAuth
@Router /apps/{id}/access [get]
func ListAppSessions ¶ added in v0.0.3
func ListAppSessions(srv *server.Server) http.HandlerFunc
ListAppSessions returns GET /api/v1/apps/{id}/sessions — list sessions for an app.
@Summary List app sessions
@Description List sessions for an app. Supports filtering by user and status.
@Tags apps
@Produce json
@Param id path string true "App ID (UUID) or name"
@Param user query string false "Filter by user sub"
@Param status query string false "Filter by status (active, ended)"
@Param limit query int false "Max results (1-200)" default(50)
@Success 200 {object} sessionListResponse
@Failure 404 {object} errorResponse
@Failure 500 {object} errorResponse
@Security BearerAuth
@Router /apps/{id}/sessions [get]
func ListAppTags ¶ added in v0.0.3
func ListAppTags(srv *server.Server) http.HandlerFunc
ListAppTags returns GET /api/v1/apps/{id}/tags — list tags for an app.
@Summary List app tags
@Description List all tags attached to an app.
@Tags tags
@Produce json
@Param id path string true "App ID (UUID) or name"
@Success 200 {object} appTagListResponse
@Failure 404 {object} errorResponse
@Failure 500 {object} errorResponse
@Security BearerAuth
@Router /apps/{id}/tags [get]
func ListAppsV2 ¶ added in v0.0.3
func ListAppsV2(srv *server.Server) http.HandlerFunc
ListAppsV2 handles GET /api/v1/apps — consolidated with catalog, paginated.
@Summary List apps
@Description List apps with RBAC filtering, search, tag filter, and pagination. Use ?deleted=true for soft-deleted apps (admin only).
@Tags apps
@Produce json
@Param search query string false "Search by name/title"
@Param tag query string false "Filter by tag name"
@Param deleted query bool false "Show soft-deleted apps (admin only)"
@Param page query int false "Page number" default(1)
@Param per_page query int false "Items per page (1-100)" default(25)
@Success 200 {object} appListResponse
@Failure 403 {object} errorResponse
@Failure 500 {object} errorResponse
@Security BearerAuth
@Router /apps [get]
func ListBundles ¶
func ListBundles(srv *server.Server) http.HandlerFunc
ListBundles lists all bundles for an app.
@Summary List bundles
@Description List all bundles for an app, ordered by upload time.
@Tags bundles
@Produce json
@Param id path string true "App ID (UUID) or name"
@Success 200 {object} bundleListResponse
@Failure 404 {object} errorResponse
@Failure 500 {object} errorResponse
@Security BearerAuth
@Router /apps/{id}/bundles [get]
func ListDeployments ¶ added in v0.0.3
func ListDeployments(srv *server.Server) http.HandlerFunc
ListDeployments returns GET /api/v1/deployments — cross-app deployment listing.
@Summary List deployments
@Description List bundle deployments across all apps. Supports search, status filter, and pagination.
@Tags deployments
@Produce json
@Param search query string false "Search by app name"
@Param status query string false "Filter by status (e.g. ready, pending, failed)"
@Param page query int false "Page number" default(1)
@Param per_page query int false "Items per page (1-100)" default(25)
@Success 200 {object} deploymentsResponse
@Failure 403 {object} errorResponse
@Failure 500 {object} errorResponse
@Security BearerAuth
@Router /deployments [get]
func ListTags ¶ added in v0.0.2
func ListTags(srv *server.Server) http.HandlerFunc
ListTags returns all tags, sorted by name.
@Summary List tags
@Description List all tags, sorted alphabetically.
@Tags tags
@Produce json
@Success 200 {array} tagResponse
@Failure 500 {object} errorResponse
@Security BearerAuth
@Router /tags [get]
func ListTokens ¶ added in v0.0.2
func ListTokens(srv *server.Server) http.HandlerFunc
ListTokens handles GET /api/v1/users/me/tokens — list caller's PATs.
@Summary List personal access tokens
@Description List all PATs for the authenticated user.
@Tags tokens
@Produce json
@Success 200 {array} db.PATRow
@Failure 401 {object} errorResponse
@Failure 500 {object} errorResponse
@Security BearerAuth
@Router /users/me/tokens [get]
func ListUsers ¶ added in v0.0.2
func ListUsers(srv *server.Server) http.HandlerFunc
ListUsers handles GET /api/v1/users — list all users.
@Summary List users
@Description List all users. Admin only.
@Tags users
@Produce json
@Success 200 {array} db.UserRow
@Failure 403 {object} errorResponse
@Failure 500 {object} errorResponse
@Security BearerAuth
@Router /users [get]
func NewManagementRouter ¶ added in v0.0.2
NewManagementRouter creates the HTTP handler for the management listener. It serves /healthz, /readyz, and /metrics without authentication. This listener is intended to bind to an internal-only address.
func NewRouter ¶
func NewRouter(srv *server.Server, startBG func(), orch *orchestrator.Orchestrator, bgCtx context.Context) http.Handler
func PostPackages ¶ added in v0.0.3
func PostPackages(srv *server.Server) http.HandlerFunc
PostPackages handles runtime package installation requests from workers.
func PostRefresh ¶ added in v0.0.3
func PostRefresh(srv *server.Server) http.HandlerFunc
PostRefresh starts a dependency refresh for an unpinned deployment.
@Summary Refresh dependencies
@Description Start a background dependency refresh for the active bundle. Fails if the bundle was deployed with pinned dependencies.
@Tags refresh
@Produce json
@Param id path string true "App ID (UUID) or name"
@Success 202 {object} asyncTaskResponse
@Failure 404 {object} errorResponse
@Failure 409 {object} errorResponse
@Failure 500 {object} errorResponse
@Security BearerAuth
@Router /apps/{id}/refresh [post]
func PostRefreshRollback ¶ added in v0.0.3
func PostRefreshRollback(srv *server.Server) http.HandlerFunc
PostRefreshRollback rolls back to a previous refresh or the original build.
@Summary Rollback refresh
@Description Roll back to the previous refresh or the original build (?target=build). Starts a background task.
@Tags refresh
@Produce json
@Param id path string true "App ID (UUID) or name"
@Param target query string false "Rollback target: 'build' for original deploy, omit for previous refresh"
@Success 202 {object} asyncTaskResponse
@Failure 404 {object} errorResponse
@Failure 409 {object} errorResponse
@Failure 500 {object} errorResponse
@Security BearerAuth
@Router /apps/{id}/refresh/rollback [post]
func RemoveAppTag ¶ added in v0.0.2
func RemoveAppTag(srv *server.Server) http.HandlerFunc
RemoveAppTag detaches a tag from an app. Requires owner/collaborator/admin.
@Summary Remove tag from app
@Description Detach a tag from an app. Requires owner, collaborator, or admin role.
@Tags tags
@Param id path string true "App ID (UUID) or name"
@Param tagID path string true "Tag ID"
@Success 204 "Tag removed"
@Failure 404 {object} errorResponse
@Failure 500 {object} errorResponse
@Security BearerAuth
@Router /apps/{id}/tags/{tagID} [delete]
func RenameTag ¶ added in v0.0.3
func RenameTag(srv *server.Server) http.HandlerFunc
RenameTag updates a tag's name. Requires admin/publisher.
@Summary Rename tag
@Description Update a tag's name. Requires admin or publisher role.
@Tags tags
@Accept json
@Param tagID path string true "Tag ID"
@Param body body renameTagRequest true "New tag name"
@Success 200 {object} tagResponse
@Failure 400 {object} errorResponse
@Failure 404 {object} errorResponse
@Failure 409 {object} errorResponse
@Failure 500 {object} errorResponse
@Security BearerAuth
@Router /tags/{tagID} [patch]
func RestoreApp ¶ added in v0.0.3
func RestoreApp(srv *server.Server) http.HandlerFunc
RestoreApp restores a soft-deleted application.
@Summary Restore deleted app
@Description Restore a soft-deleted app. Only admins and the original owner can restore.
@Tags apps
@Produce json
@Param id path string true "App ID (UUID) or name"
@Success 200 {object} AppResponse
@Failure 404 {object} errorResponse
@Failure 409 {object} errorResponse
@Failure 500 {object} errorResponse
@Security BearerAuth
@Router /apps/{id}/restore [post]
func RevokeAccess ¶ added in v0.0.2
func RevokeAccess(srv *server.Server) http.HandlerFunc
RevokeAccess revokes a user's access to an app.
@Summary Revoke access
@Description Remove a specific access grant from an app. Requires owner or admin role.
@Tags access
@Param id path string true "App ID (UUID) or name"
@Param kind path string true "Grant kind (e.g. 'user')"
@Param principal path string true "User sub"
@Success 204 "Access revoked"
@Failure 404 {object} errorResponse
@Failure 500 {object} errorResponse
@Security BearerAuth
@Router /apps/{id}/access/{kind}/{principal} [delete]
func RevokeAllTokens ¶ added in v0.0.2
func RevokeAllTokens(srv *server.Server) http.HandlerFunc
RevokeAllTokens handles DELETE /api/v1/users/me/tokens — revoke all PATs.
@Summary Revoke all tokens
@Description Revoke all personal access tokens for the authenticated user.
@Tags tokens
@Success 204 "All tokens revoked"
@Failure 401 {object} errorResponse
@Failure 500 {object} errorResponse
@Security BearerAuth
@Router /users/me/tokens [delete]
func RevokeToken ¶ added in v0.0.2
func RevokeToken(srv *server.Server) http.HandlerFunc
RevokeToken handles DELETE /api/v1/users/me/tokens/{tokenID} — revoke a single PAT.
@Summary Revoke token
@Description Revoke a single personal access token by ID.
@Tags tokens
@Param tokenID path string true "Token ID"
@Success 204 "Token revoked"
@Failure 401 {object} errorResponse
@Failure 404 {object} errorResponse
@Failure 500 {object} errorResponse
@Security BearerAuth
@Router /users/me/tokens/{tokenID} [delete]
func RollbackApp ¶ added in v0.0.3
func RollbackApp(srv *server.Server) http.HandlerFunc
RollbackApp switches an app to a previous bundle.
@Summary Rollback app bundle
@Description Switch an app's active bundle to a previous one. Stops running workers and activates the target bundle.
@Tags apps
@Accept json
@Produce json
@Param id path string true "App ID (UUID) or name"
@Param body body rollbackRequest true "Target bundle"
@Success 200 {object} AppResponse
@Failure 400 {object} errorResponse
@Failure 404 {object} errorResponse
@Failure 500 {object} errorResponse
@Security BearerAuth
@Router /apps/{id}/rollback [post]
func RunSystemChecks ¶ added in v0.0.3
func RunSystemChecks(srv *server.Server) http.HandlerFunc
RunSystemChecks triggers a new dynamic check run and returns the full report.
@Summary Run system checks
@Description Triggers a new dynamic check run and returns the combined report. Admin only.
@Tags system
@Produce json
@Success 200 {object} preflight.Report
@Failure 403 {object} errorResponse
@Router /api/v1/system/checks/run [post]
func TaskLogs ¶
func TaskLogs(srv *server.Server) http.HandlerFunc
TaskLogs streams the log output of a background task.
@Summary Stream task logs
@Description Stream log output for a background task (e.g. bundle restore). Returns buffered output, then follows live lines until task completes.
@Tags tasks
@Produce plain
@Param taskID path string true "Task ID"
@Success 200 "Log output (text/plain, chunked)"
@Failure 404 {object} errorResponse
@Security BearerAuth
@Router /tasks/{taskID}/logs [get]
func UpdateApp ¶
func UpdateApp(srv *server.Server) http.HandlerFunc
UpdateApp updates an application's configuration.
@Summary Update app
@Description Update an application's settings. All fields are optional. Changing access_type requires owner/admin.
@Tags apps
@Accept json
@Produce json
@Param id path string true "App ID (UUID) or name"
@Param body body updateAppRequest true "Fields to update"
@Success 200 {object} appResponseV2JSON
@Failure 400 {object} errorResponse
@Failure 404 {object} errorResponse
@Failure 500 {object} errorResponse
@Security BearerAuth
@Router /apps/{id} [patch]
func UpdateUser ¶ added in v0.0.2
func UpdateUser(srv *server.Server) http.HandlerFunc
UpdateUser handles PATCH /api/v1/users/{sub} — update a user's role or active status.
@Summary Update user
@Description Update a user's role or active status. Admin only. Cannot modify own account.
@Tags users
@Accept json
@Produce json
@Param sub path string true "User sub (OIDC subject)"
@Param body body updateUserRequest true "Fields to update"
@Success 200 {object} db.UserRow
@Failure 400 {object} errorResponse
@Failure 403 {object} errorResponse
@Failure 404 {object} errorResponse
@Failure 500 {object} errorResponse
@Security BearerAuth
@Router /users/{sub} [patch]
func UploadBundle ¶
func UploadBundle(srv *server.Server) http.HandlerFunc
UploadBundle uploads a new bundle archive for an app.
@Summary Upload bundle
@Description Upload a tar.gz bundle archive. Triggers async restore (package installation). Track progress via the returned task_id.
@Tags bundles
@Accept application/gzip
@Produce json
@Param id path string true "App ID (UUID) or name"
@Success 202 {object} uploadBundleResponse
@Failure 400 {object} errorResponse
@Failure 404 {object} errorResponse
@Failure 413 {object} errorResponse
@Failure 500 {object} errorResponse
@Security BearerAuth
@Router /apps/{id}/bundles [post]
func UserAuth ¶ added in v0.0.2
UserAuth returns a middleware that authenticates via session cookie or PAT bearer token. Produces a CallerIdentity in context either way. Used for /api/v1/users/me/ routes where both app-plane and control-plane users need access.
func WorkerAuth ¶ added in v0.0.3
WorkerAuth validates the worker HMAC token and injects worker/app IDs into the request context.
func WorkerIDFromContext ¶ added in v0.0.3
WorkerIDFromContext extracts the worker ID set by WorkerAuth middleware.
Types ¶
type AppResponse ¶
type AppResponse struct {
ID string `json:"id"`
Name string `json:"name"`
Owner string `json:"owner"`
AccessType string `json:"access_type"`
ActiveBundle *string `json:"active_bundle"`
MaxWorkersPerApp *int `json:"max_workers_per_app"`
MaxSessionsPerWorker int `json:"max_sessions_per_worker"`
MemoryLimit *string `json:"memory_limit"`
CPULimit *float64 `json:"cpu_limit"`
Title *string `json:"title"`
Description *string `json:"description"`
PreWarmedSessions int `json:"pre_warmed_sessions"`
CreatedAt string `json:"created_at"`
UpdatedAt string `json:"updated_at"`
DeletedAt *string `json:"deleted_at,omitempty"`
Status string `json:"status"`
Workers []string `json:"workers"`
}
AppResponse wraps an AppRow with a derived runtime status.