apiclient

package
v0.7.0 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Oct 20, 2026 License: Apache-2.0 Imports: 36 Imported by: 0

Documentation

Overview

Package apiclient is the one HTTP client implementation for the control plane's versioned API (internal/api, mounted at /api/v1). cmd/levelrail-cli and cmd/levelrail-mcp both import this package rather than each rolling their own: they are exactly the external callers the documented wire contract in internal/api exists for (see internal/store/tokens.go's own doc comment on APIToken), so neither gets special internal access, only this same bearer-token HTTP client. Wire-shape request/response types live in types.go; this file is the Client type itself and its methods.

Index

Constants

View Source
const (
	SleepFixEnablePortWake   = "enable_port_wake"
	SleepFixRemovePinnedPort = "remove_pinned_port"
	SleepFixSetHoldRequests  = "set_hold_requests"
	SleepFixAttachDomain     = "attach_domain"
)

Fix kinds a SleepFix can carry.

View Source
const (
	DeviceLoginWaiting  = "waiting"
	DeviceLoginExpired  = "expired"
	DeviceLoginDenied   = "denied"
	DeviceLoginApproved = "approved"
)

Device login states as GET /api/v1/auth/device/activity reports them.

View Source
const (
	EnvAPIToken = "APP_API_TOKEN" //nolint:gosec // this is the name of an env var, not a credential value
	EnvAPIURL   = "APP_API_URL"
	EnvProfile  = "APP_PROFILE"
)

EnvAPIToken, EnvAPIURL, and EnvProfile are this project's established APP_*-env-var-prefix convention (see internal/brand's own envPrefix, and cmd/levelrail/main.go's APP_DATA_DIR/APP_HTTP_ADDR/etc.), not a product-name-specific prefix: renaming the product later must not require renaming these. Every caller of this package (the CLI, the MCP server) uses these same names, so a token or URL set for one is already set for the other.

View Source
const (
	// EnvLogMaxBytes names the env var that caps a compact log query's output.
	EnvLogMaxBytes = "APP_MCP_LOG_MAX_BYTES"
	// DefaultLogMaxBytes is the output cap when EnvLogMaxBytes is unset.
	DefaultLogMaxBytes = 8 << 10
	// DefaultLogMaxLines is the line cap when the caller sets none.
	DefaultLogMaxLines = 100
	// DefaultLogWindow is the lookback when neither since nor from is set.
	DefaultLogWindow = time.Hour
)
View Source
const (
	ScopeTeamHeader    = "X-Scope-Team"
	ScopeProjectHeader = "X-Scope-Project"
	EnvTeam            = "APP_TEAM"
	EnvProject         = "APP_PROJECT"
)

Scope headers narrow what the control plane shows to one team or project. They can only narrow: the server never widens access from them.

View Source
const (
	OAuthProviderGoogle      = "google"
	OAuthProviderGitHub      = "github"
	OAuthProviderOIDC        = "oidc"
	OAuthProviderMicrosoft   = "microsoft"
	OAuthProviderGitLab      = "gitlab"
	OAuthProviderBitbucket   = "bitbucket"
	OAuthProviderDiscord     = "discord"
	OAuthProviderSlack       = "slack"
	OAuthProviderLinkedIn    = "linkedin"
	OAuthProviderTwitch      = "twitch"
	OAuthProviderFacebook    = "facebook"
	OAuthProviderLinear      = "linear"
	OAuthProviderVercel      = "vercel"
	OAuthProviderHuggingFace = "huggingface"
	OAuthProviderFigma       = "figma"
	OAuthProviderSalesforce  = "salesforce"
	OAuthProviderCodeberg    = "codeberg"
	OAuthProviderCognito     = "cognito"
	OAuthProviderDropbox     = "dropbox"
	OAuthProviderKakao       = "kakao"
	OAuthProviderPatreon     = "patreon"
)

OAuth provider names accepted by GET/PUT /api/v1/settings/oauth[/{provider}], redeclared from internal/store.OAuthProvider* rather than imported, the same reasoning as ServiceResources above.

View Source
const (
	EmailBackendSMTP = "smtp"
	EmailBackendSES  = "ses"
)

Email backends accepted by EmailSettingsResource.Backend.

View Source
const (
	DeployOutcomeInProgress = "in_progress"
	DeployOutcomeHealthy    = "healthy"
)

Deploy outcomes reported by GetDeploy.

View Source
const AgentClientHeader = "X-Agent-Client"

AgentClientHeader carries the calling MCP client's name and version to the control plane so audit entries can record it.

View Source
const CredentialsFileName = "credentials"

CredentialsFileName is the file ReadCredentialsFile reads, inside a directory named after the caller's own binary (ConfigDir below), not a hardcoded product name.

View Source
const DefaultAPIURL = "http://localhost:8080"

DefaultAPIURL is a zero-config local default, so a caller with no flag, env var, or credentials file still reaches a locally running control plane out of the box: its own defaultHTTPAddr (cmd/levelrail/main.go) is ":8080", so this is that same port on loopback.

View Source
const DefaultProfile = "default"

DefaultProfile is the section ResolveProfile falls back to when neither a --profile flag nor APP_PROFILE is set, and the section an old, pre-profile flat credentials file (no "[section]" headers at all) is read as, for backward compatibility with every credentials file written before profile support existed.

View Source
const MaskedEnvValue = "••••••••"

MaskedEnvValue is what a sensitive env value reads back as.

View Source
const StandaloneScope = "_standalone"

StandaloneScope is the {name} the per-domain endpoints take for a standalone domain, e.g. /api/v1/apps/_standalone/domains/x/waf.

Variables

View Source
var ErrFixStale = errors.New("app changed since the diagnosis, run it again")

ErrFixStale means the app no longer holds the value the fix was computed from, so applying it could overwrite a newer edit.

Functions

func ConfigDir

func ConfigDir(prog string) (string, error)

ConfigDir is "~/.config/<prog>", prog being the caller's own binary basename (filepath.Base(os.Args[0])), never a hardcoded product name: this makes the credentials file location follow the binary automatically if it's ever renamed, the same rebrandability property required everywhere else in this codebase.

func DeployWindow added in v0.2.0

func DeployWindow(attempts []DeployAttemptResource, id string, now time.Time) (from, to time.Time, err error)

DeployWindow returns the time range one deploy attempt owned: from its start to the start of the next newer attempt, or now if it is the newest.

func ExtractErrorMessage

func ExtractErrorMessage(data []byte) string

ExtractErrorMessage parses the control plane's {"error": "..."} body shape (internal/api/respond.go). A body that doesn't match that shape (a proxy's HTML error page, an empty body) falls back to the raw text so the caller still sees something, not a blank message. Exported so callers with their own hand-rolled request (outside this Client, e.g. the CLI's session-cookie authSessionClient) can reuse the same parsing rather than duplicating it.

func LogMaxBytesFromEnv added in v0.2.0

func LogMaxBytesFromEnv(lookup func(string) (string, bool)) int

LogMaxBytesFromEnv returns the byte cap from EnvLogMaxBytes, falling back to DefaultLogMaxBytes on an unset or invalid value.

func ParseLogTime added in v0.2.0

func ParseLogTime(s string, now time.Time) (time.Time, error)

ParseLogTime parses a log window bound: an RFC3339 timestamp, or a Go duration ("30m") meaning that long before now.

func PatchAppMap added in v0.2.0

func PatchAppMap(app map[string]any, changes []DiagnosisChange, inputs map[string]string) ([]string, error)

PatchAppMap applies changes to a decoded app resource (numbers as json.Number). It refuses a change whose current value differs from From.

func PathEscape

func PathEscape(s string) string

PathEscape guards against a name containing characters that would otherwise change the request's URL shape (a "/" turning one path segment into two, for instance). Server-side validation is the real authority on what a valid app name is; this only protects request construction from building a request to the wrong path. Exported for the same reuse reason as ExtractErrorMessage.

func PinProfile

func PinProfile(prog, profile string, creds Credentials, info InstanceInfo) error

PinProfile records info as the server credentials is pinned to and saves it.

func ResetServerPins

func ResetServerPins()

ResetServerPins clears the per-process pin and verification state (tests).

func ResolveAPIURL

func ResolveAPIURL(flagURL string, lookupEnv func(string) (string, bool), prog, profile string) string

ResolveAPIURL picks the base API URL by precedence: flagURL, then EnvAPIURL, then profile's section of the credentials file, then DefaultAPIURL.

func ResolveProfile

func ResolveProfile(flagProfile string, lookupEnv func(string) (string, bool)) string

ResolveProfile picks the active profile name by precedence: flagProfile, then EnvProfile, then DefaultProfile. It never returns an empty string.

func ResolveToken

func ResolveToken(flagToken string, lookupEnv func(string) (string, bool), prog, profile string) string

ResolveToken picks an API token by precedence: flagToken, then EnvAPIToken, then profile's section of the local credentials file. Returns "" (not an error) if none is set: an empty token is a valid, if unlikely to succeed, thing to send, and letting the server's own 401 be what reports "not authenticated" keeps this function from duplicating that judgment.

func SetDebugTrace added in v0.2.0

func SetDebugTrace(w io.Writer)

SetDebugTrace enables (non-nil w) or disables (nil) request tracing for every call through this package, process-wide. cmd/levelrail-cli's --debug flag calls this exactly once per invocation, always (even to disable), so no state leaks from one CLI run into the next in a process that invokes the CLI's entrypoint repeatedly, such as a test binary.

func SetScope added in v0.2.0

func SetScope(s Scope)

SetScope sets the scope every Client sends from now on.

func SetTrustHook

func SetTrustHook(fn func(TrustRequest) error)

SetTrustHook installs the first-connect confirmation (trust on first use). With no hook an unpinned profile is allowed through, as it was before pinning existed.

func SetWarnWriter

func SetWarnWriter(w io.Writer)

SetWarnWriter sets where non-fatal pin warnings go (nil discards them).

func ShortInstanceID

func ShortInstanceID(id string) string

ShortInstanceID abbreviates an instance id for display.

func TraceRequest added in v0.2.0

func TraceRequest(method, rawURL, status string, elapsed time.Duration, reqErr error)

TraceRequest writes one --debug trace line for a completed (or failed) HTTP round trip, a no-op unless SetDebugTrace enabled tracing. Exported so cmd/levelrail-cli's authSessionClient (a separate, session-cookie based client that is never a Client, see its own doc comment) can share this exact trace format and URL redaction instead of a second implementation. Never passed a header or body: this never prints an Authorization value or any other credential, in or out of debug mode.

func WithAgentClient added in v0.2.0

func WithAgentClient(ctx context.Context, name, version string) context.Context

WithAgentClient returns a context whose requests report the MCP client name and version in AgentClientHeader.

func WriteContext added in v0.2.0

func WriteContext(prog, profile string, s Scope) error

WriteContext saves a profile's team and project; an empty scope clears it.

func WriteCredentialsFile

func WriteCredentialsFile(prog, profile string, creds Credentials) error

WriteCredentialsFile writes creds under profile's section in prog's credentials file, creating ConfigDir(prog) if it doesn't exist yet, and leaving every other profile section already in the file untouched. "auth login" is this function's only caller today: it is the one command that produces a credential rather than just consuming one. 0o600 on both the directory and the file, tighter than ReadCredentialsFile's own comment on the file needing to stay hand-editable: a freshly minted API token is a live credential, not a value that should ever be group- or world-readable by default.

Types

type ACMEFailure added in v0.2.0

type ACMEFailure struct {
	Error   string `json:"error"`
	Renewal bool   `json:"renewal"`
	At      string `json:"at"`
	Reason  string `json:"reason"`
	Action  string `json:"action"`
}

ACMEFailure mirrors internal/api's acmeFailureResource.

type AIAssistantSettingsResource added in v0.2.0

type AIAssistantSettingsResource struct {
	Configured     bool         `json:"configured"`
	Active         *AIModelRef  `json:"active,omitempty"`
	Fallback       []AIModelRef `json:"fallback"`
	Limits         AILimits     `json:"limits"`
	TokenUsageMont *int64       `json:"token_usage_month,omitempty"`
}

AIAssistantSettingsResource mirrors internal/api's aiAssistantSettingsResource (internal/api/ai_settings.go): the shape of GET/PUT /api/v1/settings/ai-assistant. Keys never round-trip.

type AIChatMessageResource added in v0.2.0

type AIChatMessageResource struct {
	ID        string                   `json:"id"`
	Role      string                   `json:"role"`
	Content   string                   `json:"content"`
	ToolCalls []AIChatToolCallResource `json:"tool_calls"`
	CreatedAt time.Time                `json:"created_at"`
}

AIChatMessageResource mirrors internal/api's aiChatMessageResource.

type AIChatSSEEvent added in v0.2.0

type AIChatSSEEvent struct {
	Type           string          `json:"type"`
	Text           string          `json:"text,omitempty"`
	ConfirmationID string          `json:"confirmation_id,omitempty"`
	ToolUseID      string          `json:"tool_use_id,omitempty"`
	Name           string          `json:"name,omitempty"`
	Arguments      json.RawMessage `json:"arguments,omitempty"`
	ReadOnly       bool            `json:"read_only,omitempty"`
	Result         json.RawMessage `json:"result,omitempty"`
	IsError        bool            `json:"is_error,omitempty"`
	ActingAs       string          `json:"acting_as,omitempty"`
	Abilities      []string        `json:"abilities,omitempty"`
}

AIChatSSEEvent mirrors every shape internal/api/ai_chat.go's aiSSESink can write on the bare "data: <json>\n\n" line POST /api/v1/ai/sessions/{id}/messages and POST .../confirmations/{id} stream: Type discriminates which of the other fields are populated (text_delta -> Text, tool_call_proposed -> ConfirmationID/ToolUseID/Name/Arguments, tool_result -> ToolUseID/Name/Result/IsError, done -> no other field).

type AIChatSessionCreatedResource added in v0.2.0

type AIChatSessionCreatedResource struct {
	ID string `json:"id"`
}

AIChatSessionCreatedResource mirrors internal/api's aiChatSessionCreatedResource: POST /api/v1/ai/sessions's response.

type AIChatSessionResource added in v0.2.0

type AIChatSessionResource struct {
	ID       string                  `json:"id"`
	Messages []AIChatMessageResource `json:"messages"`
}

AIChatSessionResource mirrors internal/api's aiChatSessionResource: GET /api/v1/ai/sessions/{id}'s response, the full transcript.

type AIChatSessionSummaryResource added in v0.2.0

type AIChatSessionSummaryResource struct {
	ID        string    `json:"id"`
	CreatedAt time.Time `json:"created_at"`
	UpdatedAt time.Time `json:"updated_at"`
}

AIChatSessionSummaryResource mirrors internal/api's aiChatSessionSummaryResource: one row of GET /api/v1/ai/sessions's list response, no message content.

type AIChatToolCallResource added in v0.2.0

type AIChatToolCallResource struct {
	ID             string          `json:"id"`
	ConfirmationID string          `json:"confirmation_id,omitempty"`
	Name           string          `json:"name"`
	Arguments      json.RawMessage `json:"arguments"`
	ReadOnly       bool            `json:"read_only"`
	Status         string          `json:"status"`
	Result         json.RawMessage `json:"result,omitempty"`
	IsError        bool            `json:"is_error,omitempty"`
	ActingAs       string          `json:"acting_as,omitempty"`
	Abilities      []string        `json:"abilities,omitempty"`
}

AIChatToolCallResource mirrors store.AIChatToolCall's JSON shape, as carried on an AIChatMessageResource.

type AIChoiceRequest

type AIChoiceRequest struct {
	Active   *AIModelRef   `json:"active,omitempty"`
	Fallback *[]AIModelRef `json:"fallback,omitempty"`
}

AIChoiceRequest is PUT /api/v1/settings/ai-assistant's multi-provider body.

type AIControlResource added in v0.2.0

type AIControlResource struct {
	Mode            string   `json:"mode"`
	AllowedEnvKinds []string `json:"allowed_env_kinds"`
	EnvKinds        []string `json:"env_kinds"`
	AdminAvailable  bool     `json:"admin_available"`
	AgentTokenCount int      `json:"agent_token_count"`
	CallerIsAgent   bool     `json:"caller_is_agent"`
	UpdatedAt       string   `json:"updated_at"`
	UpdatedBy       string   `json:"updated_by"`
}

AIControlResource mirrors GET /api/v1/settings/ai-control.

type AILimits

type AILimits struct {
	MaxSteps           int   `json:"max_steps"`
	MonthlyTokenBudget int64 `json:"monthly_token_budget,omitempty"`
}

AILimits mirrors the limits object of GET /api/v1/settings/ai-assistant.

type AIModelRef

type AIModelRef struct {
	Provider string `json:"provider"`
	Model    string `json:"model"`
}

AIModelRef names one provider and model pair.

type AIModelResource

type AIModelResource struct {
	ID            string `json:"id"`
	Label         string `json:"label"`
	ContextWindow int    `json:"context_window,omitempty"`
	SupportsTools *bool  `json:"supports_tools,omitempty"`
}

AIModelResource is one entry of GET .../providers/{id}/models.

type AIProviderResource

type AIProviderResource struct {
	ID              string `json:"id"`
	Label           string `json:"label"`
	Kind            string `json:"kind"`
	DefaultBaseURL  string `json:"default_base_url"`
	BaseURLEditable bool   `json:"base_url_editable"`
	KeyURL          string `json:"key_url"`
	DefaultModel    string `json:"default_model"`
	Brand           string `json:"brand"`
	HasKey          bool   `json:"has_key"`
	BaseURL         string `json:"base_url,omitempty"`
	Status          string `json:"status"`
	StatusDetail    string `json:"status_detail,omitempty"`
	LastCheckedAt   string `json:"last_checked_at,omitempty"`
}

AIProviderResource mirrors one entry of GET .../ai-assistant/providers.

type AIProviderTestResource

type AIProviderTestResource struct {
	OK           bool   `json:"ok"`
	Status       string `json:"status"`
	StatusDetail string `json:"status_detail,omitempty"`
	LatencyMS    int64  `json:"latency_ms"`
}

AIProviderTestResource is POST .../providers/{id}/test's response.

type AIUsageDayResource

type AIUsageDayResource struct {
	Date             string `json:"date"`
	Provider         string `json:"provider"`
	Model            string `json:"model"`
	PromptTokens     int64  `json:"prompt_tokens"`
	CompletionTokens int64  `json:"completion_tokens"`
	Requests         int64  `json:"requests"`
	Errors           int64  `json:"errors"`
}

AIUsageDayResource is one (date, provider, model) row of GET /api/v1/ai/usage.

type AIUsageResource

type AIUsageResource struct {
	Days   []AIUsageDayResource `json:"days"`
	Totals struct {
		PromptTokens     int64 `json:"prompt_tokens"`
		CompletionTokens int64 `json:"completion_tokens"`
		Requests         int64 `json:"requests"`
		Errors           int64 `json:"errors"`
	} `json:"totals"`
}

AIUsageResource is GET /api/v1/ai/usage's response.

type APIError

type APIError struct {
	StatusCode int
	Message    string
	// RetryAfter is parsed from the response's Retry-After header
	// (seconds form only, the only form this control plane ever sends),
	// 0 when absent. Currently only the general per-actor rate limiter
	// (429 Too Many Requests, internal/api/api_rate_limit.go) sets it,
	// but any future response carrying the header gets the same
	// treatment for free.
	RetryAfter time.Duration
	// Code is the machine-readable reason some refusals carry, such as
	// step_up_required or step_up_code_required.
	Code string
}

APIError is returned by Client methods for a non-2xx HTTP response: a real reply from the server, as opposed to a network-level failure (connection refused, DNS, timeout), which Client methods return as a plain wrapped error instead. Callers distinguish the two with errors.As, which is what picks the CLI's exit code and lets the MCP server surface a specific tool error (e.g. a 403's "token lacks the required ability" message) rather than a generic failure.

func (*APIError) Error

func (e *APIError) Error() string

Error renders the server message, appending a retry hint when RetryAfter is set.

type AcceptTeamInviteRequest added in v0.2.0

type AcceptTeamInviteRequest struct {
	Token       string `json:"token"`
	Email       string `json:"email,omitempty"`
	DisplayName string `json:"display_name,omitempty"`
	Password    string `json:"password,omitempty"`
}

AcceptTeamInviteRequest is POST /api/v1/team-invites/accept's body.

type AccessOptions

type AccessOptions struct {
	MinMillis float64
	MinStatus int
	Path      string
	Since     string
	Limit     int
}

AccessOptions are the filters of ListAccess.

type AccessRecord

type AccessRecord struct {
	Time      time.Time `json:"time"`
	Host      string    `json:"host"`
	Method    string    `json:"method"`
	Path      string    `json:"path"`
	Status    int       `json:"status"`
	Millis    float64   `json:"duration_ms"`
	BytesIn   int64     `json:"bytes_in"`
	BytesOut  int64     `json:"bytes_out"`
	RequestID string    `json:"request_id"`
	TraceID   string    `json:"trace_id,omitempty"`
	Upstream  bool      `json:"upstream_error,omitempty"`
}

AccessRecord mirrors internal/ingress's AccessRecord.

type AccessReviewDetail

type AccessReviewDetail struct {
	AccessReviewResource
	Items []AccessReviewItem `json:"items"`
}

AccessReviewDetail is a campaign with its rows.

type AccessReviewItem

type AccessReviewItem struct {
	ID           string `json:"id"`
	Kind         string `json:"kind"`
	SubjectID    string `json:"subject_id"`
	Label        string `json:"label"`
	Role         string `json:"role"`
	Detail       string `json:"detail"`
	LastActiveAt string `json:"last_active_at"`
	Decision     string `json:"decision"`
	DecidedBy    string `json:"decided_by,omitempty"`
	AppliedAt    string `json:"applied_at,omitempty"`
	ApplyError   string `json:"apply_error,omitempty"`
}

AccessReviewItem is one reviewable subject.

type AccessReviewResource

type AccessReviewResource struct {
	ID          string `json:"id"`
	Name        string `json:"name"`
	Status      string `json:"status"`
	DueAt       string `json:"due_at"`
	Overdue     bool   `json:"overdue"`
	RepeatDays  int    `json:"repeat_days"`
	CreatedBy   string `json:"created_by"`
	CreatedAt   string `json:"created_at"`
	CompletedAt string `json:"completed_at,omitempty"`
	Total       int    `json:"total"`
	Decided     int    `json:"decided"`
	ToRevoke    int    `json:"to_revoke"`
}

AccessReviewResource mirrors an access review campaign summary.

type AccountExport

type AccountExport struct {
	ID        string    `json:"id"`
	Status    string    `json:"status"`
	SizeBytes int       `json:"size_bytes,omitempty"`
	ExpiresAt time.Time `json:"expires_at"`
}

AccountExport mirrors internal/api's accountExportResource.

type ActivityActor added in v0.2.0

type ActivityActor struct {
	Type string `json:"type"`
	Name string `json:"name,omitempty"`
}

ActivityActor mirrors internal/api's activityActor.

type ActivityEvent added in v0.2.0

type ActivityEvent struct {
	ID     string         `json:"id"`
	At     time.Time      `json:"at"`
	Kind   string         `json:"kind"`
	Title  string         `json:"title"`
	Detail string         `json:"detail,omitempty"`
	Failed bool           `json:"failed,omitempty"`
	Action string         `json:"action,omitempty"`
	Actor  ActivityActor  `json:"actor"`
	Object ActivityObject `json:"object"`
}

ActivityEvent is one domain timeline entry.

type ActivityObject added in v0.2.0

type ActivityObject struct {
	Type string `json:"type"`
	ID   string `json:"id"`
	Href string `json:"href,omitempty"`
}

ActivityObject mirrors internal/api's activityObject.

type ActivityPage added in v0.2.0

type ActivityPage struct {
	Events     []ActivityEvent `json:"events"`
	NextCursor string          `json:"next_cursor,omitempty"`
}

ActivityPage is GET /api/v1/domains/{domain}/activity's body.

type AdvisorApplyResult added in v0.2.0

type AdvisorApplyResult struct {
	FindingID       string                  `json:"finding_id"`
	Resource        resourceadvisor.Ref     `json:"resource"`
	Action          *resourceadvisor.Action `json:"action"`
	Before          AdvisorSettings         `json:"before"`
	After           AdvisorSettings         `json:"after"`
	ConfirmRequired bool                    `json:"confirm_required"`
	Applied         bool                    `json:"applied"`
	AppliedLive     bool                    `json:"applied_live"`
}

AdvisorApplyResult is POST .../findings/{id}/apply: a preview unless Applied.

type AdvisorFinding added in v0.2.0

type AdvisorFinding struct {
	resourceadvisor.Finding
	State        string `json:"state,omitempty"`
	SnoozedUntil string `json:"snoozed_until,omitempty"`
	Appliable    bool   `json:"appliable"`
	CanApply     bool   `json:"can_apply"`
}

AdvisorFinding is one finding as GET /api/v1/resource-advisor/findings returns it.

type AdvisorFindingQuery added in v0.2.0

type AdvisorFindingQuery struct {
	Resource      string
	Severity      string
	IncludeHidden bool
}

AdvisorFindingQuery filters ListAdvisorFindings; zero fields do not filter.

type AdvisorFindings added in v0.2.0

type AdvisorFindings struct {
	GeneratedAt string           `json:"generated_at"`
	Findings    []AdvisorFinding `json:"findings"`
}

AdvisorFindings is GET /api/v1/resource-advisor/findings.

type AdvisorSettings added in v0.2.0

type AdvisorSettings struct {
	MemoryBytes      int64 `json:"memory_bytes"`
	NanoCPUs         int64 `json:"nano_cpus"`
	SleepIdleMinutes int   `json:"sleep_idle_minutes,omitempty"`
}

AdvisorSettings is the part of a resource an advisor action changes.

type AdvisorSummary added in v0.2.0

type AdvisorSummary struct {
	GeneratedAt string `json:"generated_at"`
	resourceadvisor.Summary
}

AdvisorSummary is GET /api/v1/resource-advisor/summary.

type AgentVersionChange added in v0.2.0

type AgentVersionChange struct {
	NodeID      string `json:"node_id"`
	NodeName    string `json:"node_name"`
	FromVersion string `json:"from_version"`
	ToVersion   string `json:"to_version"`
	ObservedAt  string `json:"observed_at"`
}

AgentVersionChange is one observed node agent version change.

type AlertHistoryEntry added in v0.2.0

type AlertHistoryEntry struct {
	ID         string    `json:"id"`
	At         time.Time `json:"at"`
	RuleID     string    `json:"rule_id"`
	RuleName   string    `json:"rule_name"`
	RuleKind   string    `json:"rule_kind"`
	ResourceID string    `json:"resource_id,omitempty"`
	App        string    `json:"app,omitempty"`
	Node       string    `json:"node,omitempty"`
	Severity   string    `json:"severity,omitempty"`
	Event      string    `json:"event"`
	Outcome    string    `json:"outcome"`
	Detail     string    `json:"detail,omitempty"`
	SilenceID  string    `json:"silence_id,omitempty"`
	ChannelID  string    `json:"channel_id,omitempty"`
	Error      string    `json:"error,omitempty"`

	// Changes is set on fired entries when the query asked for it.
	Changes        *RecentChangesResource `json:"changes,omitempty"`
	ChangesOmitted bool                   `json:"changes_omitted,omitempty"`
}

AlertHistoryEntry mirrors internal/api's alertHistoryResource.

type AlertHistoryQuery added in v0.2.0

type AlertHistoryQuery struct {
	App            string
	RuleID         string
	Outcome        string
	Event          string
	Since          string
	Limit          int
	IncludeChanges bool
}

AlertHistoryQuery filters ListAlertHistory; zero fields are omitted. IncludeChanges asks the server to attach what changed before each firing.

type AlertLogRule added in v0.2.0

type AlertLogRule struct {
	Query           string   `json:"query,omitempty"`
	Regex           string   `json:"regex,omitempty"`
	Fields          []string `json:"fields,omitempty"`
	Level           string   `json:"level,omitempty"`
	Count           int      `json:"count,omitempty"`
	PerMinute       float64  `json:"per_minute,omitempty"`
	WindowSeconds   int      `json:"window_seconds,omitempty"`
	CooldownSeconds int      `json:"cooldown_seconds,omitempty"`
}

AlertLogRule is the match config of a log_pattern or log_level_rate rule.

type AlertRuleResource

type AlertRuleResource struct {
	ID         string `json:"id,omitempty"`
	Name       string `json:"name"`
	Kind       string `json:"kind"`
	ResourceID string `json:"resource_id,omitempty"`
	ChannelID  string `json:"channel_id,omitempty"`

	Metric      string  `json:"metric,omitempty"`
	Comparator  string  `json:"comparator,omitempty"`
	Threshold   float64 `json:"threshold"`
	ForDuration string  `json:"for_duration,omitempty"`

	RestartCountThreshold int    `json:"restart_count_threshold"`
	RestartWindow         string `json:"restart_window,omitempty"`

	ScheduledTaskID string `json:"scheduled_task_id,omitempty"`

	// BackupResourceKind/BackupDatabaseName/BackupServiceName/
	// BackupVolumeName are kind=backup_missing-only: see
	// CreateAlertRuleRequest's own doc comment.
	BackupResourceKind string `json:"backup_resource_kind,omitempty"`
	BackupDatabaseName string `json:"backup_database_name,omitempty"`
	BackupServiceName  string `json:"backup_service_name,omitempty"`
	BackupVolumeName   string `json:"backup_volume_name,omitempty"`

	SLO     *AlertSLOConfig `json:"slo,omitempty"`
	LogRule *AlertLogRule   `json:"log_rule,omitempty"`

	NotifyURL  string `json:"notify_url,omitempty"`
	NotifyKind string `json:"notify_kind,omitempty"`
	Enabled    bool   `json:"enabled"`

	// Warnings are response-only, non-blocking problems with the saved rule.
	Warnings []string `json:"warnings,omitempty"`

	Severity            string            `json:"severity,omitempty"`
	Labels              map[string]string `json:"labels,omitempty"`
	ConsecutiveFailures int               `json:"consecutive_failures,omitempty"`
	FlapThreshold       int               `json:"flap_threshold,omitempty"`
	FlapWindow          string            `json:"flap_window,omitempty"`
	Silenced            bool              `json:"silenced,omitempty"`
	SilencedBy          string            `json:"silenced_by,omitempty"`

	Firing          bool       `json:"firing,omitempty"`
	PendingSince    *time.Time `json:"pending_since,omitempty"`
	FiringSince     *time.Time `json:"firing_since,omitempty"`
	LastEvaluatedAt *time.Time `json:"last_evaluated_at,omitempty"`
	LastValue       *float64   `json:"last_value,omitempty"`
}

AlertRuleResource mirrors internal/api's ruleResource (internal/api/alerts.go). Threshold-kind fields (Metric, Comparator, Threshold, ForDuration) and crashloop-kind fields (RestartCountThreshold, RestartWindow) are both present on the wire; only the ones matching Kind are meaningful, mirroring alerting.Rule's own shape. A kind=cert_expiry rule uses neither group: it watches every stored certificate platform-wide, not this rule's own resource_id.

type AlertSLOConfig added in v0.2.0

type AlertSLOConfig struct {
	Objective string  `json:"objective"`
	Target    float64 `json:"target"`
	LatencyMs float64 `json:"latency_ms,omitempty"`
}

AlertSLOConfig mirrors internal/alerting.SLOConfig: the request-based SLO a kind=slo_burn rule watches. Target is a percentage such as 99.9.

type AlertTemplateProfile

type AlertTemplateProfile struct {
	Profile string              `json:"profile"`
	Rules   []AlertTemplateRule `json:"rules"`
}

AlertTemplateProfile is a one-click rule set for an app shape.

type AlertTemplateRule

type AlertTemplateRule struct {
	Name        string `json:"name"`
	Kind        string `json:"kind"`
	Severity    string `json:"severity"`
	Description string `json:"description"`
}

AlertTemplateRule is one rule a template profile creates.

type AliasesRequest added in v0.2.0

type AliasesRequest struct {
	Aliases    []string `json:"aliases"`
	StatusCode int      `json:"status_code,omitempty"`
}

AliasesRequest makes the path domain the primary for every alias.

type AnalyzeBuild added in v0.2.0

type AnalyzeBuild struct {
	Type           string                   `json:"type"`
	DockerfilePath string                   `json:"dockerfile_path,omitempty"`
	BaseDirectory  string                   `json:"base_directory,omitempty"`
	Evidence       string                   `json:"evidence"`
	Alternatives   []AnalyzeBuildSuggestion `json:"alternatives"`
}

AnalyzeBuild mirrors internal/appwizard's Build.

type AnalyzeBuildSuggestion added in v0.2.0

type AnalyzeBuildSuggestion struct {
	BuildType      string `json:"build_type"`
	DockerfilePath string `json:"dockerfile_path,omitempty"`
	BaseDirectory  string `json:"base_directory,omitempty"`
	Reason         string `json:"reason"`
	ReasonCode     string `json:"reason_code"`
	Recommended    bool   `json:"recommended"`
}

AnalyzeBuildSuggestion mirrors internal/repolayout's Suggestion.

type AnalyzeDatabase added in v0.2.0

type AnalyzeDatabase struct {
	Engine        string `json:"engine"`
	Version       string `json:"version"`
	SuggestedName string `json:"suggested_name"`
	EnvVar        string `json:"env_var"`
	Field         string `json:"field"`
	Evidence      string `json:"evidence"`
}

AnalyzeDatabase mirrors internal/appwizard's DatabaseNeed.

type AnalyzeEnvKey added in v0.2.0

type AnalyzeEnvKey struct {
	Key        string `json:"key"`
	Required   bool   `json:"required"`
	Secret     bool   `json:"secret"`
	Source     string `json:"source"`
	ProvidedBy string `json:"provided_by,omitempty"`
	HasDefault bool   `json:"has_default"`
}

AnalyzeEnvKey mirrors internal/appwizard's EnvKey. It never carries a value.

type AnalyzeText added in v0.2.0

type AnalyzeText struct {
	Value    string `json:"value"`
	Evidence string `json:"evidence"`
}

AnalyzeText mirrors internal/appwizard's Text.

type AppAutoscale

type AppAutoscale = autoscale.Status

AppAutoscale is GET/PUT /api/v1/apps/{name}/autoscale.

type AppAutoscaleHistory

type AppAutoscaleHistory struct {
	Events []autoscale.Event `json:"events"`
}

AppAutoscaleHistory is GET /api/v1/apps/{name}/autoscale/history.

type AppAutoscaleUpdate

type AppAutoscaleUpdate struct {
	MinReplicas           int     `json:"min_replicas"`
	MaxReplicas           int     `json:"max_replicas"`
	Metric                string  `json:"metric"`
	Target                float64 `json:"target"`
	ScaleUpTolerancePct   int     `json:"scale_up_tolerance_pct,omitempty"`
	ScaleDownTolerancePct int     `json:"scale_down_tolerance_pct,omitempty"`
	ScaleUpCooldownSecs   int     `json:"scale_up_cooldown_secs,omitempty"`
	ScaleDownCooldownSecs int     `json:"scale_down_cooldown_secs,omitempty"`
	StabilizationSecs     int     `json:"stabilization_secs,omitempty"`
	MaxStepUp             int     `json:"max_step_up,omitempty"`
	MaxStepDown           int     `json:"max_step_down,omitempty"`
}

AppAutoscaleUpdate is the PUT body; it replaces the whole policy. Unset tolerance, cooldown and step fields take their defaults.

type AppBindMountResource added in v0.2.0

type AppBindMountResource struct {
	HostPath      string `json:"host_path"`
	ContainerPath string `json:"container_path"`
	ReadOnly      bool   `json:"read_only,omitempty"`
}

AppBindMountResource mirrors internal/api's appBindMountResource (app_volumes.go): one of an app's bind-mounted host directories.

type AppBranchEnvOverride added in v0.2.0

type AppBranchEnvOverride struct {
	ID            string `json:"id"`
	BranchPattern string `json:"branch_pattern"`
	Key           string `json:"key"`
	Value         string `json:"value"`
	Secret        bool   `json:"secret"`
	UpdatedAt     string `json:"updated_at"`
}

AppBranchEnvOverride mirrors internal/api's branchEnvOverrideResource: one branch-scoped env var override. Value is always "" for a secret-marked entry, never echoed back once saved.

type AppBudget

type AppBudget struct {
	spendcap.Status
	CostPriced bool `json:"cost_priced"`
}

AppBudget is GET/PUT /api/v1/apps/{name}/budget.

type AppBudgetHistory

type AppBudgetHistory struct {
	Events []spendcap.Event `json:"events"`
}

AppBudgetHistory is GET /api/v1/apps/{name}/budget/history.

type AppBudgetUpdate

type AppBudgetUpdate struct {
	MonthlyEgressBytes int64   `json:"monthly_egress_bytes"`
	MonthlyCostCeiling float64 `json:"monthly_cost_ceiling"`
	Thresholds         []int   `json:"thresholds,omitempty"`
	Action             string  `json:"action"`
	ThrottleRPS        int     `json:"throttle_rps,omitempty"`
}

AppBudgetUpdate is the PUT body; it replaces the whole budget.

type AppCacheDomain

type AppCacheDomain struct {
	Domain  string `json:"domain"`
	Enabled bool   `json:"enabled"`
	Rules   int    `json:"rules"`
	CacheNumbers
}

AppCacheDomain is one domain's cache state under an app.

type AppCachePurgeRequest

type AppCachePurgeRequest struct {
	Scope  string `json:"scope"`
	Value  string `json:"value,omitempty"`
	Domain string `json:"domain,omitempty"`
}

AppCachePurgeRequest purges url, prefix, tag or all; Domain narrows it to one of the app's domains.

type AppCachePurgeResource

type AppCachePurgeResource struct {
	App     string `json:"app"`
	Scope   string `json:"scope"`
	Value   string `json:"value,omitempty"`
	Removed int    `json:"removed"`
	Domains []struct {
		Domain  string `json:"domain"`
		Removed int    `json:"removed"`
	} `json:"domains"`
}

AppCachePurgeResource reports what a purge removed per domain.

type AppCacheResource

type AppCacheResource struct {
	App     string           `json:"app"`
	Limits  CacheLimits      `json:"limits"`
	Totals  CacheNumbers     `json:"totals"`
	Series  []CacheBucket    `json:"series"`
	Domains []AppCacheDomain `json:"domains"`
}

AppCacheResource is GET /api/v1/apps/{name}/cache.

type AppConnectionResource added in v0.2.0

type AppConnectionResource struct {
	EnvVar       string `json:"env_var"`
	DatabaseName string `json:"database_name"`
	Field        string `json:"field"`
	Host         string `json:"host"`
	MeshDNS      bool   `json:"mesh_dns"`
	NodeID       string `json:"node_id,omitempty"`
	CrossNode    bool   `json:"cross_node"`
}

AppConnectionResource mirrors internal/api's appConnectionResource: GET/POST /api/v1/apps/{name}/connections' wire shape for one DatabaseEnv entry, including a resolved-host preview so a caller can tell whether a connection is cross-node-capable without deploying.

type AppDatabaseResource

type AppDatabaseResource struct {
	AppName      string `json:"app_name,omitempty"`
	DatabaseName string `json:"database_name"`
	EnvVar       string `json:"env_var"`
	Field        string `json:"field"`
}

AppDatabaseResource mirrors internal/api's appDatabaseResource: PUT /api/v1/apps/{name}/database's response body.

type AppEgressAllow added in v0.2.0

type AppEgressAllow struct {
	Host string `json:"host"`
	Port int    `json:"port"`
}

AppEgressAllow mirrors internal/api's egressAllowResource: one host+port pair in an app's outbound network allowlist.

type AppEgressPolicyResource added in v0.2.0

type AppEgressPolicyResource struct {
	AppName string           `json:"app_name"`
	Mode    string           `json:"mode,omitempty"`
	Allow   []AppEgressAllow `json:"allow,omitempty"`
}

AppEgressPolicyResource mirrors internal/api's egressPolicyResource: GET/PUT /api/v1/apps/{name}/egress-policy's response body. Mode/Allow both empty means unconfigured, unrestricted egress, the default for every app that has never opted in.

type AppEnvironmentDomains added in v0.2.0

type AppEnvironmentDomains struct {
	App                 string                        `json:"app"`
	ActiveEnvironmentID string                        `json:"active_environment_id,omitempty"`
	DefaultDomains      []string                      `json:"default_domains"`
	RoutedDomains       []string                      `json:"routed_domains"`
	Environments        []EnvironmentDomainSet        `json:"environments"`
	Reachability        map[string]DomainReachability `json:"reachability,omitempty"`
}

AppEnvironmentDomains mirrors internal/api's appEnvironmentDomainsResource.

type AppExposureChange

type AppExposureChange struct {
	Kind string `json:"kind"`
	From string `json:"from,omitempty"`
	To   string `json:"to,omitempty"`
}

AppExposureChange is one line of an exposure preview.

type AppExposureCheck

type AppExposureCheck struct {
	App     string             `json:"app"`
	Scope   string             `json:"scope"`
	Targets []AppExposureProbe `json:"targets"`
}

AppExposureCheck is POST /api/v1/apps/{name}/exposure/check.

type AppExposurePlan

type AppExposurePlan struct {
	Mode          string              `json:"mode"`
	ContainerPort int                 `json:"container_port"`
	HostPort      int                 `json:"host_port,omitempty"`
	BindAddress   string              `json:"bind_address"`
	Changes       []AppExposureChange `json:"changes"`
	Warnings      []string            `json:"warnings,omitempty"`
	Recreates     bool                `json:"recreates"`
	URLs          []AppExposureURL    `json:"urls"`
}

AppExposurePlan is the preview of an exposure change.

type AppExposureProbe

type AppExposureProbe struct {
	Kind      string `json:"kind"`
	URL       string `json:"url"`
	OK        bool   `json:"ok"`
	Status    int    `json:"status,omitempty"`
	LatencyMS int64  `json:"latency_ms,omitempty"`
	Failure   string `json:"failure,omitempty"`
	Detail    string `json:"detail,omitempty"`
}

AppExposureProbe is one target of a reachability check.

type AppExposureRequest

type AppExposureRequest struct {
	Mode          string `json:"mode,omitempty"`
	HostPort      *int   `json:"host_port,omitempty"`
	ContainerPort *int   `json:"container_port,omitempty"`
}

AppExposureRequest is the body of the exposure preview and set calls.

type AppExposureResource

type AppExposureResource struct {
	AppExposurePlan
	App            string          `json:"app"`
	Running        bool            `json:"running"`
	FirewallRuleID string          `json:"firewall_rule_id,omitempty"`
	PortsInUse     []AppPortHolder `json:"ports_in_use"`
	PortRange      [2]int          `json:"port_range"`
	Outcome        string          `json:"outcome,omitempty"`
	LocalNode      bool            `json:"local_node"`
}

AppExposureResource is GET /api/v1/apps/{name}/exposure.

type AppExposureURL

type AppExposureURL struct {
	Kind string `json:"kind"`
	URL  string `json:"url"`
}

AppExposureURL is one URL an app answers on under its current exposure.

type AppGitHubActionsResource

type AppGitHubActionsResource struct {
	Environment       string `json:"environment"`
	ReportDeployments bool   `json:"report_deployments"`
	ReportChecks      bool   `json:"report_checks"`
}

AppGitHubActionsResource mirrors internal/api's appGitHubActionsResource (GET/PUT /api/v1/apps/{name}/github-actions).

type AppGroupResource

type AppGroupResource struct {
	AppID    string           `json:"app_id,omitempty"`
	Services []AppResource    `json:"services"`
	Status   AppStatusSummary `json:"status"`
}

AppGroupResource mirrors internal/api's appGroupResource (internal/api/apps_group.go): GET /api/v1/apps/{name}/group's response, name's sibling services under the same store.App plus one rollup status across all of them.

type AppHealthResource added in v0.2.0

type AppHealthResource struct {
	Name   string         `json:"name"`
	Health *ServiceHealth `json:"health"`
}

AppHealthResource mirrors internal/api's appHealthResource.

type AppHealthScoreCategory added in v0.2.0

type AppHealthScoreCategory struct {
	Key    string `json:"key"`
	Label  string `json:"label"`
	Status string `json:"status"`
	Reason string `json:"reason"`
}

AppHealthScoreCategory mirrors internal/api's healthScoreCategory.

type AppHealthScoreResource added in v0.2.0

type AppHealthScoreResource struct {
	AppName    string                   `json:"app_name"`
	Status     string                   `json:"status"`
	Categories []AppHealthScoreCategory `json:"categories"`
	ComputedAt time.Time                `json:"computed_at"`
}

AppHealthScoreResource mirrors internal/api's appHealthScoreResource.

type AppHookRunsResource

type AppHookRunsResource struct {
	PreDeploy  *HookRunResource `json:"pre_deploy,omitempty"`
	PostDeploy *HookRunResource `json:"post_deploy,omitempty"`
}

AppHookRunsResource mirrors internal/api's appHookRunsResource: nil fields mean that hook has never run, not an empty HookRunResource.

type AppImportChange added in v0.2.0

type AppImportChange struct {
	App    string `json:"app"`
	Key    string `json:"key"`
	Secret bool   `json:"secret"`
	Count  int    `json:"count"`
	Before string `json:"before"`
	After  string `json:"after"`
}

AppImportChange is one env value a mapping rewrote, with masked values.

type AppImportCheck added in v0.2.0

type AppImportCheck struct {
	App    string `json:"app,omitempty"`
	ID     string `json:"id"`
	Status string `json:"status"`
	Detail string `json:"detail"`
	Fix    string `json:"fix,omitempty"`
}

AppImportCheck is one preflight result.

type AppImportDatabase added in v0.2.0

type AppImportDatabase struct {
	SourceID   string `json:"source_id"`
	Name       string `json:"name"`
	Host       string `json:"host"`
	Target     string `json:"target,omitempty"`
	TargetHost string `json:"target_host,omitempty"`
}

AppImportDatabase is a database an app points at.

type AppImportEntry added in v0.2.0

type AppImportEntry struct {
	SourceID    string              `json:"source_id"`
	Name        string              `json:"name"`
	Kind        string              `json:"kind"`
	Project     string              `json:"project,omitempty"`
	Environment string              `json:"environment,omitempty"`
	Server      string              `json:"server,omitempty"`
	Source      string              `json:"source"`
	Repo        string              `json:"repo,omitempty"`
	Branch      string              `json:"branch,omitempty"`
	Image       string              `json:"image,omitempty"`
	ImageID     string              `json:"image_id,omitempty"`
	HostBuilt   bool                `json:"host_built,omitempty"`
	BuildPack   string              `json:"build_pack,omitempty"`
	MapsTo      string              `json:"maps_to,omitempty"`
	Port        int                 `json:"port,omitempty"`
	Domains     []string            `json:"domains,omitempty"`
	Env         AppImportEnvCounts  `json:"env"`
	Volumes     []AppImportVolume   `json:"volumes,omitempty"`
	Databases   []AppImportDatabase `json:"databases,omitempty"`
	Verdict     string              `json:"verdict"`
	Findings    []AppImportFinding  `json:"findings,omitempty"`
}

AppImportEntry is one inventory row. It never holds an env value.

type AppImportEnvCounts added in v0.2.0

type AppImportEnvCounts struct {
	Plain  int `json:"plain"`
	Secret int `json:"secret"`
	Empty  int `json:"empty"`
}

AppImportEnvCounts counts variables by sensitivity.

type AppImportFinding added in v0.2.0

type AppImportFinding struct {
	Reason string `json:"reason"`
	Next   string `json:"next,omitempty"`
}

AppImportFinding is one reason behind a verdict.

type AppImportImage added in v0.2.0

type AppImportImage struct {
	SourceID      string `json:"source_id"`
	App           string `json:"app"`
	Target        string `json:"target,omitempty"`
	Image         string `json:"image"`
	SourceImageID string `json:"source_image_id,omitempty"`
	LoadedImageID string `json:"loaded_image_id,omitempty"`
	Node          string `json:"node,omitempty"`
	State         string `json:"state"`
	Bytes         int64  `json:"bytes"`
	Verified      bool   `json:"verified"`
	Error         string `json:"error,omitempty"`
	UpdatedAt     string `json:"updated_at,omitempty"`
}

AppImportImage is one host-built image of an import session.

type AppImportImages added in v0.2.0

type AppImportImages struct {
	Running         bool             `json:"running"`
	Source          string           `json:"source,omitempty"`
	CredentialsHeld bool             `json:"credentials_held"`
	Supported       bool             `json:"supported"`
	MaxBytes        int64            `json:"max_bytes"`
	Images          []AppImportImage `json:"images"`
}

AppImportImages is the image move state of a session.

type AppImportImagesTransfer added in v0.2.0

type AppImportImagesTransfer struct {
	SSH        string   `json:"ssh,omitempty"`
	Port       int      `json:"port,omitempty"`
	PrivateKey string   `json:"private_key,omitempty"`
	Passphrase string   `json:"passphrase,omitempty"`
	UseAgent   bool     `json:"use_agent,omitempty"`
	Items      []string `json:"items,omitempty"`
}

AppImportImagesTransfer is the body of POST .../images/transfer. The private key travels in this body only and is never stored.

type AppImportItem added in v0.2.0

type AppImportItem struct {
	SourceID  string         `json:"source_id"`
	Name      string         `json:"name"`
	Target    string         `json:"target,omitempty"`
	Kind      string         `json:"kind"`
	State     string         `json:"state"`
	Selected  bool           `json:"selected"`
	Reason    string         `json:"reason,omitempty"`
	Entry     AppImportEntry `json:"entry"`
	Domains   []string       `json:"domains,omitempty"`
	Remaining []string       `json:"remaining,omitempty"`
	AppPath   string         `json:"app_path,omitempty"`
}

AppImportItem is one source app within a session.

type AppImportItemsRequest added in v0.2.0

type AppImportItemsRequest struct {
	Items []string `json:"items,omitempty"`
}

AppImportItemsRequest narrows verify and rollback to some items.

type AppImportMapping added in v0.2.0

type AppImportMapping struct {
	From string `json:"from"`
	To   string `json:"to"`
}

AppImportMapping rewrites one source hostname to a new one in env values.

type AppImportPlanUpdate added in v0.2.0

type AppImportPlanUpdate struct {
	Mappings  *[]AppImportMapping `json:"mappings,omitempty"`
	Selected  *[]string           `json:"selected,omitempty"`
	Collision string              `json:"collision,omitempty"`
}

AppImportPlanUpdate is the body of PUT .../sessions/{id}/plan. Nil fields are left unchanged.

type AppImportPreflight added in v0.2.0

type AppImportPreflight struct {
	Checks     []AppImportCheck  `json:"checks"`
	Diff       []AppImportChange `json:"diff"`
	Failed     int               `json:"failed"`
	Warnings   int               `json:"warnings"`
	EnvChecked bool              `json:"env_checked"`
	CanStage   bool              `json:"can_stage"`
}

AppImportPreflight is the outcome of the preflight checks.

type AppImportRequest added in v0.2.0

type AppImportRequest struct {
	Platform      string             `json:"platform"`
	URL           string             `json:"url"`
	Token         string             `json:"token"`
	Snapshot      string             `json:"snapshot,omitempty"`
	SSH           *AppImportSSH      `json:"ssh,omitempty"`
	AppName       string             `json:"dokku_app_name,omitempty"`
	InsecureTLS   bool               `json:"insecure_tls,omitempty"`
	AllowPrivate  bool               `json:"allow_private,omitempty"`
	AllowLoopback bool               `json:"allow_loopback,omitempty"`
	Only          []string           `json:"only,omitempty"`
	Collision     string             `json:"collision,omitempty"`
	Mappings      []AppImportMapping `json:"mappings,omitempty"`
}

AppImportRequest is the body of the plan and session create routes. Token is the source credential and is only ever sent in this body.

type AppImportSSH

type AppImportSSH struct {
	Host            string `json:"host"`
	Port            int    `json:"port,omitempty"`
	User            string `json:"user"`
	PrivateKey      string `json:"private_key,omitempty"`
	Passphrase      string `json:"passphrase,omitempty"`
	Password        string `json:"password,omitempty"`
	Fingerprint     string `json:"host_key_fingerprint,omitempty"`
	InsecureHostKey bool   `json:"insecure_host_key,omitempty"`
	SocketPath      string `json:"socket_path,omitempty"`
}

AppImportSSH is the SSH login of a docker-ssh import source. The control plane holds it in memory only and uses it as a read-only transport to the old host's Docker socket.

type AppImportSSHHostKey

type AppImportSSHHostKey struct {
	Type        string `json:"type"`
	Fingerprint string `json:"fingerprint"`
}

AppImportSSHHostKey is one host key a server presented.

type AppImportSSHOverview

type AppImportSSHOverview struct {
	DockerVersion string `json:"docker_version"`
	OS            string `json:"os,omitempty"`
	Swarm         bool   `json:"swarm"`
	Containers    int    `json:"containers"`
	Running       int    `json:"running"`
	Volumes       int    `json:"volumes"`
	Images        int    `json:"images"`
}

AppImportSSHOverview is what a connection test counted on the old host.

type AppImportSSHProbe

type AppImportSSHProbe struct {
	SSH           AppImportSSH `json:"ssh"`
	AllowPrivate  bool         `json:"allow_private,omitempty"`
	AllowLoopback bool         `json:"allow_loopback,omitempty"`
}

AppImportSSHProbe is the body of the host key and connection test calls.

type AppImportSSHResult

type AppImportSSHResult struct {
	OK       bool                  `json:"ok"`
	Target   string                `json:"target,omitempty"`
	Kind     string                `json:"kind,omitempty"`
	Message  string                `json:"message,omitempty"`
	Reads    string                `json:"reads,omitempty"`
	Overview *AppImportSSHOverview `json:"overview,omitempty"`
	Keys     []AppImportSSHHostKey `json:"host_keys,omitempty"`
	Observed []AppImportSSHHostKey `json:"observed_host_keys,omitempty"`
	Warnings []string              `json:"warnings,omitempty"`
}

AppImportSSHResult is the answer of the host key and connection test calls.

type AppImportView added in v0.2.0

type AppImportView struct {
	ID        string              `json:"id"`
	Platform  string              `json:"platform"`
	SourceURL string              `json:"source_url"`
	Step      string              `json:"step"`
	Collision string              `json:"collision"`
	Mappings  []AppImportMapping  `json:"mappings"`
	Suggested []AppImportMapping  `json:"suggested_mappings"`
	Connected bool                `json:"connected"`
	Running   bool                `json:"running"`
	Items     []AppImportItem     `json:"items"`
	Databases []AppImportDatabase `json:"databases"`
	Preflight *AppImportPreflight `json:"preflight,omitempty"`
	Counts    map[string]int      `json:"counts"`
	States    map[string]int      `json:"states"`
}

AppImportView is a plan or a session: the inventory, selection and state.

type AppImportVolume added in v0.2.0

type AppImportVolume struct {
	Name          string `json:"name"`
	ContainerPath string `json:"container_path"`
	HostPath      string `json:"host_path,omitempty"`
	SizeBytes     int64  `json:"size_bytes"`
	SizeKnown     bool   `json:"size_known"`
}

AppImportVolume is one persistent mount of a source app.

type AppImportVolumeCopy

type AppImportVolumeCopy struct {
	Running  bool                        `json:"running"`
	MaxBytes int64                       `json:"max_bytes"`
	MaxFiles int                         `json:"max_files"`
	Results  []AppImportVolumeCopyResult `json:"results"`
}

AppImportVolumeCopy is the progress of a session's tunnel volume copy.

type AppImportVolumeCopyResult

type AppImportVolumeCopyResult struct {
	SourceID      string   `json:"source_id"`
	App           string   `json:"app"`
	Volume        string   `json:"volume"`
	ContainerPath string   `json:"container_path"`
	State         string   `json:"state"`
	Files         int      `json:"files"`
	Bytes         int64    `json:"bytes"`
	Skipped       int      `json:"skipped_entries"`
	Warnings      []string `json:"warnings,omitempty"`
	Error         string   `json:"error,omitempty"`
	Fallback      string   `json:"fallback,omitempty"`
}

AppImportVolumeCopyResult is one volume's copy state.

type AppIngressLimits

type AppIngressLimits struct {
	MaxBodyBytes         *int64 `json:"max_body_bytes"`
	InstanceMaxBodyBytes int64  `json:"instance_max_body_bytes"`
}

AppIngressLimits is GET/PUT /api/v1/apps/{name}/ingress-limits.

type AppIntegrationResource added in v0.2.0

type AppIntegrationResource struct {
	ID             string `json:"id"`
	AppName        string `json:"app_name,omitempty"`
	IntegrationKey string `json:"integration_key"`
	Name           string `json:"name"`
	CreatedAt      string `json:"created_at,omitempty"`
	UpdatedAt      string `json:"updated_at,omitempty"`
}

AppIntegrationResource mirrors internal/api's appIntegrationResource: one app's attached integration. Field values are never included here, the same "names only" shape SecretKeyResource already establishes.

type AppKeyStatus

type AppKeyStatus struct {
	App        string     `json:"app"`
	CreatedAt  time.Time  `json:"created_at"`
	RotatedAt  *time.Time `json:"rotated_at,omitempty"`
	AgeDays    int        `json:"age_days"`
	ValueCount int        `json:"value_count"`
	Overdue    bool       `json:"overdue"`
}

AppKeyStatus mirrors internal/api's appKeyResource.

type AppListEntry added in v0.2.0

type AppListEntry struct {
	AppResource
	Status AppStatusSummary `json:"status"`
}

AppListEntry is one GET /api/v1/apps row: the app plus its status rollup.

type AppListQuery added in v0.2.0

type AppListQuery struct {
	Q, Project, Environment string
	Tags                    []string
	Limit, Offset           int
}

AppListQuery narrows GET /api/v1/apps and /api/v1/apps-summary.

type AppMaintenanceDomain

type AppMaintenanceDomain struct {
	DomainMaintenanceResource
	ElapsedSeconds int64 `json:"elapsed_seconds,omitempty"`
}

AppMaintenanceDomain is one domain in AppMaintenanceResource.

type AppMaintenanceResource

type AppMaintenanceResource struct {
	App     string                 `json:"app"`
	Enabled bool                   `json:"enabled"`
	All     bool                   `json:"all"`
	Total   int                    `json:"total_domains"`
	Active  int                    `json:"active_domains"`
	Domains []AppMaintenanceDomain `json:"domains"`
}

AppMaintenanceResource is GET/PUT/DELETE /api/v1/apps/{name}/maintenance.

type AppMetricsResource

type AppMetricsResource struct {
	Metric string                `json:"metric"`
	Points []MetricPointResource `json:"points"`
}

AppMetricsResource mirrors internal/api's metricsResponse (internal/api/metrics.go).

type AppMetricsSummary added in v0.2.0

type AppMetricsSummary struct {
	Name         string     `json:"name"`
	CPUPercent   *float64   `json:"cpu_percent,omitempty"`
	MemoryBytes  *float64   `json:"memory_usage_bytes,omitempty"`
	MemoryLimit  *float64   `json:"memory_limit_bytes,omitempty"`
	HasTraffic   bool       `json:"has_traffic"`
	RatePerSec   float64    `json:"rate_per_sec"`
	ErrorRate5xx float64    `json:"error_rate_5xx"`
	P95Ms        float64    `json:"p95_ms"`
	Spark        []float64  `json:"spark"`
	LastDeployAt *time.Time `json:"last_deploy_at,omitempty"`
}

AppMetricsSummary is one row of GET /api/v1/apps-metrics.

type AppPortHolder

type AppPortHolder struct {
	Port   int    `json:"port"`
	Kind   string `json:"kind"`
	Holder string `json:"holder"`
}

AppPortHolder names who holds a host port on the node.

type AppPreviewEnvOverride added in v0.2.0

type AppPreviewEnvOverride struct {
	Key   string `json:"key"`
	Value string `json:"value"`
}

AppPreviewEnvOverride mirrors handleSetAppPreviewEnvOverride's own response shape: the env var key plus the preview-specific value just saved.

type AppRequestsResource added in v0.2.0

type AppRequestsResource struct {
	App         string                 `json:"app"`
	From        time.Time              `json:"from"`
	To          time.Time              `json:"to"`
	StepSeconds float64                `json:"step_seconds"`
	Summary     RequestSummaryResource `json:"summary"`
	Points      []RequestPointResource `json:"points"`
}

AppRequestsResource mirrors internal/api's requestsResponse.

type AppResource

type AppResource struct {
	Name  string `json:"name"`
	Image string `json:"image"`
	// PendingImage is set while a rollout to a new image is in progress or
	// failed; Image is then the last image confirmed serving.
	PendingImage string `json:"pending_image,omitempty"`
	// ImageDigest is the content Image is pinned to, empty for a legacy tag.
	ImageDigest string `json:"image_digest,omitempty"`
	Port        int    `json:"port"`
	// HostPort mirrors internal/api's appResource.HostPort: nil means
	// "let Docker assign one", a value pins the host-side port. Settable
	// on create and update, like Port.
	HostPort *int `json:"host_port,omitempty"`
	// BindAddress mirrors internal/api's appResource.BindAddress:
	// "private" (loopback only, the default), "public" (every
	// interface), or a literal IP. No omitempty: a response always
	// carries the resolved value.
	BindAddress string `json:"bind_address"`
	// Replicas and Strategy must round-trip: UpdateApp is a full replace, so
	// dropping them on a GET-then-PUT would reset a scaled app to defaults.
	Replicas int      `json:"replicas,omitempty"`
	Strategy string   `json:"strategy,omitempty"`
	Domains  []string `json:"domains,omitempty"`
	// Env holds MaskedEnvValue for sensitive keys; sending it back keeps the stored value.
	Env map[string]string `json:"env,omitempty"`
	// SecretEnv mirrors internal/api's appResource.SecretEnv: names of
	// env vars backed by encrypted secret storage, values held only in
	// Secrets below or set later via PUT .../secrets/{key}, never here.
	SecretEnv []string `json:"secret_env,omitempty"`
	// Secrets mirrors internal/api's appResource.Secrets: plaintext
	// values to encrypt and store for SecretEnv-named vars at create
	// time. Write-only, like SetSecretRequest's own Value: never
	// populated on a response.
	Secrets map[string]string `json:"secrets,omitempty"`
	// VaultEnv mirrors internal/api's appResource.VaultEnv: env vars
	// whose values resolve live from an external HashiCorp Vault
	// instance, never a value this platform stores. Settable at create
	// time, response-mirrors the store otherwise.
	VaultEnv  map[string]AppVaultEnvRef `json:"vault_env,omitempty"`
	Resources *ServiceResources         `json:"resources,omitempty"`
	Health    *ServiceHealth            `json:"health,omitempty"`
	// Hooks mirrors internal/api's appResource.Hooks: settable on create
	// and update, like Resources/Health above.
	Hooks *ServiceHooks `json:"hooks,omitempty"`
	// NodeID mirrors internal/api's appResource.NodeID: response-only on
	// update, but settable at create time as an explicit placement
	// override (omitted entirely lets the server auto-place via simple
	// spread scheduling instead, see AutoPlaced below).
	NodeID string `json:"node_id,omitempty"`
	// AutoPlaced mirrors internal/api's appResource.AutoPlaced:
	// response-only, true when create left node_id unset and the server
	// picked a non-local node for it via simple spread scheduling.
	AutoPlaced bool `json:"auto_placed,omitempty"`
	// ProjectID mirrors internal/api's appResource.ProjectID:
	// response-only, set via PUT /api/v1/apps/{name}/project.
	ProjectID string `json:"project_id,omitempty"`
	// EnvironmentID mirrors internal/api's appResource.EnvironmentID:
	// response-only, set via PUT /api/v1/apps/{name}/environment.
	EnvironmentID string `json:"environment_id,omitempty"`
	// StorageTargetID mirrors internal/api's appResource.StorageTargetID:
	// response-only, set via PUT/DELETE /api/v1/apps/{name}/storage
	// (SetAppStorage/ClearAppStorage).
	StorageTargetID string `json:"storage_target_id,omitempty"`
	// EnvDirty mirrors internal/api's appResource.EnvDirty: true means
	// Env was saved since the running container was last recreated, so
	// the change is not live yet. Clears on restart or redeploy.
	EnvDirty bool `json:"env_dirty"`
	// PreviousReleaseHeldUntil mirrors internal/api's GET app payload: when
	// the kept previous release, an instant rollback target, is removed.
	PreviousReleaseHeldUntil string `json:"previous_release_held_until,omitempty"`
	// FallbackURL is the automatic sslip.io URL of an app with no domain (GET only).
	FallbackURL string `json:"fallback_url,omitempty"`
	// StrategyReason and MemoryFromTemplate mirror the GET app payload: why a template pinned the strategy, and whether the memory limit is the template's recommendation.
	StrategyReason     string `json:"strategy_reason,omitempty"`
	MemoryFromTemplate bool   `json:"memory_from_template,omitempty"`
	// Volumes mirrors internal/api's appResource.Volumes: this app's
	// declared named Docker volumes, response-only (declared through
	// app.yaml, not settable here).
	Volumes []AppVolumeResource `json:"volumes,omitempty"`
	// BindMounts mirrors internal/api's appResource.BindMounts: this
	// app's declared host-directory bind mounts, response-only
	// (declared through app.yaml or a compose import, not settable
	// here).
	BindMounts []AppBindMountResource `json:"bind_mounts,omitempty"`
	// Command mirrors internal/api's appResource.Command: overrides the
	// image's own default CMD, response-only (declared through app.yaml's
	// command: or a compose import, not settable here).
	Command []string `json:"command,omitempty"`
	// PullPolicy mirrors internal/api's appResource.PullPolicy: "always"
	// forces a fresh image pull on every deploy, empty is the default
	// pull-if-absent behavior. Response-only (declared through a compose
	// import's pull_policy:, not settable here).
	PullPolicy string `json:"pull_policy,omitempty"`
	// PreviewEnvOverrides mirrors internal/api's
	// appResource.PreviewEnvOverrides: response-only, set via PUT/DELETE
	// /api/v1/apps/{name}/preview-env/{key} (SetAppPreviewEnvOverride/
	// ClearAppPreviewEnvOverride).
	PreviewEnvOverrides map[string]string `json:"preview_env_overrides,omitempty"`
	// Tags mirrors internal/api's appResource.Tags: names of every
	// store.Tag attached to this app, response-only, set via POST/DELETE
	// /api/v1/apps/{name}/tags (AttachAppTag/DetachAppTag).
	Tags []string `json:"tags,omitempty"`
}

AppResource mirrors internal/api's appResource (apps.go). Field order and JSON tags match exactly, so a response decodes cleanly and a request encodes into exactly what the server expects.

type AppResourceUsageResource added in v0.2.0

type AppResourceUsageResource struct {
	Name             string   `json:"name"`
	CPUPercent       *float64 `json:"cpu_percent,omitempty"`
	MemoryUsageBytes *float64 `json:"memory_usage_bytes,omitempty"`
	MemoryLimitBytes *float64 `json:"memory_limit_bytes,omitempty"`
	NetworkRxBytes   *float64 `json:"network_rx_bytes,omitempty"`
	NetworkTxBytes   *float64 `json:"network_tx_bytes,omitempty"`
}

AppResourceUsageResource mirrors internal/api's appResourceUsageResource (internal/api/app_resource_usage.go): one app's latest known CPU/memory/network reading, for the dashboard's "what's consuming the most resources right now" ranking. A nil field means telemetry has never recorded that metric for this app yet, not zero usage.

type AppScheduleHistoryEntry added in v0.2.0

type AppScheduleHistoryEntry struct {
	ID           string    `json:"id"`
	ScheduledFor time.Time `json:"scheduled_for"`
	FiredAt      time.Time `json:"fired_at"`
	Status       string    `json:"status"`
	Reason       string    `json:"reason,omitempty"`
}

AppScheduleHistoryEntry mirrors internal/api's appScheduleHistoryResource (GET /api/v1/apps/{name}/schedule/history).

type AppScheduleResource added in v0.2.0

type AppScheduleResource struct {
	ServiceName string     `json:"service_name"`
	Cron        string     `json:"cron"`
	Branch      string     `json:"branch"`
	Timezone    string     `json:"timezone"`
	Enabled     bool       `json:"enabled"`
	NextRunAt   *time.Time `json:"next_run_at,omitempty"`
}

AppScheduleResource mirrors internal/api's appScheduleResource (GET/PUT /api/v1/apps/{name}/schedule).

type AppSleepResource added in v0.2.0

type AppSleepResource struct {
	Enabled     bool `json:"enabled"`
	IdleMinutes int  `json:"idle_minutes"`
	Sleeping    bool `json:"sleeping"`
	// Since is when the app went to sleep, set only while it is asleep.
	Since *time.Time `json:"since,omitempty"`
	// HoldRequests is function mode: a request that wakes the app waits for it.
	HoldRequests bool          `json:"hold_requests"`
	Blockers     []SleepItem   `json:"blockers"`
	Warnings     []SleepItem   `json:"warnings"`
	Eligible     bool          `json:"eligible"`
	Settings     SleepSettings `json:"settings"`
	PortWake     SleepPortWake `json:"port_wake"`
	Activity     SleepActivity `json:"activity"`
	// ColdStartMsP50 is nil when the app has no recorded wakes.
	ColdStartMsP50 *int64 `json:"cold_start_ms_p50"`
	// EstimatedMemoryFreedBytes is nil when the app has no memory limit.
	EstimatedMemoryFreedBytes *int64 `json:"estimated_memory_freed_bytes"`
	// WakeTiming has Samples 0 when the app has no timed wakes.
	WakeTiming WakeTiming      `json:"wake_timing"`
	IdleLimits SleepIdleLimits `json:"idle_limits"`
}

AppSleepResource mirrors internal/api's appSleepResource.

type AppStatusEntry added in v0.2.0

type AppStatusEntry struct {
	Name   string `json:"name"`
	Status struct {
		Label   string `json:"label"`
		Variant string `json:"variant"`
	} `json:"status"`
}

AppStatusEntry is one row of GET /api/v1/apps reduced to its name and status rollup (internal/api's appStatusSummary).

type AppStatusSummary

type AppStatusSummary struct {
	Label   string `json:"label"`
	Variant string `json:"variant"`
}

AppStatusSummary mirrors internal/api's appStatusSummary (internal/api/app_status.go): a compact category rollup, not the raw conditions list ConditionResource carries.

type AppStorageResource added in v0.2.0

type AppStorageResource struct {
	AppName         string `json:"app_name"`
	StorageTargetID string `json:"storage_target_id,omitempty"`
}

AppStorageResource mirrors internal/api's appStorageResource (internal/api/apps_storage.go): PUT/DELETE /api/v1/apps/{name}/storage's response.

type AppStreamResource added in v0.2.0

type AppStreamResource struct {
	ID            string `json:"id"`
	App           string `json:"app"`
	ContainerPort int    `json:"container_port"`
	HostPort      int    `json:"host_port"`
	Protocol      string `json:"protocol"`
	CreatedAt     string `json:"created_at"`
}

AppStreamResource mirrors internal/api's appStreamResource.

type AppTrafficResource

type AppTrafficResource struct {
	App            string               `json:"app"`
	Window         string               `json:"window"`
	From           time.Time            `json:"from"`
	To             time.Time            `json:"to"`
	HasTraffic     bool                 `json:"has_traffic"`
	Requests       float64              `json:"requests"`
	RatePerSec     float64              `json:"rate_per_sec"`
	StatusClasses  TrafficStatusClasses `json:"status_classes"`
	ErrorRate4xx   float64              `json:"error_rate_4xx"`
	ErrorRate5xx   float64              `json:"error_rate_5xx"`
	UpstreamErrors float64              `json:"upstream_errors"`
	Latency        TrafficLatency       `json:"latency"`
	Replicas       []TrafficReplica     `json:"replicas"`
	SlowRoutes     []TrafficRoute       `json:"slow_routes"`
	Samples        []TrafficSample      `json:"samples"`
	Referrers      []TrafficLabel       `json:"referrers"`
	Countries      []TrafficLabel       `json:"countries"`
	SLO            *TrafficSLO          `json:"slo,omitempty"`
	Shield         TrafficShield        `json:"shield"`
}

AppTrafficResource is GET /api/v1/apps/{name}/traffic.

type AppURLAddress

type AppURLAddress struct {
	Kind          string `json:"kind"`
	Host          string `json:"host,omitempty"`
	URL           string `json:"url,omitempty"`
	Port          int    `json:"port,omitempty"`
	ReachableHint string `json:"reachable_hint"`
}

AppURLAddress is one way to reach an app, from GET /api/v1/apps/{name}/urls.

type AppURLs

type AppURLs struct {
	App           string          `json:"app"`
	ContainerPort int             `json:"container_port"`
	HostPort      int             `json:"host_port,omitempty"`
	BindAddress   string          `json:"bind_address"`
	Running       bool            `json:"running"`
	Node          string          `json:"node,omitempty"`
	LocalNode     bool            `json:"local_node"`
	Addresses     []AppURLAddress `json:"addresses"`
}

AppURLs is the response of GET /api/v1/apps/{name}/urls.

type AppVaultEnvRef added in v0.2.0

type AppVaultEnvRef struct {
	Path string `json:"path"`
	Key  string `json:"key"`
}

AppVaultEnvRef mirrors internal/api's appVaultEnvRef: one env var's { path, key } reference into an external Vault instance.

type AppVolumeMoveResource added in v0.2.0

type AppVolumeMoveResource struct {
	ID          string                      `json:"id"`
	ServiceName string                      `json:"service_name"`
	FromNodeID  string                      `json:"from_node_id"`
	ToNodeID    string                      `json:"to_node_id"`
	Status      string                      `json:"status"`
	Error       string                      `json:"error,omitempty"`
	Steps       []AppVolumeMoveStepResource `json:"steps"`
	StartedAt   string                      `json:"started_at"`
	FinishedAt  string                      `json:"finished_at,omitempty"`
}

AppVolumeMoveResource mirrors internal/api's appVolumeMoveResource: one "move this app to another node, taking its volumes with it" attempt. MoveAppWithVolumes always returns this shape regardless of status code: 200 means it already finished (an app with no volumes, or already on the target node), 202 means Status is "running" and the caller should poll GetAppVolumeMove until it isn't.

type AppVolumeMoveStepResource added in v0.2.0

type AppVolumeMoveStepResource struct {
	Name       string `json:"name"`
	Status     string `json:"status"`
	Error      string `json:"error,omitempty"`
	StartedAt  string `json:"started_at"`
	FinishedAt string `json:"finished_at,omitempty"`
}

AppVolumeMoveStepResource mirrors internal/api's appVolumeMoveStepResource (apps_move_with_volumes.go).

type AppVolumeResource

type AppVolumeResource struct {
	Name          string `json:"name"`
	ContainerPath string `json:"container_path"`
}

AppVolumeResource mirrors internal/api's appVolumeResource (app_volumes.go): one of an app's named Docker volumes, identified by its logical name (what an operator wrote in app.yaml), not the resolved, platform-prefixed Docker volume name.

type ApplyAlertTemplateResult

type ApplyAlertTemplateResult struct {
	Profile string              `json:"profile"`
	Created []AlertRuleResource `json:"created"`
	Skipped []string            `json:"skipped"`
}

ApplyAlertTemplateResult lists the rules created and the names skipped as already present.

type ApplyPendingResult added in v0.2.0

type ApplyPendingResult struct {
	AttemptID string `json:"attempt_id,omitempty"`
}

ApplyPendingResult mirrors internal/api's applyPendingResult.

type ApplyPolicyTemplateAttach added in v0.2.0

type ApplyPolicyTemplateAttach struct {
	PrincipalType string `json:"principal_type"`
	PrincipalID   string `json:"principal_id"`
}

ApplyPolicyTemplateAttach names the user or token a template policy is attached to.

type ApplyPolicyTemplateRequest added in v0.2.0

type ApplyPolicyTemplateRequest struct {
	Name   string                     `json:"name,omitempty"`
	Params map[string]string          `json:"params,omitempty"`
	Attach *ApplyPolicyTemplateAttach `json:"attach,omitempty"`
}

ApplyPolicyTemplateRequest mirrors internal/api's applyTemplateRequest.

type ApplyPolicyTemplateResponse added in v0.2.0

type ApplyPolicyTemplateResponse struct {
	Policy   PolicyResource `json:"policy"`
	Attached bool           `json:"attached"`
}

ApplyPolicyTemplateResponse mirrors internal/api's applyTemplateResponse.

type ApprovePreviewResult added in v0.2.0

type ApprovePreviewResult struct {
	Status string `json:"status"`
}

ApprovePreviewResult is POST .../approve's body.

type AppsPage added in v0.2.0

type AppsPage struct {
	Items      []AppResource
	NextOffset int
	TotalCount int
}

AppsPage is one page of GET /api/v1/apps, returned by ListAppsPage. NextOffset is 0 when there is no further page; TotalCount is the server's own X-Total-Count header, the full match count before paging.

type AppsSummary added in v0.2.0

type AppsSummary struct {
	Total     int `json:"total"`
	Running   int `json:"running"`
	Failing   int `json:"failing"`
	Deploying int `json:"deploying"`
	Stopped   int `json:"stopped"`
	Unknown   int `json:"unknown"`
}

AppsSummary is GET /api/v1/apps-summary's body.

type ArchiveBundle

type ArchiveBundle struct {
	ID         string         `json:"id"`
	Kind       string         `json:"kind"`
	CreatedAt  string         `json:"created_at"`
	Cutoff     string         `json:"cutoff"`
	Rows       map[string]int `json:"rows"`
	TotalRows  int            `json:"total_rows"`
	SizeBytes  int64          `json:"size_bytes"`
	SHA256     string         `json:"sha256"`
	VerifiedAt string         `json:"verified_at,omitempty"`
	VerifiedOK *bool          `json:"verified_ok,omitempty"`
	RestoredAt string         `json:"restored_at,omitempty"`
}

ArchiveBundle mirrors internal/archive.Bundle.

type ArchiveList

type ArchiveList struct {
	Bundles   []ArchiveBundle `json:"bundles"`
	Policy    ArchivePolicy   `json:"policy"`
	HotRows   map[string]int  `json:"hot_rows"`
	TotalSize int64           `json:"total_size_bytes"`
}

ArchiveList mirrors GET /api/v1/archives.

type ArchivePolicy

type ArchivePolicy struct {
	Enabled         bool   `json:"enabled"`
	AuditHotDays    int    `json:"audit_hot_days"`
	DeployHotDays   int    `json:"deploy_hot_days"`
	PipelineHotDays int    `json:"pipeline_hot_days"`
	KeepDays        int    `json:"keep_days"`
	LastRunAt       string `json:"last_run_at,omitempty"`
	LastRunError    string `json:"last_run_error,omitempty"`
}

ArchivePolicy mirrors internal/store.ArchiveSettings.

type ArchiveRestoreResult

type ArchiveRestoreResult struct {
	Restored map[string]int `json:"restored"`
	Existing int            `json:"already_present"`
	Skipped  int            `json:"skipped_missing_parent"`
}

ArchiveRestoreResult mirrors internal/archive.RestoreResult.

type ArchiveRows

type ArchiveRows struct {
	Table string           `json:"table"`
	Total int              `json:"total"`
	Rows  []map[string]any `json:"rows"`
}

ArchiveRows mirrors internal/archive.Rows.

type ArchiveRunResult

type ArchiveRunResult struct {
	Created []ArchiveBundle `json:"created"`
	Pruned  int             `json:"pruned"`
}

ArchiveRunResult mirrors internal/archive.RunResult.

type ArchiveVerifyResult

type ArchiveVerifyResult struct {
	Bundle ArchiveBundle `json:"bundle"`
	OK     bool          `json:"ok"`
	Error  string        `json:"error,omitempty"`
}

ArchiveVerifyResult is the verify-by-restore outcome.

type AttachAppIntegrationRequest added in v0.2.0

type AttachAppIntegrationRequest struct {
	IntegrationKey string            `json:"integration_key"`
	Fields         map[string]string `json:"fields"`
}

AttachAppIntegrationRequest mirrors internal/api's attachAppIntegrationRequest.

type AttachAppTagRequest added in v0.2.0

type AttachAppTagRequest struct {
	Name string `json:"name"`
}

AttachAppTagRequest mirrors internal/api's attachAppTagRequest: POST /api/v1/apps/{name}/tags' body, a tag name rather than an ID (see that type's own doc comment for why).

type AttachPolicyRequest

type AttachPolicyRequest struct {
	PrincipalType string `json:"principal_type"`
	PrincipalID   string `json:"principal_id"`
}

AttachPolicyRequest mirrors internal/api's attachPolicyRequest.

type AttentionFeedItem added in v0.2.0

type AttentionFeedItem struct {
	ID       string            `json:"id"`
	Severity string            `json:"severity"`
	Kind     string            `json:"kind"`
	Subject  string            `json:"subject"`
	Title    string            `json:"title"`
	Detail   string            `json:"detail"`
	Action   string            `json:"action"`
	Link     string            `json:"link"`
	Params   map[string]string `json:"params,omitempty"`
	Class    string            `json:"class,omitempty"`
}

AttentionFeedItem is one server-built attention item (GET /api/v1/attention/feed), already limited to what the caller may see.

type AuditChainProblem

type AuditChainProblem struct {
	Seq    int64  `json:"seq"`
	Reason string `json:"reason"`
}

AuditChainProblem mirrors store.AuditChainProblem.

type AuditChainReport

type AuditChainReport struct {
	OK          bool                `json:"ok"`
	Checked     int                 `json:"checked"`
	Head        int64               `json:"head"`
	Checkpoints int                 `json:"checkpoints"`
	Unverified  int                 `json:"unverified"`
	Unchained   int                 `json:"unchained"`
	Problems    []AuditChainProblem `json:"problems"`
}

AuditChainReport mirrors store.AuditChainReport.

type AuditLogEntryResource

type AuditLogEntryResource struct {
	ID         string `json:"id"`
	ActorType  string `json:"actor_type"`
	ActorID    string `json:"actor_id"`
	ActorName  string `json:"actor_name"`
	Ability    string `json:"ability"`
	Method     string `json:"method"`
	Path       string `json:"path"`
	StatusCode int    `json:"status_code"`
	RemoteAddr string `json:"remote_addr"`
	CreatedAt  string `json:"created_at"`
	ClientKind string `json:"client_kind"`
	// AgentName labels the AI agent behind the token; AgentClient is the
	// self-reported MCP client name and version.
	AgentName   string `json:"agent_name,omitempty"`
	AgentClient string `json:"agent_client,omitempty"`
}

AuditLogEntryResource mirrors internal/api's auditLogEntryResource (internal/api/audit.go).

type AuthEngineStatusResource added in v0.2.0

type AuthEngineStatusResource struct {
	LibraryVersion string `json:"library_version"`
	TOTP           bool   `json:"totp"`
	Passkeys       bool   `json:"passkeys"`
	OAuth          bool   `json:"oauth"`
}

AuthEngineStatusResource mirrors internal/api's authEngineStatusResponse.

type AuthGateEvent added in v0.2.0

type AuthGateEvent struct {
	At        string `json:"at"`
	UserID    string `json:"user_id"`
	UserEmail string `json:"user_email"`
	Decision  string `json:"decision"`
	Reason    string `json:"reason"`
	IP        string `json:"ip"`
	Count     int    `json:"count"`
}

AuthGateEvent mirrors internal/api's authGateEventResource.

type AuthGateEventsResponse added in v0.2.0

type AuthGateEventsResponse struct {
	Domain string          `json:"domain"`
	Since  string          `json:"since"`
	Events []AuthGateEvent `json:"events"`
}

AuthGateEventsResponse mirrors internal/api's authGateEventsResponse.

type AuthGateRule added in v0.2.0

type AuthGateRule struct {
	Kind    string `json:"kind"`
	Subject string `json:"subject"`
	Label   string `json:"label,omitempty"`
}

AuthGateRule is one built-in gate allow rule; Label is the email, team name or role name.

type AuthGateSessionsRevoked added in v0.2.0

type AuthGateSessionsRevoked struct {
	Domain  string `json:"domain"`
	Revoked int64  `json:"revoked"`
}

AuthGateSessionsRevoked mirrors internal/api's gateSessionsRevokedResponse.

type AutoRollbackSLOBurnSettingResource added in v0.2.0

type AutoRollbackSLOBurnSettingResource struct {
	Mode string `json:"mode"`
}

AutoRollbackSLOBurnSettingResource mirrors internal/api's autoRollbackSLOBurnSettingResource: both GET and PUT /api/v1/apps/{name}/auto-rollback-slo-burn's response, how this app reacts the next time a kind=slo_burn alert rule fires.

type AutoRollbackSettingResource added in v0.2.0

type AutoRollbackSettingResource struct {
	Enabled bool `json:"enabled"`
}

AutoRollbackSettingResource mirrors internal/api's autoRollbackSettingResource: both GET and PUT /api/v1/apps/{name}/auto-rollback's response, whether this app rolls itself back automatically the next time a crashloop alert rule fires.

type AutomationRun added in v0.2.0

type AutomationRun struct {
	ID        string       `json:"id"`
	App       string       `json:"app"`
	Domain    string       `json:"domain"`
	Result    string       `json:"result"`
	Steps     []GoLiveStep `json:"steps"`
	CreatedAt time.Time    `json:"created_at"`
	UndoneAt  *time.Time   `json:"undone_at,omitempty"`
	Undoable  bool         `json:"undoable"`
}

AutomationRun is one entry of the automation history.

type BackupCoverageResponse added in v0.2.0

type BackupCoverageResponse struct {
	Summary   CoverageSummaryResource `json:"summary"`
	Resources []CoverageRowResource   `json:"resources"`
	Targets   []struct {
		ID       string `json:"id"`
		Name     string `json:"name"`
		Provider string `json:"provider"`
	} `json:"targets"`
	Defaults BackupDefaults `json:"defaults"`
}

BackupCoverageResponse mirrors internal/api's backupCoverageResponse.

type BackupDefaults added in v0.2.0

type BackupDefaults struct {
	Schedule   string `json:"schedule"`
	Retain     int    `json:"retain"`
	RetainDays int    `json:"retain_days"`
}

BackupDefaults mirrors internal/api's backupDefaults.

type BackupDrillResource added in v0.2.0

type BackupDrillResource struct {
	ID           string `json:"id"`
	BackupID     string `json:"backup_id"`
	ResourceKind string `json:"resource_kind"`
	DatabaseName string `json:"database_name,omitempty"`
	ServiceName  string `json:"service_name,omitempty"`
	VolumeName   string `json:"volume_name,omitempty"`
	Trigger      string `json:"trigger"`
	Status       string `json:"status"`
	Stage        string `json:"stage"`
	ObjectOK     bool   `json:"object_ok"`
	ChecksumOK   bool   `json:"checksum_ok"`
	RestoreOK    bool   `json:"restore_ok"`
	ContentOK    bool   `json:"content_ok"`
	Files        int64  `json:"files"`
	Bytes        int64  `json:"bytes"`
	DurationMS   int64  `json:"duration_ms"`
	Error        string `json:"error,omitempty"`
	StartedAt    string `json:"started_at"`
	FinishedAt   string `json:"finished_at,omitempty"`
}

BackupDrillResource mirrors internal/api's drillResource.

type BackupHealthResponse added in v0.2.0

type BackupHealthResponse struct {
	Resources  []ResourceHealthResource   `json:"resources"`
	Targets    []TargetProtectionResource `json:"targets"`
	Encryption struct {
		Enabled   bool   `json:"enabled"`
		Recipient string `json:"recipient,omitempty"`
		Codec     string `json:"codec"`
	} `json:"encryption"`
}

BackupHealthResponse mirrors internal/api's backupHealthResponse.

type BackupHistoryResource

type BackupHistoryResource struct {
	ID             string `json:"id"`
	ResourceKind   string `json:"resource_kind"`
	DatabaseName   string `json:"database_name,omitempty"`
	ServiceName    string `json:"service_name,omitempty"`
	VolumeName     string `json:"volume_name,omitempty"`
	TargetID       string `json:"target_id"`
	ObjectKey      string `json:"object_key"`
	SizeBytes      int64  `json:"size_bytes"`
	Status         string `json:"status"`
	Error          string `json:"error,omitempty"`
	StartedAt      string `json:"started_at"`
	FinishedAt     string `json:"finished_at,omitempty"`
	ChecksumSHA256 string `json:"checksum_sha256,omitempty"`
}

BackupHistoryResource mirrors internal/api's backupHistoryResource (internal/api/backups.go). ServiceName/VolumeName are set instead of DatabaseName for an app service volume backup, never alongside it.

type BackupScheduleResource

type BackupScheduleResource struct {
	DatabaseName string `json:"database_name"`
	TargetID     string `json:"target_id,omitempty"`
	Schedule     string `json:"schedule,omitempty"`
	Retain       int    `json:"retain,omitempty"`
	RetainDays   int    `json:"retain_days,omitempty"`
}

BackupScheduleResource mirrors internal/api's backupScheduleResource (internal/api/backups.go): PUT/DELETE .../backup-schedule only ever touch these three fields, never the full database resource.

type BackupSummaryResource added in v0.2.0

type BackupSummaryResource struct {
	ID        string `json:"id"`
	At        string `json:"at"`
	Status    string `json:"status"`
	SizeBytes int64  `json:"size_bytes"`
	Codec     string `json:"codec,omitempty"`
	Error     string `json:"error,omitempty"`
}

BackupSummaryResource mirrors internal/api's backupSummaryResource.

type BackupTargetResource

type BackupTargetResource struct {
	ID        string `json:"id"`
	Name      string `json:"name"`
	Provider  string `json:"provider"`
	Endpoint  string `json:"endpoint,omitempty"`
	Region    string `json:"region,omitempty"`
	Bucket    string `json:"bucket"`
	CreatedAt string `json:"created_at"`
}

BackupTargetResource mirrors internal/api's backupTargetResource (internal/api/backup_targets.go). No credential fields: access_key_id and secret_access_key are write-only, accepted through CreateBackupTargetRequest/UpdateBackupTargetRequest and never echoed back in any response.

type BackupVerificationResource

type BackupVerificationResource struct {
	ID              string `json:"id"`
	BackupHistoryID string `json:"backup_history_id"`
	Status          string `json:"status"`
	ChecksumMatch   bool   `json:"checksum_match"`
	SizeMatch       bool   `json:"size_match"`
	FormatValid     bool   `json:"format_valid"`
	DownloadedBytes int64  `json:"downloaded_bytes"`
	Error           string `json:"error,omitempty"`
	CheckedBy       string `json:"checked_by,omitempty"`
	StartedAt       string `json:"started_at"`
	FinishedAt      string `json:"finished_at,omitempty"`
}

BackupVerificationResource mirrors internal/api's backupVerificationResource (internal/api/backup_verify.go).

type BaseBackupHistoryResource added in v0.2.0

type BaseBackupHistoryResource struct {
	ID           string `json:"id"`
	DatabaseName string `json:"database_name"`
	TargetID     string `json:"target_id"`
	LSN          string `json:"lsn,omitempty"`
	SizeBytes    int64  `json:"size_bytes"`
	Status       string `json:"status"`
	Error        string `json:"error,omitempty"`
	StartedAt    string `json:"started_at"`
	FinishedAt   string `json:"finished_at,omitempty"`
}

BaseBackupHistoryResource mirrors internal/api's baseBackupHistoryResource: GET/POST .../base-backups.

type BaseDomainBackfill added in v0.2.0

type BaseDomainBackfill struct {
	DryRun     bool                     `json:"dry_run"`
	BaseDomain string                   `json:"base_domain"`
	Items      []BaseDomainBackfillItem `json:"items"`
}

BaseDomainBackfill is the backfill response.

type BaseDomainBackfillItem added in v0.2.0

type BaseDomainBackfillItem struct {
	App    string           `json:"app"`
	Domain string           `json:"domain"`
	Status string           `json:"status"`
	DNS    *DomainDNSResult `json:"dns,omitempty"`
}

BaseDomainBackfillItem is one app of a backfill.

type BetaFeature added in v0.2.0

type BetaFeature struct {
	ID              string `json:"id"`
	Name            string `json:"name"`
	Summary         string `json:"summary"`
	Enabled         bool   `json:"enabled"`
	EnabledBy       string `json:"enabled_by"`
	Toggleable      bool   `json:"toggleable"`
	AppliesLive     bool   `json:"applies_live"`
	PendingRestart  bool   `json:"pending_restart"`
	RequiresRestart bool   `json:"requires_restart"`
	EnvHint         string `json:"env_hint"`
	DocsPath        string `json:"docs_path"`
	Maturity        string `json:"maturity"`
	Locked          bool   `json:"locked"`
}

BetaFeature is one gated feature as the API describes it.

type BitbucketAppRepoResource added in v0.2.0

type BitbucketAppRepoResource struct {
	FullName      string `json:"full_name"`
	Name          string `json:"name"`
	Private       bool   `json:"private"`
	DefaultBranch string `json:"default_branch"`
	CloneURL      string `json:"clone_url"`
	WebURL        string `json:"web_url"`
}

BitbucketAppRepoResource mirrors internal/api's bitbucketAppRepoResource: one entry of GET /api/v1/bitbucket-app/repos.

type BitbucketAppStatusResource added in v0.2.0

type BitbucketAppStatusResource struct {
	Connected  bool   `json:"connected"`
	Key        string `json:"key,omitempty"`
	CreatedAt  string `json:"created_at,omitempty"`
	Authorized bool   `json:"authorized"`
	BaseURL    string `json:"base_url,omitempty"`
}

BitbucketAppStatusResource mirrors internal/api's bitbucketAppStatusResource: GET /api/v1/bitbucket-app's response.

type BoundEnvEntry

type BoundEnvEntry struct {
	Key        string `json:"key"`
	Source     string `json:"source"`
	SourceName string `json:"source_name"`
	Field      string `json:"field"`
	Value      string `json:"value,omitempty"`
	Masked     bool   `json:"masked"`
}

BoundEnvEntry is one variable injected from a database link or bucket binding.

type BucketAppRef

type BucketAppRef struct {
	AppName   string `json:"app_name"`
	EnvPrefix string `json:"env_prefix"`
}

BucketAppRef is one app a bucket is bound to.

type BucketObject

type BucketObject struct {
	Key          string    `json:"key"`
	Size         int64     `json:"size"`
	LastModified time.Time `json:"last_modified"`
}

BucketObject is one object in a bucket.

type BucketObjects

type BucketObjects struct {
	Objects []BucketObject `json:"objects"`
	Next    string         `json:"next,omitempty"`
}

BucketObjects is one page of a bucket listing.

type BucketPresign

type BucketPresign struct {
	URL       string `json:"url"`
	Method    string `json:"method"`
	ExpiresAt string `json:"expires_at"`
}

BucketPresign is a time-limited URL for one object.

type BucketSweepResult

type BucketSweepResult struct {
	Deleted int64 `json:"deleted"`
	Bytes   int64 `json:"bytes"`
}

BucketSweepResult reports what a lifecycle sweep removed.

type BucketUsage

type BucketUsage struct {
	Bytes      int64 `json:"bytes"`
	Objects    int64 `json:"objects"`
	QuotaBytes int64 `json:"quota_bytes"`
}

BucketUsage is the stored size of a bucket against its quota.

type BuildCacheClearResult added in v0.2.0

type BuildCacheClearResult struct {
	Deleted int  `json:"deleted"`
	More    bool `json:"more"`
}

BuildCacheClearResult reports a cache clear. More means run it again.

type BuildCachePruneRequest

type BuildCachePruneRequest struct {
	Node           string `json:"node"`
	OlderThanHours *int   `json:"older_than_hours,omitempty"`
	Apply          bool   `json:"apply"`
}

BuildCachePruneRequest is the body of POST /api/v1/builds/cache/prune.

type BuildCachePruneResource

type BuildCachePruneResource struct {
	Node           string             `json:"node"`
	Applied        bool               `json:"applied"`
	OlderThanHours int                `json:"older_than_hours"`
	Candidates     []BuildCacheRecord `json:"candidates"`
	CandidateCount int                `json:"candidate_count"`
	WouldFreeBytes int64              `json:"would_free_bytes"`
	FreedBytes     int64              `json:"freed_bytes"`
	RemovedCount   int                `json:"removed_count"`
}

BuildCachePruneResource is the result of a prune preview or run.

type BuildCacheRecord

type BuildCacheRecord struct {
	ID          string     `json:"id"`
	Type        string     `json:"type"`
	Description string     `json:"description"`
	SizeBytes   int64      `json:"size_bytes"`
	InUse       bool       `json:"in_use"`
	UsageCount  int        `json:"usage_count"`
	LastUsedAt  *time.Time `json:"last_used_at,omitempty"`
}

BuildCacheRecord is one BuildKit cache record.

type BuildCacheRequest added in v0.2.0

type BuildCacheRequest struct {
	AppName  string `json:"app_name"`
	TargetID string `json:"target_id"`
	Mode     string `json:"mode,omitempty"`
	Enabled  *bool  `json:"enabled,omitempty"`
}

BuildCacheRequest sets a build cache setting. An empty AppName is the global default.

type BuildCacheResource

type BuildCacheResource struct {
	Node             string             `json:"node"`
	Supported        bool               `json:"supported"`
	Reason           string             `json:"reason,omitempty"`
	TotalBytes       int64              `json:"total_bytes"`
	InUseBytes       int64              `json:"in_use_bytes"`
	ReclaimableBytes int64              `json:"reclaimable_bytes"`
	RecordCount      int                `json:"record_count"`
	Records          []BuildCacheRecord `json:"records"`
}

BuildCacheResource is GET /api/v1/builds/cache.

type BuildCacheSetting added in v0.2.0

type BuildCacheSetting struct {
	AppName       string `json:"app_name"`
	TargetID      string `json:"target_id"`
	Enabled       bool   `json:"enabled"`
	Mode          string `json:"mode"`
	KeyPrefix     string `json:"key_prefix,omitempty"`
	LastBuildAt   string `json:"last_build_at,omitempty"`
	LastResult    string `json:"last_result,omitempty"`
	LastWarning   string `json:"last_warning,omitempty"`
	LastClearedAt string `json:"last_cleared_at,omitempty"`
	UpdatedAt     string `json:"updated_at"`
}

BuildCacheSetting points an app's (or the global) BuildKit remote cache at a storage destination. It never carries credentials.

type BuildCacheStats added in v0.2.0

type BuildCacheStats struct {
	Prefix       string    `json:"prefix"`
	Objects      int       `json:"objects"`
	Bytes        int64     `json:"bytes"`
	LastModified time.Time `json:"last_modified"`
	Truncated    bool      `json:"truncated"`
}

BuildCacheStats summarises the objects under an app's cache prefix.

type BuildCounts

type BuildCounts struct {
	Queued   int `json:"queued"`
	Running  int `json:"running"`
	Finished int `json:"finished"`
	Failed   int `json:"failed"`
}

BuildCounts summarises the build center rows.

type BuildHint

type BuildHint struct {
	Code        string `json:"code"`
	Title       string `json:"title"`
	Explanation string `json:"explanation"`
	Suggestion  string `json:"suggestion,omitempty"`
	Fix         string `json:"fix,omitempty"`
}

BuildHint is the deterministic diagnosis attached to a failed build.

type BuildLimitValues

type BuildLimitValues struct {
	MaxConcurrent  int `json:"max_concurrent"`
	TimeoutSeconds int `json:"timeout_seconds"`
}

BuildLimitValues are build limits; 0 means unlimited.

type BuildLimits

type BuildLimits struct {
	Effective BuildLimitValues `json:"effective"`
	Default   BuildLimitValues `json:"default"`
	Overrides struct {
		MaxConcurrent  *int `json:"max_concurrent,omitempty"`
		TimeoutSeconds *int `json:"timeout_seconds,omitempty"`
	} `json:"overrides"`
}

BuildLimits is the response of /api/v1/build-limits.

type BuildLimitsRequest

type BuildLimitsRequest struct {
	MaxConcurrent  *int `json:"max_concurrent,omitempty"`
	TimeoutSeconds *int `json:"timeout_seconds,omitempty"`
}

BuildLimitsRequest sets build limit overrides; nil fields are left alone.

type BuildListResource

type BuildListResource struct {
	Rows      []BuildResource `json:"rows"`
	Counts    BuildCounts     `json:"counts"`
	Nodes     []BuildNodeLoad `json:"nodes"`
	Limit     int             `json:"max_concurrent_per_node"`
	Platforms struct {
		Host          string `json:"host"`
		MultiPlatform bool   `json:"multi_platform"`
	} `json:"platforms"`
}

BuildListResource is GET /api/v1/builds.

type BuildNodeLoad

type BuildNodeLoad struct {
	Node    string `json:"node"`
	Running int    `json:"running"`
	Waiting int    `json:"waiting"`
	Limit   int    `json:"limit"`
}

BuildNodeLoad is one node's build slot usage.

type BuildResource

type BuildResource struct {
	ID              string     `json:"id"`
	App             string     `json:"app"`
	Status          string     `json:"status"`
	Source          string     `json:"source"`
	Branch          string     `json:"branch,omitempty"`
	CommitSHA       string     `json:"commit_sha,omitempty"`
	Image           string     `json:"image,omitempty"`
	QueuedAt        *time.Time `json:"queued_at,omitempty"`
	StartedAt       time.Time  `json:"started_at"`
	FinishedAt      *time.Time `json:"finished_at,omitempty"`
	DurationSeconds *float64   `json:"duration_seconds,omitempty"`
	QueuePosition   int        `json:"queue_position,omitempty"`
	CacheHitRatio   *float64   `json:"cache_hit_ratio,omitempty"`
	ImageBytes      int64      `json:"image_bytes,omitempty"`
	ImageDeltaBytes *int64     `json:"image_delta_bytes,omitempty"`
	Node            string     `json:"node,omitempty"`
	Platform        string     `json:"platform,omitempty"`
	Error           string     `json:"error,omitempty"`
	Hint            *BuildHint `json:"hint,omitempty"`
	LogsPath        string     `json:"logs_path"`
	CanCancel       bool       `json:"can_cancel"`
	CanRetry        bool       `json:"can_retry"`
}

BuildResource is one row of the build center.

type BuildRun

type BuildRun struct {
	StartedAt       time.Time `json:"started_at"`
	Tag             string    `json:"tag"`
	Status          string    `json:"status"`
	DurationSeconds float64   `json:"duration_seconds"`
	QueueWaitSecs   float64   `json:"queue_wait_seconds"`
	CachedSteps     int       `json:"cached_steps"`
	TotalSteps      int       `json:"total_steps"`
	Error           string    `json:"error,omitempty"`
}

BuildRun is one recorded build.

type BuildSpeed

type BuildSpeed struct {
	Builds           int                 `json:"builds"`
	WarmP50Seconds   float64             `json:"warm_p50_seconds"`
	ColdP50Seconds   float64             `json:"cold_p50_seconds"`
	WarmKnown        bool                `json:"warm_known"`
	TimeSavedSeconds float64             `json:"time_saved_seconds"`
	Findings         []BuildSpeedFinding `json:"findings"`
}

BuildSpeed is the response of GET /api/v1/apps/{name}/build-speed.

type BuildSpeedFinding

type BuildSpeedFinding struct {
	Code     string `json:"code"`
	Severity string `json:"severity"`
	FixKind  string `json:"fix_kind"`
	TargetID string `json:"target_id,omitempty"`
}

BuildSpeedFinding is one suggestion to make an app's builds faster.

type BuildStats

type BuildStats struct {
	App   string     `json:"app"`
	Limit int        `json:"limit"`
	Trend BuildTrend `json:"trend"`
	Runs  []BuildRun `json:"runs"`
}

BuildStats is the response of GET /api/v1/apps/{name}/build-stats.

type BuildTrend

type BuildTrend struct {
	Builds        int     `json:"builds"`
	Succeeded     int     `json:"succeeded"`
	Failed        int     `json:"failed"`
	TimedOut      int     `json:"timed_out"`
	Canceled      int     `json:"canceled"`
	Skewed        int     `json:"skewed"`
	P50Seconds    float64 `json:"p50_seconds"`
	P95Seconds    float64 `json:"p95_seconds"`
	MinSeconds    float64 `json:"min_seconds"`
	MaxSeconds    float64 `json:"max_seconds"`
	CacheHitRatio float64 `json:"cache_hit_ratio"`
	CacheKnown    bool    `json:"cache_known"`
}

BuildTrend summarises an app's recent builds.

type BuildTriggerRequest

type BuildTriggerRequest struct {
	RepoURL   string                   `json:"repo_url"`
	Ref       string                   `json:"ref"`
	ImageRepo string                   `json:"image_repo,omitempty"`
	Build     BuildTriggerRequestBuild `json:"build,omitempty"`
	// DetectedFramework mirrors triggerBuildRequest.DetectedFramework: the
	// human-readable framework name a prior DetectFramework call reported
	// for this exact repo/ref, stored on the resulting deploy_attempts row.
	DetectedFramework string `json:"detected_framework,omitempty"`
}

BuildTriggerRequest mirrors internal/api's triggerBuildRequest (internal/api/builds.go). Ref is required server-side (handleTriggerBuild rejects an empty one with 400), so every caller of TriggerBuild must resolve a real ref before sending this, never leave it blank.

type BuildTriggerRequestBuild

type BuildTriggerRequestBuild struct {
	Type string `json:"type,omitempty"`
	Path string `json:"path,omitempty"`
	// BaseDirectory scopes the build context to a subdirectory of the
	// repo, for a monorepo. Not meaningful for Type == "image".
	BaseDirectory string `json:"base_directory,omitempty"`
	Image         string `json:"image,omitempty"`
	// Args are Dockerfile build-time ARG values. Only meaningful for
	// Type == "dockerfile".
	Args map[string]string `json:"args,omitempty"`
}

BuildTriggerRequestBuild is BuildTriggerRequest's nested build.* input (internal/api/builds.go's triggerBuildBuildInput), matching the same fields app.yaml's own build: block has. Type left empty defaults server-side to a Dockerfile build. Image is only meaningful for Type == "image": a prebuilt registry reference deployed as-is, no repo/ref/build needed.

type BuildTriggerResponse

type BuildTriggerResponse struct {
	ID string `json:"id,omitempty"`
	// Status is "queued" when the build waits behind another deploy.
	Status        string `json:"status,omitempty"`
	QueuePosition int    `json:"queue_position,omitempty"`
	WaitReason    string `json:"wait_reason,omitempty"`
}

BuildTriggerResponse mirrors internal/api's triggerBuildResponse: handleTriggerBuild is asynchronous (202 Accepted, the fetch and build run in a background goroutine), so this carries only the new deploy attempt's id, not a finished image tag. Poll its outcome via "apps deploys list"/"apps deploys logs", the same deploy_attempts row a git-push-triggered deploy produces.

type BulkAppResult added in v0.2.0

type BulkAppResult struct {
	Name    string `json:"name"`
	Status  string `json:"status"`
	Message string `json:"message,omitempty"`
}

BulkAppResult is one app's outcome in a bulk response.

type BulkAppsRequest added in v0.2.0

type BulkAppsRequest struct {
	Action       string   `json:"action"`
	Names        []string `json:"names,omitempty"`
	Tag          string   `json:"tag,omitempty"`
	Environment  string   `json:"environment,omitempty"`
	Value        string   `json:"value,omitempty"`
	DryRun       bool     `json:"dry_run,omitempty"`
	ConfirmNames []string `json:"confirm_names,omitempty"`
	ConfirmCount int      `json:"confirm_count,omitempty"`
}

BulkAppsRequest is POST /api/v1/apps/bulk's body.

type BulkAppsResponse added in v0.2.0

type BulkAppsResponse struct {
	Action  string          `json:"action"`
	DryRun  bool            `json:"dry_run"`
	Results []BulkAppResult `json:"results"`
	Counts  map[string]int  `json:"counts"`
}

BulkAppsResponse is the 207 body of POST /api/v1/apps/bulk.

type CDNCache

type CDNCache struct {
	CoveredMinutes int     `json:"covered_minutes"`
	Hits           uint64  `json:"hits"`
	Misses         uint64  `json:"misses"`
	HitRate        float64 `json:"hit_rate"`
	HitBytes       uint64  `json:"hit_bytes"`
	OriginBytes    uint64  `json:"origin_bytes"`
}

CDNCache is the edge cache part of CDNOverview.

type CDNNode

type CDNNode struct {
	ID       string  `json:"id"`
	Name     string  `json:"name"`
	Region   string  `json:"region,omitempty"`
	Requests float64 `json:"requests"`
	Share    float64 `json:"share"`
	Apps     int     `json:"apps"`
}

CDNNode is one node's share of traffic in CDNOverview.

type CDNOverview

type CDNOverview struct {
	Window         string    `json:"window"`
	From           time.Time `json:"from"`
	To             time.Time `json:"to"`
	HasTraffic     bool      `json:"has_traffic"`
	Requests       float64   `json:"requests"`
	RatePerSec     float64   `json:"rate_per_sec"`
	ErrorRate5xx   float64   `json:"error_rate_5xx"`
	BytesOut       float64   `json:"bytes_out"`
	Cache          CDNCache  `json:"cache"`
	Nodes          []CDNNode `json:"nodes"`
	RegionsLabeled bool      `json:"regions_labeled"`
}

CDNOverview mirrors GET /api/v1/cdn/overview.

type CIToken

type CIToken struct {
	Token     string    `json:"token"`
	ExpiresAt time.Time `json:"expires_at"`
}

CIToken is the short-lived token POST /api/v1/ci/oidc-exchange returns.

type CITrust

type CITrust struct {
	ID          string    `json:"id"`
	Repository  string    `json:"repository"`
	RefPattern  string    `json:"ref_pattern"`
	Environment string    `json:"environment"`
	CreatedAt   time.Time `json:"created_at"`
}

CITrust mirrors internal/api's ciTrustResource.

type CITrustRequest

type CITrustRequest struct {
	Repository  string `json:"repository"`
	RefPattern  string `json:"ref_pattern"`
	Environment string `json:"environment,omitempty"`
}

CITrustRequest is the body of POST /api/v1/apps/{name}/ci/trusts.

type CIWorkflow

type CIWorkflow struct {
	YAML        string `json:"yaml"`
	APIURL      string `json:"api_url"`
	HasTrust    bool   `json:"has_trust"`
	NeedsDomain bool   `json:"needs_dashboard_url"`
}

CIWorkflow mirrors internal/api's ciWorkflowResource.

type CPHealth

type CPHealth struct {
	CheckedAt time.Time `json:"checked_at"`
	Status    string    `json:"status"`
	Runtime   struct {
		Goroutines int     `json:"goroutines"`
		HeapBytes  uint64  `json:"heap_bytes"`
		GCPauseMS  float64 `json:"gc_pause_ms"`
		CPUs       int     `json:"cpus"`
	} `json:"runtime"`
	DB struct {
		Queries     int64   `json:"queries"`
		SlowQueries int64   `json:"slow_queries"`
		P50MS       float64 `json:"p50_ms"`
		P95MS       float64 `json:"p95_ms"`
		P99MS       float64 `json:"p99_ms"`
		WaitCount   int64   `json:"wait_count"`
		WaitMS      float64 `json:"wait_ms"`
		WALBytes    int64   `json:"wal_bytes"`
		DBBytes     int64   `json:"db_bytes"`
	} `json:"db"`
	Reconcile struct {
		Passes      int64   `json:"passes"`
		Controllers int     `json:"controllers"`
		LastPassMS  float64 `json:"last_pass_ms"`
		P95MS       float64 `json:"p95_ms"`
		LagSeconds  float64 `json:"lag_seconds"`
		Guard       struct {
			PassesDeferred int64             `json:"passes_deferred"`
			RecentLimited  int               `json:"recent_limited"`
			OpenBreakers   int               `json:"open_breakers"`
			Breakers       []CPHealthBreaker `json:"breakers"`
		} `json:"guard"`
	} `json:"reconcile"`
	Streams struct {
		Active int64 `json:"active"`
		Cap    int64 `json:"cap"`
	} `json:"streams"`
	Footprint struct {
		RSSBytes       uint64  `json:"rss_bytes"`
		Threads        int     `json:"threads"`
		OpenFDs        int     `json:"open_fds"`
		CPUPercent     float64 `json:"cpu_percent"`
		TelemetryBytes int64   `json:"telemetry_bytes"`
		MemoryLimit    struct {
			LimitBytes int64  `json:"limit_bytes"`
			Source     string `json:"source"`
			Percent    int    `json:"percent"`
		} `json:"memory_limit"`
		Loops []CPHealthLoop `json:"loops"`
	} `json:"footprint"`
	Findings []CPHealthFinding `json:"findings"`
}

CPHealth is the /api/v1/system/control-plane-health resource.

type CPHealthBreaker

type CPHealthBreaker struct {
	Name      string    `json:"name"`
	State     string    `json:"state"`
	Failures  int       `json:"failures"`
	OpenUntil time.Time `json:"open_until"`
	LastError string    `json:"last_error,omitempty"`
	Trips     int64     `json:"trips"`
	Panics    int64     `json:"panics"`
	Throttled int64     `json:"throttled"`
	Skipped   int64     `json:"skipped"`
}

CPHealthBreaker is one controller's circuit breaker.

type CPHealthFinding

type CPHealthFinding struct {
	ID        string  `json:"id"`
	Severity  string  `json:"severity"`
	Value     float64 `json:"value"`
	Threshold float64 `json:"threshold"`
	Fix       string  `json:"fix,omitempty"`
}

CPHealthFinding is one saturated measurement on the control plane.

type CPHealthLoop

type CPHealthLoop struct {
	Name         string    `json:"name"`
	IntervalSecs float64   `json:"interval_seconds"`
	Runs         int64     `json:"runs"`
	Errors       int64     `json:"errors"`
	LastRunAt    time.Time `json:"last_run_at"`
	LastDuration float64   `json:"last_duration_ms"`
	CostPercent  float64   `json:"cost_percent"`
	Running      bool      `json:"running"`
	LastError    string    `json:"last_error,omitempty"`
}

CPHealthLoop is one background loop with its last run and cost.

type CPUBounds

type CPUBounds struct {
	DefaultCPUMilli  int   `json:"default_cpu_milli"`
	DefaultMemoryMiB int   `json:"default_memory_mib"`
	MaxCPUMilli      int   `json:"max_cpu_milli"`
	MaxMemoryMiB     int   `json:"max_memory_mib"`
	FreeRAMFloorMiB  int64 `json:"free_ram_floor_mib"`
}

CPUBounds mirrors internal/models.CPUBounds.

type CPUFit

type CPUFit struct {
	Verdict        string   `json:"verdict"`
	Reason         string   `json:"reason"`
	Suggestion     string   `json:"suggestion,omitempty"`
	SuggestedID    string   `json:"suggested_id,omitempty"`
	CPUMilli       int      `json:"cpu_milli"`
	MemoryMiB      int      `json:"memory_mib"`
	ContextTokens  int      `json:"context_tokens"`
	WeightsBytes   int64    `json:"weights_bytes"`
	WeightsSource  string   `json:"weights_source"`
	KVBytes        int64    `json:"kv_bytes"`
	OverheadBytes  int64    `json:"overhead_bytes"`
	NeedBytes      int64    `json:"need_bytes"`
	CapBytes       int64    `json:"cap_bytes"`
	DiskBytes      int64    `json:"disk_bytes"`
	DiskOK         *bool    `json:"disk_ok"`
	TokensPerSecLo float64  `json:"tokens_per_sec_low"`
	TokensPerSecHi float64  `json:"tokens_per_sec_high"`
	Estimate       bool     `json:"estimate"`
	Arithmetic     string   `json:"arithmetic"`
	Warnings       []string `json:"warnings"`
	Note           string   `json:"note"`
}

CPUFit mirrors internal/models.CPUFit.

type CPUFitReport

type CPUFitReport struct {
	CPUFit
	NodeID         string      `json:"node_id"`
	HostKnown      bool        `json:"host_known"`
	HostCPUs       int         `json:"host_cpus"`
	HostMemBytes   int64       `json:"host_memory_bytes"`
	HostMemFree    int64       `json:"host_memory_available_bytes"`
	DiskFreeBytes  *int64      `json:"disk_free_bytes"`
	Entry          *LocalModel `json:"entry,omitempty"`
	LicenseCurated bool        `json:"license_curated"`
	LicenseNotice  string      `json:"license_notice,omitempty"`
}

CPUFitReport mirrors internal/models.CPUFitReport.

type CacheBucket added in v0.2.0

type CacheBucket struct {
	Minute    int64  `json:"minute"`
	Hits      uint64 `json:"hits"`
	Misses    uint64 `json:"misses"`
	HitBytes  uint64 `json:"hit_bytes"`
	MissBytes uint64 `json:"miss_bytes"`
}

CacheBucket is one minute of cache activity.

type CacheLimits

type CacheLimits struct {
	MaxBytes       int64  `json:"max_bytes"`
	UsedBytes      int64  `json:"used_bytes"`
	MaxObjectBytes int64  `json:"max_object_bytes"`
	TagHeader      string `json:"tag_header"`
	Location       string `json:"location"`
}

CacheLimits are the instance caps and where entries live.

type CacheNumbers

type CacheNumbers struct {
	Hits        uint64  `json:"hits"`
	Misses      uint64  `json:"misses"`
	Stale       uint64  `json:"stale"`
	Bypasses    uint64  `json:"bypasses"`
	HitRate     float64 `json:"hit_rate"`
	HitBytes    uint64  `json:"hit_bytes"`
	OriginBytes uint64  `json:"origin_bytes"`
	Entries     int     `json:"entries"`
	Bytes       int64   `json:"bytes"`
}

CacheNumbers are hit, miss, stale and bypass counters plus bytes.

type CachePolicyResource added in v0.2.0

type CachePolicyResource struct {
	Domain     string              `json:"domain"`
	Kind       string              `json:"kind"`
	Configured bool                `json:"configured"`
	Spec       trafficpolicy.Cache `json:"spec"`
	UpdatedAt  string              `json:"updated_at,omitempty"`
}

CachePolicyResource is GET/PUT .../domains/{domain}/cache.

type CachePresetResource

type CachePresetResource struct {
	App     string `json:"app"`
	Domains []struct {
		Domain  string `json:"domain"`
		Applied bool   `json:"applied"`
		Rules   int    `json:"rules"`
	} `json:"domains"`
}

CachePresetResource reports which domains the preset changed.

type CachePurgeRecord

type CachePurgeRecord struct {
	Domain  string `json:"domain"`
	Scope   string `json:"scope"`
	Value   string `json:"value,omitempty"`
	Removed int    `json:"removed"`
	Actor   string `json:"actor"`
	At      string `json:"at"`
}

CachePurgeRecord is one row of the purge history.

type CachePurgesResource

type CachePurgesResource struct {
	App    string             `json:"app"`
	Purges []CachePurgeRecord `json:"purges"`
}

CachePurgesResource is GET /api/v1/apps/{name}/cache/purges.

type CacheStats added in v0.2.0

type CacheStats struct {
	Hits     uint64 `json:"hits"`
	Misses   uint64 `json:"misses"`
	Bypasses uint64 `json:"bypasses"`
	Stale    uint64 `json:"stale"`
	// HitBytes were served from the cache, OriginBytes fetched from the app.
	HitBytes    uint64        `json:"hit_bytes"`
	OriginBytes uint64        `json:"origin_bytes"`
	Entries     int           `json:"entries"`
	Bytes       int64         `json:"bytes"`
	Series      []CacheBucket `json:"series"`
}

CacheStats is one domain's in-process cache activity.

type CanaryOutcome

type CanaryOutcome struct {
	Outcome string    `json:"outcome"`
	Reason  string    `json:"reason,omitempty"`
	Image   string    `json:"image,omitempty"`
	At      time.Time `json:"at"`
}

CanaryOutcome is how an app's last canary ended.

type CanaryProgress

type CanaryProgress struct {
	Stage          int     `json:"stage"`
	StageCount     int     `json:"stage_count"`
	ElapsedSecs    int     `json:"elapsed_secs"`
	IntervalSecs   int     `json:"interval_secs"`
	CanaryRequests uint64  `json:"canary_requests"`
	CanaryErrRate  float64 `json:"canary_error_rate"`
	CanaryP95MS    float64 `json:"canary_p95_ms"`
	StableRequests uint64  `json:"stable_requests"`
	StableErrRate  float64 `json:"stable_error_rate"`
	StableP95MS    float64 `json:"stable_p95_ms"`
	Next           string  `json:"next"`
	Breaching      bool    `json:"breaching"`
}

CanaryProgress mirrors internal/canary's Progress.

type CanaryResource added in v0.2.0

type CanaryResource struct {
	Active       bool            `json:"active"`
	Image        string          `json:"image,omitempty"`
	Weight       int             `json:"weight"`
	CreatedAt    *time.Time      `json:"created_at,omitempty"`
	Staged       bool            `json:"staged,omitempty"`
	Stages       []int           `json:"stages,omitempty"`
	Stage        int             `json:"stage,omitempty"`
	IntervalSecs int             `json:"interval_secs,omitempty"`
	MaxErrorRate float64         `json:"max_error_rate,omitempty"`
	MaxP95Ratio  float64         `json:"max_p95_ratio,omitempty"`
	StatusReason string          `json:"status_reason,omitempty"`
	Progress     *CanaryProgress `json:"progress,omitempty"`
	LastOutcome  *CanaryOutcome  `json:"last_outcome,omitempty"`
}

CanaryResource mirrors internal/api's canaryResource.

type CanaryStartRequest

type CanaryStartRequest struct {
	Image        string  `json:"image"`
	Weight       int     `json:"weight,omitempty"`
	Staged       bool    `json:"staged,omitempty"`
	Stages       []int   `json:"stages,omitempty"`
	Interval     string  `json:"interval,omitempty"`
	MaxErrorRate float64 `json:"max_error_rate,omitempty"`
	MaxP95Ratio  float64 `json:"max_p95_ratio,omitempty"`
}

CanaryStartRequest is the body of POST /api/v1/apps/{name}/canary. Weight starts a manual canary; Stages (or Staged) starts one the control plane walks up and rolls back on its own. Zero values use the server defaults.

type CancelSupersededResource added in v0.2.0

type CancelSupersededResource struct {
	Enabled bool `json:"enabled"`
}

CancelSupersededResource mirrors internal/api's cancelSupersededResource.

type CanonicalRequest added in v0.2.0

type CanonicalRequest struct {
	Preset     string `json:"preset"`
	StatusCode int    `json:"status_code,omitempty"`
	Attach     *bool  `json:"attach,omitempty"`
	Replace    bool   `json:"replace,omitempty"`
}

CanonicalRequest applies a www and apex preset.

type CanonicalState added in v0.2.0

type CanonicalState struct {
	Counterpart         string `json:"counterpart,omitempty"`
	CounterpartAttached bool   `json:"counterpart_attached"`
	AttachedElsewhere   string `json:"counterpart_app,omitempty"`
	Preset              string `json:"preset"`
	DNSHint             string `json:"dns_hint,omitempty"`
	Unavailable         string `json:"unavailable,omitempty"`
}

CanonicalState is the www and apex setup for a domain.

type CapacityForecastMetric added in v0.2.0

type CapacityForecastMetric struct {
	CurrentUsedBytes float64   `json:"current_used_bytes"`
	TotalBytes       float64   `json:"total_bytes"`
	SlopeBytesPerDay float64   `json:"slope_bytes_per_day"`
	DaysUntilFull    float64   `json:"days_until_full"`
	ProjectedFullAt  time.Time `json:"projected_full_at"`
	SampleCount      int       `json:"sample_count"`
	CoverageWindow   string    `json:"coverage_window"`
}

CapacityForecastMetric mirrors internal/api's capacityForecastMetric: one resource's (disk or memory) rough days-until-full projection from internal/forecast's ordinary-least-squares trend fit. Absent (nil) from NodeCapacityForecastResource whenever the fitted trend is flat or improving, or there isn't enough history yet, never a zero-value struct with DaysUntilFull: 0.

type CascadeDeleteFailure added in v0.2.0

type CascadeDeleteFailure struct {
	Kind  string `json:"kind"`
	Name  string `json:"name"`
	Error string `json:"error"`
}

CascadeDeleteFailure is one member a cascading delete could not remove.

type CascadeDeleteResult added in v0.2.0

type CascadeDeleteResult struct {
	Status           string                 `json:"status"`
	DeletedApps      []string               `json:"deleted_apps"`
	DeletedDatabases []string               `json:"deleted_databases"`
	TeardownPending  []string               `json:"teardown_pending,omitempty"`
	Failed           []CascadeDeleteFailure `json:"failed,omitempty"`
}

CascadeDeleteResult mirrors internal/api's cascadeResponse. The zero value is what a 204 (nothing inside) decodes to.

type CertificateResource added in v0.2.0

type CertificateResource struct {
	Domain    string    `json:"domain"`
	SANs      []string  `json:"sans,omitempty"`
	Issuer    string    `json:"issuer,omitempty"`
	NotBefore time.Time `json:"not_before"`
	NotAfter  time.Time `json:"not_after"`
	Status    string    `json:"status"`
	// Renewal is "ok" or "stalled".
	Renewal string `json:"renewal"`
	// Apps is every app or static site owning Domain; see
	// certificateStatus.Apps's own doc comment.
	Apps []string `json:"apps,omitempty"`
	// Source is "acme", "custom" or "proxy"; see certificateStatus.Source.
	Source string `json:"source"`
	// TLSOwner is who terminates TLS: acme, internal, proxy or custom.
	TLSOwner string `json:"tls_owner,omitempty"`
	// ACMEFailure is the CA's last error for this domain, when it has one.
	ACMEFailure *ACMEFailure `json:"acme_failure,omitempty"`
	// ExpiryClass is "incident" when this certificate's expiry needs an
	// operator, empty otherwise.
	ExpiryClass string `json:"expiry_class,omitempty"`
}

CertificateResource mirrors internal/api's certificateStatus (internal/api/certificates.go): one entry of GET /api/v1/certificates. Status is "healthy", "expiring_soon", or "expired".

type ChangelogEntryResource added in v0.2.0

type ChangelogEntryResource struct {
	Version string   `json:"version"`
	Date    string   `json:"date"`
	Bullets []string `json:"bullets"`
}

ChangelogEntryResource mirrors internal/api's changelogEntryResource: one released version's notes.

type ChangelogResource added in v0.2.0

type ChangelogResource struct {
	CurrentVersion string                   `json:"current_version"`
	Entries        []ChangelogEntryResource `json:"entries"`
}

ChangelogResource mirrors internal/api's changelogResource (GET /api/v1/changelog): the running version plus the most recent entries parsed from the repo's own CHANGELOG.md.

type ClaimOrphanedContainerRequest added in v0.2.0

type ClaimOrphanedContainerRequest struct {
	Name string `json:"name,omitempty"`
}

ClaimOrphanedContainerRequest is POST /api/v1/system/containers/{name}/claim's optional request body. A blank Name lets the server derive one from the container's own name.

type CleanupOrphanedVolumesRequest added in v0.2.0

type CleanupOrphanedVolumesRequest struct {
	Names []string `json:"names"`
}

CleanupOrphanedVolumesRequest mirrors internal/api's cleanupOrphanedVolumesRequest: the exact, operator-confirmed set of volume names to remove.

type CleanupOrphanedVolumesResult added in v0.2.0

type CleanupOrphanedVolumesResult struct {
	Removed        []string `json:"removed"`
	ReclaimedBytes uint64   `json:"reclaimed_bytes"`
	Skipped        []string `json:"skipped,omitempty"`
	Errors         []string `json:"errors,omitempty"`
}

CleanupOrphanedVolumesResult mirrors internal/api's cleanupOrphanedVolumesResponse.

type Client

type Client struct {
	// contains filtered or unexported fields
}

Client is a minimal HTTP client for the control plane's versioned API (internal/api, mounted at /api/v1). It carries no session/cookie state: every request is a single bearer-token call, matching how this project's own token scheme (internal/api/abilities.go) is meant to be used by a non-interactive caller.

func NewClient

func NewClient(baseURL, token string, opts ...Option) *Client

NewClient builds a Client. baseURL should not have a trailing slash (trimmed defensively if it does). The timeout is long, not the usual few seconds a typical REST call would use: POST .../builds is synchronous and blocking (internal/api/builds.go's own doc comment), and a real Dockerfile build can legitimately take minutes.

func (*Client) AbortCanary added in v0.2.0

func (c *Client) AbortCanary(ctx context.Context, appName string) (CanaryResource, error)

AbortCanary calls DELETE /api/v1/apps/{name}/canary.

func (*Client) AcceptTeamInvite added in v0.2.0

func (c *Client) AcceptTeamInvite(ctx context.Context, req AcceptTeamInviteRequest) error

AcceptTeamInvite calls POST /api/v1/team-invites/accept.

func (*Client) AccountExportStatus

func (c *Client) AccountExportStatus(ctx context.Context, id string) (AccountExport, error)

AccountExportStatus calls GET /api/v1/auth/export/{id}.

func (*Client) AckControlPlaneEscrow added in v0.2.0

func (c *Client) AckControlPlaneEscrow(ctx context.Context) (ControlPlaneDR, error)

AckControlPlaneEscrow calls POST /api/v1/system/control-plane-dr/escrow/ack.

func (*Client) AckUpgrade added in v0.2.0

func (c *Client) AckUpgrade(ctx context.Context, id string) (UpgradeHistoryItem, error)

AckUpgrade calls POST /api/v1/updates/history/{id}/ack.

func (*Client) AddMarketplaceSource

func (c *Client) AddMarketplaceSource(ctx context.Context, name, url, rootKey string) (MarketplaceSource, error)

AddMarketplaceSource calls POST /api/v1/plugin-marketplace/sources.

func (*Client) AddPluginKey

func (c *Client) AddPluginKey(ctx context.Context, name, publicKey string) (PluginKey, error)

AddPluginKey calls POST /api/v1/plugin-keys.

func (*Client) AdoptExternalDatabase added in v0.2.0

func (c *Client) AdoptExternalDatabase(ctx context.Context, req ExternalDatabaseRequest) (ExternalDatabase, error)

AdoptExternalDatabase calls POST /api/v1/external-databases/adopt.

func (*Client) AllowFirewallEdgeIP

func (c *Client) AllowFirewallEdgeIP(ctx context.Context, e FirewallEdgeIPEntry) (FirewallEdgeRule, error)

AllowFirewallEdgeIP calls POST .../firewall/edge/allow.

func (*Client) AllowSecretFingerprint

func (c *Client) AllowSecretFingerprint(ctx context.Context, name, fingerprint, reason string) (SecretScanAllowEntry, error)

AllowSecretFingerprint calls POST /api/v1/apps/{name}/secret-scan/allow.

func (*Client) AnalyzeGitSource

func (c *Client) AnalyzeGitSource(ctx context.Context, req ImportAnalyzeRequest) (ImportAnalysis, error)

AnalyzeGitSource calls POST /api/v1/git-sources/analyze. It creates nothing.

func (*Client) AnalyzeIAM added in v0.2.0

func (c *Client) AnalyzeIAM(ctx context.Context) (IAMAnalysis, error)

AnalyzeIAM calls GET /api/v1/iam/analyze.

func (*Client) AnalyzeImport added in v0.2.0

func (c *Client) AnalyzeImport(ctx context.Context, req ImportAnalyzeRequest) (ImportAnalysis, error)

AnalyzeImport calls POST /api/v1/imports/analyze. It creates nothing.

func (*Client) AppImportCutoverPlan added in v0.2.0

func (c *Client) AppImportCutoverPlan(ctx context.Context, session, item string) (ImportCutoverPlan, error)

AppImportCutoverPlan calls GET .../items/{item}/cutover/plan.

func (*Client) AppImportCutoverRun added in v0.2.0

func (c *Client) AppImportCutoverRun(ctx context.Context, session, item, run string) (ImportCutoverRun, error)

AppImportCutoverRun calls GET .../items/{item}/cutover/runs/{run}.

func (*Client) AppImportCutoverRuns added in v0.2.0

func (c *Client) AppImportCutoverRuns(ctx context.Context, session, item string) ([]ImportCutoverRun, error)

AppImportCutoverRuns calls GET .../items/{item}/cutover/runs, newest first.

func (*Client) AppImportImages added in v0.2.0

func (c *Client) AppImportImages(ctx context.Context, id string) (AppImportImages, error)

AppImportImages calls GET .../sessions/{id}/images.

func (*Client) AppImportImagesStatus added in v0.2.0

func (c *Client) AppImportImagesStatus(ctx context.Context, id string) (AppImportImages, error)

AppImportImagesStatus calls GET .../sessions/{id}/images/status.

func (*Client) AppImportReceipt added in v0.2.0

func (c *Client) AppImportReceipt(ctx context.Context, id string) (json.RawMessage, error)

AppImportReceipt calls GET .../sessions/{id}/receipt and returns the JSON as is.

func (*Client) AppImportVolumeCopyStatus

func (c *Client) AppImportVolumeCopyStatus(ctx context.Context, id string) (AppImportVolumeCopy, error)

AppImportVolumeCopyStatus calls GET .../sessions/{id}/volumes/copy.

func (*Client) ApplyAdvisorFinding added in v0.2.0

func (c *Client) ApplyAdvisorFinding(ctx context.Context, id string, confirm bool) (AdvisorApplyResult, error)

ApplyAdvisorFinding previews (confirm false) or applies a finding's action.

func (*Client) ApplyAlertTemplate

func (c *Client) ApplyAlertTemplate(ctx context.Context, name, profile, channelID string) (ApplyAlertTemplateResult, error)

ApplyAlertTemplate calls POST /api/v1/apps/{name}/alerts/apply-template.

func (*Client) ApplyAppCachePreset

func (c *Client) ApplyAppCachePreset(ctx context.Context, name, domain string) (CachePresetResource, error)

ApplyAppCachePreset calls POST /api/v1/apps/{name}/cache/preset; domain may be empty for every domain of the app.

func (*Client) ApplyDNSTemplate added in v0.2.0

func (c *Client) ApplyDNSTemplate(ctx context.Context, provider, zone, id string, params map[string]string, apply bool) (DNSImportResult, error)

ApplyDNSTemplate calls POST /api/v1/dns/zones/{zone}/templates/{id}.

func (*Client) ApplyDatabaseRules added in v0.2.0

func (c *Client) ApplyDatabaseRules(ctx context.Context, name string, req DatabaseRulesRequest) (DatabaseRulesPlan, error)

ApplyDatabaseRules calls PUT /api/v1/databases/{name}/network/rules.

func (*Client) ApplyDetectedProxy

func (c *Client) ApplyDetectedProxy(ctx context.Context) (EdgeSettings, error)

ApplyDetectedProxy calls POST .../edge/trusted-proxies/apply-detected.

func (*Client) ApplyDiagnosisFix added in v0.2.0

func (c *Client) ApplyDiagnosisFix(ctx context.Context, name string, fix DiagnosisFix, inputs map[string]string, redeploy bool) ([]string, error)

ApplyDiagnosisFix applies a patch or input fix to the app through the ordinary GET then PUT path, so the caller's own permissions and the audit log apply. inputs supplies values for changes marked NeedsInput, keyed by field. It returns the fields changed. The app is round-tripped as raw JSON so fields this client does not model are never dropped.

func (*Client) ApplyExposureRestriction added in v0.2.0

func (c *Client) ApplyExposureRestriction(ctx context.Context, req ExposureRestrictRequest) (ExposurePlan, error)

ApplyExposureRestriction calls PUT .../exposure/restrictions/{protocol}/{port}.

func (*Client) ApplyFix

func (c *Client) ApplyFix(ctx context.Context, id string, params map[string]string) (FixResult, error)

ApplyFix calls POST /api/v1/fixes/{id}/apply.

func (*Client) ApplyIaC added in v0.2.0

func (c *Client) ApplyIaC(ctx context.Context, req IaCRequest) (iac.ApplyResult, error)

ApplyIaC calls POST /api/v1/apply.

func (*Client) ApplyMigrationSession added in v0.2.0

func (c *Client) ApplyMigrationSession(ctx context.Context, id, password string) (HubSession, error)

ApplyMigrationSession starts the bulk copy. A non-empty password replaces the one held in memory.

func (*Client) ApplyPendingChanges added in v0.2.0

func (c *Client) ApplyPendingChanges(ctx context.Context, name string) (ApplyPendingResult, error)

ApplyPendingChanges calls POST /api/v1/apps/{name}/apply-pending.

func (*Client) ApplyPipelineRunFix

func (c *Client) ApplyPipelineRunFix(ctx context.Context, app, runID, kind, job string, rerun bool) (PipelineFixResult, error)

ApplyPipelineRunFix calls POST .../pipeline-runs/{id}/fixes/apply.

func (*Client) ApplyPlatformImport added in v0.2.0

func (c *Client) ApplyPlatformImport(ctx context.Context, req PlatformImportRequest) (PlatformImportReport, error)

ApplyPlatformImport calls POST /api/v1/imports/platform/apply.

func (*Client) ApplyPolicyTemplate added in v0.2.0

ApplyPolicyTemplate calls POST /api/v1/iam/policy-templates/{id}/apply.

func (*Client) ApplyPrivateNetworks

func (c *Client) ApplyPrivateNetworks(ctx context.Context) (PrivateNetworkChange, error)

ApplyPrivateNetworks calls POST /api/v1/private-networks/apply.

func (*Client) ApplyProxyIntegration added in v0.2.0

func (c *Client) ApplyProxyIntegration(ctx context.Context) (ProxyIntegration, error)

ApplyProxyIntegration rewrites the managed route files now.

func (*Client) ApplyReachFix

func (c *Client) ApplyReachFix(ctx context.Context, fix ReachFix) error

ApplyReachFix makes the same call the dashboard's Fix button makes for an auto fix.

func (*Client) ApplyRecommendedShield

func (c *Client) ApplyRecommendedShield(ctx context.Context, app string, dryRun, blockBots bool) (ShieldRecommendedResource, error)

ApplyRecommendedShield calls POST /api/v1/apps/{name}/shield/recommended.

func (*Client) ApproveDeployApproval added in v0.2.0

func (c *Client) ApproveDeployApproval(ctx context.Context, id string) (DeployApprovalDecisionResult, error)

ApproveDeployApproval calls POST /api/v1/deploy-approvals/{id}/approve: applies the gated deploy/promote through the normal reconcile path. Fails with 403 if the caller is the same actor who requested it, or 409 if it's no longer pending (already decided, or expired).

func (*Client) ApprovePlugin

func (c *Client) ApprovePlugin(ctx context.Context, name string, abilities []string) (Plugin, error)

ApprovePlugin calls POST /api/v1/plugins/{name}/approve.

func (*Client) ApprovePreviewEnvironment added in v0.2.0

func (c *Client) ApprovePreviewEnvironment(ctx context.Context, appName string, prNumber int) (ApprovePreviewResult, error)

ApprovePreviewEnvironment calls POST /api/v1/apps/{name}/previews/{number}/approve with the confirmation the server requires.

func (*Client) ApprovePreviewEnvironmentShared added in v0.2.0

func (c *Client) ApprovePreviewEnvironmentShared(ctx context.Context, appName string, prNumber int, shareSecrets bool) (ApprovePreviewResult, error)

ApprovePreviewEnvironmentShared is ApprovePreviewEnvironment that can also give this one deploy the app's environment variables and secrets.

func (*Client) AttachAppIntegration added in v0.2.0

func (c *Client) AttachAppIntegration(ctx context.Context, name, integrationKey string, fields map[string]string) (AppIntegrationResource, error)

AttachAppIntegration calls POST /api/v1/apps/{name}/integrations: attaches integrationKey with the given field values, storing them through the same envelope encryption every other app secret uses.

func (*Client) AttachAppTag added in v0.2.0

func (c *Client) AttachAppTag(ctx context.Context, name, tagName string) (TagResource, error)

AttachAppTag calls POST /api/v1/apps/{name}/tags: attaches tagName, creating it first if this is the first time it's been used.

func (*Client) AttachPolicy

func (c *Client) AttachPolicy(ctx context.Context, id string, req AttachPolicyRequest) error

AttachPolicy calls POST /api/v1/iam/policies/{id}/attachments.

func (*Client) BackfillBaseDomain added in v0.2.0

func (c *Client) BackfillBaseDomain(ctx context.Context, confirm bool) (BaseDomainBackfill, error)

BackfillBaseDomain calls POST /api/v1/settings/ingress/apps-base-domain/backfill.

func (*Client) BackupCoverage added in v0.2.0

func (c *Client) BackupCoverage(ctx context.Context) (BackupCoverageResponse, error)

BackupCoverage calls GET /api/v1/backups/coverage.

func (*Client) BackupHealth added in v0.2.0

func (c *Client) BackupHealth(ctx context.Context) (BackupHealthResponse, error)

BackupHealth calls GET /api/v1/backups/health.

func (*Client) BaseURL

func (c *Client) BaseURL() string

BaseURL returns the control plane origin this client talks to.

func (*Client) BenchmarkModel

func (c *Client) BenchmarkModel(ctx context.Context, name string) (ModelBenchmarkResult, error)

BenchmarkModel calls POST /api/v1/models/{name}/benchmark.

func (*Client) BindAppBucket

func (c *Client) BindAppBucket(ctx context.Context, app, id, envPrefix string) (StorageBucket, error)

BindAppBucket calls PUT /api/v1/apps/{name}/buckets/{id}.

func (*Client) BlockFirewallEdgeIP

func (c *Client) BlockFirewallEdgeIP(ctx context.Context, e FirewallEdgeIPEntry, force bool) (FirewallEdgeRule, error)

BlockFirewallEdgeIP calls POST .../firewall/edge/block.

func (*Client) BrandShortName added in v0.2.0

func (c *Client) BrandShortName(ctx context.Context) (string, error)

BrandShortName reads the control plane's brand short name from the public GET /api/v1/brand, used to find the branded pipeline directory in a repo.

func (*Client) BrowseArchive

func (c *Client) BrowseArchive(ctx context.Context, id, table string, offset, limit int) (ArchiveRows, error)

BrowseArchive calls GET /api/v1/archives/{id}/rows.

func (*Client) BucketUsage

func (c *Client) BucketUsage(ctx context.Context, id string) (BucketUsage, error)

BucketUsage calls GET /api/v1/storage/buckets/{id}/usage.

func (*Client) BuildControlPlaneEscrow added in v0.2.0

func (c *Client) BuildControlPlaneEscrow(ctx context.Context, recipients []string, upload bool) (ControlPlaneEscrowBundle, error)

BuildControlPlaneEscrow calls POST /api/v1/system/control-plane-dr/escrow. recipients, when non-empty, replace the configured ones for this bundle.

func (*Client) BulkApps added in v0.2.0

func (c *Client) BulkApps(ctx context.Context, req BulkAppsRequest) (BulkAppsResponse, error)

BulkApps calls POST /api/v1/apps/bulk.

func (*Client) BulkTagResources

func (c *Client) BulkTagResources(ctx context.Context, req ConsoleBulkTagRequest) (ConsoleBulkTagResponse, error)

BulkTagResources calls POST /api/v1/resources/tags/bulk.

func (*Client) CancelAppImportImages added in v0.2.0

func (c *Client) CancelAppImportImages(ctx context.Context, id string) (AppImportImages, error)

CancelAppImportImages calls POST .../sessions/{id}/images/cancel.

func (*Client) CancelBuild

func (c *Client) CancelBuild(ctx context.Context, app, id string) error

CancelBuild calls POST /api/v1/apps/{app}/builds/{id}/cancel.

func (*Client) CancelDeploy added in v0.2.0

func (c *Client) CancelDeploy(ctx context.Context, appName, deployID string) (DeployAttemptResource, error)

CancelDeploy calls POST /api/v1/apps/{name}/deploys/{deployId}/cancel and returns the attempt as it is after the cancel.

func (*Client) CancelIntegrityRestore

func (c *Client) CancelIntegrityRestore(ctx context.Context) error

CancelIntegrityRestore calls DELETE /api/v1/system/integrity/restore.

func (*Client) CancelPipelineRun added in v0.2.0

func (c *Client) CancelPipelineRun(ctx context.Context, app, id string) error

CancelPipelineRun calls POST .../pipeline-runs/{id}/cancel.

func (*Client) CancelUpgradeSchedule added in v0.2.0

func (c *Client) CancelUpgradeSchedule(ctx context.Context) (UpgradeSchedule, error)

CancelUpgradeSchedule calls DELETE /api/v1/updates/schedule.

func (*Client) CapturePreview added in v0.2.0

func (c *Client) CapturePreview(ctx context.Context, name string) (PreviewStatus, error)

CapturePreview calls POST /api/v1/apps/{name}/preview/capture.

func (*Client) CheckAppExposure

func (c *Client) CheckAppExposure(ctx context.Context, name string) (AppExposureCheck, error)

CheckAppExposure calls POST /api/v1/apps/{name}/exposure/check.

func (*Client) CheckCPUModelFit

func (c *Client) CheckCPUModelFit(ctx context.Context, req ModelFitRequest) (CPUFitReport, error)

CheckCPUModelFit calls POST /api/v1/models/fit in CPU mode.

func (*Client) CheckDNS added in v0.2.0

func (c *Client) CheckDNS(ctx context.Context, name, typ, zone string) (DNSPropagation, error)

CheckDNS calls GET /api/v1/dns/check.

func (*Client) CheckDeployPolicy

func (c *Client) CheckDeployPolicy(ctx context.Context, req PolicyCheckRequest) (PolicyCheckResult, error)

CheckDeployPolicy calls POST /api/v1/deploy-policies/check.

func (*Client) CheckDomain added in v0.2.0

func (c *Client) CheckDomain(ctx context.Context, name, domain string) (DomainCheckResource, error)

CheckDomain calls GET /api/v1/apps/{name}/domains/{domain}/check: a real DNS lookup reporting whether domain currently resolves to this control plane's own advertised address.

func (*Client) CheckEnv

func (c *Client) CheckEnv(ctx context.Context, name string) (EnvCheckResource, error)

CheckEnv calls GET /api/v1/apps/{name}/env/check.

func (*Client) CheckImageAutoUpdate added in v0.2.0

func (c *Client) CheckImageAutoUpdate(ctx context.Context, appName string) (ImageAutoUpdateResource, error)

CheckImageAutoUpdate calls POST /api/v1/apps/{name}/auto-update/check: one registry check now, redeploying if the tag moved.

func (*Client) CheckIntegrity

func (c *Client) CheckIntegrity(ctx context.Context, full bool) (IntegrityStatus, error)

CheckIntegrity calls POST /api/v1/system/integrity/check.

func (*Client) CheckLoadBalancer added in v0.2.0

func (c *Client) CheckLoadBalancer(ctx context.Context, name string) (LoadBalancerCheck, error)

CheckLoadBalancer calls POST /api/v1/apps/{name}/loadbalancer/check.

func (*Client) CheckModelFit added in v0.2.0

func (c *Client) CheckModelFit(ctx context.Context, req ModelFitRequest) (ModelFitReport, error)

CheckModelFit calls POST /api/v1/models/fit.

func (*Client) ClaimOrphanedContainer added in v0.2.0

func (c *Client) ClaimOrphanedContainer(ctx context.Context, name string, req ClaimOrphanedContainerRequest) (AppResource, error)

ClaimOrphanedContainer calls POST /api/v1/system/containers/{name}/claim: creates a real app (build.type: image) from the container's own image, same path POST /api/v1/apps itself uses. Returns the created app.

func (*Client) CleanupOrphanedVolumes added in v0.2.0

func (c *Client) CleanupOrphanedVolumes(ctx context.Context, names []string) (CleanupOrphanedVolumesResult, error)

CleanupOrphanedVolumes calls POST /api/v1/system/volumes/orphaned/cleanup: removes exactly the named volumes, after the control plane re-confirms each one is still genuinely orphaned.

func (*Client) ClearAppAutoscale

func (c *Client) ClearAppAutoscale(ctx context.Context, app string) error

ClearAppAutoscale calls DELETE /api/v1/apps/{name}/autoscale.

func (*Client) ClearAppBudget

func (c *Client) ClearAppBudget(ctx context.Context, app string) error

ClearAppBudget calls DELETE /api/v1/apps/{name}/budget.

func (*Client) ClearAppDatabaseAttachment

func (c *Client) ClearAppDatabaseAttachment(ctx context.Context, name string) error

ClearAppDatabaseAttachment calls DELETE /api/v1/apps/{name}/database.

func (*Client) ClearAppEgressPolicy added in v0.2.0

func (c *Client) ClearAppEgressPolicy(ctx context.Context, name string) error

ClearAppEgressPolicy calls DELETE /api/v1/apps/{name}/egress-policy, opting name back out to unrestricted egress.

func (*Client) ClearAppHealth added in v0.2.0

func (c *Client) ClearAppHealth(ctx context.Context, name string) error

ClearAppHealth calls DELETE /api/v1/apps/{name}/health.

func (*Client) ClearAppMaintenance

func (c *Client) ClearAppMaintenance(ctx context.Context, name string) (AppMaintenanceResource, error)

ClearAppMaintenance calls DELETE /api/v1/apps/{name}/maintenance: ends maintenance on every domain.

func (*Client) ClearAppPreviewEnvOverride added in v0.2.0

func (c *Client) ClearAppPreviewEnvOverride(ctx context.Context, name, key string) error

ClearAppPreviewEnvOverride calls DELETE /api/v1/apps/{name}/preview-env/{key}.

func (*Client) ClearAppStorage added in v0.2.0

func (c *Client) ClearAppStorage(ctx context.Context, name string) error

ClearAppStorage calls DELETE /api/v1/apps/{name}/storage: detaches name's object-storage credential source.

func (*Client) ClearAppVaultEnv added in v0.2.0

func (c *Client) ClearAppVaultEnv(ctx context.Context, name, key string) error

ClearAppVaultEnv calls DELETE /api/v1/apps/{name}/vault-env/{key}.

func (*Client) ClearBackupSchedule

func (c *Client) ClearBackupSchedule(ctx context.Context, name string) error

ClearBackupSchedule calls DELETE /api/v1/databases/{name}/backup-schedule: returns name to its default "no scheduled backup configured" state. Past backup_history rows are untouched, only the going-forward configuration.

func (*Client) ClearBuildCache added in v0.2.0

func (c *Client) ClearBuildCache(ctx context.Context, app string) (BuildCacheClearResult, error)

ClearBuildCache calls POST /api/v1/build-cache/clear.

func (*Client) ClearChannelQuietHours

func (c *Client) ClearChannelQuietHours(ctx context.Context, id string) error

ClearChannelQuietHours calls DELETE /api/v1/notification-channels/{id}/quiet-hours.

func (*Client) ClearDatabasePublicAccess added in v0.2.0

func (c *Client) ClearDatabasePublicAccess(ctx context.Context, name string) error

ClearDatabasePublicAccess calls DELETE /api/v1/databases/{name}/public-access: returns name to internal-network-only, the reverse of SetDatabasePublicAccess.

func (*Client) ClearDomainAuthGate added in v0.2.0

func (c *Client) ClearDomainAuthGate(ctx context.Context, name, domain string) (DomainAuthGateResource, error)

ClearDomainAuthGate calls DELETE /api/v1/apps/{name}/domains/{domain}/auth-gate.

func (*Client) ClearDomainBasicAuth

func (c *Client) ClearDomainBasicAuth(ctx context.Context, name, domain string) (DomainBasicAuthResource, error)

ClearDomainBasicAuth calls DELETE /api/v1/apps/{name}/domains/{domain}/auth: removes basic auth protection from domain.

func (*Client) ClearDomainCache added in v0.2.0

func (c *Client) ClearDomainCache(ctx context.Context, name, domain string) (CachePolicyResource, error)

ClearDomainCache calls DELETE .../domains/{domain}/cache.

func (*Client) ClearDomainErrorPage added in v0.2.0

func (c *Client) ClearDomainErrorPage(ctx context.Context, name, domain string, statusCode int) (DomainErrorPagesResource, error)

ClearDomainErrorPage calls DELETE /api/v1/apps/{name}/domains/{domain}/error-pages?status_code=<code>: removes domain's mapping for one status code.

func (*Client) ClearDomainErrorPages added in v0.2.0

func (c *Client) ClearDomainErrorPages(ctx context.Context, name, domain string) (DomainErrorPagesResource, error)

ClearDomainErrorPages calls DELETE /api/v1/apps/{name}/domains/{domain}/error-pages: removes every custom error page configured for domain.

func (*Client) ClearDomainForwarders added in v0.2.0

func (c *Client) ClearDomainForwarders(ctx context.Context, name, domain string) (ForwardersPolicyResource, error)

ClearDomainForwarders calls DELETE .../domains/{domain}/forwarders.

func (*Client) ClearDomainGeo added in v0.2.0

func (c *Client) ClearDomainGeo(ctx context.Context, name, domain string) (GeoPolicyResource, error)

ClearDomainGeo calls DELETE .../domains/{domain}/geo.

func (*Client) ClearDomainHeaders added in v0.2.0

func (c *Client) ClearDomainHeaders(ctx context.Context, name, domain string) (HeadersPolicyResource, error)

ClearDomainHeaders calls DELETE .../domains/{domain}/headers.

func (*Client) ClearDomainMaintenance

func (c *Client) ClearDomainMaintenance(ctx context.Context, name, domain string) (DomainMaintenanceResource, error)

ClearDomainMaintenance calls DELETE /api/v1/apps/{name}/domains/{domain}/maintenance: disables maintenance mode on domain.

func (*Client) ClearDomainRedirect added in v0.2.0

func (c *Client) ClearDomainRedirect(ctx context.Context, name, domain string) (DomainRedirectResource, error)

ClearDomainRedirect calls DELETE /api/v1/apps/{name}/domains/{domain}/redirect: removes domain's redirect.

func (*Client) ClearDomainRedirectSettings added in v0.2.0

func (c *Client) ClearDomainRedirectSettings(ctx context.Context, name, domain string) (DomainRedirectsResource, error)

ClearDomainRedirectSettings calls DELETE .../domains/{domain}/redirects.

func (*Client) ClearDomainShield

func (c *Client) ClearDomainShield(ctx context.Context, name, domain string) (ShieldPolicyResource, error)

ClearDomainShield calls DELETE .../domains/{domain}/shield.

func (*Client) ClearDomainTLSCert

func (c *Client) ClearDomainTLSCert(ctx context.Context, name, domain string) (DomainTLSCertResource, error)

ClearDomainTLSCert calls DELETE /api/v1/apps/{name}/domains/{domain}/tls-cert: removes domain's BYO certificate, reverting it to automatic ACME/internal issuance.

func (*Client) ClearDomainWAF added in v0.2.0

func (c *Client) ClearDomainWAF(ctx context.Context, name, domain string) (DomainWAFResource, error)

ClearDomainWAF calls DELETE /api/v1/apps/{name}/domains/{domain}/waf: resets domain to no WAF and no rate limiting.

func (*Client) ClearLogDrain

func (c *Client) ClearLogDrain(ctx context.Context, name string) error

ClearLogDrain calls DELETE /api/v1/apps/{name}/log-drain. No response body (204 on success), matching SetSecret's own "no body beyond the status" shape above.

func (*Client) ClearQuota

func (c *Client) ClearQuota(ctx context.Context, scope, id string) (QuotaResource, error)

ClearQuota calls DELETE /api/v1/{teams|projects}/{id}/quota.

func (*Client) ClearSessionPolicy

func (c *Client) ClearSessionPolicy(ctx context.Context, teamID string) error

ClearSessionPolicy calls DELETE /api/v1/security/session-policies/{team_id}.

func (*Client) ClearStorageDefault

func (c *Client) ClearStorageDefault(ctx context.Context, class string) error

ClearStorageDefault calls DELETE /api/v1/storage/defaults/{class}.

func (*Client) ClearVolumeBackupSchedule

func (c *Client) ClearVolumeBackupSchedule(ctx context.Context, name, volume string) error

ClearVolumeBackupSchedule calls DELETE /api/v1/apps/{name}/volumes/{volume}/backup-schedule: the app service volume counterpart of ClearBackupSchedule.

func (*Client) CloneApp added in v0.2.0

func (c *Client) CloneApp(ctx context.Context, name, newName string) (AppResource, error)

CloneApp calls POST /api/v1/apps/{name}/clone: duplicates name's desired state under newName. Domains, secret values, and node placement are never copied (see internal/api/apps_clone.go's own doc comment for why).

func (*Client) CloneAppWith added in v0.2.0

func (c *Client) CloneAppWith(ctx context.Context, name string, req CloneAppRequest) (AppResource, error)

CloneAppWith is CloneApp with the secret, domain and environment options.

func (*Client) CloneEnvironment added in v0.2.0

CloneEnvironment calls POST /api/v1/environments/{id}/clone: creates a new environment in id's own project plus a real, deployed copy of every app tagged with id.

func (*Client) CompareDeploys

func (c *Client) CompareDeploys(ctx context.Context, name, from, to string) (DeployCompareResource, error)

CompareDeploys calls GET /api/v1/apps/{name}/deploys/compare: a before/after diff of deploy attempt from against to, or against the app's current live state when to is empty.

func (*Client) CompareEnvironmentEnv added in v0.2.0

func (c *Client) CompareEnvironmentEnv(ctx context.Context, projectID, a, b string) (EnvironmentCompareResource, error)

CompareEnvironmentEnv calls GET /api/v1/projects/{id}/environments/compare?a=...&b=...: each of environment a and b's resolved effective env vars, secret values always redacted, plus the keys that differ between them.

func (*Client) CompleteAccessReview

func (c *Client) CompleteAccessReview(ctx context.Context, id string) (CompleteAccessReviewResult, error)

CompleteAccessReview calls POST .../access-reviews/{id}/complete.

func (*Client) ComposeDown added in v0.2.0

func (c *Client) ComposeDown(ctx context.Context, name string, removeVolumes bool) (ComposeDownResult, error)

ComposeDown calls DELETE /api/v1/apps/{name}/compose.

func (*Client) ConfirmAppImportCutoverDNS added in v0.2.0

func (c *Client) ConfirmAppImportCutoverDNS(ctx context.Context, session, item, run string) (ImportCutoverRun, error)

ConfirmAppImportCutoverDNS calls POST .../cutover/runs/{run}/confirm-dns.

func (*Client) ConnectDatabaseApp

func (c *Client) ConnectDatabaseApp(ctx context.Context, database, app, envVar, field string) (AppConnectionResource, error)

ConnectDatabaseApp calls POST /api/v1/databases/{name}/links.

func (*Client) ConnectExternalDatabase added in v0.2.0

func (c *Client) ConnectExternalDatabase(ctx context.Context, req ExternalDatabaseRequest) (ExternalDatabase, error)

ConnectExternalDatabase calls POST /api/v1/external-databases.

func (*Client) ConvertEnvToSecret added in v0.2.0

func (c *Client) ConvertEnvToSecret(ctx context.Context, app, key string) error

ConvertEnvToSecret calls POST /api/v1/apps/{name}/env/{key}/convert-to-secret.

func (*Client) CordonNode

func (c *Client) CordonNode(ctx context.Context, id string) (NodeResource, error)

CordonNode calls POST /api/v1/nodes/{id}/cordon: marks id unschedulable for new placements without evacuating anything already running there.

func (*Client) CreateAIChatSession added in v0.2.0

func (c *Client) CreateAIChatSession(ctx context.Context) (AIChatSessionCreatedResource, error)

CreateAIChatSession calls POST /api/v1/ai/sessions.

func (*Client) CreateAccessReview

func (c *Client) CreateAccessReview(ctx context.Context, req CreateAccessReviewRequest) (AccessReviewResource, error)

CreateAccessReview calls POST /api/v1/compliance/access-reviews.

func (*Client) CreateAlertRule

func (c *Client) CreateAlertRule(ctx context.Context, name string, req CreateAlertRuleRequest) (AlertRuleResource, error)

CreateAlertRule calls POST /api/v1/apps/{name}/alerts.

func (*Client) CreateAlertSilence added in v0.2.0

func (c *Client) CreateAlertSilence(ctx context.Context, req CreateSilenceRequest) (SilenceResource, error)

CreateAlertSilence calls POST /api/v1/alert-silences.

func (*Client) CreateApp

func (c *Client) CreateApp(ctx context.Context, req AppResource) (AppResource, error)

CreateApp calls POST /api/v1/apps.

func (*Client) CreateAppConnection added in v0.2.0

func (c *Client) CreateAppConnection(ctx context.Context, name string, req CreateAppConnectionRequest) (AppConnectionResource, error)

CreateAppConnection calls POST /api/v1/apps/{name}/connections: adds (or replaces) one entry in name's DatabaseEnv map, the multi- connection sibling of SetAppDatabaseAttachment above.

func (*Client) CreateAppImportSession added in v0.2.0

func (c *Client) CreateAppImportSession(ctx context.Context, req AppImportRequest) (AppImportView, error)

CreateAppImportSession calls POST /api/v1/migration/apps/sessions.

func (*Client) CreateAppStream added in v0.2.0

func (c *Client) CreateAppStream(ctx context.Context, name string, req CreateAppStreamRequest) (AppStreamResource, error)

CreateAppStream calls POST /api/v1/apps/{name}/streams.

func (*Client) CreateArchive

func (c *Client) CreateArchive(ctx context.Context, kind string, olderThanDays int) (ArchiveRunResult, error)

CreateArchive calls POST /api/v1/archives. An empty kind runs the whole policy.

func (*Client) CreateBackupTarget

func (c *Client) CreateBackupTarget(ctx context.Context, req CreateBackupTargetRequest) (BackupTargetResource, error)

CreateBackupTarget calls POST /api/v1/backup-targets.

func (*Client) CreateCITrust

func (c *Client) CreateCITrust(ctx context.Context, name string, req CITrustRequest) (CITrust, error)

CreateCITrust calls POST /api/v1/apps/{name}/ci/trusts.

func (*Client) CreateControlPlaneBackup added in v0.2.0

func (c *Client) CreateControlPlaneBackup(ctx context.Context) (ControlPlaneBackup, error)

CreateControlPlaneBackup calls POST /api/v1/system/backups.

func (*Client) CreateCostBudget

func (c *Client) CreateCostBudget(ctx context.Context, body map[string]any) (costbudget.Budget, error)

CreateCostBudget calls POST /api/v1/costs/budgets.

func (*Client) CreateDNSHealthCheck added in v0.2.0

func (c *Client) CreateDNSHealthCheck(ctx context.Context, hc DNSHealthCheck) (DNSHealthCheck, error)

CreateDNSHealthCheck calls POST /api/v1/dns/health-checks.

func (*Client) CreateDNSRecord added in v0.2.0

func (c *Client) CreateDNSRecord(ctx context.Context, name, domain string, record DNSRecordResource) (DNSRecordsResponse, error)

CreateDNSRecord calls POST .../dns-records: appends a new record to domain's zone, leaving any existing record with the same name and type untouched.

func (*Client) CreateDNSZone added in v0.2.0

func (c *Client) CreateDNSZone(ctx context.Context, provider, name, accountID string) (DNSZone, error)

CreateDNSZone calls POST /api/v1/dns/zones.

func (*Client) CreateDNSZoneRecord added in v0.2.0

func (c *Client) CreateDNSZoneRecord(ctx context.Context, provider, zone string, rs DNSRecordSet) (DNSRecordWrite, error)

CreateDNSZoneRecord calls POST /api/v1/dns/zones/{zone}/records.

func (*Client) CreateDashboard

func (c *Client) CreateDashboard(ctx context.Context, in DashboardWrite) (DashboardResource, error)

CreateDashboard calls POST /api/v1/dashboards.

func (*Client) CreateDatabase

func (c *Client) CreateDatabase(ctx context.Context, req DatabaseResource) (DatabaseResource, error)

CreateDatabase calls POST /api/v1/databases.

func (*Client) CreateDatabaseUser added in v0.2.0

func (c *Client) CreateDatabaseUser(ctx context.Context, name string, req DatabaseUserCreateRequest) (DatabaseUserCreated, error)

CreateDatabaseUser calls POST /api/v1/databases/{name}/users.

func (*Client) CreateDeployNotifyTarget added in v0.2.0

func (c *Client) CreateDeployNotifyTarget(ctx context.Context, name string, req CreateDeployNotifyTargetRequest) (DeployNotifyTargetResource, error)

CreateDeployNotifyTarget calls POST /api/v1/apps/{name}/deploy-notify-targets.

func (*Client) CreateEnvironment

func (c *Client) CreateEnvironment(ctx context.Context, projectID string, req CreateEnvironmentRequest) (EnvironmentResource, error)

CreateEnvironment calls POST /api/v1/projects/{id}/environments.

func (*Client) CreateEventWebhook

func (c *Client) CreateEventWebhook(ctx context.Context, req CreateEventWebhookRequest) (EventWebhookResource, error)

CreateEventWebhook calls POST /api/v1/event-webhooks.

func (*Client) CreateEvidencePack

func (c *Client) CreateEvidencePack(ctx context.Context, from, to string) (EvidencePackResource, error)

CreateEvidencePack calls POST /api/v1/compliance/evidence-packs.

func (*Client) CreateExportDestination added in v0.2.0

func (c *Client) CreateExportDestination(ctx context.Context, req CreateExportDestinationRequest) (ExportDestinationResource, error)

CreateExportDestination calls POST /api/v1/export/destinations.

func (*Client) CreateFeatureFlag

func (c *Client) CreateFeatureFlag(ctx context.Context, name string, req FeatureFlagRequest) (FeatureFlagResource, error)

CreateFeatureFlag calls POST /api/v1/apps/{name}/flags.

func (*Client) CreateFirewallEdgeRule

func (c *Client) CreateFirewallEdgeRule(ctx context.Context, r edgefw.Rule, force bool) (FirewallEdgeRule, error)

CreateFirewallEdgeRule calls POST .../firewall/edge/rules.

func (*Client) CreateFirewallRule added in v0.2.0

func (c *Client) CreateFirewallRule(ctx context.Context, req CreateFirewallRuleRequest) (FirewallRuleResource, error)

CreateFirewallRule calls POST /api/v1/firewall-rules.

func (*Client) CreateGlobalEnvironment added in v0.2.0

func (c *Client) CreateGlobalEnvironment(ctx context.Context, req CreateGlobalEnvironmentRequest) (EnvironmentResource, error)

CreateGlobalEnvironment calls POST /api/v1/environments.

func (*Client) CreateInvite

func (c *Client) CreateInvite(ctx context.Context, req CreateInviteRequest) (CreateInviteResponse, error)

CreateInvite calls POST /api/v1/invites.

func (*Client) CreateJob added in v0.2.0

CreateJob calls POST /api/v1/apps/{name}/jobs.

func (*Client) CreateMaintenanceWindow added in v0.2.0

func (c *Client) CreateMaintenanceWindow(ctx context.Context, req MaintenanceWindowResource) (MaintenanceWindowResource, error)

CreateMaintenanceWindow calls POST /api/v1/alert-maintenance-windows.

func (*Client) CreateMigrationSession added in v0.2.0

func (c *Client) CreateMigrationSession(ctx context.Context, src HubSource) (HubSession, error)

CreateMigrationSession inventories a source server read-only.

func (*Client) CreateMobilePairing added in v0.2.0

func (c *Client) CreateMobilePairing(ctx context.Context, proof *StepUpProof) (MobilePairingCode, error)

CreateMobilePairing calls POST /api/v1/mobile/pairing-codes with the token owner's step-up proof.

func (*Client) CreateModel added in v0.2.0

func (c *Client) CreateModel(ctx context.Context, req CreateModelRequest) (CreateModelResponse, error)

CreateModel calls POST /api/v1/models. The response carries the API key exactly once.

func (*Client) CreateModelDetail

func (c *Client) CreateModelDetail(ctx context.Context, req CreateModelRequest) (CreateModelDetailResponse, error)

CreateModelDetail calls POST /api/v1/models and keeps the CPU fields.

func (*Client) CreateModelKey added in v0.2.0

func (c *Client) CreateModelKey(ctx context.Context, name string, req CreateModelKeyRequest) (CreatedModelKeyResource, error)

CreateModelKey calls POST /api/v1/models/{name}/keys.

func (*Client) CreateNetworkShare added in v0.2.0

func (c *Client) CreateNetworkShare(ctx context.Context, req CreateNetworkShareRequest) (NetworkShareResource, error)

CreateNetworkShare calls POST /api/v1/network-shares.

func (*Client) CreateNodeJoinToken

func (c *Client) CreateNodeJoinToken(ctx context.Context) (CreateNodeJoinTokenResponse, error)

CreateNodeJoinToken calls POST /api/v1/nodes/join-tokens: mints a one-time enrollment token, returned in plaintext exactly once.

func (*Client) CreateNodeJoinTokenFor added in v0.2.0

func (c *Client) CreateNodeJoinTokenFor(ctx context.Context, req CreateNodeJoinTokenRequest) (CreateNodeJoinTokenResponse, error)

CreateNodeJoinTokenFor calls POST /api/v1/nodes/join-tokens with req.

func (*Client) CreateNodeProvision added in v0.2.0

func (c *Client) CreateNodeProvision(ctx context.Context, req CreateNodeProvisionRequest) (NodeProvisionResource, error)

CreateNodeProvision calls POST /api/v1/nodes/provision.

func (*Client) CreateNodeReenrollToken added in v0.2.0

func (c *Client) CreateNodeReenrollToken(ctx context.Context, id string) (NodeReenrollTokenResponse, error)

CreateNodeReenrollToken calls POST /api/v1/nodes/{id}/reenroll-token.

func (*Client) CreateNotificationChannel

func (c *Client) CreateNotificationChannel(ctx context.Context, req CreateNotificationChannelRequest) (NotificationChannelResource, error)

CreateNotificationChannel calls POST /api/v1/notification-channels.

func (*Client) CreateOrganization

func (c *Client) CreateOrganization(ctx context.Context, req CreateOrganizationRequest) (OrganizationResource, error)

CreateOrganization calls POST /api/v1/organizations.

func (*Client) CreatePackageRegistry

func (c *Client) CreatePackageRegistry(ctx context.Context, req CreatePackageRegistryRequest) (PackageRegistryResource, error)

CreatePackageRegistry calls POST /api/v1/package-registries.

func (*Client) CreatePipeline added in v0.2.0

func (c *Client) CreatePipeline(ctx context.Context, app string, req PipelineSaveRequest) (PipelineResource, error)

CreatePipeline calls POST /api/v1/apps/{app}/pipelines.

func (*Client) CreatePolicy

func (c *Client) CreatePolicy(ctx context.Context, req PolicyRequest) (PolicyResource, error)

CreatePolicy calls POST /api/v1/iam/policies.

func (*Client) CreatePrivateNetwork

func (c *Client) CreatePrivateNetwork(ctx context.Context, req PrivateNetworkRequest) (PrivateNetworkChange, error)

CreatePrivateNetwork calls POST /api/v1/private-networks.

func (*Client) CreatePrivateNetworkRule

func (c *Client) CreatePrivateNetworkRule(ctx context.Context, req PrivateNetworkRuleRequest) (PrivateNetworkChange, error)

CreatePrivateNetworkRule calls POST /api/v1/private-networks/rules.

func (*Client) CreateProject

func (c *Client) CreateProject(ctx context.Context, req CreateProjectRequest) (ProjectResource, error)

CreateProject calls POST /api/v1/projects.

func (*Client) CreateRegistryCredential

func (c *Client) CreateRegistryCredential(ctx context.Context, req CreateRegistryCredentialRequest) (RegistryCredentialResource, error)

CreateRegistryCredential calls POST /api/v1/registry-credentials.

func (*Client) CreateRole added in v0.2.0

func (c *Client) CreateRole(ctx context.Context, req RoleRequest) (RoleResource, error)

CreateRole calls POST /api/v1/roles.

func (*Client) CreateSAMLConnection

func (c *Client) CreateSAMLConnection(ctx context.Context, req SAMLConnectionRequest) (SAMLConnection, error)

CreateSAMLConnection calls POST /api/v1/sso/saml/connections.

func (*Client) CreateSCIMToken

func (c *Client) CreateSCIMToken(ctx context.Context, name string) (SCIMTokenCreated, error)

CreateSCIMToken calls POST /api/v1/sso/scim/tokens.

func (*Client) CreateSSHNodeProvision added in v0.2.0

func (c *Client) CreateSSHNodeProvision(ctx context.Context, req CreateSSHNodeProvisionRequest) (SSHNodeProvisionResource, error)

CreateSSHNodeProvision calls POST /api/v1/nodes/ssh-provision.

func (*Client) CreateSavedLogQuery added in v0.2.0

func (c *Client) CreateSavedLogQuery(ctx context.Context, req SavedLogQueryRequest) (SavedLogQuery, error)

CreateSavedLogQuery calls POST /api/v1/logs/queries.

func (*Client) CreateScheduledMaintenance

func (c *Client) CreateScheduledMaintenance(ctx context.Context, req ScheduledMaintenanceRequest) (ScheduledMaintenanceResource, error)

CreateScheduledMaintenance calls POST /api/v1/scheduled-maintenance.

func (*Client) CreateScheduledTask

func (c *Client) CreateScheduledTask(ctx context.Context, name string, req ScheduledTaskRequest) (ScheduledTaskResource, error)

CreateScheduledTask calls POST /api/v1/apps/{name}/scheduled-tasks.

func (*Client) CreateStandaloneDomain added in v0.2.0

func (c *Client) CreateStandaloneDomain(ctx context.Context, req StandaloneDomainRequest) (StandaloneDomain, error)

CreateStandaloneDomain calls POST /api/v1/domains/standalone.

func (*Client) CreateStatusComponent added in v0.2.0

func (c *Client) CreateStatusComponent(ctx context.Context, comp StatusComponent) (StatusComponent, error)

CreateStatusComponent calls POST /api/v1/status-page/components.

func (*Client) CreateStatusIncident added in v0.2.0

func (c *Client) CreateStatusIncident(ctx context.Context, inc StatusIncident) (StatusIncident, error)

CreateStatusIncident calls POST /api/v1/status-page/incidents.

func (*Client) CreateStorageBucket

func (c *Client) CreateStorageBucket(ctx context.Context, req CreateStorageBucketRequest) (StorageBucket, error)

CreateStorageBucket calls POST /api/v1/storage/buckets.

func (*Client) CreateStorageDestination added in v0.2.0

func (c *Client) CreateStorageDestination(ctx context.Context, req StorageDestinationRequest) (StorageDestination, error)

CreateStorageDestination calls POST /api/v1/storage/destinations.

func (*Client) CreateTag added in v0.2.0

func (c *Client) CreateTag(ctx context.Context, name string) (TagResource, error)

CreateTag calls POST /api/v1/tags.

func (*Client) CreateTeam added in v0.2.0

func (c *Client) CreateTeam(ctx context.Context, name string) (TeamResource, error)

CreateTeam calls POST /api/v1/teams.

func (*Client) CreateTeamInvite added in v0.2.0

func (c *Client) CreateTeamInvite(ctx context.Context, id string, req CreateTeamInviteRequest) (TeamInviteResource, error)

CreateTeamInvite calls POST /api/v1/teams/{id}/invites.

func (*Client) CreateUpgradeSchedule added in v0.2.0

func (c *Client) CreateUpgradeSchedule(ctx context.Context, req UpgradeScheduleRequest) (UpgradeSchedule, error)

CreateUpgradeSchedule calls POST /api/v1/updates/schedule.

func (*Client) CreateUser

func (c *Client) CreateUser(ctx context.Context, req CreateUserRequest) (UserResource, error)

CreateUser calls POST /api/v1/auth/users.

func (*Client) CutoverReport added in v0.2.0

func (c *Client) CutoverReport(ctx context.Context, app, targetIP string, verify bool) (CutoverReport, error)

CutoverReport calls GET /api/v1/migration/cutover, or its /verify form.

func (*Client) DNSZone added in v0.2.0

func (c *Client) DNSZone(ctx context.Context, domain string) (DNSZoneResult, error)

DNSZone calls GET /api/v1/dns/zone?domain=.

func (*Client) DNSZoneDelegation added in v0.2.0

func (c *Client) DNSZoneDelegation(ctx context.Context, provider, zone string) (DNSDelegation, error)

DNSZoneDelegation calls GET /api/v1/dns/zones/{zone}/delegation.

func (*Client) DNSZoneNameServers added in v0.2.0

func (c *Client) DNSZoneNameServers(ctx context.Context, provider, zone string) ([]string, error)

DNSZoneNameServers calls GET /api/v1/dns/zones/{zone}/nameservers.

func (*Client) DashboardTemplates

func (c *Client) DashboardTemplates(ctx context.Context) ([]DashboardTemplate, error)

DashboardTemplates calls GET /api/v1/dashboards/templates.

func (*Client) DatabaseCatalogStatus

func (c *Client) DatabaseCatalogStatus(ctx context.Context) (DBCatalogStatus, error)

DatabaseCatalogStatus calls GET /api/v1/database-catalog.

func (*Client) DatabaseUpgradeSummary added in v0.2.0

func (c *Client) DatabaseUpgradeSummary(ctx context.Context) (DBUpgradeSummary, error)

DatabaseUpgradeSummary calls GET /api/v1/databases/upgrade-summary.

func (*Client) DatabaseVersions

func (c *Client) DatabaseVersions(ctx context.Context, engine string) (DBVersions, error)

DatabaseVersions calls GET /api/v1/database-versions?engine=.

func (*Client) DecideAccessReviewItem

func (c *Client) DecideAccessReviewItem(ctx context.Context, id, item, decision string) error

DecideAccessReviewItem calls PUT .../access-reviews/{id}/items/{item}.

func (*Client) DecideLoginApproval added in v0.2.0

func (c *Client) DecideLoginApproval(ctx context.Context, id string, approve bool, match int) error

DecideLoginApproval calls POST /api/v1/auth/login-approvals/{id}/approve with the number the waiting browser shows, or /deny. A token must hold signin:approve.

func (*Client) DecidePipelineApproval added in v0.2.0

func (c *Client) DecidePipelineApproval(ctx context.Context, app, runID string, approvalID int64, decision, comment string) error

DecidePipelineApproval calls POST .../pipeline-runs/{id}/approvals/{approval}.

func (*Client) DecidePipelineRunHold added in v0.2.0

func (c *Client) DecidePipelineRunHold(ctx context.Context, app, runID, decision string) error

DecidePipelineRunHold calls POST .../pipeline-runs/{id}/hold.

func (*Client) DeleteAIChatSession added in v0.2.0

func (c *Client) DeleteAIChatSession(ctx context.Context, id string) error

DeleteAIChatSession calls DELETE /api/v1/ai/sessions/{id}.

func (*Client) DeleteAIProvider

func (c *Client) DeleteAIProvider(ctx context.Context, id string) (AIProviderResource, error)

DeleteAIProvider calls DELETE /api/v1/settings/ai-assistant/providers/{id}.

func (*Client) DeleteAlertRule

func (c *Client) DeleteAlertRule(ctx context.Context, name, id string) error

DeleteAlertRule calls DELETE /api/v1/apps/{name}/alerts/{id}.

func (*Client) DeleteApp

func (c *Client) DeleteApp(ctx context.Context, name string) error

DeleteApp calls DELETE /api/v1/apps/{name}: removes the app's desired state (internal/api/apps.go's own handleDeleteApp doc comment covers the known gap that this does not itself stop the running container).

func (*Client) DeleteAppAndData added in v0.2.0

func (c *Client) DeleteAppAndData(ctx context.Context, name string) (DeleteAppResult, error)

DeleteAppAndData is DeleteAppResult with delete_data=true: the app's volumes are destroyed once its containers are gone.

func (*Client) DeleteAppBranchEnv added in v0.2.0

func (c *Client) DeleteAppBranchEnv(ctx context.Context, name, id string) error

DeleteAppBranchEnv calls DELETE /api/v1/apps/{name}/branch-env/{id}: id is the override's own id (from ListAppBranchEnv or SetAppBranchEnv), not a branch name or env var key.

func (*Client) DeleteAppConnection added in v0.2.0

func (c *Client) DeleteAppConnection(ctx context.Context, name, envVar string) error

DeleteAppConnection calls DELETE /api/v1/apps/{name}/connections/{env_var}.

func (*Client) DeleteAppResult added in v0.2.0

func (c *Client) DeleteAppResult(ctx context.Context, name string) (DeleteAppResult, error)

DeleteAppResult calls DELETE /api/v1/apps/{name} and reports whether container teardown is still pending (HTTP 202).

func (*Client) DeleteAppStream added in v0.2.0

func (c *Client) DeleteAppStream(ctx context.Context, name, id string) error

DeleteAppStream calls DELETE /api/v1/apps/{name}/streams/{id}.

func (*Client) DeleteArchive

func (c *Client) DeleteArchive(ctx context.Context, id string) error

DeleteArchive calls DELETE /api/v1/archives/{id}.

func (*Client) DeleteBackup added in v0.2.0

func (c *Client) DeleteBackup(ctx context.Context, name, historyID string) error

DeleteBackup calls DELETE /api/v1/databases/{name}/backups/{historyId}: permanently deletes one specific archived backup attempt, both its stored object and its history row, rather than waiting for retention to age it out. Irreversible; callers must gate this behind their own explicit confirmation before ever reaching it.

func (*Client) DeleteBackupTarget

func (c *Client) DeleteBackupTarget(ctx context.Context, id string) error

DeleteBackupTarget calls DELETE /api/v1/backup-targets/{id}.

func (*Client) DeleteBucketObject

func (c *Client) DeleteBucketObject(ctx context.Context, id, key string) error

DeleteBucketObject calls DELETE /api/v1/storage/buckets/{id}/objects.

func (*Client) DeleteBuildCache added in v0.2.0

func (c *Client) DeleteBuildCache(ctx context.Context, app string) error

DeleteBuildCache calls DELETE /api/v1/build-cache. An empty app is the global default.

func (*Client) DeleteCITrust

func (c *Client) DeleteCITrust(ctx context.Context, name, id string) error

DeleteCITrust calls DELETE /api/v1/apps/{name}/ci/trusts/{id}.

func (*Client) DeleteConsoleView

func (c *Client) DeleteConsoleView(ctx context.Context, id string) error

DeleteConsoleView calls DELETE /api/v1/resources/views/{id}.

func (*Client) DeleteControlPlaneBackup added in v0.2.0

func (c *Client) DeleteControlPlaneBackup(ctx context.Context, name string) error

DeleteControlPlaneBackup calls DELETE /api/v1/system/backups/{name}.

func (*Client) DeleteCostBudget

func (c *Client) DeleteCostBudget(ctx context.Context, id string) error

DeleteCostBudget calls DELETE /api/v1/costs/budgets/{id}.

func (*Client) DeleteCustomTemplate added in v0.2.0

func (c *Client) DeleteCustomTemplate(ctx context.Context, id string) error

DeleteCustomTemplate calls DELETE /api/v1/templates/custom/{id}.

func (*Client) DeleteDNSHealthCheck added in v0.2.0

func (c *Client) DeleteDNSHealthCheck(ctx context.Context, id string) error

DeleteDNSHealthCheck calls DELETE /api/v1/dns/health-checks/{id}.

func (*Client) DeleteDNSRecord added in v0.2.0

func (c *Client) DeleteDNSRecord(ctx context.Context, name, domain string, record DNSRecordResource) (DNSRecordsResponse, error)

DeleteDNSRecord calls DELETE .../dns-records: removes one exact record (name, type, and value must all match). Idempotent.

func (*Client) DeleteDNSZone added in v0.2.0

func (c *Client) DeleteDNSZone(ctx context.Context, provider, zone, confirm string, force bool) error

DeleteDNSZone calls DELETE /api/v1/dns/zones/{zone}.

func (*Client) DeleteDNSZoneRecord added in v0.2.0

func (c *Client) DeleteDNSZoneRecord(ctx context.Context, provider, zone string, k DNSRecordKey) error

DeleteDNSZoneRecord calls DELETE /api/v1/dns/zones/{zone}/records.

func (*Client) DeleteDashboard

func (c *Client) DeleteDashboard(ctx context.Context, id string) error

DeleteDashboard calls DELETE /api/v1/dashboards/{id}.

func (*Client) DeleteDatabase

func (c *Client) DeleteDatabase(ctx context.Context, name string, force bool) error

DeleteDatabase calls DELETE /api/v1/databases/{name}.

func (*Client) DeleteDatabaseAndData added in v0.2.0

func (c *Client) DeleteDatabaseAndData(ctx context.Context, name string, force bool) error

DeleteDatabaseAndData calls DELETE /api/v1/databases/{name} with delete_data=true: the data volumes are destroyed with the database. The server requires confirm to equal name.

func (*Client) DeleteDatabaseUser added in v0.2.0

func (c *Client) DeleteDatabaseUser(ctx context.Context, name, role string) error

DeleteDatabaseUser calls DELETE /api/v1/databases/{name}/users/{role}.

func (*Client) DeleteDeployNotifyTarget added in v0.2.0

func (c *Client) DeleteDeployNotifyTarget(ctx context.Context, name, id string) error

DeleteDeployNotifyTarget calls DELETE /api/v1/apps/{name}/deploy-notify-targets/{id}.

func (*Client) DeleteDeployPolicy

func (c *Client) DeleteDeployPolicy(ctx context.Context, scope, id string) error

DeleteDeployPolicy calls DELETE /api/v1/deploy-policies/{scope}/{id}.

func (*Client) DeleteEnvironment

func (c *Client) DeleteEnvironment(ctx context.Context, id string) error

DeleteEnvironment calls DELETE /api/v1/environments/{id}.

func (*Client) DeleteEnvironmentCascade added in v0.2.0

func (c *Client) DeleteEnvironmentCascade(ctx context.Context, id string) (CascadeDeleteResult, error)

DeleteEnvironmentCascade calls DELETE with cascade=true: every app and database inside is torn down first. A partial result (Status "partial") means the environment still exists and repeating the call resumes.

func (*Client) DeleteEnvironmentMoveTo added in v0.2.0

func (c *Client) DeleteEnvironmentMoveTo(ctx context.Context, id, moveTo string) error

DeleteEnvironmentMoveTo calls DELETE /api/v1/environments/{id}, retagging every member to moveTo first when moveTo is not empty.

func (*Client) DeleteEventWebhook

func (c *Client) DeleteEventWebhook(ctx context.Context, id string) error

DeleteEventWebhook calls DELETE /api/v1/event-webhooks/{id}.

func (*Client) DeleteExportDestination added in v0.2.0

func (c *Client) DeleteExportDestination(ctx context.Context, id string) error

DeleteExportDestination calls DELETE /api/v1/export/destinations/{id}.

func (*Client) DeleteExternalDatabase added in v0.2.0

func (c *Client) DeleteExternalDatabase(ctx context.Context, name string, force bool) error

DeleteExternalDatabase calls DELETE /api/v1/external-databases/{name}. It removes only the local record; the remote database is untouched.

func (*Client) DeleteFeatureFlag

func (c *Client) DeleteFeatureFlag(ctx context.Context, name, id string) error

DeleteFeatureFlag calls DELETE /api/v1/apps/{name}/flags/{id}.

func (*Client) DeleteFirewallEdgeRule

func (c *Client) DeleteFirewallEdgeRule(ctx context.Context, id string) error

DeleteFirewallEdgeRule calls DELETE .../firewall/edge/rules/{id}.

func (*Client) DeleteFirewallRule added in v0.2.0

func (c *Client) DeleteFirewallRule(ctx context.Context, id string) error

DeleteFirewallRule calls DELETE /api/v1/firewall-rules/{id}.

func (*Client) DeleteFunctionRoutes

func (c *Client) DeleteFunctionRoutes(ctx context.Context, name, domain, path string) error

DeleteFunctionRoutes calls DELETE /api/v1/functions/{name}/route; an empty domain or path matches all.

func (*Client) DeleteGitHubAppInstallation added in v0.2.0

func (c *Client) DeleteGitHubAppInstallation(ctx context.Context, id int64) error

DeleteGitHubAppInstallation calls DELETE /api/v1/github-app/installations/{id}: disconnects one account/org. Refused with a 409 (surfaced as *APIError) while a git source still points at a repo under that account.

func (*Client) DeleteGitRemote

func (c *Client) DeleteGitRemote(ctx context.Context, name string) error

DeleteGitRemote calls DELETE /api/v1/apps/{name}/git-remote, which revokes the token.

func (*Client) DeleteGitSource

func (c *Client) DeleteGitSource(ctx context.Context, name string) error

DeleteGitSource calls DELETE /api/v1/apps/{name}/git-source.

func (*Client) DeleteJob added in v0.2.0

func (c *Client) DeleteJob(ctx context.Context, app, id string) error

DeleteJob calls DELETE /api/v1/apps/{name}/jobs/{id}.

func (*Client) DeleteLoadBalancer added in v0.2.0

func (c *Client) DeleteLoadBalancer(ctx context.Context, name string) error

DeleteLoadBalancer calls DELETE /api/v1/apps/{name}/loadbalancer.

func (*Client) DeleteLogArchivePolicy added in v0.2.0

func (c *Client) DeleteLogArchivePolicy(ctx context.Context, app string) error

DeleteLogArchivePolicy calls DELETE /api/v1/log-archive/policy. An empty app is the global policy.

func (*Client) DeleteLogBudget

func (c *Client) DeleteLogBudget(ctx context.Context, app string) error

DeleteLogBudget calls DELETE /api/v1/apps/{name}/log-budget.

func (*Client) DeleteLogPipeline

func (c *Client) DeleteLogPipeline(ctx context.Context, app string) error

DeleteLogPipeline calls DELETE /api/v1/apps/{name}/log-pipeline.

func (*Client) DeleteMaintenanceWindow added in v0.2.0

func (c *Client) DeleteMaintenanceWindow(ctx context.Context, id string) error

DeleteMaintenanceWindow calls DELETE /api/v1/alert-maintenance-windows/{id}.

func (*Client) DeleteModel added in v0.2.0

func (c *Client) DeleteModel(ctx context.Context, name string) error

DeleteModel calls DELETE /api/v1/models/{name}.

func (*Client) DeleteNetworkShare added in v0.2.0

func (c *Client) DeleteNetworkShare(ctx context.Context, id string) error

DeleteNetworkShare calls DELETE /api/v1/network-shares/{id}.

func (*Client) DeleteNode

func (c *Client) DeleteNode(ctx context.Context, id string) error

DeleteNode calls DELETE /api/v1/nodes/{id}. Refused with a 409 (*APIError) while any service or database is still placed on id, telling the caller to drain first (handleDeleteNode's own doc comment).

func (*Client) DeleteNotificationChannel

func (c *Client) DeleteNotificationChannel(ctx context.Context, id string) error

DeleteNotificationChannel calls DELETE /api/v1/notification-channels/{id}.

func (*Client) DeleteOrganization

func (c *Client) DeleteOrganization(ctx context.Context, id string) error

DeleteOrganization calls DELETE /api/v1/organizations/{id}.

func (*Client) DeleteOrganizationCascade added in v0.2.0

func (c *Client) DeleteOrganizationCascade(ctx context.Context, id string) (CascadeDeleteResult, error)

DeleteOrganizationCascade calls DELETE with cascade=true: every app and database inside is torn down first. A partial result (Status "partial") means the organization still exists and repeating the call resumes.

func (*Client) DeletePRPreviewEnv

func (c *Client) DeletePRPreviewEnv(ctx context.Context, name string, pr int, id string) error

DeletePRPreviewEnv calls DELETE /api/v1/apps/{name}/previews/{pr}/env/{id}.

func (*Client) DeletePackageRegistry

func (c *Client) DeletePackageRegistry(ctx context.Context, id string) error

DeletePackageRegistry calls DELETE /api/v1/package-registries/{id}.

func (*Client) DeletePipeline added in v0.2.0

func (c *Client) DeletePipeline(ctx context.Context, app, name string) error

DeletePipeline calls DELETE /api/v1/apps/{app}/pipelines/{name}.

func (*Client) DeletePipelineWebhook

func (c *Client) DeletePipelineWebhook(ctx context.Context, app, name string) error

DeletePipelineWebhook calls DELETE .../pipelines/{name}/webhook.

func (*Client) DeletePolicy

func (c *Client) DeletePolicy(ctx context.Context, id string) error

DeletePolicy calls DELETE /api/v1/iam/policies/{id}.

func (*Client) DeletePrivateNetwork

func (c *Client) DeletePrivateNetwork(ctx context.Context, id string) (PrivateNetworkChange, error)

DeletePrivateNetwork calls DELETE /api/v1/private-networks/{id}.

func (*Client) DeletePrivateNetworkRule

func (c *Client) DeletePrivateNetworkRule(ctx context.Context, id string) (PrivateNetworkChange, error)

DeletePrivateNetworkRule calls DELETE /api/v1/private-networks/rules/{id}.

func (*Client) DeleteProject

func (c *Client) DeleteProject(ctx context.Context, id string) error

DeleteProject calls DELETE /api/v1/projects/{id}.

func (*Client) DeleteProjectCascade added in v0.2.0

func (c *Client) DeleteProjectCascade(ctx context.Context, id string) (CascadeDeleteResult, error)

DeleteProjectCascade calls DELETE with cascade=true: every app and database inside is torn down first. A partial result (Status "partial") means the project still exists and repeating the call resumes.

func (*Client) DeletePushSubscription added in v0.2.0

func (c *Client) DeletePushSubscription(ctx context.Context, id string) error

DeletePushSubscription calls DELETE /api/v1/settings/push-subscriptions/{id}: revokes one registered browser.

func (*Client) DeleteRegistryCredential

func (c *Client) DeleteRegistryCredential(ctx context.Context, id string) error

DeleteRegistryCredential calls DELETE /api/v1/registry-credentials/{id}.

func (*Client) DeleteRole added in v0.2.0

func (c *Client) DeleteRole(ctx context.Context, id string) error

DeleteRole calls DELETE /api/v1/roles/{id}.

func (*Client) DeleteSAMLConnection

func (c *Client) DeleteSAMLConnection(ctx context.Context, id string) error

DeleteSAMLConnection calls DELETE /api/v1/sso/saml/connections/{id}.

func (*Client) DeleteSavedLogQuery added in v0.2.0

func (c *Client) DeleteSavedLogQuery(ctx context.Context, id string) error

DeleteSavedLogQuery calls DELETE /api/v1/logs/queries/{id}.

func (*Client) DeleteSavedSearch

func (c *Client) DeleteSavedSearch(ctx context.Context, id string) error

DeleteSavedSearch calls DELETE /api/v1/search/saved/{id}.

func (*Client) DeleteScheduledMaintenance

func (c *Client) DeleteScheduledMaintenance(ctx context.Context, id string) error

DeleteScheduledMaintenance calls DELETE /api/v1/scheduled-maintenance/{id}.

func (*Client) DeleteScheduledTask

func (c *Client) DeleteScheduledTask(ctx context.Context, name, id string) error

DeleteScheduledTask calls DELETE /api/v1/apps/{name}/scheduled-tasks/{id}.

func (*Client) DeleteSecret added in v0.2.0

func (c *Client) DeleteSecret(ctx context.Context, name, key string, force bool) error

DeleteSecret calls DELETE /api/v1/apps/{name}/secrets/{key}: removes the value and undeclares the key. force overrides a locked key.

func (*Client) DeleteSecretRotation

func (c *Client) DeleteSecretRotation(ctx context.Context, name, key string) error

DeleteSecretRotation calls DELETE /api/v1/apps/{name}/secrets/{key}/rotation.

func (*Client) DeleteSharedEnvSecret added in v0.2.0

func (c *Client) DeleteSharedEnvSecret(ctx context.Context, scope, id, key string) error

DeleteSharedEnvSecret calls DELETE /api/v1/{scope}s/{id}/env/secrets/{key}.

func (*Client) DeleteStandaloneDomain added in v0.2.0

func (c *Client) DeleteStandaloneDomain(ctx context.Context, domain string) error

DeleteStandaloneDomain calls DELETE /api/v1/domains/standalone/{domain}.

func (*Client) DeleteStaticSite

func (c *Client) DeleteStaticSite(ctx context.Context, name string) error

DeleteStaticSite calls DELETE /api/v1/static-sites/{name}.

func (*Client) DeleteStatusComponent added in v0.2.0

func (c *Client) DeleteStatusComponent(ctx context.Context, id string) error

DeleteStatusComponent calls DELETE /api/v1/status-page/components/{id}.

func (*Client) DeleteStatusIncident added in v0.2.0

func (c *Client) DeleteStatusIncident(ctx context.Context, id string) error

DeleteStatusIncident calls DELETE /api/v1/status-page/incidents/{id}.

func (*Client) DeleteStorageBucket

func (c *Client) DeleteStorageBucket(ctx context.Context, id string, purge bool) error

DeleteStorageBucket calls DELETE /api/v1/storage/buckets/{id}.

func (*Client) DeleteStorageDestination added in v0.2.0

func (c *Client) DeleteStorageDestination(ctx context.Context, id string) error

DeleteStorageDestination calls DELETE /api/v1/storage/destinations/{id}.

func (*Client) DeleteTag added in v0.2.0

func (c *Client) DeleteTag(ctx context.Context, id string) error

DeleteTag calls DELETE /api/v1/tags/{id}.

func (*Client) DeleteTeam added in v0.2.0

func (c *Client) DeleteTeam(ctx context.Context, id string) error

DeleteTeam calls DELETE /api/v1/teams/{id}.

func (*Client) DeleteUsageBudget added in v0.2.0

func (c *Client) DeleteUsageBudget(ctx context.Context, id string) error

DeleteUsageBudget calls DELETE /api/v1/usage/budgets/{id}.

func (*Client) DeleteUser

func (c *Client) DeleteUser(ctx context.Context, id string) error

DeleteUser calls DELETE /api/v1/users/{id}.

func (*Client) DeleteVolumeBackup added in v0.2.0

func (c *Client) DeleteVolumeBackup(ctx context.Context, name, volume, historyID string) error

DeleteVolumeBackup calls DELETE /api/v1/apps/{name}/volumes/{volume}/backups/{historyId}: the app service volume counterpart of DeleteBackup.

func (*Client) DeployApp

func (c *Client) DeployApp(ctx context.Context, name, image string, confirm bool) (DeployTriggerResult, error)

DeployApp calls POST /api/v1/apps/{name}/deploys: points the app's desired image at image. Asynchronous: this returns as soon as the desired state is saved, not once a container is actually running it. Also how a rollback is done: deploying an older, already-known tag with this same method.

confirm must be true just to have the request accepted at all when the app is tagged with a protected environment (internal/api/ environments.go's checkEnvironmentProtection); otherwise the call fails with a 409, ignored when the app has no protected environment. Even with confirm: true, a protected environment does not deploy immediately: the result's PendingApproval is set instead of App, and a different, sufficiently privileged user must approve it (ApproveDeployApproval below) before this tag actually reaches a running container.

func (*Client) DeployAppWith added in v0.2.0

func (c *Client) DeployAppWith(ctx context.Context, name string, req DeployTriggerRequest) (DeployTriggerResult, error)

DeployAppWith is DeployApp with the full request: pull and freeze override.

func (*Client) DeployCompose

func (c *Client) DeployCompose(ctx context.Context, name string, composeYAML []byte) (ComposeDeployResult, error)

DeployCompose posts composeYAML as the raw body with Content-Type text/yaml. The handler reads the body verbatim, so it must not be JSON-marshaled the way do() does. Content-Type: text/yaml instead of do()'s hardcoded application/json.

func (*Client) DeployComposeFromTemplate

func (c *Client) DeployComposeFromTemplate(ctx context.Context, name string, composeYAML []byte, templateID string) (ComposeDeployResult, error)

DeployComposeFromTemplate is DeployCompose for a catalog template's compose file; templateID lets the server apply the template's recommended memory limit.

func (*Client) DeployComposeStack added in v0.2.0

func (c *Client) DeployComposeStack(ctx context.Context, name string, composeYAML []byte, profiles []string) (ComposeStackDeploy, error)

DeployComposeStack calls POST /api/v1/apps/{name}/compose with optional profiles.

func (*Client) DeployFromCache

func (c *Client) DeployFromCache(ctx context.Context, name string, req DeployFromCacheRequest) (BuildTriggerResponse, error)

DeployFromCache calls POST /api/v1/apps/{name}/deploys/from-cache: a rebuild from the control plane's source cache that never contacts the git host.

func (*Client) DeploySpec

func (c *Client) DeploySpec(ctx context.Context, name string, req DeploySpecRequest) (DeploySpecResult, error)

DeploySpec calls POST /api/v1/apps/{name}/deploy-spec (internal/api/apps_multi.go's handleDeploySpec): fans req.Services out into N independent builds+deploys under one store.App named name. Synchronous and blocking, same as TriggerBuild, for the identical reason (internal/api/apps_multi.go's own doc comment).

func (*Client) DeployTimeline

func (c *Client) DeployTimeline(ctx context.Context, q url.Values) (TimelinePage, error)

DeployTimeline calls GET /api/v1/deployments/timeline with the given query (since, until, app, project, node, status, limit, cursor).

func (*Client) DetachAppIntegration added in v0.2.0

func (c *Client) DetachAppIntegration(ctx context.Context, name, id string) error

DetachAppIntegration calls DELETE /api/v1/apps/{name}/integrations/{id}: id is the attachment's own ID (from ListAppIntegrations), not the catalog key.

func (*Client) DetachAppTag added in v0.2.0

func (c *Client) DetachAppTag(ctx context.Context, name, tagID string) error

DetachAppTag calls DELETE /api/v1/apps/{name}/tags/{id}: id is the tag's ID (from ListAppTags or ListTags above), not its name.

func (*Client) DetachPolicy

func (c *Client) DetachPolicy(ctx context.Context, id, principalType, principalID string) error

DetachPolicy calls DELETE /api/v1/iam/policies/{id}/attachments/{principalType}/{principalID}.

func (*Client) DetectFramework added in v0.2.0

func (c *Client) DetectFramework(ctx context.Context, repoURL, ref string) (DetectFrameworkResource, error)

DetectFramework calls POST /api/v1/build/detect.

func (*Client) DetectGitSourceBuild added in v0.2.0

func (c *Client) DetectGitSourceBuild(ctx context.Context, name, branch string) (GitBuildDetection, error)

DetectGitSourceBuild calls POST /api/v1/apps/{name}/git-source/detect.

func (*Client) DiagnoseApp

func (c *Client) DiagnoseApp(ctx context.Context, name, deployID string) (DiagnosisResource, error)

DiagnoseApp calls GET /api/v1/apps/{name}/diagnose (internal/api/diagnose.go's handleDiagnoseApp): a read-only, deterministic explanation of the app's newest deploy failure or crashloop state. deployID pins the diagnosis to one past attempt (?deploy_id=); empty means "the app's newest attempt."

func (*Client) DisableErrorTracking

func (c *Client) DisableErrorTracking(ctx context.Context, app string) error

DisableErrorTracking calls DELETE /api/v1/apps/{name}/error-tracking.

func (*Client) DisablePITR added in v0.2.0

func (c *Client) DisablePITR(ctx context.Context, name string) error

DisablePITR calls DELETE /api/v1/databases/{name}/pitr.

func (*Client) DisablePlugin

func (c *Client) DisablePlugin(ctx context.Context, name string) (Plugin, error)

DisablePlugin calls POST /api/v1/plugins/{name}/disable.

func (*Client) DisableRegistry

func (c *Client) DisableRegistry(ctx context.Context) (RegistrySettingsResource, error)

DisableRegistry calls DELETE /api/v1/settings/registry: disables the registry and clears its generated credentials in one step.

func (*Client) DisableTracing

func (c *Client) DisableTracing(ctx context.Context, app string) error

DisableTracing calls DELETE /api/v1/apps/{name}/tracing.

func (*Client) DiscardMajorUpgradeSnapshot added in v0.2.0

func (c *Client) DiscardMajorUpgradeSnapshot(ctx context.Context, name, id string) error

DiscardMajorUpgradeSnapshot calls DELETE .../major-upgrades/{id}/snapshot.

func (*Client) DisconnectBitbucketApp added in v0.2.0

func (c *Client) DisconnectBitbucketApp(ctx context.Context) error

DisconnectBitbucketApp calls DELETE /api/v1/bitbucket-app: forgets the stored connection locally. Does not revoke the token or delete the consumer on Bitbucket's own side.

func (*Client) DisconnectCloudflareDNS

func (c *Client) DisconnectCloudflareDNS(ctx context.Context) (CloudflareDNSResource, error)

DisconnectCloudflareDNS calls DELETE /api/v1/settings/cloudflare-dns.

func (*Client) DisconnectCloudflareTunnel

func (c *Client) DisconnectCloudflareTunnel(ctx context.Context) (CloudflareTunnelResource, error)

DisconnectCloudflareTunnel calls DELETE /api/v1/settings/cloudflare-tunnel: disables the tunnel and clears the stored token in one step.

func (*Client) DisconnectGitHubApp added in v0.2.0

func (c *Client) DisconnectGitHubApp(ctx context.Context) error

DisconnectGitHubApp calls DELETE /api/v1/github-app: forgets the stored connection locally. Does not uninstall or delete the App on GitHub's own side.

func (*Client) DisconnectGitLabApp added in v0.2.0

func (c *Client) DisconnectGitLabApp(ctx context.Context) error

DisconnectGitLabApp calls DELETE /api/v1/gitlab-app: forgets the stored connection locally. Does not revoke the token or delete the Application on GitLab's own side.

func (*Client) DisconnectGiteaApp added in v0.2.0

func (c *Client) DisconnectGiteaApp(ctx context.Context) error

DisconnectGiteaApp calls DELETE /api/v1/gitea-app: forgets the stored connection locally. Does not revoke the token or delete the Application on Gitea's own side.

func (*Client) DisconnectNodeProvider

func (c *Client) DisconnectNodeProvider(ctx context.Context, provider string) error

DisconnectNodeProvider calls DELETE /api/v1/node-providers/{provider}.

func (*Client) DisconnectRoute53DNS added in v0.2.0

func (c *Client) DisconnectRoute53DNS(ctx context.Context) (Route53DNSResource, error)

DisconnectRoute53DNS calls DELETE /api/v1/settings/route53-dns.

func (*Client) DisconnectVault added in v0.2.0

func (c *Client) DisconnectVault(ctx context.Context) (VaultSettingsResource, error)

DisconnectVault calls DELETE /api/v1/settings/vault: disables vault and clears the stored credential in one step.

func (*Client) DiscoverAppHealth added in v0.2.0

func (c *Client) DiscoverAppHealth(ctx context.Context, name string) (HealthDiscoveryResponse, error)

DiscoverAppHealth calls POST /api/v1/apps/{name}/health/discover: actively probes name's running container against a fixed set of well-known paths and reports each one's real outcome. Never guesses: every path in the response was actually tried.

func (*Client) DiscoverPlatformImport added in v0.2.0

func (c *Client) DiscoverPlatformImport(ctx context.Context, req PlatformImportRequest) (PlatformImportReport, error)

DiscoverPlatformImport calls POST /api/v1/imports/platform/discover.

func (*Client) DomainActivity added in v0.2.0

func (c *Client) DomainActivity(ctx context.Context, domain string, limit int, before, actions string) (ActivityPage, error)

DomainActivity calls GET /api/v1/domains/{domain}/activity.

func (*Client) DomainDoctor added in v0.2.0

func (c *Client) DomainDoctor(ctx context.Context, app, domain string) (DomainDoctorReport, error)

DomainDoctor calls POST /api/v1/apps/{name}/domains/{domain}/doctor.

func (*Client) DownloadAccountExport

func (c *Client) DownloadAccountExport(ctx context.Context, id string) ([]byte, error)

DownloadAccountExport calls GET /api/v1/auth/export/{id}/download and returns the zip.

func (*Client) DownloadArchive

func (c *Client) DownloadArchive(ctx context.Context, id string) ([]byte, error)

DownloadArchive calls GET /api/v1/archives/{id}/download and returns the zstd bundle.

func (*Client) DownloadAuditLogCSV

func (c *Client) DownloadAuditLogCSV(ctx context.Context, opts ListAuditLogOptions) ([]byte, error)

DownloadAuditLogCSV calls GET /api/v1/audit-log?format=csv and returns the raw CSV bytes. It bypasses do() because the body is passed through unmodified, not decoded as JSON. is a CSV file to pass through unmodified, not a JSON value to decode.

func (*Client) DownloadBackup added in v0.2.0

func (c *Client) DownloadBackup(ctx context.Context, name, historyID string) ([]byte, error)

DownloadBackup calls GET /api/v1/databases/{name}/backups/{historyId}/download: one succeeded database backup's own object, streamed straight through as raw bytes so a caller can write it to a local file.

func (*Client) DownloadBucketObject

func (c *Client) DownloadBucketObject(ctx context.Context, id, key string) ([]byte, error)

DownloadBucketObject calls GET /api/v1/storage/buckets/{id}/objects/download.

func (*Client) DownloadControlPlaneBackup added in v0.2.0

func (c *Client) DownloadControlPlaneBackup(ctx context.Context, name string) ([]byte, error)

DownloadControlPlaneBackup calls GET /api/v1/system/backups/{name}/download and returns the raw SQLite file.

func (*Client) DownloadDeployLog added in v0.2.0

func (c *Client) DownloadDeployLog(ctx context.Context, name, deployID string) ([]byte, error)

DownloadDeployLog returns one deploy attempt's full log as raw text. It bypasses do() for the same reason as DownloadAuditLogCSV. not a JSON value to decode.

func (*Client) DownloadEvidencePack

func (c *Client) DownloadEvidencePack(ctx context.Context, id string, w io.Writer) error

DownloadEvidencePack streams the archive into w without buffering it.

func (*Client) DownloadLogArchiveObject added in v0.2.0

func (c *Client) DownloadLogArchiveObject(ctx context.Context, targetID, key string) ([]byte, error)

DownloadLogArchiveObject calls GET /api/v1/log-archive/objects/download and returns the gzip bytes.

func (*Client) DownloadPipelineArtifact

func (c *Client) DownloadPipelineArtifact(ctx context.Context, app, runID, artifactID string, w io.Writer) (int64, string, error)

DownloadPipelineArtifact calls GET .../artifacts/{id}/download and streams the archive into w, hashing as it goes. It returns the byte count and the sha256 it computed; a mismatch with the server's X-Content-SHA256 header or the Content-Length is an error.

func (*Client) DownloadSBOM added in v0.2.0

func (c *Client) DownloadSBOM(ctx context.Context, name, id string) ([]byte, error)

DownloadSBOM fetches the raw SBOM document of one deployment.

func (*Client) DownloadUsageReportCSV added in v0.2.0

func (c *Client) DownloadUsageReportCSV(ctx context.Context, q UsageReportQuery) ([]byte, error)

DownloadUsageReportCSV calls GET /api/v1/usage/report?format=csv.

func (*Client) DownloadVolumeBackup added in v0.2.0

func (c *Client) DownloadVolumeBackup(ctx context.Context, name, volume, historyID string) ([]byte, error)

DownloadVolumeBackup calls GET /api/v1/apps/{name}/volumes/{volume}/backups/{historyId}/download: the app service volume counterpart of DownloadBackup above.

func (*Client) DrainNode

func (c *Client) DrainNode(ctx context.Context, id, targetNodeID string) (DrainNodeResponse, error)

DrainNode calls POST /api/v1/nodes/{id}/drain?target_node_id=: moves every service and database placed on id to targetNodeID (empty: the local-node sentinel, the server's own default).

func (*Client) DrillNodeCert

func (c *Client) DrillNodeCert(ctx context.Context, id string) (NodeCertDrill, error)

DrillNodeCert calls POST /api/v1/nodes/{id}/cert/drill and waits for the rotation to finish.

func (*Client) EditAppDomains added in v0.2.0

func (c *Client) EditAppDomains(ctx context.Context, name string, req EditDomainsRequest) (EditDomainsResult, error)

EditAppDomains calls PATCH /api/v1/apps/{name}/domains, which changes only the domain list.

func (*Client) EffectiveSessionPolicy

func (c *Client) EffectiveSessionPolicy(ctx context.Context) (EffectiveSessionPolicy, error)

EffectiveSessionPolicy calls GET /api/v1/security/session-policy/effective.

func (*Client) EnableAppSleep

func (c *Client) EnableAppSleep(ctx context.Context, appName string, idleMinutes int, opts SleepEnableOptions) (AppSleepResource, error)

EnableAppSleep calls PUT /api/v1/apps/{name}/sleep with idleMinutes and opts.

func (*Client) EnableErrorTracking

func (c *Client) EnableErrorTracking(ctx context.Context, app string) (ErrorTrackingResource, error)

EnableErrorTracking calls POST /api/v1/apps/{name}/error-tracking: creates or rotates the DSN key, which is in the response only.

func (*Client) EnableHTTPS added in v0.2.0

func (c *Client) EnableHTTPS(ctx context.Context, req EnableHTTPSRequest) (HTTPSStatusResource, error)

EnableHTTPS calls POST /api/v1/settings/ingress/https.

func (*Client) EnablePITR added in v0.2.0

func (c *Client) EnablePITR(ctx context.Context, name string) error

EnablePITR calls POST /api/v1/databases/{name}/pitr: turns on continuous WAL archiving for name going forward.

func (*Client) EnablePlugin

func (c *Client) EnablePlugin(ctx context.Context, name string) (Plugin, error)

EnablePlugin calls POST /api/v1/plugins/{name}/enable.

func (*Client) EnableTracing

func (c *Client) EnableTracing(ctx context.Context, app string) (TracingResource, error)

EnableTracing calls POST /api/v1/apps/{name}/tracing: creates or rotates the app's ingest key. The key is in the response only.

func (*Client) EvaluateFeatureFlag

func (c *Client) EvaluateFeatureFlag(ctx context.Context, key, identifier string) (EvaluateFlagResource, error)

EvaluateFeatureFlag calls GET /api/v1/flags/evaluate/{key}, optionally with an identifier query param for consistent percentage-rollout bucketing. Flat, not nested under an app: see internal/api/feature_flags.go's own handleEvaluateFeatureFlag doc comment for why.

func (*Client) EvaluateOAuthSSO

func (c *Client) EvaluateOAuthSSO(ctx context.Context, provider string, req OAuthSSOEvaluateRequest) (OAuthSSOEvaluation, error)

EvaluateOAuthSSO calls POST /api/v1/sso/oidc/{provider}/evaluate.

func (*Client) ExchangeCIToken

func (c *Client) ExchangeCIToken(ctx context.Context, app, idToken string) (CIToken, error)

ExchangeCIToken calls POST /api/v1/ci/oidc-exchange with a CI identity token.

func (*Client) ExecApp

func (c *Client) ExecApp(ctx context.Context, name string, req ExecRequest) (ExecResponse, error)

ExecApp calls POST /api/v1/apps/{name}/exec: runs command (plus args) inside the app's currently running container and returns its stdout/stderr/exit code once it finishes. AbilityRoot-gated server-side (internal/api/exec.go's own doc comment: secrets are injected as plaintext env vars, so exec can read them anyway, and must sit behind the tier that boundary implies).

func (*Client) ExpireAlertSilence added in v0.2.0

func (c *Client) ExpireAlertSilence(ctx context.Context, id string) (SilenceResource, error)

ExpireAlertSilence calls DELETE /api/v1/alert-silences/{id}, ending it now.

func (*Client) ExplainDatabaseQuery added in v0.2.0

func (c *Client) ExplainDatabaseQuery(ctx context.Context, name string, req DatabaseQueryRequest) (DatabaseQueryResult, error)

ExplainDatabaseQuery calls POST /api/v1/databases/{name}/explain.

func (*Client) ExploreCosts

func (c *Client) ExploreCosts(ctx context.Context, q CostExploreQuery) (CostExploration, error)

ExploreCosts calls GET /api/v1/costs/explore.

func (*Client) ExportAuditLog added in v0.2.0

func (c *Client) ExportAuditLog(ctx context.Context, from, to, format string) ([]byte, error)

ExportAuditLog calls GET /api/v1/audit-log/export and returns the raw NDJSON or CSV body.

func (*Client) ExportDNSZoneRecords added in v0.2.0

func (c *Client) ExportDNSZoneRecords(ctx context.Context, provider, zone, format string) ([]byte, error)

ExportDNSZoneRecords calls GET /api/v1/dns/zones/{zone}/records/export.

func (*Client) ExportDashboard

func (c *Client) ExportDashboard(ctx context.Context, id string) (json.RawMessage, error)

ExportDashboard calls GET /api/v1/dashboards/{id}/export and returns the portable document.

func (*Client) ExportEnv added in v0.2.0

func (c *Client) ExportEnv(ctx context.Context, app, format, values string) ([]byte, error)

ExportEnv calls GET /api/v1/apps/{name}/env/export: the file with sensitive values masked (values "masked") or every value dropped ("none").

func (*Client) ExportEnvRevealed added in v0.2.0

func (c *Client) ExportEnvRevealed(ctx context.Context, app, format string, proof *StepUpProof) ([]byte, error)

ExportEnvRevealed calls POST /api/v1/apps/{name}/env/export: every value, secrets included, after a step-up.

func (*Client) ExportIaC added in v0.2.0

func (c *Client) ExportIaC(ctx context.Context, project, app string, includeEnvValues bool) (iac.ExportResult, error)

ExportIaC calls GET /api/v1/export.

func (*Client) ExportLoadBalancer added in v0.2.0

func (c *Client) ExportLoadBalancer(ctx context.Context, name, format string) (LoadBalancerArtifact, error)

ExportLoadBalancer calls GET /api/v1/apps/{name}/loadbalancer/export.

func (*Client) ExtendPreviewEnvironment added in v0.2.0

func (c *Client) ExtendPreviewEnvironment(ctx context.Context, appName string, prNumber, hours int) (PreviewEnvironmentResource, error)

ExtendPreviewEnvironment calls POST /api/v1/apps/{name}/previews/{number}/extend.

func (*Client) FirewallEdgeAudit

func (c *Client) FirewallEdgeAudit(ctx context.Context, limit int) ([]FirewallEdgeAuditEntry, error)

FirewallEdgeAudit calls GET .../firewall/edge/audit.

func (*Client) FirewallEdgeSettings

func (c *Client) FirewallEdgeSettings(ctx context.Context) (FirewallEdgeSettings, error)

FirewallEdgeSettings calls GET .../firewall/edge/settings.

func (*Client) FirewallEdgeStatus

func (c *Client) FirewallEdgeStatus(ctx context.Context, scope, rng string) (FirewallEdgeStatus, error)

FirewallEdgeStatus calls GET .../firewall/edge/status.

func (*Client) FirewallEdgeTraffic

func (c *Client) FirewallEdgeTraffic(ctx context.Context, scope string) (FirewallEdgeTraffic, error)

FirewallEdgeTraffic calls GET .../firewall/edge/traffic.

func (*Client) FixCPHealth

func (c *Client) FixCPHealth(ctx context.Context, fix string) (CPHealth, error)

FixCPHealth calls POST /api/v1/system/control-plane-health/fix.

func (*Client) FixEnv

func (c *Client) FixEnv(ctx context.Context, name, kind, key string) (EnvCheckResource, error)

FixEnv calls POST /api/v1/apps/{name}/env/check/fix and returns the findings that remain.

func (*Client) FreeDiskSpace

func (c *Client) FreeDiskSpace(ctx context.Context) (FreeSpaceResult, error)

FreeDiskSpace calls POST /api/v1/resilience/disk/free-space.

func (*Client) GeoIPLookup added in v0.2.0

func (c *Client) GeoIPLookup(ctx context.Context, ip string) (GeoIPLookupResource, error)

GeoIPLookup calls GET /api/v1/system/geoip, with ?ip= when ip is set.

func (*Client) GetAIAssistantSettings added in v0.2.0

func (c *Client) GetAIAssistantSettings(ctx context.Context) (AIAssistantSettingsResource, error)

GetAIAssistantSettings calls GET /api/v1/settings/ai-assistant.

func (*Client) GetAIChatSession added in v0.2.0

func (c *Client) GetAIChatSession(ctx context.Context, id string) (AIChatSessionResource, error)

GetAIChatSession calls GET /api/v1/ai/sessions/{id}: the full transcript.

func (*Client) GetAIControl added in v0.2.0

func (c *Client) GetAIControl(ctx context.Context) (AIControlResource, error)

GetAIControl calls GET /api/v1/settings/ai-control.

func (*Client) GetAIUsage

func (c *Client) GetAIUsage(ctx context.Context, days int) (AIUsageResource, error)

GetAIUsage calls GET /api/v1/ai/usage?days=N.

func (*Client) GetAccessReview

func (c *Client) GetAccessReview(ctx context.Context, id string) (AccessReviewDetail, error)

GetAccessReview calls GET /api/v1/compliance/access-reviews/{id}.

func (*Client) GetAdvisorSummary added in v0.2.0

func (c *Client) GetAdvisorSummary(ctx context.Context) (AdvisorSummary, error)

GetAdvisorSummary calls GET /api/v1/resource-advisor/summary.

func (*Client) GetApp

func (c *Client) GetApp(ctx context.Context, name string) (AppResource, error)

GetApp calls GET /api/v1/apps/{name}.

func (*Client) GetAppAutoscale

func (c *Client) GetAppAutoscale(ctx context.Context, app string) (AppAutoscale, error)

GetAppAutoscale calls GET /api/v1/apps/{name}/autoscale; an app with no policy fails with an APIError of status 404.

func (*Client) GetAppAutoscaleHistory

func (c *Client) GetAppAutoscaleHistory(ctx context.Context, app string) (AppAutoscaleHistory, error)

GetAppAutoscaleHistory calls GET /api/v1/apps/{name}/autoscale/history.

func (*Client) GetAppBudget

func (c *Client) GetAppBudget(ctx context.Context, app string) (AppBudget, error)

GetAppBudget calls GET /api/v1/apps/{name}/budget; an app with no budget fails with an APIError of status 404.

func (*Client) GetAppBudgetHistory

func (c *Client) GetAppBudgetHistory(ctx context.Context, app string) (AppBudgetHistory, error)

GetAppBudgetHistory calls GET /api/v1/apps/{name}/budget/history.

func (*Client) GetAppCache

func (c *Client) GetAppCache(ctx context.Context, name string) (AppCacheResource, error)

GetAppCache calls GET /api/v1/apps/{name}/cache.

func (*Client) GetAppChanges added in v0.2.0

func (c *Client) GetAppChanges(ctx context.Context, name string, until time.Time, window string) (*RecentChangesResource, error)

GetAppChanges calls GET /api/v1/apps/{name}/changes. Zero until means now; an empty window keeps the server default.

func (*Client) GetAppCostEstimate added in v0.2.0

func (c *Client) GetAppCostEstimate(ctx context.Context, name string) (CostEstimateResource, error)

GetAppCostEstimate calls GET /api/v1/apps/{name}/cost-estimate (internal/api/cost_estimate.go's handleAppCostEstimate): a read-only, deterministic "what this would cost elsewhere" estimate derived from the app's declared or observed CPU/memory. Not a real bill.

func (*Client) GetAppEgressPolicy added in v0.2.0

func (c *Client) GetAppEgressPolicy(ctx context.Context, name string) (AppEgressPolicyResource, error)

GetAppEgressPolicy calls GET /api/v1/apps/{name}/egress-policy: name's current outbound network allowlist, unconfigured (Mode/Allow both empty) meaning unrestricted egress.

func (*Client) GetAppEnvironmentDomains added in v0.2.0

func (c *Client) GetAppEnvironmentDomains(ctx context.Context, name string) (AppEnvironmentDomains, error)

GetAppEnvironmentDomains calls GET /api/v1/apps/{name}/environment-domains.

func (*Client) GetAppExposure

func (c *Client) GetAppExposure(ctx context.Context, name string) (AppExposureResource, error)

GetAppExposure calls GET /api/v1/apps/{name}/exposure.

func (*Client) GetAppGitHubActions

func (c *Client) GetAppGitHubActions(ctx context.Context, name string) (AppGitHubActionsResource, error)

GetAppGitHubActions calls GET /api/v1/apps/{name}/github-actions.

func (*Client) GetAppGroup

func (c *Client) GetAppGroup(ctx context.Context, name string) (AppGroupResource, error)

GetAppGroup calls GET /api/v1/apps/{name}/group (internal/api/apps_group.go's handleGetAppGroup): name's sibling services under the same store.App, one call whether name already has siblings or is its own one-service group.

func (*Client) GetAppHealth added in v0.2.0

func (c *Client) GetAppHealth(ctx context.Context, name string) (AppHealthResource, error)

GetAppHealth calls GET /api/v1/apps/{name}/health.

func (*Client) GetAppHealthScore added in v0.2.0

func (c *Client) GetAppHealthScore(ctx context.Context, name string) (AppHealthScoreResource, error)

GetAppHealthScore calls GET /api/v1/apps/{name}/health-score: a live synthesis of deploy, security, resilience, and observability signals into one pass/warn/fail verdict per category.

func (*Client) GetAppHookRuns

func (c *Client) GetAppHookRuns(ctx context.Context, name string) (AppHookRunsResource, error)

GetAppHookRuns calls GET /api/v1/apps/{name}/hook-runs (internal/api/apps_hooks.go's handleGetAppHookRuns): the most recent outcome of each of name's pre/post-deploy hooks.

func (*Client) GetAppImportSession added in v0.2.0

func (c *Client) GetAppImportSession(ctx context.Context, id string) (AppImportView, error)

GetAppImportSession calls GET /api/v1/migration/apps/sessions/{id}.

func (*Client) GetAppIngressLimits

func (c *Client) GetAppIngressLimits(ctx context.Context, app string) (AppIngressLimits, error)

GetAppIngressLimits calls GET /api/v1/apps/{name}/ingress-limits.

func (*Client) GetAppMaintenance

func (c *Client) GetAppMaintenance(ctx context.Context, name string) (AppMaintenanceResource, error)

GetAppMaintenance calls GET /api/v1/apps/{name}/maintenance: the state of every domain of the app.

func (*Client) GetAppNetwork

func (c *Client) GetAppNetwork(ctx context.Context, name string) (NetworkResource, error)

GetAppNetwork calls GET /api/v1/apps/{name}/network (internal/api/network.go's handleGetAppNetwork).

func (*Client) GetAppResourceRecommendation

func (c *Client) GetAppResourceRecommendation(ctx context.Context, name string) (ResourceRecommendationResource, error)

GetAppResourceRecommendation calls GET /api/v1/apps/{name}/resource-recommendation (internal/api/resource_recommendation.go's handleAppResourceRecommendation): a read-only, deterministic memory/CPU right-sizing suggestion derived from the app's own historical usage.

func (*Client) GetAppSchedule added in v0.2.0

func (c *Client) GetAppSchedule(ctx context.Context, name string) (AppScheduleResource, error)

GetAppSchedule calls GET /api/v1/apps/{name}/schedule.

func (*Client) GetAppSleep added in v0.2.0

func (c *Client) GetAppSleep(ctx context.Context, appName string) (AppSleepResource, error)

GetAppSleep calls GET /api/v1/apps/{name}/sleep.

func (*Client) GetAppTimeline added in v0.2.0

func (c *Client) GetAppTimeline(ctx context.Context, name string, limit int, before string) (TimelineResponse, error)

GetAppTimeline calls GET /api/v1/apps/{name}/timeline. limit 0 keeps the server default; before is the previous page's next_cursor.

func (*Client) GetAppTraffic

func (c *Client) GetAppTraffic(ctx context.Context, name, window string) (AppTrafficResource, error)

GetAppTraffic calls GET /api/v1/apps/{name}/traffic for window 5m, 1h, 24h or 7d.

func (*Client) GetAppURLs

func (c *Client) GetAppURLs(ctx context.Context, app string) (AppURLs, error)

GetAppURLs calls GET /api/v1/apps/{name}/urls.

func (*Client) GetAppVolumeMove added in v0.2.0

func (c *Client) GetAppVolumeMove(ctx context.Context, name, id string) (AppVolumeMoveResource, error)

GetAppVolumeMove calls GET /api/v1/apps/{name}/moves/{id}: what a caller polls while MoveAppWithVolumes' own returned Status is still "running".

func (*Client) GetAppsSummary added in v0.2.0

func (c *Client) GetAppsSummary(ctx context.Context, q AppListQuery) (AppsSummary, error)

GetAppsSummary calls GET /api/v1/apps-summary.

func (*Client) GetArchivePolicy

func (c *Client) GetArchivePolicy(ctx context.Context) (ArchivePolicy, error)

GetArchivePolicy calls GET /api/v1/archives/policy.

func (*Client) GetAttentionFeed added in v0.2.0

func (c *Client) GetAttentionFeed(ctx context.Context) ([]AttentionFeedItem, error)

GetAttentionFeed calls GET /api/v1/attention/feed.

func (*Client) GetAuthEngineStatus added in v0.2.0

func (c *Client) GetAuthEngineStatus(ctx context.Context) (AuthEngineStatusResource, error)

GetAuthEngineStatus calls GET /api/v1/auth-engine/status (root only).

func (*Client) GetAutoRollback added in v0.2.0

func (c *Client) GetAutoRollback(ctx context.Context, appName string) (AutoRollbackSettingResource, error)

GetAutoRollback calls GET /api/v1/apps/{name}/auto-rollback: whether appName rolls itself back automatically the next time a crashloop alert rule fires for it.

func (*Client) GetAutoRollbackSLOBurn added in v0.2.0

func (c *Client) GetAutoRollbackSLOBurn(ctx context.Context, appName string) (AutoRollbackSLOBurnSettingResource, error)

GetAutoRollbackSLOBurn calls GET /api/v1/apps/{name}/auto-rollback-slo-burn: which mode appName reacts in the next time a kind=slo_burn alert rule fires for it.

func (*Client) GetBackupDrill added in v0.2.0

func (c *Client) GetBackupDrill(ctx context.Context, id string) (BackupDrillResource, error)

GetBackupDrill calls GET /api/v1/backups/drills/{id}.

func (*Client) GetBackupTarget

func (c *Client) GetBackupTarget(ctx context.Context, id string) (BackupTargetResource, error)

GetBackupTarget calls GET /api/v1/backup-targets/{id}.

func (*Client) GetBitbucketAppStatus added in v0.2.0

func (c *Client) GetBitbucketAppStatus(ctx context.Context) (BitbucketAppStatusResource, error)

GetBitbucketAppStatus calls GET /api/v1/bitbucket-app: the connection status (configured, and whether the OAuth consumer has been authorized).

func (*Client) GetBuild

func (c *Client) GetBuild(ctx context.Context, id string) (BuildResource, error)

GetBuild calls GET /api/v1/builds/{id}.

func (*Client) GetBuildCache

func (c *Client) GetBuildCache(ctx context.Context, node string) (BuildCacheResource, error)

GetBuildCache calls GET /api/v1/builds/cache.

func (*Client) GetBuildCacheStats added in v0.2.0

func (c *Client) GetBuildCacheStats(ctx context.Context, app string) (BuildCacheStats, error)

GetBuildCacheStats calls GET /api/v1/build-cache/stats.

func (*Client) GetBuildLimits

func (c *Client) GetBuildLimits(ctx context.Context) (BuildLimits, error)

GetBuildLimits calls GET /api/v1/build-limits.

func (*Client) GetBuildSpeed

func (c *Client) GetBuildSpeed(ctx context.Context, app string) (BuildSpeed, error)

GetBuildSpeed calls GET /api/v1/apps/{name}/build-speed.

func (*Client) GetBuildStats

func (c *Client) GetBuildStats(ctx context.Context, app string, limit int) (BuildStats, error)

GetBuildStats calls GET /api/v1/apps/{name}/build-stats.

func (*Client) GetCDNOverview

func (c *Client) GetCDNOverview(ctx context.Context, window string) (CDNOverview, error)

GetCDNOverview calls GET /api/v1/cdn/overview, window being 5m, 1h, 24h or 7d (empty means 1h).

func (*Client) GetCIWorkflow

func (c *Client) GetCIWorkflow(ctx context.Context, name string) (CIWorkflow, error)

GetCIWorkflow calls GET /api/v1/apps/{name}/ci/workflow.

func (*Client) GetCPHealth

func (c *Client) GetCPHealth(ctx context.Context) (CPHealth, error)

GetCPHealth calls GET /api/v1/system/control-plane-health.

func (*Client) GetCanary added in v0.2.0

func (c *Client) GetCanary(ctx context.Context, appName string) (CanaryResource, error)

GetCanary calls GET /api/v1/apps/{name}/canary.

func (*Client) GetCancelSuperseded added in v0.2.0

func (c *Client) GetCancelSuperseded(ctx context.Context, appName string) (CancelSupersededResource, error)

GetCancelSuperseded calls GET /api/v1/apps/{name}/cancel-superseded.

func (*Client) GetChangelog added in v0.2.0

func (c *Client) GetChangelog(ctx context.Context, limit int) (ChangelogResource, error)

GetChangelog calls GET /api/v1/changelog: the most recent release notes parsed from the control plane's own CHANGELOG.md. limit <= 0 uses the API's own default page size.

func (*Client) GetChannelQuietHours

func (c *Client) GetChannelQuietHours(ctx context.Context, id string) (QuietHoursResource, error)

GetChannelQuietHours calls GET /api/v1/notification-channels/{id}/quiet-hours.

func (*Client) GetCloudflareDNS

func (c *Client) GetCloudflareDNS(ctx context.Context) (CloudflareDNSResource, error)

GetCloudflareDNS calls GET /api/v1/settings/cloudflare-dns: the Cloudflare DNS-01 credential's enabled/has_token state, needed for ACME to issue real wildcard certificates (HTTP-01 cannot).

func (*Client) GetCloudflareTunnel

func (c *Client) GetCloudflareTunnel(ctx context.Context) (CloudflareTunnelResource, error)

GetCloudflareTunnel calls GET /api/v1/settings/cloudflare-tunnel: the cloudflared container's configured/observed state, exposing the control plane through a Cloudflare Tunnel instead of an inbound port.

func (*Client) GetCodeLoginSettings added in v0.2.0

func (c *Client) GetCodeLoginSettings(ctx context.Context) (CodeLoginSettings, error)

GetCodeLoginSettings calls GET /api/v1/settings/auth/code-login.

func (*Client) GetComposeRevision added in v0.2.0

func (c *Client) GetComposeRevision(ctx context.Context, name string, revision int) (ComposeRevision, error)

GetComposeRevision calls GET /api/v1/apps/{name}/compose/revisions/{revision}.

func (*Client) GetComposeStack added in v0.2.0

func (c *Client) GetComposeStack(ctx context.Context, name string) (ComposeStack, error)

GetComposeStack calls GET /api/v1/apps/{name}/compose.

func (*Client) GetControlPlaneDR added in v0.2.0

func (c *Client) GetControlPlaneDR(ctx context.Context) (ControlPlaneDR, error)

GetControlPlaneDR calls GET /api/v1/system/control-plane-dr.

func (*Client) GetControlPlaneRestorePlan

func (c *Client) GetControlPlaneRestorePlan(ctx context.Context) (ControlPlaneRestorePlan, error)

GetControlPlaneRestorePlan calls GET /api/v1/system/control-plane-dr/restore-plan.

func (*Client) GetDNSProviderPlugin

func (c *Client) GetDNSProviderPlugin(ctx context.Context) (DNSProviderPlugin, error)

GetDNSProviderPlugin calls GET /api/v1/settings/dns-provider-plugin.

func (*Client) GetDashboard

func (c *Client) GetDashboard(ctx context.Context, id string) (DashboardResource, error)

GetDashboard calls GET /api/v1/dashboards/{id}.

func (*Client) GetDashboardURL added in v0.2.0

func (c *Client) GetDashboardURL(ctx context.Context) (DashboardURLResource, error)

GetDashboardURL calls GET /api/v1/settings/dashboard-url.

func (*Client) GetDatabase

func (c *Client) GetDatabase(ctx context.Context, name string) (DatabaseResource, error)

GetDatabase calls GET /api/v1/databases/{name}.

func (*Client) GetDatabaseDataCopy added in v0.2.0

func (c *Client) GetDatabaseDataCopy(ctx context.Context, name string) (DataCopyStatus, error)

GetDatabaseDataCopy calls GET /api/v1/imports/platform/databases/{name}.

func (*Client) GetDatabaseNetwork added in v0.2.0

func (c *Client) GetDatabaseNetwork(ctx context.Context, name string) (DatabaseNetwork, error)

GetDatabaseNetwork calls GET /api/v1/databases/{name}/network.

func (*Client) GetDatabasePasswordRotation

func (c *Client) GetDatabasePasswordRotation(ctx context.Context, name string) (DatabasePasswordRotation, error)

GetDatabasePasswordRotation calls GET /api/v1/databases/{name}/password-rotation.

func (*Client) GetDatabaseResourceRecommendation

func (c *Client) GetDatabaseResourceRecommendation(ctx context.Context, name string) (ResourceRecommendationResource, error)

GetDatabaseResourceRecommendation calls GET /api/v1/databases/{name}/resource-recommendation (internal/api/database_resource_recommendation.go's handleDatabaseResourceRecommendation): the database-kind counterpart to GetAppResourceRecommendation, same wire shape.

func (*Client) GetDatabaseSchema added in v0.2.0

func (c *Client) GetDatabaseSchema(ctx context.Context, name string) (DatabaseSchemaResource, error)

GetDatabaseSchema calls GET /api/v1/databases/{name}/schema.

func (*Client) GetDatabaseStatus added in v0.2.0

func (c *Client) GetDatabaseStatus(ctx context.Context, name string) ([]ConditionResource, error)

GetDatabaseStatus calls GET /api/v1/databases/{name}/status.

func (*Client) GetDatabaseUpgrades added in v0.2.0

func (c *Client) GetDatabaseUpgrades(ctx context.Context, name string) (DBUpgradesResource, error)

GetDatabaseUpgrades calls GET /api/v1/databases/{name}/upgrades.

func (*Client) GetDatabaseWho added in v0.2.0

func (c *Client) GetDatabaseWho(ctx context.Context, name string) (DatabaseWho, error)

GetDatabaseWho calls GET /api/v1/databases/{name}/access/principals.

func (*Client) GetDeploy added in v0.2.0

func (c *Client) GetDeploy(ctx context.Context, name, deployID string) (DeployAttemptResource, error)

GetDeploy calls GET /api/v1/apps/{name}/deploys/{deployId}: one deploy attempt with its structured failure. deployID may be "latest".

func (*Client) GetDeployApproval added in v0.2.0

func (c *Client) GetDeployApproval(ctx context.Context, id string) (DeployApprovalResource, error)

GetDeployApproval calls GET /api/v1/deploy-approvals/{id}.

func (*Client) GetDeployFreeze added in v0.2.0

func (c *Client) GetDeployFreeze(ctx context.Context, name string) (DeployFreezeResource, error)

GetDeployFreeze calls GET /api/v1/apps/{name}/deploy-freeze.

func (*Client) GetDeployGate added in v0.2.0

func (c *Client) GetDeployGate(ctx context.Context, appName, deployID string) (DeployGateResource, error)

GetDeployGate calls GET /api/v1/apps/{name}/deploys/{deployId}/gate.

func (*Client) GetDeploySafety added in v0.2.0

func (c *Client) GetDeploySafety(ctx context.Context, appName string) (DeploySafetyResource, error)

GetDeploySafety calls GET /api/v1/apps/{name}/deploy-safety.

func (*Client) GetDeployStatus

func (c *Client) GetDeployStatus(ctx context.Context, name string) ([]ConditionResource, error)

GetDeployStatus calls GET /api/v1/apps/{name}/deploys: the application controller's current stored reconcile conditions, not a deploy history log (internal/api/deploys.go's own handleDeployHistory doc comment).

func (*Client) GetDeploymentSecretScan

func (c *Client) GetDeploymentSecretScan(ctx context.Context, name, id string) (SecretScanRun, error)

GetDeploymentSecretScan calls GET /api/v1/apps/{name}/deployments/{id}/secret-scan.

func (*Client) GetDeploymentsSummary added in v0.2.0

func (c *Client) GetDeploymentsSummary(ctx context.Context, window string) (DeploymentSummary, error)

GetDeploymentsSummary calls GET /api/v1/deployments/summary; window is a duration such as 24h or 7d, empty for the server default.

func (*Client) GetDiskResilience

func (c *Client) GetDiskResilience(ctx context.Context) (DiskResilience, error)

GetDiskResilience calls GET /api/v1/resilience/disk.

func (*Client) GetDockerGuard added in v0.2.0

func (c *Client) GetDockerGuard(ctx context.Context) (DockerGuardResource, error)

GetDockerGuard calls GET /api/v1/system/docker-guard.

func (*Client) GetDockerHealth

func (c *Client) GetDockerHealth(ctx context.Context) (DockerHealthResource, error)

GetDockerHealth calls GET /api/v1/docker/health.

func (*Client) GetDomainAuthGate added in v0.2.0

func (c *Client) GetDomainAuthGate(ctx context.Context, name, domain string) (DomainAuthGateResource, error)

GetDomainAuthGate calls GET /api/v1/apps/{name}/domains/{domain}/auth-gate.

func (*Client) GetDomainAutomation added in v0.2.0

func (c *Client) GetDomainAutomation(ctx context.Context) (DomainAutomationResource, error)

GetDomainAutomation calls GET /api/v1/settings/domain-automation.

func (*Client) GetDomainBasicAuth

func (c *Client) GetDomainBasicAuth(ctx context.Context, name, domain string) (DomainBasicAuthResource, error)

GetDomainBasicAuth calls GET /api/v1/apps/{name}/domains/{domain}/auth: domain's current HTTP Basic Auth state.

func (*Client) GetDomainCache added in v0.2.0

func (c *Client) GetDomainCache(ctx context.Context, name, domain string) (CachePolicyResource, error)

GetDomainCache calls GET .../domains/{domain}/cache.

func (*Client) GetDomainCacheStats added in v0.2.0

func (c *Client) GetDomainCacheStats(ctx context.Context, name, domain string) (CacheStats, error)

GetDomainCacheStats calls GET .../domains/{domain}/cache/stats.

func (*Client) GetDomainErrorPages added in v0.2.0

func (c *Client) GetDomainErrorPages(ctx context.Context, name, domain string) (DomainErrorPagesResource, error)

GetDomainErrorPages calls GET /api/v1/apps/{name}/domains/{domain}/error-pages: every custom error page currently configured for domain.

func (*Client) GetDomainForwarders added in v0.2.0

func (c *Client) GetDomainForwarders(ctx context.Context, name, domain string) (ForwardersPolicyResource, error)

GetDomainForwarders calls GET .../domains/{domain}/forwarders.

func (*Client) GetDomainGeo added in v0.2.0

func (c *Client) GetDomainGeo(ctx context.Context, name, domain string) (GeoPolicyResource, error)

GetDomainGeo calls GET .../domains/{domain}/geo.

func (*Client) GetDomainHeaders added in v0.2.0

func (c *Client) GetDomainHeaders(ctx context.Context, name, domain string) (HeadersPolicyResource, error)

GetDomainHeaders calls GET .../domains/{domain}/headers.

func (*Client) GetDomainMaintenance

func (c *Client) GetDomainMaintenance(ctx context.Context, name, domain string) (DomainMaintenanceResource, error)

GetDomainMaintenance calls GET /api/v1/apps/{name}/domains/{domain}/maintenance: domain's current maintenance-mode state.

func (*Client) GetDomainPolicies added in v0.2.0

func (c *Client) GetDomainPolicies(ctx context.Context, name, domain string) (DomainPoliciesResource, error)

GetDomainPolicies calls GET .../domains/{domain}/policies.

func (*Client) GetDomainPorts added in v0.2.0

func (c *Client) GetDomainPorts(ctx context.Context, name, domain string) (DomainPortsResource, error)

GetDomainPorts calls GET .../domains/{domain}/ports.

func (*Client) GetDomainRedirect added in v0.2.0

func (c *Client) GetDomainRedirect(ctx context.Context, name, domain string) (DomainRedirectResource, error)

GetDomainRedirect calls GET /api/v1/apps/{name}/domains/{domain}/redirect: domain's current redirect configuration.

func (*Client) GetDomainRedirects added in v0.2.0

func (c *Client) GetDomainRedirects(ctx context.Context, name, domain string) (DomainRedirectsResource, error)

GetDomainRedirects calls GET .../domains/{domain}/redirects.

func (*Client) GetDomainSearchVisibility added in v0.2.0

func (c *Client) GetDomainSearchVisibility(ctx context.Context, name, domain string) (DomainSearchVisibilityResource, error)

GetDomainSearchVisibility calls GET .../domains/{domain}/search-visibility.

func (*Client) GetDomainShield

func (c *Client) GetDomainShield(ctx context.Context, name, domain string) (ShieldPolicyResource, error)

GetDomainShield calls GET .../domains/{domain}/shield.

func (*Client) GetDomainTLSCert

func (c *Client) GetDomainTLSCert(ctx context.Context, name, domain string) (DomainTLSCertResource, error)

GetDomainTLSCert calls GET /api/v1/apps/{name}/domains/{domain}/tls-cert: domain's current BYO certificate state.

func (*Client) GetDomainWAF added in v0.2.0

func (c *Client) GetDomainWAF(ctx context.Context, name, domain string) (DomainWAFResource, error)

GetDomainWAF calls GET /api/v1/apps/{name}/domains/{domain}/waf: domain's current WAF and rate-limit state.

func (*Client) GetEdgeSettings

func (c *Client) GetEdgeSettings(ctx context.Context) (EdgeSettings, error)

GetEdgeSettings calls GET /api/v1/settings/ingress/edge.

func (*Client) GetEmailSettings added in v0.2.0

func (c *Client) GetEmailSettings(ctx context.Context) (EmailSettingsResource, error)

GetEmailSettings calls GET /api/v1/settings/email.

func (*Client) GetEncryptionKeys

func (c *Client) GetEncryptionKeys(ctx context.Context) (EncryptionKeysStatus, error)

GetEncryptionKeys calls GET /api/v1/system/encryption-keys.

func (*Client) GetEnvSettings added in v0.2.0

func (c *Client) GetEnvSettings(ctx context.Context, app string) (EnvSettings, error)

GetEnvSettings calls GET /api/v1/apps/{name}/env/settings.

func (*Client) GetEnvironmentEnv

func (c *Client) GetEnvironmentEnv(ctx context.Context, id string) (map[string]string, error)

GetEnvironmentEnv calls GET /api/v1/environments/{id}/env.

func (*Client) GetError

func (c *Client) GetError(ctx context.Context, app, fingerprint string) (ErrorIssueDetail, error)

GetError calls GET /api/v1/apps/{name}/errors/{fingerprint}.

func (*Client) GetErrorTracking

func (c *Client) GetErrorTracking(ctx context.Context, app string) (ErrorTrackingResource, error)

GetErrorTracking calls GET /api/v1/apps/{name}/error-tracking.

func (*Client) GetEvidencePack

func (c *Client) GetEvidencePack(ctx context.Context, id string) (EvidencePackResource, error)

GetEvidencePack calls GET /api/v1/compliance/evidence-packs/{id}.

func (*Client) GetExecAccess added in v0.2.0

func (c *Client) GetExecAccess(ctx context.Context, appName string) (ExecAccessResource, error)

GetExecAccess calls GET /api/v1/apps/{name}/exec-access: whether appName's shell/exec routes (POST .../exec, GET .../terminal) are even attempted, regardless of the caller's own IAM abilities. On by default.

func (*Client) GetExportDestination added in v0.2.0

func (c *Client) GetExportDestination(ctx context.Context, id string) (ExportDestinationResource, error)

GetExportDestination calls GET /api/v1/export/destinations/{id}.

func (*Client) GetExposure added in v0.2.0

func (c *Client) GetExposure(ctx context.Context, node string, probe bool) (ExposureReport, error)

GetExposure calls GET /api/v1/firewall/exposure.

func (*Client) GetFailureContext added in v0.2.0

func (c *Client) GetFailureContext(ctx context.Context, name string) (FailureContextResource, error)

GetFailureContext calls GET /api/v1/apps/{name}/failure-context.

func (*Client) GetFeatureFlag

func (c *Client) GetFeatureFlag(ctx context.Context, name, id string) (FeatureFlagResource, error)

GetFeatureFlag calls GET /api/v1/apps/{name}/flags/{id}.

func (*Client) GetFleetResourceUsage added in v0.2.0

func (c *Client) GetFleetResourceUsage(ctx context.Context) (FleetResourceUsageResource, error)

GetFleetResourceUsage calls GET /api/v1/nodes/resource-usage (internal/api/node_resource_usage.go's handleFleetResourceUsage): the latest CPU/memory/disk reading for every node plus a fleet-wide rollup, the node-scoped counterpart to ListAppResourceUsage.

func (*Client) GetFramework

func (c *Client) GetFramework(ctx context.Context, id string) (frameworks.Preset, error)

GetFramework calls GET /api/v1/frameworks/{id}.

func (*Client) GetFrameworkDockerfile

func (c *Client) GetFrameworkDockerfile(ctx context.Context, id string) (string, error)

GetFrameworkDockerfile calls GET /api/v1/frameworks/{id}/dockerfile.

func (*Client) GetGitHubAppStatus added in v0.2.0

func (c *Client) GetGitHubAppStatus(ctx context.Context) (GitHubAppStatusResource, error)

GetGitHubAppStatus calls GET /api/v1/github-app: the connection status (not connected / connected / connected but not yet installed).

func (*Client) GetGitLabAppStatus added in v0.2.0

func (c *Client) GetGitLabAppStatus(ctx context.Context) (GitLabAppStatusResource, error)

GetGitLabAppStatus calls GET /api/v1/gitlab-app: the connection status (configured, and whether the OAuth authorization-code flow has completed).

func (*Client) GetGitRemote

func (c *Client) GetGitRemote(ctx context.Context, name string) (GitRemote, error)

GetGitRemote calls GET /api/v1/apps/{name}/git-remote.

func (*Client) GetGitSource

func (c *Client) GetGitSource(ctx context.Context, name string) (GitSourceResource, error)

GetGitSource calls GET /api/v1/apps/{name}/git-source.

func (*Client) GetGiteaAppStatus added in v0.2.0

func (c *Client) GetGiteaAppStatus(ctx context.Context) (GiteaAppStatusResource, error)

GetGiteaAppStatus calls GET /api/v1/gitea-app: the connection status (configured, and whether the OAuth authorization-code flow has completed).

func (*Client) GetGlobalDeployFreeze added in v0.2.0

func (c *Client) GetGlobalDeployFreeze(ctx context.Context) (DeployFreezeResource, error)

GetGlobalDeployFreeze calls GET /api/v1/settings/deploy-freeze.

func (*Client) GetGoLive added in v0.2.0

func (c *Client) GetGoLive(ctx context.Context, app, domain string) (GoLiveResult, error)

GetGoLive calls GET .../domains/{domain}/go-live (a poll friendly status).

func (*Client) GetHSTS

func (c *Client) GetHSTS(ctx context.Context) (HSTSStatus, error)

GetHSTS calls GET /api/v1/security/hsts (root).

func (*Client) GetHTTPSStatus added in v0.2.0

func (c *Client) GetHTTPSStatus(ctx context.Context) (HTTPSStatusResource, error)

GetHTTPSStatus calls GET /api/v1/settings/ingress/https.

func (*Client) GetImageAutoUpdate added in v0.2.0

func (c *Client) GetImageAutoUpdate(ctx context.Context, appName string) (ImageAutoUpdateResource, error)

GetImageAutoUpdate calls GET /api/v1/apps/{name}/auto-update.

func (*Client) GetImageLayers

func (c *Client) GetImageLayers(ctx context.Context, node, id string) (ImageLayersResource, error)

GetImageLayers calls GET /api/v1/images/layers.

func (*Client) GetImageStatus

func (c *Client) GetImageStatus(ctx context.Context, appName string) (ImageStatusResource, error)

GetImageStatus calls GET /api/v1/apps/{name}/image-status.

func (*Client) GetInboxPrefs

func (c *Client) GetInboxPrefs(ctx context.Context) (InboxPrefs, error)

GetInboxPrefs calls GET /api/v1/inbox/preferences.

func (*Client) GetIngressConnectivity added in v0.2.0

func (c *Client) GetIngressConnectivity(ctx context.Context) (IngressConnectivity, error)

GetIngressConnectivity calls GET /api/v1/ingress/connectivity.

func (*Client) GetIngressSettings added in v0.2.0

func (c *Client) GetIngressSettings(ctx context.Context) (IngressSettingsResource, error)

GetIngressSettings calls GET /api/v1/settings/ingress.

func (*Client) GetIntegrity

func (c *Client) GetIntegrity(ctx context.Context) (Integrity, error)

GetIntegrity calls GET /api/v1/system/integrity.

func (*Client) GetJanitor

func (c *Client) GetJanitor(ctx context.Context) (JanitorStatus, error)

GetJanitor calls GET /api/v1/system/janitor.

func (*Client) GetJob added in v0.2.0

func (c *Client) GetJob(ctx context.Context, app, id string) (ScheduledTaskResource, error)

GetJob calls GET /api/v1/apps/{name}/jobs/{id}; id may be the job's name.

func (*Client) GetJobRun added in v0.2.0

func (c *Client) GetJobRun(ctx context.Context, app, id, runID string) (JobRunResource, error)

GetJobRun calls GET .../jobs/{id}/runs/{run}, including the output.

func (*Client) GetLoadBalancer added in v0.2.0

func (c *Client) GetLoadBalancer(ctx context.Context, name string) (LoadBalancerResource, error)

GetLoadBalancer calls GET /api/v1/apps/{name}/loadbalancer.

func (*Client) GetLoadBalancerHistory added in v0.2.0

func (c *Client) GetLoadBalancerHistory(ctx context.Context, name string, limit int) (LoadBalancerHistory, error)

GetLoadBalancerHistory calls GET /api/v1/apps/{name}/loadbalancer/history.

func (*Client) GetLoadBalancerStatus added in v0.2.0

func (c *Client) GetLoadBalancerStatus(ctx context.Context, name string) (LoadBalancerStatus, error)

GetLoadBalancerStatus calls GET /api/v1/apps/{name}/loadbalancer/status.

func (*Client) GetLocalModelCatalog

func (c *Client) GetLocalModelCatalog(ctx context.Context, nodeID string) (LocalModelCatalog, error)

GetLocalModelCatalog calls GET /api/v1/model-catalog.

func (*Client) GetLogBudget

func (c *Client) GetLogBudget(ctx context.Context, app string) (LogBudget, error)

GetLogBudget calls GET /api/v1/apps/{name}/log-budget.

func (*Client) GetLogDrain

func (c *Client) GetLogDrain(ctx context.Context, name string) (LogDrainResource, error)

GetLogDrain calls GET /api/v1/apps/{name}/log-drain: the app's currently configured external log-forwarding sink. Returns *APIError with StatusCode 404 (via errors.As) if the app doesn't exist or has no drain configured, the same two-404-cases-in-one shape that route's own doc comment describes.

func (*Client) GetLogPipeline

func (c *Client) GetLogPipeline(ctx context.Context, app string) (LogPipeline, error)

GetLogPipeline calls GET /api/v1/apps/{name}/log-pipeline.

func (*Client) GetLogSignatures added in v0.2.0

func (c *Client) GetLogSignatures(ctx context.Context, app string, s LogSignatureQuery) (LogSignatures, error)

GetLogSignatures calls GET /api/v1/apps/{name}/logs/signatures.

func (*Client) GetLogUsage

func (c *Client) GetLogUsage(ctx context.Context) (LogUsage, error)

GetLogUsage calls GET /api/v1/logs/usage.

func (*Client) GetMeshConnectivity added in v0.2.0

func (c *Client) GetMeshConnectivity(ctx context.Context) (MeshConnectivity, error)

GetMeshConnectivity calls GET /api/v1/mesh/connectivity.

func (*Client) GetMeshSettings added in v0.2.0

func (c *Client) GetMeshSettings(ctx context.Context) (MeshSettings, error)

GetMeshSettings calls GET /api/v1/mesh/settings.

func (*Client) GetMeshStatus added in v0.2.0

func (c *Client) GetMeshStatus(ctx context.Context) (MeshStatusResource, error)

GetMeshStatus calls GET /api/v1/mesh: this node's live WireGuard mesh state, every peer it currently knows about, and its own most recent key rotation if any. Returns a 501-wrapping error when mesh networking is not enabled on the target control plane.

func (*Client) GetMigrationChecklist

func (c *Client) GetMigrationChecklist(ctx context.Context, app string) (MigrationChecklist, error)

GetMigrationChecklist calls GET /api/v1/migration/checklists/{app}.

func (*Client) GetMigrationSession added in v0.2.0

func (c *Client) GetMigrationSession(ctx context.Context, id string) (HubSession, error)

GetMigrationSession returns one session's plan and progress.

func (*Client) GetModel added in v0.2.0

func (c *Client) GetModel(ctx context.Context, name string) (ModelResource, error)

GetModel calls GET /api/v1/models/{name}.

func (*Client) GetModelDetail

func (c *Client) GetModelDetail(ctx context.Context, name string) (ModelDetail, error)

GetModelDetail calls GET /api/v1/models/{name} and keeps the CPU fields.

func (*Client) GetModelEngineMetrics added in v0.2.0

func (c *Client) GetModelEngineMetrics(ctx context.Context, name string, since time.Duration) (EngineMetricsReport, error)

GetModelEngineMetrics calls GET /api/v1/models/{name}/engine-metrics.

func (*Client) GetModelFit added in v0.2.0

func (c *Client) GetModelFit(ctx context.Context, name string) (ModelFitReport, error)

GetModelFit calls GET /api/v1/models/{name}/fit.

func (*Client) GetModelUsage added in v0.2.0

func (c *Client) GetModelUsage(ctx context.Context, name string, since time.Duration) (ModelUsageReport, error)

GetModelUsage calls GET /api/v1/models/{name}/usage.

func (*Client) GetNetworkProxyStatus added in v0.2.0

func (c *Client) GetNetworkProxyStatus(ctx context.Context) (NetworkProxyResource, error)

GetNetworkProxyStatus calls GET /api/v1/network/proxy: per-domain reachability (does this control plane's own ingress reach the app behind it) plus certificate status, the Traffic dashboard page's own data source.

func (*Client) GetNetworkShare added in v0.2.0

func (c *Client) GetNetworkShare(ctx context.Context, id string) (NetworkShareResource, error)

GetNetworkShare calls GET /api/v1/network-shares/{id}.

func (*Client) GetNetworkTopology added in v0.2.0

func (c *Client) GetNetworkTopology(ctx context.Context) (NetworkTopologyResource, error)

GetNetworkTopology calls GET /api/v1/network/topology: a read-only, whole-mesh summary of nodes, apps, databases, load balancers, and app-to-database connections.

func (*Client) GetNode

func (c *Client) GetNode(ctx context.Context, id string) (NodeResource, error)

GetNode calls GET /api/v1/nodes/{id}.

func (*Client) GetNodeAllocations

func (c *Client) GetNodeAllocations(ctx context.Context) (NodeAllocations, error)

GetNodeAllocations calls GET /api/v1/nodes/allocations.

func (*Client) GetNodeCapacityForecast added in v0.2.0

func (c *Client) GetNodeCapacityForecast(ctx context.Context, id string) (NodeCapacityForecastResource, error)

GetNodeCapacityForecast calls GET /api/v1/nodes/{id}/capacity-forecast (internal/api/node_capacity_forecast.go's handleNodeCapacityForecast): a rough "days until full at the current trend" projection for id's disk and memory, derived from a deterministic linear-trend fit over recent usage history, never from an external model. Disk/Memory come back nil when the fitted trend is flat or improving, or there isn't enough history yet.

func (*Client) GetNodeDrain added in v0.2.0

func (c *Client) GetNodeDrain(ctx context.Context, id string) (NodeDrainResource, error)

GetNodeDrain calls GET /api/v1/node-drains/{id}.

func (*Client) GetNodeHealth

func (c *Client) GetNodeHealth(ctx context.Context, id string) ([]ConditionResource, error)

GetNodeHealth calls GET /api/v1/nodes/{id}/health: the node health controller's stored reconcile conditions, the same ConditionResource shape GetDeployStatus returns for an app.

func (*Client) GetNodeLabels added in v0.2.0

func (c *Client) GetNodeLabels(ctx context.Context, id string) (NodeLabels, error)

GetNodeLabels calls GET /api/v1/nodes/{id}/labels.

func (*Client) GetNodeMove added in v0.2.0

func (c *Client) GetNodeMove(ctx context.Context, id string) (NodeMoveResource, error)

GetNodeMove calls GET /api/v1/node-moves/{id}.

func (*Client) GetNodePatchStatus

func (c *Client) GetNodePatchStatus(ctx context.Context, id string) (NodePatchStatusResource, error)

GetNodePatchStatus calls GET /api/v1/nodes/{id}/patch-status: the latest OS-patch reading HostPatchCollector wrote for id, or Checked == false if it has never checked (unsupported package manager, or the collector hasn't run yet).

func (*Client) GetNodeProvision added in v0.2.0

func (c *Client) GetNodeProvision(ctx context.Context, id string) (NodeProvisionResource, error)

GetNodeProvision calls GET /api/v1/node-provisions/{id}.

func (*Client) GetNodeTrust

func (c *Client) GetNodeTrust(ctx context.Context, id string) (NodeTrust, error)

GetNodeTrust calls GET /api/v1/nodes/{id}/security.

func (*Client) GetOAuthSSOPolicy

func (c *Client) GetOAuthSSOPolicy(ctx context.Context, provider string) (OAuthSSOPolicy, error)

GetOAuthSSOPolicy calls GET /api/v1/sso/oidc/{provider}.

func (*Client) GetOAuthSettings added in v0.2.0

func (c *Client) GetOAuthSettings(ctx context.Context) ([]OAuthProviderSettingsResource, error)

GetOAuthSettings calls GET /api/v1/settings/oauth: every OAuth sign-in provider's current configuration.

func (*Client) GetOnboardingState

func (c *Client) GetOnboardingState(ctx context.Context) (OnboardingStateResource, error)

GetOnboardingState calls GET /api/v1/onboarding: whether the first-run onboarding flow has been completed.

func (*Client) GetOpenAPISpec added in v0.2.0

func (c *Client) GetOpenAPISpec(ctx context.Context) (OpenAPISpecResource, error)

GetOpenAPISpec calls GET /api/v1/openapi.json: the route metadata behind "levelrail-cli api-docs" and the web dashboard's API explorer.

func (*Client) GetOrganization

func (c *Client) GetOrganization(ctx context.Context, id string) (OrganizationResource, error)

GetOrganization calls GET /api/v1/organizations/{id}.

func (*Client) GetOrganizationEnv

func (c *Client) GetOrganizationEnv(ctx context.Context, id string) (map[string]string, error)

GetOrganizationEnv calls GET /api/v1/organizations/{id}/env.

func (*Client) GetPITRStatus added in v0.2.0

func (c *Client) GetPITRStatus(ctx context.Context, name string) (PITRStatusResource, error)

GetPITRStatus calls GET /api/v1/databases/{name}/pitr: whether PITR is enabled and, if so, the currently recoverable window.

func (*Client) GetPendingChanges added in v0.2.0

func (c *Client) GetPendingChanges(ctx context.Context, name string) (PendingChanges, error)

GetPendingChanges calls GET /api/v1/apps/{name}/pending-changes.

func (*Client) GetPipeline added in v0.2.0

func (c *Client) GetPipeline(ctx context.Context, app, name string) (PipelineResource, error)

GetPipeline calls GET /api/v1/apps/{app}/pipelines/{name}.

func (*Client) GetPipelineInsights

func (c *Client) GetPipelineInsights(ctx context.Context, app, name string) (PipelineInsights, error)

GetPipelineInsights calls GET .../pipelines/{name}/insights.

func (*Client) GetPipelineOIDCInfo added in v0.2.0

func (c *Client) GetPipelineOIDCInfo(ctx context.Context) (PipelineOIDCResource, error)

GetPipelineOIDCInfo calls GET /api/v1/pipelines/oidc: whether pipeline jobs can mint OIDC tokens on this control plane, and the URLs an operator wires into a cloud provider's OIDC trust policy.

func (*Client) GetPipelineRun added in v0.2.0

func (c *Client) GetPipelineRun(ctx context.Context, app, id string) (PipelineRunResource, error)

GetPipelineRun calls GET /api/v1/apps/{app}/pipeline-runs/{id}.

func (*Client) GetPipelineSync added in v0.2.0

func (c *Client) GetPipelineSync(ctx context.Context, app string) (PipelineSyncStatus, error)

GetPipelineSync calls GET /api/v1/apps/{app}/pipeline-sync.

func (*Client) GetPipelineWebhook

func (c *Client) GetPipelineWebhook(ctx context.Context, app, name string) (PipelineWebhook, error)

GetPipelineWebhook calls GET .../pipelines/{name}/webhook.

func (*Client) GetPlacement added in v0.2.0

func (c *Client) GetPlacement(ctx context.Context, kind, name string) (PlacementResource, error)

GetPlacement calls GET /api/v1/{apps|databases}/{name}/placement.

func (*Client) GetPlacementDecision

func (c *Client) GetPlacementDecision(ctx context.Context, kind, name string) (PlacementDecisionView, error)

GetPlacementDecision calls GET /api/v1/{apps|databases}/{name}/placement/decision.

func (*Client) GetPlatformUpgradePolicy added in v0.2.0

func (c *Client) GetPlatformUpgradePolicy(ctx context.Context) (DBUpgradePolicy, error)

GetPlatformUpgradePolicy calls GET /api/v1/settings/database-upgrades.

func (*Client) GetPlugin

func (c *Client) GetPlugin(ctx context.Context, name string) (Plugin, error)

GetPlugin calls GET /api/v1/plugins/{name}.

func (*Client) GetPolicy

func (c *Client) GetPolicy(ctx context.Context, id string) (PolicyResource, error)

GetPolicy calls GET /api/v1/iam/policies/{id}.

func (*Client) GetPreferences

func (c *Client) GetPreferences(ctx context.Context) (Preferences, error)

GetPreferences calls GET /api/v1/auth/preferences.

func (*Client) GetPreview added in v0.2.0

func (c *Client) GetPreview(ctx context.Context, name string) (PreviewStatus, error)

GetPreview calls GET /api/v1/apps/{name}/preview.

func (*Client) GetPreviewPolicy added in v0.2.0

func (c *Client) GetPreviewPolicy(ctx context.Context, appName string) (PreviewPolicyResource, error)

GetPreviewPolicy calls GET /api/v1/apps/{name}/preview-policy.

func (*Client) GetPrivateNetworkMap

func (c *Client) GetPrivateNetworkMap(ctx context.Context) (PrivateNetworkMap, error)

GetPrivateNetworkMap calls GET /api/v1/private-networks/map.

func (*Client) GetProject

func (c *Client) GetProject(ctx context.Context, id string) (ProjectResource, error)

GetProject calls GET /api/v1/projects/{id}.

func (*Client) GetProjectEnv

func (c *Client) GetProjectEnv(ctx context.Context, id string) (map[string]string, error)

GetProjectEnv calls GET /api/v1/projects/{id}/env.

func (*Client) GetProjectTopology added in v0.2.0

func (c *Client) GetProjectTopology(ctx context.Context, id string) (ProjectTopologyResource, error)

GetProjectTopology calls GET /api/v1/projects/{id}/topology: a diagram-ready graph of one project's apps, databases, and shared volumes.

func (*Client) GetProxyIntegration added in v0.2.0

func (c *Client) GetProxyIntegration(ctx context.Context) (ProxyIntegration, error)

GetProxyIntegration returns detection, settings and per-domain status.

func (*Client) GetQuota

func (c *Client) GetQuota(ctx context.Context, scope, id string) (QuotaResource, error)

GetQuota calls GET /api/v1/{teams|projects}/{id}/quota.

func (*Client) GetRegistryCredential

func (c *Client) GetRegistryCredential(ctx context.Context, id string) (RegistryCredentialResource, error)

GetRegistryCredential calls GET /api/v1/registry-credentials/{id}.

func (*Client) GetRegistryCredentialUsage

func (c *Client) GetRegistryCredentialUsage(ctx context.Context, id string) (RegistryCredentialUsage, error)

GetRegistryCredentialUsage calls GET /api/v1/registry-credentials/{id}/usage.

func (*Client) GetRegistrySettings

func (c *Client) GetRegistrySettings(ctx context.Context) (RegistrySettingsResource, error)

GetRegistrySettings calls GET /api/v1/settings/registry: the built-in registry container's configured/observed state.

func (*Client) GetReleaseHistory added in v0.2.0

func (c *Client) GetReleaseHistory(ctx context.Context, channel string) (ReleaseHistory, error)

GetReleaseHistory calls GET /api/v1/updates/releases.

func (*Client) GetResilienceReport

func (c *Client) GetResilienceReport(ctx context.Context) (ResilienceReport, error)

GetResilienceReport calls GET /api/v1/resilience.

func (*Client) GetReverseProxyGuide added in v0.2.0

func (c *Client) GetReverseProxyGuide(ctx context.Context, domain, proxy, app string, verify bool) (ReverseProxyGuide, error)

GetReverseProxyGuide calls GET /api/v1/system/reverse-proxy. A non-empty app builds the snippet for that app's domain instead of the dashboard.

func (*Client) GetRollbackPlan added in v0.2.0

func (c *Client) GetRollbackPlan(ctx context.Context, version string) (RollbackPlan, error)

GetRollbackPlan calls GET /api/v1/updates/rollback-plan.

func (*Client) GetRoute53DNS added in v0.2.0

func (c *Client) GetRoute53DNS(ctx context.Context) (Route53DNSResource, error)

GetRoute53DNS calls GET /api/v1/settings/route53-dns: a second, independent ACME DNS-01 provider's enabled/credential-presence state, mirroring GetCloudflareDNS's own shape.

func (*Client) GetSAMLConnection

func (c *Client) GetSAMLConnection(ctx context.Context, id string) (SAMLConnection, error)

GetSAMLConnection calls GET /api/v1/sso/saml/connections/{id}.

func (*Client) GetSBOM added in v0.2.0

func (c *Client) GetSBOM(ctx context.Context, name, id string) (SBOMSummary, error)

GetSBOM calls GET /api/v1/apps/{name}/deployments/{id}/sbom.

func (*Client) GetSLOPreview added in v0.2.0

func (c *Client) GetSLOPreview(ctx context.Context, name string, cfg AlertSLOConfig) (*SLOPreviewResource, error)

GetSLOPreview calls GET /api/v1/apps/{name}/slo-preview.

func (*Client) GetSSHNodeProvision added in v0.2.0

func (c *Client) GetSSHNodeProvision(ctx context.Context, id string) (SSHNodeProvisionResource, error)

GetSSHNodeProvision calls GET /api/v1/ssh-node-provisions/{id}.

func (*Client) GetSSOSettings

func (c *Client) GetSSOSettings(ctx context.Context) (SSOSettings, error)

GetSSOSettings calls GET /api/v1/sso/settings.

func (*Client) GetScheduledTask

func (c *Client) GetScheduledTask(ctx context.Context, name, id string) (ScheduledTaskResource, error)

GetScheduledTask calls GET /api/v1/apps/{name}/scheduled-tasks/{id}.

func (*Client) GetSecretBinding added in v0.2.0

func (c *Client) GetSecretBinding(ctx context.Context) (SecretBindingStatus, error)

GetSecretBinding calls GET /api/v1/system/secrets/binding: how many stored secret values still use the legacy unbound format.

func (*Client) GetSecretScan

func (c *Client) GetSecretScan(ctx context.Context, name string) (SecretScanSettings, error)

GetSecretScan calls GET /api/v1/apps/{name}/secret-scan.

func (*Client) GetSecurityPolicy added in v0.2.0

func (c *Client) GetSecurityPolicy(ctx context.Context) (SecurityPolicy, error)

GetSecurityPolicy calls GET /api/v1/security/policy.

func (*Client) GetSecurityPosture added in v0.2.0

func (c *Client) GetSecurityPosture(ctx context.Context) (SecurityPosture, error)

GetSecurityPosture calls GET /api/v1/security/posture.

func (*Client) GetSecurityReachability

func (c *Client) GetSecurityReachability(ctx context.Context, refresh bool) (ReachReport, error)

GetSecurityReachability calls GET /api/v1/security/reachability (root); refresh re-measures first.

func (*Client) GetSelfUpgradePlan added in v0.2.0

func (c *Client) GetSelfUpgradePlan(ctx context.Context, target string) (SelfUpgradePlan, error)

GetSelfUpgradePlan calls GET /api/v1/updates/self-upgrade/plan. An empty target asks for the latest release on the configured channel.

func (*Client) GetServerAddress added in v0.2.0

func (c *Client) GetServerAddress(ctx context.Context, domain string) (ServerAddress, error)

GetServerAddress calls GET /api/v1/system/server-address; domain may be empty.

func (*Client) GetServerProfile

func (c *Client) GetServerProfile(ctx context.Context) (ServerProfile, error)

GetServerProfile calls GET /api/v1/settings/server-profile.

func (*Client) GetServerReadiness added in v0.2.0

func (c *Client) GetServerReadiness(ctx context.Context, domain string) (ServerReadiness, error)

GetServerReadiness calls GET /api/v1/system/readiness, optionally also checking the DNS of domain.

func (*Client) GetServiceTemplate

func (c *Client) GetServiceTemplate(ctx context.Context, id string) (ServiceTemplateDetail, error)

GetServiceTemplate calls GET /api/v1/service-templates/{id}: one catalog entry, including its full compose.yaml body. Also resolves an operator-defined custom template id (resolveTemplate, internal/api/service_templates.go), so this is the same call whether id came from ListServiceTemplates or ListCustomTemplates below.

func (*Client) GetSession

func (c *Client) GetSession(ctx context.Context) (SessionInfoResource, error)

GetSession calls GET /api/v1/auth/session using this Client's bearer token, exactly the same auth mechanism every other method on this type uses. The server gates this route with requireAuth, session-cookie-only, by explicit design (internal/api/account.go's handleGetSession doc comment), so a call made through this method always gets back a real, honest 401 "authentication required" for a bearer-token caller, not a client-side bug.

func (*Client) GetSetupGuide added in v0.2.0

func (c *Client) GetSetupGuide(ctx context.Context) (SetupGuideResource, error)

GetSetupGuide calls GET /api/v1/setup/guide.

func (*Client) GetSetupStatus added in v0.2.0

func (c *Client) GetSetupStatus(ctx context.Context) (SetupStatusResource, error)

GetSetupStatus calls GET /api/v1/auth/setup-status.

func (*Client) GetSleepHistory

func (c *Client) GetSleepHistory(ctx context.Context, appName, since string, limit int) (SleepHistory, error)

GetSleepHistory calls GET /api/v1/apps/{name}/sleep/history. since is a duration such as 7d or empty, limit 0 uses the server default.

func (*Client) GetStatusPage added in v0.2.0

func (c *Client) GetStatusPage(ctx context.Context) (StatusPageSettings, error)

GetStatusPage calls GET /api/v1/status-page.

func (*Client) GetSupplyChain added in v0.2.0

func (c *Client) GetSupplyChain(ctx context.Context, name string) (SupplyChainSettings, error)

GetSupplyChain calls GET /api/v1/apps/{name}/supply-chain.

func (*Client) GetSystemCache

func (c *Client) GetSystemCache(ctx context.Context) (SystemCacheResource, error)

GetSystemCache calls GET /api/v1/system/cache.

func (*Client) GetSystemDoctor

func (c *Client) GetSystemDoctor(ctx context.Context) (SystemDoctorResource, error)

GetSystemDoctor calls GET /api/v1/system/doctor: the "levelrail-cli doctor" preflight bundle, a superset of GetSystemStatus above.

func (*Client) GetSystemNetworks

func (c *Client) GetSystemNetworks(ctx context.Context) (SystemNetworks, error)

GetSystemNetworks calls GET /api/v1/system/networks.

func (*Client) GetSystemRestart added in v0.2.0

func (c *Client) GetSystemRestart(ctx context.Context) (SystemRestart, error)

GetSystemRestart calls GET /api/v1/system/restart.

func (*Client) GetSystemStatus

func (c *Client) GetSystemStatus(ctx context.Context) (SystemStatusResource, error)

GetSystemStatus calls GET /api/v1/system/status: this control plane's own configured/not-configured signals, including local Docker daemon reachability (DockerConnected/DockerError).

func (*Client) GetTeam added in v0.2.0

func (c *Client) GetTeam(ctx context.Context, id string) (TeamResource, error)

GetTeam calls GET /api/v1/teams/{id}.

func (*Client) GetTrace

func (c *Client) GetTrace(ctx context.Context, app, traceID string) ([]TraceSpan, error)

GetTrace calls GET /api/v1/apps/{name}/traces/{id}.

func (*Client) GetTracing

func (c *Client) GetTracing(ctx context.Context, app string) (TracingResource, error)

GetTracing calls GET /api/v1/apps/{name}/tracing.

func (*Client) GetUpdatePreflight added in v0.2.0

func (c *Client) GetUpdatePreflight(ctx context.Context) (UpdatePreflight, error)

GetUpdatePreflight calls GET /api/v1/updates/preflight.

func (*Client) GetUpdateSettings added in v0.2.0

func (c *Client) GetUpdateSettings(ctx context.Context) (UpdateSettingsResource, error)

GetUpdateSettings calls GET /api/v1/updates/settings.

func (*Client) GetUpdates

func (c *Client) GetUpdates(ctx context.Context) (UpdatesResource, error)

GetUpdates calls GET /api/v1/updates: the running control plane version against GitHub's latest published release.

func (*Client) GetUpgradeHistory added in v0.2.0

func (c *Client) GetUpgradeHistory(ctx context.Context) (UpgradeHistory, error)

GetUpgradeHistory calls GET /api/v1/updates/history.

func (*Client) GetUpgradePolicy added in v0.2.0

func (c *Client) GetUpgradePolicy(ctx context.Context) (UpgradePolicy, error)

GetUpgradePolicy calls GET /api/v1/updates/auto.

func (*Client) GetUpgradeSchedule added in v0.2.0

func (c *Client) GetUpgradeSchedule(ctx context.Context) (UpgradeScheduleStatus, error)

GetUpgradeSchedule calls GET /api/v1/updates/schedule.

func (*Client) GetUsageReport added in v0.2.0

func (c *Client) GetUsageReport(ctx context.Context, q UsageReportQuery) (UsageReport, error)

GetUsageReport calls GET /api/v1/usage/report.

func (*Client) GetUsageSettings added in v0.2.0

func (c *Client) GetUsageSettings(ctx context.Context) (UsageSettings, error)

GetUsageSettings calls GET /api/v1/usage/settings.

func (*Client) GetUserEnvironmentGrants added in v0.2.0

func (c *Client) GetUserEnvironmentGrants(ctx context.Context, userID string) (EnvironmentGrants, error)

GetUserEnvironmentGrants calls GET /api/v1/users/{id}/environment-grants.

func (*Client) GetVault added in v0.2.0

func (c *Client) GetVault(ctx context.Context) (VaultSettingsResource, error)

GetVault calls GET /api/v1/settings/vault: the external Vault integration's configured state, for resolving { vault: { path, key } } app.yaml env vars.

func (*Client) GetVolumeBackupPolicy added in v0.2.0

func (c *Client) GetVolumeBackupPolicy(ctx context.Context, name, volume string) (VolumeBackupPolicyResource, error)

GetVolumeBackupPolicy calls GET /api/v1/apps/{name}/volumes/{volume}/backup-policy.

func (*Client) GetVolumeBackupSchedule

func (c *Client) GetVolumeBackupSchedule(ctx context.Context, name, volume string) (VolumeBackupScheduleResource, error)

GetVolumeBackupSchedule calls GET /api/v1/apps/{name}/volumes/{volume}/backup-schedule: the app service volume counterpart of the schedule fields riding along on GET .../databases/{name} for a database (a service can have many volumes, so there is no single app resource to embed this in, hence its own dedicated GET here).

func (*Client) GetVulnerabilities added in v0.2.0

func (c *Client) GetVulnerabilities(ctx context.Context, name, id string) (VulnReport, error)

GetVulnerabilities calls GET /api/v1/apps/{name}/deployments/{id}/vulnerabilities.

func (*Client) GetZones

func (c *Client) GetZones(ctx context.Context) (Zones, error)

GetZones calls GET /api/v1/nodes/zones.

func (*Client) GitSourceAffected

func (c *Client) GitSourceAffected(ctx context.Context, name, branch string, files []string) (GitSourceAffected, error)

GitSourceAffected calls POST /api/v1/apps/{name}/git-source/affected.

func (*Client) GitSourceCommits added in v0.2.0

func (c *Client) GitSourceCommits(ctx context.Context, name, branch string, refresh bool) (GitSourceCommits, error)

GitSourceCommits lists recent commits of a branch with deploy status and suggestions. branch empty means the connected branch.

func (*Client) GrantDatabaseAccess added in v0.2.0

func (c *Client) GrantDatabaseAccess(ctx context.Context, name string, req DatabaseGrantRequest) (DatabaseGrant, error)

GrantDatabaseAccess calls POST /api/v1/databases/{name}/access/grants.

func (*Client) HostFirewallStatus added in v0.2.0

func (c *Client) HostFirewallStatus(ctx context.Context) (HostFirewallResource, error)

HostFirewallStatus calls GET /api/v1/firewall/host.

func (*Client) IAMEffectivePermissions added in v0.2.0

func (c *Client) IAMEffectivePermissions(ctx context.Context, principalType, principalID string) (IAMEffective, error)

IAMEffectivePermissions calls GET /api/v1/iam/principals/{type}/{id}/effective.

func (*Client) IAMSuggestions

func (c *Client) IAMSuggestions(ctx context.Context, days int) (IAMSuggestions, error)

IAMSuggestions calls GET /api/v1/iam/suggestions; days 0 uses the server default.

func (*Client) ImportDNSZoneRecords added in v0.2.0

func (c *Client) ImportDNSZoneRecords(ctx context.Context, provider, zone string, req DNSImportRequest) (DNSImportResult, error)

ImportDNSZoneRecords calls POST /api/v1/dns/zones/{zone}/records/import.

func (*Client) ImportDashboard

func (c *Client) ImportDashboard(ctx context.Context, doc json.RawMessage, scope, project string) (DashboardResource, error)

ImportDashboard calls POST /api/v1/dashboards/import with an exported document.

func (*Client) ImportMigration

func (c *Client) ImportMigration(ctx context.Context, req MigrationSourceRequest) (MigrationPlanReport, error)

ImportMigration calls POST /api/v1/migration/import for the selected items, or previews them when req.DryRun is set.

func (*Client) ImportSAMLMetadata

func (c *Client) ImportSAMLMetadata(ctx context.Context, id string, req SAMLMetadataImport) (SAMLConnection, error)

ImportSAMLMetadata calls POST /api/v1/sso/saml/connections/{id}/metadata.

func (*Client) InboxUnreadCount

func (c *Client) InboxUnreadCount(ctx context.Context) (int, error)

InboxUnreadCount calls GET /api/v1/inbox/unread-count.

func (*Client) InspectPlugin

func (c *Client) InspectPlugin(ctx context.Context, in InstallPluginInput) (PluginPreview, error)

InspectPlugin calls POST /api/v1/plugins/inspect. Nothing is installed.

func (*Client) InstallMarketplacePlugin

func (c *Client) InstallMarketplacePlugin(ctx context.Context, in MarketplaceInstallInput) (MarketplaceInstallResult, error)

InstallMarketplacePlugin calls POST /api/v1/plugin-marketplace/install.

func (*Client) InstallPlugin

func (c *Client) InstallPlugin(ctx context.Context, in InstallPluginInput) (Plugin, error)

InstallPlugin calls POST /api/v1/plugins. The plugin is recorded but not approved or started.

func (*Client) InstallTemplate added in v0.2.0

func (c *Client) InstallTemplate(ctx context.Context, id string, req TemplateInstallRequest) (ComposeStackDeploy, error)

InstallTemplate calls POST /api/v1/service-templates/{id}/install.

func (*Client) InvestigateApp added in v0.2.0

func (c *Client) InvestigateApp(ctx context.Context, name string, from, to time.Time) (InvestigationResource, error)

InvestigateApp calls GET /api/v1/apps/{name}/investigate.

func (*Client) IssueDatabaseTemp added in v0.2.0

func (c *Client) IssueDatabaseTemp(ctx context.Context, name, preset string, ttlMinutes int) (DatabaseTempIssued, error)

IssueDatabaseTemp calls POST /api/v1/databases/{name}/access/temp.

func (*Client) IssueGitRemote

func (c *Client) IssueGitRemote(ctx context.Context, name string) (GitRemote, error)

IssueGitRemote calls POST /api/v1/apps/{name}/git-remote: it enables the remote or rotates its token, and returns the new token once.

func (*Client) KeepTrialApp

func (c *Client) KeepTrialApp(ctx context.Context, name string) (KeepTrialResult, error)

KeepTrialApp calls POST /api/v1/apps/{name}/keep: a trial deployment becomes a permanent app.

func (*Client) LiftFirewallEdgeBan

func (c *Client) LiftFirewallEdgeBan(ctx context.Context, ip string) error

LiftFirewallEdgeBan calls DELETE .../firewall/edge/bans/{ip}.

func (*Client) LintDockerfile

func (c *Client) LintDockerfile(ctx context.Context, dockerfile string, hasDockerignore bool) (DockerLintResource, error)

LintDockerfile calls POST /api/v1/docker/lint.

func (*Client) ListAIChatSessions added in v0.2.0

func (c *Client) ListAIChatSessions(ctx context.Context) ([]AIChatSessionSummaryResource, error)

ListAIChatSessions calls GET /api/v1/ai/sessions.

func (*Client) ListAIProviderModels

func (c *Client) ListAIProviderModels(ctx context.Context, id string) ([]AIModelResource, error)

ListAIProviderModels calls GET /api/v1/settings/ai-assistant/providers/{id}/models.

func (*Client) ListAIProviders

func (c *Client) ListAIProviders(ctx context.Context) ([]AIProviderResource, error)

ListAIProviders calls GET /api/v1/settings/ai-assistant/providers.

func (*Client) ListAccess

func (c *Client) ListAccess(ctx context.Context, app string, o AccessOptions) ([]AccessRecord, error)

ListAccess calls GET /api/v1/apps/{name}/access.

func (*Client) ListAccessReviews

func (c *Client) ListAccessReviews(ctx context.Context) ([]AccessReviewResource, error)

ListAccessReviews calls GET /api/v1/compliance/access-reviews.

func (*Client) ListAdvisorFindings added in v0.2.0

func (c *Client) ListAdvisorFindings(ctx context.Context, q AdvisorFindingQuery) (AdvisorFindings, error)

ListAdvisorFindings calls GET /api/v1/resource-advisor/findings.

func (*Client) ListAlertHistory added in v0.2.0

func (c *Client) ListAlertHistory(ctx context.Context, q AlertHistoryQuery) ([]AlertHistoryEntry, error)

ListAlertHistory calls GET /api/v1/alert-history.

func (*Client) ListAlertRules

func (c *Client) ListAlertRules(ctx context.Context, name string) ([]AlertRuleResource, error)

ListAlertRules calls GET /api/v1/apps/{name}/alerts: every alert rule scoped to name, including disabled ones.

func (*Client) ListAlertSilences added in v0.2.0

func (c *Client) ListAlertSilences(ctx context.Context, includeExpired bool) ([]SilenceResource, error)

ListAlertSilences calls GET /api/v1/alert-silences.

func (*Client) ListAlertTemplates

func (c *Client) ListAlertTemplates(ctx context.Context) ([]AlertTemplateProfile, error)

ListAlertTemplates calls GET /api/v1/alert-templates.

func (*Client) ListAllBackups added in v0.2.0

func (c *Client) ListAllBackups(ctx context.Context, opts ListBackupsOptions) ([]BackupHistoryResource, error)

ListAllBackups calls GET /api/v1/backups: the instance-wide backup attempt history across every database and app volume, the aggregated counterpart of ListBackups/ListVolumeBackups.

func (*Client) ListAllEnvironments added in v0.2.0

func (c *Client) ListAllEnvironments(ctx context.Context) ([]GlobalEnvironmentResource, error)

ListAllEnvironments calls GET /api/v1/environments.

func (*Client) ListAllPipelineRuns added in v0.2.0

func (c *Client) ListAllPipelineRuns(ctx context.Context, q PipelineRunsQuery) (PipelineRunRowsPage, error)

ListAllPipelineRuns calls GET /api/v1/pipeline-runs.

func (*Client) ListAllPreviews added in v0.2.0

func (c *Client) ListAllPreviews(ctx context.Context) (PreviewsOverview, error)

ListAllPreviews calls GET /api/v1/previews: previews of every readable app plus platform-wide limit usage.

func (*Client) ListAllSecretRotation

func (c *Client) ListAllSecretRotation(ctx context.Context) ([]SecretRotationPolicyResource, error)

ListAllSecretRotation calls GET /api/v1/secret-rotation (root only).

func (*Client) ListAppBranchEnv added in v0.2.0

func (c *Client) ListAppBranchEnv(ctx context.Context, name string) ([]AppBranchEnvOverride, error)

ListAppBranchEnv calls GET /api/v1/apps/{name}/branch-env: every branch-scoped env var override declared for name, across every branch pattern.

func (*Client) ListAppCachePurges

func (c *Client) ListAppCachePurges(ctx context.Context, name string) (CachePurgesResource, error)

ListAppCachePurges calls GET /api/v1/apps/{name}/cache/purges.

func (*Client) ListAppConnections added in v0.2.0

func (c *Client) ListAppConnections(ctx context.Context, name string) ([]AppConnectionResource, error)

ListAppConnections calls GET /api/v1/apps/{name}/connections: every DatabaseEnv entry, each resolved against its database's real placement so the response says whether it's cross-node-capable today.

func (*Client) ListAppEntries added in v0.2.0

func (c *Client) ListAppEntries(ctx context.Context) ([]AppListEntry, error)

ListAppEntries calls GET /api/v1/apps and keeps each row's status rollup.

func (*Client) ListAppImages added in v0.2.0

func (c *Client) ListAppImages(ctx context.Context, name string) ([]ImageResource, error)

ListAppImages calls GET /api/v1/apps/{name}/images: every locally-present tag under name's current image's repo, newest first.

func (*Client) ListAppImportSessions

func (c *Client) ListAppImportSessions(ctx context.Context) ([]AppImportView, error)

ListAppImportSessions calls GET /api/v1/migration/apps/sessions; items are left out.

func (*Client) ListAppIntegrations added in v0.2.0

func (c *Client) ListAppIntegrations(ctx context.Context, name string) ([]AppIntegrationResource, error)

ListAppIntegrations calls GET /api/v1/apps/{name}/integrations: every catalog integration attached to name.

func (*Client) ListAppMetricsSummary added in v0.2.0

func (c *Client) ListAppMetricsSummary(ctx context.Context, names []string) ([]AppMetricsSummary, error)

ListAppMetricsSummary calls GET /api/v1/apps-metrics, optionally limited to names.

func (*Client) ListAppResourceUsage added in v0.2.0

func (c *Client) ListAppResourceUsage(ctx context.Context) ([]AppResourceUsageResource, error)

ListAppResourceUsage calls GET /api/v1/apps/resource-usage (internal/api/app_resource_usage.go's handleAppResourceUsage): the latest CPU/memory/network reading for every app in one call, for a dashboard-wide ranking rather than one QueryAppMetrics call per app.

func (*Client) ListAppScheduleHistory added in v0.2.0

func (c *Client) ListAppScheduleHistory(ctx context.Context, name string, limit int) ([]AppScheduleHistoryEntry, error)

ListAppScheduleHistory calls GET /api/v1/apps/{name}/schedule/history. limit <= 0 uses the server default.

func (*Client) ListAppStatuses added in v0.2.0

func (c *Client) ListAppStatuses(ctx context.Context) ([]AppStatusEntry, error)

ListAppStatuses calls GET /api/v1/apps and keeps only each app's name and rolled-up status summary.

func (*Client) ListAppStreams added in v0.2.0

func (c *Client) ListAppStreams(ctx context.Context, name string) ([]AppStreamResource, error)

ListAppStreams calls GET /api/v1/apps/{name}/streams.

func (*Client) ListAppTags added in v0.2.0

func (c *Client) ListAppTags(ctx context.Context, name string) ([]TagResource, error)

ListAppTags calls GET /api/v1/apps/{name}/tags.

func (*Client) ListAppVolumeMoves added in v0.2.0

func (c *Client) ListAppVolumeMoves(ctx context.Context, name string) ([]AppVolumeMoveResource, error)

ListAppVolumeMoves calls GET /api/v1/apps/{name}/moves: every "move with volumes" attempt for name, newest first.

func (*Client) ListApps

func (c *Client) ListApps(ctx context.Context) ([]AppResource, error)

ListApps calls GET /api/v1/apps.

func (*Client) ListAppsByTag added in v0.2.0

func (c *Client) ListAppsByTag(ctx context.Context, id string) ([]TagAppResource, error)

ListAppsByTag calls GET /api/v1/tags/{id}/apps: every app tagged with id, the "list resources filtered by tag" primitive.

func (*Client) ListAppsFiltered added in v0.2.0

func (c *Client) ListAppsFiltered(ctx context.Context, q AppListQuery) ([]AppResource, error)

ListAppsFiltered calls GET /api/v1/apps with filters.

func (*Client) ListAppsInEnvironment added in v0.2.0

func (c *Client) ListAppsInEnvironment(ctx context.Context, environment string) ([]AppResource, error)

ListAppsInEnvironment calls GET /api/v1/apps?environment=<id or name>.

func (*Client) ListAppsPage added in v0.2.0

func (c *Client) ListAppsPage(ctx context.Context, opts ListAppsOptions) (AppsPage, error)

ListAppsPage calls GET /api/v1/apps with Limit/Offset query params. It reads X-Total-Count for NextOffset, which do() discards, so it issues its own request. NextOffset, which do() discards once it decodes the JSON body.

func (*Client) ListArchives

func (c *Client) ListArchives(ctx context.Context) (ArchiveList, error)

ListArchives calls GET /api/v1/archives.

func (*Client) ListAuditLog

func (c *Client) ListAuditLog(ctx context.Context, opts ListAuditLogOptions) ([]AuditLogEntryResource, error)

ListAuditLog calls GET /api/v1/audit-log: every recorded write/ deploy/root-tier request, newest first, cursor-paginated by opts.Before.

func (*Client) ListAuthGateEvents added in v0.2.0

func (c *Client) ListAuthGateEvents(ctx context.Context, name, domain, since string) (AuthGateEventsResponse, error)

ListAuthGateEvents calls GET .../auth-gate/events. since is a duration such as "24h" or "7d"; empty uses the server default.

func (*Client) ListAutomationRuns added in v0.2.0

func (c *Client) ListAutomationRuns(ctx context.Context, limit int) ([]AutomationRun, error)

ListAutomationRuns calls GET /api/v1/domains/automation/runs.

func (*Client) ListBackupDrills added in v0.2.0

func (c *Client) ListBackupDrills(ctx context.Context, service, volume, database string, limit int) ([]BackupDrillResource, error)

ListBackupDrills calls GET /api/v1/backups/drills.

func (*Client) ListBackupTargets

func (c *Client) ListBackupTargets(ctx context.Context) ([]BackupTargetResource, error)

ListBackupTargets calls GET /api/v1/backup-targets.

func (*Client) ListBackupVerifications

func (c *Client) ListBackupVerifications(ctx context.Context, name, historyID string) ([]BackupVerificationResource, error)

ListBackupVerifications calls GET /api/v1/databases/{name}/backups/{historyId}/verifications: every verification attempt made against one backup, newest first.

func (*Client) ListBackups

func (c *Client) ListBackups(ctx context.Context, name string, opts ListBackupsOptions) ([]BackupHistoryResource, error)

ListBackups calls GET /api/v1/databases/{name}/backups: the full backup attempt history for one database.

func (*Client) ListBaseBackups added in v0.2.0

func (c *Client) ListBaseBackups(ctx context.Context, name string) ([]BaseBackupHistoryResource, error)

ListBaseBackups calls GET /api/v1/databases/{name}/base-backups.

func (*Client) ListBetaFeatures added in v0.2.0

func (c *Client) ListBetaFeatures(ctx context.Context) ([]BetaFeature, error)

ListBetaFeatures calls GET /api/v1/settings/beta-features.

func (*Client) ListBitbucketAppBranches added in v0.2.0

func (c *Client) ListBitbucketAppBranches(ctx context.Context, workspace, repoSlug string) ([]GitAppBranchResource, error)

ListBitbucketAppBranches calls GET /api/v1/bitbucket-app/repos/{workspace}/{repoSlug}/branches.

func (*Client) ListBitbucketAppRepos added in v0.2.0

func (c *Client) ListBitbucketAppRepos(ctx context.Context) ([]BitbucketAppRepoResource, error)

ListBitbucketAppRepos calls GET /api/v1/bitbucket-app/repos: every repository the connected Bitbucket account can access.

func (*Client) ListBoundEnv

func (c *Client) ListBoundEnv(ctx context.Context, app string) ([]BoundEnvEntry, error)

ListBoundEnv calls GET /api/v1/apps/{name}/env/bound.

func (*Client) ListBucketObjects

func (c *Client) ListBucketObjects(ctx context.Context, id, prefix, token string) (BucketObjects, error)

ListBucketObjects calls GET /api/v1/storage/buckets/{id}/objects.

func (*Client) ListBuildCache added in v0.2.0

func (c *Client) ListBuildCache(ctx context.Context) ([]BuildCacheSetting, error)

ListBuildCache calls GET /api/v1/build-cache.

func (*Client) ListBuilds

func (c *Client) ListBuilds(ctx context.Context, app, status string, limit int) (BuildListResource, error)

ListBuilds calls GET /api/v1/builds.

func (*Client) ListCITrusts

func (c *Client) ListCITrusts(ctx context.Context, name string) ([]CITrust, error)

ListCITrusts calls GET /api/v1/apps/{name}/ci/trusts.

func (*Client) ListCertificates added in v0.2.0

func (c *Client) ListCertificates(ctx context.Context) ([]CertificateResource, error)

ListCertificates calls GET /api/v1/certificates: every certificate currently in this control plane's certmagic storage, healthy or not. An empty slice means no certificate has ever been issued, not an error.

func (*Client) ListCloneRestores added in v0.2.0

func (c *Client) ListCloneRestores(ctx context.Context, name string) ([]CloneRestoreResource, error)

ListCloneRestores calls GET /api/v1/databases/{name}/clone-restores.

func (*Client) ListComposeRevisions added in v0.2.0

func (c *Client) ListComposeRevisions(ctx context.Context, name string) ([]ComposeRevision, error)

ListComposeRevisions calls GET /api/v1/apps/{name}/compose/revisions.

func (*Client) ListConnectableDatabases added in v0.2.0

func (c *Client) ListConnectableDatabases(ctx context.Context, name string) ([]ConnectableDatabaseResource, error)

ListConnectableDatabases calls GET /api/v1/apps/{name}/connectable-databases: every managed database name could connect to, marked with whether it's already connected and whether it's on a different node.

func (*Client) ListConsoleResources

func (c *Client) ListConsoleResources(ctx context.Context, q ConsoleQuery) (ConsoleList, error)

ListConsoleResources calls GET /api/v1/resources.

func (*Client) ListConsoleViews

func (c *Client) ListConsoleViews(ctx context.Context) ([]ConsoleView, error)

ListConsoleViews calls GET /api/v1/resources/views.

func (*Client) ListContainers

func (c *Client) ListContainers(ctx context.Context) ([]ContainerResource, error)

ListContainers calls GET /api/v1/system/containers: every container on this node, whether or not Levelrail manages it.

func (*Client) ListControlPlaneBackups added in v0.2.0

func (c *Client) ListControlPlaneBackups(ctx context.Context) ([]ControlPlaneBackup, error)

ListControlPlaneBackups calls GET /api/v1/system/backups, newest first.

func (*Client) ListControlPlaneOffboxBackups added in v0.2.0

func (c *Client) ListControlPlaneOffboxBackups(ctx context.Context) ([]ControlPlaneOffboxBackup, error)

ListControlPlaneOffboxBackups calls GET /api/v1/system/control-plane-dr/backups.

func (*Client) ListCostBudgets

func (c *Client) ListCostBudgets(ctx context.Context) (CostBudgets, error)

ListCostBudgets calls GET /api/v1/costs/budgets.

func (*Client) ListCustomTemplates added in v0.2.0

func (c *Client) ListCustomTemplates(ctx context.Context) ([]CustomTemplateListItem, error)

ListCustomTemplates calls GET /api/v1/templates/custom: every operator-defined template, without each one's compose body (see GetServiceTemplate for the full body).

func (*Client) ListDNSHealthChecks added in v0.2.0

func (c *Client) ListDNSHealthChecks(ctx context.Context) ([]DNSHealthCheck, error)

ListDNSHealthChecks calls GET /api/v1/dns/health-checks.

func (*Client) ListDNSRecords added in v0.2.0

func (c *Client) ListDNSRecords(ctx context.Context, name, domain string) (DNSRecordsResponse, error)

ListDNSRecords calls GET /api/v1/apps/{name}/domains/{domain}/dns-records: every record in domain's best-effort zone, from whichever ACME DNS-01 provider is configured, each with a live resolution status.

func (*Client) ListDNSZoneRecords added in v0.2.0

func (c *Client) ListDNSZoneRecords(ctx context.Context, provider, zone, typ, query string) (DNSRecordsList, error)

ListDNSZoneRecords calls GET /api/v1/dns/zones/{zone}/records.

func (*Client) ListDNSZones added in v0.2.0

func (c *Client) ListDNSZones(ctx context.Context, provider string) (DNSZonesList, error)

ListDNSZones calls GET /api/v1/dns/zones.

func (*Client) ListDashboards

func (c *Client) ListDashboards(ctx context.Context, project string) ([]DashboardResource, error)

ListDashboards calls GET /api/v1/dashboards, optionally narrowed to a project.

func (*Client) ListDatabaseDataCopies added in v0.2.0

func (c *Client) ListDatabaseDataCopies(ctx context.Context) ([]DataCopyStatus, error)

ListDatabaseDataCopies calls GET /api/v1/imports/platform/databases.

func (*Client) ListDatabaseEngines

func (c *Client) ListDatabaseEngines(ctx context.Context) ([]DatabaseEngineResource, error)

ListDatabaseEngines calls GET /api/v1/database-engines: every engine this control plane can actually create, backing the creation wizard's engine picker instead of a hardcoded list.

func (c *Client) ListDatabaseLinks(ctx context.Context, database string) ([]DatabaseLink, error)

ListDatabaseLinks calls GET /api/v1/databases/{name}/links.

func (*Client) ListDatabaseTemp added in v0.2.0

func (c *Client) ListDatabaseTemp(ctx context.Context, name string) (DatabaseTempList, error)

ListDatabaseTemp calls GET /api/v1/databases/{name}/access/temp.

func (*Client) ListDatabaseUsers added in v0.2.0

func (c *Client) ListDatabaseUsers(ctx context.Context, name string) ([]DatabaseUser, error)

ListDatabaseUsers calls GET /api/v1/databases/{name}/users.

func (*Client) ListDatabases

func (c *Client) ListDatabases(ctx context.Context) ([]DatabaseResource, error)

ListDatabases calls GET /api/v1/databases.

func (*Client) ListDatabasesInEnvironment added in v0.2.0

func (c *Client) ListDatabasesInEnvironment(ctx context.Context, environment string) ([]DatabaseResource, error)

ListDatabasesInEnvironment calls GET /api/v1/databases?environment=<id or name>.

func (*Client) ListDeployApprovals added in v0.2.0

func (c *Client) ListDeployApprovals(ctx context.Context, status, service string) ([]DeployApprovalResource, error)

ListDeployApprovals calls GET /api/v1/deploy-approvals: status defaults server-side to "pending" when empty; pass "all" to include decided requests too. service filters to one app, empty means every app.

func (*Client) ListDeployAttempts added in v0.2.0

func (c *Client) ListDeployAttempts(ctx context.Context, name string) ([]DeployAttemptResource, error)

ListDeployAttempts calls GET /api/v1/apps/{name}/deploy-attempts: the real, row-per-trigger-call deploy history for name, newest first. Additive to GetDeployStatus's reconcile conditions, not a replacement.

func (*Client) ListDeployAttemptsFiltered

func (c *Client) ListDeployAttemptsFiltered(ctx context.Context, name string, f DeployAttemptFilter) ([]DeployAttemptResource, error)

ListDeployAttemptsFiltered is ListDeployAttempts narrowed server side.

func (*Client) ListDeployNotifyTargets added in v0.2.0

func (c *Client) ListDeployNotifyTargets(ctx context.Context, name string) ([]DeployNotifyTargetResource, error)

ListDeployNotifyTargets calls GET /api/v1/apps/{name}/deploy-notify-targets: every deploy-outcome notification target scoped to name, including disabled ones.

func (*Client) ListDeployPolicies

func (c *Client) ListDeployPolicies(ctx context.Context) ([]DeployPolicy, error)

ListDeployPolicies calls GET /api/v1/deploy-policies.

func (*Client) ListDeployments added in v0.2.0

func (c *Client) ListDeployments(ctx context.Context, opts DeploymentListOptions) (DeploymentList, error)

ListDeployments calls GET /api/v1/deployments.

func (*Client) ListDeviceActivity added in v0.2.0

func (c *Client) ListDeviceActivity(ctx context.Context) ([]DeviceActivity, error)

ListDeviceActivity calls GET /api/v1/auth/device/activity.

func (*Client) ListDomains

func (c *Client) ListDomains(ctx context.Context) ([]DomainResource, error)

ListDomains calls GET /api/v1/domains: every service_domains row across every app, aggregated in one call.

func (*Client) ListEnvHistory

func (c *Client) ListEnvHistory(ctx context.Context, name string, limit int) ([]EnvChangeResource, error)

ListEnvHistory calls GET /api/v1/apps/{name}/env/history.

func (*Client) ListEnvironments

func (c *Client) ListEnvironments(ctx context.Context, projectID string) ([]EnvironmentResource, error)

ListEnvironments calls GET /api/v1/projects/{id}/environments.

func (*Client) ListErrors

func (c *Client) ListErrors(ctx context.Context, app string, o ErrorListOptions) ([]ErrorIssue, error)

ListErrors calls GET /api/v1/apps/{name}/errors.

func (*Client) ListEventWebhookDeliveries

func (c *Client) ListEventWebhookDeliveries(ctx context.Context, id string) ([]EventDeliveryResource, error)

ListEventWebhookDeliveries calls GET /api/v1/event-webhooks/{id}/deliveries.

func (*Client) ListEventWebhooks

func (c *Client) ListEventWebhooks(ctx context.Context) ([]EventWebhookResource, error)

ListEventWebhooks calls GET /api/v1/event-webhooks.

func (*Client) ListEvidencePacks

func (c *Client) ListEvidencePacks(ctx context.Context) ([]EvidencePackResource, error)

ListEvidencePacks calls GET /api/v1/compliance/evidence-packs.

func (*Client) ListExportDestinations added in v0.2.0

func (c *Client) ListExportDestinations(ctx context.Context) ([]ExportDestinationResource, error)

ListExportDestinations calls GET /api/v1/export/destinations.

func (*Client) ListExternalDatabaseCandidates added in v0.2.0

func (c *Client) ListExternalDatabaseCandidates(ctx context.Context, nodeID string) ([]ExternalDatabaseCandidate, error)

ListExternalDatabaseCandidates calls GET /api/v1/external-databases/candidates.

func (*Client) ListExternalDatabases added in v0.2.0

func (c *Client) ListExternalDatabases(ctx context.Context) ([]ExternalDatabase, error)

ListExternalDatabases calls GET /api/v1/external-databases.

func (*Client) ListFailedDeploys added in v0.2.0

func (c *Client) ListFailedDeploys(ctx context.Context, since string) ([]FailedDeployResource, error)

ListFailedDeploys calls GET /api/v1/deploys/failed. since is a Go duration such as "24h"; empty uses the server default.

func (*Client) ListFeatureFlags

func (c *Client) ListFeatureFlags(ctx context.Context, name string) ([]FeatureFlagResource, error)

ListFeatureFlags calls GET /api/v1/apps/{name}/flags.

func (*Client) ListFirewallEdgeBans

func (c *Client) ListFirewallEdgeBans(ctx context.Context) ([]FirewallEdgeBan, error)

ListFirewallEdgeBans calls GET .../firewall/edge/bans.

func (*Client) ListFirewallEdgeRules

func (c *Client) ListFirewallEdgeRules(ctx context.Context) ([]FirewallEdgeRule, error)

ListFirewallEdgeRules calls GET .../firewall/edge/rules.

func (*Client) ListFirewallRules added in v0.2.0

func (c *Client) ListFirewallRules(ctx context.Context) ([]FirewallRuleResource, error)

ListFirewallRules calls GET /api/v1/firewall-rules.

func (*Client) ListFixes

func (c *Client) ListFixes(ctx context.Context, subject string, all bool) ([]Fix, error)

ListFixes calls GET /api/v1/fixes.

func (*Client) ListFleetMaintenance

func (c *Client) ListFleetMaintenance(ctx context.Context) (FleetMaintenanceResource, error)

ListFleetMaintenance calls GET /api/v1/maintenance/domains.

func (*Client) ListFrameworks

func (c *Client) ListFrameworks(ctx context.Context) ([]frameworks.Preset, error)

ListFrameworks calls GET /api/v1/frameworks.

func (*Client) ListFunctionRoutes

func (c *Client) ListFunctionRoutes(ctx context.Context, name string) (FunctionRoutes, error)

ListFunctionRoutes calls GET /api/v1/functions/{name}/route.

func (*Client) ListFunctionRuntimes

func (c *Client) ListFunctionRuntimes(ctx context.Context) (FunctionRuntimes, error)

ListFunctionRuntimes calls GET /api/v1/functions/runtimes.

func (*Client) ListFunctions

func (c *Client) ListFunctions(ctx context.Context, window string) (FunctionsList, error)

ListFunctions returns every function with call count and p95 duration over window (1h, 24h or 7d; empty means 24h).

func (*Client) ListGPUNodes added in v0.2.0

func (c *Client) ListGPUNodes(ctx context.Context) ([]GPUNodeResource, error)

ListGPUNodes calls GET /api/v1/gpus.

func (*Client) ListGitHubAppBranches added in v0.2.0

func (c *Client) ListGitHubAppBranches(ctx context.Context, owner, repo string) ([]GitAppBranchResource, error)

ListGitHubAppBranches calls GET /api/v1/github-app/repos/{owner}/{repo}/branches.

func (*Client) ListGitHubAppInstallations added in v0.2.0

func (c *Client) ListGitHubAppInstallations(ctx context.Context) (GitHubAppInstallationListResource, error)

ListGitHubAppInstallations calls GET /api/v1/github-app/installations: every connected GitHub account/org, plus the URL to connect another one.

func (*Client) ListGitHubAppRepos added in v0.2.0

func (c *Client) ListGitHubAppRepos(ctx context.Context) (GitHubAppRepoListResource, error)

ListGitHubAppRepos calls GET /api/v1/github-app/repos: every repository every connected installation can access, plus one error per installation that failed to list (migrations/0282 made installations one-to-many).

func (*Client) ListGitLabAppBranches added in v0.2.0

func (c *Client) ListGitLabAppBranches(ctx context.Context, projectID int64) ([]GitAppBranchResource, error)

ListGitLabAppBranches calls GET /api/v1/gitlab-app/projects/{id}/branches.

func (*Client) ListGitLabAppProjects added in v0.2.0

func (c *Client) ListGitLabAppProjects(ctx context.Context) ([]GitLabAppProjectResource, error)

ListGitLabAppProjects calls GET /api/v1/gitlab-app/projects: every project the connected GitLab account can access.

func (*Client) ListGitProviders added in v0.2.0

func (c *Client) ListGitProviders(ctx context.Context) ([]GitProviderResource, error)

ListGitProviders calls GET /api/v1/git-providers: a capability summary (connected, can list branches, can register a webhook, can auth-clone) for every git provider this control plane knows about, in one call rather than three separate per-provider status checks.

func (*Client) ListGiteaAppBranches added in v0.2.0

func (c *Client) ListGiteaAppBranches(ctx context.Context, owner, repo string) ([]GitAppBranchResource, error)

ListGiteaAppBranches calls GET /api/v1/gitea-app/repos/{owner}/{repo}/branches.

func (*Client) ListGiteaAppRepos added in v0.2.0

func (c *Client) ListGiteaAppRepos(ctx context.Context) ([]GiteaAppRepoResource, error)

ListGiteaAppRepos calls GET /api/v1/gitea-app/repos: every repository the connected Gitea account can access.

func (*Client) ListImages

func (c *Client) ListImages(ctx context.Context, node string, keepPerApp int) (ImageListResource, error)

ListImages calls GET /api/v1/images. keepPerApp < 0 keeps the server default.

func (*Client) ListInbox

func (c *Client) ListInbox(ctx context.Context, unreadOnly bool, limit int) ([]InboxItem, error)

ListInbox calls GET /api/v1/inbox.

func (*Client) ListIntegrationCatalog added in v0.2.0

func (c *Client) ListIntegrationCatalog(ctx context.Context) ([]IntegrationCatalogEntryResource, error)

ListIntegrationCatalog calls GET /api/v1/integrations: the full internal/integrations.Catalog, global and read-only.

func (*Client) ListInvites

func (c *Client) ListInvites(ctx context.Context) ([]InviteResource, error)

ListInvites calls GET /api/v1/invites.

func (*Client) ListJanitorRuns

func (c *Client) ListJanitorRuns(ctx context.Context, limit int) ([]JanitorReport, error)

ListJanitorRuns calls GET /api/v1/system/janitor/runs.

func (*Client) ListJobRuns added in v0.2.0

func (c *Client) ListJobRuns(ctx context.Context, app, id, status string, limit int) ([]JobRunResource, error)

ListJobRuns calls GET .../jobs/{id}/runs, or the app-wide GET .../job-runs when id is empty. status and limit are optional filters.

func (*Client) ListJobs added in v0.2.0

func (c *Client) ListJobs(ctx context.Context, app string) ([]ScheduledTaskResource, error)

ListJobs calls GET /api/v1/apps/{name}/jobs.

func (*Client) ListLoadBalancers added in v0.2.0

func (c *Client) ListLoadBalancers(ctx context.Context, p LoadBalancerListParams) (LoadBalancerList, error)

ListLoadBalancers calls GET /api/v1/loadbalancers.

func (*Client) ListLogArchiveObjects added in v0.2.0

func (c *Client) ListLogArchiveObjects(ctx context.Context, targetID, app, cursor string) (LogArchiveObjects, error)

ListLogArchiveObjects calls GET /api/v1/log-archive/objects.

func (*Client) ListLogArchivePolicies added in v0.2.0

func (c *Client) ListLogArchivePolicies(ctx context.Context) ([]LogArchivePolicy, error)

ListLogArchivePolicies calls GET /api/v1/log-archive/policies.

func (*Client) ListLogArchiveRuns added in v0.2.0

func (c *Client) ListLogArchiveRuns(ctx context.Context, app string, all bool) ([]LogArchiveRun, error)

ListLogArchiveRuns calls GET /api/v1/log-archive/runs. all ignores app.

func (*Client) ListMaintenanceWindows added in v0.2.0

func (c *Client) ListMaintenanceWindows(ctx context.Context) ([]MaintenanceWindowResource, error)

ListMaintenanceWindows calls GET /api/v1/alert-maintenance-windows.

func (*Client) ListMajorUpgrades added in v0.2.0

func (c *Client) ListMajorUpgrades(ctx context.Context, name string) ([]MajorUpgradeResource, error)

ListMajorUpgrades calls GET /api/v1/databases/{name}/major-upgrades.

func (*Client) ListMarketplaceSources

func (c *Client) ListMarketplaceSources(ctx context.Context) ([]MarketplaceSource, error)

ListMarketplaceSources calls GET /api/v1/plugin-marketplace/sources.

func (*Client) ListMigrationChecklists

func (c *Client) ListMigrationChecklists(ctx context.Context) ([]MigrationChecklist, error)

ListMigrationChecklists calls GET /api/v1/migration/checklists.

func (*Client) ListMigrationLocalSources added in v0.2.0

func (c *Client) ListMigrationLocalSources(ctx context.Context, nodeID string) ([]HubLocalSource, error)

ListMigrationLocalSources lists database containers on a node.

func (*Client) ListMigrationSessions added in v0.2.0

func (c *Client) ListMigrationSessions(ctx context.Context) ([]HubSession, error)

ListMigrationSessions lists sessions without their items.

func (*Client) ListMobileDevices added in v0.2.0

func (c *Client) ListMobileDevices(ctx context.Context) ([]MobileDevice, error)

ListMobileDevices calls GET /api/v1/mobile/devices.

func (*Client) ListModelCache added in v0.2.0

func (c *Client) ListModelCache(ctx context.Context) (ModelCacheReport, error)

ListModelCache calls GET /api/v1/model-cache.

func (*Client) ListModelKeys added in v0.2.0

func (c *Client) ListModelKeys(ctx context.Context, name string) ([]ModelKeyResource, error)

ListModelKeys calls GET /api/v1/models/{name}/keys.

func (*Client) ListModels added in v0.2.0

func (c *Client) ListModels(ctx context.Context) ([]ModelResource, error)

ListModels calls GET /api/v1/models.

func (*Client) ListNetworkShares added in v0.2.0

func (c *Client) ListNetworkShares(ctx context.Context) ([]NetworkShareResource, error)

ListNetworkShares calls GET /api/v1/network-shares.

func (*Client) ListNodeDrains added in v0.2.0

func (c *Client) ListNodeDrains(ctx context.Context, nodeID string) ([]NodeDrainResource, error)

ListNodeDrains calls GET /api/v1/nodes/{id}/drains.

func (*Client) ListNodeEvents added in v0.2.0

func (c *Client) ListNodeEvents(ctx context.Context, id string, limit int) ([]NodeStatusEventResource, error)

ListNodeEvents calls GET /api/v1/nodes/{id}/events: the node's recent status transitions, newest first. limit <= 0 uses the server default.

func (*Client) ListNodeMoves added in v0.2.0

func (c *Client) ListNodeMoves(ctx context.Context, kind, resource, status string) ([]NodeMoveResource, error)

ListNodeMoves calls GET /api/v1/node-moves with optional filters.

func (*Client) ListNodeProviderRegions added in v0.2.0

func (c *Client) ListNodeProviderRegions(ctx context.Context, provider string) ([]NodeProviderRegionResource, error)

ListNodeProviderRegions calls GET /api/v1/node-providers/{provider}/regions.

func (*Client) ListNodeProviderSizes added in v0.2.0

func (c *Client) ListNodeProviderSizes(ctx context.Context, provider, region string) ([]NodeProviderSizeResource, error)

ListNodeProviderSizes calls GET /api/v1/node-providers/{provider}/sizes?region=X. region may be empty to list every size regardless of region.

func (*Client) ListNodeProviders added in v0.2.0

func (c *Client) ListNodeProviders(ctx context.Context) ([]NodeProviderResource, error)

ListNodeProviders calls GET /api/v1/node-providers.

func (*Client) ListNodeProvisions added in v0.2.0

func (c *Client) ListNodeProvisions(ctx context.Context) ([]NodeProvisionResource, error)

ListNodeProvisions calls GET /api/v1/node-provisions.

func (*Client) ListNodeSecurityEvents

func (c *Client) ListNodeSecurityEvents(ctx context.Context, id, outcome string, limit int) ([]NodeSecurityEvent, error)

ListNodeSecurityEvents calls GET /api/v1/nodes/{id}/security/events. outcome and limit are optional.

func (*Client) ListNodes

func (c *Client) ListNodes(ctx context.Context) ([]NodeResource, error)

ListNodes calls GET /api/v1/nodes.

func (*Client) ListNodesFiltered added in v0.2.0

func (c *Client) ListNodesFiltered(ctx context.Context, opts ListNodesOptions) ([]NodeResource, int, error)

ListNodesFiltered calls GET /api/v1/nodes with optional query, limit and offset, returning nodes plus the total match count before paging (the X-Total-Count header handleListNodes always sets). ListNodes stays the plain unfiltered call every existing caller already uses.

func (*Client) ListNotificationChannels

func (c *Client) ListNotificationChannels(ctx context.Context) ([]NotificationChannelResource, error)

ListNotificationChannels calls GET /api/v1/notification-channels.

func (*Client) ListNotificationDeliveries

func (c *Client) ListNotificationDeliveries(ctx context.Context, id string, limit int) ([]NotificationDeliveryResource, error)

ListNotificationDeliveries calls GET /api/v1/notification-channels/{id}/deliveries: this channel's send history, newest first, up to limit rows (0 leaves the server's own default in place).

func (*Client) ListOAuthProviderSettings added in v0.2.0

func (c *Client) ListOAuthProviderSettings(ctx context.Context) ([]OAuthProviderSettingsResource, error)

ListOAuthProviderSettings calls GET /api/v1/settings/oauth: every provider's full sign-in configuration.

func (*Client) ListOAuthSSOPolicies

func (c *Client) ListOAuthSSOPolicies(ctx context.Context) ([]OAuthSSOPolicy, error)

ListOAuthSSOPolicies calls GET /api/v1/sso/oidc.

func (*Client) ListOrganizations

func (c *Client) ListOrganizations(ctx context.Context) ([]OrganizationResource, error)

ListOrganizations calls GET /api/v1/organizations.

func (*Client) ListOrphanedVolumes added in v0.2.0

func (c *Client) ListOrphanedVolumes(ctx context.Context) ([]OrphanedVolumeResource, error)

ListOrphanedVolumes calls GET /api/v1/system/volumes/orphaned: every named Docker volume this instance created that current desired state no longer references.

func (*Client) ListOrphans added in v0.2.0

func (c *Client) ListOrphans(ctx context.Context) (OrphanReport, error)

ListOrphans calls GET /api/v1/system/orphans: every leftover container and volume across nodes with its grace period status. Removes nothing.

func (*Client) ListPITRRestores added in v0.2.0

func (c *Client) ListPITRRestores(ctx context.Context, name string) ([]PITRRestoreHistoryResource, error)

ListPITRRestores calls GET /api/v1/databases/{name}/pitr-restores.

func (*Client) ListPRPreviewEnv

func (c *Client) ListPRPreviewEnv(ctx context.Context, name string, pr int) ([]PRPreviewEnvOverride, error)

ListPRPreviewEnv calls GET /api/v1/apps/{name}/previews/{pr}/env.

func (*Client) ListPackageRegistries

func (c *Client) ListPackageRegistries(ctx context.Context) ([]PackageRegistryResource, error)

ListPackageRegistries calls GET /api/v1/package-registries.

func (*Client) ListPendingDeviceLogins added in v0.2.0

func (c *Client) ListPendingDeviceLogins(ctx context.Context) ([]DevicePendingLogin, error)

ListPendingDeviceLogins calls GET /api/v1/auth/device/pending-summary.

func (*Client) ListPendingJoinTokens

func (c *Client) ListPendingJoinTokens(ctx context.Context) ([]PendingJoinToken, error)

ListPendingJoinTokens calls GET /api/v1/nodes/join-tokens.

func (*Client) ListPipelineRunArtifacts

func (c *Client) ListPipelineRunArtifacts(ctx context.Context, app, runID string) ([]PipelineArtifact, error)

ListPipelineRunArtifacts calls GET .../pipeline-runs/{id}/artifacts.

func (*Client) ListPipelineRunFixes

func (c *Client) ListPipelineRunFixes(ctx context.Context, app, runID string) ([]PipelineFix, error)

ListPipelineRunFixes calls GET .../pipeline-runs/{id}/fixes.

func (*Client) ListPipelineRunLogs added in v0.2.0

func (c *Client) ListPipelineRunLogs(ctx context.Context, app, id, job string, after int64, limit int) ([]PipelineLogLine, error)

ListPipelineRunLogs calls GET .../pipeline-runs/{id}/logs. job filters to one job key and after resumes past a line ID.

func (*Client) ListPipelineRuns added in v0.2.0

func (c *Client) ListPipelineRuns(ctx context.Context, app, pipeline string, limit int) ([]PipelineRunResource, error)

ListPipelineRuns calls GET /api/v1/apps/{app}/pipeline-runs.

func (*Client) ListPipelineTriggers added in v0.2.0

func (c *Client) ListPipelineTriggers(ctx context.Context, app string) ([]PipelineTrigger, error)

ListPipelineTriggers calls GET /api/v1/apps/{app}/pipeline-triggers.

func (*Client) ListPipelineWebhookDeliveries

func (c *Client) ListPipelineWebhookDeliveries(ctx context.Context, app, name string) ([]PipelineWebhookDelivery, error)

ListPipelineWebhookDeliveries calls GET .../webhook/deliveries.

func (*Client) ListPipelines added in v0.2.0

func (c *Client) ListPipelines(ctx context.Context, app string) ([]PipelineResource, error)

ListPipelines calls GET /api/v1/apps/{app}/pipelines.

func (*Client) ListPluginKeys

func (c *Client) ListPluginKeys(ctx context.Context) ([]PluginKey, error)

ListPluginKeys calls GET /api/v1/plugin-keys.

func (*Client) ListPlugins

func (c *Client) ListPlugins(ctx context.Context) ([]Plugin, error)

ListPlugins calls GET /api/v1/plugins.

func (*Client) ListPolicies

func (c *Client) ListPolicies(ctx context.Context) ([]PolicyResource, error)

ListPolicies calls GET /api/v1/iam/policies.

func (*Client) ListPolicyAttachments

func (c *Client) ListPolicyAttachments(ctx context.Context, id string) ([]PolicyAttachmentResource, error)

ListPolicyAttachments calls GET /api/v1/iam/policies/{id}/attachments.

func (*Client) ListPolicyTemplates added in v0.2.0

func (c *Client) ListPolicyTemplates(ctx context.Context) (PolicyTemplateList, error)

ListPolicyTemplates calls GET /api/v1/iam/policy-templates.

func (*Client) ListPreviewEnvironments

func (c *Client) ListPreviewEnvironments(ctx context.Context, appName string) ([]PreviewEnvironmentResource, error)

ListPreviewEnvironments calls GET /api/v1/apps/{name}/previews: every active pull-request preview for an app.

func (*Client) ListPrivateNetworks

func (c *Client) ListPrivateNetworks(ctx context.Context) (PrivateNetworkList, error)

ListPrivateNetworks calls GET /api/v1/private-networks.

func (*Client) ListProbeAttempts added in v0.2.0

func (c *Client) ListProbeAttempts(ctx context.Context, name, deployID string) ([]ProbeAttempt, error)

ListProbeAttempts calls GET /api/v1/apps/{name}/deploys/{deployID}/probes.

func (*Client) ListProjects

func (c *Client) ListProjects(ctx context.Context) ([]ProjectResource, error)

ListProjects calls GET /api/v1/projects.

func (*Client) ListPushSubscriptions added in v0.2.0

func (c *Client) ListPushSubscriptions(ctx context.Context) ([]PushSubscriptionResource, error)

ListPushSubscriptions calls GET /api/v1/settings/push-subscriptions: every browser the caller's own account has registered for the "webpush" notification-channel kind.

func (*Client) ListRegistryCredentialRepositories added in v0.2.0

func (c *Client) ListRegistryCredentialRepositories(ctx context.Context, id string) (RegistryRepositoriesResource, error)

ListRegistryCredentialRepositories calls GET /api/v1/registry-credentials/{id}/repositories: every repository in the external registry this credential authenticates against, the same wire shape ListRegistryRepositories uses for the built-in registry.

func (*Client) ListRegistryCredentialTags added in v0.2.0

func (c *Client) ListRegistryCredentialTags(ctx context.Context, id, repository string) (RegistryTagsResource, error)

ListRegistryCredentialTags calls GET /api/v1/registry-credentials/{id}/tags?repository=<name>: every tag pushed for one repository in the external registry this credential authenticates against.

func (*Client) ListRegistryCredentials

func (c *Client) ListRegistryCredentials(ctx context.Context) ([]RegistryCredentialResource, error)

ListRegistryCredentials calls GET /api/v1/registry-credentials.

func (*Client) ListRegistryRepositories added in v0.2.0

func (c *Client) ListRegistryRepositories(ctx context.Context) (RegistryRepositoriesResource, error)

ListRegistryRepositories calls GET /api/v1/registry/repositories: every repository name pushed to the built-in registry.

func (*Client) ListRegistryTags added in v0.2.0

func (c *Client) ListRegistryTags(ctx context.Context, repository string) (RegistryTagsResource, error)

ListRegistryTags calls GET /api/v1/registry/tags?repository=<name>: every tag pushed for one repository in the built-in registry.

func (*Client) ListRepoBranches added in v0.2.0

func (c *Client) ListRepoBranches(ctx context.Context, repoURL string) (RepoBranchesResource, error)

ListRepoBranches calls the repo branch listing route (POST under /api/v1/git).

func (*Client) ListRestores added in v0.2.0

func (c *Client) ListRestores(ctx context.Context, name string) ([]RestoreHistoryResource, error)

ListRestores calls GET /api/v1/databases/{name}/restores.

func (*Client) ListRoles

func (c *Client) ListRoles(ctx context.Context) ([]RoleResource, error)

ListRoles calls GET /api/v1/roles.

func (*Client) ListRollbackTargets added in v0.2.0

func (c *Client) ListRollbackTargets(ctx context.Context, appName string) ([]RollbackTargetResource, error)

ListRollbackTargets calls GET /api/v1/apps/{name}/rollback-targets.

func (*Client) ListSAMLConnections

func (c *Client) ListSAMLConnections(ctx context.Context) ([]SAMLConnection, error)

ListSAMLConnections calls GET /api/v1/sso/saml/connections.

func (*Client) ListSCIMTokens

func (c *Client) ListSCIMTokens(ctx context.Context) ([]SCIMToken, error)

ListSCIMTokens calls GET /api/v1/sso/scim/tokens.

func (*Client) ListSSHNodeProvisions added in v0.2.0

func (c *Client) ListSSHNodeProvisions(ctx context.Context) ([]SSHNodeProvisionResource, error)

ListSSHNodeProvisions calls GET /api/v1/ssh-node-provisions.

func (*Client) ListSSOGroupMappings

func (c *Client) ListSSOGroupMappings(ctx context.Context) (SSOGroupMappings, error)

ListSSOGroupMappings calls GET /api/v1/sso/group-mappings.

func (*Client) ListSavedLogQueries added in v0.2.0

func (c *Client) ListSavedLogQueries(ctx context.Context, app string) ([]SavedLogQuery, error)

ListSavedLogQueries calls GET /api/v1/logs/queries.

func (*Client) ListSavedSearches

func (c *Client) ListSavedSearches(ctx context.Context) ([]SavedSearch, error)

ListSavedSearches calls GET /api/v1/search/saved.

func (*Client) ListScheduledMaintenance

func (c *Client) ListScheduledMaintenance(ctx context.Context) ([]ScheduledMaintenanceResource, error)

ListScheduledMaintenance calls GET /api/v1/scheduled-maintenance.

func (*Client) ListScheduledTasks

func (c *Client) ListScheduledTasks(ctx context.Context, name string) ([]ScheduledTaskResource, error)

ListScheduledTasks calls GET /api/v1/apps/{name}/scheduled-tasks.

func (*Client) ListSecretRotation

func (c *Client) ListSecretRotation(ctx context.Context, name string) ([]SecretRotationPolicyResource, error)

ListSecretRotation calls GET /api/v1/apps/{name}/secret-rotation.

func (*Client) ListSecrets

func (c *Client) ListSecrets(ctx context.Context, name string) ([]SecretKeyResource, error)

ListSecrets calls GET /api/v1/apps/{name}/secrets: every known secret key for the app with its locked state, never a value.

func (*Client) ListSecuritySessions added in v0.2.0

func (c *Client) ListSecuritySessions(ctx context.Context, userID string) (SecuritySessions, error)

ListSecuritySessions calls GET /api/v1/security/sessions; userID is empty for the caller's own account, another account needs root.

func (*Client) ListSelfUpgradeAttempts added in v0.2.0

func (c *Client) ListSelfUpgradeAttempts(ctx context.Context) (SelfUpgradeAttempts, error)

ListSelfUpgradeAttempts calls GET /api/v1/updates/self-upgrade/attempts.

func (*Client) ListServiceTemplates

func (c *Client) ListServiceTemplates(ctx context.Context) ([]ServiceTemplateListItem, error)

ListServiceTemplates calls GET /api/v1/service-templates: the full catalog, without each entry's Compose body (see ServiceTemplateListItem).

func (*Client) ListSessionPolicies

func (c *Client) ListSessionPolicies(ctx context.Context) ([]SessionPolicy, error)

ListSessionPolicies calls GET /api/v1/security/session-policies.

func (*Client) ListSharedEnvAll added in v0.2.0

func (c *Client) ListSharedEnvAll(ctx context.Context, scope, id string) ([]SharedEnvVarResource, error)

ListSharedEnvAll calls GET /api/v1/{scope}s/{id}/env/all: every shared env var at that tier, plain and secret-marked alike.

func (*Client) ListSharedEnvSecretKeys added in v0.2.0

func (c *Client) ListSharedEnvSecretKeys(ctx context.Context, scope, id string) ([]string, error)

ListSharedEnvSecretKeys calls GET /api/v1/{scope}s/{id}/env/secrets: every secret-marked shared env var key at that tier, never a value.

func (*Client) ListSignInRequests added in v0.2.0

func (c *Client) ListSignInRequests(ctx context.Context) (SignInRequests, error)

ListSignInRequests calls GET /api/v1/auth/sign-in-requests. A token must belong to a user and hold write:sensitive or signin:approve.

func (*Client) ListSleepFleet

func (c *Client) ListSleepFleet(ctx context.Context) (SleepFleet, error)

ListSleepFleet calls GET /api/v1/sleep.

func (*Client) ListStandaloneDomains added in v0.2.0

func (c *Client) ListStandaloneDomains(ctx context.Context) ([]StandaloneDomain, error)

ListStandaloneDomains calls GET /api/v1/domains/standalone.

func (*Client) ListStaticSites added in v0.2.0

func (c *Client) ListStaticSites(ctx context.Context) ([]StaticSiteResource, error)

ListStaticSites calls GET /api/v1/static-sites: every build.type: static site currently served directly through embedded Caddy.

func (*Client) ListStatusComponents added in v0.2.0

func (c *Client) ListStatusComponents(ctx context.Context) ([]StatusComponent, error)

ListStatusComponents calls GET /api/v1/status-page/components.

func (*Client) ListStatusIncidents added in v0.2.0

func (c *Client) ListStatusIncidents(ctx context.Context) ([]StatusIncident, error)

ListStatusIncidents calls GET /api/v1/status-page/incidents.

func (*Client) ListStorageBuckets

func (c *Client) ListStorageBuckets(ctx context.Context, app string) ([]StorageBucket, error)

ListStorageBuckets calls GET /api/v1/storage/buckets, filtered to one app when app is set.

func (*Client) ListStorageDefaults

func (c *Client) ListStorageDefaults(ctx context.Context) (StorageDefaults, error)

ListStorageDefaults calls GET /api/v1/storage/defaults.

func (*Client) ListStorageDestinations added in v0.2.0

func (c *Client) ListStorageDestinations(ctx context.Context) ([]StorageDestination, error)

ListStorageDestinations calls GET /api/v1/storage/destinations.

func (*Client) ListStorageOrphans added in v0.2.0

func (c *Client) ListStorageOrphans(ctx context.Context) (StorageOrphansResponse, error)

ListStorageOrphans calls GET /api/v1/storage/orphans.

func (*Client) ListStorageProviders added in v0.2.0

func (c *Client) ListStorageProviders(ctx context.Context) ([]StorageProvider, error)

ListStorageProviders calls GET /api/v1/storage/providers.

func (*Client) ListTags added in v0.2.0

func (c *Client) ListTags(ctx context.Context) ([]TagResource, error)

ListTags calls GET /api/v1/tags.

func (*Client) ListTeamEvents added in v0.2.0

func (c *Client) ListTeamEvents(ctx context.Context, id string, limit int) ([]TeamEventResource, error)

ListTeamEvents calls GET /api/v1/teams/{id}/events.

func (*Client) ListTeamInvites added in v0.2.0

func (c *Client) ListTeamInvites(ctx context.Context, id string) ([]TeamInviteResource, error)

ListTeamInvites calls GET /api/v1/teams/{id}/invites.

func (*Client) ListTeamMembers added in v0.2.0

func (c *Client) ListTeamMembers(ctx context.Context, id string) ([]TeamMemberResource, error)

ListTeamMembers calls GET /api/v1/teams/{id}/members.

func (*Client) ListTeamRoles added in v0.2.0

func (c *Client) ListTeamRoles(ctx context.Context) ([]TeamRoleResource, error)

ListTeamRoles calls GET /api/v1/teams/roles.

func (*Client) ListTeams added in v0.2.0

func (c *Client) ListTeams(ctx context.Context) ([]TeamResource, error)

ListTeams calls GET /api/v1/teams.

func (*Client) ListTokensRaw added in v0.2.0

func (c *Client) ListTokensRaw(ctx context.Context) (json.RawMessage, error)

ListTokensRaw calls GET /api/v1/auth/tokens with the client's bearer token (root ability), returning the JSON array undecoded.

func (*Client) ListTraces

func (c *Client) ListTraces(ctx context.Context, app string, o TraceListOptions) ([]TraceSummary, error)

ListTraces calls GET /api/v1/apps/{name}/traces.

func (*Client) ListTrustedDevices added in v0.2.0

func (c *Client) ListTrustedDevices(ctx context.Context) ([]TrustedDevice, error)

ListTrustedDevices calls GET /api/v1/auth/trusted-devices.

func (*Client) ListUsageBudgets added in v0.2.0

func (c *Client) ListUsageBudgets(ctx context.Context) (UsageBudgets, error)

ListUsageBudgets calls GET /api/v1/usage/budgets.

func (*Client) ListUsers

func (c *Client) ListUsers(ctx context.Context) ([]UserResource, error)

ListUsers calls GET /api/v1/users.

func (*Client) ListVolumeBackupVerifications

func (c *Client) ListVolumeBackupVerifications(ctx context.Context, name, volume, historyID string) ([]BackupVerificationResource, error)

ListVolumeBackupVerifications calls GET /api/v1/apps/{name}/volumes/{volume}/backups/{historyId}/verifications: the app service volume counterpart of ListBackupVerifications.

func (*Client) ListVolumeBackups

func (c *Client) ListVolumeBackups(ctx context.Context, name, volume string, opts ListBackupsOptions) ([]BackupHistoryResource, error)

ListVolumeBackups calls GET /api/v1/apps/{name}/volumes/{volume}/backups: the app service volume counterpart of ListBackups.

func (*Client) ListVolumeCloneRestores added in v0.2.0

func (c *Client) ListVolumeCloneRestores(ctx context.Context, name, volume string) ([]VolumeCloneRestoreResource, error)

ListVolumeCloneRestores calls GET /api/v1/apps/{name}/volumes/{volume}/clone-restores.

func (*Client) ListVolumeRestores added in v0.2.0

func (c *Client) ListVolumeRestores(ctx context.Context, name, volume string) ([]RestoreHistoryResource, error)

ListVolumeRestores calls GET /api/v1/apps/{name}/volumes/{volume}/restores.

func (*Client) ListWebhookDeliveries

func (c *Client) ListWebhookDeliveries(ctx context.Context, name string, opts ListWebhookDeliveriesOptions) ([]WebhookDeliveryResource, error)

ListWebhookDeliveries calls GET /api/v1/apps/{name}/webhook-deliveries: recent inbound git-provider webhook requests for name, newest first.

func (*Client) MakeDatabasePrivate added in v0.2.0

func (c *Client) MakeDatabasePrivate(ctx context.Context, name string) error

MakeDatabasePrivate calls POST /api/v1/databases/{name}/network/make-private.

func (*Client) MarkInboxRead

func (c *Client) MarkInboxRead(ctx context.Context, ids []string, all bool) error

MarkInboxRead calls POST /api/v1/inbox/read with ids, or with all=true.

func (*Client) MarketplaceCatalog

func (c *Client) MarketplaceCatalog(ctx context.Context) (MarketplaceCatalog, error)

MarketplaceCatalog calls GET /api/v1/plugin-marketplace.

func (*Client) MigrationVolumeGuide added in v0.2.0

func (c *Client) MigrationVolumeGuide(ctx context.Context, source, app string) (VolumeGuideResponse, error)

MigrationVolumeGuide calls GET /api/v1/migration/volumes.

func (c *Client) MintSessionLink(ctx context.Context) (SessionLinkResource, error)

MintSessionLink calls POST /api/v1/auth/session-links using this Client's bearer token, which must hold AbilityRoot: minting a session link is root-equivalent since redeeming it establishes a session with the minting caller's own abilities. The returned token is a one-time secret, the same contract CreateNodeJoinToken's own doc comment describes.

func (*Client) MoveAppEnvironment added in v0.2.0

func (c *Client) MoveAppEnvironment(ctx context.Context, name string, req MoveEnvironmentRequest) (MoveEnvironmentResult, error)

MoveAppEnvironment calls PUT /api/v1/apps/{name}/environment.

func (*Client) MoveAppWithVolumes added in v0.2.0

func (c *Client) MoveAppWithVolumes(ctx context.Context, name, nodeID string) (AppVolumeMoveResource, error)

MoveAppWithVolumes calls POST /api/v1/apps/{name}/move-with-volumes: the same placement change SetAppNode makes, plus archiving and restoring every one of the app's named Docker volumes onto the destination node (internal/api's handleMoveAppWithVolumes). Always returns an AppVolumeMoveResource: check its Status field, not the status code alone, to tell "already done" (an app with no volumes, or already on nodeID) from "still running" (real volumes to copy: poll GetAppVolumeMove with the returned ID until Status is no longer "running"). An empty nodeID moves the app back to the control plane's own local node.

func (*Client) MoveDatabaseEnvironment added in v0.2.0

func (c *Client) MoveDatabaseEnvironment(ctx context.Context, name string, req MoveEnvironmentRequest) (MoveEnvironmentResult, error)

MoveDatabaseEnvironment calls PUT /api/v1/databases/{name}/environment.

func (*Client) MyAccess

func (c *Client) MyAccess(ctx context.Context) (MyAccessResource, error)

MyAccess calls GET /api/v1/auth/my-access: the caller's own tier, teams, attached policies and per-area capabilities.

func (*Client) MyActivity

func (c *Client) MyActivity(ctx context.Context, opts MyActivityOptions) (MyActivity, error)

MyActivity calls GET /api/v1/auth/my-activity: only the caller's own rows.

func (*Client) MyCredentials

func (c *Client) MyCredentials(ctx context.Context) (MyCredentials, error)

MyCredentials calls GET /api/v1/auth/my-credentials.

func (*Client) OverrideSupplyChainGate added in v0.2.0

func (c *Client) OverrideSupplyChainGate(ctx context.Context, name, reason string) (SupplyChainSettings, error)

OverrideSupplyChainGate calls POST /api/v1/apps/{name}/supply-chain/override.

func (*Client) PatchEnvironment added in v0.2.0

func (c *Client) PatchEnvironment(ctx context.Context, id string, req PatchEnvironmentRequest) (EnvironmentResource, error)

PatchEnvironment calls PATCH /api/v1/environments/{id}.

func (*Client) PendingDeployDiff

func (c *Client) PendingDeployDiff(ctx context.Context, name, image string) (DeployCompareResource, error)

PendingDeployDiff calls GET .../deploys/compare?pending=true: what the next deploy would change against the last successful one, env keys only. image empty means the app's current desired image.

func (*Client) PlanAppImport added in v0.2.0

func (c *Client) PlanAppImport(ctx context.Context, req AppImportRequest) (AppImportView, error)

PlanAppImport calls POST /api/v1/migration/apps/plan. It stores nothing.

func (*Client) PlanGoLive added in v0.2.0

func (c *Client) PlanGoLive(ctx context.Context, app string, req GoLivePlanRequest) (GoLivePlanResponse, error)

PlanGoLive calls POST .../domains/go-live/plan.

func (*Client) PlanIaC added in v0.2.0

func (c *Client) PlanIaC(ctx context.Context, req IaCRequest) (iac.Plan, error)

PlanIaC calls POST /api/v1/apply/plan.

func (*Client) PlanImport added in v0.2.0

func (c *Client) PlanImport(ctx context.Context, req ImportPlanRequest) (ImportPlan, error)

PlanImport calls POST /api/v1/imports/plan. It creates nothing.

func (*Client) PlanMigration

func (c *Client) PlanMigration(ctx context.Context, req MigrationSourceRequest) (MigrationPlanReport, error)

PlanMigration calls POST /api/v1/migration/plan. It creates nothing.

func (*Client) PluginPanelAction

func (c *Client) PluginPanelAction(ctx context.Context, name, panel, action, appID string) (PluginActionResult, error)

PluginPanelAction calls POST /api/v1/plugins/{name}/panels/{panel}/actions/{action}.

func (*Client) PluginPanelData

func (c *Client) PluginPanelData(ctx context.Context, name, panel, appID string) (PluginPanelView, error)

PluginPanelData calls GET /api/v1/plugins/{name}/panels/{panel}/data.

func (*Client) PollDeviceAuthToken

func (c *Client) PollDeviceAuthToken(ctx context.Context, deviceCode string) (DeviceTokenResponse, error)

PollDeviceAuthToken calls POST /api/v1/auth/device/token once. Unauthenticated, same as StartDeviceAuth. Returns *APIError with Message one of "authorization_pending"/"access_denied"/ "expired_token" until the request has been approved; the caller is expected to poll this on an interval (DeviceStartResponse.Interval) until it either returns a token or a terminal error.

func (*Client) PostStatusIncidentUpdate added in v0.2.0

func (c *Client) PostStatusIncidentUpdate(ctx context.Context, id string, u StatusUpdate) (StatusIncident, error)

PostStatusIncidentUpdate calls POST /api/v1/status-page/incidents/{id}/updates.

func (*Client) PreflightApp added in v0.2.0

func (c *Client) PreflightApp(ctx context.Context, name string, requiredEnv []string) (PreflightReport, error)

PreflightApp calls POST /api/v1/apps/{name}/preflight. requiredEnv names variables the app must have set, since that set is not stored.

func (*Client) PreflightModel added in v0.2.0

func (c *Client) PreflightModel(ctx context.Context, req ModelPreflightRequest) (ModelPreflightResult, error)

PreflightModel calls POST /api/v1/models/preflight.

func (*Client) PreflightSSHNodeProvision added in v0.2.2

func (c *Client) PreflightSSHNodeProvision(ctx context.Context, req SSHProvisionPreflightRequest) (SSHProvisionPreflight, error)

PreflightSSHNodeProvision calls POST /api/v1/nodes/ssh-provision/preflight.

func (*Client) PresignBucketObject

func (c *Client) PresignBucketObject(ctx context.Context, id, key, method string, expiresSeconds int) (BucketPresign, error)

PresignBucketObject calls POST /api/v1/storage/buckets/{id}/presign.

func (*Client) PreviewAppExposure

func (c *Client) PreviewAppExposure(ctx context.Context, name string, req AppExposureRequest) (AppExposurePlan, error)

PreviewAppExposure calls POST /api/v1/apps/{name}/exposure/preview.

func (*Client) PreviewClone added in v0.2.0

func (c *Client) PreviewClone(ctx context.Context, name string) (ClonePreview, error)

PreviewClone calls GET /api/v1/apps/{name}/clone/preview.

func (*Client) PreviewCompose added in v0.2.0

func (c *Client) PreviewCompose(ctx context.Context, composeYAML []byte, profiles []string) (ComposePreview, error)

PreviewCompose calls POST /api/v1/compose/preview.

func (*Client) PreviewDatabasePasswordRotation

func (c *Client) PreviewDatabasePasswordRotation(ctx context.Context, name string) (DatabasePasswordRotation, error)

PreviewDatabasePasswordRotation calls the rotation endpoint with dry_run, which changes nothing and needs no step-up.

func (*Client) PreviewDatabaseRules added in v0.2.0

func (c *Client) PreviewDatabaseRules(ctx context.Context, name string, req DatabaseRulesRequest) (DatabaseRulesPlan, error)

PreviewDatabaseRules calls POST /api/v1/databases/{name}/network/rules/preview.

func (*Client) PreviewDomainPolicies added in v0.2.0

func (c *Client) PreviewDomainPolicies(ctx context.Context, name, domain string, req PolicyPreviewRequest) (PolicyPreviewResponse, error)

PreviewDomainPolicies calls POST .../domains/{domain}/policies/preview.

func (*Client) PreviewEnvironmentClone added in v0.2.0

func (c *Client) PreviewEnvironmentClone(ctx context.Context, id, newEnvironmentName string) (EnvironmentClonePreviewResource, error)

PreviewEnvironmentClone calls GET /api/v1/environments/{id}/clone/preview: what cloning id into a new environment named newEnvironmentName would most likely create, without applying it or reserving any name.

func (*Client) PreviewExposureRestriction added in v0.2.0

func (c *Client) PreviewExposureRestriction(ctx context.Context, req ExposureRestrictRequest) (ExposurePlan, error)

PreviewExposureRestriction calls POST /api/v1/firewall/exposure/preview.

func (*Client) PreviewFix

func (c *Client) PreviewFix(ctx context.Context, id string) (Fix, error)

PreviewFix calls POST /api/v1/fixes/{id}/preview.

func (*Client) PreviewLogPipeline

func (c *Client) PreviewLogPipeline(ctx context.Context, app string, rules []LogPipelineRule, lines []string) (LogPipelinePreview, error)

PreviewLogPipeline calls POST /api/v1/apps/{name}/log-pipeline/preview.

func (*Client) PreviewMaintenancePage

func (c *Client) PreviewMaintenancePage(ctx context.Context, title, message string, retryAfterSeconds int) (MaintenancePreviewResource, error)

PreviewMaintenancePage calls POST /api/v1/maintenance/preview.

func (*Client) PreviewMarketplacePlugin

func (c *Client) PreviewMarketplacePlugin(ctx context.Context, sourceID, id string) (MarketplacePreview, error)

PreviewMarketplacePlugin calls POST /api/v1/plugin-marketplace/preview.

func (*Client) PreviewNodeDrain

func (c *Client) PreviewNodeDrain(ctx context.Context, id string) (NodeDrainPreview, error)

PreviewNodeDrain calls POST /api/v1/nodes/{id}/drain?dry_run=true.

func (*Client) PreviewPromotion

func (c *Client) PreviewPromotion(ctx context.Context, name, environmentID, target string) (PromotePreviewResource, error)

PreviewPromotion calls GET /api/v1/apps/{name}/promote/preview: what promoting name's current image into environmentID would change, without applying it. target disambiguates when more than one app in environmentID belongs to the same project; leave it empty to let the server auto-discover the sole candidate.

func (*Client) Probe

func (c *Client) Probe(ctx context.Context, path string) error

Probe issues GET path and discards the body, so the soak harness can generate read load without a typed method per endpoint.

func (*Client) ProbeExternalDatabase added in v0.2.0

func (c *Client) ProbeExternalDatabase(ctx context.Context, name string) (ExternalDatabaseProbe, error)

ProbeExternalDatabase calls POST /api/v1/external-databases/{name}/probe.

func (*Client) PromoteApp

func (c *Client) PromoteApp(ctx context.Context, name string, req PromoteAppRequest) (DeployTriggerResult, error)

PromoteApp calls POST /api/v1/apps/{name}/promote: points the resolved target app's image at name's current image and redeploys it.

func (*Client) PromoteCanary added in v0.2.0

func (c *Client) PromoteCanary(ctx context.Context, appName string) (CanaryResource, error)

PromoteCanary calls POST /api/v1/apps/{name}/canary/promote.

func (*Client) ProtectAll added in v0.2.0

func (c *Client) ProtectAll(ctx context.Context, req ProtectAllRequest) (ProtectAllResponse, error)

ProtectAll calls POST /api/v1/backups/protect-all; Apply false only plans.

func (*Client) PruneBuildCache

PruneBuildCache calls POST /api/v1/builds/cache/prune.

func (*Client) PruneModelCache added in v0.2.0

func (c *Client) PruneModelCache(ctx context.Context, volumes []string, dryRun bool) (ModelCachePruneResult, error)

PruneModelCache calls POST /api/v1/model-cache/prune.

func (*Client) PrunePreview added in v0.2.0

func (c *Client) PrunePreview(ctx context.Context, name string, all bool) (PreviewPruneResult, error)

PrunePreview calls POST /api/v1/apps/{name}/preview/prune.

func (*Client) PruneSystem added in v0.2.0

func (c *Client) PruneSystem(ctx context.Context) (SystemPruneResult, error)

PruneSystem calls POST /api/v1/system/prune: removes every stopped container, dangling image, and unused volume or build cache the reconciler's current desired state doesn't need, fleet-wide.

func (*Client) PruneSystemNetworks

func (c *Client) PruneSystemNetworks(ctx context.Context, dryRun bool) (SystemNetworksPrune, error)

PruneSystemNetworks calls POST /api/v1/system/networks/prune.

func (*Client) PurgeAppCache

func (c *Client) PurgeAppCache(ctx context.Context, name string, req AppCachePurgeRequest) (AppCachePurgeResource, error)

PurgeAppCache calls POST /api/v1/apps/{name}/cache/purge.

func (*Client) PurgeAuditLog

func (c *Client) PurgeAuditLog(ctx context.Context) (PurgeAuditLogResult, error)

PurgeAuditLog calls POST /api/v1/audit-log/purge: deletes every audit_log row older than the control plane's own configured retention window right now, instead of waiting for its next periodic sweep.

func (*Client) PurgeDomainCache added in v0.2.0

func (c *Client) PurgeDomainCache(ctx context.Context, name, domain string, req PurgeCacheRequest) (PurgeCacheResponse, error)

PurgeDomainCache calls POST .../domains/{domain}/cache/purge.

func (*Client) PutAppImportPlan added in v0.2.0

func (c *Client) PutAppImportPlan(ctx context.Context, id string, body AppImportPlanUpdate) (AppImportView, error)

PutAppImportPlan calls PUT .../sessions/{id}/plan.

func (*Client) PutPreferences

func (c *Client) PutPreferences(ctx context.Context, p Preferences) (Preferences, error)

PutPreferences calls PUT /api/v1/auth/preferences, replacing every field.

func (*Client) PutStatusPage added in v0.2.0

func (c *Client) PutStatusPage(ctx context.Context, s StatusPageSettings) (StatusPageSettings, error)

PutStatusPage calls PUT /api/v1/status-page.

func (*Client) QueryAppMetrics

func (c *Client) QueryAppMetrics(ctx context.Context, name, metric string, from, to time.Time, step time.Duration) (AppMetricsResource, error)

QueryAppMetrics calls GET /api/v1/apps/{name}/metrics?metric=&from=&to=&step= (internal/api/metrics.go's handleQueryMetrics). from/to are sent as RFC3339; step of zero omits the query param, matching the server's own "step<=0 means raw unaggregated samples" contract (telemetry.Aggregate).

func (*Client) QueryAppMetricsSeries added in v0.2.0

func (c *Client) QueryAppMetricsSeries(ctx context.Context, name, metric string, from, to time.Time, opt MetricsQueryOptions) (MetricsSeriesResource, error)

QueryAppMetricsSeries calls GET /api/v1/apps/{name}/metrics with max_points and compare support.

func (*Client) QueryAppRequests added in v0.2.0

func (c *Client) QueryAppRequests(ctx context.Context, name string, from, to time.Time, step time.Duration) (AppRequestsResource, error)

QueryAppRequests calls GET /api/v1/apps/{name}/requests: ingress request rate, error rates and latency percentiles. A zero step lets the server pick.

func (*Client) QueryDatabase added in v0.2.0

func (c *Client) QueryDatabase(ctx context.Context, name string, req DatabaseQueryRequest, write bool) (DatabaseQueryResult, error)

QueryDatabase calls POST /api/v1/databases/{name}/query, or /query/write when write is true (admin only, confirm must equal the database name).

func (*Client) QueryDatabaseLogs added in v0.2.0

func (c *Client) QueryDatabaseLogs(ctx context.Context, name string, from, to time.Time, q string) ([]LogEntryResource, error)

QueryDatabaseLogs calls GET /api/v1/databases/{name}/logs?from=&to=&q= (internal/api/database_logs.go's handleQueryDatabaseLogs), the database counterpart to QueryLogs above: same request/response shape, same shared queryResourceLogs implementation server-side.

func (*Client) QueryDatabaseMetrics added in v0.2.0

func (c *Client) QueryDatabaseMetrics(ctx context.Context, name, metric string, from, to time.Time, step time.Duration) (AppMetricsResource, error)

QueryDatabaseMetrics calls GET /api/v1/databases/{name}/metrics?metric=&from=&to=&step= (internal/api/database_metrics.go's handleQueryDatabaseMetrics), the database-kind counterpart to QueryAppMetrics: same params, same response shape, since internal/api's queryResourceMetrics is the shared implementation behind both routes server-side.

func (*Client) QueryDatabaseSlowQueries added in v0.2.0

func (c *Client) QueryDatabaseSlowQueries(ctx context.Context, name string, from, to time.Time, limit, offset int) ([]SlowQueryEntryResource, int, error)

QueryDatabaseSlowQueries calls GET /api/v1/databases/{name}/slow-queries?from=&to=&limit=&offset= (internal/api/database_slow_queries.go's handleQueryDatabaseSlowQueries), returning parsed slow-query entries sorted by duration descending plus the total count before limit/offset truncation. limit <= 0 omits the ?limit param, letting the server apply its own default.

func (*Client) QueryLogs

func (c *Client) QueryLogs(ctx context.Context, name string, from, to time.Time, q string) ([]LogEntryResource, error)

QueryLogs calls GET /api/v1/apps/{name}/logs?from=&to=&q= (internal/api/logs.go's handleQueryLogs): a real, historical full-text search over already-stored log entries. from/to are sent as RFC3339, the same format the server requires (internal/api's parseTimeRange); q empty means every entry in the window, matching the server's own "empty query" contract.

func (*Client) QueryLogsCompact added in v0.2.0

func (c *Client) QueryLogsCompact(ctx context.Context, q LogQuery, maxBytes int, now time.Time) (LogExcerpt, error)

QueryLogsCompact runs q against the logs API and returns a capped excerpt of the newest matching lines. The level, text and newest-N filtering happen server side; the byte cap is applied here.

func (*Client) QueryModelLogs added in v0.2.0

func (c *Client) QueryModelLogs(ctx context.Context, name string, from, to time.Time, q string) ([]LogEntryResource, error)

QueryModelLogs calls GET /api/v1/models/{name}/logs.

func (*Client) QueryNodeMetrics added in v0.2.0

func (c *Client) QueryNodeMetrics(ctx context.Context, id, metric string, from, to time.Time, step time.Duration) (NodeMetricsResource, error)

QueryNodeMetrics calls GET /api/v1/nodes/{id}/metrics?metric=&from=&to=&step= (internal/api/node_metrics.go's handleQueryNodeMetrics): a sum of every service placed on the node for most metrics, or a real host-level reading for the rest (disk usage, OS patches available); see that handler's own doc comment for exactly which metric names fall into each group. The server, not this client, is the authority on which metric names are valid.

func (*Client) ReapOrphans added in v0.2.0

func (c *Client) ReapOrphans(ctx context.Context, dryRun bool) (OrphanReport, error)

ReapOrphans calls POST /api/v1/system/orphans/reap: one reaper pass now. dryRun reports what would go without removing it.

func (*Client) RebindSecrets added in v0.2.0

func (c *Client) RebindSecrets(ctx context.Context) (SecretRebindResult, error)

RebindSecrets calls POST /api/v1/system/secrets/rebind: re-encrypts every legacy secret value bound to its slot. Safe to repeat.

func (*Client) RecheckUpdatePreflight added in v0.2.0

func (c *Client) RecheckUpdatePreflight(ctx context.Context) (UpdatePreflight, error)

RecheckUpdatePreflight is GetUpdatePreflight bypassing the release cache.

func (*Client) ReclaimStorageOrphan added in v0.2.0

func (c *Client) ReclaimStorageOrphan(ctx context.Context, id, confirm string) (ReclaimOrphanResponse, error)

ReclaimStorageOrphan calls DELETE /api/v1/storage/orphans/{id}; confirm must equal id.

func (*Client) RecordChaosResults

func (c *Client) RecordChaosResults(ctx context.Context, results []chaos.Result) ([]string, error)

RecordChaosResults calls POST /api/v1/resilience/results and returns the stored IDs.

func (*Client) RedeployComposeStack added in v0.2.0

func (c *Client) RedeployComposeStack(ctx context.Context, name, service string) ([]string, error)

RedeployComposeStack calls POST /api/v1/apps/{name}/compose/redeploy; service "" means every service.

func (*Client) RefreshBackupProtection added in v0.2.0

func (c *Client) RefreshBackupProtection(ctx context.Context, targetIDs []string) ([]TargetProtectionResource, error)

RefreshBackupProtection calls POST /api/v1/backups/protection/refresh.

func (*Client) RefreshDatabaseCatalog

func (c *Client) RefreshDatabaseCatalog(ctx context.Context) (DBCatalogStatus, error)

RefreshDatabaseCatalog calls POST /api/v1/database-catalog/refresh.

func (*Client) RefreshDatabaseVersions

func (c *Client) RefreshDatabaseVersions(ctx context.Context, engine string) (DBVersions, error)

RefreshDatabaseVersions calls POST /api/v1/database-versions/refresh?engine=.

func (*Client) RefreshMarketplace

func (c *Client) RefreshMarketplace(ctx context.Context, sourceID string) (MarketplaceCatalog, error)

RefreshMarketplace calls POST /api/v1/plugin-marketplace/refresh. An empty sourceID refreshes every source.

func (*Client) RejectDeployApproval added in v0.2.0

func (c *Client) RejectDeployApproval(ctx context.Context, id, reason string) (DeployApprovalResource, error)

RejectDeployApproval calls POST /api/v1/deploy-approvals/{id}/reject: records the decision, the app's desired state is left untouched.

func (*Client) RejoinNodeMesh added in v0.2.0

func (c *Client) RejoinNodeMesh(ctx context.Context, id string) (RejoinMeshResponse, error)

RejoinNodeMesh calls POST /api/v1/nodes/{id}/mesh/rejoin: forces an immediate fleet-wide mesh reconcile pass instead of waiting for the next scheduled resync. See internal/api/mesh.go's own doc comment: id is only used to validate the node exists, the resync itself always covers the whole fleet.

func (*Client) ReleaseNotes

func (c *Client) ReleaseNotes(ctx context.Context, name, from, to string) (ReleaseNotesResource, error)

ReleaseNotes calls GET /api/v1/apps/{name}/deploys/release-notes: the commits between two deploys, grouped by conventional-commit type. to empty means the newest deploy that recorded a commit.

func (*Client) RemoveDatabaseRules added in v0.2.0

func (c *Client) RemoveDatabaseRules(ctx context.Context, name string) error

RemoveDatabaseRules calls DELETE /api/v1/databases/{name}/network/rules.

func (*Client) RemoveExposureRestriction added in v0.2.0

func (c *Client) RemoveExposureRestriction(ctx context.Context, protocol string, port int) error

RemoveExposureRestriction calls DELETE .../exposure/restrictions/{protocol}/{port}.

func (*Client) RemoveMarketplaceSource

func (c *Client) RemoveMarketplaceSource(ctx context.Context, id string) error

RemoveMarketplaceSource calls DELETE /api/v1/plugin-marketplace/sources/{id}.

func (*Client) RemoveOrphanedContainer added in v0.2.0

func (c *Client) RemoveOrphanedContainer(ctx context.Context, name string) error

RemoveOrphanedContainer calls POST /api/v1/system/containers/{name}/remove.

func (*Client) RemovePlugin

func (c *Client) RemovePlugin(ctx context.Context, name string) error

RemovePlugin calls DELETE /api/v1/plugins/{name}.

func (*Client) RemovePluginKey

func (c *Client) RemovePluginKey(ctx context.Context, keyID string) error

RemovePluginKey calls DELETE /api/v1/plugin-keys/{id}.

func (*Client) RemoveTeamMember added in v0.2.0

func (c *Client) RemoveTeamMember(ctx context.Context, id, userID string) error

RemoveTeamMember calls DELETE /api/v1/teams/{id}/members/{user}.

func (*Client) RenameTeam added in v0.2.0

func (c *Client) RenameTeam(ctx context.Context, id, name string) (TeamResource, error)

RenameTeam calls PATCH /api/v1/teams/{id}.

func (*Client) RenewDomainCertificate added in v0.2.0

func (c *Client) RenewDomainCertificate(ctx context.Context, name, domain string) (RenewCertificateResource, error)

RenewDomainCertificate calls POST /api/v1/apps/{name}/domains/{domain}/cert/renew: forces re-issuance of domain's automatically-managed certificate (ACME or internal; not valid for a domain with a BYO certificate uploaded, see handleRenewDomainCertificate's own doc comment).

func (*Client) RenewNodeCert

func (c *Client) RenewNodeCert(ctx context.Context, id string) error

RenewNodeCert calls POST /api/v1/nodes/{id}/cert/renew.

func (*Client) ReorderFirewallEdgeRules

func (c *Client) ReorderFirewallEdgeRules(ctx context.Context, ids []string) ([]FirewallEdgeRule, error)

ReorderFirewallEdgeRules calls POST .../firewall/edge/rules/order.

func (*Client) ReplaceSSOGroupMappings

func (c *Client) ReplaceSSOGroupMappings(ctx context.Context, req SSOGroupMappings) (SSOGroupMappings, error)

ReplaceSSOGroupMappings calls PUT /api/v1/sso/group-mappings.

func (*Client) ReplayEventWebhookDelivery

func (c *Client) ReplayEventWebhookDelivery(ctx context.Context, id string) (EventDeliveryResource, error)

ReplayEventWebhookDelivery calls POST /api/v1/event-webhook-deliveries/{id}/replay.

func (*Client) ReplayPipelineWebhookDelivery

func (c *Client) ReplayPipelineWebhookDelivery(ctx context.Context, app, name, deliveryID string) (PipelineRunResource, error)

ReplayPipelineWebhookDelivery calls POST .../webhook/deliveries/{id}/replay.

func (*Client) ReplayWebhookDelivery

func (c *Client) ReplayWebhookDelivery(ctx context.Context, name, id string) (ReplayWebhookDeliveryResult, error)

ReplayWebhookDelivery calls POST /api/v1/apps/{name}/webhook-deliveries/{id}/replay: re-runs a stored delivery's exact payload through the same processing a live webhook takes, which can trigger a real build and deploy.

func (*Client) RerunPipelineRun added in v0.2.0

func (c *Client) RerunPipelineRun(ctx context.Context, app, id string) (PipelineRunResource, error)

RerunPipelineRun calls POST .../pipeline-runs/{id}/rerun.

func (*Client) ResetBuildLimits

func (c *Client) ResetBuildLimits(ctx context.Context) (BuildLimits, error)

ResetBuildLimits calls DELETE /api/v1/build-limits.

func (*Client) ResetSetupGuide added in v0.2.0

func (c *Client) ResetSetupGuide(ctx context.Context) (SetupGuideResource, error)

ResetSetupGuide calls POST /api/v1/setup/guide/reset.

func (*Client) ResolveAIChatConfirmation added in v0.2.0

func (c *Client) ResolveAIChatConfirmation(ctx context.Context, sessionID, confirmationID string, approve bool, onEvent func(AIChatSSEEvent) error) error

ResolveAIChatConfirmation calls POST /api/v1/ai/sessions/{id}/confirmations/{confirmationID}: approves or rejects a pending mutating tool call, streaming the turn's continuation the same way SendAIChatMessage does.

func (*Client) RestartApp

func (c *Client) RestartApp(ctx context.Context, name string) (AppResource, error)

RestartApp calls POST /api/v1/apps/{name}/restart: force a running container to be recreated with no image change (internal/api/apps.go's own handleRestartApp). No request body; the response is the app's current desired state, unchanged.

func (*Client) RestartControlPlane added in v0.2.0

func (c *Client) RestartControlPlane(ctx context.Context) (SystemRestart, error)

RestartControlPlane calls POST /api/v1/system/restart.

func (*Client) RestartModel added in v0.2.0

func (c *Client) RestartModel(ctx context.Context, name string) error

RestartModel calls POST /api/v1/models/{name}/restart.

func (*Client) RestartPlugin

func (c *Client) RestartPlugin(ctx context.Context, name string) (Plugin, error)

RestartPlugin calls POST /api/v1/plugins/{name}/restart.

func (*Client) RestartProject added in v0.2.0

func (c *Client) RestartProject(ctx context.Context, id string) (ProjectRestartResponse, error)

RestartProject calls POST /api/v1/projects/{id}/restart: force every app filed under this project to have its running container recreated with no image change (internal/api/project_restart.go's own handleRestartProject). No request body.

func (*Client) RestoreArchive

func (c *Client) RestoreArchive(ctx context.Context, id string) (ArchiveRestoreResult, error)

RestoreArchive calls POST /api/v1/archives/{id}/restore.

func (*Client) RestoreIntegrity

func (c *Client) RestoreIntegrity(ctx context.Context, name string, proof *StepUpProof) (IntegrityRestore, error)

RestoreIntegrity calls POST /api/v1/system/integrity/restore. An empty name picks the newest verified snapshot.

func (*Client) RestoreVolumeTo added in v0.2.0

func (c *Client) RestoreVolumeTo(ctx context.Context, name, volume string, req VolumeRestoreToRequest) (VolumeRestoreToResponse, error)

RestoreVolumeTo calls POST /api/v1/apps/{name}/volumes/{volume}/restore-to.

func (*Client) RestrictDomainPort added in v0.2.0

func (c *Client) RestrictDomainPort(ctx context.Context, name, domain string, port int, sources []string) (DomainPortsResource, error)

RestrictDomainPort calls PUT .../ports/{port}/restrict: only sources may reach the port.

func (*Client) RetryBuild

func (c *Client) RetryBuild(ctx context.Context, app, id string) (string, error)

RetryBuild calls POST /api/v1/apps/{app}/builds/{id}/retry and returns the server's message.

func (*Client) RevealEnv added in v0.2.0

func (c *Client) RevealEnv(ctx context.Context, app, key string, proof *StepUpProof) (RevealResult, error)

RevealEnv calls POST /api/v1/apps/{name}/env/reveal.

func (*Client) RevealLoginCode added in v0.2.0

func (c *Client) RevealLoginCode(ctx context.Context, id string) (RevealedLoginCode, error)

RevealLoginCode calls POST /api/v1/auth/sign-in-requests/codes/{id}/reveal. A token must hold signin:approve.

func (*Client) RevealSecret added in v0.2.0

func (c *Client) RevealSecret(ctx context.Context, app, key string, proof *StepUpProof) (RevealResult, error)

RevealSecret calls POST /api/v1/apps/{name}/secrets/{key}/reveal.

func (*Client) RevokeAgentTokens added in v0.2.0

func (c *Client) RevokeAgentTokens(ctx context.Context) (RevokeAgentTokensResource, error)

RevokeAgentTokens calls POST /api/v1/settings/ai-control/revoke-agent-tokens.

func (*Client) RevokeAuthGateSessions added in v0.2.0

func (c *Client) RevokeAuthGateSessions(ctx context.Context, name, domain string) (AuthGateSessionsRevoked, error)

RevokeAuthGateSessions calls DELETE .../auth-gate/sessions.

func (*Client) RevokeDatabaseTemp added in v0.2.0

func (c *Client) RevokeDatabaseTemp(ctx context.Context, name, id string) error

RevokeDatabaseTemp calls DELETE /api/v1/databases/{name}/access/temp/{id}.

func (*Client) RevokeInvite

func (c *Client) RevokeInvite(ctx context.Context, id string) error

RevokeInvite calls DELETE /api/v1/invites/{id}.

func (*Client) RevokeJoinTokens

func (c *Client) RevokeJoinTokens(ctx context.Context, id string) (RevokeJoinTokensResponse, error)

RevokeJoinTokens calls DELETE /api/v1/nodes/join-tokens, or .../{id} when id is set.

func (*Client) RevokeMobileDevice added in v0.2.0

func (c *Client) RevokeMobileDevice(ctx context.Context, id string) error

RevokeMobileDevice calls DELETE /api/v1/mobile/devices/{id}.

func (*Client) RevokeModelKey added in v0.2.0

func (c *Client) RevokeModelKey(ctx context.Context, name, id string) error

RevokeModelKey calls DELETE /api/v1/models/{name}/keys/{id}.

func (*Client) RevokeNodeCert added in v0.2.0

func (c *Client) RevokeNodeCert(ctx context.Context, id string) (NodeResource, error)

RevokeNodeCert calls POST /api/v1/nodes/{id}/revoke-cert.

func (*Client) RevokeOtherSecuritySessions added in v0.2.0

func (c *Client) RevokeOtherSecuritySessions(ctx context.Context, userID string) (RevokedSessions, error)

RevokeOtherSecuritySessions calls POST /api/v1/security/sessions/revoke-others.

func (*Client) RevokeSCIMToken

func (c *Client) RevokeSCIMToken(ctx context.Context, id string) error

RevokeSCIMToken calls DELETE /api/v1/sso/scim/tokens/{id}.

func (*Client) RevokeSecuritySession added in v0.2.0

func (c *Client) RevokeSecuritySession(ctx context.Context, id, userID string) error

RevokeSecuritySession calls DELETE /api/v1/security/sessions/{id}.

func (*Client) RevokeTeamInvite added in v0.2.0

func (c *Client) RevokeTeamInvite(ctx context.Context, id, inviteID string) error

RevokeTeamInvite calls DELETE /api/v1/teams/{id}/invites/{invite}.

func (*Client) RevokeTrustedDevice added in v0.2.0

func (c *Client) RevokeTrustedDevice(ctx context.Context, id string) error

RevokeTrustedDevice calls DELETE /api/v1/auth/trusted-devices/{id}.

func (*Client) RollbackAppImport added in v0.2.0

func (c *Client) RollbackAppImport(ctx context.Context, id string, items []string) (AppImportView, error)

RollbackAppImport calls POST .../sessions/{id}/rollback.

func (*Client) RollbackAppImportCutover added in v0.2.0

func (c *Client) RollbackAppImportCutover(ctx context.Context, session, item, run string) (ImportCutoverRun, error)

RollbackAppImportCutover calls POST .../cutover/runs/{run}/rollback.

func (*Client) RollbackComposeStack added in v0.2.0

func (c *Client) RollbackComposeStack(ctx context.Context, name string, revision int) (ComposeRollbackResult, error)

RollbackComposeStack calls POST /api/v1/apps/{name}/compose/rollback; revision 0 means the previous one.

func (*Client) RollbackMajorUpgrade added in v0.2.0

func (c *Client) RollbackMajorUpgrade(ctx context.Context, name, id string) (MajorUpgradeResource, error)

RollbackMajorUpgrade calls POST .../major-upgrades/{id}/rollback.

func (*Client) RollbackTakeover

func (c *Client) RollbackTakeover(ctx context.Context, id, reason string) (TakeoverStartResult, error)

RollbackTakeover calls POST /api/v1/migration/takeover/runs/{run}/rollback.

func (*Client) RollbackToDeploy added in v0.2.0

func (c *Client) RollbackToDeploy(ctx context.Context, appName, deployID string, req RollbackToRequest) (DeployTriggerResult, error)

RollbackToDeploy calls POST /api/v1/apps/{name}/deploys/{deployId}/rollback: redeploys the content that past deploy recorded, pinned by digest.

func (*Client) RotateDEK

func (c *Client) RotateDEK(ctx context.Context, app string, proof *StepUpProof) (RotateDEKResult, error)

RotateDEK calls POST /api/v1/system/encryption-keys/rotate for one app, or every app when app is empty. It needs the token owner's step-up proof.

func (*Client) RotateDatabasePassword

func (c *Client) RotateDatabasePassword(ctx context.Context, name string, proof *StepUpProof) (DatabasePasswordRotation, error)

RotateDatabasePassword calls POST /api/v1/databases/{name}/password-rotation. It needs the token owner's step-up proof.

func (*Client) RotateDatabaseUser added in v0.2.0

func (c *Client) RotateDatabaseUser(ctx context.Context, name, role string) (DatabaseCredential, error)

RotateDatabaseUser calls POST /api/v1/databases/{name}/users/{role}/rotate.

func (*Client) RotateEventWebhookSecret

func (c *Client) RotateEventWebhookSecret(ctx context.Context, id string) (EventWebhookResource, error)

RotateEventWebhookSecret calls POST /api/v1/event-webhooks/{id}/rotate-secret.

func (*Client) RotateGitSourceWebhookSecret added in v0.2.0

func (c *Client) RotateGitSourceWebhookSecret(ctx context.Context, name string) (GitSourceResource, error)

RotateGitSourceWebhookSecret calls POST /api/v1/apps/{name}/git-source/rotate-webhook-secret: mints a fresh webhook secret without touching repo_url/branch/build config. The returned resource's WebhookSecret is populated this one time, the caller's only chance to see it.

func (*Client) RotateImageUpdateWebhook added in v0.2.0

func (c *Client) RotateImageUpdateWebhook(ctx context.Context, appName string) (ImageUpdateWebhookResource, error)

RotateImageUpdateWebhook calls POST /api/v1/apps/{name}/auto-update/webhook.

func (*Client) RotateMasterKey

func (c *Client) RotateMasterKey(ctx context.Context, newMasterKey string) (RotateMasterKeyResult, error)

RotateMasterKey calls POST /api/v1/system/master-key/rotate: re-wraps every stored DEK from the control plane's currently active master key to newMasterKey, live, in one atomic step.

func (*Client) RotateModelAPIKey added in v0.2.0

func (c *Client) RotateModelAPIKey(ctx context.Context, name string) (ModelAPIKeyResource, error)

RotateModelAPIKey calls POST /api/v1/models/{name}/api-key.

func (*Client) RotateModelKey added in v0.2.0

func (c *Client) RotateModelKey(ctx context.Context, name, id string, grace *time.Duration) (CreatedModelKeyResource, error)

RotateModelKey calls POST /api/v1/models/{name}/keys/{id}/rotate. A nil grace uses the server default; zero retires the old key at once.

func (*Client) RotateNodeMeshKey added in v0.2.0

func (c *Client) RotateNodeMeshKey(ctx context.Context, id string) (RotateKeyResponse, error)

RotateNodeMeshKey calls POST /api/v1/nodes/{id}/mesh/rotate-key: generates a fresh WireGuard keypair for id and makes it live immediately. Works for any node currently connected to the target control plane, local or remote (internal/api/mesh.go's own doc comment).

func (*Client) RotatePipelineOIDCKey added in v0.2.0

func (c *Client) RotatePipelineOIDCKey(ctx context.Context, retireAfter string) (PipelineOIDCRotation, error)

RotatePipelineOIDCKey calls POST /api/v1/pipelines/oidc/rotate-key. retireAfter is a Go duration string (e.g. "1h"); empty uses the control plane's default grace period.

func (*Client) RotatePipelineWebhook

func (c *Client) RotatePipelineWebhook(ctx context.Context, app, name string) (PipelineWebhook, error)

RotatePipelineWebhook calls POST .../pipelines/{name}/webhook/rotate.

func (*Client) RotateSCIMToken

func (c *Client) RotateSCIMToken(ctx context.Context, id string) (SCIMTokenCreated, error)

RotateSCIMToken calls POST /api/v1/sso/scim/tokens/{id}/rotate.

func (*Client) RotateSecretNow

func (c *Client) RotateSecretNow(ctx context.Context, name, key string) (SecretRotationPolicyResource, error)

RotateSecretNow calls POST .../secrets/{key}/rotation/rotate.

func (*Client) RunBucketLifecycle

func (c *Client) RunBucketLifecycle(ctx context.Context, id string) (BucketSweepResult, error)

RunBucketLifecycle calls POST /api/v1/storage/buckets/{id}/lifecycle/run.

func (*Client) RunControlPlaneDrill added in v0.2.0

func (c *Client) RunControlPlaneDrill(ctx context.Context) error

RunControlPlaneDrill calls POST /api/v1/system/control-plane-dr/drill.

func (*Client) RunControlPlaneOffboxBackup added in v0.2.0

func (c *Client) RunControlPlaneOffboxBackup(ctx context.Context) error

RunControlPlaneOffboxBackup calls POST /api/v1/system/control-plane-dr/run. The backup runs in the background; poll GetControlPlaneDR for the result.

func (*Client) RunGoLive added in v0.2.0

func (c *Client) RunGoLive(ctx context.Context, app, domain string, req GoLiveRequest) (GoLiveResult, error)

RunGoLive calls POST .../domains/{domain}/go-live.

func (*Client) RunImageGC

func (c *Client) RunImageGC(ctx context.Context, req ImageGCRequest) (ImageGCResource, error)

RunImageGC calls POST /api/v1/images/gc.

func (*Client) RunJanitor

func (c *Client) RunJanitor(ctx context.Context, dryRun, force bool) (JanitorReport, error)

RunJanitor calls POST /api/v1/system/janitor/run. dryRun previews; force false waits for disk pressure before the size-driven stages run.

func (*Client) RunJob added in v0.2.0

func (c *Client) RunJob(ctx context.Context, app, id string) (ScheduledTaskResource, error)

RunJob calls POST .../jobs/{id}/run and returns the started run's ID in the response's RunID.

func (*Client) RunPipelineSync added in v0.2.0

func (c *Client) RunPipelineSync(ctx context.Context, app string) (PipelineSyncResult, error)

RunPipelineSync calls POST /api/v1/apps/{app}/pipeline-sync.

func (*Client) RunScheduledTask

func (c *Client) RunScheduledTask(ctx context.Context, name, id string) (ScheduledTaskResource, error)

RunScheduledTask calls POST /api/v1/apps/{name}/scheduled-tasks/{id}/run: triggers an immediate run and returns as soon as it starts, not once the command finishes.

func (*Client) RunSecretScan

func (c *Client) RunSecretScan(ctx context.Context, name string) (SecretScanEnvResult, error)

RunSecretScan calls POST /api/v1/apps/{name}/secret-scan/run.

func (*Client) SAMLSPMetadata

func (c *Client) SAMLSPMetadata(ctx context.Context, id string) ([]byte, error)

SAMLSPMetadata fetches the public SP metadata XML for a connection.

func (*Client) SSHHostKeys

func (c *Client) SSHHostKeys(ctx context.Context, req AppImportSSHProbe) (AppImportSSHResult, error)

SSHHostKeys calls POST /api/v1/migration/apps/ssh/host-keys.

func (*Client) SaveAppAsTemplate added in v0.2.0

func (c *Client) SaveAppAsTemplate(ctx context.Context, name string, req SaveAppAsTemplateRequest) (CustomTemplateDetail, error)

SaveAppAsTemplate calls POST /api/v1/apps/{name}/save-as-template (internal/api/service_templates_custom.go): derives a compose.yaml from name's current desired state and saves it as a reusable, operator-defined template. No secret, database, or vault-backed env value is ever captured, only the key name (see compose. FromDesiredServices' own doc comment); result.RequiredEnvKeys lists exactly which keys will need a real value before this template can deploy.

func (*Client) SaveConsoleView

func (c *Client) SaveConsoleView(ctx context.Context, name, query string) (ConsoleView, error)

SaveConsoleView calls POST /api/v1/resources/views.

func (*Client) SaveSearch

func (c *Client) SaveSearch(ctx context.Context, name, query string) (SavedSearch, error)

SaveSearch calls POST /api/v1/search/saved.

func (*Client) ScanAppEnv

func (c *Client) ScanAppEnv(ctx context.Context, name string, vars map[string]string) (EnvScanResponse, error)

ScanAppEnv calls POST /api/v1/apps/{name}/env/scan.

func (*Client) ScanDeployment added in v0.2.0

func (c *Client) ScanDeployment(ctx context.Context, name, id string) (VulnReport, error)

ScanDeployment calls POST /api/v1/apps/{name}/deployments/{id}/scan.

func (*Client) Search

func (c *Client) Search(ctx context.Context, q, kind string, limit int, cursor string) (SearchResponse, error)

Search calls GET /api/v1/search.

func (*Client) SearchAppLogs added in v0.2.0

func (c *Client) SearchAppLogs(ctx context.Context, name string, s LogSearch) (LogSearchResource, error)

SearchAppLogs calls GET /api/v1/apps/{name}/logs with the filter params.

func (*Client) SelectMigrationItems added in v0.2.0

func (c *Client) SelectMigrationItems(ctx context.Context, id string, items []HubSelection) (HubSession, error)

SelectMigrationItems updates the selection and names of a session.

func (*Client) SendAIChatMessage added in v0.2.0

func (c *Client) SendAIChatMessage(ctx context.Context, sessionID, content string, onEvent func(AIChatSSEEvent) error) error

SendAIChatMessage calls POST /api/v1/ai/sessions/{id}/messages: sends content as a new user message and streams the assistant's turn, calling onEvent for every SSE event in arrival order (see AIChatSSEEvent's own doc comment for the four shapes). Returns once the server sends "done" or the connection ends, matching streamLogEvents' own contract.

func (*Client) SetAIChoice

SetAIChoice calls PUT /api/v1/settings/ai-assistant.

func (*Client) SetAIProvider

func (c *Client) SetAIProvider(ctx context.Context, id string, req SetAIProviderRequest) (AIProviderResource, error)

SetAIProvider calls PUT /api/v1/settings/ai-assistant/providers/{id}.

func (*Client) SetAdvisorFindingState added in v0.2.0

func (c *Client) SetAdvisorFindingState(ctx context.Context, id, verb, duration string) (AdvisorFinding, error)

SetAdvisorFindingState dismisses, snoozes (for duration) or restores a finding.

func (*Client) SetAppAutoscale

func (c *Client) SetAppAutoscale(ctx context.Context, app string, u AppAutoscaleUpdate) (AppAutoscale, error)

SetAppAutoscale calls PUT /api/v1/apps/{name}/autoscale.

func (*Client) SetAppBranchEnv added in v0.2.0

func (c *Client) SetAppBranchEnv(ctx context.Context, name, branchPattern, key, value string, secret bool) (AppBranchEnvOverride, error)

SetAppBranchEnv calls POST /api/v1/apps/{name}/branch-env: declares (or, for the same branchPattern+key, replaces) one env var's value for name, applied only when a preview built from a matching branch is deployed.

func (*Client) SetAppBudget

func (c *Client) SetAppBudget(ctx context.Context, app string, u AppBudgetUpdate) (AppBudget, error)

SetAppBudget calls PUT /api/v1/apps/{name}/budget.

func (*Client) SetAppDatabaseAttachment

func (c *Client) SetAppDatabaseAttachment(ctx context.Context, name string, req SetAppDatabaseRequest) (AppDatabaseResource, error)

SetAppDatabaseAttachment calls PUT /api/v1/apps/{name}/database: attaches an existing managed database to name as a real, persisted connection env var source.

func (*Client) SetAppEgressPolicy added in v0.2.0

func (c *Client) SetAppEgressPolicy(ctx context.Context, name string, req SetAppEgressPolicyRequest) (AppEgressPolicyResource, error)

SetAppEgressPolicy calls PUT /api/v1/apps/{name}/egress-policy: sets (or replaces) name's outbound network allowlist.

func (*Client) SetAppEnvironment

func (c *Client) SetAppEnvironment(ctx context.Context, name, environmentID string) (AppResource, error)

SetAppEnvironment calls PUT /api/v1/apps/{name}/environment. An empty environmentID clears the assignment. Returns the updated app.

func (*Client) SetAppExposure

func (c *Client) SetAppExposure(ctx context.Context, name string, req AppExposureRequest) (AppExposureResource, error)

SetAppExposure calls PUT /api/v1/apps/{name}/exposure.

func (*Client) SetAppGitHubActions

func (c *Client) SetAppGitHubActions(ctx context.Context, name string, req AppGitHubActionsResource) (AppGitHubActionsResource, error)

SetAppGitHubActions calls PUT /api/v1/apps/{name}/github-actions.

func (*Client) SetAppHealth added in v0.2.0

func (c *Client) SetAppHealth(ctx context.Context, name string, health ServiceHealth) (AppHealthResource, error)

SetAppHealth calls PUT /api/v1/apps/{name}/health, replacing name's readiness and liveness config as a whole.

func (*Client) SetAppIngressLimits

func (c *Client) SetAppIngressLimits(ctx context.Context, app string, maxBodyBytes *int64) (AppIngressLimits, error)

SetAppIngressLimits calls PUT /api/v1/apps/{name}/ingress-limits; a nil cap clears the override.

func (*Client) SetAppMaintenance

func (c *Client) SetAppMaintenance(ctx context.Context, name string, req SetDomainMaintenanceRequest) (AppMaintenanceResource, error)

SetAppMaintenance calls PUT /api/v1/apps/{name}/maintenance: maintenance on every domain, all or none.

func (*Client) SetAppNode added in v0.2.0

func (c *Client) SetAppNode(ctx context.Context, name, nodeID string) (AppResource, error)

SetAppNode calls PUT /api/v1/apps/{name}/node: an instant placement change (internal/api's handleSetAppNode), no volumes involved. An empty nodeID moves the app back to the control plane's own local node. Returns the updated app. See MoveAppWithVolumes for the same move, taking the app's named volumes along with it.

func (*Client) SetAppPreviewEnvOverride added in v0.2.0

func (c *Client) SetAppPreviewEnvOverride(ctx context.Context, name, key, value string) (AppPreviewEnvOverride, error)

SetAppPreviewEnvOverride calls PUT /api/v1/apps/{name}/preview-env/{key}: declares (or replaces) one env var's preview-specific value on an app that already exists, applied only the next time a preview environment is created from it.

func (*Client) SetAppProject

func (c *Client) SetAppProject(ctx context.Context, name, projectID string) (AppResource, error)

SetAppProject calls PUT /api/v1/apps/{name}/project. An empty projectID clears the assignment. Returns the updated app.

func (*Client) SetAppSchedule added in v0.2.0

func (c *Client) SetAppSchedule(ctx context.Context, name string, req SetAppScheduleRequest) (AppScheduleResource, error)

SetAppSchedule calls PUT /api/v1/apps/{name}/schedule: sets or replaces the app's recurring redeploy schedule.

func (*Client) SetAppSleep added in v0.2.0

func (c *Client) SetAppSleep(ctx context.Context, appName string, idleMinutes int) (AppSleepResource, error)

SetAppSleep calls PUT /api/v1/apps/{name}/sleep; 0 minutes turns sleeping off.

func (*Client) SetAppSleepHold added in v0.2.0

func (c *Client) SetAppSleepHold(ctx context.Context, appName string, idleMinutes int, hold bool) (AppSleepResource, error)

SetAppSleepHold calls PUT /api/v1/apps/{name}/sleep with function mode on or off.

func (*Client) SetAppStorage added in v0.2.0

func (c *Client) SetAppStorage(ctx context.Context, name, storageTargetID string) (AppStorageResource, error)

SetAppStorage calls PUT /api/v1/apps/{name}/storage: attaches an already-connected backup target to name as its object-storage credential source.

func (*Client) SetAppVaultEnv added in v0.2.0

func (c *Client) SetAppVaultEnv(ctx context.Context, name, key string, req AppVaultEnvRef) (AppVaultEnvRef, error)

SetAppVaultEnv calls PUT /api/v1/apps/{name}/vault-env/{key}: declares (or replaces) one env var as resolving live from the platform's configured external Vault instance, for an app that already exists.

func (*Client) SetAppVolumes added in v0.2.0

func (c *Client) SetAppVolumes(ctx context.Context, name string, req SetAppVolumesRequest) (SetAppVolumesResponse, error)

SetAppVolumes calls PUT /api/v1/apps/{name}/volumes: attaches (or removes) a named Docker volume outside a redeploy, replacing name's whole desired volume list with req.Volumes.

func (*Client) SetArchivePolicy

func (c *Client) SetArchivePolicy(ctx context.Context, p ArchivePolicy) (ArchivePolicy, error)

SetArchivePolicy calls PUT /api/v1/archives/policy.

func (*Client) SetAutoRollback added in v0.2.0

func (c *Client) SetAutoRollback(ctx context.Context, appName string, enabled bool) (AutoRollbackSettingResource, error)

SetAutoRollback calls PUT /api/v1/apps/{name}/auto-rollback, opting appName into (or out of) automatic rollback on a crashloop. Off by default.

func (*Client) SetAutoRollbackSLOBurn added in v0.2.0

func (c *Client) SetAutoRollbackSLOBurn(ctx context.Context, appName, mode string) (AutoRollbackSLOBurnSettingResource, error)

SetAutoRollbackSLOBurn calls PUT /api/v1/apps/{name}/auto-rollback-slo-burn, setting appName's mode for automatic rollback on an SLO burn-rate alert. mode is one of "off", "auto", "dry_run", "pause_for_human"; "off" by default.

func (*Client) SetBackupSchedule

func (c *Client) SetBackupSchedule(ctx context.Context, name string, req SetBackupScheduleRequest) (BackupScheduleResource, error)

SetBackupSchedule calls PUT /api/v1/databases/{name}/backup-schedule: configures a recurring backup, replacing any previously configured schedule for name.

func (*Client) SetBetaFeature added in v0.2.0

func (c *Client) SetBetaFeature(ctx context.Context, feature string, enabled bool) (BetaFeature, error)

SetBetaFeature calls PUT /api/v1/settings/beta-features/{feature}.

func (*Client) SetBuildCache added in v0.2.0

func (c *Client) SetBuildCache(ctx context.Context, req BuildCacheRequest) (BuildCacheSetting, error)

SetBuildCache calls PUT /api/v1/build-cache.

func (*Client) SetBuildLimits

func (c *Client) SetBuildLimits(ctx context.Context, req BuildLimitsRequest) (BuildLimits, error)

SetBuildLimits calls PUT /api/v1/build-limits.

func (*Client) SetCanaryWeight added in v0.2.0

func (c *Client) SetCanaryWeight(ctx context.Context, appName string, weight int) (CanaryResource, error)

SetCanaryWeight calls PUT /api/v1/apps/{name}/canary; 0 pauses the canary.

func (*Client) SetCancelSuperseded added in v0.2.0

func (c *Client) SetCancelSuperseded(ctx context.Context, appName string, enabled bool) (CancelSupersededResource, error)

SetCancelSuperseded calls PUT /api/v1/apps/{name}/cancel-superseded.

func (*Client) SetChannelQuietHours

func (c *Client) SetChannelQuietHours(ctx context.Context, id string, q QuietHoursResource) (QuietHoursResource, error)

SetChannelQuietHours calls PUT /api/v1/notification-channels/{id}/quiet-hours.

func (*Client) SetCloudflareDNS

SetCloudflareDNS calls PUT /api/v1/settings/cloudflare-dns.

func (*Client) SetCloudflareTunnel

SetCloudflareTunnel calls PUT /api/v1/settings/cloudflare-tunnel.

func (*Client) SetDNSProviderPlugin

func (c *Client) SetDNSProviderPlugin(ctx context.Context, name string) (DNSProviderPlugin, error)

SetDNSProviderPlugin calls PUT /api/v1/settings/dns-provider-plugin. An empty name selects the built-in client.

func (*Client) SetDatabaseCatalogRemote

func (c *Client) SetDatabaseCatalogRemote(ctx context.Context, enabled bool) (DBCatalogStatus, error)

SetDatabaseCatalogRemote calls PUT /api/v1/settings/database-catalog.

func (*Client) SetDatabaseNode added in v0.2.0

func (c *Client) SetDatabaseNode(ctx context.Context, name, nodeID string) (DatabaseResource, error)

SetDatabaseNode calls PUT /api/v1/databases/{name}/node (internal/api/databases.go's handleSetDatabaseNode), the database counterpart to SetAppNode: an empty nodeID moves the database back to this control plane's own local node. Reuses SetAppNodeRequest, an identical {node_id} body shape on both routes.

func (*Client) SetDatabasePasswordRotationInterval

func (c *Client) SetDatabasePasswordRotationInterval(ctx context.Context, name string, days int) (DatabasePasswordRotation, error)

SetDatabasePasswordRotationInterval calls PUT .../password-rotation/policy; 0 turns the schedule off.

func (*Client) SetDatabaseProject

func (c *Client) SetDatabaseProject(ctx context.Context, name, projectID string) (DatabaseResource, error)

SetDatabaseProject calls PUT /api/v1/databases/{name}/project. An empty projectID clears the assignment. Returns the updated database.

func (*Client) SetDatabasePublicAccess

func (c *Client) SetDatabasePublicAccess(ctx context.Context, name string, port int, bindAddress string) (DatabasePublicAccessResource, error)

SetDatabasePublicAccess calls PUT /api/v1/databases/{name}/public-access: exposes name on the host at port (0 requests auto-assignment) bound to bindAddress ("" requests the server's own default, "private").

func (*Client) SetDatabaseRequireTLS added in v0.2.0

func (c *Client) SetDatabaseRequireTLS(ctx context.Context, name string, require bool) error

SetDatabaseRequireTLS calls PUT /api/v1/databases/{name}/network/tls.

func (*Client) SetDatabaseResources

func (c *Client) SetDatabaseResources(ctx context.Context, name string, resources *ServiceResources) (DatabaseResource, error)

SetDatabaseResources calls PUT /api/v1/databases/{name}/resources: applies memory/CPU limits to name, replacing whatever was set before.

func (*Client) SetDatabaseScope added in v0.2.0

func (c *Client) SetDatabaseScope(ctx context.Context, name, scope string, dryRun, confirm bool) (DatabaseScopeResult, error)

SetDatabaseScope calls PUT /api/v1/databases/{name}/network/scope. With dryRun nothing changes. A scope that would cut apps off is not applied without confirm; the result then has ConfirmRequired set.

func (*Client) SetDatabaseUpgradePolicy added in v0.2.0

func (c *Client) SetDatabaseUpgradePolicy(ctx context.Context, name string, p DBUpgradePolicy) (DBUpgradePolicy, error)

SetDatabaseUpgradePolicy calls PUT /api/v1/databases/{name}/upgrade-policy.

func (*Client) SetDatabaseUserLogin added in v0.2.0

func (c *Client) SetDatabaseUserLogin(ctx context.Context, name, role string, login bool) error

SetDatabaseUserLogin calls POST .../users/{role}/disable or /enable.

func (*Client) SetDatabaseVersion added in v0.2.0

func (c *Client) SetDatabaseVersion(ctx context.Context, name, version string) (DatabaseResource, error)

SetDatabaseVersion calls PUT /api/v1/databases/{name}/version: a minor or patch image change over the same data volume.

func (*Client) SetDeployFreeze added in v0.2.0

func (c *Client) SetDeployFreeze(ctx context.Context, name string, windows []FreezeWindowResource) (DeployFreezeResource, error)

SetDeployFreeze calls PUT /api/v1/apps/{name}/deploy-freeze, replacing the app's windows; an empty list clears them.

func (*Client) SetDeployPolicy

func (c *Client) SetDeployPolicy(ctx context.Context, scope, id string, rules map[string]DeployPolicyRule) (DeployPolicy, error)

SetDeployPolicy calls PUT /api/v1/deploy-policies/{scope}/{id}.

func (*Client) SetDeploySafety added in v0.2.0

func (c *Client) SetDeploySafety(ctx context.Context, appName string, overrides DeploySafetyOverrides) (DeploySafetyResource, error)

SetDeploySafety calls PUT /api/v1/apps/{name}/deploy-safety, replacing every override.

func (*Client) SetDomainAliases added in v0.2.0

func (c *Client) SetDomainAliases(ctx context.Context, name, domain string, req AliasesRequest) (DomainRedirectsResource, error)

SetDomainAliases calls PUT .../domains/{domain}/redirects/aliases.

func (*Client) SetDomainAuthGate added in v0.2.0

func (c *Client) SetDomainAuthGate(ctx context.Context, name, domain string, req SetDomainAuthGateRequest) (DomainAuthGateResource, error)

SetDomainAuthGate calls PUT /api/v1/apps/{name}/domains/{domain}/auth-gate.

func (*Client) SetDomainBasicAuth

func (c *Client) SetDomainBasicAuth(ctx context.Context, name, domain string, req SetDomainBasicAuthRequest) (DomainBasicAuthResource, error)

SetDomainBasicAuth calls PUT /api/v1/apps/{name}/domains/{domain}/auth: enables HTTP Basic Auth on domain, enforced by Caddy on the next ingress reconcile pass.

func (*Client) SetDomainCache added in v0.2.0

func (c *Client) SetDomainCache(ctx context.Context, name, domain string, spec trafficpolicy.Cache) (CachePolicyResource, error)

SetDomainCache calls PUT .../domains/{domain}/cache.

func (*Client) SetDomainCanonical added in v0.2.0

func (c *Client) SetDomainCanonical(ctx context.Context, name, domain string, req CanonicalRequest) (DomainRedirectsResource, error)

SetDomainCanonical calls POST .../domains/{domain}/redirects/canonical.

func (*Client) SetDomainErrorPage added in v0.2.0

func (c *Client) SetDomainErrorPage(ctx context.Context, name, domain string, req SetDomainErrorPageRequest) (DomainErrorPagesResource, error)

SetDomainErrorPage calls PUT /api/v1/apps/{name}/domains/{domain}/error-pages: upserts one status-code-to-body mapping for domain, enforced by Caddy on the next ingress reconcile pass.

func (*Client) SetDomainForwarders added in v0.2.0

func (c *Client) SetDomainForwarders(ctx context.Context, name, domain string, spec trafficpolicy.Forwarders) (ForwardersPolicyResource, error)

SetDomainForwarders calls PUT .../domains/{domain}/forwarders.

func (*Client) SetDomainGeo added in v0.2.0

func (c *Client) SetDomainGeo(ctx context.Context, name, domain string, spec trafficpolicy.Geo) (GeoPolicyResource, error)

SetDomainGeo calls PUT .../domains/{domain}/geo.

func (*Client) SetDomainHeaders added in v0.2.0

func (c *Client) SetDomainHeaders(ctx context.Context, name, domain string, spec trafficpolicy.Headers) (HeadersPolicyResource, error)

SetDomainHeaders calls PUT .../domains/{domain}/headers.

func (*Client) SetDomainMaintenance

func (c *Client) SetDomainMaintenance(ctx context.Context, name, domain string) (DomainMaintenanceResource, error)

SetDomainMaintenance calls PUT /api/v1/apps/{name}/domains/{domain}/maintenance: enables maintenance mode on domain, enforced by Caddy on the next ingress reconcile pass.

func (*Client) SetDomainMaintenanceOptions

func (c *Client) SetDomainMaintenanceOptions(ctx context.Context, name, domain string, req SetDomainMaintenanceRequest) (DomainMaintenanceResource, error)

SetDomainMaintenanceOptions calls PUT /api/v1/apps/{name}/domains/{domain}/maintenance with page copy, an end time and bypass rules.

func (*Client) SetDomainRedirect added in v0.2.0

func (c *Client) SetDomainRedirect(ctx context.Context, name, domain string, req SetDomainRedirectRequest) (DomainRedirectResource, error)

SetDomainRedirect calls PUT /api/v1/apps/{name}/domains/{domain}/redirect: configures domain to redirect to a target URL, enforced by Caddy on the next ingress reconcile pass.

func (*Client) SetDomainRedirectSettings added in v0.2.0

func (c *Client) SetDomainRedirectSettings(ctx context.Context, name, domain string, s trafficpolicy.Redirects) (DomainRedirectsResource, error)

SetDomainRedirectSettings calls PUT .../domains/{domain}/redirects.

func (*Client) SetDomainSearchVisibility added in v0.2.0

func (c *Client) SetDomainSearchVisibility(ctx context.Context, name, domain string, hidden bool) (DomainSearchVisibilityResource, error)

SetDomainSearchVisibility calls PUT .../domains/{domain}/search-visibility.

func (*Client) SetDomainShield

func (c *Client) SetDomainShield(ctx context.Context, name, domain string, spec trafficpolicy.Shield) (ShieldPolicyResource, error)

SetDomainShield calls PUT .../domains/{domain}/shield.

func (*Client) SetDomainTLSCert

func (c *Client) SetDomainTLSCert(ctx context.Context, name, domain string, req SetDomainTLSCertRequest) (DomainTLSCertResource, error)

SetDomainTLSCert calls PUT /api/v1/apps/{name}/domains/{domain}/tls-cert: uploads a BYO certificate for domain, used by Caddy in place of automatic ACME/ internal issuance on the next ingress reconcile pass.

func (*Client) SetDomainWAF added in v0.2.0

func (c *Client) SetDomainWAF(ctx context.Context, name, domain string, req SetDomainWAFRequest) (DomainWAFResource, error)

SetDomainWAF calls PUT /api/v1/apps/{name}/domains/{domain}/waf: sets WAF and/or rate-limit configuration for domain, enforced by Caddy on the next ingress reconcile pass.

func (*Client) SetEnvironmentEnv

func (c *Client) SetEnvironmentEnv(ctx context.Context, id string, vars map[string]string) (map[string]string, error)

SetEnvironmentEnv calls PUT /api/v1/environments/{id}/env: a full replace, mirroring PUT /apps/{name}'s own env field semantics.

func (*Client) SetErrorStatus

func (c *Client) SetErrorStatus(ctx context.Context, app, fingerprint, status string) (ErrorIssueDetail, error)

SetErrorStatus calls PATCH /api/v1/apps/{name}/errors/{fingerprint}.

func (*Client) SetExecAccess added in v0.2.0

func (c *Client) SetExecAccess(ctx context.Context, appName string, enabled bool) (ExecAccessResource, error)

SetExecAccess calls PUT /api/v1/apps/{name}/exec-access, opting appName into (or out of) shell/exec access.

func (*Client) SetFirewallEdgeSettings

func (c *Client) SetFirewallEdgeSettings(ctx context.Context, s edgefw.Settings) (FirewallEdgeSettings, error)

SetFirewallEdgeSettings calls PUT .../firewall/edge/settings.

func (*Client) SetFunctionRoute

func (c *Client) SetFunctionRoute(ctx context.Context, name string, r FunctionRoute) error

SetFunctionRoute calls PUT /api/v1/functions/{name}/route: serve the function at domain/path.

func (*Client) SetGitDeploySettings added in v0.2.0

func (c *Client) SetGitDeploySettings(ctx context.Context, name string, req SetGitDeploySettingsRequest) (GitDeploySettings, error)

SetGitDeploySettings calls PUT /api/v1/apps/{name}/git-source/deploy-settings.

func (*Client) SetGitRemoteBranch

func (c *Client) SetGitRemoteBranch(ctx context.Context, name, branch string) (GitRemote, error)

SetGitRemoteBranch calls PUT /api/v1/apps/{name}/git-remote.

func (*Client) SetGitSource

func (c *Client) SetGitSource(ctx context.Context, name string, req SetGitSourceRequest) (GitSourceResource, error)

SetGitSource calls PUT /api/v1/apps/{name}/git-source: connects a repo (creating a new webhook secret) the first time it's called for an app, or edits the connection on every call after.

func (*Client) SetGitSourceBuild added in v0.2.0

func (c *Client) SetGitSourceBuild(ctx context.Context, name string, req SetGitSourceBuildRequest) (GitSourceResource, error)

SetGitSourceBuild calls PUT /api/v1/apps/{name}/git-source/build.

func (*Client) SetGlobalDeployFreeze added in v0.2.0

func (c *Client) SetGlobalDeployFreeze(ctx context.Context, windows []FreezeWindowResource) (DeployFreezeResource, error)

SetGlobalDeployFreeze calls PUT /api/v1/settings/deploy-freeze, replacing the fleet-wide windows; an empty list clears them.

func (*Client) SetHSTS

func (c *Client) SetHSTS(ctx context.Context, enabled bool) (HSTSStatus, error)

SetHSTS calls PUT /api/v1/security/hsts (root); enabling is refused unless the probe passes.

func (*Client) SetHostFirewall added in v0.2.0

func (c *Client) SetHostFirewall(ctx context.Context, enable bool, dryRun bool) (HostFirewallResource, error)

SetHostFirewall calls POST /api/v1/firewall/host/enable or /disable.

func (*Client) SetImageAutoUpdate added in v0.2.0

func (c *Client) SetImageAutoUpdate(ctx context.Context, appName string, enabled bool) (ImageAutoUpdateResource, error)

SetImageAutoUpdate calls PUT /api/v1/apps/{name}/auto-update.

func (*Client) SetInboxPrefs

func (c *Client) SetInboxPrefs(ctx context.Context, p InboxPrefs) (InboxPrefs, error)

SetInboxPrefs calls PUT /api/v1/inbox/preferences.

func (*Client) SetJobEnabled added in v0.2.0

func (c *Client) SetJobEnabled(ctx context.Context, app, id string, enabled bool) (ScheduledTaskResource, error)

SetJobEnabled calls POST .../jobs/{id}/enable or /disable.

func (*Client) SetLoadBalancer added in v0.2.0

func (c *Client) SetLoadBalancer(ctx context.Context, name string, cfg LoadBalancerConfig) (LoadBalancerResource, error)

SetLoadBalancer calls PUT /api/v1/apps/{name}/loadbalancer.

func (*Client) SetLoadBalancerUpstreamState added in v0.2.0

func (c *Client) SetLoadBalancerUpstreamState(ctx context.Context, name, id, state string) (LoadBalancerUpstreamStatus, error)

SetLoadBalancerUpstreamState calls PUT /api/v1/apps/{name}/loadbalancer/upstreams/{id}.

func (*Client) SetLogArchivePolicy added in v0.2.0

func (c *Client) SetLogArchivePolicy(ctx context.Context, req LogArchivePolicyRequest) (LogArchivePolicy, error)

SetLogArchivePolicy calls PUT /api/v1/log-archive/policy.

func (*Client) SetLogBudget

func (c *Client) SetLogBudget(ctx context.Context, app string, maxMB int64) (LogBudget, error)

SetLogBudget calls PUT /api/v1/apps/{name}/log-budget.

func (*Client) SetLogDrain

func (c *Client) SetLogDrain(ctx context.Context, name string, req SetLogDrainRequest) (LogDrainResource, error)

SetLogDrain calls PUT /api/v1/apps/{name}/log-drain.

func (*Client) SetLogPipeline

func (c *Client) SetLogPipeline(ctx context.Context, app string, rules []LogPipelineRule) (LogPipeline, error)

SetLogPipeline calls PUT /api/v1/apps/{name}/log-pipeline.

func (*Client) SetModelEndpointCredential

func (c *Client) SetModelEndpointCredential(ctx context.Context, name, credential string) (ModelDetail, error)

SetModelEndpointCredential calls PUT /api/v1/models/{name}/endpoint/credential. An empty credential removes it.

func (*Client) SetModelEndpointRouting

func (c *Client) SetModelEndpointRouting(ctx context.Context, name, fallback, fallbackRef string, budgetMS int64) (ModelDetail, error)

SetModelEndpointRouting calls PUT /api/v1/models/{name}/endpoint/routing. An empty fallback turns the policy off.

func (*Client) SetModelHFToken added in v0.2.0

func (c *Client) SetModelHFToken(ctx context.Context, name, token string) error

SetModelHFToken calls PUT /api/v1/models/{name}/hf-token.

func (*Client) SetModelResidency added in v0.2.0

func (c *Client) SetModelResidency(ctx context.Context, name, residency string, idleTTLSeconds int) error

SetModelResidency calls PUT /api/v1/models/{name}/residency.

func (*Client) SetModelSwapGroup added in v0.2.0

func (c *Client) SetModelSwapGroup(ctx context.Context, name, group string) error

SetModelSwapGroup calls PUT /api/v1/models/{name}/swap-group. An empty group clears it.

func (*Client) SetNodeLabels added in v0.2.0

func (c *Client) SetNodeLabels(ctx context.Context, id string, labels map[string]string) (NodeLabels, error)

SetNodeLabels calls PUT /api/v1/nodes/{id}/labels, replacing the set.

func (*Client) SetNodeProviderCredential added in v0.2.0

func (c *Client) SetNodeProviderCredential(ctx context.Context, req SetNodeProviderCredentialRequest) (NodeProviderResource, error)

SetNodeProviderCredential calls POST /api/v1/node-providers.

func (*Client) SetNodeWorkloads

func (c *Client) SetNodeWorkloads(ctx context.Context, id string, req SetNodeWorkloadsRequest) (NodeResource, error)

SetNodeWorkloads calls PUT /api/v1/nodes/{id}/workloads: a full replace of both workload flags, not a partial patch, matching handleSetNodeWorkloads' own contract.

func (*Client) SetOAuthSSOPolicy

func (c *Client) SetOAuthSSOPolicy(ctx context.Context, provider string, req OAuthSSOPolicyRequest) (OAuthSSOPolicy, error)

SetOAuthSSOPolicy calls PUT /api/v1/sso/oidc/{provider}.

func (*Client) SetOrganizationEnv

func (c *Client) SetOrganizationEnv(ctx context.Context, id string, vars map[string]string) (map[string]string, error)

SetOrganizationEnv calls PUT /api/v1/organizations/{id}/env: a full replace, mirroring PUT /apps/{name}'s own env field semantics.

func (*Client) SetPRPreviewEnv

func (c *Client) SetPRPreviewEnv(ctx context.Context, name string, pr int, key, value string, secret bool) (PRPreviewEnvOverride, error)

SetPRPreviewEnv calls POST /api/v1/apps/{name}/previews/{pr}/env: declares (or replaces) one env var for that pull request's next preview deploy.

func (*Client) SetPasswordChangeRequired

func (c *Client) SetPasswordChangeRequired(ctx context.Context, id string, required bool) (UserResource, error)

SetPasswordChangeRequired calls PUT /api/v1/users/{id}/password-change-required.

func (*Client) SetPipelineSync added in v0.2.0

func (c *Client) SetPipelineSync(ctx context.Context, app string, repoIsTruth bool) (PipelineSyncStatus, error)

SetPipelineSync calls PUT /api/v1/apps/{app}/pipeline-sync.

func (*Client) SetPipelineWebhook

func (c *Client) SetPipelineWebhook(ctx context.Context, app, name string, req PipelineWebhookRequest) (PipelineWebhook, error)

SetPipelineWebhook calls PUT .../pipelines/{name}/webhook.

func (*Client) SetPlacement added in v0.2.0

func (c *Client) SetPlacement(ctx context.Context, kind, name string, selector map[string]string) (PlacementResource, error)

SetPlacement calls PUT /api/v1/{apps|databases}/{name}/placement.

func (*Client) SetPlatformUpgradePolicy added in v0.2.0

func (c *Client) SetPlatformUpgradePolicy(ctx context.Context, p DBUpgradePolicy) (DBUpgradePolicy, error)

SetPlatformUpgradePolicy calls PUT /api/v1/settings/database-upgrades.

func (*Client) SetPreview added in v0.2.0

func (c *Client) SetPreview(ctx context.Context, name string, req PreviewSettingsRequest) (PreviewStatus, error)

SetPreview calls PUT /api/v1/apps/{name}/preview.

func (*Client) SetPreviewEnabled

func (c *Client) SetPreviewEnabled(ctx context.Context, appName string, enabled bool) (PreviewSettingsResource, error)

SetPreviewEnabled calls PUT /api/v1/apps/{name}/preview-settings, touching only the enabled toggle: post_pr_comments, if previously set, is left unchanged (SetPreviewSettingsRequest's own doc comment).

func (*Client) SetPreviewPolicy added in v0.2.0

func (c *Client) SetPreviewPolicy(ctx context.Context, appName string, req SetPreviewPolicyRequest) (PreviewPolicyResource, error)

SetPreviewPolicy calls PUT /api/v1/apps/{name}/preview-policy.

func (*Client) SetPreviewPostPRComments

func (c *Client) SetPreviewPostPRComments(ctx context.Context, appName string, enabled bool) (PreviewSettingsResource, error)

SetPreviewPostPRComments calls PUT /api/v1/apps/{name}/preview-settings, touching only the post_pr_comments toggle: enabled, if previously set, is left unchanged.

func (*Client) SetProjectEnv

func (c *Client) SetProjectEnv(ctx context.Context, id string, vars map[string]string) (map[string]string, error)

SetProjectEnv calls PUT /api/v1/projects/{id}/env: a full replace, mirroring PUT /apps/{name}'s own env field semantics.

func (*Client) SetProjectOrganization

func (c *Client) SetProjectOrganization(ctx context.Context, projectID, orgID string) (ProjectResource, error)

SetProjectOrganization calls PUT /api/v1/projects/{id}/organization. An empty orgID clears the assignment. Returns the updated project.

func (*Client) SetQuota

func (c *Client) SetQuota(ctx context.Context, scope, id string, l QuotaLimits) (QuotaResource, error)

SetQuota calls PUT /api/v1/{teams|projects}/{id}/quota.

func (*Client) SetRoute53DNS added in v0.2.0

func (c *Client) SetRoute53DNS(ctx context.Context, req UpdateRoute53DNSRequest) (Route53DNSResource, error)

SetRoute53DNS calls PUT /api/v1/settings/route53-dns.

func (*Client) SetSCIMDefaultRole

func (c *Client) SetSCIMDefaultRole(ctx context.Context, roleID string) (SSOSettings, error)

SetSCIMDefaultRole calls PUT /api/v1/sso/settings with the directory default role.

func (*Client) SetSSOEnforce

func (c *Client) SetSSOEnforce(ctx context.Context, on bool) (SSOSettings, error)

SetSSOEnforce calls PUT /api/v1/sso/settings.

func (*Client) SetSecret

func (c *Client) SetSecret(ctx context.Context, name, key, value string, overwriteLocked bool) error

SetSecret calls PUT /api/v1/apps/{name}/secrets/{key}. No response body beyond the status (internal/api/secrets.go's handleSetSecret returns 204 on success), matching that handler's own doc comment on why a secret's value is never echoed back. overwriteLocked bypasses the server's 409-if-locked guard, the same escape hatch the dashboard's SecretsEditor exposes.

func (*Client) SetSecretLock

func (c *Client) SetSecretLock(ctx context.Context, name, key string, locked bool) error

SetSecretLock calls POST /api/v1/apps/{name}/secrets/{key}/lock: toggles the accidental-overwrite guard SetSecret's overwriteLocked bypasses. Reversible either direction, not a permanent write-once marker.

func (*Client) SetSecretRotation

func (c *Client) SetSecretRotation(ctx context.Context, name, key string, req SetSecretRotationPolicyRequest) (SecretRotationPolicyResource, error)

SetSecretRotation calls PUT /api/v1/apps/{name}/secrets/{key}/rotation.

func (*Client) SetSecretScanPolicy

func (c *Client) SetSecretScanPolicy(ctx context.Context, name, policy string) (SecretScanSettings, error)

SetSecretScanPolicy calls PUT /api/v1/apps/{name}/secret-scan.

func (*Client) SetServerAddress added in v0.2.0

func (c *Client) SetServerAddress(ctx context.Context, override ServerAddressPair) (ServerAddress, error)

SetServerAddress calls PUT /api/v1/system/server-address; both empty clears the override.

func (*Client) SetServerProfile

func (c *Client) SetServerProfile(ctx context.Context, req UpdateServerProfileRequest) (ServerProfile, error)

SetServerProfile calls PUT /api/v1/settings/server-profile.

func (*Client) SetSessionPolicy

func (c *Client) SetSessionPolicy(ctx context.Context, teamID string, req SessionPolicyRequest) (SessionPolicy, error)

SetSessionPolicy calls PUT /api/v1/security/session-policies/{team_id}.

func (*Client) SetSetupGuideHidden added in v0.2.0

func (c *Client) SetSetupGuideHidden(ctx context.Context, hidden bool) (SetupGuideResource, error)

SetSetupGuideHidden calls PUT /api/v1/setup/guide/visibility.

func (*Client) SetSetupGuideStep added in v0.2.0

func (c *Client) SetSetupGuideStep(ctx context.Context, id, state string) (SetupGuideResource, error)

SetSetupGuideStep calls PUT /api/v1/setup/guide/steps/{id}; state is "skipped", "done" or "todo" (clears an override).

func (*Client) SetSharedEnvSecret added in v0.2.0

func (c *Client) SetSharedEnvSecret(ctx context.Context, scope, id, key, value string) error

SetSharedEnvSecret calls PUT /api/v1/{scope}s/{id}/env/secrets/{key}: encrypts value and marks key secret. No response body beyond the status, matching SetSecret's own "never echo a value back" rule.

func (*Client) SetStorageDefault

func (c *Client) SetStorageDefault(ctx context.Context, class, targetID string) (StorageDefault, error)

SetStorageDefault calls PUT /api/v1/storage/defaults/{class}.

func (*Client) SetSupplyChain added in v0.2.0

func (c *Client) SetSupplyChain(ctx context.Context, name string, req SupplyChainSettingsRequest) (SupplyChainSettings, error)

SetSupplyChain calls PUT /api/v1/apps/{name}/supply-chain.

func (*Client) SetTeamMemberRole added in v0.2.0

func (c *Client) SetTeamMemberRole(ctx context.Context, id, userID, role string) error

SetTeamMemberRole calls PUT /api/v1/teams/{id}/members/{user}.

func (*Client) SetUpdateSettings added in v0.2.0

func (c *Client) SetUpdateSettings(ctx context.Context, req UpdateSettingsResource) (UpdateSettingsResource, error)

SetUpdateSettings calls PUT /api/v1/updates/settings.

func (*Client) SetUpgradePolicy added in v0.2.0

func (c *Client) SetUpgradePolicy(ctx context.Context, req UpgradePolicyRequest) (UpgradePolicy, error)

SetUpgradePolicy calls PUT /api/v1/updates/auto.

func (*Client) SetUsageBudget added in v0.2.0

func (c *Client) SetUsageBudget(ctx context.Context, scope, scopeID string, monthly, warnPct float64) (usagecost.Budget, error)

SetUsageBudget calls PUT /api/v1/usage/budgets.

func (*Client) SetUserEnvironmentGrants added in v0.2.0

func (c *Client) SetUserEnvironmentGrants(ctx context.Context, userID string, environmentIDs []string) (EnvironmentGrants, error)

SetUserEnvironmentGrants calls PUT /api/v1/users/{id}/environment-grants.

func (*Client) SetUserRole added in v0.2.0

func (c *Client) SetUserRole(ctx context.Context, userID, roleID string) (UserResource, error)

SetUserRole calls PUT /api/v1/users/{id}/role.

func (*Client) SetVault added in v0.2.0

SetVault calls PUT /api/v1/settings/vault.

func (*Client) SetVolumeBackupPolicy added in v0.2.0

func (c *Client) SetVolumeBackupPolicy(ctx context.Context, name, volume string, p VolumeBackupPolicyResource) (VolumeBackupPolicyResource, error)

SetVolumeBackupPolicy calls PUT /api/v1/apps/{name}/volumes/{volume}/backup-policy.

func (*Client) SetVolumeBackupSchedule

func (c *Client) SetVolumeBackupSchedule(ctx context.Context, name, volume string, req SetVolumeBackupScheduleRequest) (VolumeBackupScheduleResource, error)

SetVolumeBackupSchedule calls PUT /api/v1/apps/{name}/volumes/{volume}/backup-schedule: the app service volume counterpart of SetBackupSchedule.

func (*Client) SetupProxyIntegration added in v0.2.0

func (c *Client) SetupProxyIntegration(ctx context.Context, req ProxySetupRequest) (ProxyIntegration, error)

SetupProxyIntegration runs setup; without Confirm it is a dry run.

func (*Client) ShieldBots

func (c *Client) ShieldBots(ctx context.Context) (ShieldBotList, error)

ShieldBots calls GET /api/v1/system/shield/bots.

func (*Client) SilenceAlertRule added in v0.2.0

func (c *Client) SilenceAlertRule(ctx context.Context, app, ruleID, duration, reason string) (SilenceResource, error)

SilenceAlertRule calls POST /api/v1/apps/{name}/alerts/{id}/silence.

func (*Client) SimulateFailure

func (c *Client) SimulateFailure(ctx context.Context, zone, node string) (FailureSimulation, error)

SimulateFailure asks what would happen if a zone or one node were lost.

func (*Client) SimulateIAM added in v0.2.0

func (c *Client) SimulateIAM(ctx context.Context, principalType, principalID, action, resource string) (IAMSimulation, error)

SimulateIAM calls GET /api/v1/iam/simulate.

func (*Client) SimulatePlacement

func (c *Client) SimulatePlacement(ctx context.Context, cpuMilli, memoryMiB int64, count int, selector string) (PlacementSimulation, error)

SimulatePlacement asks where count apps asking for cpuMilli and memoryMiB would land.

func (*Client) SleepAppNow

func (c *Client) SleepAppNow(ctx context.Context, appName string) (AppSleepResource, error)

SleepAppNow calls POST /api/v1/apps/{name}/sleep/now.

func (*Client) SleepModel added in v0.2.0

func (c *Client) SleepModel(ctx context.Context, name string) error

SleepModel calls POST /api/v1/models/{name}/sleep.

func (*Client) StageAppImport added in v0.2.0

func (c *Client) StageAppImport(ctx context.Context, id string) (AppImportView, error)

StageAppImport calls POST .../sessions/{id}/stage. A blocked preflight is returned as an *APIError with the status 422.

func (*Client) StartAccountExport

func (c *Client) StartAccountExport(ctx context.Context) (AccountExport, error)

StartAccountExport calls POST /api/v1/auth/export.

func (*Client) StartApp

func (c *Client) StartApp(ctx context.Context, name string) (AppResource, error)

StartApp calls POST /api/v1/apps/{name}/start: clears the suspended flag StopApp set, letting the reconciler bring the container back.

func (*Client) StartAppImportCutover added in v0.2.0

func (c *Client) StartAppImportCutover(ctx context.Context, session, item string, body ImportCutoverStart) (ImportCutoverRun, error)

StartAppImportCutover calls POST .../items/{item}/cutover/runs.

func (*Client) StartAppImportVolumeCopy

func (c *Client) StartAppImportVolumeCopy(ctx context.Context, id string, items []string) (AppImportVolumeCopy, error)

StartAppImportVolumeCopy calls POST .../sessions/{id}/volumes/copy.

func (*Client) StartBackupDrill added in v0.2.0

func (c *Client) StartBackupDrill(ctx context.Context, backupID string) (string, error)

StartBackupDrill calls POST /api/v1/backups/drills and returns the drill ID.

func (*Client) StartCanary added in v0.2.0

func (c *Client) StartCanary(ctx context.Context, appName, image string, weight int) (CanaryResource, error)

StartCanary calls POST /api/v1/apps/{name}/canary. A weight of 0 uses the server default.

func (*Client) StartCanaryWith

func (c *Client) StartCanaryWith(ctx context.Context, appName string, req CanaryStartRequest) (CanaryResource, error)

StartCanaryWith calls POST /api/v1/apps/{name}/canary with the full request.

func (*Client) StartDatabase added in v0.2.0

func (c *Client) StartDatabase(ctx context.Context, name string) (DatabaseResource, error)

StartDatabase calls POST /api/v1/databases/{name}/start: clears the suspended flag StopDatabase set, letting the reconciler bring the container back against the same data volume.

func (*Client) StartDatabaseDataCopy added in v0.2.0

func (c *Client) StartDatabaseDataCopy(ctx context.Context, name string, src DataCopySource) (DataCopyStatus, error)

StartDatabaseDataCopy calls POST /api/v1/imports/platform/databases/{name}/copy.

func (*Client) StartDeviceAuth

func (c *Client) StartDeviceAuth(ctx context.Context, req DeviceStartRequest) (DeviceStartResponse, error)

StartDeviceAuth calls POST /api/v1/auth/device/start. Unauthenticated by design: call it on a Client built with an empty token (NewClient(baseURL, "")).

func (*Client) StartFirewallEdgeAttack

func (c *Client) StartFirewallEdgeAttack(ctx context.Context, minutes int, challenge bool) (FirewallEdgeAttack, error)

StartFirewallEdgeAttack calls POST .../firewall/edge/attack-mode.

func (*Client) StartLogArchiveDump added in v0.2.0

func (c *Client) StartLogArchiveDump(ctx context.Context, req LogArchiveDumpRequest) (LogArchiveRun, error)

StartLogArchiveDump calls POST /api/v1/log-archive/dump.

func (*Client) StartMajorUpgrade added in v0.2.0

func (c *Client) StartMajorUpgrade(ctx context.Context, name, version string) (MajorUpgradeResource, error)

StartMajorUpgrade calls POST /api/v1/databases/{name}/major-upgrade.

func (*Client) StartMove added in v0.2.0

func (c *Client) StartMove(ctx context.Context, kind, name, nodeID string) (NodeMoveResource, error)

StartMove calls POST /api/v1/{apps|databases}/{name}/move. kind is "app" or "database"; an empty nodeID lets the scheduler pick.

func (*Client) StartNodeDrain added in v0.2.0

func (c *Client) StartNodeDrain(ctx context.Context, id, targetNodeID string) (NodeDrainResource, error)

StartNodeDrain calls POST /api/v1/nodes/{id}/drain and returns the drain job.

func (*Client) StartPipelineRun added in v0.2.0

func (c *Client) StartPipelineRun(ctx context.Context, app, name string, req PipelineStartRequest) (PipelineRunResource, error)

StartPipelineRun calls POST /api/v1/apps/{app}/pipelines/{name}/runs.

func (*Client) StartProject added in v0.2.0

func (c *Client) StartProject(ctx context.Context, id string) (ProjectLifecycleResult, error)

StartProject calls POST /api/v1/projects/{id}/start: clears the suspended flag StopProject set on every app and database in the project.

func (*Client) StartRollback

func (c *Client) StartRollback(ctx context.Context, version string) (RollbackStarted, error)

StartRollback calls POST /api/v1/updates/rollback for a binary-only rollback to a retained release.

func (*Client) StartSelfUpgrade added in v0.2.0

func (c *Client) StartSelfUpgrade(ctx context.Context, target string, ack []string) (SelfUpgradeStarted, error)

StartSelfUpgrade calls POST /api/v1/updates/self-upgrade.

func (*Client) StartTakeover

func (c *Client) StartTakeover(ctx context.Context, body TakeoverStart) (TakeoverStartResult, error)

StartTakeover calls POST /api/v1/migration/takeover/runs.

func (*Client) StartUnderAttack

func (c *Client) StartUnderAttack(ctx context.Context, name, domain string, minutes int) (ShieldPolicyResource, error)

StartUnderAttack calls POST .../domains/{domain}/shield/under-attack.

func (*Client) StatusPagePreview added in v0.2.0

func (c *Client) StatusPagePreview(ctx context.Context) (StatusPageView, error)

StatusPagePreview calls GET /api/v1/status-page/preview.

func (*Client) StepMigrationChecklist

func (c *Client) StepMigrationChecklist(ctx context.Context, app, step string, req MigrationStepRequest) (MigrationChecklist, error)

StepMigrationChecklist calls POST /api/v1/migration/checklists/{app}/steps/{step}.

func (*Client) StopApp

func (c *Client) StopApp(ctx context.Context, name string) (AppResource, error)

StopApp calls POST /api/v1/apps/{name}/stop: marks the service suspended, so the reconciler stops (and leaves stopped) its container on the next pass, without touching desired state otherwise.

func (*Client) StopDatabase added in v0.2.0

func (c *Client) StopDatabase(ctx context.Context, name string) (DatabaseResource, error)

StopDatabase calls POST /api/v1/databases/{name}/stop: marks the database suspended, so the reconciler removes its container on the next pass without touching desired state or its data volume otherwise.

func (*Client) StopFirewallEdgeAttack

func (c *Client) StopFirewallEdgeAttack(ctx context.Context) (FirewallEdgeAttack, error)

StopFirewallEdgeAttack calls DELETE .../firewall/edge/attack-mode.

func (*Client) StopOrphanedContainer added in v0.2.0

func (c *Client) StopOrphanedContainer(ctx context.Context, name string) error

StopOrphanedContainer calls POST /api/v1/system/containers/{name}/stop. Server-side re-confirms the container isn't Levelrail-managed (409 if it is); use "apps stop" for a managed app instead.

func (*Client) StopProject added in v0.2.0

func (c *Client) StopProject(ctx context.Context, id string) (ProjectLifecycleResult, error)

StopProject calls POST /api/v1/projects/{id}/stop: suspends every app and database filed under the project, mirroring StopApp's own single- resource shape at the project scope.

func (*Client) StopUnderAttack

func (c *Client) StopUnderAttack(ctx context.Context, name, domain string) (ShieldPolicyResource, error)

StopUnderAttack calls DELETE .../domains/{domain}/shield/under-attack.

func (*Client) StreamDatabaseLogs added in v0.2.0

func (c *Client) StreamDatabaseLogs(ctx context.Context, name string, onEntry func(LogStreamEntry) error) error

StreamDatabaseLogs calls GET /api/v1/databases/{name}/logs/stream (internal/api/database_logs.go's handleLiveDatabaseLogStream), the database counterpart to StreamLogs above.

func (*Client) StreamDeployLog added in v0.2.0

func (c *Client) StreamDeployLog(ctx context.Context, name, deployID string, onEntry func(LogStreamEntry) error) error

StreamDeployLog calls GET /api/v1/apps/{name}/deploys/{deployId}/logs (internal/api/deploy_attempts.go's handleDeployLogStream): the same SSE connection the dashboard's deploy log page opens, replaying the attempt's log so far and then tailing live until the attempt finishes, ctx is canceled, or the server closes the connection. Same wire shape and same onEntry contract as StreamLogs above, just a different endpoint.

func (*Client) StreamDeploySteps added in v0.2.0

func (c *Client) StreamDeploySteps(ctx context.Context, name, deployID string, onStep func(DeployStepEvent) error) error

StreamDeploySteps calls GET /api/v1/apps/{name}/deploys/{deployId}/steps and calls onStep for each step event until onStep returns an error (the server holds the connection open after the last step) or ctx is canceled.

func (*Client) StreamDeployments added in v0.2.0

func (c *Client) StreamDeployments(ctx context.Context, onEvent func(DeploymentEvent) error) error

StreamDeployments calls GET /api/v1/deployments/stream and invokes onEvent for each change until onEvent errors or ctx is canceled.

func (*Client) StreamLogs added in v0.2.0

func (c *Client) StreamLogs(ctx context.Context, name string, onEntry func(LogStreamEntry) error) error

StreamLogs calls GET /api/v1/apps/{name}/logs/stream (internal/api/live_logs.go's handleLiveLogStream): an SSE connection that replays a short recent backfill then tails live output until ctx is canceled or the server closes the connection. See streamLogEvents for the onEntry contract and transport details shared with StreamDeployLog below.

func (*Client) StreamModelLogs added in v0.2.0

func (c *Client) StreamModelLogs(ctx context.Context, name string, onEntry func(LogStreamEntry) error) error

StreamModelLogs calls GET /api/v1/models/{name}/logs/stream.

func (*Client) StreamPipelineRunLogs added in v0.2.0

func (c *Client) StreamPipelineRunLogs(ctx context.Context, app, id, job string, onLine func(PipelineLogLine) error) error

StreamPipelineRunLogs follows GET .../pipeline-runs/{id}/logs/stream until the run finishes or ctx is cancelled.

func (*Client) SweepPreviewEnvironments

func (c *Client) SweepPreviewEnvironments(ctx context.Context) (SweepPreviewEnvironmentsResult, error)

SweepPreviewEnvironments calls POST /api/v1/previews/sweep: the manual trigger for the TTL fallback that tears down any preview environment whose pull-request-closed webhook never arrived, cross-app.

func (*Client) SyncBetaFeatures

func (c *Client) SyncBetaFeatures(ctx context.Context) error

SyncBetaFeatures fetches the server's enabled beta features and applies them to this process, so gating follows Settings. APP_EXPERIMENTAL stays an override.

func (*Client) TakeoverRun

func (c *Client) TakeoverRun(ctx context.Context, id string) (TakeoverRun, error)

TakeoverRun calls GET /api/v1/migration/takeover/runs/{run}.

func (*Client) TakeoverRuns

func (c *Client) TakeoverRuns(ctx context.Context) ([]TakeoverRun, error)

TakeoverRuns calls GET /api/v1/migration/takeover/runs, newest first.

func (*Client) TakeoverStatus

func (c *Client) TakeoverStatus(ctx context.Context, acceptUnmanaged bool) (TakeoverStatus, error)

TakeoverStatus calls GET /api/v1/migration/takeover/plan.

func (*Client) TeardownPreviewEnvironment

func (c *Client) TeardownPreviewEnvironment(ctx context.Context, appName string, prNumber int) error

TeardownPreviewEnvironment calls POST /api/v1/apps/{name}/previews/{number}/teardown: the manual safety net alongside a pull request's own automatic close-triggered teardown.

func (*Client) TestAIProvider

func (c *Client) TestAIProvider(ctx context.Context, id string) (AIProviderTestResource, error)

TestAIProvider calls POST /api/v1/settings/ai-assistant/providers/{id}/test.

func (*Client) TestAppImportSSH

func (c *Client) TestAppImportSSH(ctx context.Context, req AppImportSSHProbe) (AppImportSSHResult, error)

TestAppImportSSH calls POST /api/v1/migration/apps/ssh/test.

func (*Client) TestBackupTarget

func (c *Client) TestBackupTarget(ctx context.Context, id string) error

TestBackupTarget calls POST /api/v1/backup-targets/{id}/test: probes the target's stored credentials against its configured bucket, without uploading or deleting anything.

func (*Client) TestEventWebhook

func (c *Client) TestEventWebhook(ctx context.Context, id string) (EventWebhookTestResult, error)

TestEventWebhook calls POST /api/v1/event-webhooks/{id}/test.

func (*Client) TestExistingNotificationChannel

func (c *Client) TestExistingNotificationChannel(ctx context.Context, id string) error

TestExistingNotificationChannel calls POST /api/v1/notification-channels/{id}/test: the same real send, against an already-saved channel's own kind/notify_url.

func (*Client) TestExportDestination added in v0.2.0

func (c *Client) TestExportDestination(ctx context.Context, id string) (ExportTestResult, error)

TestExportDestination calls POST /api/v1/export/destinations/{id}/test.

func (*Client) TestExternalDatabase added in v0.2.0

func (c *Client) TestExternalDatabase(ctx context.Context, req ExternalDatabaseRequest) (ExternalDatabaseProbe, error)

TestExternalDatabase calls POST /api/v1/external-databases/test.

func (*Client) TestModelEndpoint

func (c *Client) TestModelEndpoint(ctx context.Context, name string) (EndpointTest, error)

TestModelEndpoint calls POST /api/v1/models/{name}/endpoint/test.

func (*Client) TestModelEndpointInput

func (c *Client) TestModelEndpointInput(ctx context.Context, req TestEndpointRequest) (EndpointTest, error)

TestModelEndpointInput calls POST /api/v1/model-endpoints/test.

func (*Client) TestNetworkShare added in v0.2.0

func (c *Client) TestNetworkShare(ctx context.Context, id string) error

TestNetworkShare calls POST /api/v1/network-shares/{id}/test: dials the share's host on its protocol's standard port to confirm it's reachable. This is a reachability check only, never an authentication check.

func (*Client) TestNodeProvider

func (c *Client) TestNodeProvider(ctx context.Context, provider string) (NodeProviderTestResult, error)

TestNodeProvider calls POST /api/v1/node-providers/{provider}/test with no body, testing the stored credential.

func (*Client) TestNotificationChannel

func (c *Client) TestNotificationChannel(ctx context.Context, kind, notifyURL string) error

TestNotificationChannel calls POST /api/v1/notification-channels/test: fires a real test message via kind/notifyURL without requiring the channel to exist yet.

func (*Client) TestPackageRegistry

func (c *Client) TestPackageRegistry(ctx context.Context, id string) (NodeProviderTestResult, error)

TestPackageRegistry calls POST /api/v1/package-registries/{id}/test.

func (*Client) TestPlugin

func (c *Client) TestPlugin(ctx context.Context, name string) (PluginTestResult, error)

TestPlugin calls POST /api/v1/plugins/{name}/test (dns_provider plugins only).

func (*Client) TestRegistryCredential

func (c *Client) TestRegistryCredential(ctx context.Context, id string) error

TestRegistryCredential calls POST /api/v1/registry-credentials/{id}/test: authenticates the credential's stored username/password against its registry host, without pulling anything.

func (*Client) TestStorageDestination added in v0.2.0

func (c *Client) TestStorageDestination(ctx context.Context, id string) (StorageProbeResult, error)

TestStorageDestination calls POST /api/v1/storage/destinations/{id}/test.

func (*Client) TrafficSummary added in v0.2.0

func (c *Client) TrafficSummary(ctx context.Context) (TrafficSummary, error)

TrafficSummary calls GET /api/v1/traffic/summary.

func (*Client) TransferAppImportImages added in v0.2.0

func (c *Client) TransferAppImportImages(ctx context.Context, id string, body AppImportImagesTransfer) (AppImportImages, error)

TransferAppImportImages calls POST .../sessions/{id}/images/transfer.

func (*Client) TransferTeam added in v0.2.0

func (c *Client) TransferTeam(ctx context.Context, id, userID string) error

TransferTeam calls POST /api/v1/teams/{id}/transfer.

func (*Client) TriggerBackup

func (c *Client) TriggerBackup(ctx context.Context, name, targetID string) (BackupHistoryResource, error)

TriggerBackup calls POST /api/v1/databases/{name}/backups: starts a real backup of name to targetID and returns as soon as the attempt is recorded and under way, not once the dump and upload actually finish. ListBackups is how a caller finds out whether it did.

func (*Client) TriggerBaseBackup added in v0.2.0

func (c *Client) TriggerBaseBackup(ctx context.Context, name, targetID string) (BaseBackupHistoryResource, error)

TriggerBaseBackup calls POST /api/v1/databases/{name}/base-backups: starts a real physical base backup, the point-in-time-restore counterpart of TriggerBackup.

func (*Client) TriggerBuild

func (c *Client) TriggerBuild(ctx context.Context, name string, req BuildTriggerRequest) (BuildTriggerResponse, error)

TriggerBuild calls POST /api/v1/apps/{name}/builds.

func (*Client) TriggerCloneRestore

func (c *Client) TriggerCloneRestore(ctx context.Context, name string, req TriggerCloneRestoreRequest) (CloneRestoreResource, error)

TriggerCloneRestore calls POST /api/v1/databases/{name}/restore-as-new: the non-destructive counterpart to TriggerRestore above. Creates a brand-new database and restores a previously succeeded backup of name into it, never touching name's own live data.

func (*Client) TriggerPITRRestore added in v0.2.0

func (c *Client) TriggerPITRRestore(ctx context.Context, name, baseBackupID, targetTime string) (PITRRestoreHistoryResource, error)

TriggerPITRRestore calls POST /api/v1/databases/{name}/pitr-restore: starts a real point-in-time restore to targetTime, replaying archived WAL forward from baseBackupID.

func (*Client) TriggerRestore

func (c *Client) TriggerRestore(ctx context.Context, name, backupID string) (RestoreHistoryResource, error)

TriggerRestore calls POST /api/v1/databases/{name}/restore: overwrites name's live data in place from a previously succeeded backup attempt. The single most destructive call this Client makes; callers must gate this behind their own explicit confirmation before ever reaching it.

func (*Client) TriggerVolumeBackup

func (c *Client) TriggerVolumeBackup(ctx context.Context, name, volume, targetID string) (BackupHistoryResource, error)

TriggerVolumeBackup calls POST /api/v1/apps/{name}/volumes/{volume}/backups: the app service volume counterpart of TriggerBackup.

func (*Client) TriggerVolumeCloneRestore

func (c *Client) TriggerVolumeCloneRestore(ctx context.Context, name, volume string, req TriggerVolumeCloneRestoreRequest) (VolumeCloneRestoreResource, error)

TriggerVolumeCloneRestore calls POST /api/v1/apps/{name}/volumes/{volume}/restore-as-new: the app service volume counterpart of TriggerCloneRestore. Creates a brand-new, standalone Docker volume and restores a previously succeeded backup of name/volume into it, never touching that volume's own live contents.

func (*Client) TriggerVolumeRestore

func (c *Client) TriggerVolumeRestore(ctx context.Context, name, volume, backupID string) (RestoreHistoryResource, error)

TriggerVolumeRestore calls POST /api/v1/apps/{name}/volumes/{volume}/restore: overwrites the named app service volume's live contents in place from a previously succeeded backup attempt, the app service volume counterpart of TriggerRestore. The same "single most destructive call" warning TriggerRestore's own doc comment gives applies identically here.

func (*Client) TrimLogBudget

func (c *Client) TrimLogBudget(ctx context.Context, app string) (LogTrimResult, error)

TrimLogBudget calls POST /api/v1/apps/{name}/log-budget/trim.

func (*Client) UnallowSecretFingerprint

func (c *Client) UnallowSecretFingerprint(ctx context.Context, name, fingerprint string) error

UnallowSecretFingerprint calls DELETE /api/v1/apps/{name}/secret-scan/allow/{fingerprint}.

func (*Client) UnbindAppBucket

func (c *Client) UnbindAppBucket(ctx context.Context, app, id string) error

UnbindAppBucket calls DELETE /api/v1/apps/{name}/buckets/{id}.

func (*Client) UncordonNode

func (c *Client) UncordonNode(ctx context.Context, id string) (NodeResource, error)

UncordonNode calls POST /api/v1/nodes/{id}/uncordon: the inverse of CordonNode.

func (*Client) UndoAutomationRun added in v0.2.0

func (c *Client) UndoAutomationRun(ctx context.Context, id string) (UndoResult, error)

UndoAutomationRun calls POST /api/v1/domains/automation/runs/{id}/undo.

func (*Client) UnlinkProvider

func (c *Client) UnlinkProvider(ctx context.Context, provider string) error

UnlinkProvider calls DELETE /api/v1/auth/link/{provider}.

func (*Client) UnrestrictDomainPort added in v0.2.0

func (c *Client) UnrestrictDomainPort(ctx context.Context, name, domain string, port int) (DomainPortsResource, error)

UnrestrictDomainPort calls DELETE .../ports/{port}/restrict.

func (*Client) UpdateAIControl added in v0.2.0

func (c *Client) UpdateAIControl(ctx context.Context, req UpdateAIControlRequest) (AIControlResource, error)

UpdateAIControl calls PUT /api/v1/settings/ai-control.

func (*Client) UpdateAlertRule added in v0.2.0

func (c *Client) UpdateAlertRule(ctx context.Context, name, id string, req UpdateAlertRuleRequest) (AlertRuleResource, error)

UpdateAlertRule calls PUT /api/v1/apps/{name}/alerts/{id}: a full replace of the rule's configuration.

func (*Client) UpdateApp added in v0.2.0

func (c *Client) UpdateApp(ctx context.Context, name string, app AppResource) (AppResource, error)

UpdateApp calls PUT /api/v1/apps/{name} with the full app, returning the saved app. The server replaces the whole desired state, so callers should start from GetApp and change only the fields they mean to.

func (*Client) UpdateBackupTarget

func (c *Client) UpdateBackupTarget(ctx context.Context, id string, req UpdateBackupTargetRequest) (BackupTargetResource, error)

UpdateBackupTarget calls PUT /api/v1/backup-targets/{id}: a full replace of name/provider/endpoint/region/bucket, matching handleUpdateBackupTarget's own contract. Credentials rotate only when req carries both AccessKeyID and SecretAccessKey.

func (*Client) UpdateCodeLoginSettings added in v0.2.0

func (c *Client) UpdateCodeLoginSettings(ctx context.Context, in CodeLoginSettingsUpdate) (CodeLoginSettings, error)

UpdateCodeLoginSettings calls PUT /api/v1/settings/auth/code-login (root).

func (*Client) UpdateControlPlaneDR added in v0.2.0

func (c *Client) UpdateControlPlaneDR(ctx context.Context, s ControlPlaneDRSettings) (ControlPlaneDR, error)

UpdateControlPlaneDR calls PUT /api/v1/system/control-plane-dr/settings.

func (*Client) UpdateCostBudget

func (c *Client) UpdateCostBudget(ctx context.Context, id string, body map[string]any) (costbudget.Budget, error)

UpdateCostBudget calls PUT /api/v1/costs/budgets/{id}; only the keys in body change.

func (*Client) UpdateDNSRecord added in v0.2.0

func (c *Client) UpdateDNSRecord(ctx context.Context, name, domain string, req UpdateDNSRecordRequest) (DNSRecordsResponse, error)

UpdateDNSRecord calls PUT .../dns-records: replaces one exact record (req.Original) with a new value (req.Record).

func (*Client) UpdateDNSZoneRecord added in v0.2.0

func (c *Client) UpdateDNSZoneRecord(ctx context.Context, provider, zone string, original DNSRecordKey, rs DNSRecordSet) (DNSRecordWrite, error)

UpdateDNSZoneRecord calls PUT /api/v1/dns/zones/{zone}/records.

func (*Client) UpdateDashboardURL added in v0.2.0

func (c *Client) UpdateDashboardURL(ctx context.Context, req DashboardURLResource) (DashboardURLResource, error)

UpdateDashboardURL calls PUT /api/v1/settings/dashboard-url.

func (*Client) UpdateDockerGuard added in v0.2.0

func (c *Client) UpdateDockerGuard(ctx context.Context, req UpdateDockerGuardRequest) (DockerGuardResource, error)

UpdateDockerGuard calls PUT /api/v1/system/docker-guard.

func (*Client) UpdateDomainAutomation added in v0.2.0

func (c *Client) UpdateDomainAutomation(ctx context.Context, p DomainAutomationOverride) (DomainAutomationResource, error)

UpdateDomainAutomation calls PUT /api/v1/settings/domain-automation.

func (*Client) UpdateEdgeSettings

func (c *Client) UpdateEdgeSettings(ctx context.Context, u EdgeSettingsUpdate) (EdgeSettings, error)

UpdateEdgeSettings calls PUT /api/v1/settings/ingress/edge.

func (*Client) UpdateEmailSettings added in v0.2.0

func (c *Client) UpdateEmailSettings(ctx context.Context, req EmailSettingsResource) (EmailSettingsResource, error)

UpdateEmailSettings calls PUT /api/v1/settings/email.

func (*Client) UpdateEnvSettings added in v0.2.0

func (c *Client) UpdateEnvSettings(ctx context.Context, app string, in EnvSettingsUpdate) (EnvSettings, error)

UpdateEnvSettings calls PUT /api/v1/apps/{name}/env/settings.

func (*Client) UpdateEnvironment

func (c *Client) UpdateEnvironment(ctx context.Context, id string, req UpdateEnvironmentRequest) (EnvironmentResource, error)

UpdateEnvironment calls PATCH /api/v1/environments/{id}.

func (*Client) UpdateEventWebhook

func (c *Client) UpdateEventWebhook(ctx context.Context, id string, req UpdateEventWebhookRequest) (EventWebhookResource, error)

UpdateEventWebhook calls PATCH /api/v1/event-webhooks/{id}.

func (*Client) UpdateExportDestination added in v0.2.0

func (c *Client) UpdateExportDestination(ctx context.Context, id string, req UpdateExportDestinationRequest) (ExportDestinationResource, error)

UpdateExportDestination calls PATCH /api/v1/export/destinations/{id}.

func (*Client) UpdateFeatureFlag

func (c *Client) UpdateFeatureFlag(ctx context.Context, name, id string, req FeatureFlagRequest) (FeatureFlagResource, error)

UpdateFeatureFlag calls PUT /api/v1/apps/{name}/flags/{id}: a full replace of Name/Description/Enabled/RolloutPercentage, not a partial patch, matching handleUpdateFeatureFlag's own contract. Key is never updated once created.

func (*Client) UpdateFirewallEdgeRule

func (c *Client) UpdateFirewallEdgeRule(ctx context.Context, id string, r edgefw.Rule, force bool) (FirewallEdgeRule, error)

UpdateFirewallEdgeRule calls PUT .../firewall/edge/rules/{id}.

func (*Client) UpdateIngressSettings added in v0.2.0

func (c *Client) UpdateIngressSettings(ctx context.Context, req IngressSettingsResource) (IngressSettingsResource, error)

UpdateIngressSettings calls PUT /api/v1/settings/ingress.

func (*Client) UpdateJanitorPolicy

func (c *Client) UpdateJanitorPolicy(ctx context.Context, patch JanitorPolicyPatch) (JanitorPolicy, error)

UpdateJanitorPolicy calls PUT /api/v1/system/janitor/policy.

func (*Client) UpdateJob added in v0.2.0

func (c *Client) UpdateJob(ctx context.Context, app, id string, req ScheduledTaskRequest) (ScheduledTaskResource, error)

UpdateJob calls PUT /api/v1/apps/{name}/jobs/{id}. Fields the request leaves out keep their stored value.

func (*Client) UpdateKeyPolicy

func (c *Client) UpdateKeyPolicy(ctx context.Context, upd KeyPolicyUpdate) (EncryptionKeysStatus, error)

UpdateKeyPolicy calls PUT /api/v1/system/encryption-keys/policy.

func (*Client) UpdateMaintenanceWindow added in v0.2.0

func (c *Client) UpdateMaintenanceWindow(ctx context.Context, id string, req MaintenanceWindowResource) (MaintenanceWindowResource, error)

UpdateMaintenanceWindow calls PUT /api/v1/alert-maintenance-windows/{id}.

func (*Client) UpdateMeshSettings added in v0.2.0

func (c *Client) UpdateMeshSettings(ctx context.Context, req UpdateMeshSettingsRequest) (MeshSettings, error)

UpdateMeshSettings calls PUT /api/v1/mesh/settings.

func (*Client) UpdateNetworkShare added in v0.2.0

func (c *Client) UpdateNetworkShare(ctx context.Context, id string, req UpdateNetworkShareRequest) (NetworkShareResource, error)

UpdateNetworkShare calls PUT /api/v1/network-shares/{id}: a full replace of name/protocol/host/remote_path/mount_options/username. A blank Password in req keeps the share's existing stored password.

func (*Client) UpdateNotificationChannel added in v0.2.0

func (c *Client) UpdateNotificationChannel(ctx context.Context, id string, req UpdateNotificationChannelRequest) (NotificationChannelResource, error)

UpdateNotificationChannel calls PUT /api/v1/notification-channels/{id}: a full replace of the channel's configuration.

func (*Client) UpdateOAuthProviderSettings added in v0.2.0

func (c *Client) UpdateOAuthProviderSettings(ctx context.Context, provider string, req UpdateOAuthProviderSettingsRequest) (OAuthProviderSettingsResource, error)

UpdateOAuthProviderSettings calls PUT /api/v1/settings/oauth/{provider}.

func (*Client) UpdatePipeline added in v0.2.0

func (c *Client) UpdatePipeline(ctx context.Context, app, name string, req PipelineSaveRequest) (PipelineResource, error)

UpdatePipeline calls PUT /api/v1/apps/{app}/pipelines/{name}.

func (*Client) UpdatePolicy

func (c *Client) UpdatePolicy(ctx context.Context, id string, req PolicyRequest) (PolicyResource, error)

UpdatePolicy calls PUT /api/v1/iam/policies/{id}.

func (*Client) UpdatePrivateNetwork

func (c *Client) UpdatePrivateNetwork(ctx context.Context, id string, req PrivateNetworkRequest) (PrivateNetworkChange, error)

UpdatePrivateNetwork calls PUT /api/v1/private-networks/{id}.

func (*Client) UpdateProxyIntegrationSettings added in v0.2.0

func (c *Client) UpdateProxyIntegrationSettings(ctx context.Context, s ProxyIntegrationSettings) (ProxyIntegrationSettings, error)

UpdateProxyIntegrationSettings replaces the settings.

func (*Client) UpdateRegistryCredential

func (c *Client) UpdateRegistryCredential(ctx context.Context, id string, req UpdateRegistryCredentialRequest) (RegistryCredentialResource, error)

UpdateRegistryCredential calls PUT /api/v1/registry-credentials/{id}: a full replace of name/registry_host/username, matching handleUpdateRegistryCredential's own contract. The password rotates only when req carries one.

func (*Client) UpdateRegistrySettings

func (c *Client) UpdateRegistrySettings(ctx context.Context, req UpdateRegistrySettingsRequest) (RegistrySettingsResource, error)

UpdateRegistrySettings calls PUT /api/v1/settings/registry.

func (*Client) UpdateRole added in v0.2.0

func (c *Client) UpdateRole(ctx context.Context, id string, req RoleRequest) (RoleResource, error)

UpdateRole calls PUT /api/v1/roles/{id}.

func (*Client) UpdateSAMLConnection

func (c *Client) UpdateSAMLConnection(ctx context.Context, id string, req SAMLConnectionRequest) (SAMLConnection, error)

UpdateSAMLConnection calls PUT /api/v1/sso/saml/connections/{id}.

func (*Client) UpdateScheduledTask

func (c *Client) UpdateScheduledTask(ctx context.Context, name, id string, req ScheduledTaskRequest) (ScheduledTaskResource, error)

UpdateScheduledTask calls PUT /api/v1/apps/{name}/scheduled-tasks/{id}: a full replace of Command/Schedule/Enabled, not a partial patch, matching handleUpdateScheduledTask's own contract.

func (*Client) UpdateSecurityPolicy added in v0.2.0

func (c *Client) UpdateSecurityPolicy(ctx context.Context, in SecurityPolicyUpdate) (SecurityPolicy, error)

UpdateSecurityPolicy calls PUT /api/v1/security/policy (root).

func (*Client) UpdateStandaloneDomain added in v0.2.0

func (c *Client) UpdateStandaloneDomain(ctx context.Context, domain string, req StandaloneDomainRequest) (StandaloneDomain, error)

UpdateStandaloneDomain calls PUT /api/v1/domains/standalone/{domain}.

func (*Client) UpdateStorageBucket

func (c *Client) UpdateStorageBucket(ctx context.Context, id string, req UpdateStorageBucketRequest) (StorageBucket, error)

UpdateStorageBucket calls PATCH /api/v1/storage/buckets/{id}.

func (*Client) UpdateUsageSettings added in v0.2.0

func (c *Client) UpdateUsageSettings(ctx context.Context, u UsageSettingsUpdate) (UsageSettings, error)

UpdateUsageSettings calls PUT /api/v1/usage/settings.

func (*Client) UpdateUserAbilities

func (c *Client) UpdateUserAbilities(ctx context.Context, id string, req UpdateUserAbilitiesRequest) (UserResource, error)

UpdateUserAbilities calls PUT /api/v1/users/{id}/abilities.

func (*Client) UpgradeBackupNow added in v0.2.0

func (c *Client) UpgradeBackupNow(ctx context.Context) (UpgradeBackupNowResult, error)

UpgradeBackupNow calls POST /api/v1/updates/backup-now.

func (*Client) UpgradeDatabaseNow added in v0.2.0

func (c *Client) UpgradeDatabaseNow(ctx context.Context, name, version, confirm string) (DBUpgradeRun, error)

UpgradeDatabaseNow calls POST /api/v1/databases/{name}/upgrade-now.

func (*Client) UpgradePlugin

func (c *Client) UpgradePlugin(ctx context.Context, name string, in InstallPluginInput) (Plugin, error)

UpgradePlugin calls POST /api/v1/plugins/{name}/upgrade.

func (*Client) UploadBucketObject

func (c *Client) UploadBucketObject(ctx context.Context, id, key string, data []byte) (BucketObject, error)

UploadBucketObject calls PUT /api/v1/storage/buckets/{id}/objects with data as the raw body.

func (*Client) UseBitbucketRepoAsSource added in v0.2.0

func (c *Client) UseBitbucketRepoAsSource(ctx context.Context, workspace, repoSlug string, req UseRepoAsSourceRequest) (GitSourceResource, error)

UseBitbucketRepoAsSource calls POST /api/v1/bitbucket-app/repos/{workspace}/{repoSlug}/use-as-source.

func (*Client) UseGitHubRepoAsSource added in v0.2.0

func (c *Client) UseGitHubRepoAsSource(ctx context.Context, owner, repo string, req UseRepoAsSourceRequest) (UseGitHubRepoAsSourceResponse, error)

UseGitHubRepoAsSource calls POST /api/v1/github-app/repos/{owner}/{repo}/use-as-source: connects the repo as req.AppName's git source and registers a push webhook.

func (*Client) UseGitLabProjectAsSource added in v0.2.0

func (c *Client) UseGitLabProjectAsSource(ctx context.Context, projectID int64, req UseRepoAsSourceRequest) (GitSourceResource, error)

UseGitLabProjectAsSource calls POST /api/v1/gitlab-app/projects/{id}/use-as-source.

func (*Client) UseGiteaRepoAsSource added in v0.2.0

func (c *Client) UseGiteaRepoAsSource(ctx context.Context, owner, repo string, req UseRepoAsSourceRequest) (GitSourceResource, error)

UseGiteaRepoAsSource calls POST /api/v1/gitea-app/repos/{owner}/{repo}/use-as-source.

func (*Client) ValidateGitProvider

func (c *Client) ValidateGitProvider(ctx context.Context, provider string) (GitAccessResult, error)

ValidateGitProvider calls POST /api/v1/git-providers/{provider}/validate.

func (*Client) ValidateGitSourceAccess

func (c *Client) ValidateGitSourceAccess(ctx context.Context, app string) (GitAccessResult, error)

ValidateGitSourceAccess calls POST /api/v1/apps/{name}/git-source/validate.

func (*Client) ValidateImageSignaturePolicy

func (c *Client) ValidateImageSignaturePolicy(ctx context.Context, req ImageSignaturePolicyRequest) (ImageSignaturePolicyResource, error)

ValidateImageSignaturePolicy calls POST /api/v1/images/signature-policy/validate.

func (*Client) ValidatePipeline added in v0.2.0

func (c *Client) ValidatePipeline(ctx context.Context, yamlText string) (PipelineValidation, error)

ValidatePipeline calls POST /api/v1/pipelines/validate.

func (*Client) VerifyAppImport added in v0.2.0

func (c *Client) VerifyAppImport(ctx context.Context, id string, items []string) (AppImportView, error)

VerifyAppImport calls POST .../sessions/{id}/verify.

func (*Client) VerifyArchive

func (c *Client) VerifyArchive(ctx context.Context, id string) (ArchiveVerifyResult, error)

VerifyArchive calls POST /api/v1/archives/{id}/verify.

func (*Client) VerifyAuditLog

func (c *Client) VerifyAuditLog(ctx context.Context) (AuditChainReport, error)

VerifyAuditLog calls GET /api/v1/audit-log/verify: walks the audit hash chain.

func (*Client) VerifyBackup

func (c *Client) VerifyBackup(ctx context.Context, name, historyID string) (BackupVerificationResource, error)

VerifyBackup calls POST /api/v1/databases/{name}/backups/{historyId}/verify: re-downloads a previously succeeded backup and checks it for corruption, returning as soon as the attempt is recorded and under way, not once the download and checks actually finish. ListBackupVerifications is how a caller finds out whether it passed.

func (*Client) VerifyControlPlaneBackup added in v0.2.0

func (c *Client) VerifyControlPlaneBackup(ctx context.Context, name string) (ControlPlaneBackupVerification, error)

VerifyControlPlaneBackup calls POST /api/v1/system/backups/{name}/verify. A failed check is a normal response with ok false, not an error.

func (*Client) VerifyEvidencePack

func (c *Client) VerifyEvidencePack(ctx context.Context, id string) (EvidenceVerifyReport, error)

VerifyEvidencePack calls POST .../evidence-packs/{id}/verify.

func (*Client) VerifyImage

func (c *Client) VerifyImage(ctx context.Context, req ImageVerifyRequest) (ImageVerifyResource, error)

VerifyImage calls POST /api/v1/images/verify.

func (*Client) VerifyProxyIntegration added in v0.2.0

func (c *Client) VerifyProxyIntegration(ctx context.Context, domain string) (ProxyIntegration, error)

VerifyProxyIntegration probes every route, or only domain when set.

func (*Client) VerifyVolumeBackup

func (c *Client) VerifyVolumeBackup(ctx context.Context, name, volume, historyID string) (BackupVerificationResource, error)

VerifyVolumeBackup calls POST /api/v1/apps/{name}/volumes/{volume}/backups/{historyId}/verify: the app service volume counterpart of VerifyBackup.

func (*Client) WaitForDeploy added in v0.2.0

func (c *Client) WaitForDeploy(ctx context.Context, name, deployID string, opts WaitOptions) (WaitResult, error)

WaitForDeploy polls one deploy until it is healthy, failed, canceled, superseded or blocked, or the window elapses. An empty or "latest" deployID is resolved once to a concrete id, so a newer deploy cannot take over the wait.

func (*Client) WakeApp added in v0.2.0

func (c *Client) WakeApp(ctx context.Context, appName string) (AppSleepResource, error)

WakeApp calls POST /api/v1/apps/{name}/sleep/wake.

func (*Client) WakeModel added in v0.2.0

func (c *Client) WakeModel(ctx context.Context, name string) error

WakeModel calls POST /api/v1/models/{name}/wake.

func (*Client) Whoami added in v0.2.0

func (c *Client) Whoami(ctx context.Context) (WhoamiResource, error)

Whoami calls GET /api/v1/auth/whoami, which accepts a bearer token as well as a session cookie.

type CloneAppRequest added in v0.2.0

type CloneAppRequest struct {
	NewName       string `json:"new_name"`
	CopySecrets   bool   `json:"copy_secrets,omitempty"`
	Domains       string `json:"domains,omitempty"`
	DomainSuffix  string `json:"domain_suffix,omitempty"`
	EnvironmentID string `json:"environment_id,omitempty"`
}

CloneAppRequest mirrors internal/api's cloneAppRequest (internal/api/apps_clone.go): POST /api/v1/apps/{name}/clone's request body.

type ClonePreview added in v0.2.0

type ClonePreview struct {
	Source      string   `json:"source"`
	WillCopy    []string `json:"will_copy"`
	WillNotCopy []string `json:"will_not_copy"`
	SecretNames []string `json:"secret_names"`
	Domains     []string `json:"source_domains"`
}

ClonePreview is GET /api/v1/apps/{name}/clone/preview's body.

type CloneRestoreResource

type CloneRestoreResource struct {
	ID                 string `json:"id"`
	SourceDatabaseName string `json:"source_database_name"`
	NewDatabaseName    string `json:"new_database_name"`
	BackupHistoryID    string `json:"backup_history_id"`
	Status             string `json:"status"`
	Error              string `json:"error,omitempty"`
	StartedAt          string `json:"started_at"`
	FinishedAt         string `json:"finished_at,omitempty"`
}

CloneRestoreResource mirrors internal/api's cloneRestoreResource (internal/api/database_clone_restore.go): one "restore as new database" attempt.

type CloudflareDNSResource

type CloudflareDNSResource struct {
	Enabled  bool `json:"enabled"`
	HasToken bool `json:"has_token"`
}

CloudflareDNSResource mirrors internal/api's cloudflareDNSResource (internal/api/cloudflare_dns.go): GET/PUT/DELETE /api/v1/settings/cloudflare-dns's wire shape. The token itself never appears here in either direction.

type CloudflareTunnelResource

type CloudflareTunnelResource struct {
	Enabled  bool   `json:"enabled"`
	HasToken bool   `json:"has_token"`
	Status   string `json:"status"`
	Message  string `json:"message,omitempty"`
}

CloudflareTunnelResource mirrors internal/api's cloudflareTunnelResource (internal/api/cloudflare_tunnel.go): GET/PUT/DELETE /api/v1/settings/cloudflare-tunnel's wire shape. The token itself never appears here in either direction. A distinct credential and endpoint from CloudflareDNSResource: this one runs the cloudflared container, that one configures ACME's DNS-01 challenge.

type CodeLoginSettings added in v0.2.0

type CodeLoginSettings struct {
	Admins            bool `json:"admins"`
	Others            bool `json:"others"`
	Saved             bool `json:"saved"`
	NewDeviceApproval bool `json:"new_device_approval"`
}

CodeLoginSettings mirrors internal/api's codeLoginSettingsResource.

type CodeLoginSettingsUpdate added in v0.2.0

type CodeLoginSettingsUpdate struct {
	Admins *bool `json:"admins,omitempty"`
	Others *bool `json:"others,omitempty"`
}

CodeLoginSettingsUpdate is the PUT body; nil fields keep their value.

type CompleteAccessReviewResult

type CompleteAccessReviewResult struct {
	Revoked  int                `json:"revoked"`
	Failures []AccessReviewItem `json:"failures"`
}

CompleteAccessReviewResult is the answer of completing a campaign.

type ComposeDeployResult

type ComposeDeployResult struct {
	AppID    string        `json:"app_id"`
	Services []AppResource `json:"services"`
}

ComposeDeployResult mirrors internal/api's composeDeployResponse (internal/api/apps_compose.go).

type ComposeDownResult added in v0.2.0

type ComposeDownResult struct {
	AppID           string   `json:"app_id"`
	Removed         []string `json:"removed"`
	TeardownPending []string `json:"teardown_pending,omitempty"`
	VolumesKept     []string `json:"volumes_kept,omitempty"`
	VolumesRemoved  []string `json:"volumes_removed,omitempty"`
	VolumeErrors    []string `json:"volume_errors,omitempty"`
}

ComposeDownResult mirrors DELETE /api/v1/apps/{name}/compose.

type ComposePreview added in v0.2.0

type ComposePreview struct {
	Valid    bool     `json:"valid"`
	Errors   []string `json:"errors,omitempty"`
	Services []struct {
		Key       string   `json:"key"`
		Image     string   `json:"image,omitempty"`
		Port      int      `json:"port,omitempty"`
		Domain    string   `json:"domain,omitempty"`
		Volumes   []string `json:"volumes,omitempty"`
		DependsOn []string `json:"depends_on,omitempty"`
		Env       []struct {
			Key       string `json:"key"`
			Generated bool   `json:"generated,omitempty"`
			Required  bool   `json:"required,omitempty"`
		} `json:"env,omitempty"`
	} `json:"services"`
	Profiles []string `json:"profiles,omitempty"`
	Skipped  []string `json:"skipped_services,omitempty"`
	Warnings []string `json:"warnings,omitempty"`
	Notices  []struct {
		Level   string `json:"level"`
		Message string `json:"message"`
	} `json:"notices,omitempty"`
	NeedsRoot bool `json:"needs_root,omitempty"`
}

ComposePreview mirrors POST /api/v1/compose/preview.

type ComposeRevision added in v0.2.0

type ComposeRevision struct {
	Revision   int      `json:"revision"`
	Source     string   `json:"source"`
	TemplateID string   `json:"template_id,omitempty"`
	Profiles   []string `json:"profiles,omitempty"`
	CreatedBy  string   `json:"created_by,omitempty"`
	CreatedAt  string   `json:"created_at"`
	Compose    string   `json:"compose,omitempty"`
}

ComposeRevision mirrors one compose revision.

type ComposeRollbackResult added in v0.2.0

type ComposeRollbackResult struct {
	AppID        string             `json:"app_id"`
	RolledBackTo int                `json:"rolled_back_to"`
	Deploy       ComposeStackDeploy `json:"deploy"`
}

ComposeRollbackResult mirrors POST /api/v1/apps/{name}/compose/rollback.

type ComposeStack added in v0.2.0

type ComposeStack struct {
	AppID      string                `json:"app_id"`
	Phase      string                `json:"phase"`
	Revision   int                   `json:"revision,omitempty"`
	DeployedAt string                `json:"deployed_at,omitempty"`
	Source     string                `json:"source,omitempty"`
	TemplateID string                `json:"template_id,omitempty"`
	Profiles   []string              `json:"profiles,omitempty"`
	Services   []ComposeStackService `json:"services"`
}

ComposeStack mirrors GET /api/v1/apps/{name}/compose.

type ComposeStackDeploy added in v0.2.0

type ComposeStackDeploy struct {
	AppID    string        `json:"app_id"`
	Services []AppResource `json:"services"`
	Notices  []struct {
		Level   string `json:"level"`
		Message string `json:"message"`
	} `json:"notices,omitempty"`
	Revision int      `json:"revision,omitempty"`
	Skipped  []string `json:"skipped_services,omitempty"`
}

ComposeStackDeploy is a compose deploy response with its revision.

type ComposeStackService added in v0.2.0

type ComposeStackService struct {
	Key              string   `json:"key"`
	Name             string   `json:"name"`
	Image            string   `json:"image"`
	Port             int      `json:"port,omitempty"`
	Domains          []string `json:"domains,omitempty"`
	DependsOn        []string `json:"depends_on,omitempty"`
	DependsOnHealthy []string `json:"depends_on_healthy,omitempty"`
	Volumes          []string `json:"volumes,omitempty"`
	Replicas         int      `json:"replicas"`
	Suspended        bool     `json:"suspended,omitempty"`
	Ready            string   `json:"ready"`
	Reason           string   `json:"reason,omitempty"`
	Message          string   `json:"message,omitempty"`
	Since            string   `json:"since,omitempty"`
}

ComposeStackService mirrors one entry of GET /api/v1/apps/{name}/compose.

type ConditionResource

type ConditionResource struct {
	Type               string    `json:"Type"`
	Status             string    `json:"Status"`
	Reason             string    `json:"Reason"`
	Message            string    `json:"Message"`
	LastTransitionTime time.Time `json:"LastTransitionTime"`
}

ConditionResource mirrors internal/reconcile.Condition, the wire shape both GET /api/v1/apps/{name}/deploys (internal/api/deploys.go's handleDeployHistory) and GET /api/v1/databases/{name}/status (internal/api/databases.go's handleDatabaseStatus) return. The source type carries no json struct tags, so its field names are the wire field names verbatim; the tags here just make that explicit rather than relying on encoding/json's case-insensitive match.

type ConnectableDatabaseResource added in v0.2.0

type ConnectableDatabaseResource struct {
	Name             string   `json:"name"`
	Engine           string   `json:"engine"`
	NodeID           string   `json:"node_id,omitempty"`
	CrossNode        bool     `json:"cross_node"`
	AlreadyConnected bool     `json:"already_connected"`
	ConnectedEnvVars []string `json:"connected_env_vars,omitempty"`
}

ConnectableDatabaseResource mirrors internal/api's connectableDatabaseResource: GET /api/v1/apps/{name}/connectable-databases' wire shape for one candidate database.

type ConsoleBulkResult

type ConsoleBulkResult struct {
	Kind    string `json:"kind"`
	Name    string `json:"name"`
	Status  string `json:"status"`
	Message string `json:"message,omitempty"`
}

ConsoleBulkResult is one resource outcome of a bulk tag call.

type ConsoleBulkTagRequest

type ConsoleBulkTagRequest struct {
	Action    string       `json:"action"`
	Tag       string       `json:"tag"`
	Resources []ConsoleRef `json:"resources"`
	DryRun    bool         `json:"dry_run,omitempty"`
}

ConsoleBulkTagRequest is the body of POST /api/v1/resources/tags/bulk.

type ConsoleBulkTagResponse

type ConsoleBulkTagResponse struct {
	Action  string              `json:"action"`
	Tag     string              `json:"tag"`
	DryRun  bool                `json:"dry_run"`
	Results []ConsoleBulkResult `json:"results"`
	Counts  map[string]int      `json:"counts"`
}

ConsoleBulkTagResponse is the bulk tag outcome.

type ConsoleList

type ConsoleList struct {
	Items  []ConsoleResource `json:"items"`
	Total  int               `json:"total"`
	Counts map[string]int    `json:"counts"`
}

ConsoleList is the explorer response.

type ConsoleQuery

type ConsoleQuery struct {
	Text  string
	Kind  string
	Tags  []string
	Limit int
}

ConsoleQuery filters the explorer list.

type ConsoleRef

type ConsoleRef struct {
	Kind string `json:"kind"`
	Name string `json:"name"`
}

ConsoleRef names one resource in a bulk request.

type ConsoleResource

type ConsoleResource struct {
	ID     string   `json:"id,omitempty"`
	Kind   string   `json:"kind"`
	Name   string   `json:"name"`
	Detail string   `json:"detail,omitempty"`
	Status string   `json:"status,omitempty"`
	Tags   []string `json:"tags"`
}

ConsoleResource is one row of GET /api/v1/resources.

type ConsoleView

type ConsoleView struct {
	ID        string    `json:"id"`
	Name      string    `json:"name"`
	Query     string    `json:"query"`
	CreatedAt time.Time `json:"created_at"`
}

ConsoleView is a saved explorer view.

type ContainerPortResource

type ContainerPortResource struct {
	ContainerPort int    `json:"container_port"`
	HostPort      int    `json:"host_port"`
	Protocol      string `json:"protocol"`
}

ContainerPortResource mirrors internal/api's containerPortResource.

type ContainerResource

type ContainerResource struct {
	Name    string                  `json:"name"`
	Image   string                  `json:"image"`
	Running bool                    `json:"running"`
	Ports   []ContainerPortResource `json:"ports"`
}

ContainerResource mirrors internal/api's containerResource (internal/api/containers.go): every container on this node, Levelrail-managed or not. Read-only, no id: see that file's own doc comment on why a stop/restart action doesn't belong on this endpoint.

type ControlPlaneBackup added in v0.2.0

type ControlPlaneBackup struct {
	Name      string `json:"name"`
	SizeBytes int64  `json:"size_bytes"`
	CreatedAt string `json:"created_at"`
	SHA256    string `json:"sha256"`
	// VerifiedAt and VerifiedOK are set once the snapshot has been verified.
	VerifiedAt string `json:"verified_at,omitempty"`
	VerifiedOK *bool  `json:"verified_ok,omitempty"`
}

ControlPlaneBackup mirrors internal/cpbackup.Info: one control plane database snapshot.

type ControlPlaneBackupCheck added in v0.2.0

type ControlPlaneBackupCheck struct {
	Name   string `json:"name"`
	OK     bool   `json:"ok"`
	Detail string `json:"detail"`
}

ControlPlaneBackupCheck is one step of a backup verification.

type ControlPlaneBackupVerification added in v0.2.0

type ControlPlaneBackupVerification struct {
	Name       string                    `json:"name"`
	OK         bool                      `json:"ok"`
	Checks     []ControlPlaneBackupCheck `json:"checks"`
	VerifiedAt string                    `json:"verified_at"`
}

ControlPlaneBackupVerification mirrors internal/cpbackup.VerifyResult.

type ControlPlaneDR added in v0.2.0

type ControlPlaneDR struct {
	Enabled                 bool                    `json:"enabled"`
	Configured              bool                    `json:"configured"`
	TargetID                string                  `json:"target_id"`
	TargetName              string                  `json:"target_name,omitempty"`
	InstallID               string                  `json:"install_id"`
	Recipients              []string                `json:"recipients"`
	Schedule                string                  `json:"schedule"`
	DrillSchedule           string                  `json:"drill_schedule"`
	RetainDaily             int                     `json:"retain_daily"`
	RetainWeekly            int                     `json:"retain_weekly"`
	RetainMonthly           int                     `json:"retain_monthly"`
	EscrowTargetID          string                  `json:"escrow_target_id"`
	EscrowGeneratedAt       string                  `json:"escrow_generated_at,omitempty"`
	EscrowAckedAt           string                  `json:"escrow_acked_at,omitempty"`
	NextBackupAt            string                  `json:"next_backup_at,omitempty"`
	NextDrillAt             string                  `json:"next_drill_at,omitempty"`
	LastBackupAt            string                  `json:"last_backup_at,omitempty"`
	LastBackupKey           string                  `json:"last_backup_key,omitempty"`
	LastBackupError         string                  `json:"last_backup_error,omitempty"`
	LastAttemptAt           string                  `json:"last_attempt_at,omitempty"`
	LastDrill               ControlPlaneDRDrill     `json:"last_drill"`
	DrillIdentityConfigured bool                    `json:"drill_identity_configured"`
	BackupRunning           bool                    `json:"backup_running"`
	DrillRunning            bool                    `json:"drill_running"`
	Checklist               ControlPlaneDRChecklist `json:"checklist"`
	Warnings                []ControlPlaneDRWarning `json:"warnings"`
	Replica                 *ControlPlaneReplica    `json:"replica,omitempty"`
}

ControlPlaneDR mirrors internal/cpbackup.Status: off-box backup configuration and health. It carries public recipients only.

type ControlPlaneDRChecklist added in v0.2.0

type ControlPlaneDRChecklist struct {
	DestinationChosen  bool `json:"destination_chosen"`
	RecipientSet       bool `json:"recipient_set"`
	EscrowAcknowledged bool `json:"escrow_acknowledged"`
	DrillPassed        bool `json:"drill_passed"`
}

ControlPlaneDRChecklist mirrors internal/cpbackup.Checklist.

type ControlPlaneDRDrill added in v0.2.0

type ControlPlaneDRDrill struct {
	At         string `json:"at,omitempty"`
	OK         bool   `json:"ok"`
	Partial    bool   `json:"partial"`
	Detail     string `json:"detail"`
	DurationMs int64  `json:"duration_ms"`
}

ControlPlaneDRDrill mirrors internal/cpbackup.DrillStatus.

type ControlPlaneDRSettings added in v0.2.0

type ControlPlaneDRSettings struct {
	Enabled        bool     `json:"enabled"`
	TargetID       string   `json:"target_id"`
	Recipients     []string `json:"recipients"`
	Schedule       string   `json:"schedule"`
	DrillSchedule  string   `json:"drill_schedule"`
	RetainDaily    int      `json:"retain_daily"`
	RetainWeekly   int      `json:"retain_weekly"`
	RetainMonthly  int      `json:"retain_monthly"`
	EscrowTargetID string   `json:"escrow_target_id"`
}

ControlPlaneDRSettings is the body of PUT /system/control-plane-dr/settings.

type ControlPlaneDRWarning added in v0.2.0

type ControlPlaneDRWarning struct {
	Code    string `json:"code"`
	Message string `json:"message"`
}

ControlPlaneDRWarning mirrors internal/cpbackup.Warning.

type ControlPlaneEscrowBundle added in v0.2.0

type ControlPlaneEscrowBundle struct {
	Armored        string `json:"armored"`
	Instructions   string `json:"instructions"`
	Fingerprint    string `json:"fingerprint"`
	RecipientCount int    `json:"recipient_count"`
	CreatedAt      string `json:"created_at"`
	UploadedKey    string `json:"uploaded_key,omitempty"`
}

ControlPlaneEscrowBundle mirrors internal/cpbackup.EscrowBundle.

type ControlPlaneOffboxBackup added in v0.2.0

type ControlPlaneOffboxBackup struct {
	Key         string `json:"key"`
	ManifestKey string `json:"manifest_key"`
	CreatedAt   string `json:"created_at"`
	SizeBytes   int64  `json:"size_bytes"`
	Complete    bool   `json:"complete"`
}

ControlPlaneOffboxBackup mirrors internal/cpbackup.Remote.

type ControlPlaneReplica

type ControlPlaneReplica struct {
	Enabled         bool   `json:"enabled"`
	IntervalSeconds int    `json:"interval_seconds"`
	LastShipAt      string `json:"last_ship_at,omitempty"`
	LastShipMs      int64  `json:"last_ship_ms,omitempty"`
	LastSizeBytes   int64  `json:"last_size_bytes,omitempty"`
	LastError       string `json:"last_error,omitempty"`
	PendingSince    string `json:"pending_since,omitempty"`
}

ControlPlaneReplica is the opt-in continuous replica state.

type ControlPlaneRestoreBackup

type ControlPlaneRestoreBackup struct {
	Key       string `json:"key"`
	CreatedAt string `json:"created_at"`
	SizeBytes int64  `json:"size_bytes"`
}

ControlPlaneRestoreBackup is the newest complete off-box backup.

type ControlPlaneRestorePlan

type ControlPlaneRestorePlan struct {
	Ready      bool                       `json:"ready"`
	Backup     *ControlPlaneRestoreBackup `json:"backup,omitempty"`
	InstallID  string                     `json:"install_id,omitempty"`
	Source     string                     `json:"source,omitempty"`
	Endpoint   string                     `json:"endpoint,omitempty"`
	Command    string                     `json:"command,omitempty"`
	Steps      []ControlPlaneRestoreStep  `json:"steps"`
	Warnings   []string                   `json:"warnings"`
	BinaryName string                     `json:"binary_name"`
}

ControlPlaneRestorePlan mirrors the restore-plan response.

type ControlPlaneRestoreStep

type ControlPlaneRestoreStep struct {
	ID    string `json:"id"`
	State string `json:"state"`
}

ControlPlaneRestoreStep is one ordered recovery step and whether it is done.

type CostBudgetStatus

type CostBudgetStatus struct {
	costbudget.Budget
	Currency         string         `json:"currency"`
	Period           string         `json:"period"`
	Spent            float64        `json:"spent"`
	Pct              float64        `json:"pct"`
	Forecast         usagecost.Band `json:"forecast"`
	ForecastPct      float64        `json:"forecast_pct"`
	Highest          int            `json:"highest"`
	Enforced         string         `json:"enforced"`
	Apps             []string       `json:"apps"`
	Level            string         `json:"level"`
	SuggestedMonthly float64        `json:"suggested_monthly"`
	ResetsAt         time.Time      `json:"resets_at"`
}

CostBudgetStatus is one named budget with its month to date position.

type CostBudgets

type CostBudgets struct {
	Budgets  []CostBudgetStatus `json:"budgets"`
	Currency string             `json:"currency"`
}

CostBudgets is GET /api/v1/costs/budgets.

type CostEstimateProviderResource added in v0.2.0

type CostEstimateProviderResource struct {
	Key            string  `json:"key"`
	Label          string  `json:"label"`
	CPUCostUSD     float64 `json:"cpu_cost_usd"`
	MemoryCostUSD  float64 `json:"memory_cost_usd"`
	TotalUSD       float64 `json:"total_usd"`
	MinimumApplied bool    `json:"minimum_applied"`
}

CostEstimateProviderResource mirrors internal/api's costEstimateProviderResource: one reference provider's resulting monthly estimate.

type CostEstimateResource added in v0.2.0

type CostEstimateResource struct {
	ServiceName string                         `json:"service_name"`
	VCPUCores   float64                        `json:"vcpu_cores"`
	MemoryGiB   float64                        `json:"memory_gib"`
	CPUBasis    string                         `json:"cpu_basis"`
	MemoryBasis string                         `json:"memory_basis"`
	Providers   []CostEstimateProviderResource `json:"providers"`
	Note        string                         `json:"note"`
}

CostEstimateResource mirrors internal/api's costEstimateResource: the response shape for GET /api/v1/apps/{name}/cost-estimate (internal/api/cost_estimate.go), a deterministic "what this would cost elsewhere" estimate (internal/costestimate) derived from the app's declared or observed CPU/memory. Note always restates that this is an estimate, not a real bill.

type CostExploration

type CostExploration struct {
	usagecost.Exploration
	Granularity        string            `json:"granularity"`
	Currency           string            `json:"currency"`
	Period             usagecost.Period  `json:"period"`
	Labels             map[string]string `json:"labels"`
	Forecast           *usagecost.Band   `json:"forecast,omitempty"`
	Configured         bool              `json:"configured"`
	TelemetryAvailable bool              `json:"telemetry_available"`
	GeneratedAt        string            `json:"generated_at"`
}

CostExploration is GET /api/v1/costs/explore.

type CostExploreQuery

type CostExploreQuery struct {
	GroupBy     string
	Granularity string
	Period      string
	From        string
	To          string
	Months      int
}

CostExploreQuery selects what the explorer aggregates.

type CoverageRowResource added in v0.2.0

type CoverageRowResource struct {
	Kind            string `json:"kind"`
	AppName         string `json:"app_name,omitempty"`
	Name            string `json:"name"`
	Scratch         bool   `json:"scratch,omitempty"`
	State           string `json:"state"`
	Reason          string `json:"reason,omitempty"`
	PrimaryAction   string `json:"primary_action"`
	Schedule        string `json:"schedule,omitempty"`
	TargetID        string `json:"target_id,omitempty"`
	NextRun         string `json:"next_run,omitempty"`
	LastBackupAt    string `json:"last_backup_at,omitempty"`
	LastVerifiedAt  string `json:"last_verified_at,omitempty"`
	TotalBytes      int64  `json:"total_bytes"`
	BackupCount     int    `json:"backup_count"`
	Encrypted       bool   `json:"encrypted"`
	ProtectionLevel string `json:"protection_level,omitempty"`
}

CoverageRowResource mirrors internal/api's coverageRowResource.

type CoverageSummaryResource added in v0.2.0

type CoverageSummaryResource struct {
	Total               int    `json:"total"`
	Protected           int    `json:"protected"`
	Verified            int    `json:"verified"`
	Unverified          int    `json:"unverified"`
	NeverRan            int    `json:"never_ran"`
	Failing             int    `json:"failing"`
	Unprotected         int    `json:"unprotected"`
	Scratch             int    `json:"scratch"`
	StorageBytes        int64  `json:"storage_bytes"`
	LastVerifiedRestore string `json:"last_verified_restore,omitempty"`
	NextRun             string `json:"next_run,omitempty"`
}

CoverageSummaryResource mirrors internal/api's coverageSummaryResource.

type CreateAIChatMessageRequest added in v0.2.0

type CreateAIChatMessageRequest struct {
	Content string `json:"content"`
}

CreateAIChatMessageRequest mirrors internal/api's createAIChatMessageRequest: POST /api/v1/ai/sessions/{id}/messages's request body.

type CreateAccessReviewRequest

type CreateAccessReviewRequest struct {
	Name       string `json:"name,omitempty"`
	DueDays    int    `json:"due_days,omitempty"`
	RepeatDays int    `json:"repeat_days,omitempty"`
}

CreateAccessReviewRequest is the POST body for a new campaign.

type CreateAlertRuleRequest

type CreateAlertRuleRequest struct {
	Name                  string  `json:"name"`
	Kind                  string  `json:"kind"`
	Metric                string  `json:"metric,omitempty"`
	Comparator            string  `json:"comparator,omitempty"`
	Threshold             float64 `json:"threshold,omitempty"`
	ForDuration           string  `json:"for_duration,omitempty"`
	RestartCountThreshold int     `json:"restart_count_threshold,omitempty"`
	RestartWindow         string  `json:"restart_window,omitempty"`
	// ScheduledTaskID is kind=scheduled_task_failure-only: which of this
	// app's scheduled tasks the rule watches. RestartCountThreshold above
	// doubles as its consecutive-failure threshold.
	ScheduledTaskID string `json:"scheduled_task_id,omitempty"`
	// BackupResourceKind/BackupDatabaseName/BackupServiceName/
	// BackupVolumeName are kind=backup_missing-only: which database or
	// service volume the rule watches. ForDuration above doubles as its
	// overdue grace period.
	BackupResourceKind string `json:"backup_resource_kind,omitempty"`
	BackupDatabaseName string `json:"backup_database_name,omitempty"`
	BackupServiceName  string `json:"backup_service_name,omitempty"`
	BackupVolumeName   string `json:"backup_volume_name,omitempty"`
	// SLO is kind=slo_burn-only: the request-based SLO the rule watches.
	SLO *AlertSLOConfig `json:"slo,omitempty"`
	// LogRule is kind=log_pattern and log_level_rate only.
	LogRule    *AlertLogRule `json:"log_rule,omitempty"`
	ChannelID  string        `json:"channel_id,omitempty"`
	NotifyURL  string        `json:"notify_url,omitempty"`
	NotifyKind string        `json:"notify_kind,omitempty"`
	Enabled    bool          `json:"enabled"`

	Severity            string            `json:"severity,omitempty"`
	Labels              map[string]string `json:"labels,omitempty"`
	ConsecutiveFailures int               `json:"consecutive_failures,omitempty"`
	FlapThreshold       int               `json:"flap_threshold,omitempty"`
	FlapWindow          string            `json:"flap_window,omitempty"`
}

CreateAlertRuleRequest mirrors the fields internal/api's ruleResource actually reads from a create request body; id and resource_id always come from the server (alerting.NewRuleID, the app name in the URL), never the body, so this type has no fields for either. A kind=cert_expiry rule needs none of the threshold or crashloop fields below: it watches every stored certificate platform-wide, not this rule's own resource_id.

type CreateAppConnectionRequest added in v0.2.0

type CreateAppConnectionRequest struct {
	Database string `json:"database"`
	Field    string `json:"field,omitempty"`
	EnvVar   string `json:"env_var,omitempty"`
}

CreateAppConnectionRequest mirrors internal/api's createAppConnectionRequest (apps_connections.go). Field and EnvVar are both optional: the server defaults Field to "url" and generates a collision-safe EnvVar (see defaultConnectionEnvVar's own doc comment) when left blank.

type CreateAppStreamRequest added in v0.2.0

type CreateAppStreamRequest struct {
	ContainerPort int    `json:"container_port"`
	HostPort      int    `json:"host_port"`
	Protocol      string `json:"protocol,omitempty"`
}

CreateAppStreamRequest mirrors internal/api's createAppStreamRequest.

type CreateBackupTargetRequest

type CreateBackupTargetRequest struct {
	Name            string `json:"name"`
	Provider        string `json:"provider"`
	Endpoint        string `json:"endpoint,omitempty"`
	Region          string `json:"region,omitempty"`
	Bucket          string `json:"bucket"`
	AccessKeyID     string `json:"access_key_id"`
	SecretAccessKey string `json:"secret_access_key"`
}

CreateBackupTargetRequest mirrors internal/api's createBackupTargetRequest: AccessKeyID/SecretAccessKey are required here, unlike UpdateBackupTargetRequest where they're optional.

type CreateDeployNotifyTargetRequest added in v0.2.0

type CreateDeployNotifyTargetRequest struct {
	ChannelID string `json:"channel_id"`
	Enabled   bool   `json:"enabled"`
}

CreateDeployNotifyTargetRequest mirrors internal/api's createDeployTargetRequest: attach an already-connected channel by ID.

type CreateEnvironmentRequest

type CreateEnvironmentRequest struct {
	Name      string `json:"name"`
	Protected bool   `json:"protected,omitempty"`
}

CreateEnvironmentRequest mirrors internal/api's createEnvironmentRequest.

type CreateEventWebhookRequest

type CreateEventWebhookRequest struct {
	Name    string   `json:"name"`
	URL     string   `json:"url"`
	Enabled *bool    `json:"enabled,omitempty"`
	Events  []string `json:"events,omitempty"`
}

CreateEventWebhookRequest is the POST /api/v1/event-webhooks body.

type CreateExportDestinationRequest added in v0.2.0

type CreateExportDestinationRequest struct {
	Name     string            `json:"name"`
	Kind     string            `json:"kind"`
	Endpoint string            `json:"endpoint,omitempty"`
	Enabled  *bool             `json:"enabled,omitempty"`
	Apps     []string          `json:"apps,omitempty"`
	MinLevel string            `json:"min_level,omitempty"`
	Options  ExportOptions     `json:"options"`
	Headers  map[string]string `json:"headers,omitempty"`
	HMACKey  string            `json:"hmac_key,omitempty"`
	APIKey   string            `json:"api_key,omitempty"`
}

CreateExportDestinationRequest is the body of POST /api/v1/export/destinations.

type CreateFirewallRuleRequest added in v0.2.0

type CreateFirewallRuleRequest struct {
	Port       int    `json:"port"`
	Protocol   string `json:"protocol,omitempty"`
	SourceCIDR string `json:"source_cidr,omitempty"`
	Action     string `json:"action,omitempty"`
	Label      string `json:"label,omitempty"`
}

CreateFirewallRuleRequest mirrors internal/api's createFirewallRuleRequest.

type CreateGlobalEnvironmentRequest added in v0.2.0

type CreateGlobalEnvironmentRequest struct {
	Name      string `json:"name"`
	Kind      string `json:"kind,omitempty"`
	Protected bool   `json:"protected,omitempty"`
	SortOrder int    `json:"sort_order,omitempty"`
}

CreateGlobalEnvironmentRequest mirrors internal/api's createGlobalEnvironmentRequest.

type CreateInviteRequest

type CreateInviteRequest struct {
	Email     string   `json:"email"`
	Role      string   `json:"role,omitempty"`
	Abilities []string `json:"abilities,omitempty"`
}

CreateInviteRequest mirrors internal/api's createInviteRequest. Role, when set, takes precedence server-side over Abilities, same precedence CreateUserRequest documents.

type CreateInviteResponse

type CreateInviteResponse struct {
	InviteResource
	Link string `json:"link"`
}

CreateInviteResponse mirrors internal/api's createInviteResponse: the invite plus Link, the accept URL to hand or send to the invited person.

type CreateModelDetailResponse

type CreateModelDetailResponse struct {
	ModelDetail
	APIKey string `json:"api_key"`
}

CreateModelDetailResponse is a ModelDetail plus the one-time API key.

type CreateModelKeyRequest added in v0.2.0

type CreateModelKeyRequest struct {
	Name        string     `json:"name"`
	ExpiresAt   *time.Time `json:"expires_at,omitempty"`
	RPM         int        `json:"rpm,omitempty"`
	TPM         int        `json:"tpm,omitempty"`
	TPD         int        `json:"tpd,omitempty"`
	MaxParallel int        `json:"max_parallel,omitempty"`
	AllowPaths  []string   `json:"allow_paths,omitempty"`
	AllowModels []string   `json:"allow_models,omitempty"`
}

CreateModelKeyRequest is the body of POST /api/v1/models/{name}/keys.

type CreateModelRequest added in v0.2.0

type CreateModelRequest struct {
	Name          string   `json:"name"`
	Engine        string   `json:"engine"`
	Model         string   `json:"model"`
	NodeID        string   `json:"node_id,omitempty"`
	GPUCount      int      `json:"gpu_count,omitempty"`
	GPUDeviceIDs  []string `json:"gpu_device_ids,omitempty"`
	ContextLength int      `json:"context_length,omitempty"`
	Quantization  string   `json:"quantization,omitempty"`
	Domain        string   `json:"domain,omitempty"`
	HFToken       string   `json:"hf_token,omitempty"`
	Residency     string   `json:"residency,omitempty"`
	IdleTTLSecs   int      `json:"idle_ttl_seconds,omitempty"`
	SwapGroup     string   `json:"swap_group,omitempty"`

	Compute       string  `json:"compute,omitempty"`
	CatalogID     string  `json:"catalog_id,omitempty"`
	CPUs          float64 `json:"cpus,omitempty"`
	MemoryMiB     int     `json:"memory_mib,omitempty"`
	WeightsFile   string  `json:"weights_file,omitempty"`
	AcceptLicense bool    `json:"accept_license,omitempty"`

	External *ExternalEndpointRequest `json:"external,omitempty"`
}

CreateModelRequest mirrors internal/api's createModelRequest.

type CreateModelResponse added in v0.2.0

type CreateModelResponse struct {
	ModelResource
	APIKey string `json:"api_key"`
}

CreateModelResponse is a ModelResource plus the one-time API key.

type CreateNetworkShareRequest added in v0.2.0

type CreateNetworkShareRequest struct {
	Name         string `json:"name"`
	Protocol     string `json:"protocol"`
	Host         string `json:"host"`
	RemotePath   string `json:"remote_path"`
	MountOptions string `json:"mount_options,omitempty"`
	Username     string `json:"username,omitempty"`
	Password     string `json:"password,omitempty"`
}

CreateNetworkShareRequest mirrors internal/api's createNetworkShareRequest. Password is required for a cifs share, ignored for nfs.

type CreateNodeJoinTokenRequest added in v0.2.0

type CreateNodeJoinTokenRequest struct {
	ControlPlaneAddr string `json:"control_plane_addr,omitempty"`
	NodeName         string `json:"node_name,omitempty"`
	Mesh             bool   `json:"mesh,omitempty"`
}

CreateNodeJoinTokenRequest optionally tailors the returned join commands.

type CreateNodeJoinTokenResponse

type CreateNodeJoinTokenResponse struct {
	Token            string        `json:"token"`
	ExpiresAt        time.Time     `json:"expires_at"`
	CAFingerprint    string        `json:"ca_fingerprint,omitempty"`
	ControlPlaneAddr string        `json:"control_plane_addr,omitempty"`
	JoinCommands     *JoinCommands `json:"join_commands,omitempty"`
}

CreateNodeJoinTokenResponse mirrors internal/api's createNodeJoinTokenResponse: a join token's one and only plaintext appearance, the same "shown once, never recoverable again" shape a created API token uses.

type CreateNodeProvisionRequest added in v0.2.0

type CreateNodeProvisionRequest struct {
	Provider         string `json:"provider"`
	Region           string `json:"region"`
	Size             string `json:"size"`
	Name             string `json:"name"`
	Role             string `json:"role,omitempty"`
	ControlPlaneAddr string `json:"control_plane_addr"`
	// AllowSSHInbound is aws-only; other providers ignore it. Off by
	// default, matching this platform's no-inbound-ports architecture.
	AllowSSHInbound bool `json:"allow_ssh_inbound,omitempty"`
}

CreateNodeProvisionRequest is POST /api/v1/nodes/provision's body.

type CreateNotificationChannelRequest

type CreateNotificationChannelRequest struct {
	Name      string `json:"name"`
	Kind      string `json:"kind"`
	NotifyURL string `json:"notify_url"`
	Enabled   *bool  `json:"enabled,omitempty"`
	// NotifyDeviceLogin opts the channel into the CLI-login-waiting notice.
	NotifyDeviceLogin bool `json:"notify_device_login,omitempty"`
	// NotifyDeviceLoginExpired opts the channel into the login-expired notice.
	NotifyDeviceLoginExpired bool `json:"notify_device_login_expired,omitempty"`
}

CreateNotificationChannelRequest mirrors internal/api's createNotificationChannelRequest.

type CreateOrganizationRequest

type CreateOrganizationRequest struct {
	Name string `json:"name"`
}

CreateOrganizationRequest mirrors internal/api's createOrganizationRequest.

type CreatePackageRegistryRequest

type CreatePackageRegistryRequest struct {
	Name           string `json:"name"`
	Ecosystem      string `json:"ecosystem"`
	URL            string `json:"url"`
	Username       string `json:"username,omitempty"`
	Secret         string `json:"secret"`
	ModulePatterns string `json:"module_patterns,omitempty"`
	ScopeKind      string `json:"scope_kind,omitempty"`
	ScopeRef       string `json:"scope_ref,omitempty"`
}

CreatePackageRegistryRequest is POST /api/v1/package-registries' body.

type CreateProjectRequest

type CreateProjectRequest struct {
	Name string `json:"name"`
}

CreateProjectRequest mirrors internal/api's createProjectRequest.

type CreateRegistryCredentialRequest

type CreateRegistryCredentialRequest struct {
	Name         string     `json:"name"`
	RegistryHost string     `json:"registry_host"`
	Username     string     `json:"username"`
	Password     string     `json:"password"`
	ExpiresAt    *time.Time `json:"expires_at,omitempty"`
}

CreateRegistryCredentialRequest mirrors internal/api's createRegistryCredentialRequest: Password is required here, unlike UpdateRegistryCredentialRequest where it's optional.

type CreateSSHNodeProvisionRequest added in v0.2.0

type CreateSSHNodeProvisionRequest struct {
	Host             string                      `json:"host"`
	Port             int                         `json:"port,omitempty"`
	Username         string                      `json:"username"`
	Auth             SSHNodeProvisionAuthRequest `json:"auth"`
	Name             string                      `json:"name"`
	Role             string                      `json:"role,omitempty"`
	ControlPlaneAddr string                      `json:"control_plane_addr"`
	// HostKeyFingerprint pins the server's SHA256 host key; required unless InsecureSkipHostKeyCheck.
	HostKeyFingerprint       string `json:"host_key_fingerprint,omitempty"`
	InsecureSkipHostKeyCheck bool   `json:"insecure_skip_host_key_check,omitempty"`
}

CreateSSHNodeProvisionRequest is POST /api/v1/nodes/ssh-provision's body.

type CreateSilenceRequest added in v0.2.0

type CreateSilenceRequest struct {
	Matchers SilenceMatchers `json:"matchers"`
	StartsAt *time.Time      `json:"starts_at,omitempty"`
	EndsAt   *time.Time      `json:"ends_at,omitempty"`
	Duration string          `json:"duration,omitempty"`
	Reason   string          `json:"reason,omitempty"`
}

CreateSilenceRequest is the body of POST /api/v1/alert-silences. Set Duration or EndsAt; StartsAt defaults to now.

type CreateStorageBucketRequest

type CreateStorageBucketRequest struct {
	Name          string `json:"name"`
	TargetID      string `json:"target_id"`
	AppName       string `json:"app_name,omitempty"`
	EnvPrefix     string `json:"env_prefix,omitempty"`
	Public        bool   `json:"public,omitempty"`
	QuotaBytes    int64  `json:"quota_bytes,omitempty"`
	LifecycleDays int    `json:"lifecycle_days,omitempty"`
}

CreateStorageBucketRequest is the body of POST /api/v1/storage/buckets.

type CreateTagRequest added in v0.2.0

type CreateTagRequest struct {
	Name string `json:"name"`
}

CreateTagRequest mirrors internal/api's tagResource decode shape for POST /api/v1/tags: only Name is read on create.

type CreateTeamInviteRequest added in v0.2.0

type CreateTeamInviteRequest struct {
	Email          string `json:"email,omitempty"`
	Role           string `json:"role"`
	ExpiresInHours int    `json:"expires_in_hours,omitempty"`
}

CreateTeamInviteRequest is POST /api/v1/teams/{id}/invites' body.

type CreateUserRequest

type CreateUserRequest struct {
	Email       string   `json:"email"`
	DisplayName string   `json:"display_name,omitempty"`
	Password    string   `json:"password"`
	Abilities   []string `json:"abilities,omitempty"`
	Role        string   `json:"role,omitempty"`
}

CreateUserRequest mirrors internal/api's createUserRequest. Role, when set, takes precedence server-side over Abilities (roles.go's resolveAbilities): set one or the other, not both.

type CreatedModelKeyResource added in v0.2.0

type CreatedModelKeyResource struct {
	ModelKeyResource
	APIKey string `json:"api_key"`
}

CreatedModelKeyResource is a key plus its one-time plaintext.

type Credentials

type Credentials struct {
	APIURL string
	Token  string
	// InstanceID, Fingerprint and ServerName pin the server the token was issued by.
	InstanceID  string
	Fingerprint string
	ServerName  string
}

Credentials is ReadCredentialsFile/WriteCredentialsFile's in-memory shape: the same two values as EnvAPIURL/EnvAPIToken.

func ReadCredentialsFile

func ReadCredentialsFile(prog, profile string) (Credentials, error)

ReadCredentialsFile reads profile's section from prog's credentials file. A missing file is a plain error the caller treats as "no credentials file," not logged or reported: this is the lowest-priority source in ResolveToken/ResolveAPIURL's precedence chain, its absence is the common case, not a problem. A file that exists but has no section named profile returns a zero Credentials and no error, the same "nothing configured here" shape, since asking for an unconfigured profile is not itself a failure to read the file.

type CustomTemplateDetail added in v0.2.0

type CustomTemplateDetail struct {
	ID                    string   `json:"id"`
	Name                  string   `json:"name"`
	Description           string   `json:"description"`
	SourceApp             string   `json:"source_app,omitempty"`
	Compose               string   `json:"compose"`
	RequiresConfiguration bool     `json:"requires_configuration"`
	RequiredEnvKeys       []string `json:"required_env_keys,omitempty"`
	CreatedAt             string   `json:"created_at"`
}

CustomTemplateDetail mirrors internal/api's customTemplateDetail: POST /api/v1/apps/{name}/save-as-template's own response, including the derived compose.yaml body and which env var keys ended up required (never which secret values: see compose. FromDesiredServices' own doc comment for why there never are any).

type CustomTemplateListItem added in v0.2.0

type CustomTemplateListItem struct {
	ID                    string `json:"id"`
	Name                  string `json:"name"`
	Description           string `json:"description"`
	SourceApp             string `json:"source_app,omitempty"`
	RequiresConfiguration bool   `json:"requires_configuration"`
	CreatedAt             string `json:"created_at"`
}

CustomTemplateListItem mirrors internal/api's customTemplateListItem: one entry in GET /api/v1/templates/custom, without the full compose body (see CustomTemplateDetail).

type CutoverChange added in v0.2.0

type CutoverChange struct {
	Type     string `json:"type"`
	Name     string `json:"name"`
	Value    string `json:"value"`
	TTL      uint32 `json:"ttl"`
	Replaces string `json:"replaces,omitempty"`
}

CutoverChange is the exact DNS edit to make.

type CutoverCheck added in v0.2.0

type CutoverCheck struct {
	ID     string `json:"id"`
	Status string `json:"status"`
	Detail string `json:"detail"`
	Fix    string `json:"fix,omitempty"`
}

CutoverCheck is one named check with what to do about it.

type CutoverDomain added in v0.2.0

type CutoverDomain struct {
	App     string         `json:"app"`
	Domain  string         `json:"domain"`
	Verdict string         `json:"verdict"`
	Checks  []CutoverCheck `json:"checks"`
	Change  *CutoverChange `json:"change,omitempty"`
}

CutoverDomain is the go or no-go for one domain.

type CutoverReport added in v0.2.0

type CutoverReport struct {
	Verdict   string          `json:"verdict"`
	Phase     string          `json:"phase"`
	TargetIPs []string        `json:"target_ips"`
	Domains   []CutoverDomain `json:"domains"`
	Guidance  []string        `json:"guidance"`
}

CutoverReport is the pre-switch or post-switch result.

type DBCatalogStatus

type DBCatalogStatus struct {
	Source              string            `json:"source"`
	Mode                string            `json:"mode"`
	RemoteEnabled       bool              `json:"remote_enabled"`
	DisabledReason      string            `json:"disabled_reason,omitempty"`
	URL                 string            `json:"url"`
	GeneratedAt         string            `json:"generated_at,omitempty"`
	FetchedAt           string            `json:"fetched_at,omitempty"`
	LastChecked         string            `json:"last_checked,omitempty"`
	NextAttempt         string            `json:"next_attempt,omitempty"`
	LastError           string            `json:"last_error,omitempty"`
	Freshness           string            `json:"freshness"`
	ServingStaleCopy    bool              `json:"serving_stale_copy"`
	EmbeddedUpdated     string            `json:"embedded_updated"`
	LiveChecks          map[string]string `json:"live_checks,omitempty"`
	PublicKeyConfigured bool              `json:"public_key_configured"`
}

DBCatalogStatus is GET /api/v1/database-catalog.

type DBUpgradeAdvice added in v0.2.0

type DBUpgradeAdvice struct {
	Engine         string            `json:"engine"`
	Current        string            `json:"current"`
	Comparable     bool              `json:"comparable"`
	Floating       bool              `json:"floating"`
	Line           string            `json:"line,omitempty"`
	EOL            string            `json:"eol,omitempty"`
	Support        string            `json:"support"`
	Advisories     []string          `json:"advisories,omitempty"`
	Targets        []DBUpgradeTarget `json:"targets"`
	AutoMax        string            `json:"auto_max"`
	ImageRevert    bool              `json:"image_revert"`
	ManualReason   string            `json:"manual_reason,omitempty"`
	Notes          string            `json:"notes,omitempty"`
	Note           string            `json:"note,omitempty"`
	CatalogUpdated string            `json:"catalog_updated"`
}

DBUpgradeAdvice is the advisor's view of a database's version.

type DBUpgradePolicy added in v0.2.0

type DBUpgradePolicy struct {
	Inherit               bool     `json:"inherit,omitempty"`
	AutoUpgrade           string   `json:"auto_upgrade"`
	WindowCron            string   `json:"window_cron"`
	WindowDurationSeconds int64    `json:"window_duration_seconds"`
	WindowTimezone        string   `json:"window_timezone"`
	BackupBefore          bool     `json:"backup_before"`
	VerifyAfter           bool     `json:"verify_after"`
	RevertOnFailure       bool     `json:"revert_on_failure"`
	Notify                []string `json:"notify"`
	Inherited             bool     `json:"inherited,omitempty"`
}

DBUpgradePolicy is a database's or the platform default's upgrade policy.

type DBUpgradeRun added in v0.2.0

type DBUpgradeRun struct {
	ID              string            `json:"id"`
	DatabaseName    string            `json:"database_name"`
	Engine          string            `json:"engine"`
	FromVersion     string            `json:"from_version"`
	ToVersion       string            `json:"to_version"`
	Kind            string            `json:"kind"`
	Source          string            `json:"source"`
	State           string            `json:"state"`
	Phase           string            `json:"phase,omitempty"`
	VerifyAfter     bool              `json:"verify_after"`
	RevertOnFailure bool              `json:"revert_on_failure"`
	BackupID        string            `json:"backup_id,omitempty"`
	VerificationID  string            `json:"verification_id,omitempty"`
	FromImageDigest string            `json:"from_image_digest,omitempty"`
	SnapshotVolume  string            `json:"snapshot_volume,omitempty"`
	RevertPath      string            `json:"revert_path,omitempty"`
	Reason          string            `json:"reason,omitempty"`
	RequestedBy     string            `json:"requested_by,omitempty"`
	Timings         map[string]string `json:"timings"`
	CreatedAt       string            `json:"created_at"`
	FinishedAt      string            `json:"finished_at,omitempty"`
}

DBUpgradeRun is one upgrade attempt.

type DBUpgradeSummary added in v0.2.0

type DBUpgradeSummary struct {
	Items         []DBUpgradeSummaryItem `json:"items"`
	SecurityCount int                    `json:"security_count"`
	EOLCount      int                    `json:"eol_count"`
}

DBUpgradeSummary is GET /api/v1/databases/upgrade-summary.

type DBUpgradeSummaryItem added in v0.2.0

type DBUpgradeSummaryItem struct {
	Database    string   `json:"database"`
	Engine      string   `json:"engine"`
	Version     string   `json:"version"`
	Support     string   `json:"support"`
	EOL         string   `json:"eol,omitempty"`
	Security    bool     `json:"security"`
	Advisories  []string `json:"advisories,omitempty"`
	Available   int      `json:"available"`
	ActiveState string   `json:"active_state,omitempty"`
	LastState   string   `json:"last_state,omitempty"`
	LastReason  string   `json:"last_reason,omitempty"`
}

DBUpgradeSummaryItem is one database in the upgrade summary.

type DBUpgradeTarget added in v0.2.0

type DBUpgradeTarget struct {
	Version    string   `json:"version"`
	Kind       string   `json:"kind"`
	Security   bool     `json:"security"`
	Advisories []string `json:"advisories,omitempty"`
	EOL        string   `json:"eol,omitempty"`
	Automatic  bool     `json:"automatic"`
}

DBUpgradeTarget is one version the advisor offers.

type DBUpgradesResource added in v0.2.0

type DBUpgradesResource struct {
	Database   string           `json:"database"`
	Engine     string           `json:"engine"`
	Version    string           `json:"version"`
	Advice     DBUpgradeAdvice  `json:"advice"`
	Policy     DBUpgradePolicy  `json:"policy"`
	WindowOpen bool             `json:"window_open"`
	NextWindow string           `json:"next_window,omitempty"`
	NextTarget *DBUpgradeTarget `json:"next_target,omitempty"`
	Blockers   []string         `json:"blockers"`
	Active     *DBUpgradeRun    `json:"active,omitempty"`
	History    []DBUpgradeRun   `json:"history"`
}

DBUpgradesResource is GET /api/v1/databases/{name}/upgrades.

type DBVersionInfo

type DBVersionInfo struct {
	Version     string `json:"version"`
	Channel     string `json:"channel"`
	Released    string `json:"released,omitempty"`
	EOL         string `json:"eol,omitempty"`
	Recommended bool   `json:"recommended"`
}

DBVersionInfo is one selectable database version.

type DBVersionSource

type DBVersionSource struct {
	EOLURL          string `json:"eol_url,omitempty"`
	TagsURL         string `json:"tags_url,omitempty"`
	ReleaseNotesURL string `json:"release_notes_url,omitempty"`
}

DBVersionSource links to where a version list came from.

type DBVersions

type DBVersions struct {
	Engine      string          `json:"engine"`
	Origin      string          `json:"origin"`
	Versions    []DBVersionInfo `json:"versions"`
	Source      DBVersionSource `json:"source"`
	GeneratedAt string          `json:"generated_at,omitempty"`
	FetchedAt   string          `json:"fetched_at,omitempty"`
	Freshness   string          `json:"freshness"`
	Message     string          `json:"message,omitempty"`
	Cooldown    bool            `json:"cooldown,omitempty"`
}

DBVersions is GET /api/v1/database-versions?engine=.

type DNSCapabilities added in v0.2.0

type DNSCapabilities struct {
	Proxied      bool `json:"proxied"`
	Routing      bool `json:"routing"`
	HealthChecks bool `json:"health_checks"`
	ApexCNAME    bool `json:"apex_cname"`
}

DNSCapabilities mirrors internal/dnszones.Capabilities.

type DNSChange added in v0.2.0

type DNSChange struct {
	Action string       `json:"action"`
	Set    DNSRecordSet `json:"set"`
	Issues []DNSIssue   `json:"issues,omitempty"`
}

DNSChange is one planned change.

type DNSDelegation added in v0.2.0

type DNSDelegation struct {
	Delegation struct {
		Domain    string                  `json:"domain"`
		State     string                  `json:"state"`
		Expected  []string                `json:"expected"`
		Resolvers []DNSResolverDelegation `json:"resolvers"`
		Elsewhere []string                `json:"elsewhere,omitempty"`
	} `json:"delegation"`
	CheckedAt string `json:"checked_at"`
}

DNSDelegation is GET .../delegation.

type DNSHealthCheck added in v0.2.0

type DNSHealthCheck struct {
	ID               string `json:"id,omitempty"`
	Type             string `json:"type"`
	IPAddress        string `json:"ip_address,omitempty"`
	FQDN             string `json:"fqdn,omitempty"`
	Port             int32  `json:"port,omitempty"`
	ResourcePath     string `json:"resource_path,omitempty"`
	RequestInterval  int32  `json:"request_interval,omitempty"`
	FailureThreshold int32  `json:"failure_threshold,omitempty"`
}

DNSHealthCheck mirrors internal/dnszones.HealthCheck.

type DNSImportRequest added in v0.2.0

type DNSImportRequest struct {
	Format  string `json:"format"`
	Content string `json:"content"`
	Replace bool   `json:"replace,omitempty"`
	Apply   bool   `json:"apply,omitempty"`
	Confirm string `json:"confirm,omitempty"`
}

DNSImportRequest is POST .../records/import.

type DNSImportResult added in v0.2.0

type DNSImportResult struct {
	Plan struct {
		Changes []DNSChange    `json:"changes"`
		Summary map[string]int `json:"summary"`
		Blocked bool           `json:"blocked"`
	} `json:"plan"`
	Warnings []string `json:"warnings,omitempty"`
	Errors   []string `json:"errors,omitempty"`
	Applied  int      `json:"applied"`
}

DNSImportResult is the import and template response.

type DNSIssue added in v0.2.0

type DNSIssue struct {
	Severity string `json:"severity"`
	Code     string `json:"code"`
	Message  string `json:"message"`
}

DNSIssue is a conflict or warning on a record set.

type DNSPropagation added in v0.2.0

type DNSPropagation struct {
	Name     string                 `json:"name"`
	Type     string                 `json:"type"`
	Expected []string               `json:"expected,omitempty"`
	Answers  []DNSPropagationAnswer `json:"answers"`
	Agree    bool                   `json:"agree"`
}

DNSPropagation is GET /api/v1/dns/check.

type DNSPropagationAnswer added in v0.2.0

type DNSPropagationAnswer struct {
	Server  string   `json:"server"`
	Source  string   `json:"source"`
	Values  []string `json:"values,omitempty"`
	TTL     uint32   `json:"ttl"`
	CNAME   string   `json:"cname,omitempty"`
	Error   string   `json:"error,omitempty"`
	Matches *bool    `json:"matches,omitempty"`
}

DNSPropagationAnswer is one server's answer in a check.

type DNSProviderPlugin

type DNSProviderPlugin struct {
	Plugin   string `json:"plugin"`
	Provider string `json:"provider"`
}

DNSProviderPlugin is the dns_provider plugin chosen for DNS writes, empty for the built-in client.

type DNSRecordKey added in v0.2.0

type DNSRecordKey struct {
	Name          string `json:"name"`
	Type          string `json:"type"`
	SetIdentifier string `json:"set_identifier,omitempty"`
}

DNSRecordKey identifies a record set.

type DNSRecordResource added in v0.2.0

type DNSRecordResource struct {
	Name       string `json:"name"`
	Type       string `json:"type"`
	Value      string `json:"value"`
	TTLSeconds int    `json:"ttl_seconds"`
	Status     string `json:"status,omitempty"`
}

DNSRecordResource mirrors internal/api's dnsRecordResource (internal/api/dns_records.go): one A/AAAA/CNAME/TXT/MX/SRV/CAA record, used both in GET .../dns-records's own Records list and as the request body shape for create/update/delete.

type DNSRecordSet added in v0.2.0

type DNSRecordSet struct {
	Name          string   `json:"name"`
	Type          string   `json:"type"`
	TTL           int      `json:"ttl"`
	Values        []string `json:"values"`
	Proxied       bool     `json:"proxied,omitempty"`
	Routing       string   `json:"routing,omitempty"`
	SetIdentifier string   `json:"set_identifier,omitempty"`
	Weight        *int64   `json:"weight,omitempty"`
	Failover      string   `json:"failover,omitempty"`
	HealthCheckID string   `json:"health_check_id,omitempty"`
	Managed       bool     `json:"managed,omitempty"`
	Alias         *struct {
		DNSName string `json:"dns_name"`
	} `json:"alias,omitempty"`
}

DNSRecordSet mirrors internal/dnszones.RecordSet.

type DNSRecordSuggestion added in v0.2.0

type DNSRecordSuggestion struct {
	Type        string `json:"type"`
	Name        string `json:"name"`
	Value       string `json:"value"`
	Alternative bool   `json:"alternative,omitempty"`
}

DNSRecordSuggestion is one record to create so a domain reaches this server.

type DNSRecordWrite added in v0.2.0

type DNSRecordWrite struct {
	Record DNSRecordSet `json:"record"`
	Issues []DNSIssue   `json:"issues,omitempty"`
}

DNSRecordWrite is the create and update response.

type DNSRecordsList added in v0.2.0

type DNSRecordsList struct {
	Zone     DNSZone        `json:"zone"`
	Provider string         `json:"provider"`
	Records  []DNSRecordSet `json:"records"`
	Total    int            `json:"total"`
}

DNSRecordsList is GET /api/v1/dns/zones/{zone}/records.

type DNSRecordsResponse added in v0.2.0

type DNSRecordsResponse struct {
	Domain   string              `json:"domain"`
	Provider string              `json:"provider"`
	Zone     string              `json:"zone"`
	Records  []DNSRecordResource `json:"records"`
}

DNSRecordsResponse mirrors internal/api's dnsRecordsResponse: GET/ POST/PUT/DELETE .../dns-records all return this same shape, so the caller always sees the zone's full, current record list.

type DNSResolverDelegation added in v0.2.0

type DNSResolverDelegation struct {
	Server      string   `json:"server"`
	NameServers []string `json:"name_servers,omitempty"`
	Verdict     string   `json:"verdict"`
	Error       string   `json:"error,omitempty"`
}

DNSResolverDelegation is one resolver's NS answer.

type DNSZone added in v0.2.0

type DNSZone struct {
	ID          string   `json:"id"`
	Name        string   `json:"name"`
	Provider    string   `json:"provider"`
	Status      string   `json:"status,omitempty"`
	RecordCount *int     `json:"record_count,omitempty"`
	NameServers []string `json:"name_servers"`
	Private     bool     `json:"private,omitempty"`
	ModifiedAt  string   `json:"modified_at,omitempty"`
}

DNSZone mirrors internal/dnszones.Zone.

type DNSZoneResult added in v0.2.0

type DNSZoneResult struct {
	Domain     string `json:"domain"`
	Provider   string `json:"provider"`
	Configured bool   `json:"configured"`
	Found      bool   `json:"found"`
	Zone       string `json:"zone,omitempty"`
	Message    string `json:"message,omitempty"`
}

DNSZoneResult mirrors GET /api/v1/dns/zone.

type DNSZonesList added in v0.2.0

type DNSZonesList struct {
	Provider     string          `json:"provider"`
	Providers    []string        `json:"providers"`
	Capabilities DNSCapabilities `json:"capabilities"`
	Zones        []DNSZone       `json:"zones"`
}

DNSZonesList is GET /api/v1/dns/zones.

type DashboardResource

type DashboardResource struct {
	ID        string          `json:"id"`
	Owner     string          `json:"owner"`
	Scope     string          `json:"scope"`
	ProjectID string          `json:"project_id,omitempty"`
	IsDefault bool            `json:"is_default"`
	Name      string          `json:"name"`
	Editable  bool            `json:"editable"`
	CreatedAt time.Time       `json:"created_at"`
	UpdatedAt time.Time       `json:"updated_at"`
	Doc       json.RawMessage `json:"doc"`
}

DashboardResource mirrors a custom dashboard; Doc is the portable document, kept raw so export round trips exactly.

type DashboardTemplate

type DashboardTemplate struct {
	Key         string          `json:"key"`
	NeedsTarget string          `json:"needs_target,omitempty"`
	Doc         json.RawMessage `json:"doc"`
}

DashboardTemplate is a built-in starter dashboard.

type DashboardURLResource added in v0.2.0

type DashboardURLResource struct {
	DashboardURL string `json:"dashboard_url"`
}

DashboardURLResource mirrors internal/api's dashboardURLResource (GET/PUT /api/v1/settings/dashboard-url).

type DashboardWrite

type DashboardWrite struct {
	Scope     string          `json:"scope,omitempty"`
	ProjectID string          `json:"project_id,omitempty"`
	IsDefault bool            `json:"is_default,omitempty"`
	Doc       json.RawMessage `json:"doc"`
}

DashboardWrite is the body of a dashboard create or update.

type DataCopyFailure added in v0.2.0

type DataCopyFailure struct {
	Code      string `json:"code"`
	Summary   string `json:"summary"`
	Hint      string `json:"hint"`
	Technical string `json:"technical,omitempty"`
}

DataCopyFailure is a failed copy in plain words, with the redacted raw error under Technical.

type DataCopySource added in v0.2.0

type DataCopySource struct {
	Host         string `json:"host"`
	Port         int    `json:"port,omitempty"`
	User         string `json:"user,omitempty"`
	Password     string `json:"password,omitempty"`
	Database     string `json:"database,omitempty"`
	AuthDatabase string `json:"auth_database,omitempty"`
	TLS          bool   `json:"tls,omitempty"`
}

DataCopySource locates the database to copy from. Password is sent in the request body only and is never stored by the control plane.

type DataCopyStatus added in v0.2.0

type DataCopyStatus struct {
	Database       string           `json:"database"`
	Engine         string           `json:"engine"`
	Status         string           `json:"status"`
	Reason         string           `json:"reason,omitempty"`
	Failure        *DataCopyFailure `json:"failure,omitempty"`
	NextAction     string           `json:"next_action,omitempty"`
	SourceHost     string           `json:"source_host,omitempty"`
	SourcePort     int              `json:"source_port,omitempty"`
	SourceDatabase string           `json:"source_database,omitempty"`
	Checked        int              `json:"checked"`
	Mismatched     int              `json:"mismatched"`
	Tables         []DataCopyTable  `json:"tables,omitempty"`
	StartedAt      string           `json:"started_at,omitempty"`
	FinishedAt     string           `json:"finished_at,omitempty"`
}

DataCopyStatus is one database's copy state.

type DataCopyTable added in v0.2.0

type DataCopyTable struct {
	Name   string `json:"name"`
	Source int64  `json:"source"`
	Target int64  `json:"target"`
	OK     bool   `json:"ok"`
}

DataCopyTable is one table or collection compared across both sides.

type DatabaseClient added in v0.2.0

type DatabaseClient struct {
	App         string `json:"app"`
	Via         string `json:"via"`
	ProjectName string `json:"project_name,omitempty"`
	Environment string `json:"environment,omitempty"`
	InScope     bool   `json:"in_scope"`
	ScopeReason string `json:"scope_reason,omitempty"`
}

DatabaseClient is one app that reaches a database.

type DatabaseColumnResource added in v0.2.0

type DatabaseColumnResource struct {
	Name       string `json:"name"`
	Type       string `json:"type"`
	Nullable   bool   `json:"nullable"`
	Default    string `json:"default,omitempty"`
	PrimaryKey bool   `json:"primary_key"`
}

DatabaseColumnResource is one column in GET /databases/{name}/schema.

type DatabaseCredential added in v0.2.0

type DatabaseCredential struct {
	Username     string `json:"username"`
	Password     string `json:"password"`
	Database     string `json:"database"`
	Host         string `json:"host"`
	Port         int    `json:"port"`
	SSLMode      string `json:"sslmode"`
	InternalURL  string `json:"internal_url"`
	ExternalURL  string `json:"external_url,omitempty"`
	ExternalNote string `json:"external_note,omitempty"`
	ExpiresAt    string `json:"expires_at,omitempty"`
}

DatabaseCredential is shown once by the server and is never stored.

type DatabaseEngineResource

type DatabaseEngineResource struct {
	ID             string `json:"id"`
	Label          string `json:"label"`
	DefaultVersion string `json:"default_version"`
}

DatabaseEngineResource mirrors internal/api's databaseEngineResource (internal/api/database_engines.go): one entry from GET /api/v1/database-engines, the dynamic registry backing the creation wizard's engine picker.

type DatabaseGrant added in v0.2.0

type DatabaseGrant struct {
	PolicyName string   `json:"policy_name"`
	Principal  string   `json:"principal"`
	Applied    bool     `json:"applied"`
	Notes      []string `json:"notes"`
}

DatabaseGrant is the grant response.

type DatabaseGrantRequest added in v0.2.0

type DatabaseGrantRequest struct {
	Template      string `json:"template"`
	PrincipalType string `json:"principal_type"`
	PrincipalID   string `json:"principal_id"`
	Preview       bool   `json:"preview,omitempty"`
}

DatabaseGrantRequest is POST /databases/{name}/access/grants.

type DatabaseIndexResource added in v0.2.0

type DatabaseIndexResource struct {
	Name       string `json:"name"`
	Definition string `json:"definition"`
	Unique     bool   `json:"unique"`
	Primary    bool   `json:"primary"`
}

DatabaseIndexResource is one index in the schema listing.

type DatabaseLink struct {
	App    string `json:"app"`
	EnvVar string `json:"env_var"`
	Field  string `json:"field"`
}

DatabaseLink is one app a database injects a connection env var into.

type DatabaseNetwork added in v0.2.0

type DatabaseNetwork struct {
	Database string `json:"database"`
	Running  bool   `json:"running"`
	Internal struct {
		Host    string `json:"host"`
		Address string `json:"address,omitempty"`
		Port    int    `json:"port"`
	} `json:"internal"`
	Networks []struct {
		Name    string `json:"name"`
		Address string `json:"address,omitempty"`
		Kind    string `json:"kind"`
	} `json:"networks"`
	Published *struct {
		HostPort      int      `json:"host_port"`
		ContainerPort int      `json:"container_port"`
		Bind          []string `json:"bind"`
		Class         string   `json:"class"`
	} `json:"published,omitempty"`
	Clients []DatabaseClient `json:"clients"`
	Verdict struct {
		Level string `json:"level"`
		Text  string `json:"text"`
	} `json:"verdict"`
	Rules struct {
		Port         int            `json:"port,omitempty"`
		Active       bool           `json:"active"`
		Allow        []DatabaseRule `json:"allow"`
		Missing      []string       `json:"missing,omitempty"`
		Extra        []string       `json:"extra,omitempty"`
		CanRestrict  bool           `json:"can_restrict"`
		CannotReason string         `json:"cannot_restrict_reason,omitempty"`
	} `json:"rules"`
	Scope struct {
		Current     string `json:"current"`
		ProjectName string `json:"project_name,omitempty"`
		Environment string `json:"environment,omitempty"`
	} `json:"scope"`
	TLS struct {
		Supported bool   `json:"supported"`
		Enabled   bool   `json:"enabled"`
		Required  bool   `json:"required"`
		State     string `json:"state,omitempty"`
		Drift     bool   `json:"drift"`
	} `json:"tls"`
	Caveats []string `json:"caveats"`
}

DatabaseNetwork is GET /databases/{name}/network.

type DatabasePasswordRotation

type DatabasePasswordRotation struct {
	Database        string   `json:"database"`
	Engine          string   `json:"engine"`
	Supported       bool     `json:"supported"`
	Reason          string   `json:"reason,omitempty"`
	RestartRequired bool     `json:"restart_required"`
	Apps            []string `json:"apps"`
	SuspendedApps   []string `json:"suspended_apps"`
	State           string   `json:"state"`
	LastError       string   `json:"last_error,omitempty"`
	LastChangedAt   string   `json:"last_changed_at,omitempty"`
	AgeDays         *int     `json:"age_days,omitempty"`
	IntervalDays    int      `json:"interval_days"`
	NextDue         string   `json:"next_due,omitempty"`
	RestartedApps   []string `json:"restarted_apps,omitempty"`
	RotatedAt       string   `json:"rotated_at,omitempty"`
}

DatabasePasswordRotation mirrors internal/api's databasePasswordRotationResource.

type DatabasePolicyRef added in v0.2.0

type DatabasePolicyRef struct {
	ID          string   `json:"id"`
	Name        string   `json:"name"`
	Principals  []string `json:"principals"`
	ScopedToOne bool     `json:"scoped_to_database"`
}

DatabasePolicyRef is a policy that touches a database.

type DatabasePrincipal added in v0.2.0

type DatabasePrincipal struct {
	Type      string   `json:"type"`
	ID        string   `json:"id"`
	Name      string   `json:"name"`
	Effective []string `json:"effective"`
	Via       []string `json:"via"`
}

DatabasePrincipal is a user or token with effective abilities on a database.

type DatabasePublicAccessResource

type DatabasePublicAccessResource struct {
	DatabaseName       string `json:"database_name"`
	PubliclyAccessible bool   `json:"publicly_accessible"`
	PublicPort         int    `json:"public_port,omitempty"`
	// BindAddress: see SetDatabasePublicAccessRequest's own field doc
	// comment for what this holds.
	BindAddress string `json:"bind_address,omitempty"`
}

DatabasePublicAccessResource mirrors internal/api's databasePublicAccessResource (internal/api/database_public_access.go): PUT/DELETE .../public-access only ever touch these three fields.

type DatabaseQueryRequest added in v0.2.0

type DatabaseQueryRequest struct {
	SQL     string `json:"sql"`
	Analyze bool   `json:"analyze,omitempty"`
	Confirm string `json:"confirm,omitempty"`
}

DatabaseQueryRequest is the body of the query, write, and explain routes.

type DatabaseQueryResult added in v0.2.0

type DatabaseQueryResult struct {
	Columns     []string    `json:"columns"`
	Rows        [][]*string `json:"rows"`
	RowCount    int         `json:"row_count"`
	Truncated   bool        `json:"truncated"`
	DurationMs  int64       `json:"duration_ms"`
	Mode        string      `json:"mode"`
	Kind        string      `json:"kind"`
	Fingerprint string      `json:"fingerprint"`
}

DatabaseQueryResult is the response of the query routes. A nil cell is NULL.

type DatabaseResource

type DatabaseResource struct {
	Name    string `json:"name"`
	Engine  string `json:"engine"`
	Version string `json:"version"`
	NodeID  string `json:"node_id,omitempty"`
	// AutoPlaced mirrors internal/api's databaseResource.AutoPlaced: see
	// AppResource's identically-named field doc comment.
	AutoPlaced bool `json:"auto_placed,omitempty"`
	// ProjectID mirrors internal/api's databaseResource.ProjectID:
	// response-only, set via PUT /api/v1/databases/{name}/project.
	ProjectID string `json:"project_id,omitempty"`
	// ExistingVolume is request-only: "reuse" or "discard" the data volume a
	// deleted database of the same name left behind.
	ExistingVolume string `json:"existing_volume,omitempty"`
	// Resources, PubliclyAccessible, PublicPort, and the Backup* fields
	// are set through their own dedicated routes (SetDatabaseResources,
	// SetDatabasePublicAccess, SetBackupSchedule), never through this
	// resource's own create/update body; see internal/api's
	// databaseResource for the identical boundary server-side.
	Resources          *ServiceResources `json:"resources,omitempty"`
	PubliclyAccessible bool              `json:"publicly_accessible,omitempty"`
	PublicPort         int               `json:"public_port,omitempty"`
	BackupTargetID     string            `json:"backup_target_id,omitempty"`
	BackupSchedule     string            `json:"backup_schedule,omitempty"`
	BackupRetain       int               `json:"backup_retain,omitempty"`
	BackupRetainDays   int               `json:"backup_retain_days,omitempty"`
	// Suspended is set via POST /api/v1/databases/{name}/stop and
	// .../start (StopDatabase/StartDatabase), the same response-only
	// boundary NodeID/ProjectID already establish.
	Suspended bool `json:"suspended,omitempty"`
	// TLSEnabled mirrors internal/api's databaseResource.TLSEnabled:
	// response-only, computed fresh on every read, true when this
	// database's connection string (DATABASE_URL/REDIS_URL, injected
	// into consuming app containers) is TLS-encrypted.
	TLSEnabled bool `json:"tls_enabled,omitempty"`
}

DatabaseResource mirrors internal/api's databaseResource (internal/api/databases.go). NodeID is response-only on update, but settable at create time as an explicit placement override, the same boundary AppResource's own NodeID field documents.

type DatabaseRule added in v0.2.0

type DatabaseRule struct {
	Source      string `json:"source"`
	Description string `json:"description,omitempty"`
}

DatabaseRule is one allowed source.

type DatabaseRulesPlan added in v0.2.0

type DatabaseRulesPlan struct {
	Commands []string `json:"commands"`
	Drops    string   `json:"drops"`
	Allow    []string `json:"allow"`
	Warnings []string `json:"warnings"`
	Applied  bool     `json:"applied"`
}

DatabaseRulesPlan is the rules preview or apply response.

type DatabaseRulesRequest added in v0.2.0

type DatabaseRulesRequest struct {
	Allow           []DatabaseRule `json:"allow"`
	LocalContainers bool           `json:"local_containers,omitempty"`
	Confirm         bool           `json:"confirm,omitempty"`
}

DatabaseRulesRequest is the body of the network rules preview and apply calls.

type DatabaseSchemaNodeResource added in v0.2.0

type DatabaseSchemaNodeResource struct {
	Name   string                  `json:"name"`
	Tables []DatabaseTableResource `json:"tables"`
}

DatabaseSchemaNodeResource groups tables under one schema.

type DatabaseSchemaResource added in v0.2.0

type DatabaseSchemaResource struct {
	Engine  string                       `json:"engine"`
	Schemas []DatabaseSchemaNodeResource `json:"schemas"`
}

DatabaseSchemaResource is GET /api/v1/databases/{name}/schema.

type DatabaseScopeResult added in v0.2.0

type DatabaseScopeResult struct {
	Scope           string                 `json:"scope"`
	Applied         bool                   `json:"applied"`
	ConfirmRequired bool                   `json:"confirm_required"`
	Verdicts        []DatabaseScopeVerdict `json:"verdicts"`
	Lost            []DatabaseScopeVerdict `json:"lost"`
	Notes           []string               `json:"notes"`
}

DatabaseScopeResult is the scope dry-run or apply response.

type DatabaseScopeVerdict added in v0.2.0

type DatabaseScopeVerdict struct {
	App struct {
		Name string `json:"name"`
	} `json:"app"`
	Allowed bool   `json:"allowed"`
	Reason  string `json:"reason,omitempty"`
}

DatabaseScopeVerdict is one referencing app's fate under a scope.

type DatabaseTTLLimits added in v0.2.0

type DatabaseTTLLimits struct {
	MinMinutes     int `json:"min_minutes"`
	MaxMinutes     int `json:"max_minutes"`
	DefaultMinutes int `json:"default_minutes"`
}

DatabaseTTLLimits are the allowed temporary credential lifetimes.

type DatabaseTableResource added in v0.2.0

type DatabaseTableResource struct {
	Name        string                   `json:"name"`
	Kind        string                   `json:"kind"`
	RowEstimate int64                    `json:"row_estimate"`
	SizeBytes   int64                    `json:"size_bytes"`
	Columns     []DatabaseColumnResource `json:"columns"`
	Indexes     []DatabaseIndexResource  `json:"indexes"`
}

DatabaseTableResource is one table or view in the schema listing.

type DatabaseTemp added in v0.2.0

type DatabaseTemp struct {
	ID        string `json:"id"`
	Role      string `json:"role"`
	Preset    string `json:"preset"`
	CreatedBy string `json:"created_by"`
	CreatedAt string `json:"created_at"`
	ExpiresAt string `json:"expires_at"`
	State     string `json:"state"`
}

DatabaseTemp is one tracked temporary credential, without its secret.

type DatabaseTempIssued added in v0.2.0

type DatabaseTempIssued struct {
	Temp       DatabaseTemp       `json:"temp"`
	Credential DatabaseCredential `json:"credential"`
	Clamped    bool               `json:"clamped"`
	Limits     DatabaseTTLLimits  `json:"limits"`
}

DatabaseTempIssued is the issue response.

type DatabaseTempList added in v0.2.0

type DatabaseTempList struct {
	Items  []DatabaseTemp    `json:"items"`
	Limits DatabaseTTLLimits `json:"limits"`
}

DatabaseTempList is GET /databases/{name}/access/temp.

type DatabaseUser added in v0.2.0

type DatabaseUser struct {
	Name            string `json:"name"`
	Kind            string `json:"kind"`
	Preset          string `json:"preset,omitempty"`
	CanLogin        bool   `json:"can_login"`
	Superuser       bool   `json:"superuser"`
	CreateDB        bool   `json:"create_db"`
	CreateRole      bool   `json:"create_role"`
	ConnectionLimit int    `json:"connection_limit"`
	ValidUntil      string `json:"valid_until,omitempty"`
	Expired         bool   `json:"expired"`
	Connections     int    `json:"connections"`
	Protected       bool   `json:"protected"`
	Managed         bool   `json:"managed"`
	CreatedBy       string `json:"created_by,omitempty"`
	CreatedAt       string `json:"created_at,omitempty"`
}

DatabaseUser mirrors internal/api's databaseUserResource. It never holds a secret.

type DatabaseUserCreateRequest added in v0.2.0

type DatabaseUserCreateRequest struct {
	Name            string `json:"name"`
	Preset          string `json:"preset,omitempty"`
	ConnectionLimit int    `json:"connection_limit,omitempty"`
	ExpiresAt       string `json:"expires_at,omitempty"`
}

DatabaseUserCreateRequest is POST /databases/{name}/users.

type DatabaseUserCreated added in v0.2.0

type DatabaseUserCreated struct {
	User       DatabaseUser       `json:"user"`
	Credential DatabaseCredential `json:"credential"`
}

DatabaseUserCreated is the create response.

type DatabaseWho added in v0.2.0

type DatabaseWho struct {
	Database   string              `json:"database"`
	Principals []DatabasePrincipal `json:"principals"`
	Policies   []DatabasePolicyRef `json:"policies"`
	Templates  []string            `json:"grant_templates"`
}

DatabaseWho is GET /databases/{name}/access/principals.

type DeleteAppResult added in v0.2.0

type DeleteAppResult struct {
	Pending bool   `json:"pending"`
	Message string `json:"message,omitempty"`
	Error   string `json:"error,omitempty"`
}

DeleteAppResult is DELETE /api/v1/apps/{name}'s outcome: Pending is true when the app is deleted but its containers are not yet confirmed gone.

type DeployApprovalDecisionResult added in v0.2.0

type DeployApprovalDecisionResult struct {
	Approval DeployApprovalResource `json:"approval"`
	App      AppResource            `json:"app"`
}

DeployApprovalDecisionResult mirrors internal/api's deployApprovalDecisionResponse (POST .../deploy-approvals/{id}/approve).

type DeployApprovalListResult added in v0.2.0

type DeployApprovalListResult struct {
	Approvals []DeployApprovalResource `json:"approvals"`
}

DeployApprovalListResult mirrors internal/api's deployApprovalListResponse (GET /api/v1/deploy-approvals).

type DeployApprovalResource added in v0.2.0

type DeployApprovalResource struct {
	ID                string `json:"id"`
	ServiceName       string `json:"service_name"`
	SourceServiceName string `json:"source_service_name,omitempty"`
	EnvironmentID     string `json:"environment_id"`
	Action            string `json:"action"`
	Image             string `json:"image"`
	Status            string `json:"status"`
	RequestedByType   string `json:"requested_by_type"`
	RequestedBy       string `json:"requested_by"`
	RequestedByName   string `json:"requested_by_name"`
	ApprovedByType    string `json:"approved_by_type,omitempty"`
	ApprovedBy        string `json:"approved_by,omitempty"`
	ApprovedByName    string `json:"approved_by_name,omitempty"`
	Reason            string `json:"reason,omitempty"`
	CreatedAt         string `json:"created_at"`
	ExpiresAt         string `json:"expires_at"`
	DecidedAt         string `json:"decided_at,omitempty"`
}

DeployApprovalResource mirrors internal/api's deployApprovalResource (deploy_approvals.go): a pending or decided two-person approval gate on a deploy/promote into a protected environment.

type DeployAttemptFilter

type DeployAttemptFilter struct {
	Branch string
	Author string
	Commit string
	Status string
	Query  string
	Limit  int
}

DeployAttemptFilter narrows ListDeployAttemptsFiltered; empty fields are ignored.

type DeployAttemptResource added in v0.2.0

type DeployAttemptResource struct {
	// DeployURL is the attempt's own immutable address while a retained copy exists.
	DeployURL   string     `json:"deploy_url,omitempty"`
	Live        bool       `json:"live,omitempty"`
	ID          string     `json:"id"`
	ServiceName string     `json:"service_name"`
	Image       string     `json:"image"`
	CommitSHA   string     `json:"commit_sha,omitempty"`
	Source      string     `json:"source,omitempty"`
	Status      string     `json:"status"`
	StartedAt   time.Time  `json:"started_at"`
	FinishedAt  *time.Time `json:"finished_at,omitempty"`
	Error       string     `json:"error,omitempty"`
	// DetectedFramework is the wizard's pre-flight detection result for
	// this build, e.g. "Node.js"; empty when detection was skipped
	// (a CLI or webhook-triggered build) or found nothing buildable.
	DetectedFramework string `json:"detected_framework,omitempty"`

	Branch        string `json:"branch,omitempty"`
	CommitMessage string `json:"commit_message,omitempty"`
	Author        string `json:"author,omitempty"`
	Trigger       string `json:"trigger,omitempty"`

	ImageDigest    string `json:"image_digest,omitempty"`
	DigestReason   string `json:"digest_reason,omitempty"`
	RolloutState   string `json:"rollout_state,omitempty"`
	RunningImageID string `json:"running_image_id,omitempty"`
	Sequence       int64  `json:"sequence,omitempty"`
	Reason         string `json:"reason,omitempty"`

	QueuedAt      *time.Time  `json:"queued_at,omitempty"`
	QueuePosition int         `json:"queue_position,omitempty"`
	WaitReason    string      `json:"wait_reason,omitempty"`
	BlockedBy     string      `json:"blocked_by,omitempty"`
	SupersededBy  string      `json:"superseded_by,omitempty"`
	CanceledBy    string      `json:"canceled_by,omitempty"`
	SBOMPackages  *int        `json:"sbom_packages,omitempty"`
	VulnCounts    *VulnCounts `json:"vuln_counts,omitempty"`
	// Failure classifies why the deploy failed or is blocked; absent otherwise.
	Failure *DeployFailure `json:"failure,omitempty"`
	// Outcome is set by GetDeploy only: in_progress, healthy, failed,
	// canceled, superseded or blocked.
	Outcome string `json:"outcome,omitempty"`
	// Phase is the stored attempt status when GetDeploy reports a derived
	// Status (building, rolling_out, failed).
	Phase string `json:"phase,omitempty"`
}

DeployAttemptResource mirrors internal/api's deployAttemptResource (internal/api/deploy_attempts.go): one row of GET /api/v1/apps/{name}/deploy-attempts, additive to the reconcile conditions GetDeployStatus already returns, not a replacement for it.

type DeployCompareEnvChange

type DeployCompareEnvChange struct {
	Key    string `json:"key"`
	Kind   string `json:"kind"`
	Status string `json:"status"`
	From   string `json:"from,omitempty"`
	To     string `json:"to,omitempty"`
}

DeployCompareEnvChange is one env var key that differs between two deploys.

type DeployCompareField

type DeployCompareField struct {
	Field string `json:"field"`
	From  string `json:"from"`
	To    string `json:"to"`
}

DeployCompareField mirrors internal/api's deployCompareField: one field that differs between From and To.

type DeployCompareResource

type DeployCompareResource struct {
	ServiceName         string                   `json:"service_name"`
	From                DeployCompareSide        `json:"from"`
	To                  DeployCompareSide        `json:"to"`
	Changes             []DeployCompareField     `json:"changes"`
	EnvChanges          []DeployCompareEnvChange `json:"env_changes,omitempty"`
	Commits             []GitCommitSummary       `json:"commits"`
	CommitsNote         string                   `json:"commits_note,omitempty"`
	UnsnapshottedFields []string                 `json:"unsnapshotted_fields"`
	Note                string                   `json:"note"`
}

DeployCompareResource mirrors internal/api's deployCompareResource, GET /api/v1/apps/{name}/deploys/compare's response. UnsnapshottedFields and Note are the honest limitation this task's own design note requires: deploy_attempts never snapshotted env/resources/ domains/etc per attempt, so those cannot be diffed across past deploys, only reported as not tracked.

type DeployCompareSide

type DeployCompareSide struct {
	DeployID    string     `json:"deploy_id,omitempty"`
	IsCurrent   bool       `json:"is_current"`
	Image       string     `json:"image"`
	ImageDigest string     `json:"image_digest,omitempty"`
	CommitSHA   string     `json:"commit_sha,omitempty"`
	Source      string     `json:"source,omitempty"`
	Status      string     `json:"status,omitempty"`
	StartedAt   *time.Time `json:"started_at,omitempty"`
	FinishedAt  *time.Time `json:"finished_at,omitempty"`
}

DeployCompareSide mirrors internal/api's deployCompareSide (internal/api/deploy_compare.go): one side of a deploy comparison. IsCurrent true and DeployID empty means this side is the app's current live desired state, not a stored attempt.

type DeployFailure added in v0.2.0

type DeployFailure struct {
	Code         string             `json:"code"`
	Cause        string             `json:"cause"`
	FailingStep  string             `json:"failing_step,omitempty"`
	LogExcerpt   string             `json:"log_excerpt,omitempty"`
	SuggestedFix string             `json:"suggested_fix"`
	DocsURL      string             `json:"docs_url"`
	Retryable    bool               `json:"retryable"`
	Fixes        []DeployFailureFix `json:"fixes,omitempty"`
	DeployID     string             `json:"deploy_id"`
	App          string             `json:"app"`
	At           time.Time          `json:"at"`
}

DeployFailure mirrors internal/failure's Failure: the structured cause of a failed or blocked deploy, identical across the API, CLI and MCP.

type DeployFailureFix

type DeployFailureFix struct {
	Code   string `json:"code"`
	Kind   string `json:"kind"`
	Target string `json:"target,omitempty"`
	Hint   string `json:"hint"`
	Match  string `json:"match"`
}

DeployFailureFix mirrors internal/failure.Fix.

type DeployFreezeResource added in v0.2.0

type DeployFreezeResource struct {
	Windows   []FreezeWindowResource `json:"windows"`
	Inherited []FreezeWindowResource `json:"inherited,omitempty"`
	Status    struct {
		Frozen bool       `json:"frozen"`
		Until  *time.Time `json:"until,omitempty"`
		Reason string     `json:"reason,omitempty"`
	} `json:"status"`
}

DeployFreezeResource mirrors internal/api's deployFreezeResource.

type DeployFromCacheRequest

type DeployFromCacheRequest struct {
	Commit         string `json:"commit,omitempty"`
	OverrideFreeze bool   `json:"override_freeze,omitempty"`
	OverrideReason string `json:"override_reason,omitempty"`
}

DeployFromCacheRequest is the body of POST /api/v1/apps/{name}/deploys/from-cache. Commit defaults to the app's last successful source deploy.

type DeployGateResource added in v0.2.0

type DeployGateResource struct {
	DeployID    string                       `json:"deploy_id"`
	Image       string                       `json:"image"`
	Status      string                       `json:"status"`
	Reason      string                       `json:"reason,omitempty"`
	Error       string                       `json:"error,omitempty"`
	Stage       string                       `json:"stage"`
	Terminal    bool                         `json:"terminal"`
	Failed      bool                         `json:"failed"`
	Superseded  bool                         `json:"superseded"`
	Events      []GateEventResource          `json:"events"`
	Settings    DeploySafetySettingsResource `json:"settings"`
	RollbackPin *RollbackTargetResource      `json:"rollback_pin"`
}

DeployGateResource is GET /api/v1/apps/{name}/deploys/{deployId}/gate.

type DeployNotifyTargetResource added in v0.2.0

type DeployNotifyTargetResource struct {
	ID         string `json:"id,omitempty"`
	ResourceID string `json:"resource_id,omitempty"`
	ChannelID  string `json:"channel_id,omitempty"`
	NotifyURL  string `json:"notify_url,omitempty"`
	NotifyKind string `json:"notify_kind,omitempty"`
	Enabled    bool   `json:"enabled"`
}

DeployNotifyTargetResource mirrors internal/api's deployTargetResource (internal/api/deploy_notify_targets.go). NotifyURL/NotifyKind are always the resolved values from the attached channel, response-only.

type DeployPolicy

type DeployPolicy struct {
	Scope     string                      `json:"scope"`
	ScopeID   string                      `json:"scope_id"`
	Rules     map[string]DeployPolicyRule `json:"rules"`
	UpdatedBy string                      `json:"updated_by,omitempty"`
	UpdatedAt *time.Time                  `json:"updated_at,omitempty"`
}

DeployPolicy mirrors internal/api's deployPolicyResource.

type DeployPolicyRule

type DeployPolicyRule struct {
	Mode   string   `json:"mode"`
	Values []string `json:"values,omitempty"`
	Limit  float64  `json:"limit,omitempty"`
}

DeployPolicyRule mirrors internal/policy.Rule.

type DeploySafetyOverrides added in v0.2.0

type DeploySafetyOverrides struct {
	SuccessThreshold *int     `json:"success_threshold"`
	StableWindow     *string  `json:"stable_window"`
	DrainTimeout     *string  `json:"drain_timeout"`
	WatchWindow      *string  `json:"watch_window"`
	WatchMaxRestarts *int     `json:"watch_max_restarts"`
	WatchErrorRate   *float64 `json:"watch_error_rate"`
	WatchMinRequests *int     `json:"watch_min_requests"`
	AutoRollback     *bool    `json:"auto_rollback"`
}

DeploySafetyOverrides is one app's overrides; a nil field inherits the default.

type DeploySafetyResource added in v0.2.0

type DeploySafetyResource struct {
	Overrides DeploySafetyOverrides        `json:"overrides"`
	Defaults  DeploySafetySettingsResource `json:"defaults"`
	Effective DeploySafetySettingsResource `json:"effective"`
}

DeploySafetyResource is GET and PUT /api/v1/apps/{name}/deploy-safety.

type DeploySafetySettingsResource added in v0.2.0

type DeploySafetySettingsResource struct {
	SuccessThreshold int     `json:"success_threshold"`
	StableWindow     string  `json:"stable_window"`
	DrainTimeout     string  `json:"drain_timeout"`
	WatchWindow      string  `json:"watch_window"`
	WatchMaxRestarts int     `json:"watch_max_restarts"`
	WatchErrorRate   float64 `json:"watch_error_rate"`
	WatchMinRequests int     `json:"watch_min_requests"`
	AutoRollback     bool    `json:"auto_rollback"`
	RollbackPins     int     `json:"rollback_pins"`
}

DeploySafetySettingsResource is a fully resolved set of gate and watch settings.

type DeploySpecRequest

type DeploySpecRequest struct {
	RepoURL       string                       `json:"repo_url"`
	Ref           string                       `json:"ref"`
	ImageRepoBase string                       `json:"image_repo_base,omitempty"`
	Services      map[string]DeploySpecService `json:"services"`
	// SingleServiceName overrides the default "<name>-<serviceKey>"
	// naming for the sole entry in Services. Rejected unless Services has
	// exactly one entry.
	SingleServiceName string `json:"single_service_name,omitempty"`
}

DeploySpecRequest mirrors internal/api's deploySpecRequest (internal/api/apps_multi.go): POST /api/v1/apps/{name}/deploy-spec's body, one app.yaml services: map fanned out under app name.

type DeploySpecResult

type DeploySpecResult struct {
	AppID        string                    `json:"app_id"`
	Services     []DeploySpecServiceResult `json:"services"`
	AllSucceeded bool                      `json:"all_succeeded"`
}

DeploySpecResult mirrors internal/api's deploySpecResponse. AllSucceeded false means at least one ServiceKey's own Error is set; the request as a whole still succeeded at fanning out.

type DeploySpecService

type DeploySpecService struct {
	Build     DeploySpecServiceBuild          `json:"build"`
	Domains   []string                        `json:"domains,omitempty"`
	Port      int                             `json:"port,omitempty"`
	Health    *DeploySpecServiceHealth        `json:"health,omitempty"`
	Resources *DeploySpecServiceResources     `json:"resources,omitempty"`
	Env       map[string]DeploySpecServiceEnv `json:"env,omitempty"`
	Replicas  int                             `json:"replicas,omitempty"`
	Strategy  string                          `json:"strategy,omitempty"`
	Hooks     *DeploySpecServiceHooks         `json:"hooks,omitempty"`
}

DeploySpecService mirrors one entry in app.yaml's services: map (internal/spec.Service) as POST /api/v1/apps/{name}/deploy-spec expects to receive it directly, field for field.

type DeploySpecServiceBuild

type DeploySpecServiceBuild struct {
	Type               string `json:"type"`
	Path               string `json:"path,omitempty"`
	BaseDirectory      string `json:"baseDirectory,omitempty"`
	Image              string `json:"image,omitempty"`
	RegistryCredential string `json:"registryCredential,omitempty"`
}

DeploySpecServiceBuild mirrors internal/spec.Build's JSON wire shape: human-written field names, not AppResource's bytes/nanoCPUs encoding.

type DeploySpecServiceEnv

type DeploySpecServiceEnv struct {
	Value    string `json:"value,omitempty"`
	From     string `json:"from,omitempty"`
	Secret   bool   `json:"secret,omitempty"`
	Required bool   `json:"required,omitempty"`
}

DeploySpecServiceEnv mirrors internal/spec.EnvVar's JSON shape. Unlike app.yaml's YAML parsing, no plain-string shorthand: use Value for a literal.

type DeploySpecServiceHealth

type DeploySpecServiceHealth struct {
	Readiness    *DeploySpecServiceProbe `json:"readiness,omitempty"`
	Liveness     *DeploySpecServiceProbe `json:"liveness,omitempty"`
	ReadyTimeout string                  `json:"readyTimeout,omitempty"`
}

DeploySpecServiceHealth mirrors internal/spec.Health.

type DeploySpecServiceHooks

type DeploySpecServiceHooks struct {
	PreDeploy  string `json:"preDeploy,omitempty"`
	PostDeploy string `json:"postDeploy,omitempty"`
}

DeploySpecServiceHooks mirrors internal/spec.Hooks.

type DeploySpecServiceProbe

type DeploySpecServiceProbe struct {
	Path            string   `json:"path,omitempty"`
	Scheme          string   `json:"scheme,omitempty"`
	Host            string   `json:"host,omitempty"`
	TLSSkipVerify   bool     `json:"tls_skip_verify,omitempty"`
	FollowRedirects *bool    `json:"follow_redirects,omitempty"`
	ExpectedStatus  string   `json:"expected_status,omitempty"`
	Exec            []string `json:"exec,omitempty"`
	Interval        string   `json:"interval,omitempty"`
	Timeout         string   `json:"timeout,omitempty"`
	Failures        int      `json:"failures,omitempty"`
}

DeploySpecServiceProbe mirrors internal/spec.Probe: human-readable duration strings ("5s"), not ServiceProbe's nanosecond encoding.

type DeploySpecServiceResources

type DeploySpecServiceResources struct {
	Memory string  `json:"memory,omitempty"`
	CPU    float64 `json:"cpu,omitempty"`
}

DeploySpecServiceResources mirrors internal/spec.Resources: human-readable "512Mi"/0.5 values, not ServiceResources' bytes/ nanoCPUs encoding.

type DeploySpecServiceResult

type DeploySpecServiceResult struct {
	ServiceKey  string `json:"service_key"`
	ServiceName string `json:"service_name"`
	Image       string `json:"image,omitempty"`
	Error       string `json:"error,omitempty"`
}

DeploySpecServiceResult mirrors internal/api's deploySpecServiceResult: one service key's own build+deploy outcome. Error is set on failure, Image on success, matching deploy.ServiceOutcome's own "never both" contract.

type DeployStepEvent added in v0.2.0

type DeployStepEvent struct {
	Step      string `json:"step"`
	Status    string `json:"status"`
	Timestamp string `json:"timestamp"`
	// Key, Reason, Detail and the fields after them are set for traced steps.
	Key        string `json:"key,omitempty"`
	Reason     string `json:"reason,omitempty"`
	Detail     string `json:"detail,omitempty"`
	Service    string `json:"service,omitempty"`
	StartedAt  string `json:"started_at,omitempty"`
	EndedAt    string `json:"ended_at,omitempty"`
	DurationMS int64  `json:"duration_ms,omitempty"`
	Attempts   int    `json:"attempts,omitempty"`
}

DeployStepEvent mirrors internal/api's sseStepEvent.

type DeploySuggestion added in v0.2.0

type DeploySuggestion struct {
	ID       string            `json:"id"`
	Severity string            `json:"severity"`
	Reason   string            `json:"reason"`
	Params   map[string]string `json:"params,omitempty"`
}

DeploySuggestion is one computed next step for an app's deploys.

type DeployTriggerRequest

type DeployTriggerRequest struct {
	Image   string `json:"image"`
	Confirm bool   `json:"confirm,omitempty"`
	// Pull re-resolves the tag and fails if the registry is unreachable.
	Pull           bool   `json:"pull,omitempty"`
	Rollback       bool   `json:"rollback,omitempty"`
	OverrideFreeze bool   `json:"override_freeze,omitempty"`
	OverrideReason string `json:"override_reason,omitempty"`
}

DeployTriggerRequest mirrors internal/api's deployTriggerRequest (internal/api/deploys.go).

type DeployTriggerResult added in v0.2.0

type DeployTriggerResult struct {
	*AppResource
	PendingApproval *DeployApprovalResource `json:"pending_approval,omitempty"`
}

DeployTriggerResult mirrors internal/api's deployTriggerResult (deploys.go): the common case is a flat AppResource on the wire (*AppResource is embedded so those fields promote to the top level, unchanged from before this type existed), PendingApproval is only ever set instead, when the target environment is protected and the deploy/promote was accepted as a pending approval rather than applied.

type DeploymentDay added in v0.2.0

type DeploymentDay struct {
	Date   string `json:"date"`
	Total  int    `json:"total"`
	Failed int    `json:"failed"`
}

DeploymentDay is one sparkline bucket of the deployments summary.

type DeploymentEvent added in v0.2.0

type DeploymentEvent struct {
	Type string `json:"type"`
	Step *struct {
		Name   string `json:"name"`
		Status string `json:"status"`
	} `json:"step,omitempty"`
	Deployment DeploymentResource `json:"deployment"`
}

DeploymentEvent is one message of GET /api/v1/deployments/stream.

type DeploymentList added in v0.2.0

type DeploymentList struct {
	Items      []DeploymentResource `json:"items"`
	NextCursor string               `json:"next_cursor"`
}

DeploymentList is the GET /api/v1/deployments response.

type DeploymentListOptions added in v0.2.0

type DeploymentListOptions struct {
	Statuses    []string
	App         string
	Branch      string
	Triggers    []string
	Environment string
	Since       string
	Until       string
	Query       string
	Live        bool
	PR          int
	Limit       int
	Cursor      string
}

DeploymentListOptions are the GET /api/v1/deployments filters.

func (DeploymentListOptions) Values added in v0.2.0

func (o DeploymentListOptions) Values() url.Values

Values renders the options as a query string, omitting unset filters.

type DeploymentResource added in v0.2.0

type DeploymentResource struct {
	ID              string           `json:"id"`
	App             string           `json:"app"`
	Status          string           `json:"status"`
	Trigger         string           `json:"trigger"`
	Environment     string           `json:"environment"`
	Image           string           `json:"image"`
	ImageRef        string           `json:"image_ref"`
	ImageDigest     string           `json:"image_digest"`
	DigestReason    string           `json:"digest_reason"`
	RolloutState    string           `json:"rollout_state"`
	CommitSHA       string           `json:"commit_sha"`
	Branch          string           `json:"branch"`
	CommitMessage   string           `json:"commit_message"`
	Author          string           `json:"author"`
	PRNumber        *int             `json:"pr_number"`
	StartedAt       time.Time        `json:"started_at"`
	FinishedAt      *time.Time       `json:"finished_at"`
	DurationMS      *int64           `json:"duration_ms"`
	Steps           *DeploymentSteps `json:"steps"`
	ErrorSummary    *string          `json:"error_summary"`
	ReasonCode      string           `json:"reason_code"`
	Reason          string           `json:"reason"`
	RollbackOf      *string          `json:"rollback_of"`
	RolledBackBy    *string          `json:"rolled_back_by"`
	SupersededBy    *string          `json:"superseded_by"`
	IsLive          bool             `json:"is_live"`
	ApprovalID      *string          `json:"approval_id"`
	PreviewImageURL *string          `json:"preview_image_url"`
	SBOMPackages    *int             `json:"sbom_packages"`
	VulnCounts      *VulnCounts      `json:"vuln_counts"`
	Failure         *DeployFailure   `json:"failure,omitempty"`
}

DeploymentResource is one row of GET /api/v1/deployments.

type DeploymentSteps added in v0.2.0

type DeploymentSteps struct {
	Done        int    `json:"done"`
	Running     int    `json:"running"`
	Failed      int    `json:"failed"`
	FailingStep string `json:"failing_step,omitempty"`
}

DeploymentSteps is a live deployment's step tally.

type DeploymentSummary added in v0.2.0

type DeploymentSummary struct {
	Window         string         `json:"window"`
	Counts         map[string]int `json:"counts"`
	InProgress     int            `json:"in_progress"`
	NeedsAttention int            `json:"needs_attention"`
	FailureRate24h *float64       `json:"failure_rate_24h"`
	Duration       struct {
		MedianMS *int64 `json:"median_ms"`
		P95MS    *int64 `json:"p95_ms"`
		Samples  int    `json:"samples"`
	} `json:"duration"`
	PerDay []DeploymentDay `json:"per_day"`
}

DeploymentSummary is the GET /api/v1/deployments/summary response.

type DetectFrameworkResource added in v0.2.0

type DetectFrameworkResource struct {
	Provider      string `json:"provider,omitempty"`
	FrameworkName string `json:"framework_name,omitempty"`
	Detected      bool   `json:"detected"`
	FrameworkID   string `json:"framework_id,omitempty"`
	Port          int    `json:"port,omitempty"`
	PortSource    string `json:"port_source,omitempty"`
}

DetectFrameworkResource mirrors internal/api's detectFrameworkResponse.

type Detection

type Detection struct {
	Framework  string            `json:"framework"`
	Language   string            `json:"language"`
	BuildType  string            `json:"build_type"`
	Confidence string            `json:"confidence"`
	Reasons    []DetectionReason `json:"reasons"`
	Port       struct {
		Value  int    `json:"value"`
		Source string `json:"source"`
	} `json:"port"`
	StartCommand   string `json:"start_command,omitempty"`
	BuildCommand   string `json:"build_command,omitempty"`
	OutputDir      string `json:"output_dir,omitempty"`
	HealthPath     string `json:"health_path"`
	RuntimeVersion struct {
		Value  string `json:"value"`
		Source string `json:"source"`
	} `json:"runtime_version"`
	EnvVars []struct {
		Name        string `json:"name"`
		Source      string `json:"source"`
		Required    bool   `json:"required"`
		SecretGuess bool   `json:"secret_guess"`
	} `json:"env_vars"`
	Warnings []ImportWarning `json:"warnings"`
}

Detection mirrors internal/appwizard's Detection. EnvVars never carry a value.

type DetectionReason

type DetectionReason struct {
	Signal string `json:"signal"`
	Detail string `json:"detail"`
}

DetectionReason mirrors internal/appwizard's Reason.

type DeviceActivity added in v0.2.0

type DeviceActivity struct {
	ID          string    `json:"id"`
	State       string    `json:"state"`
	ClientName  string    `json:"client_name"`
	RequesterIP string    `json:"requester_ip"`
	UserAgent   string    `json:"user_agent"`
	CreatedAt   time.Time `json:"created_at"`
	ExpiresAt   time.Time `json:"expires_at"`
	Dismissible bool      `json:"dismissible"`
	Dismissed   bool      `json:"dismissed"`
	AuditPath   string    `json:"audit_path"`
}

DeviceActivity is one recent CLI login in any state. It never carries a user code or device code.

type DevicePendingLogin added in v0.2.0

type DevicePendingLogin struct {
	ClientName  string    `json:"client_name"`
	RequesterIP string    `json:"requester_ip"`
	UserAgent   string    `json:"user_agent"`
	CreatedAt   time.Time `json:"created_at"`
	ExpiresAt   time.Time `json:"expires_at"`
}

DevicePendingLogin is one waiting CLI login as the read-only summary shows it. It never carries a user code or device code.

type DeviceStartRequest

type DeviceStartRequest struct {
	ClientName string `json:"client_name,omitempty"`
}

DeviceStartRequest mirrors internal/api's deviceStartRequest.

type DeviceStartResponse

type DeviceStartResponse struct {
	DeviceCode              string `json:"device_code"`
	UserCode                string `json:"user_code"`
	VerificationURI         string `json:"verification_uri"`
	VerificationURIComplete string `json:"verification_uri_complete"`
	ExpiresIn               int    `json:"expires_in"`
	Interval                int    `json:"interval"`
}

DeviceStartResponse mirrors internal/api's deviceStartResponse.

type DeviceTokenRequest

type DeviceTokenRequest struct {
	DeviceCode string `json:"device_code"`
}

DeviceTokenRequest mirrors internal/api's deviceTokenRequest.

type DeviceTokenResponse

type DeviceTokenResponse struct {
	ID         string     `json:"id"`
	Name       string     `json:"name"`
	Abilities  []string   `json:"abilities"`
	CreatedAt  time.Time  `json:"created_at"`
	LastUsedAt *time.Time `json:"last_used_at,omitempty"`
	ExpiresAt  *time.Time `json:"expires_at,omitempty"`
	RevokedAt  *time.Time `json:"revoked_at,omitempty"`
	Token      string     `json:"token"`
}

DeviceTokenResponse mirrors internal/api's createTokenResponse, the shape POST /api/v1/auth/device/token returns once a request is approved.

type DiagnosisCause added in v0.2.0

type DiagnosisCause struct {
	Code        string            `json:"code"`
	Title       string            `json:"title"`
	Explanation string            `json:"explanation"`
	Confidence  string            `json:"confidence"`
	Evidence    []DiagnosisSignal `json:"evidence"`
	Fixes       []DiagnosisFix    `json:"fixes"`
}

DiagnosisCause is one typed, evidence-backed reason for a failure.

type DiagnosisChange added in v0.2.0

type DiagnosisChange struct {
	Field      string `json:"field"`
	From       string `json:"from"`
	To         string `json:"to"`
	NeedsInput bool   `json:"needs_input,omitempty"`
}

DiagnosisChange is one field edit a fix proposes, on the app resource's own JSON paths ("port", "health.readiness.path", "resources.memory_bytes", "env.NAME").

type DiagnosisFix added in v0.2.0

type DiagnosisFix struct {
	N        int               `json:"n"`
	Label    string            `json:"label"`
	Kind     string            `json:"kind"`
	Changes  []DiagnosisChange `json:"changes"`
	Hint     string            `json:"hint,omitempty"`
	Redeploy bool              `json:"redeploy,omitempty"`
}

DiagnosisFix is one remedy for a cause. Kind is "patch", "input" or "manual"; only the first two carry changes.

func FindDiagnosisFix added in v0.2.0

func FindDiagnosisFix(d DiagnosisResource, n int) (DiagnosisFix, bool)

FindDiagnosisFix returns fix number n across every cause.

type DiagnosisResource

type DiagnosisResource struct {
	Explanation     string            `json:"explanation"`
	Suggestion      string            `json:"suggestion"`
	Confidence      string            `json:"confidence"`
	MatchedSignals  []DiagnosisSignal `json:"matched_signals"`
	DeployAttemptID string            `json:"deploy_attempt_id,omitempty"`
	Causes          []DiagnosisCause  `json:"causes,omitempty"`
	Fixable         bool              `json:"fixable,omitempty"`
	Failure         *DeployFailure    `json:"failure,omitempty"`

	// RecentChanges is what changed on the app shortly before the diagnosis.
	RecentChanges *RecentChangesResource `json:"recent_changes,omitempty"`
}

DiagnosisResource mirrors internal/api's diagnosisResource (internal/api/diagnose.go): GET /api/v1/apps/{name}/diagnose's response, a deterministic explanation of a deploy failure or crashloop synthesized from internal/diagnose, never from an external model.

type DiagnosisSignal

type DiagnosisSignal struct {
	Source  string `json:"source"`
	Excerpt string `json:"excerpt"`
}

DiagnosisSignal mirrors internal/api's diagnosisSignalResource: one piece of evidence a diagnosis signature matched against.

type DimensionRecommendationResource

type DimensionRecommendationResource struct {
	Dimension      string  `json:"dimension"`
	SampleCount    int     `json:"sample_count"`
	DataSufficient bool    `json:"data_sufficient"`
	Confidence     string  `json:"confidence"`
	CurrentLimit   int64   `json:"current_limit"`
	P95Usage       float64 `json:"p95_usage"`
	P99Usage       float64 `json:"p99_usage"`
	SuggestedLimit int64   `json:"suggested_limit"`
	Action         string  `json:"action,omitempty"`
	Reason         string  `json:"reason"`
}

DimensionRecommendationResource mirrors internal/api's dimensionRecommendationResource (internal/api/resource_recommendation.go): one resource dimension's (memory or cpu) right-sizing suggestion. CurrentLimit/SuggestedLimit are bytes for memory, nano-CPUs for cpu, the same raw-unit convention AppResource.Resources already uses. Action is "" when there isn't enough data, or no limit is currently set, to responsibly suggest a change.

type DiskResilience

type DiskResilience struct {
	diskguard.Status
	Refusing  bool `json:"refusing"`
	FixAction bool `json:"free_space_available"`
}

DiskResilience mirrors GET /api/v1/resilience/disk.

type DockerGuardResource added in v0.2.0

type DockerGuardResource struct {
	Mode            string                   `json:"mode"`
	Source          string                   `json:"source"`
	Effective       string                   `json:"effective"`
	Running         bool                     `json:"running"`
	Socket          string                   `json:"socket,omitempty"`
	Upstream        string                   `json:"upstream,omitempty"`
	RestartRequired bool                     `json:"restart_required"`
	ConfigError     string                   `json:"config_error,omitempty"`
	StartError      string                   `json:"start_error,omitempty"`
	AuditSince      string                   `json:"audit_since,omitempty"`
	SinceBoot       []DockerGuardRuleCount   `json:"since_boot"`
	Rules           []string                 `json:"rules"`
	Configured      bool                     `json:"configured"`
	WindowSeconds   int64                    `json:"window_seconds"`
	Window          []DockerGuardRuleSummary `json:"window"`
	WouldDenyTotal  int                      `json:"would_deny_total"`
	DeniedTotal     int                      `json:"denied_total"`
	ReadyToEnforce  bool                     `json:"ready_to_enforce"`
}

DockerGuardResource mirrors GET /api/v1/system/docker-guard.

type DockerGuardRuleCount added in v0.2.0

type DockerGuardRuleCount struct {
	Rule      string `json:"rule"`
	Denied    int64  `json:"denied"`
	WouldDeny int64  `json:"would_deny"`
	LastSeen  string `json:"last_seen"`
	LastPath  string `json:"last_path"`
}

DockerGuardRuleCount mirrors one since-boot counter in the guard status.

type DockerGuardRuleSummary added in v0.2.0

type DockerGuardRuleSummary struct {
	Rule      string `json:"rule"`
	Denied    int    `json:"denied"`
	WouldDeny int    `json:"would_deny"`
	LastSeen  string `json:"last_seen"`
	LastPath  string `json:"last_path"`
}

DockerGuardRuleSummary mirrors one rule's audit history over the window.

type DockerHealthCheck

type DockerHealthCheck struct {
	Code      string `json:"code"`
	Status    string `json:"status"`
	Message   string `json:"message"`
	FixAction string `json:"fix_action,omitempty"`
}

DockerHealthCheck is one row of the Docker health report.

type DockerHealthResource

type DockerHealthResource struct {
	Reachable   bool                `json:"reachable"`
	Version     string              `json:"version,omitempty"`
	Arch        string              `json:"arch,omitempty"`
	OS          string              `json:"os,omitempty"`
	RuntimeKind string              `json:"runtime_kind,omitempty"`
	Rootless    bool                `json:"rootless"`
	DiskTotal   int64               `json:"disk_total_bytes"`
	DiskReclaim int64               `json:"disk_reclaimable_bytes"`
	CheckedAt   time.Time           `json:"checked_at"`
	Checks      []DockerHealthCheck `json:"checks"`
}

DockerHealthResource is the GET /api/v1/docker/health response.

type DockerLintFinding

type DockerLintFinding struct {
	Rule     string `json:"rule"`
	Severity string `json:"severity"`
	Line     int    `json:"line"`
	Message  string `json:"message"`
	Fixable  bool   `json:"fixable"`
}

DockerLintFinding mirrors internal/dockerlint.Finding.

type DockerLintResource

type DockerLintResource struct {
	Findings         []DockerLintFinding `json:"findings"`
	FixedDockerfile  string              `json:"fixed_dockerfile"`
	DockerignoreHint string              `json:"dockerignore_suggestion,omitempty"`
}

DockerLintResource is the POST /api/v1/docker/lint response.

type DoctorAction added in v0.2.0

type DoctorAction struct {
	Kind  string `json:"kind"`
	Label string `json:"label"`
	API   string `json:"api,omitempty"`
	Value string `json:"value,omitempty"`
}

DoctorAction mirrors domaindoctor.Action.

type DoctorCheck added in v0.2.0

type DoctorCheck struct {
	ID     string     `json:"id"`
	Title  string     `json:"title"`
	State  string     `json:"state"`
	Tier   int        `json:"tier"`
	Detail string     `json:"detail,omitempty"`
	Fix    *DoctorFix `json:"fix,omitempty"`
}

DoctorCheck mirrors domaindoctor.Check.

type DoctorCheckResource

type DoctorCheckResource struct {
	Code     string `json:"code"`
	Name     string `json:"name"`
	Status   string `json:"status"`
	Message  string `json:"message"`
	Fix      string `json:"fix,omitempty"`
	DocsPath string `json:"docs_path,omitempty"`
	// Class is "incident" or "recommendation" for a check that is not ok.
	Class string `json:"class,omitempty"`
}

DoctorCheckResource mirrors internal/api's doctorCheckResource: one preflight check's result (Status is "ok", "warn", "fail", or "unknown"). Fix/DocsPath are empty when the check is ok or has no single actionable command.

type DoctorFix added in v0.2.0

type DoctorFix struct {
	Summary string        `json:"summary"`
	Action  *DoctorAction `json:"action,omitempty"`
}

DoctorFix mirrors domaindoctor.Fix.

type DomainAuthGateResource added in v0.2.0

type DomainAuthGateResource struct {
	Domain                string   `json:"domain"`
	Configured            bool     `json:"configured"`
	Enabled               bool     `json:"enabled"`
	AuthURL               string   `json:"auth_url"`
	CheckPath             string   `json:"check_path"`
	CopyHeaders           []string `json:"copy_headers"`
	TimeoutSeconds        int      `json:"timeout_seconds"`
	DefaultTimeoutSeconds int      `json:"default_timeout_seconds"`
	UpdatedAt             string   `json:"updated_at,omitempty"`
	// Provider is "external" or "builtin"; Allow only applies to builtin.
	Provider         string         `json:"provider"`
	Allow            []AuthGateRule `json:"allow"`
	LiveSessions     int            `json:"live_sessions"`
	BuiltinAvailable bool           `json:"builtin_available"`
}

DomainAuthGateResource mirrors internal/api's domainAuthGateResource.

type DomainAutomationOverride added in v0.2.0

type DomainAutomationOverride struct {
	AutoDNS               *bool   `json:"auto_dns,omitempty"`
	AutoProxyRoute        *bool   `json:"auto_proxy_route,omitempty"`
	ForceHTTPS            *bool   `json:"force_https,omitempty"`
	WWWPolicy             *string `json:"www_policy,omitempty"`
	AttachWWWCounterpart  *bool   `json:"attach_www_counterpart,omitempty"`
	WildcardForBaseDomain *bool   `json:"wildcard_for_base_domain,omitempty"`
	VerifyAfter           *bool   `json:"verify_after,omitempty"`
}

DomainAutomationOverride sets only the keys given.

type DomainAutomationPolicy added in v0.2.0

type DomainAutomationPolicy struct {
	AutoDNS               bool   `json:"auto_dns"`
	AutoProxyRoute        bool   `json:"auto_proxy_route"`
	ForceHTTPS            bool   `json:"force_https"`
	WWWPolicy             string `json:"www_policy"`
	AttachWWWCounterpart  bool   `json:"attach_www_counterpart"`
	WildcardForBaseDomain bool   `json:"wildcard_for_base_domain"`
	VerifyAfter           bool   `json:"verify_after"`
}

DomainAutomationPolicy mirrors internal/api's domainAutomationPolicy.

type DomainAutomationResource added in v0.2.0

type DomainAutomationResource struct {
	DomainAutomationPolicy
	DNSProvider      string           `json:"dns_provider"`
	ProxyIntegration bool             `json:"proxy_integration_enabled"`
	WildcardDNS      *DomainDNSResult `json:"wildcard_dns,omitempty"`
}

DomainAutomationResource mirrors GET/PUT /api/v1/settings/domain-automation.

type DomainBasicAuthResource

type DomainBasicAuthResource struct {
	Domain      string `json:"domain"`
	Enabled     bool   `json:"enabled"`
	Username    string `json:"username,omitempty"`
	HasPassword bool   `json:"has_password"`
}

DomainBasicAuthResource mirrors internal/api's domainBasicAuthResource (internal/api/domain_basic_auth.go): GET/PUT/DELETE /api/v1/apps/{name}/domains/{domain}/auth's wire shape. The password itself never appears here in either direction.

type DomainCheckResource added in v0.2.0

type DomainCheckResource struct {
	Domain        string   `json:"domain"`
	ExpectedHost  string   `json:"expected_host,omitempty"`
	HostInferred  bool     `json:"host_inferred,omitempty"`
	Resolved      bool     `json:"resolved"`
	ResolvedHosts []string `json:"resolved_hosts,omitempty"`
	Status        string   `json:"status"`
	ExpectedIPv4  []string `json:"expected_ipv4,omitempty"`
	ExpectedIPv6  []string `json:"expected_ipv6,omitempty"`
	// ExpectedPrivate is true when the node address is private/LAN.
	ExpectedPrivate bool `json:"expected_private,omitempty"`
	// Challenge is "http-01" or "dns-01-required".
	Challenge   string       `json:"challenge,omitempty"`
	DNSProvider string       `json:"dns_provider,omitempty"`
	ACMEFailure *ACMEFailure `json:"acme_failure,omitempty"`
}

DomainCheckResource mirrors internal/api's domainCheckResponse (internal/api/domain_check.go): GET /api/v1/apps/{name}/domains/{domain}/check's wire shape.

type DomainDNSResult added in v0.2.0

type DomainDNSResult struct {
	Domain   string              `json:"domain"`
	DNS      string              `json:"dns"`
	Planned  string              `json:"planned,omitempty"`
	Provider string              `json:"provider,omitempty"`
	Zone     string              `json:"zone,omitempty"`
	Record   *DNSRecordResource  `json:"record,omitempty"`
	Replaced []DNSRecordResource `json:"replaced,omitempty"`
	Proxied  bool                `json:"proxied,omitempty"`
	Message  string              `json:"message,omitempty"`
}

DomainDNSResult mirrors internal/api's domainDNSResult.

type DomainDoctorReport added in v0.2.0

type DomainDoctorReport struct {
	Domain    string        `json:"domain"`
	App       string        `json:"app,omitempty"`
	CheckedAt time.Time     `json:"checked_at"`
	Status    string        `json:"status"`
	Probed    bool          `json:"probed"`
	ProbeNote string        `json:"probe_note,omitempty"`
	Checks    []DoctorCheck `json:"checks"`
}

DomainDoctorReport is POST .../domains/{domain}/doctor's body.

type DomainErrorPageEntry added in v0.2.0

type DomainErrorPageEntry struct {
	StatusCode int    `json:"status_code"`
	Body       string `json:"body"`
}

DomainErrorPageEntry mirrors internal/api's domainErrorPageEntry: one status-code-to-body mapping.

type DomainErrorPagesResource added in v0.2.0

type DomainErrorPagesResource struct {
	Domain string                 `json:"domain"`
	Pages  []DomainErrorPageEntry `json:"pages"`
}

DomainErrorPagesResource mirrors internal/api's domainErrorPagesResource (internal/api/domain_error_pages.go): GET/PUT/DELETE /api/v1/apps/{name}/domains/{domain}/error-pages's wire shape.

type DomainIssue

type DomainIssue struct {
	Domain   string `json:"domain"`
	Code     string `json:"code"`
	Severity string `json:"severity"`
	Message  string `json:"message"`
}

DomainIssue is one dropped or downgraded-domain finding from the ingress pass.

type DomainMaintenanceResource

type DomainMaintenanceResource struct {
	Domain            string   `json:"domain"`
	Enabled           bool     `json:"enabled"`
	Title             string   `json:"title,omitempty"`
	Message           string   `json:"message,omitempty"`
	RetryAfterSeconds int      `json:"retry_after_seconds,omitempty"`
	Until             string   `json:"until,omitempty"`
	WindowID          string   `json:"window_id,omitempty"`
	Bypass            []string `json:"bypass,omitempty"`
	BypassHealthCheck bool     `json:"bypass_health_check"`
	StartedAt         string   `json:"started_at,omitempty"`
	AutoOffAt         string   `json:"auto_off_at,omitempty"`
	// Ongoing is true when the status page shows this as ongoing maintenance.
	Ongoing bool `json:"ongoing,omitempty"`
	// AlertsSilenced is true while a maintenance silence mutes the app's probe alerts.
	AlertsSilenced bool   `json:"alerts_silenced"`
	SilenceID      string `json:"silence_id,omitempty"`
}

DomainMaintenanceResource mirrors internal/api's domainMaintenanceResource: GET/PUT/DELETE /api/v1/apps/{name}/domains/{domain}/maintenance's wire shape.

type DomainPoliciesResource added in v0.2.0

type DomainPoliciesResource struct {
	Domain    string                       `json:"domain"`
	App       string                       `json:"app"`
	Policy    trafficpolicy.Policy         `json:"policy"`
	UpdatedAt map[string]string            `json:"updated_at"`
	TLSReal   bool                         `json:"tls_real"`
	Geo       GeoStatus                    `json:"geo"`
	Cache     CacheStats                   `json:"cache"`
	Limits    PolicyLimits                 `json:"limits"`
	Preview   []trafficpolicy.Step         `json:"preview"`
	Warnings  []string                     `json:"warnings,omitempty"`
	Security  trafficpolicy.SecurityPreset `json:"security_preset"`
}

DomainPoliciesResource is GET .../domains/{domain}/policies.

type DomainPortsResource added in v0.2.0

type DomainPortsResource struct {
	App             string       `json:"app"`
	Domain          string       `json:"domain"`
	PublicHTTPSPort int          `json:"public_https_port"`
	Streams         []PortStream `json:"streams"`
	DetectionNote   string       `json:"detection_note,omitempty"`
}

DomainPortsResource is GET .../domains/{domain}/ports.

type DomainReachability added in v0.2.0

type DomainReachability struct {
	URL    string `json:"reachable_url,omitempty"`
	Reason string `json:"reachable_reason,omitempty"`
}

DomainReachability is one entry of AppEnvironmentDomains.Reachability.

type DomainRedirectResource added in v0.2.0

type DomainRedirectResource struct {
	Domain     string `json:"domain"`
	Enabled    bool   `json:"enabled"`
	TargetURL  string `json:"target_url,omitempty"`
	StatusCode int    `json:"status_code"`
}

DomainRedirectResource mirrors internal/api's domainRedirectResource (internal/api/domain_redirect.go): GET/PUT/DELETE /api/v1/apps/{name}/domains/{domain}/redirect's wire shape.

type DomainRedirectsResource added in v0.2.0

type DomainRedirectsResource struct {
	Domain     string                  `json:"domain"`
	Configured bool                    `json:"configured"`
	Settings   trafficpolicy.Redirects `json:"settings"`
	Effective  RedirectEffective       `json:"effective"`
	AppDomains []RedirectDomainRow     `json:"app_domains"`
	Canonical  CanonicalState          `json:"canonical"`
	Samples    []PolicyPreviewHops     `json:"samples"`
	Warnings   []string                `json:"warnings,omitempty"`
}

DomainRedirectsResource is GET .../domains/{domain}/redirects.

type DomainResource

type DomainResource struct {
	Domain      string `json:"domain"`
	ServiceName string `json:"service_name"`
	// Automatic marks a generated sslip.io hostname rather than a configured domain.
	Automatic bool `json:"automatic,omitempty"`
	// TLSOwner is who terminates TLS: acme, internal, proxy or custom.
	TLSOwner string `json:"tls_owner,omitempty"`
	// ReachableURL is the link to open; ReachableReason says why it is empty.
	ReachableURL    string `json:"reachable_url,omitempty"`
	ReachableReason string `json:"reachable_reason,omitempty"`
	// Kind is app or standalone; Target is where a standalone domain proxies.
	Kind   string `json:"kind,omitempty"`
	Target string `json:"target,omitempty"`
	// Issues are problems the last ingress pass found for this domain.
	Issues []DomainIssue `json:"issues,omitempty"`
}

DomainResource mirrors internal/api's domainResource (internal/api/ingress_settings.go).

type DomainRewrite added in v0.2.0

type DomainRewrite struct {
	Prefix  string `json:"prefix,omitempty"`
	Find    string `json:"find,omitempty"`
	Replace string `json:"replace,omitempty"`
}

DomainRewrite mirrors store.DomainRewrite: Prefix is prepended to every copied hostname, or Find (a hostname or parent domain) is swapped for Replace.

type DomainSearchVisibilityResource added in v0.2.0

type DomainSearchVisibilityResource struct {
	Domain string `json:"domain"`
	Hidden bool   `json:"hidden"`
}

DomainSearchVisibilityResource is the state of one domain's search engine visibility.

type DomainTLSCertResource

type DomainTLSCertResource struct {
	Domain     string `json:"domain"`
	Enabled    bool   `json:"enabled"`
	UploadedAt string `json:"uploaded_at,omitempty"`
	ExpiresAt  string `json:"expires_at,omitempty"`
}

DomainTLSCertResource mirrors internal/api's domainTLSCertResource (internal/api/domain_tls_cert.go): GET/PUT/DELETE /api/v1/apps/{name}/domains/{domain}/tls-cert's wire shape. Neither the certificate nor the private key ever appears here.

type DomainWAFResource added in v0.2.0

type DomainWAFResource struct {
	Domain           string `json:"domain"`
	WAFEnabled       bool   `json:"waf_enabled"`
	WAFMode          string `json:"waf_mode"`
	RateLimitEnabled bool   `json:"rate_limit_enabled"`
	RateLimitRPS     int    `json:"rate_limit_rps"`
	RateLimitBurst   int    `json:"rate_limit_burst"`
}

DomainWAFResource mirrors internal/api's domainWAFResource (internal/api/domain_waf.go): GET/PUT/DELETE /api/v1/apps/{name}/domains/{domain}/waf's wire shape.

type DrainBlocked added in v0.2.0

type DrainBlocked struct {
	Kind   string `json:"kind"`
	Name   string `json:"name"`
	Reason string `json:"reason"`
}

DrainBlocked is a resource a drain could not move.

type DrainBlockedResource added in v0.2.0

type DrainBlockedResource struct {
	Kind   string `json:"kind"`
	Name   string `json:"name"`
	Reason string `json:"reason"`
}

DrainBlockedResource mirrors internal/api's drainBlocked.

type DrainNodeResponse

type DrainNodeResponse struct {
	TargetNodeID   string   `json:"target_node_id"`
	MovedServices  []string `json:"moved_services"`
	MovedDatabases []string `json:"moved_databases"`
	Errors         []string `json:"errors,omitempty"`
	AutoPlaced     bool     `json:"auto_placed,omitempty"`
	// Warnings lists checks that could not run, so the drain may be incomplete.
	Warnings []string `json:"warnings,omitempty"`
	// Blocked names apps and models left on the node, with the reason.
	Blocked []DrainBlockedResource `json:"blocked,omitempty"`
}

DrainNodeResponse mirrors internal/api's drainNodeResponse. A partial failure is not itself a Go error from DrainNode: it comes back as a successful response with Errors populated, naming exactly which resource didn't move so the caller can retry just that one.

type DrillSummaryResource added in v0.2.0

type DrillSummaryResource struct {
	ID      string `json:"id"`
	At      string `json:"at"`
	Status  string `json:"status"`
	Stage   string `json:"stage,omitempty"`
	Error   string `json:"error,omitempty"`
	Trigger string `json:"trigger,omitempty"`
	Files   int64  `json:"files,omitempty"`
}

DrillSummaryResource mirrors internal/api's drillSummaryResource.

type EdgeDetection

type EdgeDetection struct {
	Proxy        string   `json:"proxy"`
	Evidence     []string `json:"evidence,omitempty"`
	PeerAddr     string   `json:"peer_addr,omitempty"`
	Suggested    string   `json:"suggested,omitempty"`
	RangesRotate bool     `json:"ranges_rotate,omitempty"`
}

EdgeDetection names the proxy in front of this instance, as seen on the request.

type EdgeEffective

type EdgeEffective struct {
	MaxHeaderBytes    EdgeLimitValue `json:"max_header_bytes"`
	MaxBodyBytes      EdgeLimitValue `json:"max_body_bytes"`
	ReadHeaderTimeout EdgeLimitValue `json:"read_header_timeout_secs"`
	IdleTimeout       EdgeLimitValue `json:"idle_timeout_secs"`
}

EdgeEffective is the set of limits the ingress enforces.

type EdgeGuidance added in v0.2.0

type EdgeGuidance struct {
	Commit          string   `json:"commit,omitempty"`
	CommitURL       string   `json:"commit_url,omitempty"`
	Image           string   `json:"image"`
	RunsInContainer bool     `json:"runs_in_container"`
	Installable     bool     `json:"installable"`
	PullCommand     string   `json:"pull_command,omitempty"`
	RecreateCommand string   `json:"recreate_command,omitempty"`
	ComposeSnippet  string   `json:"compose_snippet,omitempty"`
	SwitchTo        []string `json:"switch_to,omitempty"`
}

EdgeGuidance is what the edge channel means for this install: a moving container image tag rather than a release binary.

type EdgeLimitValue

type EdgeLimitValue struct {
	Value  int64  `json:"value"`
	Source string `json:"source"`
}

EdgeLimitValue is one effective edge limit and where it came from (env, setting or default).

type EdgeSettings

type EdgeSettings struct {
	TrustedProxies       string          `json:"trusted_proxies"`
	TrustedProxiesSource string          `json:"trusted_proxies_source"`
	TrustedProxiesActive bool            `json:"trusted_proxies_active"`
	MaxHeaderBytes       *int64          `json:"max_header_bytes"`
	MaxBodyBytes         *int64          `json:"max_body_bytes"`
	ReadHeaderTimeout    *int64          `json:"read_header_timeout_secs"`
	IdleTimeout          *int64          `json:"idle_timeout_secs"`
	Effective            EdgeEffective   `json:"effective"`
	Detected             EdgeDetection   `json:"detected"`
	NeedsTrustedProxies  bool            `json:"needs_trusted_proxies"`
	Defaults             EdgeEffective   `json:"defaults"`
	EnvLocked            map[string]bool `json:"env_locked"`
}

EdgeSettings is GET/PUT /api/v1/settings/ingress/edge.

type EdgeSettingsUpdate

type EdgeSettingsUpdate struct {
	TrustedProxies    string `json:"trusted_proxies"`
	MaxHeaderBytes    *int64 `json:"max_header_bytes"`
	MaxBodyBytes      *int64 `json:"max_body_bytes"`
	ReadHeaderTimeout *int64 `json:"read_header_timeout_secs"`
	IdleTimeout       *int64 `json:"idle_timeout_secs"`
}

EdgeSettingsUpdate is the PUT body; a nil limit restores the default.

type EditDomainsRequest added in v0.2.0

type EditDomainsRequest struct {
	Set    *[]string `json:"set,omitempty"`
	Add    []string  `json:"add,omitempty"`
	Remove []string  `json:"remove,omitempty"`
	// Environment (ID, name or kind) targets that environment's own set.
	Environment string `json:"environment,omitempty"`
	// DNS is auto (default), off or preview. Replace overwrites a
	// conflicting record, RemoveDNS deletes records Levelrail created for
	// removed domains, Automation overrides the go-live policy.
	DNS        string                    `json:"dns,omitempty"`
	Replace    bool                      `json:"replace,omitempty"`
	RemoveDNS  bool                      `json:"remove_dns,omitempty"`
	Automation *DomainAutomationOverride `json:"automation,omitempty"`
}

EditDomainsRequest mirrors internal/api's editDomainsRequest: Set, or Add and Remove.

type EditDomainsResult added in v0.2.0

type EditDomainsResult struct {
	App           string            `json:"app"`
	Domains       []string          `json:"domains"`
	Changed       bool              `json:"changed"`
	EnvironmentID string            `json:"environment_id,omitempty"`
	DNSResults    []DomainDNSResult `json:"dns_results,omitempty"`
	GoLive        []GoLiveResult    `json:"go_live,omitempty"`
}

EditDomainsResult mirrors internal/api's editDomainsResponse.

type EffectiveSessionPolicy

type EffectiveSessionPolicy struct {
	IdleTimeout string `json:"idle_timeout"`
	MaxLifetime string `json:"max_lifetime"`
	RequireMFA  bool   `json:"require_mfa"`
	MaxSessions int    `json:"max_concurrent_sessions"`
	OnLimit     string `json:"on_limit"`
	AllowLists  int    `json:"allowlists"`
	YourAddress string `json:"your_address"`
	Allowed     bool   `json:"address_allowed"`
}

EffectiveSessionPolicy is the merged policy that applies to the caller.

type EmailSettingsResource added in v0.2.0

type EmailSettingsResource struct {
	Backend               string `json:"backend"`
	SMTPHost              string `json:"smtp_host,omitempty"`
	SMTPPort              int    `json:"smtp_port,omitempty"`
	SMTPUsername          string `json:"smtp_username,omitempty"`
	SMTPFrom              string `json:"smtp_from,omitempty"`
	SMTPPassword          string `json:"smtp_password,omitempty"`
	SMTPPasswordSet       bool   `json:"smtp_password_set,omitempty"`
	SESRegion             string `json:"ses_region,omitempty"`
	SESAccessKeyID        string `json:"ses_access_key_id,omitempty"`
	SESFrom               string `json:"ses_from,omitempty"`
	SESSecretAccessKey    string `json:"ses_secret_access_key,omitempty"`
	SESSecretAccessKeySet bool   `json:"ses_secret_access_key_set,omitempty"`
}

EmailSettingsResource mirrors internal/api's emailSettingsResource (internal/api/email_settings.go): the shape of both GET and PUT /api/v1/settings/email. Credential fields are write-only; the corresponding *Set booleans report presence instead.

type EnableHTTPSRequest added in v0.2.0

type EnableHTTPSRequest struct {
	Email   string `json:"email,omitempty"`
	Staging bool   `json:"staging"`
}

EnableHTTPSRequest is POST /api/v1/settings/ingress/https's body.

type EncryptionKeyFix

type EncryptionKeyFix struct {
	Kind string `json:"kind"`
	App  string `json:"app,omitempty"`
}

EncryptionKeyFix mirrors internal/api's encryptionKeyFix.

type EncryptionKeyHint

type EncryptionKeyHint struct {
	Code     string           `json:"code"`
	Severity string           `json:"severity"`
	Message  string           `json:"message"`
	Fix      EncryptionKeyFix `json:"fix"`
}

EncryptionKeyHint mirrors internal/api's encryptionKeyHint.

type EncryptionKeysStatus

type EncryptionKeysStatus struct {
	MasterKey MasterKeyStatus     `json:"master_key"`
	Apps      []AppKeyStatus      `json:"apps"`
	Policy    KeyPolicy           `json:"policy"`
	LastRun   *KeyRotationRun     `json:"last_run,omitempty"`
	Hints     []EncryptionKeyHint `json:"hints"`
}

EncryptionKeysStatus mirrors internal/api's encryptionKeysResource.

type EndpointDiagnosis

type EndpointDiagnosis struct {
	Code    string `json:"code"`
	Message string `json:"message"`
	Fix     string `json:"fix"`
}

EndpointDiagnosis mirrors internal/api's endpointDiagnosis.

type EndpointHealth

type EndpointHealth struct {
	State     string             `json:"state"`
	LatencyMS int64              `json:"latency_ms"`
	CheckedAt *time.Time         `json:"checked_at,omitempty"`
	LastOKAt  *time.Time         `json:"last_ok_at,omitempty"`
	Failures  int                `json:"consecutive_failures"`
	Diagnosis *EndpointDiagnosis `json:"diagnosis,omitempty"`
}

EndpointHealth mirrors internal/api's endpointHealthResource.

type EndpointTest

type EndpointTest struct {
	State     string             `json:"state"`
	LatencyMS int64              `json:"latency_ms"`
	Models    []string           `json:"models"`
	Diagnosis *EndpointDiagnosis `json:"diagnosis,omitempty"`
}

EndpointTest mirrors internal/api's endpointTestResponse.

type EngineHealth added in v0.2.0

type EngineHealth struct {
	State   string   `json:"state"`
	Summary string   `json:"summary"`
	Reasons []string `json:"reasons"`
}

EngineHealth mirrors internal/models.EngineHealth.

type EngineMetricPoint added in v0.2.0

type EngineMetricPoint struct {
	T time.Time `json:"t"`
	V float64   `json:"v"`
}

EngineMetricPoint is one stored engine reading.

type EngineMetricSeries added in v0.2.0

type EngineMetricSeries struct {
	ID        string              `json:"id"`
	Label     string              `json:"label"`
	Unit      string              `json:"unit"`
	Supported bool                `json:"supported"`
	Latest    *float64            `json:"latest"`
	Points    []EngineMetricPoint `json:"points"`
}

EngineMetricSeries mirrors internal/models.EngineMetricSeries.

type EngineMetricsReport added in v0.2.0

type EngineMetricsReport struct {
	Model      string               `json:"model"`
	Engine     string               `json:"engine"`
	From       time.Time            `json:"from"`
	To         time.Time            `json:"to"`
	Collecting bool                 `json:"collecting"`
	Note       string               `json:"note"`
	Health     EngineHealth         `json:"health"`
	Series     []EngineMetricSeries `json:"series"`
}

EngineMetricsReport mirrors internal/models.EngineMetricsReport.

type EnvChangeResource

type EnvChangeResource struct {
	ID     int64  `json:"id"`
	At     string `json:"at"`
	Actor  string `json:"actor"`
	Key    string `json:"key"`
	Action string `json:"action"`
	Source string `json:"source"`
}

EnvChangeResource is one key-level env edit, never carrying a value.

type EnvCheckResource

type EnvCheckResource struct {
	Findings []EnvFindingResource `json:"findings"`
}

EnvCheckResource is the response of the env check calls.

type EnvFindingResource

type EnvFindingResource struct {
	Kind     string         `json:"kind"`
	Key      string         `json:"key"`
	Severity string         `json:"severity"`
	Detail   string         `json:"detail,omitempty"`
	Fix      EnvFixResource `json:"fix"`
}

EnvFindingResource is one problem found in an app's variables.

type EnvFixResource

type EnvFixResource struct {
	Type   string `json:"type"`
	Action string `json:"action"`
}

EnvFixResource is how an env finding can be fixed: type is auto or manual.

type EnvScanFinding

type EnvScanFinding struct {
	Var         string `json:"var"`
	RuleID      string `json:"rule_id"`
	Description string `json:"description"`
	Fingerprint string `json:"fingerprint"`
	Allowed     bool   `json:"allowed,omitempty"`
}

EnvScanFinding is one suspected credential in scanned env values. It never carries the value.

type EnvScanResponse

type EnvScanResponse struct {
	Findings  []EnvScanFinding `json:"findings"`
	Truncated bool             `json:"truncated"`
}

EnvScanResponse is POST .../env/scan's body.

type EnvSettings added in v0.2.0

type EnvSettings struct {
	RevealPolicy       string          `json:"reveal_policy"`
	PolicyValid        bool            `json:"policy_valid"`
	TokenReveal        bool            `json:"token_reveal"`
	SecretsWriteOnly   bool            `json:"secrets_write_only"`
	SensitiveOverrides map[string]bool `json:"sensitive_overrides"`
	GrantTTLSeconds    int             `json:"grant_ttl_seconds"`
	HideAfterSeconds   int             `json:"hide_after_seconds"`
	SecretsConfigured  bool            `json:"secrets_configured"`
}

EnvSettings mirrors GET /api/v1/apps/{name}/env/settings.

type EnvSettingsUpdate added in v0.2.0

type EnvSettingsUpdate struct {
	SensitiveOverrides map[string]*bool `json:"sensitive_overrides,omitempty"`
	SecretsWriteOnly   *bool            `json:"secrets_write_only,omitempty"`
	StepUp             *StepUpProof     `json:"step_up,omitempty"`
}

EnvSettingsUpdate is PUT /api/v1/apps/{name}/env/settings's body. A nil override value clears that key's override.

type EnvironmentCloneAppInput added in v0.2.0

type EnvironmentCloneAppInput struct {
	SourceApp string   `json:"source_app"`
	NewName   string   `json:"new_name,omitempty"`
	Domains   []string `json:"domains,omitempty"`
}

EnvironmentCloneAppInput mirrors internal/api's environmentCloneAppInput: an optional per-app override inside a clone request. Omitted entirely for a source app means "use the auto-suggested name, assign no domains".

type EnvironmentCloneAppPreview added in v0.2.0

type EnvironmentCloneAppPreview struct {
	SourceApp             string   `json:"source_app"`
	SuggestedNewName      string   `json:"suggested_new_name"`
	Image                 string   `json:"image"`
	EnvVarCount           int      `json:"env_var_count"`
	SecretEnvKeys         []string `json:"secret_env_keys"`
	CurrentDomains        []string `json:"current_domains"`
	VolumeCount           int      `json:"volume_count"`
	BindMountCount        int      `json:"bind_mount_count"`
	HasHealthCheck        bool     `json:"has_health_check"`
	HasDatabaseAttachment bool     `json:"has_database_attachment"`
	HasHostPortPin        bool     `json:"has_host_port_pin"`
	ScheduledTaskCount    int      `json:"scheduled_task_count"`
}

EnvironmentCloneAppPreview mirrors internal/api's environmentCloneAppPreview (internal/api/environment_clone.go): one source app's own view inside GET .../clone/preview.

type EnvironmentCloneAppResult added in v0.2.0

type EnvironmentCloneAppResult struct {
	SourceApp string `json:"source_app"`
	NewApp    string `json:"new_app"`
	Image     string `json:"image"`
}

EnvironmentCloneAppResult mirrors internal/api's environmentCloneAppResult: one cloned app's own entry inside POST .../clone's response.

type EnvironmentClonePreviewResource added in v0.2.0

type EnvironmentClonePreviewResource struct {
	SourceEnvironment        EnvironmentResource          `json:"source_environment"`
	NewEnvironmentName       string                       `json:"new_environment_name"`
	Apps                     []EnvironmentCloneAppPreview `json:"apps"`
	EnvironmentEnvVarKeys    []string                     `json:"environment_env_var_keys"`
	EnvironmentSecretEnvKeys []string                     `json:"environment_secret_env_keys"`
	UnclonedFields           []string                     `json:"uncloned_fields"`
	Note                     string                       `json:"note"`
}

EnvironmentClonePreviewResource mirrors internal/api's environmentClonePreviewResource, GET .../clone/preview's response.

type EnvironmentCloneRequest added in v0.2.0

type EnvironmentCloneRequest struct {
	NewEnvironmentName string                     `json:"new_environment_name"`
	CopySecretValues   bool                       `json:"copy_secret_values,omitempty"`
	Apps               []EnvironmentCloneAppInput `json:"apps,omitempty"`
	CopyDomains        bool                       `json:"copy_domains,omitempty"`
	DomainRewrite      *DomainRewrite             `json:"domain_rewrite,omitempty"`
}

EnvironmentCloneRequest mirrors internal/api's environmentCloneRequest, POST /api/v1/environments/{id}/clone's body.

type EnvironmentCloneResultResource added in v0.2.0

type EnvironmentCloneResultResource struct {
	Environment        EnvironmentResource         `json:"environment"`
	Apps               []EnvironmentCloneAppResult `json:"apps"`
	CopiedSecretValues bool                        `json:"copied_secret_values"`
	Note               string                      `json:"note"`
}

EnvironmentCloneResultResource mirrors internal/api's environmentCloneResultResource, POST .../clone's response.

type EnvironmentCompareResource added in v0.2.0

type EnvironmentCompareResource struct {
	ProjectID string                    `json:"project_id"`
	A         EnvironmentCompareSide    `json:"a"`
	B         EnvironmentCompareSide    `json:"b"`
	Diff      []EnvironmentEnvDiffEntry `json:"diff"`
	Note      string                    `json:"note"`
}

EnvironmentCompareResource mirrors internal/api's environmentCompareResource, GET /api/v1/projects/{id}/environments/compare's response: each of two named environments' resolved effective env vars (organization, project, and environment shared-env tiers merged in internal/reconcile/application's resolveEnv precedence), secret values always redacted, plus the keys that differ between them.

type EnvironmentCompareSide added in v0.2.0

type EnvironmentCompareSide struct {
	Environment EnvironmentResource           `json:"environment"`
	Env         []EnvironmentEnvEntryResource `json:"env"`
}

EnvironmentCompareSide mirrors internal/api's environmentCompareSide: one side (A or B) of GET .../environments/compare's response.

type EnvironmentDomainSet added in v0.2.0

type EnvironmentDomainSet struct {
	EnvironmentID string   `json:"environment_id"`
	Name          string   `json:"name"`
	Kind          string   `json:"kind"`
	Active        bool     `json:"active"`
	Domains       []string `json:"domains"`
}

EnvironmentDomainSet is one environment's domain set for an app.

type EnvironmentEnvDiffEntry added in v0.2.0

type EnvironmentEnvDiffEntry struct {
	Key    string `json:"key"`
	Secret bool   `json:"secret"`
	Status string `json:"status"`
	A      string `json:"a,omitempty"`
	B      string `json:"b,omitempty"`
}

EnvironmentEnvDiffEntry mirrors internal/api's environmentEnvDiffEntry: one key that differs between A and B. Status is one of "only_in_a", "only_in_b", "changed", or "masked". A/B are only ever populated for a non-secret, present-on-both-sides "changed" entry or a non-secret present-on-one-side "only_in_a"/"only_in_b" entry: a secret-marked key never carries a value here, on either side.

type EnvironmentEnvEntryResource added in v0.2.0

type EnvironmentEnvEntryResource struct {
	Key    string `json:"key"`
	Value  string `json:"value,omitempty"`
	Secret bool   `json:"secret"`
}

EnvironmentEnvEntryResource mirrors internal/api's environmentEnvEntryResource: one resolved key inside EnvironmentCompareSide.Env. Value is only ever populated when Secret is false.

type EnvironmentGrants added in v0.2.0

type EnvironmentGrants struct {
	EnvironmentIDs []string `json:"environment_ids"`
}

EnvironmentGrants is the body of the user environment-grants routes.

type EnvironmentResource

type EnvironmentResource struct {
	ID        string `json:"id"`
	ProjectID string `json:"project_id"`
	Name      string `json:"name"`
	Protected bool   `json:"protected"`
	CreatedAt string `json:"created_at"`
	Kind      string `json:"kind,omitempty"`
	Scope     string `json:"scope,omitempty"`
	SortOrder int    `json:"sort_order,omitempty"`
}

EnvironmentResource mirrors internal/api's environmentResource (internal/api/environments.go).

type ErrorEvent

type ErrorEvent struct {
	EventID     string          `json:"event_id"`
	TimestampNs int64           `json:"timestamp_ns"`
	Release     string          `json:"release,omitempty"`
	Environment string          `json:"environment,omitempty"`
	DeployID    string          `json:"deploy_id,omitempty"`
	Event       json.RawMessage `json:"event,omitempty"`
}

ErrorEvent mirrors internal/api's errorEventResource.

type ErrorIssue

type ErrorIssue struct {
	Fingerprint  string `json:"fingerprint"`
	Title        string `json:"title"`
	Level        string `json:"level"`
	FirstSeenNs  int64  `json:"first_seen_ns"`
	LastSeenNs   int64  `json:"last_seen_ns"`
	Count        int64  `json:"count"`
	LastRelease  string `json:"last_release,omitempty"`
	LastDeployID string `json:"last_deploy_id,omitempty"`
	Status       string `json:"status"`
	Regressed    bool   `json:"regressed"`
}

ErrorIssue mirrors internal/telemetry's ErrorIssue.

type ErrorIssueDetail

type ErrorIssueDetail struct {
	Issue  ErrorIssue   `json:"issue"`
	Events []ErrorEvent `json:"events"`
}

ErrorIssueDetail mirrors internal/api's errorIssueResource.

type ErrorListOptions

type ErrorListOptions struct {
	Status string
	Since  string
	Limit  int
}

ErrorListOptions are the filters of ListErrors.

type ErrorTrackingResource

type ErrorTrackingResource struct {
	Enabled  bool              `json:"enabled"`
	Endpoint string            `json:"endpoint"`
	DSN      string            `json:"dsn,omitempty"`
	Env      map[string]string `json:"env,omitempty"`
}

ErrorTrackingResource mirrors internal/api's errorTrackingResource.

type EvaluateFlagResource

type EvaluateFlagResource struct {
	Key     string `json:"key"`
	Enabled bool   `json:"enabled"`
}

EvaluateFlagResource mirrors internal/api's evaluateFlagResource: the tiny shape GET /api/v1/flags/evaluate/{key} returns.

type EventDeliveryResource

type EventDeliveryResource struct {
	ID             string `json:"id"`
	WebhookID      string `json:"webhook_id"`
	EventID        string `json:"event_id"`
	EventType      string `json:"event_type"`
	State          string `json:"state"`
	Attempts       int    `json:"attempts"`
	ResponseStatus int    `json:"response_status"`
	LastError      string `json:"last_error,omitempty"`
	NextAttemptAt  string `json:"next_attempt_at"`
	CreatedAt      string `json:"created_at"`
	UpdatedAt      string `json:"updated_at"`
}

EventDeliveryResource is one entry of a webhook's delivery log.

type EventWebhookResource

type EventWebhookResource struct {
	ID            string   `json:"id"`
	Name          string   `json:"name"`
	URL           string   `json:"url"`
	Enabled       bool     `json:"enabled"`
	Events        []string `json:"events"`
	CreatedAt     string   `json:"created_at"`
	UpdatedAt     string   `json:"updated_at"`
	Pending       int      `json:"pending"`
	Delivered     int      `json:"delivered"`
	Dead          int      `json:"dead"`
	LastStatus    int      `json:"last_status"`
	SigningSecret string   `json:"signing_secret,omitempty"`
}

EventWebhookResource mirrors GET /api/v1/event-webhooks items. The signing secret is set only on create and rotate responses.

type EventWebhookTestResult

type EventWebhookTestResult struct {
	OK     bool   `json:"ok"`
	Status int    `json:"status,omitempty"`
	Error  string `json:"error,omitempty"`
}

EventWebhookTestResult is the answer of the test probe.

type EvidenceFileCheck

type EvidenceFileCheck struct {
	Name   string `json:"name"`
	OK     bool   `json:"ok"`
	Reason string `json:"reason,omitempty"`
}

EvidenceFileCheck is one file result of a pack verification.

type EvidencePackResource

type EvidencePackResource struct {
	ID         string `json:"id"`
	RangeFrom  string `json:"range_from"`
	RangeTo    string `json:"range_to"`
	Status     string `json:"status"`
	Step       string `json:"step"`
	Progress   int    `json:"progress"`
	SizeBytes  int64  `json:"size_bytes"`
	SHA256     string `json:"sha256,omitempty"`
	Error      string `json:"error,omitempty"`
	CreatedBy  string `json:"created_by"`
	CreatedAt  string `json:"created_at"`
	FinishedAt string `json:"finished_at,omitempty"`
}

EvidencePackResource mirrors one evidence pack job.

type EvidenceVerifyReport

type EvidenceVerifyReport struct {
	Valid            bool                `json:"valid"`
	SignatureChecked bool                `json:"signature_checked"`
	SignatureValid   bool                `json:"signature_valid"`
	KeyID            string              `json:"key_id,omitempty"`
	Files            []EvidenceFileCheck `json:"files"`
}

EvidenceVerifyReport is the answer of POST .../verify.

type ExecAccessResource added in v0.2.0

type ExecAccessResource struct {
	Enabled bool `json:"enabled"`
}

ExecAccessResource mirrors internal/api's execAccessResource: both GET and PUT /api/v1/apps/{name}/exec-access's response, whether shell/exec access is even attempted for this app regardless of the caller's own IAM abilities. Default true, unlike AutoRollbackSettingResource.

type ExecRequest

type ExecRequest struct {
	Command        string   `json:"command"`
	Args           []string `json:"args,omitempty"`
	TimeoutSeconds int      `json:"timeout_seconds,omitempty"`
}

ExecRequest mirrors internal/api's execRequest (internal/api/exec.go). Command is required server-side and is never shell-interpreted: a caller who wants shell features (pipes, redirection, env expansion) passes Command: "sh", Args: []string{"-c", "..."} explicitly, the same contract the server documents.

type ExecResponse

type ExecResponse struct {
	Stdout    string `json:"stdout"`
	Stderr    string `json:"stderr,omitempty"`
	ExitCode  int    `json:"exit_code"`
	Truncated bool   `json:"truncated,omitempty"`
}

ExecResponse mirrors internal/api's execResponse. ExitCode is always the remote command's real exit code, never a client-level sentinel.

type ExportDestinationResource added in v0.2.0

type ExportDestinationResource struct {
	ID          string        `json:"id"`
	Name        string        `json:"name"`
	Kind        string        `json:"kind"`
	Endpoint    string        `json:"endpoint"`
	Enabled     bool          `json:"enabled"`
	Apps        []string      `json:"apps"`
	MinLevel    string        `json:"min_level"`
	Options     ExportOptions `json:"options"`
	HeaderNames []string      `json:"header_names"`
	HasHMACKey  bool          `json:"has_hmac_key"`
	HasAPIKey   bool          `json:"has_api_key"`
	Status      ExportStatus  `json:"status"`
	CreatedAt   string        `json:"created_at"`
	UpdatedAt   string        `json:"updated_at"`
}

ExportDestinationResource is one data export destination. Header values and signing keys are never returned.

type ExportOptions added in v0.2.0

type ExportOptions struct {
	StorageTargetID string            `json:"storage_target_id,omitempty"`
	Prefix          string            `json:"prefix,omitempty"`
	Labels          map[string]string `json:"labels,omitempty"`
	IntervalSeconds int               `json:"interval_seconds,omitempty"`
	Backfill        bool              `json:"backfill,omitempty"`
	Region          string            `json:"region,omitempty"`
	Site            string            `json:"site,omitempty"`
	Dataset         string            `json:"dataset,omitempty"`
	Username        string            `json:"username,omitempty"`

	Index              string `json:"index,omitempty"`
	Source             string `json:"source,omitempty"`
	SourceType         string `json:"source_type,omitempty"`
	Gzip               bool   `json:"gzip,omitempty"`
	InsecureSkipVerify bool   `json:"insecure_skip_verify,omitempty"`
	Facility           string `json:"facility,omitempty"`
	AppName            string `json:"app_name,omitempty"`
}

ExportOptions are the non-secret, kind-specific destination settings.

type ExportStatus added in v0.2.0

type ExportStatus struct {
	LastSuccessAt string `json:"last_success_at"`
	LastError     string `json:"last_error"`
	LastErrorAt   string `json:"last_error_at"`
	SentTotal     int64  `json:"sent_total"`
	DroppedTotal  int64  `json:"dropped_total"`
	FailuresTotal int64  `json:"failures_total"`
	QueueDepth    int64  `json:"queue_depth"`
	CircuitOpen   bool   `json:"circuit_open"`
	CursorAt      string `json:"cursor_at,omitempty"`
}

ExportStatus is a destination's delivery state.

type ExportTestResult added in v0.2.0

type ExportTestResult struct {
	OK    bool   `json:"ok"`
	Error string `json:"error,omitempty"`
	Fix   string `json:"fix,omitempty"`
}

ExportTestResult is the answer of the destination test probe.

type ExposureFinding added in v0.2.0

type ExposureFinding struct {
	Container         string               `json:"container"`
	Image             string               `json:"image"`
	Owner             ExposureOwner        `json:"owner"`
	ImageKind         string               `json:"image_kind"`
	Protocol          string               `json:"protocol"`
	HostPort          int                  `json:"host_port"`
	ContainerPort     int                  `json:"container_port"`
	Binds             []string             `json:"binds"`
	Class             string               `json:"class"`
	Severity          string               `json:"severity"`
	AllowedSources    []string             `json:"allowed_sources,omitempty"`
	Rules             []string             `json:"rules,omitempty"`
	Managed           bool                 `json:"managed"`
	Explanation       string               `json:"explanation"`
	Recommendation    string               `json:"recommendation,omitempty"`
	CanRestrict       bool                 `json:"can_restrict"`
	CannotRestrictWhy string               `json:"cannot_restrict_reason,omitempty"`
	Restriction       *ExposureRestriction `json:"restriction,omitempty"`
	Outside           ExposureOutsideCheck `json:"outside_check"`
}

ExposureFinding mirrors internal/api's exposureFindingResource.

type ExposureNode added in v0.2.0

type ExposureNode struct {
	NodeID        string            `json:"node_id"`
	NodeName      string            `json:"node_name"`
	Local         bool              `json:"local"`
	Status        string            `json:"status"`
	Error         string            `json:"error,omitempty"`
	RulesReadable bool              `json:"rules_readable"`
	RulesNote     string            `json:"rules_note,omitempty"`
	PublicAddress string            `json:"public_address,omitempty"`
	Findings      []ExposureFinding `json:"findings"`
}

ExposureNode mirrors internal/api's exposureNodeResource.

type ExposureOutsideCheck added in v0.2.0

type ExposureOutsideCheck struct {
	Status string `json:"status"`
	Detail string `json:"detail,omitempty"`
}

ExposureOutsideCheck mirrors internal/api's exposureOutsideResource.

type ExposureOwner added in v0.2.0

type ExposureOwner struct {
	Kind        string `json:"kind"`
	Name        string `json:"name,omitempty"`
	Intentional bool   `json:"intentional,omitempty"`
}

ExposureOwner mirrors internal/exposure.Owner.

type ExposurePlan added in v0.2.0

type ExposurePlan struct {
	Commands    []string `json:"commands"`
	Drops       string   `json:"drops"`
	Tag         string   `json:"tag"`
	Persistence string   `json:"persistence"`
	Port        int      `json:"port"`
	Protocol    string   `json:"protocol"`
	Allow       []string `json:"allow"`
	Warnings    []string `json:"warnings"`
	Applied     bool     `json:"applied"`
}

ExposurePlan mirrors internal/api's exposurePlanResource.

type ExposureReport added in v0.2.0

type ExposureReport struct {
	GeneratedAt string         `json:"generated_at"`
	Nodes       []ExposureNode `json:"nodes"`
	Exposed     int            `json:"exposed"`
	High        int            `json:"high"`
}

ExposureReport mirrors internal/api's exposureReportResource.

type ExposureRestrictRequest added in v0.2.0

type ExposureRestrictRequest struct {
	Node            string   `json:"node,omitempty"`
	Port            int      `json:"port,omitempty"`
	Protocol        string   `json:"protocol,omitempty"`
	Allow           []string `json:"allow"`
	LocalContainers bool     `json:"local_containers,omitempty"`
	Confirm         bool     `json:"confirm,omitempty"`
}

ExposureRestrictRequest mirrors internal/api's exposureRestrictRequest.

type ExposureRestriction added in v0.2.0

type ExposureRestriction struct {
	Allow     []string `json:"allow"`
	CreatedAt string   `json:"created_at,omitempty"`
}

ExposureRestriction mirrors internal/api's exposureRestrictionResource.

type ExternalDatabase added in v0.2.0

type ExternalDatabase struct {
	Name            string                  `json:"name"`
	Engine          string                  `json:"engine"`
	Host            string                  `json:"host"`
	Port            int                     `json:"port"`
	Username        string                  `json:"username,omitempty"`
	Database        string                  `json:"database,omitempty"`
	TLSMode         string                  `json:"tls_mode"`
	Network         string                  `json:"network,omitempty"`
	NodeID          string                  `json:"node_id,omitempty"`
	ProjectID       string                  `json:"project_id,omitempty"`
	SourceContainer string                  `json:"source_container,omitempty"`
	HasPassword     bool                    `json:"has_password"`
	Health          *ExternalDatabaseHealth `json:"health,omitempty"`
}

ExternalDatabase mirrors internal/api's externalDatabaseResource. It never carries a password.

type ExternalDatabaseCandidate added in v0.2.0

type ExternalDatabaseCandidate struct {
	ContainerID   string   `json:"container_id"`
	Container     string   `json:"container"`
	Image         string   `json:"image"`
	Engine        string   `json:"engine"`
	Port          int      `json:"port"`
	SuggestedHost string   `json:"suggested_host,omitempty"`
	Network       string   `json:"network,omitempty"`
	Networks      []string `json:"networks,omitempty"`
	PublishedPort int      `json:"published_port,omitempty"`
	SuggestedUser string   `json:"suggested_user,omitempty"`
	Note          string   `json:"note,omitempty"`
}

ExternalDatabaseCandidate is a running database container that can be adopted.

type ExternalDatabaseHealth added in v0.2.0

type ExternalDatabaseHealth struct {
	Status    string `json:"status"`
	Reason    string `json:"reason,omitempty"`
	LatencyMs int    `json:"latency_ms"`
	CheckedAt string `json:"checked_at,omitempty"`
}

ExternalDatabaseHealth mirrors the API's last probe outcome.

type ExternalDatabaseProbe added in v0.2.0

type ExternalDatabaseProbe struct {
	Status    string   `json:"status"`
	Reason    string   `json:"reason,omitempty"`
	LatencyMs int      `json:"latency_ms"`
	Version   string   `json:"version,omitempty"`
	User      string   `json:"user,omitempty"`
	Database  string   `json:"database,omitempty"`
	Databases []string `json:"databases,omitempty"`
}

ExternalDatabaseProbe is one connectivity probe result.

type ExternalDatabaseRequest added in v0.2.0

type ExternalDatabaseRequest struct {
	Name         string `json:"name,omitempty"`
	Engine       string `json:"engine,omitempty"`
	Host         string `json:"host,omitempty"`
	Port         int    `json:"port,omitempty"`
	Username     string `json:"username,omitempty"`
	Password     string `json:"password,omitempty"`
	Database     string `json:"database,omitempty"`
	AuthDatabase string `json:"auth_database,omitempty"`
	TLSMode      string `json:"tls_mode,omitempty"`
	Network      string `json:"network,omitempty"`
	NodeID       string `json:"node_id,omitempty"`
	ProjectID    string `json:"project_id,omitempty"`
	Container    string `json:"container,omitempty"`
}

ExternalDatabaseRequest is the connect, test and adopt body.

type ExternalEndpoint

type ExternalEndpoint struct {
	BaseURL          string         `json:"base_url"`
	APIType          string         `json:"api_type"`
	CredentialSet    bool           `json:"credential_set"`
	FallbackModel    string         `json:"fallback_model,omitempty"`
	FallbackModelRef string         `json:"fallback_model_ref,omitempty"`
	LatencyBudgetMS  int64          `json:"latency_budget_ms"`
	FallbackCount    int            `json:"fallback_count"`
	Models           []string       `json:"models"`
	DiscoveryError   string         `json:"discovery_error,omitempty"`
	PrivateAllowed   bool           `json:"private_allowed"`
	Health           EndpointHealth `json:"health"`
}

ExternalEndpoint mirrors internal/api's endpointResource.

type ExternalEndpointRequest

type ExternalEndpointRequest struct {
	BaseURL          string `json:"base_url"`
	APIType          string `json:"api_type,omitempty"`
	Credential       string `json:"credential,omitempty"`
	FallbackModel    string `json:"fallback_model,omitempty"`
	FallbackModelRef string `json:"fallback_model_ref,omitempty"`
	LatencyBudgetMS  int64  `json:"latency_budget_ms,omitempty"`
}

ExternalEndpointRequest mirrors internal/api's externalRequest.

type FailedDeployResource added in v0.2.0

type FailedDeployResource struct {
	DeployAttemptResource
	LastGoodImage string `json:"last_good_image,omitempty"`
}

FailedDeployResource is one entry of GET /api/v1/deploys/failed: an app's latest failed deploy attempt plus the image of its newest good one.

type FailureContextDeploy added in v0.2.0

type FailureContextDeploy struct {
	ID         string     `json:"id"`
	Status     string     `json:"status"`
	Image      string     `json:"image"`
	Commit     string     `json:"commit,omitempty"`
	StartedAt  time.Time  `json:"started_at"`
	FinishedAt *time.Time `json:"finished_at,omitempty"`
	Error      string     `json:"error,omitempty"`
}

FailureContextDeploy is the failed deploy attempt, when there is one.

type FailureContextLine added in v0.2.0

type FailureContextLine struct {
	Timestamp time.Time `json:"timestamp"`
	Stream    string    `json:"stream"`
	Message   string    `json:"message"`
	Level     string    `json:"level,omitempty"`
}

FailureContextLine is one log line of a failure context.

type FailureContextResource added in v0.2.0

type FailureContextResource struct {
	State         string                `json:"state"`
	Since         *time.Time            `json:"since,omitempty"`
	Restarts      int                   `json:"restarts_in_window"`
	WindowSeconds float64               `json:"window_seconds"`
	ContainerID   string                `json:"container_id,omitempty"`
	Deploy        *FailureContextDeploy `json:"deploy,omitempty"`
	Lines         []FailureContextLine  `json:"lines"`
	TotalLines    int                   `json:"total_lines"`
	LinesSource   string                `json:"lines_source,omitempty"`
}

FailureContextResource mirrors internal/api's failureContextResponse.

type FailureSimulation

type FailureSimulation struct {
	Zone     string               `json:"zone,omitempty"`
	Node     string               `json:"node,omitempty"`
	Lost     []string             `json:"lost_node_ids"`
	Count    int                  `json:"displaced"`
	Placed   []SimulatedPlacement `json:"placed"`
	Unplaced int                  `json:"unplaced"`
	Zones    []ZoneSummary        `json:"zones"`
}

FailureSimulation is the body of GET /api/v1/nodes/failure-simulation.

type FeatureFlagRequest

type FeatureFlagRequest struct {
	Key               string `json:"key,omitempty"`
	Name              string `json:"name"`
	Description       string `json:"description,omitempty"`
	Enabled           bool   `json:"enabled"`
	RolloutPercentage int    `json:"rollout_percentage"`
}

FeatureFlagRequest mirrors the fields internal/api's featureFlagResource actually reads from a create/update request body. Key is only read on create; an update ignores it (ID and ServiceName always come from the URL, same as ScheduledTaskRequest above).

type FeatureFlagResource

type FeatureFlagResource struct {
	ID                string    `json:"id,omitempty"`
	Key               string    `json:"key"`
	Name              string    `json:"name"`
	Description       string    `json:"description,omitempty"`
	ServiceName       string    `json:"service_name,omitempty"`
	Enabled           bool      `json:"enabled"`
	RolloutPercentage int       `json:"rollout_percentage"`
	CreatedAt         time.Time `json:"created_at,omitempty"`
	UpdatedAt         time.Time `json:"updated_at,omitempty"`
}

FeatureFlagResource mirrors internal/api's featureFlagResource (internal/api/feature_flags.go). Key is globally unique across the whole platform, not just within ServiceName: see that file's own migration comment for why.

type FirewallEdgeAttack

type FirewallEdgeAttack struct {
	Active    bool   `json:"active"`
	Until     string `json:"until,omitempty"`
	Challenge bool   `json:"challenge"`
}

FirewallEdgeAttack is the attack mode state.

type FirewallEdgeAuditEntry

type FirewallEdgeAuditEntry struct {
	ID        string          `json:"id"`
	ActorName string          `json:"actor_name"`
	ActorType string          `json:"actor_type"`
	Action    string          `json:"action"`
	CreatedAt string          `json:"created_at"`
	Detail    json.RawMessage `json:"detail,omitempty"`
}

FirewallEdgeAuditEntry is one firewall change event.

type FirewallEdgeBan

type FirewallEdgeBan struct {
	IP      string `json:"ip"`
	Reason  string `json:"reason"`
	Started string `json:"started"`
	Ends    string `json:"ends"`
	Hits    uint64 `json:"hits"`
}

FirewallEdgeBan is one automatic temporary ban.

type FirewallEdgeHits

type FirewallEdgeHits struct {
	Total     uint64   `json:"total"`
	LastHitAt string   `json:"last_hit_at,omitempty"`
	Sparkline []uint32 `json:"sparkline"`
}

FirewallEdgeHits are one rule's counters since the process started.

type FirewallEdgeIPEntry

type FirewallEdgeIPEntry struct {
	IP    string `json:"ip"`
	Scope string `json:"scope,omitempty"`
	Note  string `json:"note,omitempty"`
}

FirewallEdgeIPEntry is the body of the block and allow calls.

type FirewallEdgeRule

type FirewallEdgeRule struct {
	edgefw.Rule
	Hits FirewallEdgeHits `json:"hits"`
}

FirewallEdgeRule is a rule with its hit counters.

type FirewallEdgeSettings

type FirewallEdgeSettings struct {
	edgefw.Settings
	DefaultAIBotAgents []string `json:"default_ai_bot_agents"`
	MaxAIBotAgents     int      `json:"max_ai_bot_agents"`
}

FirewallEdgeSettings is GET/PUT .../firewall/edge/settings.

type FirewallEdgeStatus

type FirewallEdgeStatus struct {
	Active       bool                    `json:"active"`
	Attack       FirewallEdgeAttack      `json:"attack_mode"`
	RulesTotal   int                     `json:"rules_total"`
	RulesEnabled int                     `json:"rules_enabled"`
	BotMode      edgefw.Mode             `json:"bot_mode"`
	AIBotMode    edgefw.Mode             `json:"ai_bot_mode"`
	BansEnabled  bool                    `json:"bans_enabled"`
	Bans         int                     `json:"bans"`
	GeoActive    bool                    `json:"geo_active"`
	Range        string                  `json:"range"`
	Totals       map[string]uint64       `json:"totals"`
	Reasons      []edgefw.ReasonCountRow `json:"reasons"`
	Suggestion   struct {
		Suggested  bool `json:"suggested"`
		PerMinute  int  `json:"per_minute"`
		Threshold  int  `json:"threshold"`
		WindowMins int  `json:"window_minutes"`
	} `json:"attack_suggestion"`
	Retention struct {
		ChartHours   int    `json:"chart_hours"`
		TopMinutes   int    `json:"top_minutes"`
		InMemoryOnly bool   `json:"in_memory_only"`
		TopCapacity  int    `json:"top_capacity"`
		BanDuration  string `json:"ban_duration"`
		BanStrikes   int    `json:"ban_strikes"`
		BanWindow    string `json:"ban_window"`
	} `json:"retention"`
}

FirewallEdgeStatus is GET .../firewall/edge/status.

type FirewallEdgeTopRow

type FirewallEdgeTopRow struct {
	Key       string   `json:"key"`
	Count     uint64   `json:"count"`
	Sparkline []uint32 `json:"sparkline"`
}

FirewallEdgeTopRow is one approximate top-N entry.

type FirewallEdgeTraffic

type FirewallEdgeTraffic struct {
	WindowMinutes int                             `json:"window_minutes"`
	Approximate   bool                            `json:"approximate"`
	Tables        map[string][]FirewallEdgeTopRow `json:"tables"`
}

FirewallEdgeTraffic is GET .../firewall/edge/traffic.

type FirewallRuleResource added in v0.2.0

type FirewallRuleResource struct {
	ID         string `json:"id"`
	NodeID     string `json:"node_id"`
	Port       int    `json:"port"`
	Protocol   string `json:"protocol"`
	SourceCIDR string `json:"source_cidr,omitempty"`
	Action     string `json:"action"`
	Label      string `json:"label,omitempty"`
	CreatedAt  string `json:"created_at"`
}

FirewallRuleResource mirrors internal/api's firewallRuleResource.

type Fix

type Fix struct {
	ID       string       `json:"id"`
	CheckID  string       `json:"check_id"`
	Subject  string       `json:"subject"`
	Title    string       `json:"title"`
	Why      string       `json:"why"`
	Risk     string       `json:"risk"`
	State    string       `json:"state"`
	Kind     string       `json:"kind"`
	Failing  bool         `json:"failing"`
	Detail   string       `json:"detail"`
	Reason   string       `json:"reason,omitempty"`
	Blocked  string       `json:"blocked,omitempty"`
	Command  string       `json:"command,omitempty"`
	Changes  []FixChange  `json:"changes"`
	Attempts []FixAttempt `json:"attempts"`
}

Fix is a fix as GET /api/v1/fixes returns it.

type FixAttempt

type FixAttempt struct {
	Outcome string `json:"outcome"`
	Detail  string `json:"detail"`
	At      string `json:"at"`
	Actor   string `json:"actor"`
}

FixAttempt is one recorded apply or re-check.

type FixChange

type FixChange struct {
	Label  string `json:"label"`
	Detail string `json:"detail,omitempty"`
	Bytes  int64  `json:"bytes,omitempty"`
}

FixChange is one thing a fix would do.

type FixResult

type FixResult struct {
	FixID   string `json:"fix_id"`
	Outcome string `json:"outcome"`
	Detail  string `json:"detail"`
	View    Fix    `json:"view"`
}

FixResult is POST /api/v1/fixes/{id}/apply's body.

type FleetMaintenanceEntry

type FleetMaintenanceEntry struct {
	App string `json:"app"`
	DomainMaintenanceResource
	ElapsedSeconds int64 `json:"elapsed_seconds"`
}

FleetMaintenanceEntry is one domain in GET /api/v1/maintenance/domains.

type FleetMaintenanceResource

type FleetMaintenanceResource struct {
	Items                 []FleetMaintenanceEntry `json:"items"`
	MaxDurationSeconds    int64                   `json:"max_duration_seconds"`
	AttentionAfterSeconds int64                   `json:"attention_after_seconds"`
}

FleetMaintenanceResource is GET /api/v1/maintenance/domains.

type FleetResourceUsageResource added in v0.2.0

type FleetResourceUsageResource struct {
	Nodes []NodeResourceUsageResource `json:"nodes"`
	Fleet FleetResourceUsageRollup    `json:"fleet"`
}

FleetResourceUsageResource mirrors internal/api's fleetResourceUsageResponse: one row per node plus the fleet-wide rollup, GET /api/v1/nodes/resource-usage's full body.

type FleetResourceUsageRollup added in v0.2.0

type FleetResourceUsageRollup struct {
	NodeCount               int      `json:"node_count"`
	TotalCPUPercent         *float64 `json:"total_cpu_percent,omitempty"`
	TotalMemoryUsageBytes   *float64 `json:"total_memory_usage_bytes,omitempty"`
	TotalMemoryBytes        *float64 `json:"total_memory_bytes,omitempty"`
	MemoryUsedPercent       *float64 `json:"memory_used_percent,omitempty"`
	NodesWithMemoryCapacity int      `json:"nodes_with_memory_capacity"`
	TotalDiskUsedBytes      *float64 `json:"total_disk_used_bytes,omitempty"`
	TotalDiskBytes          *float64 `json:"total_disk_bytes,omitempty"`
	DiskUsedPercent         *float64 `json:"disk_used_percent,omitempty"`
	NodesWithDiskCapacity   int      `json:"nodes_with_disk_capacity"`
}

FleetResourceUsageRollup mirrors internal/api's fleetResourceUsageRollup: fleet-wide sums, with *Percent fields only computed from nodes that actually reported a capacity figure (see NodesWithMemoryCapacity/NodesWithDiskCapacity).

type ForwardersPolicyResource added in v0.2.0

type ForwardersPolicyResource struct {
	Domain     string                   `json:"domain"`
	Kind       string                   `json:"kind"`
	Configured bool                     `json:"configured"`
	Spec       trafficpolicy.Forwarders `json:"spec"`
	UpdatedAt  string                   `json:"updated_at,omitempty"`
}

ForwardersPolicyResource is GET/PUT .../domains/{domain}/forwarders.

type FreeSpaceResult

type FreeSpaceResult struct {
	ReclaimedBytes int64          `json:"reclaimed_bytes"`
	Disk           DiskResilience `json:"disk"`
}

FreeSpaceResult mirrors POST /api/v1/resilience/disk/free-space.

type FreezeWindowResource added in v0.2.0

type FreezeWindowResource struct {
	ID       string `json:"id,omitempty"`
	Cron     string `json:"cron"`
	Duration string `json:"duration"`
	Timezone string `json:"timezone,omitempty"`
	Reason   string `json:"reason,omitempty"`
	Scope    string `json:"scope,omitempty"`
}

FreezeWindowResource mirrors internal/api's freezeWindowResource.

type FunctionResource

type FunctionResource struct {
	Name         string  `json:"name"`
	Image        string  `json:"image"`
	Port         int     `json:"port"`
	IdleMinutes  int     `json:"idle_minutes"`
	Sleeping     bool    `json:"sleeping"`
	URL          string  `json:"url,omitempty"`
	Invocations  float64 `json:"invocations"`
	ErrorRate5xx float64 `json:"error_rate_5xx"`
	P95Ms        float64 `json:"p95_ms"`
}

FunctionResource mirrors one entry of GET /api/v1/functions.

type FunctionRoute

type FunctionRoute struct {
	Domain      string `json:"domain"`
	Path        string `json:"path"`
	StripPrefix bool   `json:"strip_prefix"`
}

FunctionRoute is one path a function answers on at a domain.

type FunctionRoutes

type FunctionRoutes struct {
	Routes []FunctionRoute `json:"routes"`
}

FunctionRoutes is the response of the function route endpoints.

type FunctionRuntime

type FunctionRuntime struct {
	ID   string `json:"id"`
	Name string `json:"name"`
}

FunctionRuntime is one starter runtime from GET /api/v1/functions/runtimes.

type FunctionRuntimes

type FunctionRuntimes struct {
	Runtimes []FunctionRuntime `json:"runtimes"`
	Port     int               `json:"port"`
}

FunctionRuntimes is the GET /api/v1/functions/runtimes response.

type FunctionsList

type FunctionsList struct {
	WindowSeconds float64            `json:"window_seconds"`
	Functions     []FunctionResource `json:"functions"`
}

FunctionsList is the GET /api/v1/functions response.

type GPUDeviceResource added in v0.2.0

type GPUDeviceResource struct {
	Index              int    `json:"index"`
	UUID               string `json:"uuid"`
	Name               string `json:"name"`
	VRAMTotalMiB       int64  `json:"vram_total_mib"`
	VRAMUsedMiB        int64  `json:"vram_used_mib"`
	UtilizationPercent int    `json:"utilization_percent"`
}

GPUDeviceResource mirrors internal/api's gpuDeviceResource.

type GPUNodeResource added in v0.2.0

type GPUNodeResource struct {
	NodeID           string              `json:"node_id"`
	Name             string              `json:"name"`
	IsLocal          bool                `json:"is_local"`
	Present          bool                `json:"present"`
	DriverVersion    string              `json:"driver_version,omitempty"`
	RuntimeInstalled bool                `json:"runtime_installed"`
	GPUCount         int                 `json:"gpu_count"`
	TotalVRAMMiB     int64               `json:"total_vram_mib"`
	UsedVRAMMiB      int64               `json:"used_vram_mib"`
	ModelCount       int                 `json:"model_count"`
	ReservedGPUs     int                 `json:"reserved_gpus"`
	FreeGPUs         int                 `json:"free_gpus"`
	Reservations     []string            `json:"reservations"`
	Schedulable      bool                `json:"schedulable"`
	Hint             string              `json:"hint,omitempty"`
	Devices          []GPUDeviceResource `json:"devices"`
	UpdatedAt        time.Time           `json:"updated_at"`
}

GPUNodeResource mirrors internal/api's gpuNodeResource.

type GateEventResource added in v0.2.0

type GateEventResource struct {
	Phase     string    `json:"phase"`
	Status    string    `json:"status"`
	Reason    string    `json:"reason,omitempty"`
	Message   string    `json:"message"`
	Container string    `json:"container,omitempty"`
	At        time.Time `json:"at"`
}

GateEventResource is one step of a deploy's gate timeline.

type GeoIPLookupResource added in v0.2.0

type GeoIPLookupResource struct {
	Status  GeoStatus `json:"status"`
	IP      string    `json:"ip,omitempty"`
	Country string    `json:"country,omitempty"`
	Source  string    `json:"source,omitempty"`
	Private bool      `json:"private,omitempty"`
	Note    string    `json:"note,omitempty"`
}

GeoIPLookupResource is GET /api/v1/system/geoip.

type GeoPolicyResource added in v0.2.0

type GeoPolicyResource struct {
	Domain     string             `json:"domain"`
	Kind       string             `json:"kind"`
	Configured bool               `json:"configured"`
	Spec       *trafficpolicy.Geo `json:"spec"`
	UpdatedAt  string             `json:"updated_at,omitempty"`
}

GeoPolicyResource is GET/PUT .../domains/{domain}/geo. Spec is nil when no geo rule is configured.

type GeoStatus added in v0.2.0

type GeoStatus struct {
	Active       bool     `json:"active"`
	Sources      []string `json:"sources"`
	Header       string   `json:"header,omitempty"`
	HeaderNeeds  string   `json:"header_needs,omitempty"`
	DBPath       string   `json:"db_path,omitempty"`
	DBType       string   `json:"db_type,omitempty"`
	DBBuildEpoch uint     `json:"db_build_epoch,omitempty"`
	Error        string   `json:"error,omitempty"`
}

GeoStatus mirrors the ingress's country source report.

type GitAccessCheck

type GitAccessCheck struct {
	ID     string `json:"id"`
	Status string `json:"status"`
	Detail string `json:"detail"`
}

GitAccessCheck is one step of a git access validation.

type GitAccessFix

type GitAccessFix struct {
	Kind string `json:"kind"`
	Code string `json:"code"`
	Hint string `json:"hint"`
	Link string `json:"link,omitempty"`
}

GitAccessFix is the typed next step for a failed validation.

type GitAccessResult

type GitAccessResult struct {
	OK         bool             `json:"ok"`
	Credential string           `json:"credential,omitempty"`
	Branch     string           `json:"branch,omitempty"`
	HeadSHA    string           `json:"head_sha,omitempty"`
	Checks     []GitAccessCheck `json:"checks"`
	Fix        *GitAccessFix    `json:"fix,omitempty"`
}

GitAccessResult is the result of validating repo or provider access.

type GitAppBranchResource added in v0.2.0

type GitAppBranchResource struct {
	Name      string `json:"name"`
	CommitSHA string `json:"commit_sha"`
}

GitAppBranchResource mirrors the identical branch wire shape every git provider App integration returns: internal/api's gitHubAppBranchResource, gitLabAppBranchResource, and bitbucketAppBranchResource are structurally the same two fields, so this client uses one type for all three.

type GitBuildDetection added in v0.2.0

type GitBuildDetection struct {
	Branch             string               `json:"branch"`
	LooksLikeMonorepo  bool                 `json:"looks_like_monorepo"`
	RootHasApp         bool                 `json:"root_has_app"`
	Tools              []string             `json:"tools"`
	Dockerfiles        []string             `json:"dockerfiles"`
	ComposeFiles       []string             `json:"compose_files"`
	Suggestions        []GitBuildSuggestion `json:"suggestions"`
	Truncated          bool                 `json:"truncated"`
	NeedsBuildSettings bool                 `json:"needs_build_settings"`
	Packages           []WorkspacePackage   `json:"packages"`
}

GitBuildDetection mirrors internal/api's detectGitSourceResponse.

type GitBuildSuggestion added in v0.2.0

type GitBuildSuggestion struct {
	BuildType      string `json:"build_type"`
	DockerfilePath string `json:"dockerfile_path,omitempty"`
	BaseDirectory  string `json:"base_directory,omitempty"`
	Reason         string `json:"reason"`
	ReasonCode     string `json:"reason_code"`
	Recommended    bool   `json:"recommended"`
}

GitBuildSuggestion mirrors internal/repolayout's Suggestion.

type GitCommit added in v0.2.0

type GitCommit struct {
	SHA          string    `json:"sha"`
	Message      string    `json:"message"`
	Author       string    `json:"author"`
	AuthoredAt   time.Time `json:"authored_at"`
	URL          string    `json:"url,omitempty"`
	DeployStatus string    `json:"deploy_status,omitempty"`
	DeployID     string    `json:"deploy_id,omitempty"`
}

GitCommit is one commit of the connected branch with its deploy outcome.

type GitCommitSummary

type GitCommitSummary struct {
	SHA        string    `json:"sha"`
	Message    string    `json:"message"`
	Author     string    `json:"author"`
	AuthoredAt time.Time `json:"authored_at"`
	URL        string    `json:"url,omitempty"`
}

GitCommitSummary is one commit listed between two deploys.

type GitDeploySettings added in v0.2.0

type GitDeploySettings struct {
	DeployPaths       []string `json:"deploy_paths"`
	DeployPathsIgnore []string `json:"deploy_paths_ignore"`
	ReportStatus      bool     `json:"report_status"`
}

GitDeploySettings mirrors internal/api's gitDeploySettings.

type GitHubAppInstallationListResource added in v0.2.0

type GitHubAppInstallationListResource struct {
	Installations []GitHubAppInstallationResource `json:"installations"`
	AddOrgURL     string                          `json:"add_org_url,omitempty"`
	AppPublic     *bool                           `json:"app_public,omitempty"`
	MakePublicURL string                          `json:"make_public_url,omitempty"`
}

GitHubAppInstallationListResource mirrors internal/api's gitHubAppInstallationListResource: GET /api/v1/github-app/installations's response. AddOrgURL is empty when the connection predates migrations/0282's slug column and hasn't been re-registered since.

type GitHubAppInstallationResource added in v0.2.0

type GitHubAppInstallationResource struct {
	ID             int64  `json:"id"`
	InstallationID int64  `json:"installation_id"`
	AccountLogin   string `json:"account_login"`
	AccountType    string `json:"account_type"`
	ConnectedAt    string `json:"connected_at"`
}

GitHubAppInstallationResource mirrors internal/api's gitHubAppInstallationResource: one entry of GET /api/v1/github-app/installations.

type GitHubAppRepoListErrResource added in v0.2.0

type GitHubAppRepoListErrResource struct {
	AccountLogin string `json:"account_login"`
	Error        string `json:"error"`
}

GitHubAppRepoListErrResource is one entry of GitHubAppRepoListResource.Errors.

type GitHubAppRepoListResource added in v0.2.0

type GitHubAppRepoListResource struct {
	Repos  []GitHubAppRepoResource        `json:"repos"`
	Errors []GitHubAppRepoListErrResource `json:"errors,omitempty"`
}

GitHubAppRepoListResource mirrors internal/api's gitHubAppRepoListResource: GET /api/v1/github-app/repos's response, repos from every connected installation plus one error per installation that failed to list.

type GitHubAppRepoResource added in v0.2.0

type GitHubAppRepoResource struct {
	FullName      string `json:"full_name"`
	Name          string `json:"name"`
	OwnerLogin    string `json:"owner_login"`
	Private       bool   `json:"private"`
	DefaultBranch string `json:"default_branch"`
	CloneURL      string `json:"clone_url"`
	// AccountType is "user" or "organization" (migrations/0282): which
	// connected installation this repo came from.
	AccountType string `json:"account_type"`
}

GitHubAppRepoResource mirrors internal/api's gitHubAppRepoResource: one entry of GET /api/v1/github-app/repos.

type GitHubAppStatusResource added in v0.2.0

type GitHubAppStatusResource struct {
	Connected          bool   `json:"connected"`
	AppID              int64  `json:"app_id,omitempty"`
	ClientID           string `json:"client_id,omitempty"`
	InstanceURL        string `json:"instance_url,omitempty"`
	Installed          bool   `json:"installed"`
	InstallationStatus string `json:"installation_status,omitempty"`
	AccountLogin       string `json:"account_login,omitempty"`
	CreatedAt          string `json:"created_at,omitempty"`
	BaseURL            string `json:"base_url,omitempty"`
}

GitHubAppStatusResource mirrors internal/api's gitHubAppStatusResource: GET /api/v1/github-app's response. No secret fields ever appear here.

type GitLabAppProjectResource added in v0.2.0

type GitLabAppProjectResource struct {
	ID                int64  `json:"id"`
	Name              string `json:"name"`
	PathWithNamespace string `json:"path_with_namespace"`
	CloneURL          string `json:"clone_url"`
	DefaultBranch     string `json:"default_branch"`
	Visibility        string `json:"visibility"`
	WebURL            string `json:"web_url"`
}

GitLabAppProjectResource mirrors internal/api's gitLabAppProjectResource: one entry of GET /api/v1/gitlab-app/projects.

type GitLabAppStatusResource added in v0.2.0

type GitLabAppStatusResource struct {
	Connected   bool   `json:"connected"`
	InstanceURL string `json:"instance_url,omitempty"`
	ClientID    string `json:"client_id,omitempty"`
	CreatedAt   string `json:"created_at,omitempty"`
	Authorized  bool   `json:"authorized"`
	BaseURL     string `json:"base_url,omitempty"`
}

GitLabAppStatusResource mirrors internal/api's gitLabAppStatusResource: GET /api/v1/gitlab-app's response.

type GitProviderResource added in v0.2.0

type GitProviderResource struct {
	Provider           string `json:"provider"`
	Connected          bool   `json:"connected"`
	CanListBranches    bool   `json:"can_list_branches"`
	CanRegisterWebhook bool   `json:"can_register_webhook"`
	CanAuthClone       bool   `json:"can_auth_clone"`
}

GitProviderResource mirrors internal/api's gitProviderResource: one entry of GET /api/v1/git-providers, a capability summary for one git provider (github, gitlab, bitbucket, gitea).

type GitRemote

type GitRemote struct {
	Configured     bool       `json:"configured"`
	URL            string     `json:"url"`
	RemoteName     string     `json:"remote_name"`
	Username       string     `json:"username"`
	Branch         string     `json:"branch"`
	CreatedAt      *time.Time `json:"created_at,omitempty"`
	RotatedAt      *time.Time `json:"rotated_at,omitempty"`
	LastPushAt     *time.Time `json:"last_push_at,omitempty"`
	LastPushCommit string     `json:"last_push_commit,omitempty"`
	LastPushResult string     `json:"last_push_result,omitempty"`
	MaxPushBytes   int64      `json:"max_push_bytes"`
	Token          string     `json:"token,omitempty"`
	AddCommand     string     `json:"add_command,omitempty"`
}

GitRemote is an app's push deploy remote as the API reports it. Token and AddCommand are set only on the call that issued the token.

type GitSourceAffected

type GitSourceAffected struct {
	AppDeploys bool                     `json:"app_deploys"`
	Reason     string                   `json:"reason,omitempty"`
	Packages   []GitSourceAffectedEntry `json:"packages"`
}

GitSourceAffected mirrors internal/api's affectedResponse.

type GitSourceAffectedEntry

type GitSourceAffectedEntry struct {
	Name     string `json:"name"`
	Dir      string `json:"dir"`
	Affected bool   `json:"affected"`
}

GitSourceAffectedEntry is one workspace package's verdict.

type GitSourceCommits added in v0.2.0

type GitSourceCommits struct {
	Branch          string             `json:"branch"`
	ConnectedBranch string             `json:"connected_branch"`
	Provider        string             `json:"provider"`
	Head            *GitCommit         `json:"head,omitempty"`
	Commits         []GitCommit        `json:"commits"`
	Branches        []string           `json:"branches"`
	AheadBy         *int               `json:"ahead_by,omitempty"`
	UpToDate        bool               `json:"up_to_date"`
	Suggestions     []DeploySuggestion `json:"suggestions"`
	Degraded        bool               `json:"degraded"`
	BuildType       string             `json:"build_type"`
	Build           struct {
		Summary string `json:"summary"`
	} `json:"build"`
}

GitSourceCommits mirrors GET /api/v1/apps/{name}/git-source/commits.

type GitSourceResolvedBuild added in v0.2.0

type GitSourceResolvedBuild struct {
	ContextDir     string `json:"context_dir"`
	DockerfilePath string `json:"dockerfile_path,omitempty"`
	Summary        string `json:"summary"`
}

GitSourceResolvedBuild mirrors internal/api's gitSourceResolvedBuild.

type GitSourceResource

type GitSourceResource struct {
	ServiceName string `json:"service_name"`
	RepoURL     string `json:"repo_url"`
	Branch      string `json:"branch"`
	BuildType   string `json:"build_type"`
	BuildPath   string `json:"build_path,omitempty"`
	// BaseDirectory is the build context, relative to the repository root.
	BaseDirectory string `json:"base_directory,omitempty"`
	// ResolvedBuild states what a deploy builds, in plain terms.
	ResolvedBuild GitSourceResolvedBuild `json:"resolved_build"`
	// TriggerMode mirrors store.GitSource.TriggerMode: "push" (default)
	// or "release", see internal/api's normalizeGitSourceTriggerMode.
	TriggerMode    string `json:"trigger_mode,omitempty"`
	HasToken       bool   `json:"has_token"`
	WebhookURL     string `json:"webhook_url"`
	WebhookSecret  string `json:"webhook_secret,omitempty"`
	PreviewEnabled bool   `json:"preview_enabled"`
	// PostPRComments mirrors store.GitSource.PostPRComments: the opt-in
	// toggle for a preview deploy's GitHub PR comment/commit status, set
	// via SetPreviewPostPRComments (preview-settings, same route as
	// PreviewEnabled).
	PostPRComments bool `json:"post_pr_comments"`
	// DeployPaths, DeployPathsIgnore and ReportStatus mirror the store
	// fields of the same names, set via SetGitDeploySettings.
	DeployPaths       []string `json:"deploy_paths"`
	DeployPathsIgnore []string `json:"deploy_paths_ignore"`
	ReportStatus      bool     `json:"report_status"`
	CreatedAt         string   `json:"created_at"`
	UpdatedAt         string   `json:"updated_at"`
}

GitSourceResource mirrors internal/api's gitSourceResource (internal/api/git_sources.go). AdditionalServices/Services (the multi-service fan-out fields) are deliberately not carried here: this client's SetGitSourceRequest only covers the single-service connect flow "apps deploy-spec" already handles for the multi-service case.

type GiteaAppRepoResource added in v0.2.0

type GiteaAppRepoResource struct {
	FullName      string `json:"full_name"`
	Name          string `json:"name"`
	Private       bool   `json:"private"`
	DefaultBranch string `json:"default_branch"`
	CloneURL      string `json:"clone_url"`
	WebURL        string `json:"web_url"`
}

GiteaAppRepoResource mirrors internal/api's giteaAppRepoResource: one entry of GET /api/v1/gitea-app/repos.

type GiteaAppStatusResource added in v0.2.0

type GiteaAppStatusResource struct {
	Connected   bool   `json:"connected"`
	InstanceURL string `json:"instance_url,omitempty"`
	ClientID    string `json:"client_id,omitempty"`
	CreatedAt   string `json:"created_at,omitempty"`
	Authorized  bool   `json:"authorized"`
	BaseURL     string `json:"base_url,omitempty"`
}

GiteaAppStatusResource mirrors internal/api's giteaAppStatusResource: GET /api/v1/gitea-app's response.

type GlobalEnvironmentResource added in v0.2.0

type GlobalEnvironmentResource struct {
	ID            string `json:"id"`
	ProjectID     string `json:"project_id"`
	Name          string `json:"name"`
	Protected     bool   `json:"protected"`
	CreatedAt     string `json:"created_at"`
	Kind          string `json:"kind"`
	Scope         string `json:"scope"`
	SortOrder     int    `json:"sort_order"`
	AppCount      int    `json:"app_count"`
	DatabaseCount int    `json:"database_count"`
}

GlobalEnvironmentResource mirrors internal/api's environmentListResource, one row of GET /api/v1/environments.

type GoLivePlanRequest added in v0.2.0

type GoLivePlanRequest struct {
	Domain     string                    `json:"domain,omitempty"`
	Domains    []string                  `json:"domains,omitempty"`
	Automation *DomainAutomationOverride `json:"automation,omitempty"`
}

GoLivePlanRequest is the body of POST .../domains/go-live/plan.

type GoLivePlanResponse added in v0.2.0

type GoLivePlanResponse struct {
	Plans []GoLiveResult `json:"plans"`
}

GoLivePlanResponse is the dry run result.

type GoLiveRequest added in v0.2.0

type GoLiveRequest struct {
	Automation *DomainAutomationOverride `json:"automation,omitempty"`
	DNS        string                    `json:"dns,omitempty"`
	Replace    bool                      `json:"replace,omitempty"`
}

GoLiveRequest is the body of POST .../go-live.

type GoLiveResult added in v0.2.0

type GoLiveResult struct {
	RunID     string                 `json:"run_id,omitempty"`
	App       string                 `json:"app"`
	Domain    string                 `json:"domain"`
	State     string                 `json:"state"`
	URL       string                 `json:"url,omitempty"`
	Steps     []GoLiveStep           `json:"steps"`
	DNS       []DomainDNSResult      `json:"dns,omitempty"`
	Policy    DomainAutomationPolicy `json:"policy"`
	Undoable  bool                   `json:"undoable,omitempty"`
	CheckedAt string                 `json:"checked_at"`
}

GoLiveResult mirrors internal/api's goLiveResult.

type GoLiveStep added in v0.2.0

type GoLiveStep struct {
	ID         string             `json:"id"`
	State      string             `json:"state"`
	Detail     string             `json:"detail,omitempty"`
	Provider   string             `json:"provider,omitempty"`
	Record     *DNSRecordResource `json:"record,omitempty"`
	Resolvers  []ResolverResult   `json:"resolvers,omitempty"`
	Issuer     string             `json:"issuer,omitempty"`
	NotAfter   *time.Time         `json:"not_after,omitempty"`
	URL        string             `json:"url,omitempty"`
	HTTPStatus int                `json:"http_status,omitempty"`
}

GoLiveStep mirrors internal/api's goLiveStep.

type HSTSHost

type HSTSHost struct {
	Host     string `json:"host"`
	Verified bool   `json:"verified"`
	Issuer   string `json:"issuer,omitempty"`
	Error    string `json:"error,omitempty"`
}

HSTSHost is one probed public host.

type HSTSStatus

type HSTSStatus struct {
	Enabled  bool       `json:"enabled"`
	Ready    bool       `json:"ready"`
	Hosts    []HSTSHost `json:"hosts"`
	Warnings []string   `json:"warnings,omitempty"`
}

HSTSStatus is the HSTS setting plus the trusted-certificate probe.

type HTTPSPreflightPort added in v0.2.0

type HTTPSPreflightPort struct {
	Port      int  `json:"port"`
	Reachable bool `json:"reachable"`
}

HTTPSPreflightPort is one self-dial result; false is a hint, not proof.

type HTTPSStatusResource added in v0.2.0

type HTTPSStatusResource struct {
	State            string     `json:"state"`
	Domain           string     `json:"domain,omitempty"`
	PublicHost       string     `json:"public_host,omitempty"`
	PublicHostSource string     `json:"public_host_source,omitempty"`
	SuggestedDomain  string     `json:"suggested_domain,omitempty"`
	Staging          bool       `json:"staging"`
	Issuer           string     `json:"issuer,omitempty"`
	NotAfter         *time.Time `json:"not_after,omitempty"`
	Error            string     `json:"error,omitempty"`
	Hint             string     `json:"hint,omitempty"`
	DashboardURL     string     `json:"dashboard_url,omitempty"`
	DefaultEmail     string     `json:"default_email,omitempty"`
	// Preflight is set on the enable response only.
	Preflight []HTTPSPreflightPort `json:"preflight,omitempty"`
}

HTTPSStatusResource mirrors internal/api's httpsStatusResource (GET/POST /api/v1/settings/ingress/https): state is off, pending, issued or failed.

type HeadersPolicyResource added in v0.2.0

type HeadersPolicyResource struct {
	Domain     string                `json:"domain"`
	Kind       string                `json:"kind"`
	Configured bool                  `json:"configured"`
	Spec       trafficpolicy.Headers `json:"spec"`
	UpdatedAt  string                `json:"updated_at,omitempty"`
}

HeadersPolicyResource is GET/PUT .../domains/{domain}/headers.

type HealthDiscoveryAttempt added in v0.2.0

type HealthDiscoveryAttempt struct {
	Path      string `json:"path"`
	Success   bool   `json:"success"`
	Error     string `json:"error,omitempty"`
	LatencyMs int64  `json:"latency_ms"`
}

HealthDiscoveryAttempt mirrors internal/api's healthDiscoveryAttempt (internal/api/apps_health_discover.go).

type HealthDiscoveryResponse added in v0.2.0

type HealthDiscoveryResponse struct {
	Name     string                   `json:"name"`
	Attempts []HealthDiscoveryAttempt `json:"attempts"`
	Found    string                   `json:"found,omitempty"`
}

HealthDiscoveryResponse mirrors internal/api's healthDiscoveryResponse. Found is set only when exactly one candidate path succeeded.

type HookRunResource

type HookRunResource struct {
	HookType string    `json:"hook_type"`
	Command  string    `json:"command"`
	ExitCode int       `json:"exit_code"`
	Success  bool      `json:"success"`
	Output   string    `json:"output"`
	RanAt    time.Time `json:"ran_at"`
}

HookRunResource mirrors internal/api's hookRunResource (apps_hooks.go): one pre/post-deploy hook's most recent outcome.

type HostFirewallActionRequest added in v0.2.0

type HostFirewallActionRequest struct {
	DryRun bool `json:"dry_run"`
}

HostFirewallActionRequest mirrors internal/api's hostFirewallActionRequest.

type HostFirewallPort added in v0.2.0

type HostFirewallPort struct {
	Port     int    `json:"port"`
	Protocol string `json:"protocol"`
}

HostFirewallPort mirrors internal/api's hostFirewallPort.

type HostFirewallResource added in v0.2.0

type HostFirewallResource struct {
	Installed       bool               `json:"installed"`
	Active          bool               `json:"active"`
	DefaultIncoming string             `json:"default_incoming,omitempty"`
	Required        []HostFirewallPort `json:"required"`
	Commands        []string           `json:"commands"`
}

HostFirewallResource mirrors internal/api's hostFirewallResource.

type HubCheck added in v0.2.0

type HubCheck struct {
	ID         string `json:"id"`
	Severity   string `json:"severity"`
	Message    string `json:"message"`
	NextAction string `json:"next_action,omitempty"`
}

HubCheck is one preflight finding.

type HubItem added in v0.2.0

type HubItem struct {
	SourceDB      string          `json:"source_db"`
	SizeBytes     int64           `json:"size_bytes"`
	Tables        int             `json:"tables"`
	Extensions    []string        `json:"extensions,omitempty"`
	TargetName    string          `json:"target_name"`
	TargetVersion string          `json:"target_version"`
	Selected      bool            `json:"selected"`
	Status        string          `json:"status"`
	Reason        string          `json:"reason,omitempty"`
	Preflight     HubPreflight    `json:"preflight"`
	Checked       int             `json:"checked"`
	Mismatched    int             `json:"mismatched"`
	TableCounts   []DataCopyTable `json:"table_counts,omitempty"`
}

HubItem is one source database in a session.

type HubLocalSource added in v0.2.0

type HubLocalSource struct {
	Container string `json:"container"`
	Image     string `json:"image"`
	Engine    string `json:"engine"`
	Running   bool   `json:"running"`
	Network   string `json:"network,omitempty"`
	Host      string `json:"host,omitempty"`
	Port      int    `json:"port,omitempty"`
	Problem   string `json:"problem,omitempty"`
}

HubLocalSource is a database container on the node, with how to reach it.

type HubPreflight added in v0.2.0

type HubPreflight struct {
	Checks          []HubCheck `json:"checks"`
	TargetVersion   string     `json:"target_version"`
	RequiredBytes   int64      `json:"required_bytes"`
	EstimateSeconds int        `json:"estimate_seconds"`
	Blocked         bool       `json:"blocked"`
}

HubPreflight is the checks for one database.

type HubSelection added in v0.2.0

type HubSelection struct {
	SourceDB      string  `json:"source_db"`
	Selected      *bool   `json:"selected,omitempty"`
	TargetName    *string `json:"target_name,omitempty"`
	TargetVersion *string `json:"target_version,omitempty"`
}

HubSelection changes one item's plan. Nil fields are left alone.

type HubSession added in v0.2.0

type HubSession struct {
	ID            string     `json:"id"`
	Engine        string     `json:"engine"`
	Host          string     `json:"host"`
	Port          int        `json:"port"`
	User          string     `json:"user,omitempty"`
	ServerVersion string     `json:"server_version"`
	FreeBytes     int64      `json:"free_bytes"`
	Step          string     `json:"step"`
	Container     string     `json:"source_container,omitempty"`
	HelperNetwork string     `json:"helper_network,omitempty"`
	PasswordHeld  bool       `json:"password_held"`
	Running       bool       `json:"running"`
	Items         []HubItem  `json:"items"`
	Summary       HubSummary `json:"summary"`
}

HubSession is a migration session with its plan and progress.

type HubSource added in v0.2.0

type HubSource struct {
	Engine   string `json:"engine"`
	Host     string `json:"host"`
	Port     int    `json:"port,omitempty"`
	User     string `json:"user,omitempty"`
	Password string `json:"password,omitempty"`
	TLS      bool   `json:"tls,omitempty"`
	NodeID   string `json:"node_id,omitempty"`
	// Container names a local database container to read over its own network.
	Container string `json:"container,omitempty"`
}

HubSource locates a source server. Password travels in the request body only and is never stored by the control plane.

type HubSummary added in v0.2.0

type HubSummary struct {
	Databases       int   `json:"databases"`
	Selected        int   `json:"selected"`
	Blocked         int   `json:"blocked"`
	Warnings        int   `json:"warnings"`
	Verified        int   `json:"verified"`
	Failed          int   `json:"failed"`
	Copying         int   `json:"copying"`
	TotalBytes      int64 `json:"total_bytes"`
	RequiredBytes   int64 `json:"required_bytes"`
	EstimateSeconds int   `json:"estimate_seconds"`
	CanApply        bool  `json:"can_apply"`
}

HubSummary is the plan totals.

type IAMAbilityUse

type IAMAbilityUse struct {
	Ability    string `json:"ability"`
	Requests   int    `json:"requests"`
	LastUsedAt string `json:"last_used_at"`
}

IAMAbilityUse mirrors internal/api's abilityUse.

type IAMAnalysis added in v0.2.0

type IAMAnalysis struct {
	Score    int            `json:"score"`
	Counts   map[string]int `json:"counts"`
	Findings []IAMFinding   `json:"findings"`
}

IAMAnalysis mirrors internal/api's analysisResponse.

type IAMEffective added in v0.2.0

type IAMEffective struct {
	Principal  IAMPrincipal          `json:"principal"`
	Policies   []IAMPolicyBrief      `json:"policies"`
	Restricted bool                  `json:"restricted"`
	Abilities  []IAMEffectiveAbility `json:"abilities"`
}

IAMEffective mirrors internal/api's effectiveResponse.

type IAMEffectiveAbility added in v0.2.0

type IAMEffectiveAbility struct {
	Ability         string   `json:"ability"`
	Risk            string   `json:"risk"`
	Flat            bool     `json:"flat"`
	All             bool     `json:"all"`
	Allowed         int      `json:"allowed"`
	Total           int      `json:"total"`
	Apps            []string `json:"apps"`
	Databases       []string `json:"databases"`
	GrantedByPolicy int      `json:"granted_by_policy"`
	DeniedByPolicy  int      `json:"denied_by_policy"`
}

IAMEffectiveAbility mirrors internal/api's effectiveAbility.

type IAMFinding added in v0.2.0

type IAMFinding struct {
	Kind           string `json:"kind"`
	Severity       string `json:"severity"`
	PolicyID       string `json:"policy_id,omitempty"`
	PolicyName     string `json:"policy_name,omitempty"`
	StatementIndex *int   `json:"statement_index,omitempty"`
	PrincipalType  string `json:"principal_type,omitempty"`
	PrincipalID    string `json:"principal_id,omitempty"`
	Message        string `json:"message"`
	Fix            string `json:"fix"`
}

IAMFinding mirrors internal/api's finding.

type IAMPolicyBrief added in v0.2.0

type IAMPolicyBrief struct {
	ID   string `json:"id"`
	Name string `json:"name"`
}

IAMPolicyBrief is a policy id and name.

type IAMPrincipal added in v0.2.0

type IAMPrincipal struct {
	PrincipalType string   `json:"principal_type"`
	PrincipalID   string   `json:"principal_id"`
	Name          string   `json:"name"`
	Detail        string   `json:"detail,omitempty"`
	Abilities     []string `json:"abilities"`
	Active        bool     `json:"active"`
	PolicyIDs     []string `json:"policy_ids"`
}

IAMPrincipal mirrors internal/api's iamPrincipal.

type IAMSimulation added in v0.2.0

type IAMSimulation struct {
	PrincipalType        string            `json:"principal_type"`
	PrincipalID          string            `json:"principal_id"`
	PrincipalName        string            `json:"principal_name"`
	Action               string            `json:"action"`
	Resource             string            `json:"resource"`
	Allowed              bool              `json:"allowed"`
	DecidedBy            string            `json:"decided_by"`
	DecidingStatement    *IAMStatementRef  `json:"deciding_statement"`
	MatchedStatements    []IAMStatementRef `json:"matched_statements"`
	BaseAbilityGrants    bool              `json:"base_ability_grants"`
	EnvironmentResources []string          `json:"environment_resources"`
}

IAMSimulation mirrors internal/api's simulation.

type IAMStatementRef added in v0.2.0

type IAMStatementRef struct {
	PolicyID       string   `json:"policy_id"`
	PolicyName     string   `json:"policy_name"`
	StatementIndex int      `json:"statement_index"`
	Effect         string   `json:"effect"`
	Action         []string `json:"action"`
	Resource       []string `json:"resource"`
}

IAMStatementRef mirrors internal/api's statementRef.

type IAMSuggestions

type IAMSuggestions struct {
	WindowDays int                  `json:"window_days"`
	Tokens     []IAMTokenSuggestion `json:"tokens"`
	Note       string               `json:"note"`
}

IAMSuggestions mirrors internal/api's suggestionsResponse.

type IAMTokenSuggestion

type IAMTokenSuggestion struct {
	TokenID            string          `json:"token_id"`
	Name               string          `json:"name"`
	AgentName          string          `json:"agent_name,omitempty"`
	Granted            []string        `json:"granted"`
	Used               []IAMAbilityUse `json:"used"`
	Unused             []string        `json:"unused"`
	SuggestedAbilities []string        `json:"suggested_abilities"`
	Status             string          `json:"status"`
	Risk               string          `json:"risk"`
	Reason             string          `json:"reason"`
}

IAMTokenSuggestion mirrors internal/api's tokenSuggestion.

type IaCFile added in v0.2.0

type IaCFile struct {
	Name    string `json:"name"`
	Content string `json:"content"`
}

IaCFile is one resource file sent to plan or apply.

type IaCIssuesError added in v0.2.0

type IaCIssuesError struct{ Issues []iac.Issue }

IaCIssuesError carries the line numbered validation issues of a 422.

func (*IaCIssuesError) Error added in v0.2.0

func (e *IaCIssuesError) Error() string

Error joins the numbered issues into one message.

type IaCRequest added in v0.2.0

type IaCRequest struct {
	Files            []IaCFile         `json:"files"`
	Source           string            `json:"source,omitempty"`
	Project          string            `json:"project,omitempty"`
	Prune            bool              `json:"prune,omitempty"`
	Vars             map[string]string `json:"vars,omitempty"`
	Secrets          map[string]string `json:"secrets,omitempty"`
	NoDeploy         bool              `json:"no_deploy,omitempty"`
	ContinueOnError  bool              `json:"continue_on_error,omitempty"`
	ExpectedPlanHash string            `json:"expected_plan_hash,omitempty"`
}

IaCRequest mirrors internal/api's iacRequest, the body of POST /api/v1/apply/plan and /api/v1/apply.

type ImageAppUse

type ImageAppUse struct {
	App       string    `json:"app"`
	Role      string    `json:"role"`
	DeployID  string    `json:"deploy_id,omitempty"`
	Source    string    `json:"source,omitempty"`
	CommitSHA string    `json:"commit_sha,omitempty"`
	Branch    string    `json:"branch,omitempty"`
	At        time.Time `json:"at,omitempty"`
}

ImageAppUse says how an app relates to one image.

type ImageAutoUpdateResource added in v0.2.0

type ImageAutoUpdateResource struct {
	Enabled       bool       `json:"enabled"`
	LastCheckedAt *time.Time `json:"last_checked_at,omitempty"`
	LastResult    string     `json:"last_result,omitempty"`
	HasWebhook    bool       `json:"has_webhook"`
}

ImageAutoUpdateResource mirrors internal/api's imageAutoUpdateResource.

type ImageEntry

type ImageEntry struct {
	ID            string        `json:"id"`
	Digest        string        `json:"digest,omitempty"`
	Tags          []string      `json:"tags"`
	SizeBytes     int64         `json:"size_bytes"`
	SharedBytes   int64         `json:"shared_bytes"`
	Containers    int64         `json:"containers"`
	CreatedAt     time.Time     `json:"created_at"`
	Apps          []ImageAppUse `json:"apps"`
	Protected     bool          `json:"protected"`
	ProtectReason string        `json:"protect_reason,omitempty"`
}

ImageEntry is one image on a node with its owners and retention status.

type ImageGCFailure

type ImageGCFailure struct {
	ID    string `json:"id"`
	Error string `json:"error"`
}

ImageGCFailure is one image retention could not remove.

type ImageGCRequest

type ImageGCRequest struct {
	Node       string `json:"node,omitempty"`
	KeepPerApp *int   `json:"keep_per_app,omitempty"`
	MinAgeHrs  *int   `json:"min_age_hours,omitempty"`
	DryRun     bool   `json:"dry_run"`
}

ImageGCRequest is the body of POST /api/v1/images/gc.

type ImageGCResource

type ImageGCResource struct {
	DryRun         bool             `json:"dry_run"`
	Candidates     []ImageEntry     `json:"candidates"`
	Removed        []string         `json:"removed"`
	Failed         []ImageGCFailure `json:"failed"`
	ReclaimedBytes int64            `json:"reclaimed_bytes"`
	Retention      ImageRetention   `json:"retention"`
}

ImageGCResource is the result of POST /api/v1/images/gc.

type ImageLayer

type ImageLayer struct {
	ID        string    `json:"id"`
	CreatedBy string    `json:"created_by"`
	SizeBytes int64     `json:"size_bytes"`
	CreatedAt time.Time `json:"created_at"`
}

ImageLayer is one layer of an image.

type ImageLayersResource

type ImageLayersResource struct {
	Layers    []ImageLayer `json:"layers"`
	SizeBytes int64        `json:"size_bytes"`
}

ImageLayersResource is GET /api/v1/images/layers.

type ImageListResource

type ImageListResource struct {
	Node       string               `json:"node"`
	Images     []ImageEntry         `json:"images"`
	Totals     ImageTotals          `json:"totals"`
	Retention  ImageRetention       `json:"retention"`
	Signatures ImageSignatureStatus `json:"signatures"`
}

ImageListResource is GET /api/v1/images.

type ImageResource added in v0.2.0

type ImageResource struct {
	Tag       string    `json:"tag"`
	CreatedAt time.Time `json:"created_at"`
}

ImageResource mirrors internal/api's imageResource (internal/api/images.go): one element of GET /api/v1/apps/{name}/images's wire shape.

type ImageRetention

type ImageRetention struct {
	KeepPerApp int `json:"keep_per_app"`
	MinAgeHrs  int `json:"min_age_hours"`
}

ImageRetention is the retention policy in effect.

type ImageSignatureIssue

type ImageSignatureIssue struct {
	Code    string `json:"code"`
	Message string `json:"message"`
}

ImageSignatureIssue is one problem the signature policy check found.

type ImageSignaturePolicyRequest

type ImageSignaturePolicyRequest struct {
	Ref string `json:"ref,omitempty"`
}

ImageSignaturePolicyRequest is the optional body of POST /api/v1/images/signature-policy/validate.

type ImageSignaturePolicyResource

type ImageSignaturePolicyResource struct {
	Mode           string                `json:"mode"`
	RequestedMode  string                `json:"requested_mode"`
	KeyConfigured  bool                  `json:"key_configured"`
	KeyFingerprint string                `json:"key_fingerprint,omitempty"`
	OK             bool                  `json:"ok"`
	Issues         []ImageSignatureIssue `json:"issues"`
	Sample         *ImageVerifyResource  `json:"sample,omitempty"`
}

ImageSignaturePolicyResource is the result of validating the signature policy.

type ImageSignatureStatus

type ImageSignatureStatus struct {
	Mode       string `json:"mode"`
	Configured bool   `json:"configured"`
}

ImageSignatureStatus is the signature verification setup.

type ImageStatusResource

type ImageStatusResource struct {
	Image           string `json:"image"`
	Source          string `json:"source"`
	CurrentDigest   string `json:"current_digest,omitempty"`
	LatestDigest    string `json:"latest_digest,omitempty"`
	UpdateAvailable bool   `json:"update_available"`
	ImageArch       string `json:"image_arch,omitempty"`
	NodeArch        string `json:"node_arch,omitempty"`
	ArchMismatch    bool   `json:"arch_mismatch"`
	Message         string `json:"message,omitempty"`
}

ImageStatusResource is the GET /api/v1/apps/{name}/image-status response.

type ImageTotals

type ImageTotals struct {
	Count          int   `json:"count"`
	SizeBytes      int64 `json:"size_bytes"`
	ReclaimBytes   int64 `json:"reclaimable_bytes"`
	ProtectedCount int   `json:"protected_count"`
}

ImageTotals summarizes an inventory.

type ImageUpdateWebhookResource added in v0.2.0

type ImageUpdateWebhookResource struct {
	Path  string `json:"path"`
	Token string `json:"token"`
}

ImageUpdateWebhookResource is the freshly minted webhook; Token is shown once.

type ImageVerifyRequest

type ImageVerifyRequest struct {
	Node string `json:"node,omitempty"`
	ID   string `json:"id,omitempty"`
	Ref  string `json:"ref,omitempty"`
}

ImageVerifyRequest is the body of POST /api/v1/images/verify.

type ImageVerifyResource

type ImageVerifyResource struct {
	Status  string `json:"status"`
	Message string `json:"message"`
}

ImageVerifyResource is the result of a signature check.

type ImportAnalysis added in v0.2.0

type ImportAnalysis struct {
	RepoURL      string      `json:"repo_url"`
	Branch       string      `json:"branch"`
	Monorepo     bool        `json:"monorepo"`
	AppDirectory string      `json:"app_directory,omitempty"`
	Name         AnalyzeText `json:"name"`
	Stack        struct {
		Runtime   string `json:"runtime"`
		Framework string `json:"framework,omitempty"`
		Evidence  string `json:"evidence"`
	} `json:"stack"`
	Build AnalyzeBuild `json:"build"`
	Port  struct {
		Value    int    `json:"value"`
		Evidence string `json:"evidence"`
	} `json:"port"`
	Health AnalyzeText `json:"health"`
	Memory struct {
		Bytes    int64  `json:"bytes"`
		Evidence string `json:"evidence"`
	} `json:"memory"`
	Domain    AnalyzeText        `json:"domain"`
	Env       []AnalyzeEnvKey    `json:"env"`
	Databases []AnalyzeDatabase  `json:"databases"`
	Warnings  []ImportWarning    `json:"warnings"`
	Detection Detection          `json:"detection"`
	Packages  []WorkspacePackage `json:"packages"`
	FilesRead int                `json:"files_read"`
}

ImportAnalysis mirrors internal/appwizard's Analysis.

type ImportAnalyzeRequest added in v0.2.0

type ImportAnalyzeRequest struct {
	RepoURL        string `json:"repo_url"`
	Ref            string `json:"ref,omitempty"`
	BaseDirectory  string `json:"base_directory,omitempty"`
	Directory      string `json:"directory,omitempty"`
	DockerfilePath string `json:"dockerfile_path,omitempty"`
	BuildType      string `json:"build_type,omitempty"`
	Name           string `json:"name,omitempty"`
	Token          string `json:"token,omitempty"`
}

ImportAnalyzeRequest is POST /api/v1/imports/analyze's body.

type ImportCutoverAction added in v0.2.0

type ImportCutoverAction struct {
	Kind  string `json:"kind"`
	Label string `json:"label"`
	API   string `json:"api,omitempty"`
	Value string `json:"value,omitempty"`
}

ImportCutoverAction is the one thing a readiness fix offers.

type ImportCutoverCheck added in v0.2.0

type ImportCutoverCheck struct {
	ID     string            `json:"id"`
	Title  string            `json:"title"`
	Status string            `json:"status"`
	Detail string            `json:"detail,omitempty"`
	Fix    *ImportCutoverFix `json:"fix,omitempty"`
}

ImportCutoverCheck is one readiness item.

type ImportCutoverDomainPlan added in v0.2.0

type ImportCutoverDomainPlan struct {
	Domain   string                `json:"domain"`
	Method   string                `json:"method"`
	Current  []string              `json:"current,omitempty"`
	Provider string                `json:"provider,omitempty"`
	Zone     string                `json:"zone,omitempty"`
	Desired  *ImportCutoverRecord  `json:"desired,omitempty"`
	Replace  []ImportCutoverRecord `json:"replace,omitempty"`
	Message  string                `json:"message,omitempty"`
}

ImportCutoverDomainPlan is what switching one domain involves.

type ImportCutoverDomainRun added in v0.2.0

type ImportCutoverDomainRun struct {
	Domain       string                `json:"domain"`
	Method       string                `json:"method"`
	Previous     []ImportCutoverRecord `json:"previous,omitempty"`
	Applied      *ImportCutoverRecord  `json:"applied,omitempty"`
	Manual       *ImportCutoverRecord  `json:"manual,omitempty"`
	ProbeStatus  int                   `json:"probe_status,omitempty"`
	Switched     bool                  `json:"switched"`
	Restored     bool                  `json:"restored"`
	Verified     bool                  `json:"verified"`
	VerifyDetail string                `json:"verify_detail,omitempty"`
	Message      string                `json:"message,omitempty"`
}

ImportCutoverDomainRun is one domain's progress inside a run.

type ImportCutoverFix added in v0.2.0

type ImportCutoverFix struct {
	Summary string               `json:"summary"`
	Action  *ImportCutoverAction `json:"action,omitempty"`
}

ImportCutoverFix is the remedy for a warning or blocking check.

type ImportCutoverPlan added in v0.2.0

type ImportCutoverPlan struct {
	App        string                    `json:"app"`
	Verdict    string                    `json:"verdict"`
	Checks     []ImportCutoverCheck      `json:"checks"`
	Domains    []ImportCutoverDomainPlan `json:"domains"`
	HealthPath string                    `json:"health_path"`
	CheckedAt  string                    `json:"checked_at"`
}

ImportCutoverPlan is the readiness checklist for one staged app.

type ImportCutoverRecord added in v0.2.0

type ImportCutoverRecord struct {
	Name  string `json:"name"`
	Type  string `json:"type"`
	Value string `json:"value"`
	TTL   int    `json:"ttl_seconds,omitempty"`
}

ImportCutoverRecord is one DNS record.

type ImportCutoverRun added in v0.2.0

type ImportCutoverRun struct {
	ID           string                   `json:"id"`
	App          string                   `json:"app"`
	Mode         string                   `json:"mode"`
	State        string                   `json:"state"`
	Method       string                   `json:"method,omitempty"`
	Awaiting     string                   `json:"awaiting,omitempty"`
	Domains      []ImportCutoverDomainRun `json:"domains"`
	Steps        []ImportCutoverStep      `json:"steps"`
	Plan         *ImportCutoverPlan       `json:"plan,omitempty"`
	Error        string                   `json:"error,omitempty"`
	CreatedAt    time.Time                `json:"created_at"`
	UpdatedAt    time.Time                `json:"updated_at"`
	Rollbackable bool                     `json:"rollbackable"`
	InFlight     bool                     `json:"in_flight"`
}

ImportCutoverRun is one dry run or switch.

func (ImportCutoverRun) Settled added in v0.2.0

func (r ImportCutoverRun) Settled() bool

Settled reports whether the run needs nothing more from a poller.

type ImportCutoverStart added in v0.2.0

type ImportCutoverStart struct {
	Mode           string `json:"mode"`
	Confirm        string `json:"confirm,omitempty"`
	AcceptWarnings bool   `json:"accept_warnings,omitempty"`
}

ImportCutoverStart is the body of POST .../cutover/runs.

type ImportCutoverStep added in v0.2.0

type ImportCutoverStep struct {
	Name       string `json:"name"`
	State      string `json:"state"`
	Domain     string `json:"domain,omitempty"`
	Detail     string `json:"detail,omitempty"`
	DurationMS int64  `json:"duration_ms"`
}

ImportCutoverStep is one timed entry of a run.

type ImportEnvVar added in v0.2.0

type ImportEnvVar struct {
	Key        string `json:"key"`
	Value      string `json:"value,omitempty"`
	Required   bool   `json:"required"`
	HasDefault bool   `json:"has_default"`
	Secret     bool   `json:"secret"`
	Source     string `json:"source,omitempty"`
}

ImportEnvVar mirrors internal/importplan's EnvVar.

type ImportPlan added in v0.2.0

type ImportPlan struct {
	Source             string          `json:"source"`
	SuggestedName      string          `json:"suggested_name"`
	Deploy             string          `json:"deploy"`
	RepoURL            string          `json:"repo_url,omitempty"`
	Ref                string          `json:"ref,omitempty"`
	ComposeYAML        string          `json:"compose_yaml,omitempty"`
	Services           []ImportService `json:"services"`
	DomainSuggestion   string          `json:"domain_suggestion,omitempty"`
	Warnings           []ImportWarning `json:"warnings"`
	MissingRequiredEnv []string        `json:"missing_required_env"`
}

ImportPlan mirrors internal/importplan's DeploymentPlan.

type ImportPlanRequest added in v0.2.0

type ImportPlanRequest struct {
	Text string            `json:"text"`
	Kind string            `json:"kind,omitempty"`
	Ref  string            `json:"ref,omitempty"`
	Name string            `json:"name,omitempty"`
	Port int               `json:"port,omitempty"`
	Env  map[string]string `json:"env,omitempty"`
}

ImportPlanRequest is POST /api/v1/imports/plan's body.

type ImportPort added in v0.2.0

type ImportPort struct {
	Host      int `json:"host,omitempty"`
	Container int `json:"container"`
}

ImportPort mirrors internal/importplan's PortMapping.

type ImportService added in v0.2.0

type ImportService struct {
	Name        string         `json:"name"`
	Image       string         `json:"image,omitempty"`
	Build       string         `json:"build"`
	BuildReason string         `json:"build_reason,omitempty"`
	Port        int            `json:"port,omitempty"`
	Ports       []ImportPort   `json:"ports,omitempty"`
	Command     []string       `json:"command,omitempty"`
	Entrypoint  []string       `json:"entrypoint,omitempty"`
	HealthPath  string         `json:"health_path,omitempty"`
	Env         []ImportEnvVar `json:"env,omitempty"`
	Volumes     []ImportVolume `json:"volumes,omitempty"`
	Restart     string         `json:"restart,omitempty"`
	MemoryBytes int64          `json:"memory_bytes,omitempty"`
	NanoCPUs    int64          `json:"nano_cpus,omitempty"`
}

ImportService mirrors internal/importplan's ServicePlan.

type ImportVolume added in v0.2.0

type ImportVolume struct {
	Name          string `json:"name,omitempty"`
	HostPath      string `json:"host_path,omitempty"`
	ContainerPath string `json:"container_path"`
	ReadOnly      bool   `json:"read_only,omitempty"`
	NeedsApproval bool   `json:"needs_approval,omitempty"`
}

ImportVolume mirrors internal/importplan's VolumeMount.

type ImportWarning added in v0.2.0

type ImportWarning struct {
	Code    string `json:"code"`
	Message string `json:"message"`
}

ImportWarning mirrors internal/importplan's Warning.

type InboxItem

type InboxItem struct {
	AlertHistoryEntry
	Read bool `json:"read"`
}

InboxItem mirrors internal/api's inboxItemResource.

type InboxPrefs

type InboxPrefs struct {
	MinSeverity     string     `json:"min_severity"`
	MutedApps       []string   `json:"muted_apps"`
	DigestEnabled   bool       `json:"digest_enabled"`
	DigestHour      int        `json:"digest_hour"`
	DigestChannelID string     `json:"digest_channel_id"`
	LastDigestAt    *time.Time `json:"last_digest_at,omitempty"`
}

InboxPrefs mirrors internal/api's inboxPrefsResource.

type IngressConnectivity added in v0.2.0

type IngressConnectivity struct {
	Host           string                    `json:"host,omitempty"`
	HostInferred   bool                      `json:"host_inferred,omitempty"`
	Addresses      []string                  `json:"addresses"`
	Private        bool                      `json:"private"`
	Ports          []IngressConnectivityPort `json:"ports"`
	HTTP01Possible bool                      `json:"http01_possible"`
	DNSProvider    string                    `json:"dns_provider"`
	Guidance       string                    `json:"guidance"`
}

IngressConnectivity mirrors internal/api's ingressConnectivityResource.

type IngressConnectivityPort added in v0.2.0

type IngressConnectivityPort struct {
	Port      int    `json:"port"`
	Address   string `json:"address"`
	Reachable bool   `json:"reachable"`
}

IngressConnectivityPort is one probed ingress port.

type IngressSettingsResource added in v0.2.0

type IngressSettingsResource struct {
	PrimaryDomain    string `json:"primary_domain,omitempty"`
	ACMEEnabled      bool   `json:"acme_enabled"`
	ACMEEmail        string `json:"acme_email,omitempty"`
	ACMEDirectoryURL string `json:"acme_directory_url,omitempty"`
	HSTSEnabled      bool   `json:"hsts_enabled"`
	// FallbackDomainsEnabled toggles the automatic <app>.<dashed-ip>.sslip.io hostnames.
	FallbackDomainsEnabled bool `json:"fallback_domains_enabled"`
	// PublicHost and PublicHostSource are read-only (env, detected, disabled, none).
	PublicHost       string `json:"public_host,omitempty"`
	PublicHostSource string `json:"public_host_source,omitempty"`
	// PublicHTTPSPort is the port clients use behind a proxy; 0 means the ingress listen port.
	PublicHTTPSPort int `json:"public_https_port,omitempty"`
	// TLSTerminatedUpstream: a proxy owns TLS, ACME is never attempted here.
	TLSTerminatedUpstream bool `json:"tls_terminated_upstream,omitempty"`
	// ACMESkippedUpstream and TrustedProxiesMissing are read-only.
	ACMESkippedUpstream   bool `json:"acme_skipped_upstream,omitempty"`
	TrustedProxiesMissing bool `json:"trusted_proxies_missing,omitempty"`
	// AppsBaseDomain gives new apps without a domain <app>.<base> and creates
	// the DNS record; the DNS fields tune the records Levelrail creates.
	AppsBaseDomain string `json:"apps_base_domain,omitempty"`
	DNSCNAMETarget string `json:"dns_cname_target,omitempty"`
	DNSTTLSeconds  int    `json:"dns_ttl_seconds,omitempty"`
	DNSProxied     bool   `json:"dns_proxied,omitempty"`
}

IngressSettingsResource mirrors internal/api's ingressSettingsResource (internal/api/ingress_settings.go): the shape of both GET and PUT /api/v1/settings/ingress.

type InstallPluginInput

type InstallPluginInput struct {
	Manifest         string   `json:"manifest,omitempty"`
	ManifestURL      string   `json:"manifest_url,omitempty"`
	Signature        string   `json:"signature,omitempty"`
	SignatureURL     string   `json:"signature_url,omitempty"`
	KeyID            string   `json:"key_id,omitempty"`
	ExpectedDigest   string   `json:"expected_digest,omitempty"`
	ConfigJSON       string   `json:"config_json,omitempty"`
	ApproveAbilities []string `json:"approve_abilities,omitempty"`
}

InstallPluginInput is the package an operator submits for install.

type InstanceInfo

type InstanceInfo struct {
	InstanceID  string `json:"instance_id"`
	Name        string `json:"name"`
	ShortName   string `json:"short_name"`
	Version     string `json:"version"`
	Fingerprint string `json:"fingerprint"`
}

InstanceInfo mirrors internal/api's instanceResource, the public server identity.

func FetchInstanceInfo

func FetchInstanceInfo(ctx context.Context, hc *http.Client, baseURL string) (*InstanceInfo, error)

FetchInstanceInfo reads GET /api/v1/instance. A nil info with a nil error means the server answered 404: it predates server identity.

type IntegrationCatalogEntryResource added in v0.2.0

type IntegrationCatalogEntryResource struct {
	Key         string                             `json:"key"`
	Name        string                             `json:"name"`
	Description string                             `json:"description"`
	DocsURL     string                             `json:"docs_url"`
	EnvVars     []IntegrationCatalogEnvVarResource `json:"env_vars"`
	Frameworks  []string                           `json:"frameworks,omitempty"`
}

IntegrationCatalogEntryResource mirrors internal/api's integrationCatalogEntry: one internal/integrations.Catalog entry, GET /api/v1/integrations' wire shape.

type IntegrationCatalogEnvVarResource added in v0.2.0

type IntegrationCatalogEnvVarResource struct {
	Name        string `json:"name"`
	Type        string `json:"type"`
	Required    bool   `json:"required"`
	Default     string `json:"default,omitempty"`
	Placeholder string `json:"placeholder,omitempty"`
}

IntegrationCatalogEnvVarResource mirrors internal/api's integrationCatalogEnvVar (internal/api/app_integrations.go).

type Integrity

type Integrity struct {
	Status     IntegrityStatus      `json:"status"`
	Pending    *IntegrityPending    `json:"pending,omitempty"`
	Candidates []IntegrityCandidate `json:"candidates"`
}

Integrity is the /api/v1/system/integrity resource.

type IntegrityCandidate

type IntegrityCandidate struct {
	Name       string     `json:"name"`
	SizeBytes  int64      `json:"size_bytes"`
	CreatedAt  time.Time  `json:"created_at"`
	VerifiedAt *time.Time `json:"verified_at,omitempty"`
	Verified   bool       `json:"verified"`
}

IntegrityCandidate is one snapshot that can be restored.

type IntegrityPending

type IntegrityPending struct {
	Name          string    `json:"name"`
	SHA256        string    `json:"sha256"`
	SchemaVersion int       `json:"schema_version"`
	StagedAt      time.Time `json:"staged_at"`
	StagedBy      string    `json:"staged_by,omitempty"`
}

IntegrityPending is a snapshot staged to replace the database at the next boot.

type IntegrityRestore

type IntegrityRestore struct {
	Pending IntegrityPending `json:"pending"`
	Restart struct {
		Supported bool   `json:"supported"`
		Hint      string `json:"hint,omitempty"`
	} `json:"restart"`
}

IntegrityRestore is the answer to staging a restore.

type IntegrityStatus

type IntegrityStatus struct {
	Healthy    bool      `json:"healthy"`
	Mode       string    `json:"mode"`
	CheckedAt  time.Time `json:"checked_at"`
	Error      string    `json:"error,omitempty"`
	Checks     int64     `json:"checks"`
	Failures   int64     `json:"failures"`
	LastFullAt time.Time `json:"last_full_at"`
}

IntegrityStatus is the result of the last control plane database check.

type InvestigateEvent added in v0.2.0

type InvestigateEvent struct {
	At          time.Time `json:"at"`
	Kind        string    `json:"kind"`
	Severity    string    `json:"severity"`
	Title       string    `json:"title"`
	Detail      string    `json:"detail,omitempty"`
	Ref         string    `json:"ref,omitempty"`
	LikelyCause bool      `json:"likely_cause,omitempty"`
}

InvestigateEvent is one What changed timeline entry.

type InvestigateRoute added in v0.2.0

type InvestigateRoute struct {
	Route        string  `json:"route"`
	Requests     float64 `json:"requests"`
	Share        float64 `json:"share"`
	ErrorRate4xx float64 `json:"error_rate_4xx"`
	ErrorRate5xx float64 `json:"error_rate_5xx"`
	AvgMs        float64 `json:"avg_ms"`
}

InvestigateRoute is one route's share of a window.

type InvestigateStatus added in v0.2.0

type InvestigateStatus struct {
	Status int     `json:"status"`
	Count  float64 `json:"count"`
	Share  float64 `json:"share"`
}

InvestigateStatus is one exact status code's count.

type InvestigateSummary added in v0.2.0

type InvestigateSummary struct {
	HasTraffic   bool    `json:"has_traffic"`
	Requests     float64 `json:"requests"`
	RatePerSec   float64 `json:"rate_per_sec"`
	ErrorRate4xx float64 `json:"error_rate_4xx"`
	ErrorRate5xx float64 `json:"error_rate_5xx"`
	P50Ms        float64 `json:"p50_ms"`
	P95Ms        float64 `json:"p95_ms"`
	P99Ms        float64 `json:"p99_ms"`
}

InvestigateSummary is one window's request health.

type InvestigationResource added in v0.2.0

type InvestigationResource struct {
	App             string              `json:"app"`
	From            time.Time           `json:"from"`
	To              time.Time           `json:"to"`
	Summary         InvestigateSummary  `json:"summary"`
	Baseline        InvestigateSummary  `json:"baseline"`
	RoutesAvailable bool                `json:"routes_available"`
	TopRoutes       []InvestigateRoute  `json:"top_routes"`
	StatusCodes     []InvestigateStatus `json:"status_codes"`
	Timeline        []InvestigateEvent  `json:"timeline"`
}

InvestigationResource mirrors internal/api's investigateResponse.

type InviteResource

type InviteResource struct {
	ID        string    `json:"id"`
	Email     string    `json:"email"`
	Role      string    `json:"role,omitempty"`
	Abilities []string  `json:"abilities"`
	CreatedBy string    `json:"created_by,omitempty"`
	CreatedAt time.Time `json:"created_at"`
	ExpiresAt time.Time `json:"expires_at"`
	Expired   bool      `json:"expired"`
}

InviteResource mirrors internal/api's inviteResource (internal/api/invites.go).

type JanitorItem

type JanitorItem struct {
	Name      string `json:"name"`
	Detail    string `json:"detail,omitempty"`
	SizeBytes int64  `json:"size_bytes"`
	Action    string `json:"action"`
}

JanitorItem is one thing a stage removed, would remove, or kept.

type JanitorPolicy

type JanitorPolicy struct {
	Enabled               bool     `json:"enabled"`
	DryRun                bool     `json:"dry_run"`
	IntervalMinutes       int      `json:"interval_minutes"`
	DiskFreeBudgetPercent float64  `json:"disk_free_budget_percent"`
	BuildCacheBudgetMB    int64    `json:"build_cache_budget_mb"`
	BuildCacheMaxAgeHours int      `json:"build_cache_max_age_hours"`
	VolumeQuarantineDays  int      `json:"volume_quarantine_days"`
	DeleteOrphanVolumes   bool     `json:"delete_orphan_volumes"`
	AttemptRetentionDays  int      `json:"attempt_retention_days"`
	AttemptKeepPerApp     int      `json:"attempt_keep_per_app"`
	DisabledStages        []string `json:"disabled_stages"`
}

JanitorPolicy is the cleanup configuration.

type JanitorPolicyPatch

type JanitorPolicyPatch struct {
	Enabled               *bool     `json:"enabled,omitempty"`
	DryRun                *bool     `json:"dry_run,omitempty"`
	IntervalMinutes       *int      `json:"interval_minutes,omitempty"`
	DiskFreeBudgetPercent *float64  `json:"disk_free_budget_percent,omitempty"`
	BuildCacheBudgetMB    *int64    `json:"build_cache_budget_mb,omitempty"`
	BuildCacheMaxAgeHours *int      `json:"build_cache_max_age_hours,omitempty"`
	VolumeQuarantineDays  *int      `json:"volume_quarantine_days,omitempty"`
	DeleteOrphanVolumes   *bool     `json:"delete_orphan_volumes,omitempty"`
	AttemptRetentionDays  *int      `json:"attempt_retention_days,omitempty"`
	AttemptKeepPerApp     *int      `json:"attempt_keep_per_app,omitempty"`
	DisabledStages        *[]string `json:"disabled_stages,omitempty"`
}

JanitorPolicyPatch changes only the fields that are set.

type JanitorQuarantined

type JanitorQuarantined struct {
	Name          string    `json:"name"`
	SizeBytes     int64     `json:"size_bytes"`
	FirstSeen     time.Time `json:"first_seen"`
	DeletableAt   time.Time `json:"deletable_at"`
	DeleteEnabled bool      `json:"delete_enabled"`
	Ready         bool      `json:"ready"`
}

JanitorQuarantined is a volume held before deletion.

type JanitorReport

type JanitorReport struct {
	ID             string         `json:"id"`
	StartedAt      time.Time      `json:"started_at"`
	Trigger        string         `json:"trigger"`
	DryRun         bool           `json:"dry_run"`
	FreePercent    float64        `json:"free_percent"`
	Pressure       bool           `json:"pressure"`
	Stages         []JanitorStage `json:"stages"`
	ReclaimedBytes int64          `json:"reclaimed_bytes"`
	Error          string         `json:"error,omitempty"`
}

JanitorReport is one cleanup pass.

type JanitorStage

type JanitorStage struct {
	Stage          string        `json:"stage"`
	Status         string        `json:"status"`
	Reason         string        `json:"reason,omitempty"`
	Items          []JanitorItem `json:"items"`
	ReclaimedBytes int64         `json:"reclaimed_bytes"`
	Error          string        `json:"error,omitempty"`
}

JanitorStage is what one stage did.

type JanitorStatus

type JanitorStatus struct {
	Policy         JanitorPolicy        `json:"policy"`
	FreePercent    float64              `json:"free_percent"`
	FreeBytes      int64                `json:"free_bytes"`
	TotalBytes     int64                `json:"total_bytes"`
	Pressure       bool                 `json:"pressure"`
	LastRun        *JanitorReport       `json:"last_run,omitempty"`
	Quarantine     []JanitorQuarantined `json:"quarantine"`
	TotalReclaimed int64                `json:"total_reclaimed_bytes"`
}

JanitorStatus is the policy, disk state and last pass.

type JobRunResource added in v0.2.0

type JobRunResource struct {
	ID           string     `json:"id"`
	TaskID       string     `json:"task_id"`
	JobName      string     `json:"job_name,omitempty"`
	ServiceName  string     `json:"service_name"`
	Trigger      string     `json:"trigger"`
	Status       string     `json:"status"`
	ScheduledFor *time.Time `json:"scheduled_for,omitempty"`
	StartedAt    time.Time  `json:"started_at"`
	FinishedAt   *time.Time `json:"finished_at,omitempty"`
	ExitCode     *int       `json:"exit_code,omitempty"`
	DurationMS   int64      `json:"duration_ms"`
	Attempts     int        `json:"attempts"`
	NodeID       string     `json:"node_id,omitempty"`
	Mode         string     `json:"mode,omitempty"`
	Message      string     `json:"message,omitempty"`
	Output       string     `json:"output,omitempty"`
}

JobRunResource mirrors internal/api's scheduledTaskRunResource: one job run. Output is only populated when a single run is fetched.

type JoinCommands added in v0.2.0

type JoinCommands struct {
	Docker string `json:"docker"`
	Binary string `json:"binary"`
}

JoinCommands are ready-to-paste commands that enroll a server.

type KeepTrialResult

type KeepTrialResult struct {
	Name        string    `json:"name"`
	Kept        []string  `json:"kept"`
	KeptAt      time.Time `json:"kept_at"`
	AlreadyKept bool      `json:"already_kept"`
}

KeepTrialResult mirrors internal/api's keepTrialResponse.

type KeyPolicy

type KeyPolicy struct {
	MaxKeyAgeDays   int        `json:"max_key_age_days"`
	RemindEveryDays int        `json:"remind_every_days"`
	LastRemindedAt  *time.Time `json:"last_reminded_at,omitempty"`
}

KeyPolicy mirrors internal/api's keyPolicyResource.

type KeyPolicyUpdate

type KeyPolicyUpdate struct {
	MaxKeyAgeDays   *int `json:"max_key_age_days,omitempty"`
	RemindEveryDays *int `json:"remind_every_days,omitempty"`
}

KeyPolicyUpdate sets the maximum key age policy; nil fields stay unchanged.

type KeyRotationRun

type KeyRotationRun struct {
	ID         string     `json:"id"`
	StartedAt  time.Time  `json:"started_at"`
	FinishedAt *time.Time `json:"finished_at,omitempty"`
	Total      int        `json:"total"`
	Done       int        `json:"done"`
	Failed     int        `json:"failed"`
	Actor      string     `json:"actor,omitempty"`
}

KeyRotationRun mirrors internal/api's rotationRunResource.

type ListAppsOptions added in v0.2.0

type ListAppsOptions struct {
	Limit, Offset int
	Environment   string
}

ListAppsOptions pages GET /api/v1/apps, matching the limit/offset query params internal/api/apps_list.go's own parseAppListFilter already accepts. Both zero means every matching app in one response, ListApps's own unpaged behavior.

type ListAuditLogOptions

type ListAuditLogOptions struct {
	Limit      int
	Before     string
	Path       string
	Method     string
	ClientKind string
	Search     string // case-insensitive substring across actor, ability, method, path, remote addr
	FailedOnly bool   // only entries with status_code >= 400
	Agent      string // only entries made with a token labeled with this agent name
	Resource   string // "domain:<name>", "zone:<name>" or "app:<name>"
	Actions    string // comma separated action prefixes, e.g. "dns_record.,domain."
}

ListAuditLogOptions is ListAuditLog's and DownloadAuditLogCSV's shared query input, mirroring GET /api/v1/audit-log's own ?limit/?before/ ?path/?method/?client_kind params (internal/api/audit.go). Zero values omit the param, the same convention ListBackupsOptions establishes.

type ListBackupsOptions

type ListBackupsOptions struct {
	Limit  int
	Before string
}

ListBackupsOptions is ListBackups' pagination input, mirroring the server's ?limit/?before query params. Zero values omit the param (Limit <= 0 uses the server default, Before == "" is the first page).

type ListNodesOptions added in v0.2.0

type ListNodesOptions struct {
	Query  string
	Limit  int
	Offset int
}

ListNodesOptions are the GET /api/v1/nodes filters, mirroring DeploymentListOptions' Values() shape.

func (ListNodesOptions) Values added in v0.2.0

func (o ListNodesOptions) Values() url.Values

Values renders the options as a query string, omitting unset filters.

type ListWebhookDeliveriesOptions

type ListWebhookDeliveriesOptions struct {
	Limit  int
	Before string
}

ListWebhookDeliveriesOptions is ListWebhookDeliveries' pagination input, the same shape ListBackupsOptions establishes.

type LoadBalancerActiveHealth added in v0.2.0

type LoadBalancerActiveHealth = loadbalancer.ActiveHealth

LoadBalancerActiveHealth is the active health check block.

type LoadBalancerArtifact added in v0.2.0

type LoadBalancerArtifact struct {
	Format      string   `json:"format"`
	Filename    string   `json:"filename"`
	ContentType string   `json:"content_type"`
	Body        string   `json:"body"`
	Warnings    []string `json:"warnings,omitempty"`
}

LoadBalancerArtifact is one generated infrastructure-as-code file.

type LoadBalancerCheck added in v0.2.0

type LoadBalancerCheck struct {
	Results []loadbalancer.CheckResult `json:"results"`
	Note    string                     `json:"note,omitempty"`
}

LoadBalancerCheck is POST /api/v1/apps/{name}/loadbalancer/check's body.

type LoadBalancerConfig added in v0.2.0

type LoadBalancerConfig = loadbalancer.Config

LoadBalancerConfig is a service's load balancer settings.

type LoadBalancerHistory added in v0.2.0

type LoadBalancerHistory struct {
	Upstreams []loadbalancer.UpstreamHistory `json:"upstreams"`
}

LoadBalancerHistory is GET /api/v1/apps/{name}/loadbalancer/history's body.

type LoadBalancerList added in v0.2.0

type LoadBalancerList struct {
	Items  []LoadBalancerSummary `json:"items"`
	Total  int                   `json:"total"`
	Limit  int                   `json:"limit"`
	Offset int                   `json:"offset"`
}

LoadBalancerList is GET /api/v1/loadbalancers' body.

type LoadBalancerListParams added in v0.2.0

type LoadBalancerListParams struct {
	State  string
	Search string
	Limit  int
	Offset int
}

LoadBalancerListParams filters and pages ListLoadBalancers; zero values are omitted.

type LoadBalancerPassiveHealth added in v0.2.0

type LoadBalancerPassiveHealth = loadbalancer.PassiveHealth

LoadBalancerPassiveHealth is the passive health check block.

type LoadBalancerRateLimit added in v0.2.0

type LoadBalancerRateLimit = loadbalancer.RateLimit

LoadBalancerRateLimit is the rate limit block.

type LoadBalancerResource added in v0.2.0

type LoadBalancerResource struct {
	AppName    string              `json:"app_name"`
	Configured bool                `json:"configured"`
	Config     *LoadBalancerConfig `json:"config,omitempty"`
	Algorithms []string            `json:"algorithms"`
	Formats    []string            `json:"export_formats"`
}

LoadBalancerResource is GET/PUT /api/v1/apps/{name}/loadbalancer's body.

type LoadBalancerRetries added in v0.2.0

type LoadBalancerRetries = loadbalancer.Retries

LoadBalancerRetries is the retry block.

type LoadBalancerStatus added in v0.2.0

type LoadBalancerStatus = loadbalancer.Status

LoadBalancerStatus is the live view of a service's load balancer.

type LoadBalancerSummary added in v0.2.0

type LoadBalancerSummary struct {
	App               string     `json:"app"`
	Service           string     `json:"service"`
	Algorithm         string     `json:"algorithm"`
	State             string     `json:"state"`
	UpstreamsTotal    int        `json:"upstreams_total"`
	UpstreamsHealthy  int        `json:"upstreams_healthy"`
	Reason            string     `json:"reason,omitempty"`
	LastCheck         *time.Time `json:"last_check,omitempty"`
	ConfigUpdatedAt   string     `json:"config_updated_at"`
	ActiveHealthCheck bool       `json:"active_health_check"`
}

LoadBalancerSummary is one row of GET /api/v1/loadbalancers.

type LoadBalancerUpstreamStatus added in v0.2.0

type LoadBalancerUpstreamStatus = loadbalancer.UpstreamStatus

LoadBalancerUpstreamStatus is one upstream's live view.

type LoadBalancerUpstreamTLS added in v0.2.0

type LoadBalancerUpstreamTLS = loadbalancer.UpstreamTLS

LoadBalancerUpstreamTLS is the upstream TLS block.

type LocalModel

type LocalModel struct {
	ID            string  `json:"id"`
	Label         string  `json:"label"`
	Vendor        string  `json:"vendor"`
	Repo          string  `json:"repo"`
	File          string  `json:"file"`
	ParamsB       float64 `json:"params_b"`
	Quant         string  `json:"quant"`
	DownloadBytes int64   `json:"download_bytes"`
	SHA256        string  `json:"sha256"`
	MinRAMMiB     int     `json:"min_ram_mib"`
	ContextLength int     `json:"context_length"`
	License       string  `json:"license"`
	Tier          string  `json:"tier"`
	Kind          string  `json:"kind"`
	ToolCalling   bool    `json:"tool_calling"`
	Notes         string  `json:"notes"`
}

LocalModel mirrors internal/models.CatalogEntry.

type LocalModelCard

type LocalModelCard struct {
	LocalModel
	Fit CPUFit `json:"fit"`
}

LocalModelCard is a curated entry with its estimate on a node.

type LocalModelCatalog

type LocalModelCatalog struct {
	Version    int              `json:"version"`
	VerifiedOn string           `json:"verified_on"`
	Note       string           `json:"note"`
	NodeID     string           `json:"node_id"`
	HostKnown  bool             `json:"host_known"`
	HostCPUs   int              `json:"host_cpus"`
	HostMemory int64            `json:"host_memory_bytes"`
	Bounds     CPUBounds        `json:"bounds"`
	Models     []LocalModelCard `json:"models"`
}

LocalModelCatalog mirrors internal/models.CatalogView.

type LogArchiveDumpRequest added in v0.2.0

type LogArchiveDumpRequest struct {
	AppName  string `json:"app_name"`
	TargetID string `json:"target_id"`
	From     string `json:"from"`
	To       string `json:"to"`
}

LogArchiveDumpRequest exports a time range now.

type LogArchiveObject added in v0.2.0

type LogArchiveObject struct {
	Key          string `json:"key"`
	Size         int64  `json:"size"`
	LastModified string `json:"last_modified"`
}

LogArchiveObject is one archived object.

type LogArchiveObjects added in v0.2.0

type LogArchiveObjects struct {
	Objects []LogArchiveObject `json:"objects"`
	Next    string             `json:"next,omitempty"`
}

LogArchiveObjects is one page of archived objects.

type LogArchivePolicy added in v0.2.0

type LogArchivePolicy struct {
	ID              string `json:"id"`
	AppName         string `json:"app_name"`
	TargetID        string `json:"target_id"`
	Enabled         bool   `json:"enabled"`
	Interval        string `json:"interval"`
	IntervalSeconds int64  `json:"interval_seconds"`
	RetentionDays   int    `json:"retention_days"`
	LastRunAt       string `json:"last_run_at,omitempty"`
	LastSuccessAt   string `json:"last_success_at,omitempty"`
	LastError       string `json:"last_error,omitempty"`
	CreatedAt       string `json:"created_at"`
}

LogArchivePolicy is a log archive schedule for one app, or all apps when AppName is empty.

type LogArchivePolicyRequest added in v0.2.0

type LogArchivePolicyRequest struct {
	AppName       string `json:"app_name"`
	TargetID      string `json:"target_id"`
	Interval      string `json:"interval,omitempty"`
	RetentionDays int    `json:"retention_days"`
	Enabled       *bool  `json:"enabled,omitempty"`
}

LogArchivePolicyRequest sets a policy.

type LogArchiveRun added in v0.2.0

type LogArchiveRun struct {
	ID         string `json:"id"`
	AppName    string `json:"app_name"`
	TargetID   string `json:"target_id"`
	Kind       string `json:"kind"`
	From       string `json:"from"`
	To         string `json:"to"`
	Status     string `json:"status"`
	Objects    int    `json:"objects"`
	Lines      int64  `json:"lines"`
	Bytes      int64  `json:"bytes"`
	Error      string `json:"error,omitempty"`
	StartedAt  string `json:"started_at"`
	FinishedAt string `json:"finished_at,omitempty"`
}

LogArchiveRun is one archive attempt.

type LogBudget

type LogBudget struct {
	MaxMB            int64 `json:"max_mb"`
	DefaultMB        int64 `json:"default_mb"`
	EffectiveMaxByte int64 `json:"effective_max_bytes"`
}

LogBudget is an app's log budget; MaxMB 0 means no override.

type LogDrainResource

type LogDrainResource struct {
	AppName string `json:"app_name"`
	Type    string `json:"type"`
	Target  string `json:"target"`
	Enabled bool   `json:"enabled"`
}

LogDrainResource mirrors internal/api's logDrainResource (apps_log_drain.go): GET/PUT /api/v1/apps/{name}/log-drain's wire shape. Type is "http" or "syslog", validated server-side.

type LogEntryResource

type LogEntryResource struct {
	Timestamp  time.Time       `json:"timestamp"`
	Stream     string          `json:"stream"`
	Message    string          `json:"message"`
	Structured bool            `json:"structured"`
	FieldsJSON json.RawMessage `json:"fields,omitempty"`
	// Level is the server-detected level, empty when the line has none.
	Level string `json:"level,omitempty"`
}

LogEntryResource mirrors internal/api's logEntryResource (internal/api/logs.go).

type LogExcerpt added in v0.2.0

type LogExcerpt struct {
	App     string   `json:"app"`
	From    string   `json:"from"`
	To      string   `json:"to"`
	Matched int      `json:"matched"`
	Shown   int      `json:"shown"`
	Lines   []string `json:"lines"`
	Notice  string   `json:"notice,omitempty"`
}

LogExcerpt is a capped, compact view of a log query result.

func BuildLogExcerpt added in v0.2.0

func BuildLogExcerpt(app string, from, to time.Time, entries []LogEntryResource, total, maxBytes int) LogExcerpt

BuildLogExcerpt renders entries (oldest first) as one line each and drops the oldest lines until the output fits maxBytes. total is how many lines matched before any trimming.

type LogPipeline

type LogPipeline struct {
	Rules []LogPipelineRule `json:"rules"`
}

LogPipeline is an app's ordered rule list.

type LogPipelinePreview

type LogPipelinePreview struct {
	Lines []LogPipelinePreviewLine `json:"lines"`
}

LogPipelinePreview is the response of PreviewLogPipeline.

type LogPipelinePreviewLine

type LogPipelinePreviewLine struct {
	Message string            `json:"message"`
	Dropped bool              `json:"dropped"`
	Fields  map[string]string `json:"fields,omitempty"`
}

LogPipelinePreviewLine is the outcome of one sample line.

type LogPipelineRule

type LogPipelineRule struct {
	Kind    string `json:"kind"`
	Pattern string `json:"pattern"`
	Replace string `json:"replace,omitempty"`
}

LogPipelineRule mirrors telemetry.PipelineRule.

type LogQuery added in v0.2.0

type LogQuery struct {
	App    string
	Deploy string
	Level  string
	Since  string
	Until  string
	Text   string
	// Order is "relevance" for best matches first (needs Text); empty is newest.
	Order string
	// MaxLines caps returned lines; 0 means DefaultLogMaxLines.
	MaxLines int
}

LogQuery selects log lines of one app.

type LogQuerySpec added in v0.2.0

type LogQuerySpec struct {
	Q         string     `json:"q,omitempty"`
	Level     string     `json:"level,omitempty"`
	Stream    string     `json:"stream,omitempty"`
	Fields    []string   `json:"fields,omitempty"`
	Container string     `json:"container,omitempty"`
	Range     string     `json:"range,omitempty"`
	From      *time.Time `json:"from,omitempty"`
	To        *time.Time `json:"to,omitempty"`
}

LogQuerySpec is the search a saved log query reproduces.

type LogSearch added in v0.2.0

type LogSearch struct {
	Text      string
	Level     string
	Container string
	Stream    string
	Fields    []string
	From      time.Time
	To        time.Time
	Limit     int
}

LogSearch selects stored log lines with the structured filters.

type LogSearchContainer added in v0.2.0

type LogSearchContainer struct {
	ID    string `json:"id"`
	Count int    `json:"count"`
}

LogSearchContainer is a container seen in a search, with its line count.

type LogSearchEntry added in v0.2.0

type LogSearchEntry struct {
	Timestamp time.Time `json:"timestamp"`
	Stream    string    `json:"stream"`
	Message   string    `json:"message"`
	Level     string    `json:"level,omitempty"`
	Container string    `json:"container,omitempty"`
}

LogSearchEntry is one stored log line.

type LogSearchResource added in v0.2.0

type LogSearchResource struct {
	Entries    []LogSearchEntry     `json:"entries"`
	Total      int                  `json:"total"`
	Containers []LogSearchContainer `json:"containers"`
}

LogSearchResource mirrors internal/api's logsResponse.

type LogSignature added in v0.2.0

type LogSignature struct {
	ID        string    `json:"id"`
	Template  string    `json:"template"`
	Level     string    `json:"level"`
	Count     int       `json:"count"`
	FirstSeen time.Time `json:"first_seen"`
	LastSeen  time.Time `json:"last_seen"`
	Buckets   []int     `json:"buckets"`
	Sample    string    `json:"sample"`
	New       bool      `json:"new,omitempty"`
}

LogSignature is one cluster of similar error lines.

type LogSignatureQuery added in v0.2.0

type LogSignatureQuery struct {
	From     time.Time
	To       time.Time
	Level    string
	Text     string
	Limit    int
	Baseline bool
}

LogSignatureQuery selects the window and shape of a signature report.

type LogSignatures added in v0.2.0

type LogSignatures struct {
	From        time.Time      `json:"from"`
	To          time.Time      `json:"to"`
	Scanned     int            `json:"scanned"`
	MaxRows     int            `json:"max_rows"`
	Truncated   bool           `json:"truncated"`
	Total       int            `json:"total"`
	NewCount    int            `json:"new_count"`
	HasBaseline bool           `json:"has_baseline"`
	Signatures  []LogSignature `json:"signatures"`
}

LogSignatures mirrors internal/api's logSignaturesResponse.

type LogStreamEntry added in v0.2.0

type LogStreamEntry struct {
	Line   string `json:"line"`
	Stream string `json:"stream"`
}

LogStreamEntry mirrors internal/api's sseLogEvent (internal/api/deploy_attempts.go), the exact JSON payload GET /api/v1/apps/{name}/logs/stream sends on each SSE "data:" line: no timestamp, unlike LogEntryResource's historical shape, since a live tail has no persisted-store round trip to attach one from.

type LogTrimResult

type LogTrimResult struct {
	TrimmedLines int64 `json:"trimmed_lines"`
	TrimmedBytes int64 `json:"trimmed_bytes"`
	StillOver    bool  `json:"still_over"`
}

LogTrimResult is the response of POST /api/v1/apps/{name}/log-budget/trim.

type LogUsage

type LogUsage struct {
	DefaultBudgetBytes int64         `json:"default_budget_bytes"`
	Apps               []LogUsageApp `json:"apps"`
}

LogUsage is the response of GET /api/v1/logs/usage.

type LogUsageApp

type LogUsageApp struct {
	App          string   `json:"app"`
	Bytes        int64    `json:"bytes"`
	Lines        int64    `json:"lines"`
	RateBytesMin float64  `json:"rate_bytes_per_min"`
	BudgetBytes  int64    `json:"budget_bytes"`
	BudgetCustom bool     `json:"budget_custom"`
	Percent      *float64 `json:"percent"`
	ForecastDays *float64 `json:"forecast_days"`
	TrimmedLines int64    `json:"trimmed_lines"`
	TrimmedBytes int64    `json:"trimmed_bytes"`
}

LogUsageApp is one app's stored log volume against its budget.

type MaintenancePreviewResource

type MaintenancePreviewResource struct {
	HTML       string `json:"html"`
	Status     int    `json:"status"`
	RetryAfter string `json:"retry_after"`
}

MaintenancePreviewResource is POST /api/v1/maintenance/preview.

type MaintenanceWindowResource added in v0.2.0

type MaintenanceWindowResource struct {
	ID          string     `json:"id,omitempty"`
	Name        string     `json:"name"`
	Cron        string     `json:"cron"`
	Duration    string     `json:"duration"`
	Timezone    string     `json:"timezone,omitempty"`
	Scope       string     `json:"scope"`
	Targets     []string   `json:"targets,omitempty"`
	Enabled     bool       `json:"enabled"`
	CreatedBy   string     `json:"created_by,omitempty"`
	CreatedAt   *time.Time `json:"created_at,omitempty"`
	Active      bool       `json:"active"`
	ActiveUntil *time.Time `json:"active_until,omitempty"`
	NextStart   *time.Time `json:"next_start,omitempty"`
}

MaintenanceWindowResource mirrors internal/api's maintenanceWindowResource.

type MajorUpgradeResource added in v0.2.0

type MajorUpgradeResource struct {
	ID             string `json:"id"`
	DatabaseName   string `json:"database_name"`
	FromVersion    string `json:"from_version"`
	ToVersion      string `json:"to_version"`
	Status         string `json:"status"`
	Phase          string `json:"phase,omitempty"`
	SnapshotVolume string `json:"snapshot_volume,omitempty"`
	Error          string `json:"error,omitempty"`
	StartedAt      string `json:"started_at"`
	FinishedAt     string `json:"finished_at,omitempty"`
}

MajorUpgradeResource mirrors internal/api's majorUpgradeResource.

type MarketplaceCatalog

type MarketplaceCatalog struct {
	Entries []MarketplaceEntry  `json:"entries"`
	Sources []MarketplaceSource `json:"sources"`
}

MarketplaceCatalog is every listing plus each source's status.

type MarketplaceEntry

type MarketplaceEntry struct {
	ID               string   `json:"id"`
	Name             string   `json:"name"`
	Publisher        string   `json:"publisher"`
	PublisherKeyID   string   `json:"publisher_key_id"`
	PublisherKeyName string   `json:"publisher_key_name"`
	Version          string   `json:"version"`
	Summary          string   `json:"summary"`
	Categories       []string `json:"categories"`
	Icon             string   `json:"icon"`
	Abilities        []string `json:"abilities"`
	OutboundHosts    []string `json:"outbound_hosts"`
	Digest           string   `json:"digest"`
	Changelog        string   `json:"changelog"`
	MinVersion       string   `json:"min_version"`
	SourceID         string   `json:"source_id"`
	SourceName       string   `json:"source_name"`
	Verified         bool     `json:"verified"`
	KeyTrusted       bool     `json:"key_trusted"`
	Installed        bool     `json:"installed"`
	InstalledVersion string   `json:"installed_version"`
	UpdateAvailable  bool     `json:"update_available"`
	Compatible       bool     `json:"compatible"`
}

MarketplaceEntry is one listing from a signed marketplace index.

type MarketplaceInstallInput

type MarketplaceInstallInput struct {
	SourceID   string   `json:"source_id"`
	ID         string   `json:"id"`
	Version    string   `json:"version"`
	Digest     string   `json:"digest"`
	Abilities  []string `json:"abilities"`
	TrustKeyID string   `json:"trust_key_id,omitempty"`
}

MarketplaceInstallInput confirms exactly what the sheet showed.

type MarketplaceInstallResult

type MarketplaceInstallResult struct {
	Plugin     Plugin `json:"plugin"`
	Action     string `json:"action"`
	TrustAdded bool   `json:"trust_added"`
}

MarketplaceInstallResult is what the one-click flow did.

type MarketplacePreview

type MarketplacePreview struct {
	Entry            MarketplaceEntry `json:"entry"`
	SourceID         string           `json:"source_id"`
	SourceName       string           `json:"source_name"`
	KeyID            string           `json:"key_id"`
	KeyName          string           `json:"key_name"`
	KeyTrusted       bool             `json:"key_trusted"`
	Action           string           `json:"action"`
	InstalledVersion string           `json:"installed_version"`
	AddedAbilities   []string         `json:"added_abilities"`
	AddedHosts       []string         `json:"added_hosts"`
	Reapproval       bool             `json:"reapproval_required"`
}

MarketplacePreview is the confirm sheet for one listing.

type MarketplaceSource

type MarketplaceSource struct {
	ID          string `json:"id"`
	Name        string `json:"name"`
	URL         string `json:"url"`
	RootKeyID   string `json:"root_key_id"`
	Builtin     bool   `json:"builtin"`
	Status      string `json:"status"`
	Error       string `json:"error"`
	ErrorKind   string `json:"error_kind"`
	Sequence    int64  `json:"sequence"`
	GeneratedAt string `json:"generated_at"`
	FetchedAt   string `json:"fetched_at"`
	PluginCount int    `json:"plugin_count"`
}

MarketplaceSource is a configured index source with its last fetch outcome.

type MasterKeyStatus

type MasterKeyStatus struct {
	Configured bool       `json:"configured"`
	RotatedAt  *time.Time `json:"rotated_at,omitempty"`
	AgeDays    *int       `json:"age_days,omitempty"`
	Overdue    bool       `json:"overdue"`
}

MasterKeyStatus mirrors internal/api's masterKeyStatusResource.

type MeshCheck added in v0.2.0

type MeshCheck struct {
	ID     string `json:"id"`
	Status string `json:"status"`
	Detail string `json:"detail"`
	Hint   string `json:"hint,omitempty"`
}

MeshCheck mirrors one readiness check of GET /api/v1/mesh/settings.

type MeshConnectivity added in v0.2.0

type MeshConnectivity struct {
	Nodes     []MeshConnectivityNode `json:"nodes"`
	Pairs     []MeshPair             `json:"pairs"`
	CheckedAt time.Time              `json:"checked_at"`
}

MeshConnectivity mirrors GET /api/v1/mesh/connectivity.

type MeshConnectivityNode added in v0.2.0

type MeshConnectivityNode struct {
	ID          string `json:"id"`
	Name        string `json:"name"`
	MeshAddress string `json:"mesh_address"`
	ViewError   string `json:"view_error,omitempty"`
}

MeshConnectivityNode is one mesh member and whether its view was readable.

type MeshLink struct {
	State         string     `json:"state"`
	LastHandshake *time.Time `json:"last_handshake,omitempty"`
	Endpoint      string     `json:"endpoint,omitempty"`
}

MeshLink is one direction of a node pair.

type MeshPair added in v0.2.0

type MeshPair struct {
	A      string   `json:"a"`
	B      string   `json:"b"`
	Status string   `json:"status"`
	AToB   MeshLink `json:"a_to_b"`
	BToA   MeshLink `json:"b_to_a"`
	Hint   string   `json:"hint,omitempty"`
}

MeshPair is one node pair's connectivity.

type MeshPeerResource added in v0.2.0

type MeshPeerResource struct {
	NodeID        string     `json:"node_id"`
	Name          string     `json:"name,omitempty"`
	PublicKey     string     `json:"public_key"`
	MeshAddress   string     `json:"mesh_address,omitempty"`
	Endpoint      string     `json:"endpoint,omitempty"`
	LastHandshake *time.Time `json:"last_handshake_at,omitempty"`
	Healthy       bool       `json:"healthy"`
	TransferRx    int64      `json:"transfer_rx_bytes"`
	TransferTx    int64      `json:"transfer_tx_bytes"`
	Live          bool       `json:"live"`
}

MeshPeerResource mirrors internal/api's meshPeerResource (internal/api/mesh.go): one WireGuard peer as this node's own device sees it, joined with the store's record of that node's identity. Live is false for a peer this control plane only knows about from the store (no live device peer entry for it yet), true for one the local device actually has, real UAPI-backed handshake data and all.

type MeshRotationResource added in v0.2.0

type MeshRotationResource struct {
	NodeID       string     `json:"node_id"`
	OldPublicKey string     `json:"old_public_key"`
	NewPublicKey string     `json:"new_public_key"`
	StartedAt    time.Time  `json:"started_at"`
	Confirmed    bool       `json:"confirmed"`
	ConfirmedAt  *time.Time `json:"confirmed_at,omitempty"`
}

MeshRotationResource mirrors internal/api's meshRotationResource: one key rotation's tracked confirmation state.

type MeshSettings added in v0.2.0

type MeshSettings struct {
	Configured      bool        `json:"configured"`
	Effective       bool        `json:"effective"`
	Source          string      `json:"source"`
	EnvVar          string      `json:"env_var"`
	RestartRequired bool        `json:"restart_required"`
	RestartHint     string      `json:"restart_hint,omitempty"`
	RemoteNodes     int         `json:"remote_nodes"`
	Checks          []MeshCheck `json:"checks"`
	CanEnable       bool        `json:"can_enable"`
	StartError      string      `json:"start_error,omitempty"`
	UpdatedBy       string      `json:"updated_by,omitempty"`
}

MeshSettings mirrors GET /api/v1/mesh/settings.

type MeshStatusResource added in v0.2.0

type MeshStatusResource struct {
	Enabled     bool                  `json:"enabled"`
	Backend     string                `json:"backend,omitempty"`
	Interface   string                `json:"interface,omitempty"`
	LocalNodeID string                `json:"local_node_id,omitempty"`
	PublicKey   string                `json:"public_key,omitempty"`
	MeshAddress string                `json:"mesh_address,omitempty"`
	ListenPort  int                   `json:"listen_port,omitempty"`
	Peers       []MeshPeerResource    `json:"peers"`
	Rotation    *MeshRotationResource `json:"rotation,omitempty"`
}

MeshStatusResource mirrors internal/api's meshStatusResource (GET /api/v1/mesh). Enabled is false only via a 501 response (mesh networking not turned on for this control plane at all), which GetMeshStatus surfaces as an error rather than a false-valued response, so in practice a caller that got a MeshStatusResource back at all always has Enabled true; the field is kept for parity with the wire response rather than assumed away.

type MetricPointResource

type MetricPointResource struct {
	Timestamp time.Time `json:"timestamp"`
	Value     float64   `json:"value"`
	Count     int       `json:"count"`
}

MetricPointResource mirrors internal/api's metricPoint (internal/api/metrics.go): one aggregated bucket of a queried metric.

type MetricSeriesPoint added in v0.2.0

type MetricSeriesPoint struct {
	Timestamp time.Time `json:"timestamp"`
	Value     float64   `json:"value"`
	Count     int       `json:"count"`
	Max       float64   `json:"max"`
}

MetricSeriesPoint is one bucket; Max keeps spikes visible after averaging.

type MetricsQueryOptions added in v0.2.0

type MetricsQueryOptions struct {
	Step      time.Duration
	MaxPoints int
	Compare   bool
}

MetricsQueryOptions are the optional downsampling and comparison controls of GET /api/v1/apps/{name}/metrics.

type MetricsSeriesResource added in v0.2.0

type MetricsSeriesResource struct {
	Metric         string              `json:"metric"`
	StepSeconds    float64             `json:"step_seconds"`
	Downsampled    bool                `json:"downsampled"`
	Points         []MetricSeriesPoint `json:"points"`
	PreviousPoints []MetricSeriesPoint `json:"previous_points,omitempty"`
}

MetricsSeriesResource mirrors internal/api's metricsResponse.

type MigrationChecklist

type MigrationChecklist struct {
	App      string                     `json:"app"`
	Platform string                     `json:"platform,omitempty"`
	SourceID string                     `json:"source_id,omitempty"`
	Steps    []MigrationChecklistStep   `json:"steps"`
	Current  string                     `json:"current"`
	Progress int                        `json:"progress"`
	Total    int                        `json:"total"`
	Domains  []string                   `json:"domains,omitempty"`
	Volumes  []MigrationChecklistVolume `json:"volumes,omitempty"`
	Tracked  bool                       `json:"tracked"`
}

MigrationChecklist is one app's cutover checklist.

type MigrationChecklistStep

type MigrationChecklistStep struct {
	ID       string   `json:"id"`
	Status   string   `json:"status"`
	At       string   `json:"at,omitempty"`
	Actor    string   `json:"actor,omitempty"`
	Note     string   `json:"note,omitempty"`
	Evidence []string `json:"evidence,omitempty"`
}

MigrationChecklistStep is one step of an app's cutover checklist.

type MigrationChecklistVolume

type MigrationChecklistVolume struct {
	Name          string `json:"name"`
	SourceCommand string `json:"source_command,omitempty"`
	TargetCommand string `json:"target_command"`
}

MigrationChecklistVolume carries the commands that measure a volume.

type MigrationOverride

type MigrationOverride = migrationplan.Override

MigrationOverride is a per-item change chosen from a fix.

type MigrationPlanReport

type MigrationPlanReport = migrationplan.Report

MigrationPlanReport is the read-only plan of a source platform.

type MigrationSourceRequest

type MigrationSourceRequest struct {
	Platform      string                       `json:"platform"`
	URL           string                       `json:"url,omitempty"`
	Token         string                       `json:"token,omitempty"`
	InsecureTLS   bool                         `json:"insecure_tls,omitempty"`
	AllowPrivate  bool                         `json:"allow_private,omitempty"`
	AllowLoopback bool                         `json:"allow_loopback,omitempty"`
	Only          []string                     `json:"only,omitempty"`
	Collision     string                       `json:"collision,omitempty"`
	Overrides     map[string]MigrationOverride `json:"overrides,omitempty"`
	DryRun        bool                         `json:"dry_run,omitempty"`
}

MigrationSourceRequest names the source platform and carries its credential. Only selects items by source id or name.

type MigrationStepRequest

type MigrationStepRequest struct {
	Action    string                `json:"action"`
	Note      string                `json:"note,omitempty"`
	Confirm   bool                  `json:"confirm,omitempty"`
	Databases []string              `json:"databases,omitempty"`
	Volumes   []MigrationVolumeStat `json:"volumes,omitempty"`
}

MigrationStepRequest completes or resets one checklist step.

type MigrationVolumeStat

type MigrationVolumeStat = migrationplan.VolumeStat

MigrationVolumeStat is a volume's file count and size on both hosts.

type MobileDevice added in v0.2.0

type MobileDevice struct {
	ID         string     `json:"id"`
	Name       string     `json:"name"`
	Platform   string     `json:"platform"`
	TokenID    string     `json:"token_id"`
	CreatedAt  time.Time  `json:"created_at"`
	LastSeenAt *time.Time `json:"last_seen_at,omitempty"`
	ExpiresAt  *time.Time `json:"expires_at,omitempty"`
	Expired    bool       `json:"expired"`
}

MobileDevice is one paired phone.

type MobilePairingCode added in v0.2.0

type MobilePairingCode struct {
	Code      string    `json:"code"`
	ExpiresAt time.Time `json:"expires_at"`
	ServerURL string    `json:"server_url"`
	PairURL   string    `json:"pair_url"`
	QRPayload string    `json:"qr_payload"`
}

MobilePairingCode is the one-time code a phone exchanges for a device token.

type ModelAPIKeyResource added in v0.2.0

type ModelAPIKeyResource struct {
	APIKey string `json:"api_key"`
}

ModelAPIKeyResource mirrors internal/api's modelAPIKeyResponse.

type ModelBenchPrompt

type ModelBenchPrompt struct {
	Name             string  `json:"name"`
	PromptTokens     int     `json:"prompt_tokens"`
	CompletionTokens int     `json:"completion_tokens"`
	TTFTMillis       int64   `json:"ttft_ms"`
	PromptTPS        float64 `json:"prompt_tokens_per_sec"`
	GenTPS           float64 `json:"gen_tokens_per_sec"`
}

ModelBenchPrompt mirrors internal/models.BenchPrompt.

type ModelBenchmarkResult

type ModelBenchmarkResult struct {
	Model            string             `json:"model"`
	RanAt            time.Time          `json:"ran_at"`
	DurationMillis   int64              `json:"duration_ms"`
	Prompts          []ModelBenchPrompt `json:"prompts"`
	PromptTPS        float64            `json:"prompt_tokens_per_sec"`
	GenTPS           float64            `json:"gen_tokens_per_sec"`
	TTFTMillis       int64              `json:"ttft_ms"`
	PeakMemoryBytes  uint64             `json:"peak_memory_bytes"`
	MemoryLimitBytes uint64             `json:"memory_limit_bytes"`
	Truncated        bool               `json:"truncated"`
	Note             string             `json:"note"`
}

ModelBenchmarkResult mirrors internal/models.BenchResult.

type ModelCPUFields

type ModelCPUFields struct {
	Compute        string                `json:"compute,omitempty"`
	CPULimit       float64               `json:"cpu_limit,omitempty"`
	MemoryLimitMiB int                   `json:"memory_limit_mib,omitempty"`
	WeightsRepo    string                `json:"weights_repo,omitempty"`
	WeightsFile    string                `json:"weights_file,omitempty"`
	LicenseAck     bool                  `json:"license_acknowledged,omitempty"`
	Download       *ModelDownload        `json:"download,omitempty"`
	Benchmark      *ModelBenchmarkResult `json:"benchmark,omitempty"`
}

ModelCPUFields mirrors internal/api's modelCPUResource. They live outside ModelResource so the MCP tool output schemas stay small.

type ModelCacheEntry added in v0.2.0

type ModelCacheEntry struct {
	Volume         string     `json:"volume"`
	Model          string     `json:"model,omitempty"`
	Engine         string     `json:"engine,omitempty"`
	ModelRef       string     `json:"model_ref,omitempty"`
	SizeBytes      *int64     `json:"size_bytes"`
	LastUsedAt     *time.Time `json:"last_used_at"`
	LastUsedSource string     `json:"last_used_source"`
	UnusedDays     int        `json:"unused_days"`
	Unused         bool       `json:"unused"`
	InUse          bool       `json:"in_use"`
	Configured     bool       `json:"configured"`
	DuplicateOf    string     `json:"duplicate_of,omitempty"`
	Prunable       bool       `json:"prunable"`
	KeepReason     string     `json:"keep_reason,omitempty"`
}

ModelCacheEntry mirrors internal/models' CacheEntry.

type ModelCacheNode added in v0.2.0

type ModelCacheNode struct {
	NodeID           string            `json:"node_id"`
	Name             string            `json:"name"`
	IsLocal          bool              `json:"is_local"`
	Supported        bool              `json:"supported"`
	Message          string            `json:"message,omitempty"`
	Entries          []ModelCacheEntry `json:"entries"`
	TotalBytes       int64             `json:"total_bytes"`
	UniqueBytes      int64             `json:"unique_bytes"`
	ReclaimableBytes int64             `json:"reclaimable_bytes"`
	DiskFreeBytes    *int64            `json:"disk_free_bytes"`
}

ModelCacheNode mirrors internal/models' CacheNode.

type ModelCachePruneResult added in v0.2.0

type ModelCachePruneResult struct {
	DryRun         bool              `json:"dry_run"`
	Candidates     []ModelCacheEntry `json:"candidates"`
	Removed        []string          `json:"removed"`
	Skipped        []ModelCacheSkip  `json:"skipped"`
	ReclaimedBytes int64             `json:"reclaimed_bytes"`
}

ModelCachePruneResult mirrors internal/models' CachePruneResult.

type ModelCacheReport added in v0.2.0

type ModelCacheReport struct {
	UnusedDays int              `json:"unused_days"`
	Nodes      []ModelCacheNode `json:"nodes"`
	Note       string           `json:"note"`
}

ModelCacheReport mirrors internal/models' CacheReport.

type ModelCacheSkip added in v0.2.0

type ModelCacheSkip struct {
	Volume string `json:"volume"`
	Reason string `json:"reason"`
}

ModelCacheSkip mirrors internal/models' CacheSkip.

type ModelDetail

type ModelDetail struct {
	ModelResource
	ModelCPUFields
}

ModelDetail is a ModelResource with its CPU mode fields.

type ModelDownload

type ModelDownload struct {
	DoneBytes  int64 `json:"done_bytes"`
	TotalBytes int64 `json:"total_bytes"`
	Percent    int   `json:"percent"`
}

ModelDownload mirrors internal/api's modelDownloadResource.

type ModelFitReport added in v0.2.0

type ModelFitReport struct {
	Model string    `json:"model,omitempty"`
	Nodes []NodeFit `json:"nodes"`
	Note  string    `json:"note"`
}

ModelFitReport mirrors internal/models.FitReport.

type ModelFitRequest added in v0.2.0

type ModelFitRequest struct {
	Engine        string   `json:"engine"`
	Model         string   `json:"model"`
	Quantization  string   `json:"quantization,omitempty"`
	ContextLength int      `json:"context_length,omitempty"`
	GPUCount      int      `json:"gpu_count,omitempty"`
	GPUDeviceIDs  []string `json:"gpu_device_ids,omitempty"`
	WeightsBytes  int64    `json:"weights_bytes,omitempty"`
	NodeID        *string  `json:"node_id,omitempty"`

	// Compute "cpu" (or CatalogID) rates the model against CPUs and memory.
	Compute   string  `json:"compute,omitempty"`
	CatalogID string  `json:"catalog_id,omitempty"`
	CPUs      float64 `json:"cpus,omitempty"`
	MemoryMiB int     `json:"memory_mib,omitempty"`
}

ModelFitRequest is the body of POST /api/v1/models/fit. NodeID nil rates every GPU node.

type ModelKeyResource added in v0.2.0

type ModelKeyResource struct {
	ID          string     `json:"id"`
	Name        string     `json:"name"`
	KeyPrefix   string     `json:"key_prefix"`
	Status      string     `json:"status"`
	RPM         int        `json:"rpm"`
	TPM         int        `json:"tpm"`
	TPD         int        `json:"tpd"`
	MaxParallel int        `json:"max_parallel"`
	AllowPaths  []string   `json:"allow_paths"`
	AllowModels []string   `json:"allow_models"`
	ReplacedBy  string     `json:"replaced_by,omitempty"`
	InFlight    int        `json:"in_flight"`
	CreatedAt   time.Time  `json:"created_at"`
	ExpiresAt   *time.Time `json:"expires_at,omitempty"`
	RevokedAt   *time.Time `json:"revoked_at,omitempty"`
	LastUsedAt  *time.Time `json:"last_used_at,omitempty"`
	CreatedBy   string     `json:"created_by,omitempty"`
}

ModelKeyResource mirrors internal/api's modelKeyResource. It never carries key material, only the prefix.

type ModelKeyUsage added in v0.2.0

type ModelKeyUsage struct {
	KeyID     string `json:"key_id"`
	Name      string `json:"name"`
	KeyPrefix string `json:"key_prefix"`
	Status    string `json:"status"`
	InFlight  int    `json:"in_flight"`
	ModelUsageTotals
}

ModelKeyUsage is one key's usage in the window.

type ModelLimits added in v0.2.0

type ModelLimits struct {
	MaxBodyBytes           int64 `json:"max_body_bytes"`
	MaxN                   int   `json:"max_n"`
	MaxTokens              int   `json:"max_tokens"`
	MaxInflight            int   `json:"max_inflight_requests"`
	ResponseHeaderTimeoutS int   `json:"response_header_timeout_seconds"`
	StreamIdleTimeoutS     int   `json:"stream_idle_timeout_seconds"`
}

ModelLimits mirrors internal/models' GatewayLimitsSummary. Zero means the limit is disabled.

type ModelPreflightRequest added in v0.2.0

type ModelPreflightRequest struct {
	Repo    string `json:"repo"`
	Engine  string `json:"engine,omitempty"`
	File    string `json:"file,omitempty"`
	Quant   string `json:"quant,omitempty"`
	NodeID  string `json:"node_id,omitempty"`
	HFToken string `json:"hf_token,omitempty"`
}

ModelPreflightRequest mirrors internal/api's modelPreflightRequest.

type ModelPreflightResult added in v0.2.0

type ModelPreflightResult struct {
	Repo               string              `json:"repo"`
	Status             string              `json:"status"`
	Exists             bool                `json:"exists"`
	Message            string              `json:"message"`
	NextStep           string              `json:"next_step,omitempty"`
	RetryAfterSeconds  int                 `json:"retry_after_seconds,omitempty"`
	Gated              string              `json:"gated,omitempty"`
	Access             string              `json:"access,omitempty"`
	Private            bool                `json:"private"`
	License            string              `json:"license,omitempty"`
	TotalBytes         int64               `json:"total_bytes"`
	FileCount          int                 `json:"file_count"`
	Files              []PreflightFile     `json:"files"`
	FilesTruncated     bool                `json:"files_truncated"`
	HasGGUF            bool                `json:"has_gguf"`
	HasSafetensors     bool                `json:"has_safetensors"`
	CompatibleEngines  []string            `json:"compatible_engines"`
	EngineHint         string              `json:"engine_hint"`
	Quants             []PreflightQuant    `json:"quants"`
	RecommendedQuant   string              `json:"recommended_quant,omitempty"`
	RecommendationNote string              `json:"recommendation_note,omitempty"`
	Selected           *PreflightSelection `json:"selected,omitempty"`
	Node               PreflightNode       `json:"node"`
	Disk               PreflightDisk       `json:"disk"`
	Warnings           []string            `json:"warnings"`
	EstimateNote       string              `json:"estimate_note"`
	Cached             bool                `json:"cached"`
}

ModelPreflightResult mirrors internal/models' PreflightResult.

type ModelResource added in v0.2.0

type ModelResource struct {
	Name          string              `json:"name"`
	Engine        string              `json:"engine"`
	Model         string              `json:"model"`
	NodeID        string              `json:"node_id"`
	GPUCount      int                 `json:"gpu_count"`
	GPUDeviceIDs  []string            `json:"gpu_device_ids,omitempty"`
	ContextLength int                 `json:"context_length,omitempty"`
	Quantization  string              `json:"quantization,omitempty"`
	Domain        string              `json:"domain,omitempty"`
	EndpointURL   string              `json:"endpoint_url,omitempty"`
	APIKeyPrefix  string              `json:"api_key_prefix"`
	HFTokenSet    bool                `json:"hf_token_set"`
	Limits        ModelLimits         `json:"limits"`
	Status        ModelStatusResource `json:"status"`
	CreatedAt     time.Time           `json:"created_at"`
	UpdatedAt     time.Time           `json:"updated_at"`

	Residency               string     `json:"residency"`
	IdleTTLSeconds          int        `json:"idle_ttl_seconds"`
	EffectiveIdleTTLSeconds int        `json:"effective_idle_ttl_seconds"`
	ResidencyState          string     `json:"residency_state"`
	LastActiveAt            *time.Time `json:"last_active_at,omitempty"`

	// SwapGroup is empty (no group) or a name shared by other models on
	// the same node/GPU. SharesGPUWith lists every other model
	// currently in that same group on the same node.
	SwapGroup     string   `json:"swap_group,omitempty"`
	SharesGPUWith []string `json:"shares_gpu_with,omitempty"`

	// External is set for models served by an endpoint Levelrail does not run.
	External *ExternalEndpoint `json:"external,omitempty"`
}

ModelResource mirrors internal/api's modelResource.

type ModelStatusResource added in v0.2.0

type ModelStatusResource struct {
	Ready   bool   `json:"ready"`
	Reason  string `json:"reason"`
	Message string `json:"message,omitempty"`
}

ModelStatusResource mirrors internal/api's modelStatusResource.

type ModelUsagePoint added in v0.2.0

type ModelUsagePoint struct {
	Hour time.Time `json:"hour"`
	ModelUsageTotals
}

ModelUsagePoint is one hour of usage.

type ModelUsageReport added in v0.2.0

type ModelUsageReport struct {
	Model    string            `json:"model"`
	From     time.Time         `json:"from"`
	To       time.Time         `json:"to"`
	Totals   ModelUsageTotals  `json:"totals"`
	Series   []ModelUsagePoint `json:"series"`
	Keys     []ModelKeyUsage   `json:"keys"`
	InFlight int               `json:"in_flight"`
	Note     string            `json:"note"`
}

ModelUsageReport mirrors models.UsageReport.

type ModelUsageTotals added in v0.2.0

type ModelUsageTotals struct {
	Requests      int64 `json:"requests"`
	Status2xx     int64 `json:"status_2xx"`
	Status4xx     int64 `json:"status_4xx"`
	Status5xx     int64 `json:"status_5xx"`
	RateLimited   int64 `json:"rate_limited"`
	UsageRequests int64 `json:"usage_requests"`
	InputTokens   int64 `json:"input_tokens"`
	OutputTokens  int64 `json:"output_tokens"`
	BytesOut      int64 `json:"bytes_out"`
	AvgDurationMs int64 `json:"avg_duration_ms"`
	AvgTTFTMs     int64 `json:"avg_ttft_ms"`
}

ModelUsageTotals mirrors models.UsageTotals.

type MoveAppWithVolumesRequest added in v0.2.0

type MoveAppWithVolumesRequest struct {
	NodeID string `json:"node_id"`
}

MoveAppWithVolumesRequest mirrors internal/api's moveAppWithVolumesRequest, the same node_id shape SetAppNodeRequest establishes.

type MoveEnvironmentRequest added in v0.2.0

type MoveEnvironmentRequest struct {
	EnvironmentID string `json:"environment_id"`
	Confirm       bool   `json:"confirm,omitempty"`
}

MoveEnvironmentRequest is the body of PUT .../{name}/environment.

type MoveEnvironmentResult added in v0.2.0

type MoveEnvironmentResult struct {
	Name            string                  `json:"name"`
	EnvironmentID   string                  `json:"environment_id"`
	PendingApproval *DeployApprovalResource `json:"pending_approval,omitempty"`
}

MoveEnvironmentResult is the 200 resource or the 202 pending approval a move into or out of a protected environment returns.

type MyAccessCapability

type MyAccessCapability struct {
	Key             string `json:"key"`
	Allowed         bool   `json:"allowed"`
	RequiredAbility string `json:"required_ability"`
	Reason          string `json:"reason"`
}

MyAccessCapability is one area the caller can or cannot manage.

type MyAccessPolicy

type MyAccessPolicy struct {
	ID          string `json:"id"`
	Name        string `json:"name"`
	Description string `json:"description"`
}

MyAccessPolicy is one attached IAM policy in MyAccessResource.

type MyAccessResource

type MyAccessResource struct {
	Kind            string               `json:"kind"`
	Name            string               `json:"name"`
	Tier            string               `json:"tier"`
	Abilities       []string             `json:"abilities"`
	Teams           []MyAccessTeam       `json:"teams"`
	LinkedProviders []string             `json:"linked_providers"`
	Policies        []MyAccessPolicy     `json:"policies"`
	Capabilities    []MyAccessCapability `json:"capabilities"`
}

MyAccessResource mirrors internal/api's myAccessResponse (account_access.go).

type MyAccessTeam

type MyAccessTeam struct {
	ID   string `json:"id"`
	Name string `json:"name"`
	Role string `json:"role"`
}

MyAccessTeam is one team membership in MyAccessResource.

type MyActivity

type MyActivity struct {
	Entries    []MyActivityEntry `json:"entries"`
	NextCursor string            `json:"next_cursor,omitempty"`
}

MyActivity mirrors internal/api's myActivityResponse.

type MyActivityEntry

type MyActivityEntry struct {
	ID         string    `json:"id"`
	At         time.Time `json:"at"`
	Kind       string    `json:"kind"`
	Event      string    `json:"event"`
	ActorType  string    `json:"actor_type"`
	TokenName  string    `json:"token_name,omitempty"`
	Method     string    `json:"method"`
	Path       string    `json:"path"`
	StatusCode int       `json:"status_code"`
	RemoteAddr string    `json:"remote_addr"`
	ClientKind string    `json:"client_kind"`
}

MyActivityEntry mirrors internal/api's myActivityEntry.

type MyActivityOptions

type MyActivityOptions struct {
	Limit  int
	Kind   string
	Cursor string
}

MyActivityOptions are the optional filters of GET /api/v1/auth/my-activity.

type MyCredentials

type MyCredentials struct {
	Sessions []Session      `json:"sessions"`
	Tokens   []SessionToken `json:"tokens"`
}

MyCredentials mirrors internal/api's myCredentialsResponse: live sessions and active tokens, never a token secret.

type NetworkPool

type NetworkPool struct {
	CIDR     string `json:"cidr"`
	Enabled  bool   `json:"enabled"`
	Capacity int    `json:"capacity"`
	InUse    int    `json:"in_use"`
	Percent  int    `json:"percent"`
}

NetworkPool is the pool block of GET /api/v1/system/networks.

type NetworkProxyDomainResource added in v0.2.0

type NetworkProxyDomainResource struct {
	Domain      string `json:"domain"`
	App         string `json:"app"`
	NodeID      string `json:"node_id"`
	NodeName    string `json:"node_name,omitempty"`
	IsLocalNode bool   `json:"is_local_node"`
	Port        int    `json:"port"`
	Reachable   bool   `json:"reachable"`
	Reason      string `json:"reason,omitempty"`
	FixCommand  string `json:"fix_command,omitempty"`
	TLSStatus   string `json:"tls_status,omitempty"`
	TLSIssuer   string `json:"tls_issuer,omitempty"`
	TLSSource   string `json:"tls_source,omitempty"`
}

NetworkProxyDomainResource mirrors internal/api's networkProxyDomainResource: one domain's reachability and TLS status row on the Traffic dashboard page.

type NetworkProxyResource added in v0.2.0

type NetworkProxyResource struct {
	Domains []NetworkProxyDomainResource `json:"domains"`
}

NetworkProxyResource mirrors internal/api's networkProxyResponse, GET /api/v1/network/proxy's response body.

type NetworkResource

type NetworkResource struct {
	ContainerPort int  `json:"container_port"`
	HostPort      int  `json:"host_port,omitempty"`
	Running       bool `json:"running"`
	// FallbackURL is the zero-config sslip.io URL this app is reachable
	// at when it has no operator-configured domain and this control
	// plane's own APP_PUBLIC_HOST is a real, publicly routable IP; see
	// internal/api's own networkResource.FallbackURL doc comment.
	FallbackURL string `json:"fallback_url,omitempty"`
	// FallbackEnabled is the platform-wide automatic hostname toggle.
	FallbackEnabled bool `json:"fallback_enabled"`
	// PublicHost is the server address the fallback hostname is built from.
	PublicHost string `json:"public_host,omitempty"`
}

NetworkResource mirrors internal/api's networkResource (internal/api/network.go): the live traffic path, container's declared port plus whatever host port Docker currently has bound.

type NetworkShareResource added in v0.2.0

type NetworkShareResource struct {
	ID           string `json:"id"`
	Name         string `json:"name"`
	Protocol     string `json:"protocol"`
	Host         string `json:"host"`
	RemotePath   string `json:"remote_path"`
	MountOptions string `json:"mount_options,omitempty"`
	Username     string `json:"username,omitempty"`
	CreatedAt    string `json:"created_at"`
}

NetworkShareResource mirrors internal/api's networkShareResource. Deliberately no password field: never echoed back by the API.

type NetworkTopologyAppResource added in v0.2.0

type NetworkTopologyAppResource struct {
	Name        string   `json:"name"`
	NodeID      string   `json:"node_id"`
	Domains     []string `json:"domains,omitempty"`
	DNSName     string   `json:"dns_name,omitempty"`
	MeshAddress string   `json:"mesh_address,omitempty"`
}

NetworkTopologyAppResource mirrors internal/api's networkTopologyAppResource.

type NetworkTopologyConnectionResource added in v0.2.0

type NetworkTopologyConnectionResource struct {
	App      string `json:"app"`
	Database string `json:"database"`
	EnvVar   string `json:"env_var,omitempty"`
}

NetworkTopologyConnectionResource mirrors internal/api's networkTopologyConnectionResource.

type NetworkTopologyDatabaseResource added in v0.2.0

type NetworkTopologyDatabaseResource struct {
	Name        string `json:"name"`
	Engine      string `json:"engine"`
	NodeID      string `json:"node_id"`
	DNSName     string `json:"dns_name,omitempty"`
	MeshAddress string `json:"mesh_address,omitempty"`
}

NetworkTopologyDatabaseResource mirrors internal/api's networkTopologyDatabaseResource.

type NetworkTopologyLoadBalancerResource added in v0.2.0

type NetworkTopologyLoadBalancerResource struct {
	Service   string `json:"service"`
	Algorithm string `json:"algorithm"`
}

NetworkTopologyLoadBalancerResource mirrors internal/api's networkTopologyLoadBalancerResource.

type NetworkTopologyNodeResource added in v0.2.0

type NetworkTopologyNodeResource struct {
	ID          string `json:"id"`
	Name        string `json:"name"`
	Region      string `json:"region,omitempty"`
	Status      string `json:"status"`
	Schedulable bool   `json:"schedulable"`
	MeshAddress string `json:"mesh_address,omitempty"`
	IsLocal     bool   `json:"is_local"`
}

NetworkTopologyNodeResource mirrors internal/api's networkTopologyNodeResource.

type NetworkTopologyResource added in v0.2.0

type NetworkTopologyResource struct {
	Zone          string                                `json:"zone"`
	MeshEnabled   bool                                  `json:"mesh_enabled"`
	Nodes         []NetworkTopologyNodeResource         `json:"nodes"`
	Apps          []NetworkTopologyAppResource          `json:"apps"`
	Databases     []NetworkTopologyDatabaseResource     `json:"databases"`
	LoadBalancers []NetworkTopologyLoadBalancerResource `json:"load_balancers"`
	Connections   []NetworkTopologyConnectionResource   `json:"connections"`
}

NetworkTopologyResource mirrors internal/api's networkTopologyResponse, GET /api/v1/network/topology's response body.

type NodeAgentResource added in v0.2.0

type NodeAgentResource struct {
	Version             string     `json:"version,omitempty"`
	Commit              string     `json:"commit,omitempty"`
	OS                  string     `json:"os,omitempty"`
	Arch                string     `json:"arch,omitempty"`
	ReportedAt          *time.Time `json:"reported_at,omitempty"`
	Outdated            bool       `json:"outdated"`
	MinVersion          string     `json:"min_version,omitempty"`
	ControlPlaneVersion string     `json:"control_plane_version"`
}

NodeAgentResource mirrors internal/api's nodeAgentResource.

type NodeAlertStatusResource

type NodeAlertStatusResource struct {
	PatchStatus       string `json:"patch_status"`
	NodeDiskSpace     string `json:"node_disk_space"`
	NodeResourceUsage string `json:"node_resource_usage"`
}

NodeAlertStatusResource mirrors internal/api's nodeAlertStatusResource (internal/api/nodes.go): each field is "ok", "firing", or "unknown", a live re-evaluation of this one node's own standing for that node-scoped, platform-wide alert kind, not a rule's stored aggregate value.

type NodeAllocation

type NodeAllocation struct {
	NodeID      string               `json:"node_id"`
	Name        string               `json:"name"`
	IsLocal     bool                 `json:"is_local"`
	Schedulable bool                 `json:"schedulable"`
	Online      bool                 `json:"online"`
	Workloads   int                  `json:"workloads"`
	Dimensions  []PlacementDimension `json:"dimensions"`
}

NodeAllocation is one node's allocatable capacity against its requested totals.

type NodeAllocations

type NodeAllocations struct {
	Policy PlacementPolicy  `json:"policy"`
	Nodes  []NodeAllocation `json:"nodes"`
}

NodeAllocations is every node's allocation plus the policy applied.

type NodeCapacityForecastResource added in v0.2.0

type NodeCapacityForecastResource struct {
	NodeID         string                  `json:"node_id"`
	LookbackWindow string                  `json:"lookback_window"`
	Disk           *CapacityForecastMetric `json:"disk,omitempty"`
	Memory         *CapacityForecastMetric `json:"memory,omitempty"`
	Note           string                  `json:"note"`
}

NodeCapacityForecastResource mirrors internal/api's nodeCapacityForecastResponse: GET /api/v1/nodes/{id}/capacity-forecast's wire shape. Note is always present, a plain-English restatement of this being a rough trend projection, not a guarantee.

type NodeCertDrill

type NodeCertDrill struct {
	OK     bool                `json:"ok"`
	Steps  []NodeCertDrillStep `json:"steps"`
	Before NodeCertDrillCert   `json:"before"`
	After  NodeCertDrillCert   `json:"after"`
}

NodeCertDrill is the result of POST /api/v1/nodes/{id}/cert/drill.

type NodeCertDrillCert

type NodeCertDrillCert struct {
	Serial     string     `json:"serial,omitempty"`
	Generation int        `json:"generation"`
	NotAfter   *time.Time `json:"not_after,omitempty"`
}

NodeCertDrillCert is the certificate state seen before or after a drill.

type NodeCertDrillStep

type NodeCertDrillStep struct {
	ID     string `json:"id"`
	Status string `json:"status"`
	Detail string `json:"detail"`
}

NodeCertDrillStep is one step of a certificate rotation drill.

type NodeCertRenewal

type NodeCertRenewal struct {
	LastError           string     `json:"last_error"`
	FailedAt            *time.Time `json:"failed_at,omitempty"`
	NextRetryAt         *time.Time `json:"next_retry_at,omitempty"`
	ConsecutiveFailures int        `json:"consecutive_failures"`
}

NodeCertRenewal mirrors internal/api's nodeCertRenewal.

type NodeCertResource added in v0.2.0

type NodeCertResource struct {
	// State is ok, expiring, critical, expired, revoked, or unknown.
	State              string           `json:"state"`
	NotAfter           *time.Time       `json:"not_after,omitempty"`
	DaysRemaining      *int             `json:"days_remaining,omitempty"`
	RenewedAt          *time.Time       `json:"renewed_at,omitempty"`
	Generation         int              `json:"generation"`
	KeyOrigin          string           `json:"key_origin"`
	PreviousValidUntil *time.Time       `json:"previous_valid_until,omitempty"`
	RevokedAt          *time.Time       `json:"revoked_at,omitempty"`
	WarningDays        int              `json:"warning_days"`
	CriticalDays       int              `json:"critical_days"`
	Renewal            *NodeCertRenewal `json:"renewal,omitempty"`
}

NodeCertResource mirrors internal/api's nodeCertResource.

type NodeDrainPreview

type NodeDrainPreview struct {
	DryRun    bool     `json:"dry_run"`
	NodeID    string   `json:"node_id"`
	Services  []string `json:"services"`
	Databases []string `json:"databases"`
}

NodeDrainPreview is the dry run of a drain: what would move, nothing changed.

type NodeDrainResource added in v0.2.0

type NodeDrainResource struct {
	ID           string             `json:"id"`
	NodeID       string             `json:"node_id"`
	TargetNodeID string             `json:"target_node_id,omitempty"`
	Status       string             `json:"status"`
	Error        string             `json:"error,omitempty"`
	Blocked      []DrainBlocked     `json:"blocked"`
	Moves        []NodeMoveResource `json:"moves"`
	StartedAt    string             `json:"started_at"`
	UpdatedAt    string             `json:"updated_at"`
	FinishedAt   string             `json:"finished_at,omitempty"`
}

NodeDrainResource mirrors internal/api's nodeDrainResource.

func (NodeDrainResource) Done added in v0.2.0

func (d NodeDrainResource) Done() bool

Done reports whether the drain reached a final status.

type NodeFit added in v0.2.0

type NodeFit struct {
	NodeID         string   `json:"node_id"`
	Name           string   `json:"name"`
	IsLocal        bool     `json:"is_local"`
	Eligible       bool     `json:"eligible"`
	Current        bool     `json:"current"`
	GPUs           int      `json:"gpus"`
	TotalBytes     int64    `json:"total_bytes"`
	ReservedBytes  int64    `json:"reserved_bytes"`
	Verdict        string   `json:"verdict"`
	WeightsSource  string   `json:"weights_source"`
	WeightsBytes   int64    `json:"weights_bytes"`
	KVBytes        int64    `json:"kv_bytes"`
	OverheadBytes  int64    `json:"overhead_bytes"`
	NeedBytes      int64    `json:"need_bytes"`
	FreeBytes      int64    `json:"free_bytes"`
	ContextTokens  int      `json:"context_tokens"`
	ContextAssumed bool     `json:"context_assumed"`
	Arithmetic     string   `json:"arithmetic"`
	Reason         string   `json:"reason,omitempty"`
	Suggestions    []string `json:"suggestions"`
}

NodeFit mirrors internal/models.NodeFit.

type NodeGPUResource added in v0.2.0

type NodeGPUResource struct {
	Present          bool     `json:"present"`
	RuntimeInstalled bool     `json:"runtime_installed"`
	DriverVersion    string   `json:"driver_version,omitempty"`
	GPUCount         int      `json:"gpu_count"`
	ReservedGPUs     int      `json:"reserved_gpus"`
	FreeGPUs         int      `json:"free_gpus"`
	TotalVRAMMiB     int64    `json:"total_vram_mib"`
	UsedVRAMMiB      int64    `json:"used_vram_mib"`
	Reservations     []string `json:"reservations"`
}

NodeGPUResource mirrors internal/api's nodeGPUResource, the GPU summary on a node.

type NodeLabels added in v0.2.0

type NodeLabels struct {
	Labels map[string]string `json:"labels"`
}

NodeLabels is the body of the node labels routes.

type NodeMetricsResource added in v0.2.0

type NodeMetricsResource struct {
	Metric        string                `json:"metric"`
	Points        []MetricPointResource `json:"points"`
	ResourceCount int                   `json:"resource_count"`
}

NodeMetricsResource mirrors internal/api's nodeMetricsResponse (internal/api/node_metrics.go): AppMetricsResource's fields plus ResourceCount, how many of the node's placed services actually contributed a sample to this response.

type NodeMoveResource added in v0.2.0

type NodeMoveResource struct {
	ID         string         `json:"id"`
	Kind       string         `json:"kind"`
	Resource   string         `json:"resource"`
	FromNodeID string         `json:"from_node_id"`
	ToNodeID   string         `json:"to_node_id"`
	Stateful   bool           `json:"stateful"`
	Volumes    []string       `json:"volumes"`
	Phase      string         `json:"phase"`
	Status     string         `json:"status"`
	Error      string         `json:"error,omitempty"`
	DrainID    string         `json:"drain_id,omitempty"`
	Steps      []NodeMoveStep `json:"steps"`
	StartedAt  string         `json:"started_at"`
	UpdatedAt  string         `json:"updated_at"`
	FinishedAt string         `json:"finished_at,omitempty"`
}

NodeMoveResource mirrors internal/api's nodeMoveResource.

func (NodeMoveResource) Done added in v0.2.0

func (m NodeMoveResource) Done() bool

Done reports whether the move reached a final status.

type NodeMoveStep added in v0.2.0

type NodeMoveStep struct {
	Phase   string `json:"phase"`
	Outcome string `json:"outcome"`
	Message string `json:"message,omitempty"`
	At      string `json:"at"`
}

NodeMoveStep is one recorded phase of a node move.

type NodePatchStatusResource

type NodePatchStatusResource struct {
	Checked   bool       `json:"checked"`
	Total     int        `json:"total"`
	Security  int        `json:"security"`
	CheckedAt *time.Time `json:"checked_at,omitempty"`
}

NodePatchStatusResource mirrors internal/api's nodePatchStatusResponse (internal/api/node_patch_status.go). Checked distinguishes "never checked" (Total/Security both zero-valued and meaningless) from checked-and-genuinely-up-to-date (Checked true, Total 0): callers must branch on Checked first.

type NodeProviderRegionResource added in v0.2.0

type NodeProviderRegionResource struct {
	ID   string `json:"id"`
	Name string `json:"name"`
}

NodeProviderRegionResource mirrors internal/api's nodeProviderRegionResource.

type NodeProviderResource added in v0.2.0

type NodeProviderResource struct {
	Provider       string     `json:"provider"`
	HasToken       bool       `json:"has_token"`
	Status         string     `json:"status,omitempty"`
	Methods        []string   `json:"methods,omitempty"`
	Method         string     `json:"method,omitempty"`
	Label          string     `json:"label,omitempty"`
	Location       string     `json:"location,omitempty"`
	Notes          string     `json:"notes,omitempty"`
	ConnectedBy    string     `json:"connected_by,omitempty"`
	ConnectedAt    *time.Time `json:"connected_at,omitempty"`
	LastTestedAt   *time.Time `json:"last_tested_at,omitempty"`
	LastTestOK     *bool      `json:"last_test_ok,omitempty"`
	LastTestDetail string     `json:"last_test_detail,omitempty"`
}

NodeProviderResource mirrors internal/api's nodeProviderResource.

type NodeProviderSizeResource added in v0.2.0

type NodeProviderSizeResource struct {
	ID           string `json:"id"`
	Name         string `json:"name"`
	VCPUs        int    `json:"vcpus"`
	MemoryMB     int    `json:"memory_mb"`
	DiskGB       int    `json:"disk_gb"`
	PriceMonthly string `json:"price_monthly,omitempty"`
	Currency     string `json:"currency,omitempty"`
}

NodeProviderSizeResource mirrors internal/api's nodeProviderSizeResource.

type NodeProviderTestResult

type NodeProviderTestResult struct {
	OK       bool      `json:"ok"`
	Message  string    `json:"message"`
	TestedAt time.Time `json:"tested_at"`
}

NodeProviderTestResult mirrors internal/api's nodeProviderTestResult.

type NodeProvisionResource added in v0.2.0

type NodeProvisionResource struct {
	ID            string    `json:"id"`
	Provider      string    `json:"provider"`
	Region        string    `json:"region"`
	Size          string    `json:"size"`
	Name          string    `json:"name"`
	Role          string    `json:"role"`
	Status        string    `json:"status"`
	IPAddress     string    `json:"ip_address,omitempty"`
	NodeID        string    `json:"node_id,omitempty"`
	FailureReason string    `json:"failure_reason,omitempty"`
	CreatedAt     time.Time `json:"created_at"`
	UpdatedAt     time.Time `json:"updated_at"`
}

NodeProvisionResource mirrors internal/api's nodeProvisionResource.

type NodeReenrollTokenResponse added in v0.2.0

type NodeReenrollTokenResponse struct {
	Token         string    `json:"token"`
	NodeID        string    `json:"node_id"`
	ExpiresAt     time.Time `json:"expires_at"`
	CAFingerprint string    `json:"ca_fingerprint,omitempty"`
	AgentBinary   string    `json:"agent_binary"`
}

NodeReenrollTokenResponse mirrors internal/api's reenrollTokenResponse: the only time the token is shown.

type NodeResource

type NodeResource struct {
	ID              string     `json:"id"`
	Name            string     `json:"name"`
	Address         string     `json:"address,omitempty"`
	Status          string     `json:"status"`
	CertFingerprint string     `json:"cert_fingerprint,omitempty"`
	JoinedAt        *time.Time `json:"joined_at,omitempty"`
	LastSeenAt      *time.Time `json:"last_seen_at,omitempty"`
	// Schedulable is the cordon state: false means the node refuses new
	// placements while whatever's already running there keeps running.
	Schedulable           bool      `json:"schedulable"`
	AcceptsAppWorkloads   bool      `json:"accepts_app_workloads"`
	AcceptsBuildWorkloads bool      `json:"accepts_build_workloads"`
	CreatedAt             time.Time `json:"created_at"`
	// AlertStatus is only set by GET /api/v1/nodes/{id} (a single-node
	// fetch), never the list endpoint; nil when telemetry isn't
	// configured on the control plane.
	AlertStatus *NodeAlertStatusResource `json:"alert_status,omitempty"`
	// IsLocal is true for the one node running the control plane process
	// itself, the only node with real disk/memory host metrics.
	IsLocal bool `json:"is_local"`
	// StatusReason is a machine-readable code for a status needing
	// operator action, e.g. "enrolled_never_connected".
	StatusReason string `json:"status_reason,omitempty"`
	// GPU is set when the node reported an NVIDIA GPU.
	GPU *NodeGPUResource `json:"gpu,omitempty"`
	// Cert and Agent mirror the node's agent certificate lifecycle and the
	// agent's self-reported build (node_cert.go in this package).
	Cert  *NodeCertResource  `json:"cert,omitempty"`
	Agent *NodeAgentResource `json:"agent,omitempty"`
}

NodeResource mirrors internal/api's nodeResource (internal/api/nodes.go).

type NodeResourceUsageResource added in v0.2.0

type NodeResourceUsageResource struct {
	NodeID           string   `json:"node_id"`
	Name             string   `json:"name"`
	IsLocal          bool     `json:"is_local"`
	CPUPercent       *float64 `json:"cpu_percent,omitempty"`
	MemoryUsageBytes *float64 `json:"memory_usage_bytes,omitempty"`
	MemoryTotalBytes *float64 `json:"memory_total_bytes,omitempty"`
	DiskUsedBytes    *float64 `json:"disk_used_bytes,omitempty"`
	DiskTotalBytes   *float64 `json:"disk_total_bytes,omitempty"`

	LevelrailMemoryBytes       *float64                `json:"levelrail_memory_bytes,omitempty"`
	OtherContainersMemoryBytes *float64                `json:"other_containers_memory_bytes,omitempty"`
	OtherContainers            []UnmanagedContainerUse `json:"other_containers,omitempty"`
	SystemMemoryBytes          *float64                `json:"system_memory_bytes,omitempty"`
}

NodeResourceUsageResource mirrors internal/api's nodeResourceUsageResource (internal/api/node_resource_usage.go): one node's latest known CPU/memory/disk reading. CPUPercent/ MemoryUsageBytes are the sum of every placed service's latest sample, not a true host read; MemoryTotalBytes/DiskUsedBytes/DiskTotalBytes are real host reads but (today) only ever populated for the node running the control plane itself. A nil field means no data yet, not zero usage.

type NodeSecurityEvent

type NodeSecurityEvent struct {
	ID          int64     `json:"id"`
	Kind        string    `json:"kind"`
	Outcome     string    `json:"outcome"`
	Reason      string    `json:"reason,omitempty"`
	SourceIP    string    `json:"source_ip,omitempty"`
	Count       int       `json:"count"`
	FirstAt     time.Time `json:"first_at"`
	LastAt      time.Time `json:"last_at"`
	TokenID     string    `json:"token_id,omitempty"`
	Subject     string    `json:"subject,omitempty"`
	Message     string    `json:"message,omitempty"`
	Serial      string    `json:"serial,omitempty"`
	Fingerprint string    `json:"fingerprint,omitempty"`
	NotBefore   int64     `json:"not_before,omitempty"`
	NotAfter    int64     `json:"not_after,omitempty"`
	Actor       string    `json:"actor,omitempty"`
}

NodeSecurityEvent mirrors internal/api's nodeSecurityEventResource.

type NodeStatusEventResource added in v0.2.0

type NodeStatusEventResource struct {
	FromStatus string    `json:"from_status"`
	ToStatus   string    `json:"to_status"`
	CreatedAt  time.Time `json:"created_at"`
}

NodeStatusEventResource mirrors internal/api's nodeStatusEventResource.

type NodeTrust

type NodeTrust struct {
	NodeID     string               `json:"node_id"`
	IsLocal    bool                 `json:"is_local"`
	Status     NodeTrustStatus      `json:"status"`
	CA         *NodeTrustCA         `json:"ca,omitempty"`
	Cert       *NodeTrustCert       `json:"certificate,omitempty"`
	Renewal    *NodeTrustRenewal    `json:"renewal,omitempty"`
	Validation *NodeTrustValidation `json:"validation,omitempty"`
}

NodeTrust mirrors internal/api's nodeTrustResource.

type NodeTrustCA

type NodeTrustCA struct {
	Fingerprint   string     `json:"fingerprint,omitempty"`
	PinState      string     `json:"pin_state,omitempty"`
	PinReportedAt *time.Time `json:"pin_reported_at,omitempty"`
}

NodeTrustCA mirrors internal/api's nodeTrustCA.

type NodeTrustCert

type NodeTrustCert struct {
	Fingerprint   string     `json:"fingerprint,omitempty"`
	Serial        string     `json:"serial,omitempty"`
	IssuedAt      *time.Time `json:"issued_at,omitempty"`
	NotAfter      *time.Time `json:"not_after,omitempty"`
	DaysRemaining *int       `json:"days_remaining,omitempty"`
	LifetimeUsed  *float64   `json:"lifetime_used,omitempty"`
	KeyOrigin     string     `json:"key_origin"`
}

NodeTrustCert mirrors internal/api's nodeTrustCert.

type NodeTrustRenewal

type NodeTrustRenewal struct {
	NextRenewAt         *time.Time `json:"next_renew_at,omitempty"`
	NextRenewEstimated  bool       `json:"next_renew_estimated,omitempty"`
	LastRenewedAt       *time.Time `json:"last_renewed_at,omitempty"`
	RenewalCount        int        `json:"renewal_count"`
	LastError           string     `json:"last_error,omitempty"`
	LastFailedAt        *time.Time `json:"last_failed_at,omitempty"`
	NextRetryAt         *time.Time `json:"next_retry_at,omitempty"`
	ConsecutiveFailures int        `json:"consecutive_failures"`
}

NodeTrustRenewal mirrors internal/api's nodeTrustRenewal.

type NodeTrustStatus

type NodeTrustStatus struct {
	State  string `json:"state"`
	Reason string `json:"reason,omitempty"`
}

NodeTrustStatus mirrors internal/api's nodeTrustStatus.

type NodeTrustValidation

type NodeTrustValidation struct {
	WindowHours    int        `json:"window_hours"`
	Accepted       int        `json:"accepted"`
	Rejected       int        `json:"rejected"`
	LastAcceptedAt *time.Time `json:"last_accepted_at,omitempty"`
	LastRejectedAt *time.Time `json:"last_rejected_at,omitempty"`
}

NodeTrustValidation mirrors internal/api's nodeTrustValidation.

type NotificationChannelResource

type NotificationChannelResource struct {
	ID        string `json:"id"`
	Name      string `json:"name"`
	Kind      string `json:"kind"`
	NotifyURL string `json:"notify_url"`
	Enabled   bool   `json:"enabled"`
	// NotifyDeviceLogin is true when the channel gets a link-only notice
	// while a CLI login awaits approval.
	NotifyDeviceLogin bool `json:"notify_device_login"`
	// NotifyDeviceLoginExpired is true when the channel is told a pending
	// CLI login expired unapproved.
	NotifyDeviceLoginExpired bool   `json:"notify_device_login_expired"`
	CreatedAt                string `json:"created_at"`
	UpdatedAt                string `json:"updated_at"`
}

NotificationChannelResource mirrors internal/api's notificationChannelResource (internal/api/notification_channels.go).

type NotificationDeliveryResource

type NotificationDeliveryResource struct {
	ID        string `json:"id"`
	ChannelID string `json:"channel_id"`
	Trigger   string `json:"trigger"`
	Success   bool   `json:"success"`
	Error     string `json:"error,omitempty"`
	CreatedAt string `json:"created_at"`
}

NotificationDeliveryResource mirrors internal/api's notificationDeliveryResource (internal/api/notification_channels.go).

type OAuthProviderSettingsResource added in v0.2.0

type OAuthProviderSettingsResource struct {
	Provider           string `json:"provider"`
	Enabled            bool   `json:"enabled"`
	ClientID           string `json:"client_id,omitempty"`
	AllowedEmailDomain string `json:"allowed_email_domain,omitempty"`
	IssuerURL          string `json:"issuer_url,omitempty"`
	DisplayName        string `json:"display_name,omitempty"`
	HasClientSecret    bool   `json:"has_client_secret"`
}

OAuthProviderSettingsResource mirrors internal/api's oauthProviderSettingsResource (internal/api/oauth_settings.go): GET/PUT /api/v1/settings/oauth[/{provider}]'s wire shape. ClientSecret is never included in a response, only HasClientSecret.

type OAuthSSOEvaluateRequest

type OAuthSSOEvaluateRequest struct {
	Email         string   `json:"email"`
	EmailVerified bool     `json:"email_verified"`
	Groups        []string `json:"groups"`
}

OAuthSSOEvaluateRequest mirrors the API's oauthSSOEvaluateRequest.

type OAuthSSOEvaluation

type OAuthSSOEvaluation struct {
	Provider        string          `json:"provider"`
	Email           string          `json:"email"`
	EmailVerified   bool            `json:"email_verified"`
	GroupsClaim     string          `json:"groups_claim"`
	GroupsFound     bool            `json:"groups_found"`
	Groups          []string        `json:"groups"`
	GroupLikeClaims []string        `json:"group_like_claims"`
	RoleID          string          `json:"role_id"`
	RoleSource      string          `json:"role_source"`
	AccountState    string          `json:"account_state"`
	SyncRoles       bool            `json:"sync_roles"`
	Allowed         bool            `json:"allowed"`
	RefusalCode     string          `json:"refusal_code,omitempty"`
	Issues          []OAuthSSOIssue `json:"issues"`
}

OAuthSSOEvaluation mirrors the API's ssoEvaluation.

type OAuthSSOFix

type OAuthSSOFix struct {
	Kind   string `json:"kind"`
	Action string `json:"action,omitempty"`
	Value  string `json:"value,omitempty"`
}

OAuthSSOFix mirrors the API's ssoFix.

type OAuthSSOIssue

type OAuthSSOIssue struct {
	Code string      `json:"code"`
	Fix  OAuthSSOFix `json:"fix"`
}

OAuthSSOIssue mirrors the API's ssoIssue.

type OAuthSSOPolicy

type OAuthSSOPolicy struct {
	Provider        string   `json:"provider"`
	Name            string   `json:"name"`
	Enabled         bool     `json:"enabled"`
	GroupsSupported bool     `json:"groups_supported"`
	GroupsClaim     string   `json:"groups_claim"`
	SyncRoles       bool     `json:"sync_roles"`
	DefaultRoleID   string   `json:"default_role_id"`
	JITProvisioning bool     `json:"jit_provisioning"`
	AllowedDomains  []string `json:"allowed_domains"`
}

OAuthSSOPolicy mirrors the API's oauthSSOPolicyResource.

type OAuthSSOPolicyRequest

type OAuthSSOPolicyRequest struct {
	GroupsClaim     string   `json:"groups_claim"`
	SyncRoles       bool     `json:"sync_roles"`
	DefaultRoleID   string   `json:"default_role_id"`
	JITProvisioning bool     `json:"jit_provisioning"`
	AllowedDomains  []string `json:"allowed_domains"`
}

OAuthSSOPolicyRequest mirrors the API's oauthSSOPolicyRequest.

type OnboardingStateResource

type OnboardingStateResource struct {
	Completed   bool              `json:"completed"`
	CurrentStep string            `json:"current_step,omitempty"`
	Steps       map[string]string `json:"steps,omitempty"`
}

OnboardingStateResource mirrors internal/api's onboardingStateResource (internal/api/onboarding.go).

type OpenAPIRouteResource added in v0.2.0

type OpenAPIRouteResource struct {
	Method       string          `json:"method"`
	Path         string          `json:"path"`
	Ability      string          `json:"ability"`
	Group        string          `json:"group"`
	Handler      string          `json:"handler"`
	Description  string          `json:"description,omitempty"`
	RequestBody  json.RawMessage `json:"requestBody,omitempty"`
	ResponseBody json.RawMessage `json:"responseBody,omitempty"`
}

OpenAPIRouteResource mirrors internal/api's openAPISpecRoute exactly: one registered route plus, for a hand-annotated few, a worked request/response example (see internal/api/openapi.go).

type OpenAPISpecResource added in v0.2.0

type OpenAPISpecResource struct {
	Version      int                    `json:"version"`
	Count        int                    `json:"count"`
	ExampleCount int                    `json:"exampleCount"`
	Routes       []OpenAPIRouteResource `json:"routes"`
}

OpenAPISpecResource mirrors internal/api's openAPISpec: the "levelrail-cli api-docs" and web API explorer's shared data source, generated at build time by scripts/gen-api-reference from the routes*.go registrations.

type Option

type Option func(*Client)

Option configures a Client at construction time. See WithUserAgent.

func WithUserAgent

func WithUserAgent(userAgent string) Option

WithUserAgent sets the User-Agent header on every request this Client sends, so the control plane's audit log (internal/api's clientKindFromUserAgent) can tell which real client made a call rather than lumping every bearer-token caller into one bucket. Each of this project's own callers passes its own value: cmd/levelrail-cli sets "levelrail-cli/<version>", cmd/levelrail-mcp sets "levelrail-mcp/<version>".

type OrganizationResource

type OrganizationResource struct {
	ID        string `json:"id"`
	Name      string `json:"name"`
	CreatedAt string `json:"created_at"`
}

OrganizationResource mirrors internal/api's organizationResource (internal/api/organizations.go).

type OrphanFailure added in v0.2.0

type OrphanFailure struct {
	OrphanResource
	Error string `json:"error"`
}

OrphanFailure is an orphan the reaper could not remove.

type OrphanFinding added in v0.2.0

type OrphanFinding struct {
	OrphanResource
	FirstSeenAt *string `json:"first_seen_at,omitempty"`
	ReapAfter   *string `json:"reap_after,omitempty"`
	Due         bool    `json:"due"`
}

OrphanFinding is an OrphanResource plus its grace period status.

type OrphanReport added in v0.2.0

type OrphanReport struct {
	DryRun      bool             `json:"dry_run"`
	Findings    []OrphanFinding  `json:"findings"`
	Removed     []OrphanResource `json:"removed"`
	Failed      []OrphanFailure  `json:"failed,omitempty"`
	Unreachable []string         `json:"unreachable,omitempty"`
	Halted      string           `json:"halted,omitempty"`
}

OrphanReport mirrors internal/orphans.Report.

type OrphanResource added in v0.2.0

type OrphanResource struct {
	Kind      string `json:"kind"`
	Name      string `json:"name"`
	ID        string `json:"id,omitempty"`
	NodeID    string `json:"node_id"`
	Reason    string `json:"reason"`
	Image     string `json:"image,omitempty"`
	SizeBytes int64  `json:"size_bytes,omitempty"`
	PlacedOn  string `json:"placed_on,omitempty"`
	Skip      string `json:"skip,omitempty"`
}

OrphanResource mirrors internal/orphans.Orphan: a leftover container or volume that desired state no longer accounts for.

type OrphanedVolumeResource added in v0.2.0

type OrphanedVolumeResource struct {
	Name      string `json:"name"`
	SizeBytes *int64 `json:"size_bytes,omitempty"`
	CreatedAt string `json:"created_at,omitempty"`
}

OrphanedVolumeResource mirrors internal/api's orphanedVolumeResource: one of this instance's own named Docker volumes that current desired state no longer references. SizeBytes is nil when the volume driver didn't report a size, never a fabricated 0.

type PITRRestoreHistoryResource added in v0.2.0

type PITRRestoreHistoryResource struct {
	ID                  string `json:"id"`
	DatabaseName        string `json:"database_name"`
	BaseBackupHistoryID string `json:"base_backup_history_id"`
	TargetTimestamp     string `json:"target_timestamp"`
	Status              string `json:"status"`
	Error               string `json:"error,omitempty"`
	StartedAt           string `json:"started_at"`
	FinishedAt          string `json:"finished_at,omitempty"`
}

PITRRestoreHistoryResource mirrors internal/api's pitrRestoreHistoryResource: GET/POST .../pitr-restore(s).

type PITRStatusResource added in v0.2.0

type PITRStatusResource struct {
	Enabled       bool   `json:"enabled"`
	EnabledAt     string `json:"enabled_at,omitempty"`
	HasBaseBackup bool   `json:"has_base_backup"`
	WindowStart   string `json:"window_start,omitempty"`
	WindowEnd     string `json:"window_end,omitempty"`
	WindowError   string `json:"window_error,omitempty"`
	// WALShip is the last shipping outcome of the WAL archive to the backup
	// target; nil until a pass has run.
	WALShip *WALShipResource `json:"wal_ship,omitempty"`
}

PITRStatusResource mirrors internal/api's pitrStatusResource (internal/api/pitr.go): GET /api/v1/databases/{name}/pitr.

type PRPreviewEnvOverride

type PRPreviewEnvOverride struct {
	ID        string `json:"id"`
	Key       string `json:"key"`
	Value     string `json:"value"`
	Secret    bool   `json:"secret"`
	UpdatedAt string `json:"updated_at"`
}

PRPreviewEnvOverride mirrors internal/api's prPreviewEnvResource: one env override for a single pull request's preview. Value is "" for a secret.

type PackageRegistryResource

type PackageRegistryResource struct {
	ID             string    `json:"id"`
	Name           string    `json:"name"`
	Ecosystem      string    `json:"ecosystem"`
	URL            string    `json:"url"`
	Username       string    `json:"username,omitempty"`
	ModulePatterns string    `json:"module_patterns,omitempty"`
	ScopeKind      string    `json:"scope_kind"`
	ScopeRef       string    `json:"scope_ref,omitempty"`
	BuildSecretID  string    `json:"build_secret_id"`
	CreatedBy      string    `json:"created_by,omitempty"`
	CreatedAt      time.Time `json:"created_at"`
}

PackageRegistryResource mirrors internal/api's packageRegistryResource.

type PatchEnvironmentRequest added in v0.2.0

type PatchEnvironmentRequest struct {
	Name      *string `json:"name,omitempty"`
	Kind      *string `json:"kind,omitempty"`
	SortOrder *int    `json:"sort_order,omitempty"`
	Protected *bool   `json:"protected,omitempty"`
}

PatchEnvironmentRequest mirrors internal/api's updateEnvironmentRequest; nil fields are left unchanged.

type PendingChange added in v0.2.0

type PendingChange struct {
	Kind  string   `json:"kind"`
	Keys  []string `json:"keys,omitempty"`
	Since string   `json:"since"`
}

PendingChange mirrors internal/api's pendingChange.

type PendingChanges added in v0.2.0

type PendingChanges struct {
	Pending     bool            `json:"pending"`
	Changes     []PendingChange `json:"changes"`
	ApplyAction string          `json:"apply_action"`
}

PendingChanges mirrors internal/api's pendingChangesResource.

type PendingJoinToken

type PendingJoinToken struct {
	ID        string    `json:"id"`
	Purpose   string    `json:"purpose"`
	NodeID    string    `json:"node_id,omitempty"`
	CreatedAt time.Time `json:"created_at"`
	ExpiresAt time.Time `json:"expires_at"`
}

PendingJoinToken is an unused, unexpired node join token (never its secret).

type PipelineApproval added in v0.2.0

type PipelineApproval struct {
	ID              int64      `json:"id"`
	Job             string     `json:"job"`
	StepIndex       int        `json:"step_index"`
	Message         string     `json:"message"`
	RequiredAbility string     `json:"required_ability"`
	Decision        string     `json:"decision,omitempty"`
	DecidedBy       string     `json:"decided_by,omitempty"`
	Comment         string     `json:"comment,omitempty"`
	ExpiresAt       *time.Time `json:"expires_at,omitempty"`
	CreatedAt       time.Time  `json:"created_at"`
	DecidedAt       *time.Time `json:"decided_at,omitempty"`
}

PipelineApproval is one manual approval gate of a run.

type PipelineArtifact

type PipelineArtifact struct {
	ID        string    `json:"id"`
	Job       string    `json:"job"`
	Name      string    `json:"name"`
	SizeBytes int64     `json:"size_bytes"`
	SHA256    string    `json:"sha256"`
	CreatedAt time.Time `json:"created_at"`
	ExpiresAt time.Time `json:"expires_at"`
}

PipelineArtifact is one archive a job stored.

type PipelineFix

type PipelineFix struct {
	Code   string `json:"code"`
	Kind   string `json:"kind"`
	Job    string `json:"job"`
	Target string `json:"target,omitempty"`
	Hint   string `json:"hint"`
	Match  string `json:"match"`
}

PipelineFix is a typed suggestion for a failed job.

type PipelineFixResult

type PipelineFixResult struct {
	Pipeline string `json:"pipeline"`
	Run      string `json:"run,omitempty"`
}

PipelineFixResult is the outcome of applying a fix.

type PipelineHold added in v0.2.0

type PipelineHold struct {
	State  string     `json:"state"`
	Reason string     `json:"reason"`
	By     string     `json:"by,omitempty"`
	At     *time.Time `json:"at,omitempty"`
}

PipelineHold is a run held for approval, such as a fork pull request.

type PipelineInsights

type PipelineInsights struct {
	Window     int                  `json:"window"`
	Jobs       []PipelineJobInsight `json:"jobs"`
	DiffRunID  string               `json:"diff_run_id,omitempty"`
	DiffBaseID string               `json:"diff_base_run_id,omitempty"`
	Diff       []PipelineJobDelta   `json:"diff"`
}

PipelineInsights is the run-over-run view of one pipeline.

type PipelineIssue added in v0.2.0

type PipelineIssue struct {
	Path    string `json:"path"`
	Line    int    `json:"line"`
	Message string `json:"message"`
}

PipelineIssue is one validation problem in a pipeline definition.

type PipelineJobDelta

type PipelineJobDelta struct {
	Job             string  `json:"job"`
	BaselineSeconds int64   `json:"baseline_seconds"`
	CurrentSeconds  int64   `json:"current_seconds"`
	DeltaSeconds    int64   `json:"delta_seconds"`
	DeltaPercent    float64 `json:"delta_percent"`
}

PipelineJobDelta is a job's duration change between two runs.

type PipelineJobInsight

type PipelineJobInsight struct {
	Job         string  `json:"job"`
	Runs        int     `json:"runs"`
	Failures    int     `json:"failures"`
	FailureRate float64 `json:"failure_rate"`
	P50Seconds  int64   `json:"p50_seconds"`
	LastSeconds int64   `json:"last_seconds"`
	Flaky       bool    `json:"flaky"`
	FlakyReason string  `json:"flaky_reason,omitempty"`
}

PipelineJobInsight is one job's stats over recent runs.

type PipelineJobView added in v0.2.0

type PipelineJobView struct {
	Key        string             `json:"key"`
	Name       string             `json:"name"`
	Stage      string             `json:"stage,omitempty"`
	Needs      []string           `json:"needs"`
	Matrix     map[string]string  `json:"matrix,omitempty"`
	NodeID     string             `json:"node_id,omitempty"`
	Status     string             `json:"status"`
	Reason     string             `json:"reason,omitempty"`
	Attempt    int                `json:"attempt"`
	Outputs    map[string]string  `json:"outputs,omitempty"`
	StartedAt  *time.Time         `json:"started_at,omitempty"`
	FinishedAt *time.Time         `json:"finished_at,omitempty"`
	Steps      []PipelineStepView `json:"steps"`
}

PipelineJobView is one job of a run with its steps.

type PipelineLogLine added in v0.2.0

type PipelineLogLine struct {
	ID     int64     `json:"id"`
	Job    string    `json:"job"`
	Step   int       `json:"step"`
	Stream string    `json:"stream"`
	Line   string    `json:"line"`
	Time   time.Time `json:"time"`
}

PipelineLogLine is one output line of a run.

type PipelineOIDCResource added in v0.2.0

type PipelineOIDCResource struct {
	Configured        bool   `json:"configured"`
	IssuerURL         string `json:"issuer_url,omitempty"`
	JWKSURL           string `json:"jwks_url,omitempty"`
	RotationSupported bool   `json:"rotation_supported"`
}

PipelineOIDCResource mirrors internal/api's oidcInfoResource: whether pipeline jobs can mint OIDC tokens on this control plane, and the URLs an operator wires into a cloud provider's OIDC trust policy.

type PipelineOIDCRotation added in v0.2.0

type PipelineOIDCRotation struct {
	OldKID        string    `json:"old_kid"`
	NewKID        string    `json:"new_kid"`
	RetireAt      time.Time `json:"retire_at"`
	RetiringCount int       `json:"retiring_count"`
}

PipelineOIDCRotation mirrors internal/api's rotatePipelineOIDCKeyResponse.

type PipelineParameter

type PipelineParameter struct {
	Name        string   `json:"name"`
	Type        string   `json:"type,omitempty"`
	Default     string   `json:"default,omitempty"`
	Choices     []string `json:"choices,omitempty"`
	Required    bool     `json:"required,omitempty"`
	Description string   `json:"description,omitempty"`
}

PipelineParameter mirrors a declared run parameter.

type PipelineReport added in v0.2.0

type PipelineReport struct {
	Provider string `json:"provider,omitempty"`
	State    string `json:"state,omitempty"`
	URL      string `json:"url,omitempty"`
	Warning  string `json:"warning,omitempty"`
}

PipelineReport mirrors internal/api's pipelineReport: the run's commit status as posted to the git forge.

type PipelineResource added in v0.2.0

type PipelineResource struct {
	ID       string   `json:"id"`
	App      string   `json:"app"`
	Name     string   `json:"name"`
	Source   string   `json:"source"`
	Enabled  bool     `json:"enabled"`
	YAML     string   `json:"yaml,omitempty"`
	Triggers []string `json:"triggers,omitempty"`
	// Parameters are the values a run may set.
	Parameters []PipelineParameter `json:"parameters,omitempty"`
	Jobs       int                 `json:"jobs"`
	LastRun    *RunBrief           `json:"last_run,omitempty"`
	CreatedAt  time.Time           `json:"created_at"`
	UpdatedAt  time.Time           `json:"updated_at"`
	SourceSHA  string              `json:"source_sha,omitempty"`
	Diverged   bool                `json:"diverged,omitempty"`
}

PipelineResource mirrors internal/api's pipelineResource.

type PipelineRunResource added in v0.2.0

type PipelineRunResource struct {
	ID           string             `json:"id"`
	PipelineID   string             `json:"pipeline_id"`
	PipelineName string             `json:"pipeline_name"`
	App          string             `json:"app"`
	Number       int                `json:"number"`
	Trigger      string             `json:"trigger"`
	Actor        string             `json:"actor,omitempty"`
	Ref          string             `json:"ref,omitempty"`
	CommitSHA    string             `json:"commit_sha,omitempty"`
	Inputs       map[string]string  `json:"inputs,omitempty"`
	PayloadBytes int                `json:"payload_bytes,omitempty"`
	PayloadType  string             `json:"payload_type,omitempty"`
	Status       string             `json:"status"`
	Reason       string             `json:"reason,omitempty"`
	CreatedAt    time.Time          `json:"created_at"`
	StartedAt    *time.Time         `json:"started_at,omitempty"`
	FinishedAt   *time.Time         `json:"finished_at,omitempty"`
	Jobs         []PipelineJobView  `json:"jobs,omitempty"`
	Approvals    []PipelineApproval `json:"approvals,omitempty"`
	Hold         *PipelineHold      `json:"hold,omitempty"`
	Report       *PipelineReport    `json:"report,omitempty"`
}

PipelineRunResource mirrors internal/api's pipelineRunResource.

type PipelineRunRow added in v0.2.0

type PipelineRunRow struct {
	ID              string     `json:"id"`
	App             string     `json:"app"`
	Pipeline        string     `json:"pipeline"`
	Number          int        `json:"number"`
	Status          string     `json:"status"`
	Reason          string     `json:"reason,omitempty"`
	Trigger         string     `json:"trigger"`
	Ref             string     `json:"ref,omitempty"`
	ShortSHA        string     `json:"short_sha,omitempty"`
	CreatedAt       time.Time  `json:"created_at"`
	StartedAt       *time.Time `json:"started_at,omitempty"`
	DurationSeconds *int64     `json:"duration_seconds,omitempty"`
	ApprovalPending bool       `json:"approval_pending"`
	ApprovalID      int64      `json:"approval_id,omitempty"`
	HoldPending     bool       `json:"hold_pending"`
	CanDecide       bool       `json:"can_decide"`
}

PipelineRunRow mirrors internal/api's pipelineRunRowResource.

type PipelineRunRowsPage added in v0.2.0

type PipelineRunRowsPage struct {
	Runs       []PipelineRunRow `json:"runs"`
	NextCursor string           `json:"next_cursor,omitempty"`
}

PipelineRunRowsPage is one page of cross-app runs.

type PipelineRunsQuery added in v0.2.0

type PipelineRunsQuery struct {
	Status   string
	App      string
	Pipeline string
	Trigger  string
	Cursor   string
	Limit    int
}

PipelineRunsQuery filters ListAllPipelineRuns. Empty fields are not sent.

type PipelineSaveRequest added in v0.2.0

type PipelineSaveRequest struct {
	Name    string `json:"name,omitempty"`
	YAML    string `json:"yaml"`
	Enabled *bool  `json:"enabled,omitempty"`
}

PipelineSaveRequest is the body of create and update.

type PipelineStartRequest added in v0.2.0

type PipelineStartRequest struct {
	Ref    string            `json:"ref,omitempty"`
	SHA    string            `json:"sha,omitempty"`
	Inputs map[string]string `json:"inputs,omitempty"`
}

PipelineStartRequest is the body of a manual or API run.

type PipelineStepView added in v0.2.0

type PipelineStepView struct {
	Index      int        `json:"index"`
	Name       string     `json:"name"`
	Kind       string     `json:"kind"`
	Status     string     `json:"status"`
	Reason     string     `json:"reason,omitempty"`
	ExitCode   *int       `json:"exit_code,omitempty"`
	Attempt    int        `json:"attempt"`
	StartedAt  *time.Time `json:"started_at,omitempty"`
	FinishedAt *time.Time `json:"finished_at,omitempty"`
}

PipelineStepView is one step of a job.

type PipelineSyncItem added in v0.2.0

type PipelineSyncItem struct {
	File    string `json:"file"`
	Name    string `json:"name"`
	Outcome string `json:"outcome"`
	Message string `json:"message,omitempty"`
}

PipelineSyncItem is the outcome for one pipeline file.

type PipelineSyncResult added in v0.2.0

type PipelineSyncResult struct {
	SHA   string             `json:"sha"`
	Dir   string             `json:"dir,omitempty"`
	Items []PipelineSyncItem `json:"items"`
}

PipelineSyncResult is the outcome of one repository sync.

type PipelineSyncStatus added in v0.2.0

type PipelineSyncStatus struct {
	Connected    bool       `json:"connected"`
	RepoIsTruth  bool       `json:"repo_is_truth"`
	LastSHA      string     `json:"last_sha,omitempty"`
	LastSyncedAt *time.Time `json:"last_synced_at,omitempty"`
	LastError    string     `json:"last_error,omitempty"`
}

PipelineSyncStatus is an app's repository sync settings and last outcome.

type PipelineTrigger added in v0.2.0

type PipelineTrigger struct {
	ID        int64     `json:"id"`
	Pipeline  string    `json:"pipeline,omitempty"`
	Event     string    `json:"event"`
	Ref       string    `json:"ref,omitempty"`
	SHA       string    `json:"sha,omitempty"`
	Decision  string    `json:"decision"`
	Reason    string    `json:"reason"`
	RunID     string    `json:"run_id,omitempty"`
	CreatedAt time.Time `json:"created_at"`
}

PipelineTrigger is one recorded decision about a git event.

type PipelineValidation added in v0.2.0

type PipelineValidation struct {
	Valid    bool            `json:"valid"`
	Issues   []PipelineIssue `json:"issues"`
	Triggers []string        `json:"triggers,omitempty"`
	Jobs     int             `json:"jobs,omitempty"`
}

PipelineValidation is the result of POST /api/v1/pipelines/validate.

type PipelineWebhook

type PipelineWebhook struct {
	Configured bool       `json:"configured"`
	Enabled    bool       `json:"enabled,omitempty"`
	HMAC       bool       `json:"hmac,omitempty"`
	Path       string     `json:"path,omitempty"`
	CreatedAt  *time.Time `json:"created_at,omitempty"`
	RotatedAt  *time.Time `json:"rotated_at,omitempty"`
	LastUsedAt *time.Time `json:"last_used_at,omitempty"`
	Token      string     `json:"token,omitempty"`
	Secret     string     `json:"secret,omitempty"`
}

PipelineWebhook is a pipeline's inbound webhook trigger. Token and Secret are set only on the response that minted them.

type PipelineWebhookDelivery

type PipelineWebhookDelivery struct {
	ID             string    `json:"id"`
	ReceivedAt     time.Time `json:"received_at"`
	StatusCode     int       `json:"status_code"`
	Outcome        string    `json:"outcome"`
	Reason         string    `json:"reason,omitempty"`
	RunID          string    `json:"run_id,omitempty"`
	IdempotencyKey string    `json:"idempotency_key,omitempty"`
	ContentType    string    `json:"content_type,omitempty"`
	BodyBytes      int       `json:"body_bytes"`
	Replayable     bool      `json:"replayable"`
}

PipelineWebhookDelivery is one request a trigger received.

type PipelineWebhookRequest

type PipelineWebhookRequest struct {
	HMAC    *bool `json:"hmac,omitempty"`
	Enabled *bool `json:"enabled,omitempty"`
}

PipelineWebhookRequest is the body of PUT .../webhook.

type PlacementDecision

type PlacementDecision struct {
	NodeID     string                `json:"node_id"`
	Why        string                `json:"why"`
	Needs      PlacementNeeds        `json:"needs"`
	Policy     PlacementPolicy       `json:"policy"`
	Considered []PlacementEvaluation `json:"considered"`
	Warnings   []string              `json:"warnings,omitempty"`
}

PlacementDecision is the account of one placement choice.

type PlacementDecisionView

type PlacementDecisionView struct {
	Kind     string             `json:"kind"`
	Name     string             `json:"name"`
	NodeID   string             `json:"node_id"`
	Recorded *RecordedPlacement `json:"recorded"`
	Preview  PlacementDecision  `json:"preview"`
}

PlacementDecisionView is the recorded decision plus a fresh evaluation.

type PlacementDimension

type PlacementDimension struct {
	Name        string `json:"name"`
	Allocatable *int64 `json:"allocatable"`
	Requested   int64  `json:"requested"`
	Need        int64  `json:"need"`
	Free        *int64 `json:"free"`
	Shortfall   int64  `json:"shortfall"`
}

PlacementDimension is one resource on one node. A nil Allocatable means the node never reported it.

type PlacementEvaluation

type PlacementEvaluation struct {
	NodeID     string               `json:"node_id"`
	Name       string               `json:"name"`
	Eligible   bool                 `json:"eligible"`
	Reason     string               `json:"reason,omitempty"`
	Capacity   bool                 `json:"capacity_blocked,omitempty"`
	Unverified bool                 `json:"unverified,omitempty"`
	Headroom   *int                 `json:"headroom_permille,omitempty"`
	Load       int                  `json:"load"`
	Dimensions []PlacementDimension `json:"dimensions"`
}

PlacementEvaluation is how one node fared in a placement decision.

type PlacementNeeds

type PlacementNeeds struct {
	CPUMilli    int64 `json:"cpu_milli"`
	MemoryBytes int64 `json:"memory_bytes"`
	DiskBytes   int64 `json:"disk_bytes"`
}

PlacementNeeds is what a workload requests.

type PlacementPolicy

type PlacementPolicy struct {
	CPUOvercommitPercent    int  `json:"cpu_overcommit_percent"`
	MemoryOvercommitPercent int  `json:"memory_overcommit_percent"`
	MinFreeDiskPercent      int  `json:"min_free_disk_percent"`
	RejectUnknown           bool `json:"reject_unknown"`
}

PlacementPolicy is the operator's overcommit and headroom setting.

type PlacementRejection added in v0.2.0

type PlacementRejection struct {
	NodeID string `json:"node_id"`
	Reason string `json:"reason"`
}

PlacementRejection says why a node is not eligible.

type PlacementResource added in v0.2.0

type PlacementResource struct {
	Kind         string               `json:"kind"`
	Name         string               `json:"name"`
	NodeID       string               `json:"node_id"`
	NodeSelector map[string]string    `json:"node_selector"`
	Eligible     []string             `json:"eligible_node_ids"`
	Rejected     []PlacementRejection `json:"rejected"`
}

PlacementResource mirrors internal/api's placementResource.

type PlacementSimulation

type PlacementSimulation struct {
	Request struct {
		CPUMilli  int64  `json:"cpu_milli"`
		MemoryMiB int64  `json:"memory_mib"`
		Count     int    `json:"count"`
		Selector  string `json:"selector,omitempty"`
	} `json:"request"`
	Placed   []SimulatedPlacement `json:"placed"`
	Unplaced int                  `json:"unplaced"`
	Zones    []ZoneSummary        `json:"zones"`
}

PlacementSimulation is the body of GET /api/v1/nodes/placement-simulation.

type PlatformImportItem added in v0.2.0

type PlatformImportItem struct {
	Kind       string   `json:"kind"`
	SourceID   string   `json:"source_id"`
	SourceName string   `json:"source_name"`
	Target     string   `json:"target,omitempty"`
	Status     string   `json:"status"`
	Reasons    []string `json:"reasons,omitempty"`
	Manual     []string `json:"manual,omitempty"`
}

PlatformImportItem is one row of a platform import report.

type PlatformImportReport added in v0.2.0

type PlatformImportReport struct {
	Platform string               `json:"platform"`
	Items    []PlatformImportItem `json:"items"`
	Counts   map[string]int       `json:"counts"`
	Notes    []string             `json:"notes,omitempty"`
}

PlatformImportReport is the discover or apply result.

type PlatformImportRequest added in v0.2.0

type PlatformImportRequest struct {
	Platform      string   `json:"platform"`
	URL           string   `json:"url"`
	Token         string   `json:"token"`
	InsecureTLS   bool     `json:"insecure_tls,omitempty"`
	AllowPrivate  bool     `json:"allow_private,omitempty"`
	AllowLoopback bool     `json:"allow_loopback,omitempty"`
	Only          []string `json:"only,omitempty"`
	Collision     string   `json:"collision,omitempty"`
}

PlatformImportRequest is the body of the platform import routes. Token is the source platform's credential and is sent only in this body.

type Plugin

type Plugin struct {
	Name               string          `json:"name"`
	Version            string          `json:"version"`
	Kind               string          `json:"kind"`
	Publisher          string          `json:"publisher"`
	Description        string          `json:"description"`
	Image              string          `json:"image"`
	Digest             string          `json:"digest"`
	Manifest           string          `json:"manifest"`
	KeyID              string          `json:"key_id"`
	RequestedAbilities []string        `json:"requested_abilities"`
	ApprovedAbilities  []string        `json:"approved_abilities"`
	OutboundHosts      []string        `json:"outbound_hosts"`
	ConfigJSON         string          `json:"config_json"`
	State              string          `json:"state"`
	Running            bool            `json:"running"`
	Health             string          `json:"health"`
	Verification       string          `json:"verification"`
	Fix                string          `json:"fix"`
	Panels             []PluginPanel   `json:"panels"`
	Commands           []PluginCommand `json:"commands"`
	ApprovedAt         string          `json:"approved_at"`
	ApprovedBy         string          `json:"approved_by"`
	InstalledAt        string          `json:"installed_at"`
	InstalledBy        string          `json:"installed_by"`
	LastError          string          `json:"last_error"`
}

Plugin is one installed plugin as the control plane reports it.

type PluginActionResult

type PluginActionResult struct {
	OK      bool   `json:"ok"`
	Message string `json:"message"`
}

PluginActionResult is the plugin's answer to a button press.

type PluginCommand

type PluginCommand struct {
	ID          string `json:"id"`
	Description string `json:"description"`
	Panel       string `json:"panel"`
	Action      string `json:"action"`
}

PluginCommand is a CLI subcommand a plugin contributes through its manifest.

type PluginKey

type PluginKey struct {
	KeyID     string `json:"key_id"`
	Name      string `json:"name"`
	PublicKey string `json:"public_key"`
	AddedAt   string `json:"added_at"`
	AddedBy   string `json:"added_by"`
}

PluginKey is one trusted publisher key.

type PluginManifest

type PluginManifest struct {
	Name          string   `json:"name"`
	Version       string   `json:"version"`
	Kind          string   `json:"kind"`
	Publisher     string   `json:"publisher"`
	Description   string   `json:"description"`
	Image         string   `json:"image"`
	Abilities     []string `json:"abilities"`
	OutboundHosts []string `json:"outbound_hosts"`
}

PluginManifest is the parsed plugin.yaml in a preview.

type PluginPanel

type PluginPanel struct {
	ID          string           `json:"id"`
	Title       string           `json:"title"`
	Description string           `json:"description"`
	Rows        []PluginPanelRow `json:"rows"`
	Slot        string           `json:"slot"`
}

PluginPanel is a read-only card a plugin contributes through its manifest.

type PluginPanelColumn

type PluginPanelColumn struct {
	Key   string `json:"key"`
	Label string `json:"label"`
}

PluginPanelColumn names one table column.

type PluginPanelPoint

type PluginPanelPoint struct {
	Label string  `json:"label"`
	Value float64 `json:"value"`
}

PluginPanelPoint is one labelled chart value.

type PluginPanelRow

type PluginPanelRow struct {
	Label string `json:"label"`
	Value string `json:"value"`
}

PluginPanelRow is one label and plain-text value in a PluginPanel.

type PluginPanelView

type PluginPanelView struct {
	Widgets []PluginWidgetView `json:"widgets"`
}

PluginPanelView is a panel's bound data.

type PluginPreview

type PluginPreview struct {
	Manifest           PluginManifest     `json:"manifest"`
	Verification       PluginVerification `json:"verification"`
	Action             string             `json:"action"`
	InstalledVersion   string             `json:"installed_version"`
	ApprovedAbilities  []string           `json:"approved_abilities"`
	AddedAbilities     []string           `json:"added_abilities"`
	RemovedAbilities   []string           `json:"removed_abilities"`
	AddedHosts         []string           `json:"added_hosts"`
	RemovedHosts       []string           `json:"removed_hosts"`
	ReapprovalRequired bool               `json:"reapproval_required"`
}

PluginPreview is the review shown before an install or upgrade is approved.

type PluginTestResult

type PluginTestResult struct {
	OK      bool     `json:"ok"`
	Zones   []string `json:"zones,omitempty"`
	Message string   `json:"message"`
}

PluginTestResult is the outcome of POST /api/v1/plugins/{name}/test.

type PluginVerification

type PluginVerification struct {
	Status       string `json:"status"`
	DigestPinned bool   `json:"digest_pinned"`
	Digest       string `json:"digest"`
	Signed       bool   `json:"signed"`
	KeyID        string `json:"key_id"`
	KeyName      string `json:"key_name"`
	Installable  bool   `json:"installable"`
	Reason       string `json:"reason"`
}

PluginVerification is what the control plane could prove about a package.

type PluginWidgetView

type PluginWidgetView struct {
	Type    string              `json:"type"`
	Title   string              `json:"title"`
	Error   string              `json:"error,omitempty"`
	Value   string              `json:"value,omitempty"`
	Unit    string              `json:"unit,omitempty"`
	State   string              `json:"state,omitempty"`
	Text    string              `json:"text,omitempty"`
	Columns []PluginPanelColumn `json:"columns,omitempty"`
	Rows    [][]string          `json:"rows,omitempty"`
	Items   []string            `json:"items,omitempty"`
	Points  []PluginPanelPoint  `json:"points,omitempty"`
	Action  string              `json:"action,omitempty"`
	Label   string              `json:"label,omitempty"`
}

PluginWidgetView is one widget of a panel after the control plane bound it to plugin data.

type PolicyAttachmentResource

type PolicyAttachmentResource struct {
	ID            string    `json:"id"`
	PolicyID      string    `json:"policy_id"`
	PrincipalType string    `json:"principal_type"`
	PrincipalID   string    `json:"principal_id"`
	CreatedAt     time.Time `json:"created_at"`
}

PolicyAttachmentResource mirrors internal/api's policyAttachmentResource.

type PolicyCheckApp

type PolicyCheckApp struct {
	App         string            `json:"app"`
	ProjectID   string            `json:"project_id,omitempty"`
	Environment string            `json:"environment_id,omitempty"`
	Violations  []PolicyViolation `json:"violations"`
	WouldFail   bool              `json:"would_fail"`
}

PolicyCheckApp is one app's dry-run outcome.

type PolicyCheckRequest

type PolicyCheckRequest struct {
	App     string                      `json:"app,omitempty"`
	Scope   string                      `json:"scope,omitempty"`
	ScopeID string                      `json:"scope_id,omitempty"`
	Rules   map[string]DeployPolicyRule `json:"rules,omitempty"`
}

PolicyCheckRequest narrows a dry run to one app and previews unsaved rules.

type PolicyCheckResult

type PolicyCheckResult struct {
	Checked int              `json:"checked"`
	Failing int              `json:"failing"`
	Warning int              `json:"warning"`
	Apps    []PolicyCheckApp `json:"apps"`
}

PolicyCheckResult is the body of POST /api/v1/deploy-policies/check.

type PolicyDocument added in v0.2.0

type PolicyDocument struct {
	Statement []PolicyStatement `json:"Statement"`
}

PolicyDocument is a policy body, typed so tool output schemas stay exact.

type PolicyLimits added in v0.2.0

type PolicyLimits struct {
	MaxHeaderRules    int          `json:"max_header_rules"`
	MaxForwarders     int          `json:"max_forwarders"`
	MaxCacheRules     int          `json:"max_cache_rules"`
	MaxRegexLen       int          `json:"max_regex_len"`
	MaxHeaderValueLen int          `json:"max_header_value_len"`
	CacheMaxObject    int64        `json:"cache_max_object_bytes"`
	CacheTotalBytes   int64        `json:"cache_total_bytes"`
	ForwardTimeoutSec int          `json:"forward_timeout_seconds"`
	Shield            ShieldLimits `json:"shield"`
}

PolicyLimits are the instance caps for traffic controls.

type PolicyPreviewHops added in v0.2.0

type PolicyPreviewHops struct {
	URL   string              `json:"url"`
	Hops  []trafficpolicy.Hop `json:"hops"`
	Error string              `json:"error,omitempty"`
}

PolicyPreviewHops is one sample URL's redirect chain.

type PolicyPreviewRequest added in v0.2.0

type PolicyPreviewRequest struct {
	Policy          *trafficpolicy.Policy `json:"policy,omitempty"`
	Method          string                `json:"method,omitempty"`
	Path            string                `json:"path,omitempty"`
	URLs            []string              `json:"urls,omitempty"`
	CanonicalPreset string                `json:"canonical_preset,omitempty"`
}

PolicyPreviewRequest overlays draft sections and asks what happens to one request and to sample URLs.

type PolicyPreviewResponse added in v0.2.0

type PolicyPreviewResponse struct {
	Steps  []trafficpolicy.Step       `json:"steps"`
	Hops   []PolicyPreviewHops        `json:"hops,omitempty"`
	Errors []trafficpolicy.FieldError `json:"errors,omitempty"`
}

PolicyPreviewResponse is POST .../policies/preview's result.

type PolicyRequest

type PolicyRequest struct {
	Name        string          `json:"name"`
	Description string          `json:"description,omitempty"`
	Document    json.RawMessage `json:"document"`
}

PolicyRequest mirrors internal/api's policyRequest, the body for both CreatePolicy and UpdatePolicy.

type PolicyResource

type PolicyResource struct {
	ID          string          `json:"id"`
	Name        string          `json:"name"`
	Description string          `json:"description"`
	Document    json.RawMessage `json:"document"`
	CreatedAt   time.Time       `json:"created_at"`
	UpdatedAt   time.Time       `json:"updated_at"`
}

PolicyResource mirrors internal/api's policyResource (internal/api/iam_handlers.go).

type PolicyStatement added in v0.2.0

type PolicyStatement struct {
	Effect   string   `json:"Effect"`
	Action   []string `json:"Action"`
	Resource []string `json:"Resource"`
}

PolicyStatement is one Allow or Deny rule of a policy document.

type PolicyTemplate added in v0.2.0

type PolicyTemplate struct {
	ID          string                `json:"id"`
	Name        string                `json:"name"`
	Description string                `json:"description"`
	Params      []PolicyTemplateParam `json:"params"`
	Document    PolicyDocument        `json:"document"`
}

PolicyTemplate mirrors internal/api's policyTemplateResource.

type PolicyTemplateList added in v0.2.0

type PolicyTemplateList struct {
	Version   int              `json:"version"`
	Templates []PolicyTemplate `json:"templates"`
}

PolicyTemplateList mirrors internal/api's policyTemplateListResponse.

type PolicyTemplateParam added in v0.2.0

type PolicyTemplateParam struct {
	Name        string `json:"name"`
	Description string `json:"description"`
	Required    bool   `json:"required"`
}

PolicyTemplateParam mirrors internal/api's policyTemplateParam.

type PolicyViolation

type PolicyViolation struct {
	Rule       string `json:"rule"`
	Code       string `json:"code"`
	Mode       string `json:"mode"`
	Message    string `json:"message"`
	NextAction string `json:"next_action"`
}

PolicyViolation mirrors internal/policy.Violation.

type PortHolder added in v0.2.0

type PortHolder struct {
	Container string `json:"container"`
	Image     string `json:"image"`
}

PortHolder is a container already publishing a host port.

type PortStream added in v0.2.0

type PortStream struct {
	ID             string       `json:"id"`
	Protocol       string       `json:"protocol"`
	HostPort       int          `json:"host_port"`
	ContainerPort  int          `json:"container_port"`
	Target         string       `json:"target"`
	OpenToAll      bool         `json:"open_to_all"`
	AllowedSources []string     `json:"allowed_sources"`
	Conflicts      []string     `json:"conflicts"`
	Holders        []PortHolder `json:"holders"`
}

PortStream is one of the app's raw TCP/UDP streams.

type PostureCounts added in v0.2.0

type PostureCounts struct {
	Critical int `json:"critical"`
	High     int `json:"high"`
	Medium   int `json:"medium"`
	Low      int `json:"low"`
	Unknown  int `json:"unknown"`
	Passing  int `json:"passing"`
}

PostureCounts mirrors internal/api's postureCounts.

type PostureFix added in v0.2.0

type PostureFix struct {
	Kind   string            `json:"kind"`
	Link   string            `json:"link,omitempty"`
	Action string            `json:"action,omitempty"`
	Params map[string]string `json:"params,omitempty"`
	CLI    string            `json:"cli,omitempty"`
}

PostureFix mirrors internal/api's postureFix: a dashboard link, a named one-click action, and an optional CLI command without the program name.

type PostureItem added in v0.2.0

type PostureItem struct {
	ID       string      `json:"id"`
	Severity string      `json:"severity"`
	Status   string      `json:"status"`
	Count    int         `json:"count"`
	Subjects []string    `json:"subjects,omitempty"`
	Detail   string      `json:"detail,omitempty"`
	Fix      *PostureFix `json:"fix,omitempty"`
}

PostureItem mirrors internal/api's postureItem.

type Preferences

type Preferences struct {
	Timezone    string `json:"timezone"`
	Language    string `json:"language"`
	Theme       string `json:"theme"`
	LandingPage string `json:"landing_page"`
	Gravatar    bool   `json:"gravatar"`
}

Preferences mirrors internal/api's preferencesResource.

type PreflightCheck added in v0.2.0

type PreflightCheck struct {
	ID     string `json:"id"`
	Name   string `json:"name"`
	Status string `json:"status"`
	Reason string `json:"reason"`
	Fix    string `json:"fix,omitempty"`
}

PreflightCheck is one preflight result.

type PreflightDisk added in v0.2.0

type PreflightDisk struct {
	Status        string `json:"status"`
	RequiredBytes int64  `json:"required_bytes"`
	FreeBytes     *int64 `json:"free_bytes"`
	Message       string `json:"message"`
}

PreflightDisk mirrors internal/models' PreflightDisk.

type PreflightFile added in v0.2.0

type PreflightFile struct {
	Name  string `json:"name"`
	Bytes int64  `json:"bytes"`
}

PreflightFile mirrors internal/models' PreflightFile.

type PreflightNode added in v0.2.0

type PreflightNode struct {
	NodeID         string `json:"node_id"`
	GPUPresent     bool   `json:"gpu_present"`
	VRAMTotalBytes *int64 `json:"vram_total_bytes"`
	VRAMFreeBytes  *int64 `json:"vram_free_bytes"`
	DiskFreeBytes  *int64 `json:"disk_free_bytes"`
	DiskTotalBytes *int64 `json:"disk_total_bytes"`
}

PreflightNode mirrors internal/models' PreflightNode. Nil is unknown.

type PreflightQuant added in v0.2.0

type PreflightQuant struct {
	Name        string   `json:"name"`
	Bytes       int64    `json:"bytes"`
	Files       []string `json:"files"`
	Fit         string   `json:"fit"`
	Recommended bool     `json:"recommended"`
}

PreflightQuant mirrors internal/models' Quant.

type PreflightReport added in v0.2.0

type PreflightReport struct {
	Status string           `json:"status"`
	Checks []PreflightCheck `json:"checks"`
}

PreflightReport mirrors internal/preflight.Report.

type PreflightSelection added in v0.2.0

type PreflightSelection struct {
	Label string `json:"label"`
	Bytes int64  `json:"bytes"`
	Fit   string `json:"fit"`
}

PreflightSelection mirrors internal/models' PreflightSelection.

type PreviewDatabaseIsolationResource added in v0.2.0

type PreviewDatabaseIsolationResource struct {
	SourceKey    string `json:"source_key"`
	DatabaseName string `json:"database_name"`
	RoleName     string `json:"role_name"`
	Isolated     bool   `json:"isolated"`
	Status       string `json:"status"`
	StatusReason string `json:"status_reason,omitempty"`
	CreatedAt    string `json:"created_at"`
	UpdatedAt    string `json:"updated_at"`
}

PreviewDatabaseIsolationResource mirrors internal/api's previewDatabaseIsolationResource (preview_environments_handlers.go). The role's password is never included here.

type PreviewEnvironmentResource

type PreviewEnvironmentResource struct {
	AppName      string `json:"app_name"`
	PRNumber     int    `json:"pr_number"`
	PreviewAppID string `json:"preview_app_id"`
	Branch       string `json:"branch"`
	HeadSHA      string `json:"head_sha"`
	Domain       string `json:"domain,omitempty"`
	Status       string `json:"status"`
	StatusReason string `json:"status_reason,omitempty"`
	CreatedAt    string `json:"created_at"`
	UpdatedAt    string `json:"updated_at"`
	Stale        bool   `json:"stale"`
	ExpiresAt    string `json:"expires_at,omitempty"`
	Extended     bool   `json:"extended"`
	IsFork       bool   `json:"is_fork"`
	HeadRepo     string `json:"head_repo,omitempty"`
	// EphemeralDatabases mirrors internal/api's own EphemeralDatabases
	// field: every disposable, preview-scoped database instance
	// provisioned for this preview (spec.Database.EphemeralInPreviews),
	// empty when none were declared or none opted in.
	EphemeralDatabases []PreviewEphemeralDatabaseResource `json:"ephemeral_databases,omitempty"`
	// DatabaseIsolations mirrors internal/api's own DatabaseIsolations
	// field: every isolated Postgres role provisioned on an existing
	// database for this preview (spec.Database.IsolatedInPreviews).
	DatabaseIsolations []PreviewDatabaseIsolationResource `json:"database_isolations,omitempty"`
}

PreviewEnvironmentResource mirrors internal/api's previewEnvironmentResource (internal/api/preview_environments_handlers.go).

type PreviewEphemeralDatabaseResource added in v0.2.0

type PreviewEphemeralDatabaseResource struct {
	SourceKey    string           `json:"source_key"`
	DatabaseName string           `json:"database_name"`
	Engine       string           `json:"engine"`
	Version      string           `json:"version"`
	Status       string           `json:"status"`
	StatusReason string           `json:"status_reason,omitempty"`
	Ready        AppStatusSummary `json:"ready"`
	CreatedAt    string           `json:"created_at"`
	UpdatedAt    string           `json:"updated_at"`
}

PreviewEphemeralDatabaseResource mirrors internal/api's previewEphemeralDatabaseResource (preview_environments_handlers.go). Ready reuses AppStatusSummary's exact shape: it's computed the same way, from the same database.Controller reconcile conditions GET /api/v1/databases already summarizes per database.

type PreviewLimitsResource added in v0.2.0

type PreviewLimitsResource struct {
	MaxPerApp int `json:"max_per_app"`
	MaxTotal  int `json:"max_total"`
	LiveTotal int `json:"live_total"`
}

PreviewLimitsResource mirrors internal/api's previewLimitsResource.

type PreviewPolicyResource added in v0.2.0

type PreviewPolicyResource struct {
	OnLimit           string `json:"on_limit"`
	AllowForkPreviews bool   `json:"allow_fork_previews"`
	TTLHours          int    `json:"ttl_hours"`
	EffectiveTTLHours int    `json:"effective_ttl_hours"`
	MaxPerApp         int    `json:"max_per_app"`
	LiveCount         int    `json:"live_count"`
	MaxTotal          int    `json:"max_total"`
	LiveTotal         int    `json:"live_total"`

	MaxPreviews               int     `json:"max_previews"`
	MemoryLimit               string  `json:"memory_limit"`
	CPULimit                  float64 `json:"cpu_limit"`
	EffectiveMemory           string  `json:"effective_memory"`
	EffectiveCPU              float64 `json:"effective_cpu"`
	IdleSleepMinutes          int     `json:"idle_sleep_minutes"`
	EffectiveIdleSleepMinutes int     `json:"effective_idle_sleep_minutes"`
	DatabaseStrategy          string  `json:"database_strategy"`
	SeedDatabase              string  `json:"seed_database"`
	AllowForkSecrets          bool    `json:"allow_fork_secrets"`
	GateBasicAuth             bool    `json:"gate_basic_auth"`
	GateUsername              string  `json:"gate_username"`
	GatePasswordSet           bool    `json:"gate_password_set"`
	AllowIndexing             bool    `json:"allow_indexing"`
}

PreviewPolicyResource mirrors internal/api's previewPolicyResource.

type PreviewPruneResult added in v0.2.0

type PreviewPruneResult struct {
	Removed    int   `json:"removed"`
	FreedBytes int64 `json:"freed_bytes"`
}

PreviewPruneResult is POST /api/v1/apps/{name}/preview/prune's body.

type PreviewRecord added in v0.2.0

type PreviewRecord struct {
	DeploymentID string    `json:"deployment_id"`
	Status       string    `json:"status"`
	Reason       string    `json:"reason,omitempty"`
	Detail       string    `json:"detail,omitempty"`
	HTTPStatus   int       `json:"http_status,omitempty"`
	Path         string    `json:"path"`
	Source       string    `json:"source,omitempty"`
	Bytes        int64     `json:"bytes"`
	CapturedAt   time.Time `json:"captured_at"`
	ImageURL     string    `json:"image_url,omitempty"`
}

PreviewRecord is one deployment's preview outcome.

type PreviewSettingsRequest added in v0.2.0

type PreviewSettingsRequest struct {
	Mode    *string `json:"mode,omitempty"`
	Enabled *bool   `json:"enabled,omitempty"`
	Path    *string `json:"path,omitempty"`
	WaitMS  *int    `json:"wait_ms,omitempty"`
}

PreviewSettingsRequest is PUT /api/v1/apps/{name}/preview's body; nil fields are left unchanged.

type PreviewSettingsResource

type PreviewSettingsResource struct {
	Enabled        bool `json:"enabled"`
	PostPRComments bool `json:"post_pr_comments"`
}

PreviewSettingsResource mirrors internal/api's previewSettingsResource: the resulting state of both preview-settings toggles after a SetPreviewSettingsRequest is applied.

type PreviewStatus added in v0.2.0

type PreviewStatus struct {
	App           string `json:"app"`
	Enabled       bool   `json:"enabled"`
	Mode          string `json:"mode"`
	DefaultMode   string `json:"default_mode"`
	Path          string `json:"path"`
	WaitMS        int    `json:"wait_ms"`
	ServerEnabled bool   `json:"server_enabled"`
	Capturing     bool   `json:"capturing"`
	Image         string `json:"image"`
	BrowserImage  *struct {
		Ref        string     `json:"ref"`
		LastUsedAt *time.Time `json:"last_used_at,omitempty"`
	} `json:"browser_image,omitempty"`
	KeepPerApp int   `json:"keep_per_app"`
	TTLDays    int   `json:"ttl_days"`
	MaxTotalMB int64 `json:"max_total_mb"`
	Storage    struct {
		AppBytes   int64 `json:"app_bytes"`
		AppCount   int   `json:"app_count"`
		TotalBytes int64 `json:"total_bytes"`
		TotalCount int   `json:"total_count"`
	} `json:"storage"`
	Latest *PreviewRecord `json:"latest,omitempty"`
}

PreviewStatus is GET /api/v1/apps/{name}/preview's body.

type PreviewsOverview added in v0.2.0

type PreviewsOverview struct {
	Limits   PreviewLimitsResource        `json:"limits"`
	PerApp   map[string]int               `json:"live_per_app"`
	Previews []PreviewEnvironmentResource `json:"previews"`
}

PreviewsOverview is GET /api/v1/previews's body.

type PrivateNetworkChange

type PrivateNetworkChange struct {
	ID       string `json:"id,omitempty"`
	Name     string `json:"name,omitempty"`
	Deleted  bool   `json:"deleted,omitempty"`
	Enforced bool   `json:"enforced"`
}

PrivateNetworkChange is the small ack body of a mutation.

type PrivateNetworkList

type PrivateNetworkList struct {
	Networks []PrivateNetworkResource     `json:"networks"`
	Rules    []PrivateNetworkRuleResource `json:"rules"`
}

PrivateNetworkList is the GET /api/v1/private-networks body.

type PrivateNetworkMap

type PrivateNetworkMap struct {
	Apps  []PrivateNetworkMapApp  `json:"apps"`
	Edges []PrivateNetworkMapEdge `json:"edges"`
}

PrivateNetworkMap is the GET /api/v1/private-networks/map body.

type PrivateNetworkMapApp

type PrivateNetworkMapApp struct {
	ID        string   `json:"id"`
	Name      string   `json:"name"`
	ProjectID string   `json:"project_id,omitempty"`
	NodeID    string   `json:"node_id,omitempty"`
	Networks  []string `json:"networks"`
}

PrivateNetworkMapApp is a graph node.

type PrivateNetworkMapEdge

type PrivateNetworkMapEdge struct {
	A         string `json:"a"`
	B         string `json:"b"`
	Allowed   bool   `json:"allowed"`
	Via       string `json:"via,omitempty"`
	ViaName   string `json:"via_name,omitempty"`
	RuleID    string `json:"rule_id,omitempty"`
	CrossNode bool   `json:"cross_node"`
	Observed  string `json:"observed"`
	Fix       string `json:"fix,omitempty"`
}

PrivateNetworkMapEdge is a graph edge with its verdict and fix.

type PrivateNetworkRequest

type PrivateNetworkRequest struct {
	Name        string   `json:"name,omitempty"`
	ProjectID   string   `json:"project_id,omitempty"`
	DefaultDeny bool     `json:"default_deny"`
	Members     []string `json:"members"`
}

PrivateNetworkRequest is the create and update body.

type PrivateNetworkResource

type PrivateNetworkResource struct {
	ID          string   `json:"id"`
	Name        string   `json:"name"`
	ProjectID   string   `json:"project_id,omitempty"`
	DefaultDeny bool     `json:"default_deny"`
	Members     []string `json:"members"`
	CreatedAt   string   `json:"created_at"`
}

PrivateNetworkResource mirrors one entry of GET /api/v1/private-networks.

type PrivateNetworkRuleRequest

type PrivateNetworkRuleRequest struct {
	From string `json:"from"`
	To   string `json:"to"`
	Note string `json:"note,omitempty"`
}

PrivateNetworkRuleRequest is the allow rule body.

type PrivateNetworkRuleResource

type PrivateNetworkRuleResource struct {
	ID        string `json:"id"`
	From      string `json:"from"`
	To        string `json:"to"`
	Note      string `json:"note,omitempty"`
	CreatedAt string `json:"created_at"`
}

PrivateNetworkRuleResource is one allow rule between two apps.

type ProbeAttempt added in v0.2.0

type ProbeAttempt struct {
	ID         int64  `json:"id"`
	Target     string `json:"target"`
	Success    bool   `json:"success"`
	StatusCode int    `json:"status_code,omitempty"`
	ExitCode   int    `json:"exit_code,omitempty"`
	Error      string `json:"error,omitempty"`
	LatencyMS  int64  `json:"latency_ms"`
	ProbedAt   string `json:"probed_at"`
}

ProbeAttempt is one readiness-probe attempt made during a deploy cutover.

type ProfileSummary

type ProfileSummary struct {
	Name   string
	APIURL string
}

ProfileSummary is ListProfiles' element type: a profile's name and API URL, deliberately never its token. See ListProfiles.

func ListProfiles

func ListProfiles(prog string) ([]ProfileSummary, error)

ListProfiles returns every profile section configured in prog's credentials file, in the order they first appear, each with its API URL but never its token: see ProfileSummary. Returns a nil slice, no error, for a missing file, the same "nothing configured" shape ReadCredentialsFile's own doc comment describes.

type ProjectLifecycleResult added in v0.2.0

type ProjectLifecycleResult struct {
	SucceededApps      []string `json:"succeeded_apps"`
	SucceededDatabases []string `json:"succeeded_databases"`
	FailedApps         []string `json:"failed_apps,omitempty"`
	FailedDatabases    []string `json:"failed_databases,omitempty"`
}

ProjectLifecycleResult mirrors internal/api's projectLifecycleResult: the response for StopProject/StartProject, which apps and databases in the project succeeded or failed the requested state change.

type ProjectResource

type ProjectResource struct {
	ID        string `json:"id"`
	Name      string `json:"name"`
	CreatedAt string `json:"created_at"`
	OrgID     string `json:"org_id,omitempty"`
}

ProjectResource mirrors internal/api's projectResource (internal/api/projects.go). OrgID is empty when the project isn't filed under any organization.

type ProjectRestartResponse added in v0.2.0

type ProjectRestartResponse struct {
	RestartedCount int      `json:"restarted_count"`
	Apps           []string `json:"apps"`
	Failed         []string `json:"failed,omitempty"`
}

ProjectRestartResponse mirrors internal/api's projectRestartResponse (internal/api/project_restart.go): which apps a bulk restart succeeded or failed on.

type ProjectTopologyEdgeResource added in v0.2.0

type ProjectTopologyEdgeResource struct {
	From string `json:"from"`
	To   string `json:"to"`
	Kind string `json:"kind"`
}

ProjectTopologyEdgeResource mirrors internal/api's topologyEdge.

type ProjectTopologyNodeResource added in v0.2.0

type ProjectTopologyNodeResource struct {
	ID     string                     `json:"id"`
	Kind   string                     `json:"kind"`
	Label  string                     `json:"label"`
	Status *ProjectTopologyNodeStatus `json:"status,omitempty"`
}

ProjectTopologyNodeResource mirrors internal/api's topologyNode.

type ProjectTopologyNodeStatus added in v0.2.0

type ProjectTopologyNodeStatus struct {
	Label   string `json:"label"`
	Variant string `json:"variant"`
}

ProjectTopologyNodeStatus mirrors internal/api's appStatusSummary.

type ProjectTopologyResource added in v0.2.0

type ProjectTopologyResource struct {
	Nodes []ProjectTopologyNodeResource `json:"nodes"`
	Edges []ProjectTopologyEdgeResource `json:"edges"`
}

ProjectTopologyResource mirrors internal/api's topologyGraph, GET /api/v1/projects/{id}/topology's response body.

type PromoteAppRequest

type PromoteAppRequest struct {
	To         string `json:"to"`
	Target     string `json:"target,omitempty"`
	Confirm    bool   `json:"confirm,omitempty"`
	IncludeEnv bool   `json:"include_env,omitempty"`
	Force      bool   `json:"force,omitempty"`
	// OverrideFreeze and OverrideReason bypass an active deploy freeze window.
	OverrideFreeze bool   `json:"override_freeze,omitempty"`
	OverrideReason string `json:"override_reason,omitempty"`
}

PromoteAppRequest mirrors internal/api's promoteTriggerRequest: POST /api/v1/apps/{name}/promote's body. Target is optional, the same "auto-discover the sole candidate, or disambiguate" contract PromotePreview's own Target query param has.

type PromoteDiff added in v0.2.0

type PromoteDiff struct {
	Image        *DeployCompareField `json:"image,omitempty"`
	Replicas     *DeployCompareField `json:"replicas,omitempty"`
	Resources    *DeployCompareField `json:"resources,omitempty"`
	Health       *DeployCompareField `json:"health,omitempty"`
	EnvAdded     []string            `json:"env_added"`
	EnvRemoved   []string            `json:"env_removed"`
	EnvChanged   []string            `json:"env_changed"`
	SecretsAdded []string            `json:"secret_keys_added"`
	SecretsGone  []string            `json:"secret_keys_removed"`
	Untouched    []string            `json:"untouched"`
}

PromoteDiff mirrors internal/api's promoteDiff. Env values are never sent.

type PromotePreviewResource

type PromotePreviewResource struct {
	SourceApp           string               `json:"source_app"`
	TargetApp           string               `json:"target_app"`
	Environment         EnvironmentResource  `json:"environment"`
	From                PromotePreviewSide   `json:"from"`
	To                  PromotePreviewSide   `json:"to"`
	Changes             []DeployCompareField `json:"changes"`
	UnsnapshottedFields []string             `json:"unsnapshotted_fields"`
	Note                string               `json:"note"`
	Diff                PromoteDiff          `json:"diff"`
	Blockers            []string             `json:"blockers"`
	NeedsConfirmation   bool                 `json:"needs_confirmation"`
	Frozen              bool                 `json:"frozen"`
	FreezeReason        string               `json:"freeze_reason,omitempty"`
}

PromotePreviewResource mirrors internal/api's promotePreviewResource, GET /api/v1/apps/{name}/promote/preview's response.

type PromotePreviewSide

type PromotePreviewSide struct {
	AppName     string `json:"app_name"`
	Image       string `json:"image"`
	ImageDigest string `json:"image_digest,omitempty"`
}

PromotePreviewSide mirrors internal/api's promotePreviewSide (internal/api/promote.go): one side of a promotion preview, always live desired state (there is no DeployID/CommitSHA/Status to show).

type ProtectAllRequest added in v0.2.0

type ProtectAllRequest struct {
	TargetID       string        `json:"target_id"`
	Schedule       string        `json:"schedule,omitempty"`
	Retain         *int          `json:"retain,omitempty"`
	RetainDays     *int          `json:"retain_days,omitempty"`
	IncludeScratch bool          `json:"include_scratch,omitempty"`
	Only           []ProtectItem `json:"only,omitempty"`
	Apply          bool          `json:"apply"`
}

ProtectAllRequest is POST /api/v1/backups/protect-all's body.

type ProtectAllResponse added in v0.2.0

type ProtectAllResponse struct {
	Applied    bool          `json:"applied"`
	TargetID   string        `json:"target_id"`
	Schedule   string        `json:"schedule"`
	Retain     int           `json:"retain"`
	RetainDays int           `json:"retain_days"`
	Plan       []ProtectItem `json:"plan"`
	Done       []ProtectItem `json:"done,omitempty"`
	Failed     []struct {
		ProtectItem
		Error string `json:"error"`
	} `json:"failed,omitempty"`
}

ProtectAllResponse mirrors internal/api's protectAllResponse.

type ProtectItem added in v0.2.0

type ProtectItem struct {
	Kind    string `json:"kind"`
	AppName string `json:"app_name,omitempty"`
	Name    string `json:"name"`
	Scratch bool   `json:"scratch,omitempty"`
}

ProtectItem names one resource in a protect-all plan.

type ProxyCertificate added in v0.2.0

type ProxyCertificate struct {
	Issuer   string `json:"issuer"`
	NotAfter string `json:"not_after"`
	Valid    bool   `json:"valid"`
}

ProxyCertificate is the certificate the proxy served for a domain.

type ProxyDetection added in v0.2.0

type ProxyDetection struct {
	Kind            string   `json:"kind"`
	Container       string   `json:"container"`
	Image           string   `json:"image"`
	PublishedPorts  []int    `json:"published_ports"`
	DynamicDir      string   `json:"dynamic_dir"`
	EntrypointHTTP  string   `json:"entrypoint_http"`
	EntrypointHTTPS string   `json:"entrypoint_https"`
	CertResolver    string   `json:"cert_resolver"`
	UpstreamHost    string   `json:"upstream_host"`
	Complete        bool     `json:"complete"`
	Missing         []string `json:"missing"`
}

ProxyDetection is what was read from the container holding ports 80/443.

type ProxyDomain added in v0.2.0

type ProxyDomain struct {
	Domain      string            `json:"domain"`
	Target      string            `json:"target"`
	App         string            `json:"app"`
	File        string            `json:"file"`
	State       string            `json:"state"`
	ProxyLoaded *bool             `json:"proxy_loaded"`
	Reachable   bool              `json:"reachable"`
	Certificate *ProxyCertificate `json:"certificate"`
	LastError   string            `json:"last_error"`
	CheckedAt   string            `json:"checked_at"`
}

ProxyDomain is one managed route.

type ProxyIngress added in v0.2.0

type ProxyIngress struct {
	HTTPPort              int    `json:"http_port"`
	HTTPSPort             int    `json:"https_port"`
	DashboardAddr         string `json:"dashboard_addr"`
	TLSTerminatedUpstream bool   `json:"tls_terminated_upstream"`
	PublicHTTPSPort       int    `json:"public_https_port"`
}

ProxyIngress is how this instance's ingress is set up for the proxy.

type ProxyIntegration added in v0.2.0

type ProxyIntegration struct {
	Detected ProxyDetection           `json:"detected"`
	Settings ProxyIntegrationSettings `json:"settings"`
	Ingress  ProxyIngress             `json:"ingress"`
	Domains  []ProxyDomain            `json:"domains"`
	Steps    []ProxyStep              `json:"steps"`
	// DryRun and Changes are set by setup only.
	DryRun  bool     `json:"dry_run,omitempty"`
	Changes []string `json:"changes,omitempty"`
}

ProxyIntegration is GET /api/v1/system/proxy-integration.

type ProxyIntegrationSettings added in v0.2.0

type ProxyIntegrationSettings struct {
	Integration     string `json:"integration"`
	DynamicDir      string `json:"dynamic_dir"`
	EntrypointHTTP  string `json:"entrypoint_http"`
	EntrypointHTTPS string `json:"entrypoint_https"`
	CertResolver    string `json:"cert_resolver"`
	UpstreamHost    string `json:"upstream_host"`
}

ProxyIntegrationSettings is PUT /api/v1/settings/proxy-integration's body.

type ProxySetupRequest added in v0.2.0

type ProxySetupRequest struct {
	Confirm    bool   `json:"confirm"`
	DynamicDir string `json:"dynamic_dir,omitempty"`
}

ProxySetupRequest is POST /api/v1/system/proxy-integration/setup's body.

type ProxyStep added in v0.2.0

type ProxyStep struct {
	ID     string `json:"id"`
	State  string `json:"state"`
	Detail string `json:"detail"`
}

ProxyStep is one item of the setup checklist.

type PurgeAuditLogResult

type PurgeAuditLogResult struct {
	Deleted int64 `json:"deleted"`
}

PurgeAuditLogResult is POST /api/v1/audit-log/purge's response shape (internal/api/audit_retention.go's purgeAuditLogResponse).

type PurgeCacheRequest added in v0.2.0

type PurgeCacheRequest struct {
	Scope string `json:"scope"`
	Value string `json:"value,omitempty"`
}

PurgeCacheRequest selects what to purge: scope url, prefix or all.

type PurgeCacheResponse added in v0.2.0

type PurgeCacheResponse struct {
	Domain string `json:"domain"`
	Purged int    `json:"purged"`
}

PurgeCacheResponse reports how many entries were removed.

type PushSubscriptionResource added in v0.2.0

type PushSubscriptionResource struct {
	ID        string `json:"id"`
	UserAgent string `json:"user_agent"`
	CreatedAt string `json:"created_at"`
}

PushSubscriptionResource mirrors internal/api's pushSubscriptionResource (internal/api/push_subscriptions.go): one browser registered for the "webpush" notification-channel kind.

type PutDeployFreezeRequest added in v0.2.0

type PutDeployFreezeRequest struct {
	Windows []FreezeWindowResource `json:"windows"`
}

PutDeployFreezeRequest is PUT .../deploy-freeze's body.

type QuietHoursResource

type QuietHoursResource struct {
	Start    string `json:"start"`
	End      string `json:"end"`
	Timezone string `json:"timezone"`
	Enabled  bool   `json:"enabled"`
}

QuietHoursResource is a channel's quiet-hours window.

type QuotaLimits

type QuotaLimits struct {
	MaxApps      int64   `json:"max_apps"`
	MaxDatabases int64   `json:"max_databases"`
	MaxMemoryMB  int64   `json:"max_memory_mb"`
	MaxCPU       float64 `json:"max_cpu"`
	MaxPreviews  int64   `json:"max_previews"`
}

QuotaLimits mirrors internal/api's quotaLimitsResource. 0 is unlimited.

type QuotaResource

type QuotaResource struct {
	Scope       string      `json:"scope"`
	ScopeID     string      `json:"scope_id"`
	Name        string      `json:"name"`
	Limits      QuotaLimits `json:"limits"`
	Effective   QuotaLimits `json:"effective_limits"`
	Usage       QuotaUsage  `json:"usage"`
	WarnPercent int         `json:"warn_percent"`
	CanManage   bool        `json:"can_manage"`
}

QuotaResource mirrors internal/api's quotaResource.

type QuotaUsage

type QuotaUsage struct {
	Apps      int64   `json:"apps"`
	Databases int64   `json:"databases"`
	MemoryMB  int64   `json:"memory_mb"`
	CPU       float64 `json:"cpu"`
	Previews  int64   `json:"previews"`
}

QuotaUsage mirrors internal/api's quotaUsageResource.

type ReachCounts

type ReachCounts struct {
	High   int `json:"high"`
	Medium int `json:"medium"`
	Low    int `json:"low"`
	Info   int `json:"info"`
}

ReachCounts mirrors internal/exposure's ReachCounts.

type ReachEndpoint

type ReachEndpoint struct {
	Kind  string `json:"kind"`
	Value string `json:"value"`
	Class string `json:"class,omitempty"`
}

ReachEndpoint mirrors internal/exposure's ReachEndpoint.

type ReachFinding

type ReachFinding struct {
	ID       string            `json:"id"`
	Kind     string            `json:"kind"`
	Severity string            `json:"severity"`
	Subject  ReachRef          `json:"subject"`
	Node     string            `json:"node,omitempty"`
	Port     int               `json:"port,omitempty"`
	Params   map[string]string `json:"params,omitempty"`
	Fix      *ReachFix         `json:"fix,omitempty"`
}

ReachFinding mirrors internal/exposure's ReachFinding.

type ReachFix

type ReachFix struct {
	Kind     string            `json:"kind"`
	Method   string            `json:"method,omitempty"`
	Path     string            `json:"path,omitempty"`
	Body     map[string]string `json:"body,omitempty"`
	Link     string            `json:"link,omitempty"`
	Restarts bool              `json:"restarts,omitempty"`
}

ReachFix mirrors internal/exposure's ReachFix.

type ReachRef

type ReachRef struct {
	Type string `json:"type"`
	Name string `json:"name,omitempty"`
}

ReachRef mirrors internal/exposure's ReachRef.

type ReachReport

type ReachReport struct {
	GeneratedAt     string         `json:"generated_at"`
	Counts          ReachCounts    `json:"counts"`
	Subjects        []ReachSubject `json:"subjects"`
	Findings        []ReachFinding `json:"findings"`
	RulesReadable   bool           `json:"rules_readable"`
	RestrictedPorts int            `json:"restricted_ports"`
}

ReachReport mirrors internal/exposure's ReachReport.

type ReachSubject

type ReachSubject struct {
	Type      string          `json:"type"`
	Name      string          `json:"name"`
	Endpoints []ReachEndpoint `json:"endpoints"`
	Findings  int             `json:"findings"`
}

ReachSubject mirrors internal/exposure's ReachSubject.

type ReadinessCheck added in v0.2.0

type ReadinessCheck struct {
	ID     string `json:"id"`
	Name   string `json:"name"`
	Status string `json:"status"`
	Detail string `json:"detail"`
	Fix    string `json:"fix"`
}

ReadinessCheck is one server readiness check.

type RecentChange added in v0.2.0

type RecentChange struct {
	At          time.Time `json:"at"`
	Kind        string    `json:"kind"`
	Actor       string    `json:"actor"`
	Title       string    `json:"title"`
	Detail      string    `json:"detail,omitempty"`
	Keys        []string  `json:"keys,omitempty"`
	Ref         string    `json:"ref,omitempty"`
	LikelyCause bool      `json:"likely_cause,omitempty"`
}

RecentChange mirrors internal/changes.Change: one config, deploy or lifecycle change on an app. Keys are names only, never values.

type RecentChangesResource added in v0.2.0

type RecentChangesResource struct {
	App           string         `json:"app"`
	Since         time.Time      `json:"since"`
	Until         time.Time      `json:"until"`
	WindowSeconds int64          `json:"window_seconds"`
	Changes       []RecentChange `json:"changes"`
	Total         int            `json:"total"`
	Truncated     bool           `json:"truncated,omitempty"`
}

RecentChangesResource mirrors internal/changes.Result.

type ReclaimOrphanResponse added in v0.2.0

type ReclaimOrphanResponse struct {
	Removed        string `json:"removed"`
	ReclaimedBytes int64  `json:"reclaimed_bytes"`
}

ReclaimOrphanResponse mirrors internal/api's reclaimOrphanResponse.

type RecordedPlacement

type RecordedPlacement struct {
	Trigger   string            `json:"trigger"`
	DecidedAt time.Time         `json:"decided_at"`
	Decision  PlacementDecision `json:"decision"`
}

RecordedPlacement is a stored decision and what triggered it.

type RedirectDomainRow added in v0.2.0

type RedirectDomainRow struct {
	Domain      string                      `json:"domain"`
	Redirect    *trafficpolicy.HostRedirect `json:"redirect,omitempty"`
	Maintenance bool                        `json:"maintenance"`
	Wildcard    bool                        `json:"wildcard"`
}

RedirectDomainRow is one of the app's domains on the Redirects tab.

type RedirectEffective added in v0.2.0

type RedirectEffective struct {
	HandledBy             string `json:"handled_by"`
	Explanation           string `json:"explanation"`
	HTTPSPort             int    `json:"https_port"`
	TLSTerminatedUpstream bool   `json:"tls_terminated_upstream"`
	IngressHTTPRedirect   bool   `json:"ingress_http_redirect"`
}

RedirectEffective explains who redirects plain HTTP to HTTPS.

type RegistryCredentialResource

type RegistryCredentialResource struct {
	ID           string     `json:"id"`
	Name         string     `json:"name"`
	RegistryHost string     `json:"registry_host"`
	Username     string     `json:"username"`
	CreatedAt    string     `json:"created_at"`
	ExpiresAt    *time.Time `json:"expires_at,omitempty"`
	ExpiryStatus string     `json:"expiry_status,omitempty"`
}

RegistryCredentialResource mirrors internal/api's registryCredentialResource (internal/api/registry_credentials.go). No password field, the same write-only convention BackupTargetResource uses for its own credentials. ExpiresAt/ExpiryStatus are operator-set metadata, not something the platform infers from the credential itself; ExpiryStatus is "healthy"/"expiring_soon"/"expired", empty when no expiry was set.

type RegistryCredentialUsage

type RegistryCredentialUsage struct {
	Services []string `json:"services"`
}

RegistryCredentialUsage mirrors the registry credential usage response.

type RegistryRepositoriesResource added in v0.2.0

type RegistryRepositoriesResource struct {
	Repositories []string `json:"repositories"`
}

RegistryRepositoriesResource mirrors internal/api's registryRepositoriesResponse (internal/api/registry_catalog.go): GET /api/v1/registry/repositories's wire shape.

type RegistrySettingsResource

type RegistrySettingsResource struct {
	Enabled        bool   `json:"enabled"`
	Host           string `json:"host,omitempty"`
	Username       string `json:"username,omitempty"`
	HasCredentials bool   `json:"has_credentials"`
	Status         string `json:"status"`
	Message        string `json:"message,omitempty"`
	Password       string `json:"password,omitempty"`
}

RegistrySettingsResource mirrors internal/api's registrySettingsResource (internal/api/registry_settings.go): GET/PUT/DELETE /api/v1/settings/registry's wire shape. Password is write-once: it is only ever populated in the response to a PUT call that generates a fresh credential (the registry's first enable), empty every other time.

type RegistryTagsResource added in v0.2.0

type RegistryTagsResource struct {
	Repository string   `json:"repository"`
	Tags       []string `json:"tags"`
}

RegistryTagsResource mirrors internal/api's registryTagsResponse: GET /api/v1/registry/tags's wire shape.

type RejectDeployApprovalRequest added in v0.2.0

type RejectDeployApprovalRequest struct {
	Reason string `json:"reason,omitempty"`
}

RejectDeployApprovalRequest mirrors internal/api's rejectDeployApprovalRequest (POST .../deploy-approvals/{id}/reject).

type RejoinMeshResponse added in v0.2.0

type RejoinMeshResponse struct {
	NodeID    string `json:"node_id"`
	Requested bool   `json:"requested"`
}

RejoinMeshResponse mirrors internal/api's rejoinMeshResponse (POST /api/v1/nodes/{id}/mesh/rejoin).

type ReleaseHistory added in v0.2.0

type ReleaseHistory struct {
	CurrentVersion       string               `json:"current_version"`
	CurrentSchemaVersion *int                 `json:"current_schema_version"`
	Channel              string               `json:"channel"`
	View                 string               `json:"view"`
	Reachable            bool                 `json:"github_reachable"`
	Releases             []ReleaseHistoryItem `json:"releases"`
	RetainedOnly         []ReleaseHistoryItem `json:"retained_only"`
}

ReleaseHistory is GET /api/v1/updates/releases' response.

type ReleaseHistoryItem added in v0.2.0

type ReleaseHistoryItem struct {
	Version        string `json:"version"`
	URL            string `json:"url"`
	PublishedAt    string `json:"published_at"`
	Channel        string `json:"channel"`
	Running        bool   `json:"running"`
	Retained       bool   `json:"retained"`
	AssetName      string `json:"asset_name"`
	AssetAvailable bool   `json:"asset_available"`
	AssetSize      int64  `json:"asset_size"`
	Signed         bool   `json:"signed"`
	SchemaVersion  *int   `json:"schema_version"`
	SchemaSource   string `json:"schema_source"`
	Verdict        string `json:"verdict"`
	Notes          string `json:"notes"`
}

ReleaseHistoryItem is one release in GET /api/v1/updates/releases.

type ReleaseNoteEntry

type ReleaseNoteEntry struct {
	SHA     string `json:"sha"`
	Scope   string `json:"scope,omitempty"`
	Summary string `json:"summary"`
	Author  string `json:"author,omitempty"`
	URL     string `json:"url,omitempty"`
}

ReleaseNoteEntry is one commit line in a release notes group.

type ReleaseNoteGroup

type ReleaseNoteGroup struct {
	Key     string             `json:"key"`
	Title   string             `json:"title"`
	Entries []ReleaseNoteEntry `json:"entries"`
}

ReleaseNoteGroup is the commits of one conventional-commit type.

type ReleaseNotesResource

type ReleaseNotesResource struct {
	ServiceName string             `json:"service_name"`
	From        DeployCompareSide  `json:"from"`
	To          DeployCompareSide  `json:"to"`
	Commits     []GitCommitSummary `json:"commits"`
	Groups      []ReleaseNoteGroup `json:"groups"`
	Markdown    string             `json:"markdown"`
	Note        string             `json:"note,omitempty"`
}

ReleaseNotesResource mirrors GET /api/v1/apps/{name}/deploys/release-notes.

type RenewCertificateResource added in v0.2.0

type RenewCertificateResource struct {
	Domain               string `json:"domain"`
	HadStoredCertificate bool   `json:"had_stored_certificate"`
	Status               string `json:"status"`
}

RenewCertificateResource mirrors internal/api's renewCertificateResponse (internal/api/domain_tls_cert.go): POST .../cert/renew's response body.

type ReplayWebhookDeliveryResult

type ReplayWebhookDeliveryResult struct {
	Status  int    `json:"status"`
	Message string `json:"message"`
}

ReplayWebhookDeliveryResult mirrors internal/api's replayWebhookDeliveryResult: the status/message a replayed delivery's re-run processing produced.

type RepoBranchesResource added in v0.2.0

type RepoBranchesResource struct {
	Branches []string `json:"branches"`
}

RepoBranchesResource mirrors internal/api's gitBranchesResponse.

type RequestPointResource added in v0.2.0

type RequestPointResource struct {
	Timestamp      time.Time `json:"timestamp"`
	Requests       float64   `json:"requests"`
	RatePerSec     float64   `json:"rate_per_sec"`
	ErrorRate4xx   float64   `json:"error_rate_4xx"`
	ErrorRate5xx   float64   `json:"error_rate_5xx"`
	UpstreamErrors float64   `json:"upstream_errors"`
	P50Ms          float64   `json:"p50_ms"`
	P95Ms          float64   `json:"p95_ms"`
	P99Ms          float64   `json:"p99_ms"`
	BytesInPerSec  float64   `json:"bytes_in_per_sec"`
	BytesOutPerSec float64   `json:"bytes_out_per_sec"`
}

RequestPointResource mirrors internal/telemetry.RequestPoint.

type RequestSummaryResource added in v0.2.0

type RequestSummaryResource struct {
	WindowSeconds  float64 `json:"window_seconds"`
	HasTraffic     bool    `json:"has_traffic"`
	Requests       float64 `json:"requests"`
	RatePerSec     float64 `json:"rate_per_sec"`
	ErrorRate4xx   float64 `json:"error_rate_4xx"`
	ErrorRate5xx   float64 `json:"error_rate_5xx"`
	P95Ms          float64 `json:"p95_ms"`
	UpstreamErrors float64 `json:"upstream_errors"`
}

RequestSummaryResource mirrors internal/telemetry.RequestSummary.

type ResilienceReport

type ResilienceReport struct {
	Scenarios  []chaos.Info   `json:"scenarios"`
	Latest     []chaos.Result `json:"latest"`
	Unmeasured []string       `json:"not_yet_measured"`
}

ResilienceReport mirrors GET /api/v1/resilience.

type ResolveAIChatConfirmationRequest added in v0.2.0

type ResolveAIChatConfirmationRequest struct {
	Approve bool `json:"approve"`
}

ResolveAIChatConfirmationRequest mirrors internal/api's resolveAIChatConfirmationRequest: POST /api/v1/ai/sessions/{id}/confirmations/{confirmation_id}'s request body.

type ResolverResult added in v0.2.0

type ResolverResult struct {
	Name      string   `json:"name"`
	Addresses []string `json:"addresses,omitempty"`
	Error     string   `json:"error,omitempty"`
}

ResolverResult is what one resolver answered for a domain.

type ResourceHealthResource added in v0.2.0

type ResourceHealthResource struct {
	Kind                string                 `json:"kind"`
	AppName             string                 `json:"app_name,omitempty"`
	ResourceName        string                 `json:"resource_name"`
	TargetID            string                 `json:"target_id,omitempty"`
	Schedule            string                 `json:"schedule,omitempty"`
	NextRun             string                 `json:"next_run,omitempty"`
	BackupCount         int                    `json:"backup_count"`
	TotalBytes          int64                  `json:"total_bytes"`
	LastAttempt         *BackupSummaryResource `json:"last_attempt,omitempty"`
	LastBackup          *BackupSummaryResource `json:"last_backup,omitempty"`
	LastVerifiedRestore *DrillSummaryResource  `json:"last_verified_restore,omitempty"`
	LastDrill           *DrillSummaryResource  `json:"last_drill,omitempty"`
	Encrypted           bool                   `json:"encrypted"`
	State               string                 `json:"state"`
	StateReason         string                 `json:"state_reason,omitempty"`
	ProtectionLevel     string                 `json:"protection_level,omitempty"`
	Warning             string                 `json:"warning,omitempty"`
}

ResourceHealthResource mirrors internal/api's resourceHealthResource.

type ResourceRecommendationResource

type ResourceRecommendationResource struct {
	ServiceName    string                          `json:"service_name"`
	LookbackWindow string                          `json:"lookback_window"`
	LookbackLabel  string                          `json:"lookback_label,omitempty"`
	Memory         DimensionRecommendationResource `json:"memory"`
	CPU            DimensionRecommendationResource `json:"cpu"`
	OOMDetectedAt  string                          `json:"oom_detected_at,omitempty"`
	OOMExcerpt     string                          `json:"oom_excerpt,omitempty"`
}

ResourceRecommendationResource mirrors internal/api's resourceRecommendationResource: the shared response shape for both GET /api/v1/apps/{name}/resource-recommendation (internal/api/resource_recommendation.go) and GET /api/v1/databases/{name}/resource-recommendation (internal/api/database_resource_recommendation.go), a deterministic memory/CPU right-sizing suggestion synthesized from internal/rightsizing over the resource's own historical usage samples, never from an external model, and never applied automatically. ServiceName holds the app or database name either way.

type RestoreHistoryResource

type RestoreHistoryResource struct {
	ID              string `json:"id"`
	DatabaseName    string `json:"database_name,omitempty"`
	ServiceName     string `json:"service_name,omitempty"`
	VolumeName      string `json:"volume_name,omitempty"`
	BackupHistoryID string `json:"backup_history_id"`
	Status          string `json:"status"`
	Error           string `json:"error,omitempty"`
	StartedAt       string `json:"started_at"`
	FinishedAt      string `json:"finished_at,omitempty"`
}

RestoreHistoryResource mirrors internal/api's restoreHistoryResource (internal/api/restore.go). ServiceName/VolumeName mirror BackupHistoryResource's own identical fields above.

type RevealResult added in v0.2.0

type RevealResult struct {
	Key              string `json:"key"`
	Value            string `json:"value"`
	Type             string `json:"type"`
	HideAfterSeconds int    `json:"hide_after_seconds"`
}

RevealResult is one revealed value.

type RevealedLoginCode added in v0.2.0

type RevealedLoginCode struct {
	Code      string    `json:"code"`
	ExpiresAt time.Time `json:"expires_at"`
}

RevealedLoginCode mirrors internal/api's revealLoginCodeResponse.

type ReverseProxyCheck added in v0.2.0

type ReverseProxyCheck struct {
	ResolvesToHost bool   `json:"resolves_to_host"`
	Reachable      bool   `json:"reachable"`
	Detail         string `json:"detail,omitempty"`
}

ReverseProxyCheck is the result of the reachability check.

type ReverseProxyGuide added in v0.2.0

type ReverseProxyGuide struct {
	Holders  []ReverseProxyHolder `json:"holders"`
	Detected string               `json:"detected_proxy,omitempty"`
	Plan     *ReverseProxyPlan    `json:"plan,omitempty"`
	Check    *ReverseProxyCheck   `json:"check,omitempty"`
}

ReverseProxyGuide is GET /api/v1/system/reverse-proxy.

type ReverseProxyHolder added in v0.2.0

type ReverseProxyHolder struct {
	Port           int    `json:"port"`
	Container      string `json:"container"`
	Image          string `json:"image"`
	Kind           string `json:"kind,omitempty"`
	NetworkGateway string `json:"network_gateway,omitempty"`
}

ReverseProxyHolder is a container publishing port 80 or 443.

type ReverseProxyPlan added in v0.2.0

type ReverseProxyPlan struct {
	Domain      string   `json:"domain"`
	Proxy       string   `json:"proxy"`
	UpstreamURL string   `json:"upstream_url"`
	NeedsRebind bool     `json:"needs_rebind"`
	Rebind      string   `json:"rebind,omitempty"`
	Snippet     string   `json:"snippet"`
	SnippetPath string   `json:"snippet_path,omitempty"`
	Steps       []string `json:"steps"`
}

ReverseProxyPlan is the configuration that puts the dashboard behind a proxy.

type RevokeAgentTokensResource added in v0.2.0

type RevokeAgentTokensResource struct {
	Revoked int `json:"revoked"`
}

RevokeAgentTokensResource mirrors the revoke-agent-tokens response.

type RevokeJoinTokensResponse

type RevokeJoinTokensResponse struct {
	Revoked int64 `json:"revoked"`
}

RevokeJoinTokensResponse reports how many pending tokens were revoked.

type RevokedSessions added in v0.2.0

type RevokedSessions struct {
	Revoked int `json:"revoked"`
}

RevokedSessions mirrors internal/api's revokeSessionsResponse.

type RoleRequest added in v0.2.0

type RoleRequest struct {
	Name        string   `json:"name"`
	Description string   `json:"description"`
	Abilities   []string `json:"abilities"`
	Visibility  string   `json:"visibility,omitempty"`
}

RoleRequest is the body of POST /api/v1/roles and PUT /api/v1/roles/{id}.

type RoleResource

type RoleResource struct {
	Name        string   `json:"name"`
	Description string   `json:"description"`
	Abilities   []string `json:"abilities"`
	ID          string   `json:"id,omitempty"`
	Visibility  string   `json:"visibility,omitempty"`
	Builtin     bool     `json:"builtin"`
	UserCount   int      `json:"user_count"`
}

RoleResource mirrors internal/api's Role (internal/api/roles.go).

type RollbackBackup added in v0.2.0

type RollbackBackup struct {
	Name          string `json:"name"`
	CreatedAt     string `json:"created_at"`
	SchemaVersion int    `json:"schema_version"`
	Compatible    bool   `json:"compatible"`
}

RollbackBackup is a restore point in a rollback plan.

type RollbackChange added in v0.2.0

type RollbackChange struct {
	Version string `json:"version"`
	Notes   string `json:"notes"`
}

RollbackChange is one release's notes between the target and the running version.

type RollbackPlan added in v0.2.0

type RollbackPlan struct {
	CurrentVersion       string           `json:"current_version"`
	CurrentSchemaVersion int              `json:"current_schema_version"`
	Target               RollbackTarget   `json:"target"`
	Verdict              string           `json:"verdict"`
	Steps                []string         `json:"steps"`
	Warnings             []string         `json:"warnings"`
	DowntimeSeconds      int              `json:"downtime_seconds"`
	RestoreRequired      bool             `json:"restore_required"`
	Backups              []RollbackBackup `json:"backups"`
	LossSince            *string          `json:"data_loss_since"`
	Command              string           `json:"command"`
	RestoreCommand       string           `json:"restore_command"`
	FetchCommand         string           `json:"fetch_command"`
	Checks               []UpgradeCheck   `json:"checks"`
	Blocked              bool             `json:"blocked"`
	Changes              []RollbackChange `json:"changes"`
	Notes                string           `json:"notes"`
	OneClick             bool             `json:"one_click"`
	OneClickReason       string           `json:"one_click_reason"`
}

RollbackPlan is GET /api/v1/updates/rollback-plan's response.

type RollbackStarted

type RollbackStarted struct {
	Status        string `json:"status"`
	TargetVersion string `json:"target_version"`
}

RollbackStarted is POST /api/v1/updates/rollback's response.

type RollbackTarget added in v0.2.0

type RollbackTarget struct {
	Version       string `json:"version"`
	SchemaVersion int    `json:"schema_version"`
	SchemaSource  string `json:"schema_source"`
	Retained      bool   `json:"retained"`
}

RollbackTarget is the release a plan returns to.

type RollbackTargetResource added in v0.2.0

type RollbackTargetResource struct {
	DeployID string    `json:"deploy_id"`
	Image    string    `json:"image"`
	ImageID  string    `json:"image_id,omitempty"`
	PinRef   string    `json:"pin_ref"`
	PinnedAt time.Time `json:"pinned_at"`
	Live     bool      `json:"live"`
}

RollbackTargetResource is a pinned release image cleanup never removes.

type RollbackToRequest added in v0.2.0

type RollbackToRequest struct {
	Confirm        bool   `json:"confirm,omitempty"`
	OverrideFreeze bool   `json:"override_freeze,omitempty"`
	OverrideReason string `json:"override_reason,omitempty"`
}

RollbackToRequest is the optional body of POST .../deploys/{id}/rollback.

type RotateDEKFailure

type RotateDEKFailure struct {
	App    string `json:"app"`
	Reason string `json:"reason"`
}

RotateDEKFailure mirrors internal/api's rotateDEKFailure.

type RotateDEKResult

type RotateDEKResult struct {
	App         string             `json:"app,omitempty"`
	Values      int                `json:"values,omitempty"`
	RotatedAt   *time.Time         `json:"rotated_at,omitempty"`
	RunID       string             `json:"run_id,omitempty"`
	Resumed     bool               `json:"resumed,omitempty"`
	Total       int                `json:"total,omitempty"`
	Rotated     int                `json:"rotated,omitempty"`
	Skipped     int                `json:"skipped,omitempty"`
	FailedCount int                `json:"failed_count,omitempty"`
	Failed      []RotateDEKFailure `json:"failed,omitempty"`
	Complete    bool               `json:"complete"`
}

RotateDEKResult mirrors internal/api's rotateDEKResponse.

type RotateKeyResponse added in v0.2.0

type RotateKeyResponse struct {
	NodeID       string `json:"node_id"`
	OldPublicKey string `json:"old_public_key"`
	NewPublicKey string `json:"new_public_key"`
}

RotateKeyResponse mirrors internal/api's rotateKeyResponse (POST /api/v1/nodes/{id}/mesh/rotate-key).

type RotateMasterKeyRequest

type RotateMasterKeyRequest struct {
	NewMasterKey string `json:"newMasterKey"`
}

RotateMasterKeyRequest mirrors internal/api's rotateMasterKeyRequest: the new master key, read from a file or stdin by the CLI so it never appears as a bare command-line argument.

type RotateMasterKeyResult

type RotateMasterKeyResult struct {
	RotatedAt       time.Time           `json:"rotatedAt"`
	PersistedToFile bool                `json:"persistedToFile"`
	Warning         string              `json:"warning,omitempty"`
	Rebind          *SecretRebindResult `json:"rebind,omitempty"`
}

RotateMasterKeyResult mirrors internal/api's rotateMasterKeyResponse. Warning is non-empty exactly when the operator has a required follow-up before the control plane's next restart: either the master key is env-sourced (update APP_MASTER_KEY out of band) or the file write itself failed (update the key file by hand).

type Route53DNSResource added in v0.2.0

type Route53DNSResource struct {
	Enabled            bool   `json:"enabled"`
	Region             string `json:"region,omitempty"`
	HostedZoneID       string `json:"hosted_zone_id,omitempty"`
	HasAccessKeyID     bool   `json:"has_access_key_id"`
	HasSecretAccessKey bool   `json:"has_secret_access_key"`
}

Route53DNSResource mirrors internal/api's route53DNSResource (internal/api/route53_dns.go): GET/PUT/DELETE /api/v1/settings/route53-dns's wire shape. Neither credential half ever appears here in either direction. A second, independent ACME DNS-01 provider from CloudflareDNSResource, not a replacement.

type RunBrief added in v0.2.0

type RunBrief struct {
	ID     string `json:"id"`
	Number int    `json:"number"`
	Status string `json:"status"`
}

RunBrief is a pipeline's most recent run summary.

type SAMLCertificateInfo

type SAMLCertificateInfo struct {
	Subject  string `json:"subject"`
	NotAfter string `json:"not_after"`
}

SAMLCertificateInfo summarizes one trusted IDP signing certificate.

type SAMLConnection

type SAMLConnection struct {
	ID              string                `json:"id"`
	Name            string                `json:"name"`
	Enabled         bool                  `json:"enabled"`
	Configured      bool                  `json:"configured"`
	IDPEntityID     string                `json:"idp_entity_id"`
	IDPSSOURL       string                `json:"idp_sso_url"`
	IDPCertificates string                `json:"idp_certificates"`
	IDPMetadataURL  string                `json:"idp_metadata_url"`
	Certificates    []SAMLCertificateInfo `json:"certificates"`
	EmailAttribute  string                `json:"email_attribute"`
	NameAttribute   string                `json:"name_attribute"`
	GroupsAttribute string                `json:"groups_attribute"`
	AllowedDomains  []string              `json:"allowed_domains"`
	JITProvisioning bool                  `json:"jit_provisioning"`
	DefaultRoleID   string                `json:"default_role_id"`
	SyncRoles       bool                  `json:"sync_roles"`
	SPEntityID      string                `json:"sp_entity_id"`
	SPACSURL        string                `json:"sp_acs_url"`
	SPMetadataURL   string                `json:"sp_metadata_url"`
	CreatedAt       string                `json:"created_at"`
	UpdatedAt       string                `json:"updated_at"`
}

SAMLConnection mirrors internal/api's samlConnectionResource.

type SAMLConnectionRequest

type SAMLConnectionRequest struct {
	Name            string   `json:"name"`
	Enabled         bool     `json:"enabled"`
	IDPEntityID     string   `json:"idp_entity_id"`
	IDPSSOURL       string   `json:"idp_sso_url"`
	IDPCertificates string   `json:"idp_certificates"`
	IDPMetadataURL  string   `json:"idp_metadata_url"`
	EmailAttribute  string   `json:"email_attribute"`
	NameAttribute   string   `json:"name_attribute"`
	GroupsAttribute string   `json:"groups_attribute"`
	AllowedDomains  []string `json:"allowed_domains"`
	JITProvisioning bool     `json:"jit_provisioning"`
	DefaultRoleID   string   `json:"default_role_id"`
	SyncRoles       bool     `json:"sync_roles"`
}

SAMLConnectionRequest is the full body of a create or update.

func RequestFromSAMLConnection

func RequestFromSAMLConnection(c SAMLConnection) SAMLConnectionRequest

RequestFromSAMLConnection copies the editable fields, for read-modify-write updates.

type SAMLMetadataImport

type SAMLMetadataImport struct {
	URL string `json:"url,omitempty"`
	XML string `json:"xml,omitempty"`
}

SAMLMetadataImport carries IDP metadata by URL or inline XML (exactly one).

type SBOMLicenseCount added in v0.2.0

type SBOMLicenseCount struct {
	License string `json:"license"`
	Count   int    `json:"count"`
}

SBOMLicenseCount is how many packages carry a license.

type SBOMPackage added in v0.2.0

type SBOMPackage struct {
	Name    string `json:"name"`
	Version string `json:"version,omitempty"`
	Type    string `json:"type,omitempty"`
	License string `json:"license,omitempty"`
}

SBOMPackage is one component of an SBOM.

type SBOMSummary added in v0.2.0

type SBOMSummary struct {
	DeploymentID string             `json:"deployment_id"`
	Format       string             `json:"format"`
	PackageCount int                `json:"package_count"`
	Types        []SBOMTypeCount    `json:"types"`
	Licenses     []SBOMLicenseCount `json:"licenses"`
	Unlicensed   int                `json:"unlicensed"`
	TopPackages  []SBOMPackage      `json:"top_packages"`
	Provenance   bool               `json:"provenance"`
	Available    bool               `json:"available"`
	Bytes        int64              `json:"bytes"`
	GeneratedAt  time.Time          `json:"generated_at"`
	DownloadURL  string             `json:"download_url,omitempty"`
}

SBOMSummary is GET .../deployments/{id}/sbom's body.

type SBOMTypeCount added in v0.2.0

type SBOMTypeCount struct {
	Type  string `json:"type"`
	Count int    `json:"count"`
}

SBOMTypeCount is how many packages are of a type.

type SCIMToken

type SCIMToken struct {
	ID         string  `json:"id"`
	Name       string  `json:"name"`
	Prefix     string  `json:"prefix"`
	CreatedBy  string  `json:"created_by"`
	CreatedAt  string  `json:"created_at"`
	LastUsedAt *string `json:"last_used_at"`
	RevokedAt  *string `json:"revoked_at"`
}

SCIMToken mirrors internal/api's scimTokenResource.

type SCIMTokenCreated

type SCIMTokenCreated struct {
	SCIMToken
	Token string `json:"token"`
}

SCIMTokenCreated is a new or rotated token with its one-time plaintext.

type SLOPreviewResource added in v0.2.0

type SLOPreviewResource struct {
	Config          AlertSLOConfig  `json:"config"`
	HasTraffic      bool            `json:"has_traffic"`
	BudgetRemaining float64         `json:"budget_remaining"`
	BudgetRequests  float64         `json:"budget_window_requests"`
	Windows         []SLOWindowStat `json:"windows"`
	Tiers           []SLOTierStatus `json:"tiers"`
	Firing          bool            `json:"firing"`
	Page            bool            `json:"page"`
	MaxBurn         float64         `json:"max_burn"`
}

SLOPreviewResource mirrors internal/api's sloPreviewResource: the error budget left and current burn rates for an SLO.

type SLOTierStatus added in v0.2.0

type SLOTierStatus struct {
	Name          string  `json:"name"`
	Factor        float64 `json:"factor"`
	LongSeconds   int64   `json:"long_seconds"`
	ShortSeconds  int64   `json:"short_seconds"`
	Page          bool    `json:"page"`
	LongBurn      float64 `json:"long_burn"`
	ShortBurn     float64 `json:"short_burn"`
	EffectiveBurn float64 `json:"effective_burn"`
	Firing        bool    `json:"firing"`
}

SLOTierStatus mirrors internal/api's sloTierResource.

type SLOWindowStat added in v0.2.0

type SLOWindowStat struct {
	WindowSeconds int64   `json:"window_seconds"`
	Requests      float64 `json:"requests"`
	Bad           float64 `json:"bad"`
	BurnRate      float64 `json:"burn_rate"`
}

SLOWindowStat mirrors internal/api's sloWindowResource.

type SSHHostKey added in v0.2.2

type SSHHostKey struct {
	Type        string `json:"type"`
	Fingerprint string `json:"fingerprint"`
}

SSHHostKey is one host key the server presented, as ssh-keygen -l prints it.

type SSHNodeProvisionAuthRequest added in v0.2.0

type SSHNodeProvisionAuthRequest struct {
	Type       string `json:"type"` // "key" or "password"
	PrivateKey string `json:"private_key,omitempty"`
	Passphrase string `json:"passphrase,omitempty"`
	Password   string `json:"password,omitempty"`
}

SSHNodeProvisionAuthRequest mirrors internal/api's createSSHNodeProvisionAuthRequest: one of two credential shapes, never stored past the one provisioning call this starts.

type SSHNodeProvisionResource added in v0.2.0

type SSHNodeProvisionResource struct {
	ID                 string    `json:"id"`
	Name               string    `json:"name"`
	Role               string    `json:"role"`
	Status             string    `json:"status"`
	DetectedOS         string    `json:"detected_os,omitempty"`
	DetectedArch       string    `json:"detected_arch,omitempty"`
	NodeID             string    `json:"node_id,omitempty"`
	FailureReason      string    `json:"failure_reason,omitempty"`
	Log                string    `json:"log,omitempty"`
	HostKeyFingerprint string    `json:"host_key_fingerprint,omitempty"`
	HostKeyVerified    bool      `json:"host_key_verified"`
	Warnings           []string  `json:"warnings,omitempty"`
	CreatedAt          time.Time `json:"created_at"`
	UpdatedAt          time.Time `json:"updated_at"`
}

SSHNodeProvisionResource mirrors internal/api's sshNodeProvisionResource.

type SSHProvisionPreflight added in v0.2.2

type SSHProvisionPreflight struct {
	Host     string       `json:"host"`
	Port     int          `json:"port"`
	HostKeys []SSHHostKey `json:"host_keys"`
}

SSHProvisionPreflight is the preflight response: the server's host keys, read without authenticating.

type SSHProvisionPreflightRequest added in v0.2.2

type SSHProvisionPreflightRequest struct {
	Host string `json:"host"`
	Port int    `json:"port,omitempty"`
}

SSHProvisionPreflightRequest is POST /api/v1/nodes/ssh-provision/preflight's body.

type SSOGroupMapping

type SSOGroupMapping struct {
	Group    string `json:"group"`
	RoleID   string `json:"role_id"`
	Priority int    `json:"priority"`
}

SSOGroupMapping maps a directory group to a stored role.

type SSOGroupMappings

type SSOGroupMappings struct {
	Mappings []SSOGroupMapping `json:"mappings"`
}

SSOGroupMappings is the full mapping set.

type SSOSettings

type SSOSettings struct {
	EnforceSSO       bool   `json:"enforce_sso"`
	SPCertificate    string `json:"sp_certificate"`
	BaseURL          string `json:"base_url"`
	BaseURLError     string `json:"base_url_error,omitempty"`
	MasterKeyMissing bool   `json:"master_key_missing"`
	SCIMBaseURL      string `json:"scim_base_url"`
	SCIMDefaultRole  string `json:"scim_default_role_id"`
}

SSOSettings mirrors internal/api's ssoSettingsResource.

type SaveAppAsTemplateRequest added in v0.2.0

type SaveAppAsTemplateRequest struct {
	Name        string `json:"name"`
	Description string `json:"description,omitempty"`
}

SaveAppAsTemplateRequest mirrors internal/api's saveAppAsTemplateRequest: POST /api/v1/apps/{name}/save-as-template's body.

type SavedLogQuery added in v0.2.0

type SavedLogQuery struct {
	ID         string       `json:"id"`
	Name       string       `json:"name"`
	App        string       `json:"app,omitempty"`
	Spec       LogQuerySpec `json:"spec"`
	Visibility string       `json:"visibility"`
	Pinned     bool         `json:"pinned"`
	Owner      string       `json:"owner,omitempty"`
	Mine       bool         `json:"mine"`
	CreatedAt  time.Time    `json:"created_at"`
	UpdatedAt  time.Time    `json:"updated_at"`
}

SavedLogQuery mirrors internal/api's savedLogQueryResource.

type SavedLogQueryRequest added in v0.2.0

type SavedLogQueryRequest struct {
	Name       string       `json:"name"`
	App        string       `json:"app,omitempty"`
	Spec       LogQuerySpec `json:"spec"`
	Visibility string       `json:"visibility,omitempty"`
	Pinned     bool         `json:"pinned,omitempty"`
}

SavedLogQueryRequest creates or replaces a saved log query.

type SavedSearch

type SavedSearch struct {
	ID        string    `json:"id"`
	Name      string    `json:"name"`
	Query     string    `json:"query"`
	CreatedAt time.Time `json:"created_at"`
}

SavedSearch is a stored query.

type ScheduledMaintenanceRequest

type ScheduledMaintenanceRequest struct {
	Title            string    `json:"title"`
	Message          string    `json:"message,omitempty"`
	Scope            string    `json:"scope"`
	Target           string    `json:"target,omitempty"`
	StartsAt         time.Time `json:"starts_at"`
	EndsAt           time.Time `json:"ends_at"`
	Freeze           bool      `json:"freeze"`
	AnnounceLeadMins int       `json:"announce_lead_minutes"`
}

ScheduledMaintenanceRequest is the body of POST /api/v1/scheduled-maintenance.

type ScheduledMaintenanceResource

type ScheduledMaintenanceResource struct {
	ID               string     `json:"id"`
	Title            string     `json:"title"`
	Message          string     `json:"message"`
	Scope            string     `json:"scope"`
	Target           string     `json:"target,omitempty"`
	StartsAt         time.Time  `json:"starts_at"`
	EndsAt           time.Time  `json:"ends_at"`
	Freeze           bool       `json:"freeze"`
	AnnounceLeadMins int        `json:"announce_lead_minutes"`
	AnnouncedAt      *time.Time `json:"announced_at,omitempty"`
	State            string     `json:"state"`
	CreatedBy        string     `json:"created_by,omitempty"`
	CreatedAt        time.Time  `json:"created_at"`
}

ScheduledMaintenanceResource mirrors internal/api's scheduledMaintenanceResource.

type ScheduledTaskRequest

type ScheduledTaskRequest struct {
	Command  []string `json:"command"`
	Schedule string   `json:"schedule"`
	Enabled  bool     `json:"enabled"`
	// ConcurrencyPolicy is one of "allow", "forbid", "replace", or empty
	// (server-side default "allow").
	ConcurrencyPolicy string `json:"concurrency_policy,omitempty"`

	// Scheduled job fields; zero values are omitted so an update leaves
	// the stored value alone.
	Name                   string `json:"name,omitempty"`
	Mode                   string `json:"mode,omitempty"`
	Timezone               string `json:"timezone,omitempty"`
	TimeoutSeconds         int    `json:"timeout_seconds,omitempty"`
	MaxRetries             int    `json:"max_retries,omitempty"`
	RetryBackoffSeconds    int    `json:"retry_backoff_seconds,omitempty"`
	CatchUp                string `json:"catch_up,omitempty"`
	CatchUpLookbackSeconds int    `json:"catch_up_lookback_seconds,omitempty"`
	CPULimitMillis         int    `json:"cpu_limit_millis,omitempty"`
	MemoryLimitMB          int    `json:"memory_limit_mb,omitempty"`
	WarnAfterSeconds       int    `json:"warn_after_seconds,omitempty"`
}

ScheduledTaskRequest mirrors the fields internal/api's scheduledTaskResource actually reads from a create/update request body (Command, Schedule, Enabled); ID and ServiceName always come from the URL, never the body.

type ScheduledTaskResource

type ScheduledTaskResource struct {
	ID          string   `json:"id,omitempty"`
	ServiceName string   `json:"service_name,omitempty"`
	Command     []string `json:"command"`
	Schedule    string   `json:"schedule"`
	Enabled     bool     `json:"enabled"`
	// ConcurrencyPolicy is one of "allow", "forbid", "replace": what
	// happens when this task's next due run finds a previous invocation
	// of itself still executing. Empty on a request defaults to "allow"
	// server-side.
	ConcurrencyPolicy string `json:"concurrency_policy"`

	LastRunAt     *time.Time `json:"last_run_at,omitempty"`
	LastRunStatus string     `json:"last_run_status,omitempty"`
	LastRunOutput string     `json:"last_run_output,omitempty"`
	// ConsecutiveFailures mirrors internal/api's own field: what a
	// kind=scheduled_task_failure alert rule watches.
	ConsecutiveFailures int `json:"consecutive_failures"`

	// Scheduled job fields (internal/api/scheduled_tasks.go): Name, Mode
	// (fresh or exec), Timezone, retry/timeout/catch-up policy, limits,
	// and live scheduling state.
	Name                   string     `json:"name,omitempty"`
	Mode                   string     `json:"mode,omitempty"`
	Timezone               string     `json:"timezone,omitempty"`
	TimeoutSeconds         int        `json:"timeout_seconds,omitempty"`
	MaxRetries             int        `json:"max_retries,omitempty"`
	RetryBackoffSeconds    int        `json:"retry_backoff_seconds,omitempty"`
	CatchUp                string     `json:"catch_up,omitempty"`
	CatchUpLookbackSeconds int        `json:"catch_up_lookback_seconds,omitempty"`
	CPULimitMillis         int        `json:"cpu_limit_millis,omitempty"`
	MemoryLimitMB          int        `json:"memory_limit_mb,omitempty"`
	WarnAfterSeconds       int        `json:"warn_after_seconds,omitempty"`
	Source                 string     `json:"source,omitempty"`
	ConsecutiveMissed      int        `json:"consecutive_missed"`
	RunningSince           *time.Time `json:"running_since,omitempty"`
	NextRunAt              *time.Time `json:"next_run_at,omitempty"`
	// RunID is set on the response to a run-now call.
	RunID string `json:"run_id,omitempty"`

	CreatedAt time.Time `json:"created_at,omitempty"`
	UpdatedAt time.Time `json:"updated_at,omitempty"`
}

ScheduledTaskResource mirrors internal/api's scheduledTaskResource (internal/api/scheduled_tasks.go). Command is a real argv (no shell), and LastRun* describe only the single most recent run in place: there is no separate run-history endpoint.

type Scope added in v0.2.0

type Scope struct {
	Team    string
	Project string
}

Scope is the team and project every request is narrowed to.

func CurrentScope added in v0.2.0

func CurrentScope() Scope

CurrentScope returns the scope set by SetScope.

func ReadContext added in v0.2.0

func ReadContext(prog, profile string) (Scope, error)

ReadContext returns a profile's saved team and project.

func ResolveScope added in v0.2.0

func ResolveScope(flags Scope, lookupEnv func(string) (string, bool), prog, profile string) Scope

ResolveScope picks team and project by precedence: flag, env, then the profile's saved context.

type SearchActionInfo

type SearchActionInfo struct {
	ID      string `json:"id"`
	Ability string `json:"ability"`
	Confirm bool   `json:"confirm"`
	// MCPTool is the exact MCP tool to call, MCPArgs its filled-in arguments
	// and MCPNeeds the inputs the caller must still supply.
	MCPTool  string            `json:"mcp_tool,omitempty"`
	MCPArgs  map[string]string `json:"mcp_args,omitempty"`
	MCPNeeds []string          `json:"mcp_needs,omitempty"`
}

SearchActionInfo is what runs a search action hit.

type SearchHit

type SearchHit struct {
	Ref        string            `json:"ref"`
	Kind       string            `json:"kind"`
	Title      string            `json:"title"`
	Subtitle   string            `json:"subtitle,omitempty"`
	AppName    string            `json:"app_name,omitempty"`
	Env        string            `json:"env,omitempty"`
	NodeName   string            `json:"node_name,omitempty"`
	Tags       []string          `json:"tags,omitempty"`
	Href       string            `json:"href,omitempty"`
	TitleSpans []SearchSpan      `json:"title_spans,omitempty"`
	Score      float64           `json:"score"`
	Action     *SearchActionInfo `json:"action,omitempty"`
}

SearchHit is one unified search result.

type SearchResponse

type SearchResponse struct {
	Hits       []SearchHit `json:"hits"`
	NextCursor string      `json:"next_cursor,omitempty"`
	Total      int         `json:"total"`
}

SearchResponse is a page of hits.

type SearchSpan

type SearchSpan struct {
	Start int `json:"start"`
	End   int `json:"end"`
}

SearchSpan is a half-open range of code points in a hit's title.

type SecretBindingStatus added in v0.2.0

type SecretBindingStatus struct {
	Total  int `json:"total"`
	Bound  int `json:"bound"`
	Legacy int `json:"legacy"`
}

SecretBindingStatus mirrors internal/api's secretBindingResponse.

type SecretFinding

type SecretFinding struct {
	RuleID      string `json:"rule_id"`
	Source      string `json:"source"`
	Path        string `json:"path,omitempty"`
	Line        int    `json:"line,omitempty"`
	Var         string `json:"var,omitempty"`
	Fingerprint string `json:"fingerprint"`
	Allowed     bool   `json:"allowed,omitempty"`
}

SecretFinding is one suspected credential. It never carries the value.

type SecretKeyResource

type SecretKeyResource struct {
	Key       string `json:"key"`
	Locked    bool   `json:"locked"`
	UpdatedAt string `json:"updated_at"`
	Stale     bool   `json:"stale"`
}

SecretKeyResource mirrors internal/api's secretKeyResource (internal/api/secrets.go): a secret's key and locked state, never its value. UpdatedAt is RFC3339, and Stale reports whether it's older than the effective secret rotation warning threshold.

type SecretRebindFailure added in v0.2.0

type SecretRebindFailure struct {
	Owner  string `json:"owner"`
	Key    string `json:"key"`
	Reason string `json:"reason"`
}

SecretRebindFailure names one slot a rebind could not bind.

type SecretRebindResult added in v0.2.0

type SecretRebindResult struct {
	Scanned      int                   `json:"scanned"`
	Rebound      int                   `json:"rebound"`
	AlreadyBound int                   `json:"alreadyBound"`
	Changed      int                   `json:"changed"`
	FailedCount  int                   `json:"failedCount"`
	Failed       []SecretRebindFailure `json:"failed"`
	Remaining    int                   `json:"remaining"`
}

SecretRebindResult mirrors internal/api's secretRebindResponse.

type SecretRotationPolicyResource

type SecretRotationPolicyResource struct {
	App               string `json:"app,omitempty"`
	Key               string `json:"key"`
	IntervalDays      int    `json:"interval_days"`
	GraceHours        int    `json:"grace_hours"`
	Owner             string `json:"owner"`
	AutoRotate        bool   `json:"auto_rotate"`
	LastRotatedAt     string `json:"last_rotated_at,omitempty"`
	NextDueAt         string `json:"next_due_at,omitempty"`
	Status            string `json:"status"`
	State             string `json:"state"`
	LastError         string `json:"last_error,omitempty"`
	PreviousExpiresAt string `json:"previous_expires_at,omitempty"`
}

SecretRotationPolicyResource mirrors the control plane's rotation policy wire shape. It never carries a secret value.

type SecretScanAllowEntry

type SecretScanAllowEntry struct {
	Fingerprint string    `json:"fingerprint"`
	Reason      string    `json:"reason"`
	Actor       string    `json:"actor"`
	CreatedAt   time.Time `json:"created_at"`
}

SecretScanAllowEntry is one allow-listed fingerprint with its audit trail.

type SecretScanEnvResult

type SecretScanEnvResult struct {
	Scope     string          `json:"scope"`
	Truncated bool            `json:"truncated"`
	Findings  []SecretFinding `json:"findings"`
	ScannedAt time.Time       `json:"scanned_at"`
}

SecretScanEnvResult is POST .../secret-scan/run's body.

type SecretScanLimits

type SecretScanLimits struct {
	MaxFiles       int   `json:"max_files"`
	MaxFileBytes   int64 `json:"max_file_bytes"`
	MaxTotalBytes  int64 `json:"max_total_bytes"`
	MaxFindings    int   `json:"max_findings"`
	TimeoutSeconds int   `json:"timeout_seconds"`
}

SecretScanLimits are the server's scan caps.

type SecretScanRun

type SecretScanRun struct {
	DeploymentID string          `json:"deployment_id"`
	App          string          `json:"app"`
	Policy       string          `json:"policy"`
	Action       string          `json:"action"`
	Reason       string          `json:"reason,omitempty"`
	Status       string          `json:"status"`
	Error        string          `json:"error,omitempty"`
	FilesScanned int             `json:"files_scanned"`
	Truncated    bool            `json:"truncated"`
	Findings     []SecretFinding `json:"findings"`
	ScannedAt    time.Time       `json:"scanned_at"`
}

SecretScanRun is the scan recorded for one deploy.

type SecretScanSettings

type SecretScanSettings struct {
	App       string                 `json:"app"`
	Policy    string                 `json:"policy"`
	AllowList []SecretScanAllowEntry `json:"allow_list"`
	Limits    SecretScanLimits       `json:"limits"`
}

SecretScanSettings is GET .../secret-scan's body.

type SecurityPolicy added in v0.2.0

type SecurityPolicy struct {
	ApprovalScope        string            `json:"approval_scope"`
	MaxTokenLifetimeDays int               `json:"max_token_lifetime_days"`
	WarnUnusedDays       int               `json:"warn_unused_days"`
	DisableUnusedDays    int               `json:"disable_unused_days"`
	Sources              map[string]string `json:"sources"`
	NewDeviceApproval    bool              `json:"new_device_approval"`
	NoticeGraceDays      int               `json:"notice_grace_days"`
}

SecurityPolicy mirrors internal/api's securityPolicyResource.

type SecurityPolicyUpdate added in v0.2.0

type SecurityPolicyUpdate struct {
	ApprovalScope        *string `json:"approval_scope,omitempty"`
	MaxTokenLifetimeDays *int    `json:"max_token_lifetime_days,omitempty"`
	WarnUnusedDays       *int    `json:"warn_unused_days,omitempty"`
	DisableUnusedDays    *int    `json:"disable_unused_days,omitempty"`
}

SecurityPolicyUpdate is the PUT body; nil fields keep their value.

type SecurityPosture added in v0.2.0

type SecurityPosture struct {
	Score       int           `json:"score"`
	Grade       string        `json:"grade"`
	GeneratedAt time.Time     `json:"generated_at"`
	Counts      PostureCounts `json:"counts"`
	Full        bool          `json:"full"`
	Items       []PostureItem `json:"items"`
	Account     []PostureItem `json:"account"`
}

SecurityPosture mirrors internal/api's postureResponse. Items is empty unless the caller is an admin (Full).

type SecuritySessions added in v0.2.0

type SecuritySessions struct {
	UserID         string          `json:"user_id"`
	Self           bool            `json:"self"`
	Sessions       []Session       `json:"sessions"`
	TrustedDevices []TrustedDevice `json:"trusted_devices"`
	Tokens         []SessionToken  `json:"tokens"`
}

SecuritySessions mirrors internal/api's securitySessionsResponse.

type SelfUpgradeAttempt added in v0.2.0

type SelfUpgradeAttempt struct {
	ID          string               `json:"id"`
	FromVersion string               `json:"from_version"`
	ToVersion   string               `json:"to_version"`
	FromSchema  int                  `json:"from_schema"`
	ToSchema    int                  `json:"to_schema"`
	Initiator   string               `json:"initiator"`
	Outcome     string               `json:"outcome"`
	FailedStep  string               `json:"failed_step"`
	Error       string               `json:"error"`
	BackupName  string               `json:"backup_name"`
	Acked       []string             `json:"acked"`
	Steps       []SelfUpgradeStep    `json:"steps"`
	CurrentStep string               `json:"current_step"`
	Log         []SelfUpgradeLogLine `json:"log"`
	StartedAt   string               `json:"started_at"`
	FinishedAt  string               `json:"finished_at"`
}

SelfUpgradeAttempt is one recorded upgrade attempt.

type SelfUpgradeAttempts added in v0.2.0

type SelfUpgradeAttempts struct {
	Attempts []SelfUpgradeAttempt `json:"attempts"`
}

SelfUpgradeAttempts is GET /api/v1/updates/self-upgrade/attempts' response.

type SelfUpgradeBreaking added in v0.2.0

type SelfUpgradeBreaking struct {
	ID          string `json:"id"`
	Version     string `json:"version"`
	Summary     string `json:"summary"`
	RequiresAck bool   `json:"requires_ack"`
}

SelfUpgradeBreaking is one breaking change between two versions.

type SelfUpgradeLogLine

type SelfUpgradeLogLine struct {
	At   string `json:"at"`
	Step string `json:"step"`
	Line string `json:"line"`
}

SelfUpgradeLogLine is one event of an attempt's live log.

type SelfUpgradePlan added in v0.2.0

type SelfUpgradePlan struct {
	CurrentVersion string                `json:"current_version"`
	TargetVersion  string                `json:"target_version"`
	Breaking       []SelfUpgradeBreaking `json:"breaking"`
	NotesAvailable bool                  `json:"notes_available"`
	CanApply       bool                  `json:"can_apply"`
	CannotApplyWhy string                `json:"cannot_apply_reason"`
	Command        string                `json:"command"`
	Steps          []string              `json:"steps"`
}

SelfUpgradePlan is GET /api/v1/updates/self-upgrade/plan's response.

type SelfUpgradeStarted added in v0.2.0

type SelfUpgradeStarted struct {
	Status        string `json:"status"`
	TargetVersion string `json:"target_version"`
}

SelfUpgradeStarted is POST /api/v1/updates/self-upgrade's response.

type SelfUpgradeStep added in v0.2.0

type SelfUpgradeStep struct {
	Name       string `json:"name"`
	Status     string `json:"status"`
	Detail     string `json:"detail"`
	At         string `json:"at"`
	DurationMS int64  `json:"duration_ms"`
}

SelfUpgradeStep is one step of an attempt's timeline.

type ServerAddress added in v0.2.0

type ServerAddress struct {
	IPv4                  string                `json:"ipv4,omitempty"`
	IPv6                  string                `json:"ipv6,omitempty"`
	Source                string                `json:"source"`
	Detected              ServerAddressPair     `json:"detected"`
	Override              ServerAddressPair     `json:"override"`
	PublicHost            string                `json:"public_host,omitempty"`
	PublicHostSource      string                `json:"public_host_source,omitempty"`
	BehindNAT             bool                  `json:"behind_nat"`
	TLSTerminatedUpstream bool                  `json:"tls_terminated_upstream"`
	AppsBaseDomain        string                `json:"apps_base_domain,omitempty"`
	Domain                string                `json:"domain,omitempty"`
	Records               []DNSRecordSuggestion `json:"records,omitempty"`
}

ServerAddress mirrors internal/api's serverAddressResource.

type ServerAddressPair added in v0.2.0

type ServerAddressPair struct {
	IPv4 string `json:"ipv4,omitempty"`
	IPv6 string `json:"ipv6,omitempty"`
}

ServerAddressPair is an IPv4 and IPv6 address, either may be empty.

type ServerMismatchError

type ServerMismatchError struct {
	Prog, Profile, URL string
	Pinned             ServerPin
	Got                *InstanceInfo
}

ServerMismatchError is returned instead of sending a token to a server that is not the one the profile is pinned to.

func (*ServerMismatchError) Error

func (e *ServerMismatchError) Error() string

type ServerPin

type ServerPin struct {
	InstanceID  string
	Fingerprint string
	Name        string
	APIURL      string
}

ServerPin is the server a credentials profile was logged in to.

type ServerProfile

type ServerProfile struct {
	Active          string                 `json:"active"`
	Configured      string                 `json:"configured"`
	Source          string                 `json:"source"`
	EnvVar          string                 `json:"env_var"`
	PinnedByEnv     bool                   `json:"pinned_by_env"`
	RestartRequired bool                   `json:"restart_required"`
	Recommended     string                 `json:"recommended,omitempty"`
	Profiles        []ServerProfileInfo    `json:"profiles"`
	Problems        []ServerProfileProblem `json:"problems"`
	NeedsConfirm    bool                   `json:"needs_confirm"`
	Saved           bool                   `json:"saved"`
	UpdatedBy       string                 `json:"updated_by,omitempty"`
}

ServerProfile mirrors GET /api/v1/settings/server-profile.

type ServerProfileInfo

type ServerProfileInfo struct {
	ID             string `json:"id"`
	Mesh           bool   `json:"mesh"`
	Plugins        bool   `json:"plugins"`
	Experimental   int    `json:"experimental_features"`
	RetentionDays  int    `json:"retention_days"`
	LoopbackAgent  bool   `json:"loopback_agent"`
	LazyLoops      bool   `json:"lazy_loops"`
	Recommendation bool   `json:"posture_recommendations"`
	SBOMScan       bool   `json:"sbom_scan"`
}

ServerProfileInfo mirrors one entry of GET /api/v1/settings/server-profile's profile list.

type ServerProfileProblem

type ServerProfileProblem struct {
	Code     string `json:"code"`
	Message  string `json:"message"`
	Blocking bool   `json:"blocking"`
}

ServerProfileProblem is one reason a profile move is refused or needs a confirm.

type ServerReadiness added in v0.2.0

type ServerReadiness struct {
	Checks   []ReadinessCheck `json:"checks"`
	Mode     string           `json:"mode"`
	Proxy    string           `json:"proxy"`
	Holders  map[int]string   `json:"holders"`
	NextStep string           `json:"next_step"`
	Blocked  bool             `json:"blocked"`
	Summary  string           `json:"summary"`
}

ServerReadiness is GET /api/v1/system/readiness' response.

type ServiceHealth

type ServiceHealth struct {
	Readiness    *ServiceProbe `json:"readiness,omitempty"`
	Liveness     *ServiceProbe `json:"liveness,omitempty"`
	ReadyTimeout int64         `json:"ready_timeout,omitempty"`
}

ServiceHealth mirrors internal/api's appResource.Health field.

type ServiceHooks

type ServiceHooks struct {
	PreDeploy  string `json:"pre_deploy,omitempty"`
	PostDeploy string `json:"post_deploy,omitempty"`
}

ServiceHooks mirrors internal/api's appResource.Hooks field (store.ServiceHooks' JSON encoding).

type ServiceProbe

type ServiceProbe struct {
	Path            string   `json:"path"`
	Scheme          string   `json:"scheme,omitempty"`
	Host            string   `json:"host,omitempty"`
	TLSSkipVerify   bool     `json:"tls_skip_verify,omitempty"`
	FollowRedirects *bool    `json:"follow_redirects,omitempty"`
	ExpectedStatus  string   `json:"expected_status,omitempty"`
	Exec            []string `json:"exec,omitempty"`
	Interval        int64    `json:"interval,omitempty"`
	Timeout         int64    `json:"timeout,omitempty"`
	Failures        int      `json:"failures,omitempty"`
}

ServiceProbe mirrors one of AppResource.Health's two probes (readiness or liveness).

type ServiceResources

type ServiceResources struct {
	MemoryBytes     int64  `json:"memory_bytes,omitempty"`
	NanoCPUs        int64  `json:"nano_cpus,omitempty"`
	SwapMemoryBytes int64  `json:"swap_memory_bytes,omitempty"`
	CPUSetCPUs      string `json:"cpuset_cpus,omitempty"`
}

ServiceResources mirrors internal/api's appResource.Resources field (internal/api/apps.go), which is itself store.DesiredService's own JSON encoding: bytes and nanoseconds, not app.yaml's human-friendly "512Mi"/"5s" strings. Redeclared here, not imported from internal/store or internal/api, so this package depends only on the documented wire contract, never on the control plane's internal Go types. ServiceProbe and ServiceHealth below share that same reasoning.

type ServiceTemplateDetail

type ServiceTemplateDetail struct {
	ID                     string               `json:"id"`
	Name                   string               `json:"name"`
	Slogan                 string               `json:"slogan"`
	Category               string               `json:"category"`
	DocumentationURL       string               `json:"documentation_url"`
	Compose                string               `json:"compose"`
	RecommendedMemoryBytes int64                `json:"recommended_memory_bytes,omitempty"`
	RequiresGPU            bool                 `json:"requires_gpu,omitempty"`
	RequiresConfiguration  bool                 `json:"requires_configuration,omitempty"`
	Requirements           TemplateRequirements `json:"requirements"`
}

ServiceTemplateDetail mirrors internal/api's serviceTemplateDetail: GET /api/v1/service-templates/{id}'s response, including the full compose.yaml body. Also what a custom template id (ListCustomTemplates below) resolves to, through the same endpoint: Category reads "Custom" and RecommendedMemoryBytes/RequiresGPU are always zero for those, see resolveTemplate's own doc comment (internal/api/service_templates.go).

type ServiceTemplateListItem

type ServiceTemplateListItem struct {
	ID                     string `json:"id"`
	Name                   string `json:"name"`
	Slogan                 string `json:"slogan"`
	Category               string `json:"category"`
	DocumentationURL       string `json:"documentation_url"`
	RecommendedMemoryBytes int64  `json:"recommended_memory_bytes,omitempty"`
	RequiresGPU            bool   `json:"requires_gpu,omitempty"`
}

ServiceTemplateListItem mirrors internal/api's serviceTemplateListItem (internal/api/service_templates.go): one catalog entry from GET /api/v1/service-templates, without the full Compose body.

type Session added in v0.2.0

type Session struct {
	ID         string    `json:"id"`
	Browser    string    `json:"browser"`
	IP         string    `json:"ip"`
	Network    string    `json:"network"`
	CreatedAt  time.Time `json:"created_at"`
	LastSeenAt time.Time `json:"last_seen_at"`
	ExpiresAt  time.Time `json:"expires_at"`
	Current    bool      `json:"current"`
}

Session mirrors internal/api's sessionResource.

type SessionInfoResource

type SessionInfoResource struct {
	Username  string `json:"username"`
	ExpiresAt string `json:"expires_at"`
}

SessionInfoResource mirrors internal/api's sessionInfoResponse (internal/api/account.go)'s wire shape. GetSession below sends this over a plain bearer-token request, which handleGetSession's own doc comment says it will never honor ("deliberately not requireAbility: a bearer token has no session of its own to report on").

type SessionLinkResource added in v0.2.0

type SessionLinkResource struct {
	Token string `json:"token"`
	URL   string `json:"url"`
}

SessionLinkResource mirrors internal/api's mintSessionLinkResponse (internal/api/session_links.go): Token is a one-time secret, URL is the same token already embedded in a ready-to-open login link.

type SessionPolicy

type SessionPolicy struct {
	TeamID      string   `json:"team_id"`
	TeamName    string   `json:"team_name"`
	IdleTimeout string   `json:"idle_timeout"`
	MaxLifetime string   `json:"max_lifetime"`
	IPAllowlist []string `json:"ip_allowlist"`
	RequireMFA  bool     `json:"require_mfa"`
	MaxSessions int      `json:"max_concurrent_sessions"`
	OnLimit     string   `json:"on_limit"`
	UpdatedBy   string   `json:"updated_by"`
	UpdatedAt   string   `json:"updated_at"`
}

SessionPolicy mirrors internal/api's sessionPolicyResource.

type SessionPolicyRequest

type SessionPolicyRequest struct {
	IdleTimeout string   `json:"idle_timeout"`
	MaxLifetime string   `json:"max_lifetime"`
	IPAllowlist []string `json:"ip_allowlist"`
	RequireMFA  bool     `json:"require_mfa"`
	MaxSessions int      `json:"max_concurrent_sessions"`
	OnLimit     string   `json:"on_limit"`
}

SessionPolicyRequest is the body of a policy save; durations use Go syntax such as 30m or 12h.

type SessionToken added in v0.2.0

type SessionToken struct {
	ID         string     `json:"id"`
	Name       string     `json:"name"`
	Abilities  []string   `json:"abilities"`
	CreatedAt  time.Time  `json:"created_at"`
	LastUsedAt *time.Time `json:"last_used_at,omitempty"`
	ExpiresAt  *time.Time `json:"expires_at,omitempty"`
}

SessionToken is the subset of an API token the sessions view shows.

type SetAIProviderRequest

type SetAIProviderRequest struct {
	APIKey       string `json:"api_key,omitempty"`
	BaseURL      string `json:"base_url,omitempty"`
	DefaultModel string `json:"default_model,omitempty"`
}

SetAIProviderRequest is PUT .../providers/{id}'s body; empty fields are unchanged.

type SetAppDatabaseRequest

type SetAppDatabaseRequest struct {
	DatabaseName string `json:"database_name"`
	EnvVar       string `json:"env_var,omitempty"`
	Field        string `json:"field,omitempty"`
}

SetAppDatabaseRequest mirrors internal/api's setAppDatabaseRequest (apps_database.go). EnvVar and Field are both optional: the server defaults them ("DATABASE_URL"/"url") when left blank.

type SetAppEgressPolicyRequest added in v0.2.0

type SetAppEgressPolicyRequest struct {
	Mode  string           `json:"mode"`
	Allow []AppEgressAllow `json:"allow"`
}

SetAppEgressPolicyRequest mirrors internal/api's setEgressPolicyRequest (apps_egress.go). Mode must be "allowlist" with at least one Allow entry; the server rejects anything else.

type SetAppEnvironmentRequest

type SetAppEnvironmentRequest struct {
	EnvironmentID string `json:"environment_id"`
}

SetAppEnvironmentRequest mirrors internal/api's setAppEnvironmentRequest. An empty EnvironmentID clears the assignment.

type SetAppNodeRequest added in v0.2.0

type SetAppNodeRequest struct {
	NodeID string `json:"node_id"`
}

SetAppNodeRequest mirrors internal/api's setAppNodeRequest. An empty NodeID moves the app back to the control plane's own local node.

type SetAppProjectRequest

type SetAppProjectRequest struct {
	ProjectID string `json:"project_id"`
}

SetAppProjectRequest mirrors internal/api's setAppProjectRequest. An empty ProjectID clears the assignment.

type SetAppScheduleRequest added in v0.2.0

type SetAppScheduleRequest struct {
	Cron     string `json:"cron"`
	Branch   string `json:"branch"`
	Timezone string `json:"timezone,omitempty"`
	Enabled  *bool  `json:"enabled,omitempty"`
}

SetAppScheduleRequest mirrors internal/api's setAppScheduleRequest. Enabled defaults to true server-side when nil.

type SetAppStorageRequest added in v0.2.0

type SetAppStorageRequest struct {
	StorageTargetID string `json:"storage_target_id"`
}

SetAppStorageRequest mirrors internal/api's setAppStorageRequest: PUT /api/v1/apps/{name}/storage's request body.

type SetAppVolumesRequest added in v0.2.0

type SetAppVolumesRequest struct {
	Volumes []AppVolumeResource `json:"volumes"`
}

SetAppVolumesRequest mirrors internal/api's setAppVolumesRequest (apps_volumes_attach.go): the service's whole desired volume list, full-replace like SetAppEgressPolicyRequest.

type SetAppVolumesResponse added in v0.2.0

type SetAppVolumesResponse struct {
	Name    string              `json:"name"`
	Volumes []AppVolumeResource `json:"volumes,omitempty"`
}

SetAppVolumesResponse mirrors internal/api's setAppVolumesResponse.

type SetAutoRollbackRequest added in v0.2.0

type SetAutoRollbackRequest struct {
	Enabled bool `json:"enabled"`
}

SetAutoRollbackRequest mirrors internal/api's setAutoRollbackRequest (deploys.go): PUT /api/v1/apps/{name}/auto-rollback's body.

type SetAutoRollbackSLOBurnRequest added in v0.2.0

type SetAutoRollbackSLOBurnRequest struct {
	Mode string `json:"mode"`
}

SetAutoRollbackSLOBurnRequest mirrors internal/api's setAutoRollbackSLOBurnRequest (deploys.go): PUT /api/v1/apps/{name}/auto-rollback-slo-burn's body. Mode is one of "off", "auto", "dry_run", "pause_for_human".

type SetBackupScheduleRequest

type SetBackupScheduleRequest struct {
	TargetID   string `json:"target_id"`
	Schedule   string `json:"schedule"`
	Retain     int    `json:"retain,omitempty"`
	RetainDays int    `json:"retain_days,omitempty"`
}

SetBackupScheduleRequest mirrors internal/api's setBackupScheduleRequest.

type SetDatabaseProjectRequest

type SetDatabaseProjectRequest struct {
	ProjectID string `json:"project_id"`
}

SetDatabaseProjectRequest mirrors internal/api's setDatabaseProjectRequest. An empty ProjectID clears the assignment.

type SetDatabasePublicAccessRequest

type SetDatabasePublicAccessRequest struct {
	Port        int    `json:"port,omitempty"`
	BindAddress string `json:"bind_address,omitempty"`
}

SetDatabasePublicAccessRequest mirrors internal/api's setDatabasePublicAccessRequest. Port 0 means auto-assign the next free port. BindAddress empty means the server's own default ("private", loopback only); "public" opts into every interface.

type SetDatabaseResourcesRequest

type SetDatabaseResourcesRequest struct {
	Resources *ServiceResources `json:"resources"`
}

SetDatabaseResourcesRequest mirrors internal/api's setDatabaseResourcesRequest.

type SetDomainAuthGateRequest added in v0.2.0

type SetDomainAuthGateRequest struct {
	Enabled        bool           `json:"enabled"`
	AuthURL        string         `json:"auth_url"`
	CheckPath      string         `json:"check_path"`
	CopyHeaders    []string       `json:"copy_headers"`
	TimeoutSeconds int            `json:"timeout_seconds"`
	Provider       string         `json:"provider,omitempty"`
	Allow          []AuthGateRule `json:"allow,omitempty"`
}

SetDomainAuthGateRequest mirrors internal/api's setDomainAuthGateRequest. TimeoutSeconds 0 uses the server's APP_AUTH_GATE_TIMEOUT default.

type SetDomainBasicAuthRequest

type SetDomainBasicAuthRequest struct {
	Username string `json:"username"`
	Password string `json:"password,omitempty"`
}

SetDomainBasicAuthRequest mirrors internal/api's setDomainBasicAuthRequest. Password empty on an update means "leave the currently stored password unchanged".

type SetDomainErrorPageRequest added in v0.2.0

type SetDomainErrorPageRequest struct {
	StatusCode int    `json:"status_code"`
	Body       string `json:"body"`
}

SetDomainErrorPageRequest mirrors internal/api's setDomainErrorPageRequest: one status-code-to-body upsert at a time.

type SetDomainMaintenanceRequest

type SetDomainMaintenanceRequest struct {
	Title             string   `json:"title,omitempty"`
	Message           string   `json:"message,omitempty"`
	RetryAfterSeconds int      `json:"retry_after_seconds,omitempty"`
	Until             string   `json:"until,omitempty"`
	Bypass            []string `json:"bypass,omitempty"`
	BypassHealthCheck *bool    `json:"bypass_health_check,omitempty"`
	// MaxDurationSeconds nil takes the server default, 0 means no limit.
	MaxDurationSeconds *int `json:"max_duration_seconds,omitempty"`
}

SetDomainMaintenanceRequest is PUT .../maintenance's optional body.

type SetDomainRedirectRequest added in v0.2.0

type SetDomainRedirectRequest struct {
	TargetURL  string `json:"target_url"`
	StatusCode int    `json:"status_code,omitempty"`
}

SetDomainRedirectRequest mirrors internal/api's setDomainRedirectRequest. StatusCode 0 defaults server-side to 301 (permanent).

type SetDomainTLSCertRequest

type SetDomainTLSCertRequest struct {
	Cert string `json:"cert"`
	Key  string `json:"key"`
}

SetDomainTLSCertRequest mirrors internal/api's setDomainTLSCertRequest: both fields are required every call, there is no "leave the current certificate unchanged" partial-update case.

type SetDomainWAFRequest added in v0.2.0

type SetDomainWAFRequest struct {
	WAFEnabled     bool   `json:"waf_enabled"`
	WAFMode        string `json:"waf_mode,omitempty"`
	RateLimitRPS   int    `json:"rate_limit_rps"`
	RateLimitBurst int    `json:"rate_limit_burst"`
}

SetDomainWAFRequest mirrors internal/api's setDomainWAFRequest. WAFMode empty defaults server-side to "detect". RateLimitRPS 0 means rate limiting is off, independent of WAFEnabled.

type SetExecAccessRequest added in v0.2.0

type SetExecAccessRequest struct {
	Enabled bool `json:"enabled"`
}

SetExecAccessRequest mirrors internal/api's setExecAccessRequest (exec.go): PUT /api/v1/apps/{name}/exec-access's body.

type SetGitDeploySettingsRequest added in v0.2.0

type SetGitDeploySettingsRequest struct {
	DeployPaths       *[]string `json:"deploy_paths,omitempty"`
	DeployPathsIgnore *[]string `json:"deploy_paths_ignore,omitempty"`
	ReportStatus      *bool     `json:"report_status,omitempty"`
}

SetGitDeploySettingsRequest mirrors internal/api's setGitDeploySettingsRequest; a nil field keeps its current value.

type SetGitSourceBuildRequest added in v0.2.0

type SetGitSourceBuildRequest struct {
	BuildType     string `json:"build_type"`
	BuildPath     string `json:"build_path"`
	BaseDirectory string `json:"base_directory"`
}

SetGitSourceBuildRequest mirrors internal/api's setGitSourceBuildRequest.

type SetGitSourceRequest

type SetGitSourceRequest struct {
	RepoURL   string `json:"repo_url"`
	Branch    string `json:"branch,omitempty"`
	BuildType string `json:"build_type,omitempty"`
	BuildPath string `json:"build_path,omitempty"`
	// BaseDirectory is the build context, relative to the repository root.
	BaseDirectory string `json:"base_directory,omitempty"`
	Token         string `json:"token,omitempty"`
	TriggerMode   string `json:"trigger_mode,omitempty"`
}

SetGitSourceRequest mirrors internal/api's setGitSourceRequest (internal/api/git_sources.go), minus the multi-service Services/ AdditionalServices fields (see GitSourceResource's own doc comment).

type SetLogDrainRequest

type SetLogDrainRequest struct {
	Type    string `json:"type"`
	Target  string `json:"target"`
	Enabled bool   `json:"enabled"`
}

SetLogDrainRequest mirrors internal/api's setLogDrainRequest.

type SetNodeProviderCredentialRequest added in v0.2.0

type SetNodeProviderCredentialRequest struct {
	Provider              string `json:"provider"`
	Token                 string `json:"token"`
	SecretAccessKey       string `json:"secret_access_key,omitempty"`
	SessionToken          string `json:"session_token,omitempty"`
	Region                string `json:"region,omitempty"`
	RoleARN               string `json:"role_arn,omitempty"`
	UseAmbientCredentials bool   `json:"use_ambient_credentials,omitempty"`
	Method                string `json:"method,omitempty"`
	Verify                bool   `json:"verify,omitempty"`
	Label                 string `json:"label,omitempty"`
	Location              string `json:"location,omitempty"`
	Notes                 string `json:"notes,omitempty"`
}

SetNodeProviderCredentialRequest is POST /api/v1/node-providers' body. The fields after Token mirror internal/api's own request struct and are aws-only: for hetzner/digitalocean, Token alone is the provider's bearer API token.

type SetNodeWorkloadsRequest

type SetNodeWorkloadsRequest struct {
	AcceptsAppWorkloads   bool `json:"accepts_app_workloads"`
	AcceptsBuildWorkloads bool `json:"accepts_build_workloads"`
}

SetNodeWorkloadsRequest mirrors internal/api's setNodeWorkloadsRequest: a full replace of both fields, not a partial patch.

type SetPreviewPolicyRequest added in v0.2.0

type SetPreviewPolicyRequest struct {
	OnLimit           *string `json:"on_limit,omitempty"`
	AllowForkPreviews *bool   `json:"allow_fork_previews,omitempty"`
	TTLHours          *int    `json:"ttl_hours,omitempty"`

	MaxPreviews      *int     `json:"max_previews,omitempty"`
	MemoryLimit      *string  `json:"memory_limit,omitempty"`
	CPULimit         *float64 `json:"cpu_limit,omitempty"`
	IdleSleepMinutes *int     `json:"idle_sleep_minutes,omitempty"`
	DatabaseStrategy *string  `json:"database_strategy,omitempty"`
	SeedDatabase     *string  `json:"seed_database,omitempty"`
	AllowForkSecrets *bool    `json:"allow_fork_secrets,omitempty"`
	GateBasicAuth    *bool    `json:"gate_basic_auth,omitempty"`
	GateUsername     *string  `json:"gate_username,omitempty"`
	GatePassword     *string  `json:"gate_password,omitempty"`
	AllowIndexing    *bool    `json:"allow_indexing,omitempty"`
}

SetPreviewPolicyRequest is PUT .../preview-policy's body; nil fields are left unchanged.

type SetPreviewSettingsRequest

type SetPreviewSettingsRequest struct {
	Enabled        *bool `json:"enabled,omitempty"`
	PostPRComments *bool `json:"post_pr_comments,omitempty"`
}

SetPreviewSettingsRequest mirrors internal/api's setPreviewSettingsRequest (preview_environments_handlers.go). Both fields are optional pointers: nil means "leave the currently stored value unchanged," so SetPreviewEnabled and SetPreviewPostPRComments (client.go) can each touch just their own toggle without resetting the other back to false.

type SetProjectOrganizationRequest

type SetProjectOrganizationRequest struct {
	OrgID string `json:"org_id"`
}

SetProjectOrganizationRequest mirrors internal/api's setProjectOrganizationRequest. An empty OrgID clears the assignment.

type SetSecretLockRequest

type SetSecretLockRequest struct {
	Locked bool `json:"locked"`
}

SetSecretLockRequest mirrors internal/api's setSecretLockRequest (internal/api/secrets.go).

type SetSecretRequest

type SetSecretRequest struct {
	Value           string `json:"value"`
	OverwriteLocked bool   `json:"overwrite_locked"`
}

SetSecretRequest mirrors internal/api's setSecretRequest (internal/api/secrets.go).

type SetSecretRotationPolicyRequest

type SetSecretRotationPolicyRequest struct {
	IntervalDays int    `json:"interval_days"`
	GraceHours   int    `json:"grace_hours"`
	Owner        string `json:"owner"`
	AutoRotate   bool   `json:"auto_rotate"`
}

SetSecretRotationPolicyRequest is the PUT body for a rotation policy.

type SetSharedEnvSecretRequest added in v0.2.0

type SetSharedEnvSecretRequest struct {
	Value string `json:"value"`
}

SetSharedEnvSecretRequest mirrors internal/api's setSharedEnvSecretRequest (internal/api/shared_env_secrets.go).

type SetVolumeBackupScheduleRequest

type SetVolumeBackupScheduleRequest struct {
	TargetID   string `json:"target_id"`
	Schedule   string `json:"schedule"`
	Retain     int    `json:"retain,omitempty"`
	RetainDays int    `json:"retain_days,omitempty"`
	SqlitePath string `json:"sqlite_path,omitempty"`
}

SetVolumeBackupScheduleRequest mirrors internal/api's setVolumeBackupScheduleRequest.

type SetupGuideProgress added in v0.2.0

type SetupGuideProgress struct {
	Done  int `json:"done"`
	Total int `json:"total"`
}

SetupGuideProgress counts done items of a multi-item setup step.

type SetupGuideResource added in v0.2.0

type SetupGuideResource struct {
	Steps         []SetupGuideStep `json:"steps"`
	ReadyPercent  int              `json:"ready_percent"`
	Done          int              `json:"done"`
	Total         int              `json:"total"`
	NextStep      string           `json:"next_step,omitempty"`
	Complete      bool             `json:"complete"`
	Hidden        bool             `json:"hidden"`
	ServerAddress string           `json:"server_address,omitempty"`
}

SetupGuideResource is GET /api/v1/setup/guide.

type SetupGuideStep added in v0.2.0

type SetupGuideStep struct {
	ID              string              `json:"id"`
	Title           string              `json:"title"`
	State           string              `json:"state"`
	Optional        bool                `json:"optional"`
	EstimateMinutes int                 `json:"estimate_minutes"`
	Href            string              `json:"href"`
	BlockedBy       []string            `json:"blocked_by,omitempty"`
	Reason          string              `json:"reason,omitempty"`
	Progress        *SetupGuideProgress `json:"progress,omitempty"`
	Manual          bool                `json:"manual,omitempty"`
}

SetupGuideStep is one entry of the Get started checklist.

type SetupStatusResource added in v0.2.0

type SetupStatusResource struct {
	NeedsSetup bool `json:"needs_setup"`
}

SetupStatusResource mirrors GET /api/v1/auth/setup-status.

type SharedEnvVarResource added in v0.2.0

type SharedEnvVarResource struct {
	Key       string `json:"key"`
	Value     string `json:"value"`
	Secret    bool   `json:"secret"`
	UpdatedAt string `json:"updated_at,omitempty"`
	Stale     bool   `json:"stale,omitempty"`
}

SharedEnvVarResource mirrors internal/api's sharedEnvVarResource (internal/api/shared_env_secrets.go): one shared env var at the project/organization/environment tier. Value is always "" for a secret-marked entry, matching SecretKeyResource's own "never a value" rule above. UpdatedAt/Stale are only populated when Secret is true, see sharedEnvVarResource's own doc comment.

type ShieldBotList

type ShieldBotList struct {
	Agents []string `json:"agents"`
	Custom bool     `json:"custom"`
}

ShieldBotList is GET /api/v1/system/shield/bots.

type ShieldLimits

type ShieldLimits struct {
	MaxBotAgents           int `json:"max_bot_agents"`
	MaxRetryAfterSeconds   int `json:"max_retry_after_seconds"`
	DefaultRetryAfter      int `json:"default_retry_after_seconds"`
	TarpitMaxMillis        int `json:"tarpit_max_ms"`
	AttackRatePerMinute    int `json:"attack_rate_per_minute"`
	AttackBurst            int `json:"attack_burst"`
	AttackMaxConcurrent    int `json:"attack_max_concurrent"`
	AttackDefaultMinutes   int `json:"attack_default_minutes"`
	AttackMaxMinutes       int `json:"attack_max_minutes"`
	MaxTrackedIPsPerDomain int `json:"max_tracked_ips"`
}

ShieldLimits are the instance caps and under-attack defaults for the abuse shield.

type ShieldPolicyResource

type ShieldPolicyResource struct {
	Domain     string               `json:"domain"`
	Kind       string               `json:"kind"`
	Configured bool                 `json:"configured"`
	Spec       trafficpolicy.Shield `json:"spec"`
	UpdatedAt  string               `json:"updated_at,omitempty"`
}

ShieldPolicyResource is GET/PUT .../domains/{domain}/shield.

type ShieldRecommendedResource

type ShieldRecommendedResource struct {
	DryRun        bool                    `json:"dry_run"`
	Blocked       string                  `json:"blocked,omitempty"`
	RatePerMinute int                     `json:"rate_per_minute"`
	Burst         int                     `json:"burst"`
	MaxConcurrent int                     `json:"max_concurrent"`
	BlockBots     bool                    `json:"block_bots"`
	Applied       []string                `json:"applied"`
	Skipped       []ShieldRecommendedSkip `json:"skipped"`
}

ShieldRecommendedResource is the result of applying the recommended shield to an app.

type ShieldRecommendedSkip

type ShieldRecommendedSkip struct {
	Domain string `json:"domain"`
	Reason string `json:"reason"`
}

ShieldRecommendedSkip is a domain the recommended shield left alone.

type SignInApproval added in v0.2.0

type SignInApproval struct {
	ID          string    `json:"id"`
	RequesterIP string    `json:"requester_ip"`
	UserAgent   string    `json:"user_agent"`
	CreatedAt   time.Time `json:"created_at"`
	ExpiresAt   time.Time `json:"expires_at"`
}

SignInApproval mirrors internal/api's signInApprovalItem. It never carries the number the waiting browser shows: the approver has to type it.

type SignInCode added in v0.2.0

type SignInCode struct {
	ID          string    `json:"id"`
	RequesterIP string    `json:"requester_ip"`
	UserAgent   string    `json:"user_agent"`
	CreatedAt   time.Time `json:"created_at"`
	ExpiresAt   time.Time `json:"expires_at"`
	Revealable  bool      `json:"revealable"`
}

SignInCode mirrors internal/api's signInCodeItem: a waiting code request, without the code itself.

type SignInRequests added in v0.2.0

type SignInRequests struct {
	Codes     []SignInCode     `json:"codes"`
	Approvals []SignInApproval `json:"approvals"`
}

SignInRequests mirrors internal/api's signInRequestsResponse.

type SilenceMatchers added in v0.2.0

type SilenceMatchers struct {
	RuleIDs    []string          `json:"rule_ids,omitempty"`
	Kinds      []string          `json:"kinds,omitempty"`
	Apps       []string          `json:"apps,omitempty"`
	Nodes      []string          `json:"nodes,omitempty"`
	Labels     map[string]string `json:"labels,omitempty"`
	Severities []string          `json:"severities,omitempty"`
	Metrics    []string          `json:"metrics,omitempty"`
}

SilenceMatchers mirrors alerting.SilenceMatcher.

type SilenceResource added in v0.2.0

type SilenceResource struct {
	ID        string          `json:"id"`
	Matchers  SilenceMatchers `json:"matchers"`
	StartsAt  time.Time       `json:"starts_at"`
	EndsAt    time.Time       `json:"ends_at"`
	CreatedBy string          `json:"created_by"`
	Reason    string          `json:"reason,omitempty"`
	CreatedAt time.Time       `json:"created_at"`
	ExpiredAt *time.Time      `json:"expired_at,omitempty"`
	Status    string          `json:"status"`
}

SilenceResource mirrors internal/api's silenceResource.

type SimulatedPlacement

type SimulatedPlacement struct {
	Name     string `json:"name"`
	From     string `json:"from_node_id,omitempty"`
	NodeID   string `json:"node_id,omitempty"`
	NodeName string `json:"node_name,omitempty"`
	Zone     string `json:"zone,omitempty"`
	Why      string `json:"why,omitempty"`
	Unplaced string `json:"unplaced,omitempty"`
}

SimulatedPlacement is one workload in a placement or failure simulation.

type SleepActivity

type SleepActivity struct {
	LastRequestAt         *time.Time `json:"last_request_at,omitempty"`
	LastNetworkActivityAt *time.Time `json:"last_network_activity_at,omitempty"`
	OpenConnections       int        `json:"open_connections"`
	IdleForSeconds        int64      `json:"idle_for_seconds"`
	WillSleepAt           *time.Time `json:"will_sleep_at,omitempty"`
}

SleepActivity is what the scheduler last saw.

type SleepEnableOptions

type SleepEnableOptions struct {
	HoldRequests *bool    `json:"hold_requests,omitempty"`
	IgnorePaths  []string `json:"ignore_paths,omitempty"`
	PortWake     *bool    `json:"port_wake,omitempty"`
}

SleepEnableOptions are the optional settings sent with an enable.

type SleepEvent

type SleepEvent struct {
	ID              int64     `json:"id"`
	Kind            string    `json:"kind"`
	At              time.Time `json:"at"`
	Reason          string    `json:"reason,omitempty"`
	IdleMinutes     int       `json:"idle_minutes,omitempty"`
	TriggerPath     string    `json:"trigger_path,omitempty"`
	TriggerSource   string    `json:"trigger_source,omitempty"`
	Detail          string    `json:"detail,omitempty"`
	DurationSeconds *int64    `json:"duration_seconds,omitempty"`
	WakeLatencyMs   *int64    `json:"wake_latency_ms,omitempty"`
	Actor           string    `json:"actor"`
}

SleepEvent mirrors internal/api's sleepEventResource.

type SleepFix

type SleepFix struct {
	Kind   string         `json:"kind"`
	Label  string         `json:"label"`
	Method string         `json:"method"`
	Path   string         `json:"path"`
	Body   map[string]any `json:"body,omitempty"`
}

SleepFix is a suggested remedy for a blocker or warning.

type SleepFleet

type SleepFleet struct {
	Enabled        int             `json:"enabled"`
	Sleeping       int             `json:"sleeping"`
	ReclaimedBytes int64           `json:"reclaimed_bytes"`
	Apps           []SleepFleetApp `json:"apps"`
}

SleepFleet mirrors internal/api's sleepFleetResource.

type SleepFleetApp

type SleepFleetApp struct {
	Name             string     `json:"name"`
	IdleMinutes      int        `json:"idle_minutes"`
	Sleeping         bool       `json:"sleeping"`
	MemoryLimitBytes int64      `json:"memory_limit_bytes"`
	Since            *time.Time `json:"since,omitempty"`
	WakeTiming       WakeTiming `json:"wake_timing"`
}

SleepFleetApp mirrors internal/api's sleepFleetApp.

type SleepHistory

type SleepHistory struct {
	Enabled  bool         `json:"enabled"`
	Sleeping bool         `json:"sleeping"`
	Events   []SleepEvent `json:"events"`
	Stats    SleepStats   `json:"stats"`
	// WakeTiming covers the app's most recent timed wakes, not the requested window.
	WakeTiming WakeTiming      `json:"wake_timing"`
	IdleLimits SleepIdleLimits `json:"idle_limits"`
}

SleepHistory mirrors internal/api's sleepHistoryResource.

type SleepIdleLimits

type SleepIdleLimits struct {
	MinMinutes     int `json:"min_minutes"`
	MaxMinutes     int `json:"max_minutes"`
	DefaultMinutes int `json:"default_minutes"`
}

SleepIdleLimits mirrors internal/api's sleepIdleLimits.

type SleepItem

type SleepItem struct {
	Code   string    `json:"code"`
	Title  string    `json:"title"`
	Detail string    `json:"detail"`
	Fix    *SleepFix `json:"fix,omitempty"`
}

SleepItem is one blocker or warning.

type SleepPortWake

type SleepPortWake struct {
	Supported bool  `json:"supported"`
	Active    bool  `json:"active"`
	Ports     []int `json:"ports"`
}

SleepPortWake is the live port wake state.

type SleepSettings

type SleepSettings struct {
	IdleMinutes  int      `json:"idle_minutes"`
	HoldRequests bool     `json:"hold_requests"`
	IgnorePaths  []string `json:"ignore_paths"`
	PortWake     bool     `json:"port_wake"`
}

SleepSettings are the stored sleep options.

type SleepStats

type SleepStats struct {
	CurrentlyAsleepSince   *time.Time `json:"currently_asleep_since,omitempty"`
	AsleepSeconds7d        int64      `json:"asleep_seconds_7d"`
	AsleepSeconds30d       int64      `json:"asleep_seconds_30d"`
	WakeCount7d            int        `json:"wake_count_7d"`
	AvgWakeLatencyMs       *int64     `json:"avg_wake_latency_ms,omitempty"`
	P95WakeLatencyMs       *int64     `json:"p95_wake_latency_ms,omitempty"`
	LastSleptAt            *time.Time `json:"last_slept_at,omitempty"`
	LastWokeAt             *time.Time `json:"last_woke_at,omitempty"`
	LastWakeReason         string     `json:"last_wake_reason,omitempty"`
	MemoryGiBHoursSaved30d *float64   `json:"memory_gib_hours_saved_30d,omitempty"`
}

SleepStats mirrors internal/api's sleepStatsResource.

type SlowQueryEntryResource added in v0.2.0

type SlowQueryEntryResource struct {
	Timestamp    time.Time `json:"timestamp"`
	DurationMs   float64   `json:"duration_ms"`
	Query        string    `json:"query"`
	RowsExamined int64     `json:"rows_examined,omitempty"`
}

SlowQueryEntryResource mirrors internal/api's slowQueryEntryResource (internal/api/database_slow_queries.go).

type StandaloneDomain added in v0.2.0

type StandaloneDomain struct {
	Domain             string `json:"domain"`
	Kind               string `json:"kind"`
	Scope              string `json:"scope"`
	Target             string `json:"target"`
	TargetKind         string `json:"target_kind"`
	TargetURL          string `json:"target_url"`
	UpstreamTLS        bool   `json:"upstream_tls"`
	TLSSkipVerify      bool   `json:"tls_skip_verify"`
	TLSServerName      string `json:"tls_server_name,omitempty"`
	HostHeader         string `json:"host_header"`
	WebSocket          bool   `json:"websocket"`
	DialTimeoutSeconds int    `json:"dial_timeout_seconds"`
	ReadTimeoutSeconds int    `json:"read_timeout_seconds"`
	StripPrefix        string `json:"strip_prefix,omitempty"`
	Description        string `json:"description,omitempty"`
	CreatedBy          string `json:"created_by,omitempty"`
	CreatedAt          string `json:"created_at,omitempty"`
	UpdatedAt          string `json:"updated_at,omitempty"`
}

StandaloneDomain mirrors internal/api's standaloneDomainResource.

type StandaloneDomainRequest added in v0.2.0

type StandaloneDomainRequest struct {
	Domain             string  `json:"domain,omitempty"`
	Target             *string `json:"target,omitempty"`
	UpstreamTLS        *bool   `json:"upstream_tls,omitempty"`
	TLSSkipVerify      *bool   `json:"tls_skip_verify,omitempty"`
	TLSServerName      *string `json:"tls_server_name,omitempty"`
	HostHeader         *string `json:"host_header,omitempty"`
	WebSocket          *bool   `json:"websocket,omitempty"`
	DialTimeoutSeconds *int    `json:"dial_timeout_seconds,omitempty"`
	ReadTimeoutSeconds *int    `json:"read_timeout_seconds,omitempty"`
	StripPrefix        *string `json:"strip_prefix,omitempty"`
	Description        *string `json:"description,omitempty"`
	Confirm            bool    `json:"confirm,omitempty"`
}

StandaloneDomainRequest is POST and PUT's body; nil fields keep the stored value on PUT.

type StaticSiteResource added in v0.2.0

type StaticSiteResource struct {
	Name    string   `json:"name"`
	Domains []string `json:"domains"`
}

StaticSiteResource mirrors internal/api's staticSiteResource (internal/api/static_sites.go): one entry of GET /api/v1/static-sites.

type StatusComponent added in v0.2.0

type StatusComponent struct {
	ID          string `json:"id,omitempty"`
	Kind        string `json:"kind"`
	Target      string `json:"target"`
	DisplayName string `json:"display_name"`
	Position    int    `json:"position"`
}

StatusComponent mirrors internal/api's statusComponentResource.

type StatusIncident added in v0.2.0

type StatusIncident struct {
	ID           string         `json:"id,omitempty"`
	Kind         string         `json:"kind"`
	Title        string         `json:"title"`
	Status       string         `json:"status"`
	Impact       string         `json:"impact"`
	ComponentIDs []string       `json:"component_ids"`
	StartsAt     *time.Time     `json:"starts_at,omitempty"`
	EndsAt       *time.Time     `json:"ends_at,omitempty"`
	ResolvedAt   *time.Time     `json:"resolved_at,omitempty"`
	Body         string         `json:"body,omitempty"`
	Updates      []StatusUpdate `json:"updates,omitempty"`
}

StatusIncident mirrors internal/api's statusIncidentResource.

type StatusPageComponentView added in v0.2.0

type StatusPageComponentView struct {
	Name     string   `json:"name"`
	Status   string   `json:"status"`
	Uptime90 *float64 `json:"uptime_90d"`
}

StatusPageComponentView is one component in the preview endpoint's view.

type StatusPageSettings added in v0.2.0

type StatusPageSettings struct {
	Enabled      bool   `json:"enabled"`
	Title        string `json:"title"`
	Description  string `json:"description"`
	CustomDomain string `json:"custom_domain"`
	PublicPath   string `json:"public_path,omitempty"`
}

StatusPageSettings mirrors internal/api's statusSettingsResource.

type StatusPageView added in v0.2.0

type StatusPageView struct {
	Title      string                    `json:"title"`
	Status     string                    `json:"status"`
	StatusText string                    `json:"status_text"`
	Components []StatusPageComponentView `json:"components"`
}

StatusPageView is the public payload as the preview endpoint returns it.

type StatusUpdate added in v0.2.0

type StatusUpdate struct {
	Status    string    `json:"status"`
	Body      string    `json:"body"`
	CreatedAt time.Time `json:"created_at,omitempty"`
}

StatusUpdate is one incident timeline entry.

type StepUpProof added in v0.2.0

type StepUpProof struct {
	Password     string `json:"password,omitempty"`
	Code         string `json:"code,omitempty"`
	RecoveryCode string `json:"recovery_code,omitempty"`
}

StepUpProof is the account owner's password, plus the authenticator or recovery code when the account has two-factor authentication.

type StorageBucket

type StorageBucket struct {
	ID            string         `json:"id"`
	Name          string         `json:"name"`
	TargetID      string         `json:"target_id"`
	Prefix        string         `json:"prefix"`
	Public        bool           `json:"public"`
	PublicURL     string         `json:"public_url,omitempty"`
	QuotaBytes    int64          `json:"quota_bytes"`
	LifecycleDays int            `json:"lifecycle_days"`
	LastSweptAt   string         `json:"last_swept_at,omitempty"`
	CreatedAt     string         `json:"created_at"`
	Apps          []BucketAppRef `json:"apps"`
	EnvKeys       []string       `json:"env_keys,omitempty"`
}

StorageBucket is a named bucket on a storage destination.

type StorageDefault

type StorageDefault struct {
	DataClass string `json:"data_class"`
	TargetID  string `json:"target_id"`
	UpdatedAt string `json:"updated_at"`
}

StorageDefault routes one data class to a destination.

type StorageDefaults

type StorageDefaults struct {
	Classes  []string         `json:"classes"`
	Defaults []StorageDefault `json:"defaults"`
}

StorageDefaults is GET /api/v1/storage/defaults.

type StorageDestination added in v0.2.0

type StorageDestination struct {
	ID              string `json:"id"`
	Name            string `json:"name"`
	Preset          string `json:"preset"`
	Provider        string `json:"provider"`
	Endpoint        string `json:"endpoint,omitempty"`
	Region          string `json:"region,omitempty"`
	Bucket          string `json:"bucket"`
	PathStyle       bool   `json:"path_style"`
	AccountID       string `json:"account_id,omitempty"`
	CreatedAt       string `json:"created_at"`
	ArchivePolicies int    `json:"archive_policies"`

	Kind           string   `json:"kind"`
	NodeID         string   `json:"node_id,omitempty"`
	Directory      string   `json:"directory,omitempty"`
	QuotaBytes     int64    `json:"quota_bytes"`
	UsedBytes      int64    `json:"used_bytes"`
	Objects        int64    `json:"objects"`
	OverQuota      bool     `json:"over_quota"`
	MonthlyCostUSD float64  `json:"monthly_cost_usd"`
	DefaultFor     []string `json:"default_for"`
}

StorageDestination is a connected S3-compatible bucket. It never carries credentials.

type StorageDestinationRequest added in v0.2.0

type StorageDestinationRequest struct {
	Name            string `json:"name"`
	Preset          string `json:"preset"`
	Endpoint        string `json:"endpoint,omitempty"`
	Region          string `json:"region,omitempty"`
	Bucket          string `json:"bucket"`
	AccountID       string `json:"account_id,omitempty"`
	PathStyle       *bool  `json:"path_style,omitempty"`
	AccessKeyID     string `json:"access_key_id,omitempty"`
	SecretAccessKey string `json:"secret_access_key,omitempty"`
	Verify          bool   `json:"verify,omitempty"`
	Kind            string `json:"kind,omitempty"`
	NodeID          string `json:"node_id,omitempty"`
	Directory       string `json:"directory,omitempty"`
	QuotaBytes      *int64 `json:"quota_bytes,omitempty"`
}

StorageDestinationRequest creates or updates a destination.

type StorageOrphanResource added in v0.2.0

type StorageOrphanResource struct {
	ID         string `json:"id"`
	Name       string `json:"name"`
	SizeBytes  *int64 `json:"size_bytes,omitempty"`
	CreatedAt  string `json:"created_at,omitempty"`
	AgeDays    *int   `json:"age_days,omitempty"`
	BelongedTo struct {
		Kind    string `json:"kind"`
		AppName string `json:"app_name,omitempty"`
		Name    string `json:"name,omitempty"`
		Role    string `json:"role"`
	} `json:"belonged_to"`
	BackupCount int `json:"backup_count"`
	LastBackup  *struct {
		ID        string `json:"id"`
		At        string `json:"at"`
		SizeBytes int64  `json:"size_bytes"`
	} `json:"last_backup,omitempty"`
}

StorageOrphanResource mirrors internal/api's storageOrphanResource.

type StorageOrphansResponse added in v0.2.0

type StorageOrphansResponse struct {
	Orphans        []StorageOrphanResource `json:"orphans"`
	TotalBytes     int64                   `json:"total_bytes"`
	ThresholdBytes int64                   `json:"threshold_bytes"`
}

StorageOrphansResponse mirrors internal/api's storageOrphansResponse.

type StorageProbeResult added in v0.2.0

type StorageProbeResult struct {
	OK      bool               `json:"ok"`
	Reason  string             `json:"reason,omitempty"`
	Message string             `json:"message,omitempty"`
	Fix     string             `json:"fix,omitempty"`
	Steps   []StorageProbeStep `json:"steps"`
}

StorageProbeResult is the outcome of a put/get/delete probe.

type StorageProbeStep added in v0.2.0

type StorageProbeStep struct {
	Name  string `json:"name"`
	OK    bool   `json:"ok"`
	Error string `json:"error,omitempty"`
}

StorageProbeStep is one step of a connection probe.

type StorageProvider added in v0.2.0

type StorageProvider struct {
	ID               string `json:"id"`
	Label            string `json:"label"`
	EndpointTemplate string `json:"endpoint_template,omitempty"`
	DefaultRegion    string `json:"default_region,omitempty"`
	PathStyle        bool   `json:"path_style"`
	NeedsAccountID   bool   `json:"needs_account_id"`
	NeedsRegion      bool   `json:"needs_region"`
	NeedsEndpoint    bool   `json:"needs_endpoint"`
}

StorageProvider is one provider preset from GET /api/v1/storage/providers.

type SupplyChainSettings added in v0.2.0

type SupplyChainSettings struct {
	App             string     `json:"app"`
	ScanEnabled     bool       `json:"scan_enabled"`
	ScanGate        string     `json:"scan_gate"`
	ServerEnabled   bool       `json:"server_enabled"`
	BuildAttest     bool       `json:"build_attest"`
	Scanner         string     `json:"scanner"`
	ScannerImage    string     `json:"scanner_image"`
	OverrideArmed   bool       `json:"override_armed"`
	OverrideReason  string     `json:"override_reason,omitempty"`
	OverrideExpires *time.Time `json:"override_expires_at,omitempty"`
}

SupplyChainSettings is GET /api/v1/apps/{name}/supply-chain's body.

type SupplyChainSettingsRequest added in v0.2.0

type SupplyChainSettingsRequest struct {
	ScanEnabled *bool   `json:"scan_enabled,omitempty"`
	ScanGate    *string `json:"scan_gate,omitempty"`
}

SupplyChainSettingsRequest is PUT .../supply-chain's body; nil fields stay unchanged.

type SweepPreviewEnvironmentsResult

type SweepPreviewEnvironmentsResult struct {
	Swept int `json:"swept"`
}

SweepPreviewEnvironmentsResult mirrors internal/api's sweepPreviewEnvironmentsResponse (preview_environments_sweep.go).

type SystemCacheApp

type SystemCacheApp struct {
	App            string `json:"app"`
	Domains        int    `json:"domains"`
	EnabledDomains int    `json:"enabled_domains"`
	Requests       uint64 `json:"requests"`
	CacheNumbers
}

SystemCacheApp is one app's row of the instance cache table.

type SystemCacheResource

type SystemCacheResource struct {
	Limits CacheLimits      `json:"limits"`
	Totals CacheNumbers     `json:"totals"`
	Series []CacheBucket    `json:"series"`
	Apps   []SystemCacheApp `json:"apps"`
}

SystemCacheResource is GET /api/v1/system/cache.

type SystemDoctorResource

type SystemDoctorResource struct {
	OK     bool                  `json:"ok"`
	Checks []DoctorCheckResource `json:"checks"`
}

SystemDoctorResource mirrors internal/api's systemDoctorResponse (internal/api/doctor.go): the "levelrail-cli doctor" preflight bundle, a superset of SystemStatusResource above. OK is false only when at least one check's Status is "fail"; "warn" doesn't affect it.

type SystemNetwork

type SystemNetwork struct {
	Name               string    `json:"name"`
	OwnerKind          string    `json:"owner_kind"`
	OwnerName          string    `json:"owner_name"`
	Subnets            []string  `json:"subnets"`
	AttachedContainers int       `json:"attached_containers"`
	Orphaned           bool      `json:"orphaned"`
	Removable          bool      `json:"removable"`
	Reason             string    `json:"reason"`
	Foreign            bool      `json:"foreign_instance"`
	CreatedAt          time.Time `json:"created_at"`
}

SystemNetwork is one product network.

type SystemNetworks

type SystemNetworks struct {
	Pool        NetworkPool     `json:"pool"`
	Networks    []SystemNetwork `json:"networks"`
	OrphanCount int             `json:"orphan_count"`
}

SystemNetworks is the GET /api/v1/system/networks resource.

type SystemNetworksPrune

type SystemNetworksPrune struct {
	DryRun     bool     `json:"dry_run"`
	Candidates []string `json:"candidates"`
	Removed    []string `json:"removed"`
}

SystemNetworksPrune is the POST /api/v1/system/networks/prune resource.

type SystemPruneResult added in v0.2.0

type SystemPruneResult struct {
	ContainersRemoved        []string `json:"containers_removed"`
	ContainersReclaimedBytes uint64   `json:"containers_reclaimed_bytes"`
	ImagesRemoved            []string `json:"images_removed"`
	ImagesReclaimedBytes     uint64   `json:"images_reclaimed_bytes"`
	VolumesRemoved           []string `json:"volumes_removed"`
	VolumesReclaimedBytes    uint64   `json:"volumes_reclaimed_bytes"`
	BuildCacheReclaimedBytes uint64   `json:"build_cache_reclaimed_bytes"`
	Errors                   []string `json:"errors,omitempty"`
}

SystemPruneResult mirrors internal/api's systemPruneResponse (internal/api/system_prune.go): everything POST /system/prune removed and how much space came back, per resource kind, plus any per-stage error that didn't stop the rest.

type SystemRestart added in v0.2.0

type SystemRestart struct {
	BootID    string `json:"boot_id"`
	Supported bool   `json:"supported"`
	Pending   bool   `json:"pending"`
	Reason    string `json:"reason,omitempty"`
	Hint      string `json:"hint,omitempty"`
}

SystemRestart is the /api/v1/system/restart resource.

type SystemStatusResource

type SystemStatusResource struct {
	SecretsConfigured   bool   `json:"secrets_configured"`
	TelemetryConfigured bool   `json:"telemetry_configured"`
	AlertsConfigured    bool   `json:"alerts_configured"`
	DataDirTotalBytes   int64  `json:"data_dir_total_bytes,omitempty"`
	DataDirFreeBytes    int64  `json:"data_dir_free_bytes,omitempty"`
	DockerConnected     bool   `json:"docker_connected"`
	DockerError         string `json:"docker_error,omitempty"`
}

SystemStatusResource mirrors internal/api's systemStatusResponse (internal/api/status.go): DockerConnected/DockerError are this control plane's own local Docker daemon reachability, not a per-node signal (see docker_connected's own doc comment on internal/api/status.go for why: multi-node Docker reachability forwarding isn't wired yet).

type TagAppResource added in v0.2.0

type TagAppResource struct {
	Name string `json:"name"`
}

TagAppResource mirrors internal/api's tagAppResource: GET /api/v1/tags/{id}/apps' wire shape.

type TagResource added in v0.2.0

type TagResource struct {
	ID        string `json:"id"`
	Name      string `json:"name"`
	CreatedAt string `json:"created_at,omitempty"`
}

TagResource mirrors internal/api's tagResource (internal/api/tags.go).

type TakeoverCheck

type TakeoverCheck struct {
	ID     string       `json:"id"`
	Title  string       `json:"title"`
	Status string       `json:"status"`
	Detail string       `json:"detail,omitempty"`
	Items  []string     `json:"items,omitempty"`
	Fix    *TakeoverFix `json:"fix,omitempty"`
}

TakeoverCheck is one preflight item.

type TakeoverDomain

type TakeoverDomain struct {
	Domain  string `json:"domain"`
	App     string `json:"app"`
	Healthy bool   `json:"healthy"`
	Detail  string `json:"detail,omitempty"`
	DNS     string `json:"dns"`
	Cert    string `json:"certificate"`
}

TakeoverDomain is one domain the takeover has to keep serving.

type TakeoverDomainCheck

type TakeoverDomainCheck struct {
	Domain    string `json:"domain"`
	OK        bool   `json:"ok"`
	Status    int    `json:"status,omitempty"`
	Delivered bool   `json:"delivered"`
	Detail    string `json:"detail,omitempty"`
}

TakeoverDomainCheck is the outcome of verifying one domain over HTTPS.

type TakeoverFix

type TakeoverFix struct {
	Summary string             `json:"summary"`
	Action  *TakeoverFixAction `json:"action,omitempty"`
}

TakeoverFix is the remedy for a warning or blocking check.

type TakeoverFixAction

type TakeoverFixAction struct {
	Kind  string `json:"kind"`
	Label string `json:"label"`
	API   string `json:"api,omitempty"`
	Value string `json:"value,omitempty"`
}

TakeoverFixAction is the one primary thing a fix offers.

type TakeoverPlan

type TakeoverPlan struct {
	Verdict       string             `json:"verdict"`
	Checks        []TakeoverCheck    `json:"checks"`
	Steps         []TakeoverPlanStep `json:"steps"`
	Domains       []TakeoverDomain   `json:"domains"`
	Rollback      []string           `json:"rollback"`
	WindowSeconds int                `json:"window_seconds"`
	TargetHTTP    string             `json:"target_http"`
	TargetHTTPS   string             `json:"target_https"`
	CurrentHTTP   string             `json:"current_http"`
	CurrentHTTPS  string             `json:"current_https"`
	ProxyKind     string             `json:"proxy_kind,omitempty"`
	ProxyNames    []string           `json:"proxy_containers"`
	CheckedAt     string             `json:"checked_at"`
}

TakeoverPlan is the preflight result plus the exact steps.

type TakeoverPlanStep

type TakeoverPlanStep struct {
	ID         string `json:"id"`
	Title      string `json:"title"`
	Detail     string `json:"detail"`
	Reversible bool   `json:"reversible"`
}

TakeoverPlanStep is one step a run would take.

type TakeoverRun

type TakeoverRun struct {
	ID            string                `json:"id"`
	State         string                `json:"state"`
	Actor         string                `json:"actor,omitempty"`
	TargetHTTP    string                `json:"target_http"`
	TargetHTTPS   string                `json:"target_https"`
	Steps         []TakeoverStep        `json:"steps"`
	Verify        []TakeoverDomainCheck `json:"verify"`
	Error         string                `json:"error,omitempty"`
	WindowSeconds int                   `json:"window_seconds"`
	DeadlineAt    time.Time             `json:"deadline_at"`
	CreatedAt     time.Time             `json:"created_at"`
	UpdatedAt     time.Time             `json:"updated_at"`
	Rollbackable  bool                  `json:"rollbackable"`
	InFlight      bool                  `json:"in_flight"`
}

TakeoverRun is one takeover and, when undone, its rollback.

func (TakeoverRun) Settled

func (r TakeoverRun) Settled() bool

Settled reports whether the run needs nothing more from a poller.

type TakeoverStart

type TakeoverStart struct {
	Confirm         bool `json:"confirm"`
	AcceptUnmanaged bool `json:"accept_unmanaged"`
}

TakeoverStart is the body of POST takeover/runs.

type TakeoverStartResult

type TakeoverStartResult struct {
	DryRun  bool          `json:"dry_run"`
	Created bool          `json:"created"`
	Plan    *TakeoverPlan `json:"plan,omitempty"`
	Run     *TakeoverRun  `json:"run,omitempty"`
	Error   string        `json:"error,omitempty"`
}

TakeoverStartResult is the answer to POST takeover/runs.

type TakeoverStatus

type TakeoverStatus struct {
	Plan TakeoverPlan `json:"plan"`
	Run  *TakeoverRun `json:"run"`
}

TakeoverStatus is GET takeover/plan: the plan and the latest run.

type TakeoverStep

type TakeoverStep struct {
	ID         string    `json:"id"`
	Title      string    `json:"title"`
	State      string    `json:"state"`
	Detail     string    `json:"detail,omitempty"`
	StartedAt  time.Time `json:"started_at"`
	FinishedAt time.Time `json:"finished_at"`
}

TakeoverStep is one timed entry of a run.

type TargetProtectionResource added in v0.2.0

type TargetProtectionResource struct {
	TargetID   string `json:"target_id"`
	Level      string `json:"level"`
	ObjectLock bool   `json:"object_lock"`
	LockMode   string `json:"lock_mode,omitempty"`
	Versioning string `json:"versioning,omitempty"`
	CanDelete  bool   `json:"can_delete"`
	Warning    string `json:"warning,omitempty"`
	ProbeError string `json:"probe_error,omitempty"`
	CheckedAt  string `json:"checked_at"`
}

TargetProtectionResource mirrors internal/api's targetProtectionResource.

type TeamEventResource added in v0.2.0

type TeamEventResource struct {
	ID        string `json:"id"`
	ActorName string `json:"actor_name"`
	Action    string `json:"action"`
	Subject   string `json:"subject"`
	Detail    string `json:"detail"`
	CreatedAt string `json:"created_at"`
}

TeamEventResource mirrors internal/api's teamEventResource.

type TeamInviteResource added in v0.2.0

type TeamInviteResource struct {
	ID        string `json:"id"`
	TeamID    string `json:"team_id"`
	Email     string `json:"email"`
	Role      string `json:"role"`
	CreatedAt string `json:"created_at"`
	ExpiresAt string `json:"expires_at"`
	Status    string `json:"status"`
	Token     string `json:"token,omitempty"`
	Link      string `json:"link,omitempty"`
}

TeamInviteResource mirrors internal/api's teamInviteResource.

type TeamMemberResource added in v0.2.0

type TeamMemberResource struct {
	UserID      string `json:"user_id"`
	Email       string `json:"email"`
	DisplayName string `json:"display_name"`
	Role        string `json:"role"`
	CreatedAt   string `json:"created_at"`
}

TeamMemberResource mirrors internal/api's teamMemberResource.

type TeamResource added in v0.2.0

type TeamResource struct {
	ID          string `json:"id"`
	Name        string `json:"name"`
	Default     bool   `json:"default"`
	Role        string `json:"role"`
	MemberCount int    `json:"member_count"`
	CreatedAt   string `json:"created_at"`
}

TeamResource mirrors internal/api's teamResource.

type TeamRoleResource added in v0.2.0

type TeamRoleResource struct {
	Name      string   `json:"name"`
	Abilities []string `json:"abilities"`
}

TeamRoleResource mirrors internal/api's teamRoleResource.

type TemplateFinding

type TemplateFinding struct {
	Code     string   `json:"code"`
	Severity string   `json:"severity"`
	Services []string `json:"services,omitempty"`
	Detail   string   `json:"detail,omitempty"`
	Message  string   `json:"message"`
}

TemplateFinding mirrors internal/catalog's Finding.

type TemplateInstallRequest added in v0.2.0

type TemplateInstallRequest struct {
	Name    string            `json:"name,omitempty"`
	Env     map[string]string `json:"env,omitempty"`
	Domains map[string]string `json:"domains,omitempty"`
}

TemplateInstallRequest is POST /api/v1/service-templates/{id}/install's body.

type TemplateProtection

type TemplateProtection struct {
	Code  string `json:"code"`
	Label string `json:"label"`
}

TemplateProtection mirrors internal/catalog's Protection.

type TemplateRequirements

type TemplateRequirements struct {
	Level       string               `json:"level"`
	Findings    []TemplateFinding    `json:"findings"`
	Protections []TemplateProtection `json:"protections"`
}

TemplateRequirements mirrors internal/catalog's Requirements.

type TestEndpointRequest

type TestEndpointRequest struct {
	BaseURL    string `json:"base_url"`
	APIType    string `json:"api_type,omitempty"`
	Credential string `json:"credential,omitempty"`
}

TestEndpointRequest probes an endpoint before it is registered.

type TestNotificationChannelRequest

type TestNotificationChannelRequest struct {
	Kind      string `json:"kind"`
	NotifyURL string `json:"notify_url"`
}

TestNotificationChannelRequest mirrors internal/api's testNotificationChannelRequest.

type TimelineDeploy

type TimelineDeploy struct {
	ID            string     `json:"id"`
	App           string     `json:"app"`
	Status        string     `json:"status"`
	Trigger       string     `json:"trigger"`
	Environment   string     `json:"environment"`
	CommitSHA     string     `json:"commit_sha"`
	CommitMessage string     `json:"commit_message"`
	Author        string     `json:"author"`
	Strategy      string     `json:"strategy"`
	ProjectID     string     `json:"project_id"`
	NodeID        string     `json:"node_id"`
	StartedAt     time.Time  `json:"started_at"`
	FinishedAt    *time.Time `json:"finished_at"`
	DurationMS    *int64     `json:"duration_ms"`
	RollbackOf    *string    `json:"rollback_of"`
	IsLive        bool       `json:"is_live"`
}

TimelineDeploy is one deploy bar of GET /api/v1/deployments/timeline.

type TimelineItem added in v0.2.0

type TimelineItem struct {
	ID     string       `json:"id"`
	At     string       `json:"at"`
	Kind   string       `json:"kind"`
	Status string       `json:"status"`
	Actor  string       `json:"actor"`
	Title  string       `json:"title"`
	Detail string       `json:"detail,omitempty"`
	Ref    *TimelineRef `json:"ref,omitempty"`
}

TimelineItem mirrors internal/api's timelineItem.

type TimelinePage

type TimelinePage struct {
	Since      time.Time        `json:"since"`
	Until      time.Time        `json:"until"`
	Items      []TimelineDeploy `json:"items"`
	NextCursor string           `json:"next_cursor"`
}

TimelinePage is one page of the fleet deploy timeline.

type TimelineRef added in v0.2.0

type TimelineRef struct {
	Type string `json:"type"`
	ID   string `json:"id"`
}

TimelineRef points at the record behind a timeline item.

type TimelineResponse added in v0.2.0

type TimelineResponse struct {
	Items      []TimelineItem `json:"items"`
	NextCursor string         `json:"next_cursor,omitempty"`
}

TimelineResponse mirrors internal/api's timelineResponse.

type TraceListOptions

type TraceListOptions struct {
	From       string
	To         string
	MinMillis  int
	ErrorsOnly bool
	Limit      int
}

TraceListOptions are the filters of ListTraces.

type TraceSpan

type TraceSpan struct {
	TraceID       string          `json:"trace_id"`
	SpanID        string          `json:"span_id"`
	ParentID      string          `json:"parent_id,omitempty"`
	Name          string          `json:"name"`
	Kind          int             `json:"kind"`
	StartNs       int64           `json:"start_ns"`
	DurationNs    int64           `json:"duration_ns"`
	StatusCode    int             `json:"status_code"`
	StatusMessage string          `json:"status_message,omitempty"`
	Attributes    json.RawMessage `json:"attributes,omitempty"`
}

TraceSpan mirrors internal/api's spanResource.

type TraceSummary

type TraceSummary struct {
	TraceID    string `json:"trace_id"`
	RootName   string `json:"root_name"`
	StartNs    int64  `json:"start_ns"`
	DurationNs int64  `json:"duration_ns"`
	Spans      int    `json:"spans"`
	Errors     int    `json:"errors"`
}

TraceSummary mirrors internal/telemetry's TraceSummary.

type TracingResource

type TracingResource struct {
	Enabled  bool              `json:"enabled"`
	Endpoint string            `json:"endpoint"`
	Header   string            `json:"header"`
	Key      string            `json:"key,omitempty"`
	Env      map[string]string `json:"env,omitempty"`
}

TracingResource mirrors internal/api's tracingResource.

type TrafficCertCounts added in v0.2.0

type TrafficCertCounts struct {
	WindowDays     int `json:"window_days"`
	Expiring       int `json:"expiring"`
	Expired        int `json:"expired"`
	RenewalFailing int `json:"renewal_failing"`
}

TrafficCertCounts mirrors internal/api's trafficCertCounts.

type TrafficDomainCounts added in v0.2.0

type TrafficDomainCounts struct {
	Total          int `json:"total"`
	Live           int `json:"live"`
	Waiting        int `json:"waiting"`
	Propagating    int `json:"propagating"`
	NeedsAttention int `json:"needs_attention"`
	NotSetUp       int `json:"not_set_up"`
	Paused         int `json:"paused"`
	Unknown        int `json:"unknown"`
}

TrafficDomainCounts mirrors internal/api's trafficDomainCounts.

type TrafficLabel

type TrafficLabel struct {
	Label    string  `json:"label"`
	Requests float64 `json:"requests"`
	Share    float64 `json:"share"`
}

TrafficLabel is one referrer host or country with its request share.

type TrafficLatency

type TrafficLatency struct {
	P50Ms float64 `json:"p50_ms"`
	P95Ms float64 `json:"p95_ms"`
	P99Ms float64 `json:"p99_ms"`
}

TrafficLatency is a latency percentile triple in milliseconds.

type TrafficReplica

type TrafficReplica struct {
	Upstream       string  `json:"upstream"`
	Requests       float64 `json:"requests"`
	RatePerSec     float64 `json:"rate_per_sec"`
	ErrorRate4xx   float64 `json:"error_rate_4xx"`
	ErrorRate5xx   float64 `json:"error_rate_5xx"`
	UpstreamErrors float64 `json:"upstream_errors"`
	TrafficLatency
}

TrafficReplica is one upstream's RED figures.

type TrafficRoute

type TrafficRoute struct {
	Route        string  `json:"route"`
	Requests     float64 `json:"requests"`
	ErrorRate4xx float64 `json:"error_rate_4xx"`
	ErrorRate5xx float64 `json:"error_rate_5xx"`
	AvgMs        float64 `json:"avg_ms"`
}

TrafficRoute is one normalized route template's totals.

type TrafficSLO

type TrafficSLO struct {
	Objective       string  `json:"objective"`
	Target          float64 `json:"target"`
	LatencyMs       float64 `json:"latency_ms,omitempty"`
	BurnRate        float64 `json:"burn_rate"`
	BudgetRemaining float64 `json:"budget_remaining"`
}

TrafficSLO is the app's SLO error-budget burn over the window.

type TrafficSample

type TrafficSample struct {
	Time       time.Time `json:"time"`
	Route      string    `json:"route"`
	Method     string    `json:"method"`
	Status     int       `json:"status"`
	DurationMS float64   `json:"duration_ms"`
	Upstream   string    `json:"upstream,omitempty"`
	RequestID  string    `json:"request_id,omitempty"`
}

TrafficSample is one slow or failed request.

type TrafficShield

type TrafficShield struct {
	Blocked  float64               `json:"blocked"`
	ByReason []TrafficShieldReason `json:"by_reason"`
}

TrafficShield is the abuse shield's blocked-request counts over the window.

type TrafficShieldReason

type TrafficShieldReason struct {
	Reason string  `json:"reason"`
	Count  float64 `json:"count"`
}

TrafficShieldReason is how many requests the abuse shield turned away for one reason.

type TrafficStatusClasses

type TrafficStatusClasses struct {
	Status2xx float64 `json:"2xx"`
	Status3xx float64 `json:"3xx"`
	Status4xx float64 `json:"4xx"`
	Status5xx float64 `json:"5xx"`
}

TrafficStatusClasses counts responses by status class.

type TrafficSummary added in v0.2.0

type TrafficSummary struct {
	GeneratedAt         time.Time           `json:"generated_at"`
	Domains             TrafficDomainCounts `json:"domains"`
	Certificates        TrafficCertCounts   `json:"certificates"`
	DomainsNotResolving int                 `json:"domains_not_resolving"`
	ZonesNotDelegated   *int                `json:"zones_not_delegated,omitempty"`
	RoutesWithErrors    *int                `json:"routes_with_errors,omitempty"`
	Attention           int                 `json:"attention"`
	Unavailable         []string            `json:"unavailable,omitempty"`
}

TrafficSummary is GET /api/v1/traffic/summary's body.

type TriggerBackupRequest

type TriggerBackupRequest struct {
	TargetID string `json:"target_id"`
}

TriggerBackupRequest mirrors internal/api's triggerBackupRequest.

type TriggerBaseBackupRequest added in v0.2.0

type TriggerBaseBackupRequest struct {
	TargetID string `json:"target_id"`
}

TriggerBaseBackupRequest mirrors internal/api's triggerBaseBackupRequest.

type TriggerCloneRestoreRequest

type TriggerCloneRestoreRequest struct {
	BackupID  string            `json:"backup_id"`
	NewName   string            `json:"new_name"`
	Version   string            `json:"version,omitempty"`
	ProjectID string            `json:"project_id,omitempty"`
	Resources *ServiceResources `json:"resources,omitempty"`
}

TriggerCloneRestoreRequest mirrors internal/api's cloneRestoreRequest.

type TriggerPITRRestoreRequest added in v0.2.0

type TriggerPITRRestoreRequest struct {
	BaseBackupID string `json:"base_backup_id"`
	TargetTime   string `json:"target_time"`
}

TriggerPITRRestoreRequest mirrors internal/api's triggerPITRRestoreRequest.

type TriggerRestoreRequest

type TriggerRestoreRequest struct {
	BackupID string `json:"backup_id"`
}

TriggerRestoreRequest mirrors internal/api's triggerRestoreRequest.

type TriggerVolumeCloneRestoreRequest

type TriggerVolumeCloneRestoreRequest struct {
	BackupID      string `json:"backup_id"`
	NewVolumeName string `json:"new_volume_name,omitempty"`
}

TriggerVolumeCloneRestoreRequest mirrors internal/api's volumeCloneRestoreRequest.

type TrustRequest

type TrustRequest struct {
	Prog, Profile, URL string
	Info               InstanceInfo
}

TrustRequest is what a first connect under an unpinned profile asks the operator to confirm.

type TrustedDevice added in v0.2.0

type TrustedDevice struct {
	ID         string    `json:"id"`
	Label      string    `json:"label"`
	IP         string    `json:"ip"`
	CreatedAt  time.Time `json:"created_at"`
	LastUsedAt time.Time `json:"last_used_at"`
	ExpiresAt  time.Time `json:"expires_at"`
	Current    bool      `json:"current"`
}

TrustedDevice mirrors internal/api's trustedDeviceResource.

type UnderAttackRequest

type UnderAttackRequest struct {
	Minutes int `json:"minutes,omitempty"`
}

UnderAttackRequest is the body of POST .../shield/under-attack.

type UndoResult added in v0.2.0

type UndoResult struct {
	AutomationRun
	Reverted []string `json:"reverted"`
	Skipped  []string `json:"skipped,omitempty"`
}

UndoResult is the response of an undo.

type UnmanagedContainerUse added in v0.2.0

type UnmanagedContainerUse struct {
	Name        string  `json:"name"`
	MemoryBytes float64 `json:"memory_bytes"`
}

UnmanagedContainerUse is one running container the platform does not manage.

type UpdateAIControlRequest added in v0.2.0

type UpdateAIControlRequest struct {
	Mode            string   `json:"mode"`
	AllowedEnvKinds []string `json:"allowed_env_kinds"`
}

UpdateAIControlRequest is the PUT /api/v1/settings/ai-control body.

type UpdateAlertRuleRequest added in v0.2.0

type UpdateAlertRuleRequest = CreateAlertRuleRequest

UpdateAlertRuleRequest is the same shape as CreateAlertRuleRequest: handleUpdateAlertRule reuses ruleResource.toRule for both, the same "one request type for create and update" shape ScheduledTaskRequest and FeatureFlagRequest already use for their own resources.

type UpdateBackupTargetRequest

type UpdateBackupTargetRequest struct {
	Name            string `json:"name"`
	Provider        string `json:"provider"`
	Endpoint        string `json:"endpoint,omitempty"`
	Region          string `json:"region,omitempty"`
	Bucket          string `json:"bucket"`
	AccessKeyID     string `json:"access_key_id,omitempty"`
	SecretAccessKey string `json:"secret_access_key,omitempty"`
}

UpdateBackupTargetRequest mirrors internal/api's updateBackupTargetRequest. Blank AccessKeyID/SecretAccessKey keep the target's existing stored credentials; set together, they rotate them.

type UpdateCloudflareDNSRequest

type UpdateCloudflareDNSRequest struct {
	Enabled bool   `json:"enabled"`
	Token   string `json:"token,omitempty"`
}

UpdateCloudflareDNSRequest mirrors internal/api's updateCloudflareDNSRequest. Token empty on an update means "leave the currently stored token unchanged".

type UpdateCloudflareTunnelRequest

type UpdateCloudflareTunnelRequest struct {
	Enabled bool   `json:"enabled"`
	Token   string `json:"token,omitempty"`
}

UpdateCloudflareTunnelRequest mirrors internal/api's updateCloudflareTunnelRequest. Token empty on an update means "leave the currently stored token unchanged".

type UpdateDNSRecordRequest added in v0.2.0

type UpdateDNSRecordRequest struct {
	Original DNSRecordResource `json:"original"`
	Record   DNSRecordResource `json:"record"`
}

UpdateDNSRecordRequest mirrors internal/api's updateDNSRecordRequest: PUT .../dns-records's body. Original must exactly match an existing record (name, type, and value all identical); Record is what it becomes.

type UpdateDockerGuardRequest added in v0.2.0

type UpdateDockerGuardRequest struct {
	Mode string `json:"mode"`
}

UpdateDockerGuardRequest is the PUT /api/v1/system/docker-guard body.

type UpdateEnvironmentRequest

type UpdateEnvironmentRequest struct {
	Protected bool `json:"protected"`
}

UpdateEnvironmentRequest mirrors internal/api's updateEnvironmentRequest (PATCH /api/v1/environments/{id}).

type UpdateEventWebhookRequest

type UpdateEventWebhookRequest struct {
	Name    *string   `json:"name,omitempty"`
	URL     *string   `json:"url,omitempty"`
	Enabled *bool     `json:"enabled,omitempty"`
	Events  *[]string `json:"events,omitempty"`
}

UpdateEventWebhookRequest is the PATCH body; nil fields stay unchanged.

type UpdateExportDestinationRequest added in v0.2.0

type UpdateExportDestinationRequest struct {
	Name     *string            `json:"name,omitempty"`
	Endpoint *string            `json:"endpoint,omitempty"`
	Enabled  *bool              `json:"enabled,omitempty"`
	Apps     *[]string          `json:"apps,omitempty"`
	MinLevel *string            `json:"min_level,omitempty"`
	Options  *ExportOptions     `json:"options,omitempty"`
	Headers  *map[string]string `json:"headers,omitempty"`
	HMACKey  *string            `json:"hmac_key,omitempty"`
}

UpdateExportDestinationRequest is a partial update; nil fields are kept.

type UpdateMeshSettingsRequest added in v0.2.0

type UpdateMeshSettingsRequest struct {
	Enabled bool `json:"enabled"`
	Force   bool `json:"force,omitempty"`
}

UpdateMeshSettingsRequest is the PUT /api/v1/mesh/settings body.

type UpdateNetworkShareRequest added in v0.2.0

type UpdateNetworkShareRequest struct {
	Name         string `json:"name"`
	Protocol     string `json:"protocol"`
	Host         string `json:"host"`
	RemotePath   string `json:"remote_path"`
	MountOptions string `json:"mount_options,omitempty"`
	Username     string `json:"username,omitempty"`
	Password     string `json:"password,omitempty"`
}

UpdateNetworkShareRequest mirrors internal/api's updateNetworkShareRequest. A blank Password keeps the share's existing stored password; a non-blank one rotates it.

type UpdateNotificationChannelRequest added in v0.2.0

type UpdateNotificationChannelRequest = CreateNotificationChannelRequest

UpdateNotificationChannelRequest is the same shape as CreateNotificationChannelRequest: handleUpdateNotificationChannel reuses createNotificationChannelRequest.toChannel for both, the same "one request type for create and update" shape ScheduledTaskRequest and FeatureFlagRequest already use for their own resources.

type UpdateOAuthProviderSettingsRequest added in v0.2.0

type UpdateOAuthProviderSettingsRequest struct {
	Enabled            bool   `json:"enabled"`
	ClientID           string `json:"client_id"`
	ClientSecret       string `json:"client_secret,omitempty"`
	AllowedEmailDomain string `json:"allowed_email_domain"`
	IssuerURL          string `json:"issuer_url"`
	DisplayName        string `json:"display_name"`
}

UpdateOAuthProviderSettingsRequest mirrors internal/api's updateOAuthProviderSettingsRequest: PUT /api/v1/settings/oauth/{provider}'s request body. An empty ClientSecret leaves the currently stored secret unchanged.

type UpdatePreflight added in v0.2.0

type UpdatePreflight struct {
	CurrentVersion  string         `json:"current_version"`
	LatestVersion   *string        `json:"latest_version"`
	UpdateAvailable bool           `json:"update_available"`
	ReleaseURL      *string        `json:"release_url"`
	ReleaseNotes    string         `json:"release_notes"`
	Checks          []UpgradeCheck `json:"checks"`
	Blocked         bool           `json:"blocked"`
	Waiting         bool           `json:"waiting"`
	UpgradeCommand  string         `json:"upgrade_command"`
	RollbackCommand string         `json:"rollback_command"`
	ReleaseKind     string         `json:"release_kind,omitempty"`
	Channel         string         `json:"channel,omitempty"`
	Edge            *EdgeGuidance  `json:"edge,omitempty"`
}

UpdatePreflight is GET /api/v1/updates/preflight's response.

type UpdateRegistryCredentialRequest

type UpdateRegistryCredentialRequest struct {
	Name         string     `json:"name"`
	RegistryHost string     `json:"registry_host"`
	Username     string     `json:"username"`
	Password     string     `json:"password,omitempty"`
	ExpiresAt    *time.Time `json:"expires_at,omitempty"`
}

UpdateRegistryCredentialRequest mirrors internal/api's updateRegistryCredentialRequest. A blank Password keeps the credential's existing stored password; a non-blank one rotates it.

type UpdateRegistrySettingsRequest

type UpdateRegistrySettingsRequest struct {
	Enabled bool   `json:"enabled"`
	Host    string `json:"host,omitempty"`
}

UpdateRegistrySettingsRequest mirrors internal/api's updateRegistrySettingsRequest.

type UpdateRoute53DNSRequest added in v0.2.0

type UpdateRoute53DNSRequest struct {
	Enabled         bool   `json:"enabled"`
	Region          string `json:"region,omitempty"`
	HostedZoneID    string `json:"hosted_zone_id,omitempty"`
	AccessKeyID     string `json:"access_key_id,omitempty"`
	SecretAccessKey string `json:"secret_access_key,omitempty"`
}

UpdateRoute53DNSRequest mirrors internal/api's updateRoute53DNSRequest. AccessKeyID/SecretAccessKey empty on an update means "leave the currently stored credential unchanged"; the two are set together or not at all.

type UpdateServerProfileRequest

type UpdateServerProfileRequest struct {
	Profile string `json:"profile"`
	Confirm bool   `json:"confirm,omitempty"`
	DryRun  bool   `json:"dry_run,omitempty"`
}

UpdateServerProfileRequest is the PUT /api/v1/settings/server-profile body.

type UpdateSettingsResource added in v0.2.0

type UpdateSettingsResource struct {
	Channel           string `json:"channel"`
	AutoUpdateEnabled bool   `json:"auto_update_enabled"`
}

UpdateSettingsResource mirrors internal/api's updateSettingsResource (GET/PUT /api/v1/updates/settings): which release channel to compare against and whether to check for it in the background.

type UpdateStorageBucketRequest

type UpdateStorageBucketRequest struct {
	Public        *bool  `json:"public,omitempty"`
	QuotaBytes    *int64 `json:"quota_bytes,omitempty"`
	LifecycleDays *int   `json:"lifecycle_days,omitempty"`
}

UpdateStorageBucketRequest changes only the fields that are set.

type UpdateUserAbilitiesRequest

type UpdateUserAbilitiesRequest struct {
	Abilities []string `json:"abilities,omitempty"`
	Role      string   `json:"role,omitempty"`
}

UpdateUserAbilitiesRequest mirrors internal/api's updateUserAbilitiesRequest, same Role/Abilities precedence as CreateUserRequest.

type UpdateVaultSettingsRequest added in v0.2.0

type UpdateVaultSettingsRequest struct {
	Enabled    bool   `json:"enabled"`
	Address    string `json:"address"`
	AuthMethod string `json:"auth_method"`
	Namespace  string `json:"namespace,omitempty"`
	RoleID     string `json:"role_id,omitempty"`
	MountPath  string `json:"mount_path,omitempty"`
	Credential string `json:"credential,omitempty"`
}

UpdateVaultSettingsRequest mirrors internal/api's updateVaultSettingsRequest. Credential empty on an update means "leave the currently stored credential unchanged".

type UpdatesResource

type UpdatesResource struct {
	CurrentVersion  string  `json:"current_version"`
	LatestVersion   *string `json:"latest_version"`
	UpdateAvailable bool    `json:"update_available"`
	ReleaseURL      *string `json:"release_url"`
	PublishedAt     *string `json:"published_at"`
	ReleaseKind     string  `json:"release_kind,omitempty"`
	Channel         string  `json:"channel,omitempty"`
	Image           *string `json:"image,omitempty"`
}

UpdatesResource mirrors internal/api's updateStatusResource (internal/api/updates.go): the running version compared against GitHub's latest published release. LatestVersion/ReleaseURL/PublishedAt are all nil when no release has ever been published.

type UpgradeBackupNowResult added in v0.2.0

type UpgradeBackupNowResult struct {
	Backup struct {
		Name      string `json:"name"`
		SizeBytes int64  `json:"size_bytes"`
		CreatedAt string `json:"created_at"`
	} `json:"backup"`
	Preflight UpdatePreflight `json:"preflight"`
}

UpgradeBackupNowResult is POST /api/v1/updates/backup-now's response.

type UpgradeCheck added in v0.2.0

type UpgradeCheck struct {
	Code      string      `json:"code"`
	Name      string      `json:"name"`
	Status    string      `json:"status"`
	Message   string      `json:"message"`
	Kind      string      `json:"kind"`
	Retryable bool        `json:"retryable"`
	Protects  string      `json:"protects"`
	Hint      string      `json:"hint"`
	Fix       *UpgradeFix `json:"fix"`
}

UpgradeCheck is one preflight result from GET /api/v1/updates/preflight.

type UpgradeFix added in v0.2.0

type UpgradeFix struct {
	Action string `json:"action"`
}

UpgradeFix is the action that can clear a preflight check.

type UpgradeHistory added in v0.2.0

type UpgradeHistory struct {
	CurrentVersion string               `json:"current_version"`
	Unacknowledged int                  `json:"unacknowledged"`
	Entries        []UpgradeHistoryItem `json:"entries"`
	AgentChanges   []AgentVersionChange `json:"agent_changes"`
}

UpgradeHistory is GET /api/v1/updates/history's response.

type UpgradeHistoryItem added in v0.2.0

type UpgradeHistoryItem struct {
	ID                string  `json:"id"`
	Kind              string  `json:"kind"`
	FromVersion       string  `json:"from_version"`
	ToVersion         string  `json:"to_version"`
	Channel           string  `json:"channel"`
	SchemaBefore      *int    `json:"schema_before"`
	SchemaAfter       *int    `json:"schema_after"`
	SchemaMoved       bool    `json:"schema_moved"`
	OccurredAt        string  `json:"occurred_at"`
	Initiator         string  `json:"initiator"`
	Method            string  `json:"method"`
	BackupName        string  `json:"backup_name"`
	Health            string  `json:"health"`
	Notes             string  `json:"notes"`
	NotesState        string  `json:"notes_state"`
	ReleaseURL        string  `json:"release_url"`
	CompareURL        string  `json:"compare_url"`
	Acknowledged      bool    `json:"acknowledged"`
	AckedBy           string  `json:"acked_by"`
	AckedAt           *string `json:"acked_at"`
	RollbackAvailable bool    `json:"rollback_available"`
}

UpgradeHistoryItem is one recorded control plane version transition.

type UpgradePolicy added in v0.2.0

type UpgradePolicy struct {
	Mode                  string         `json:"mode"`
	Effective             string         `json:"effective"`
	WindowCron            string         `json:"window_cron"`
	WindowDurationMinutes int            `json:"window_duration_minutes"`
	Timezone              string         `json:"timezone"`
	MinReleaseAgeDays     int            `json:"min_release_age_days"`
	NotifyChannelIDs      []string       `json:"notify_channel_ids"`
	Paused                bool           `json:"paused"`
	UpdatedBy             string         `json:"updated_by"`
	UpdatedAt             string         `json:"updated_at"`
	Decision              string         `json:"decision"`
	DecisionTag           string         `json:"decision_tag"`
	DecisionAt            string         `json:"decision_at"`
	ServerTimezone        string         `json:"server_timezone"`
	NextWindow            *UpgradeWindow `json:"next_window"`
}

UpgradePolicy is the automatic upgrade policy.

type UpgradePolicyRequest added in v0.2.0

type UpgradePolicyRequest struct {
	Mode                  string   `json:"mode"`
	WindowCron            string   `json:"window_cron"`
	WindowDurationMinutes int      `json:"window_duration_minutes"`
	Timezone              string   `json:"timezone"`
	MinReleaseAgeDays     int      `json:"min_release_age_days"`
	NotifyChannelIDs      []string `json:"notify_channel_ids"`
	Paused                bool     `json:"paused"`
}

UpgradePolicyRequest is PUT /api/v1/updates/auto's body.

type UpgradeSchedule added in v0.2.0

type UpgradeSchedule struct {
	ID            string   `json:"id"`
	TargetVersion string   `json:"target_version"`
	Source        string   `json:"source"`
	Mode          string   `json:"mode"`
	State         string   `json:"state"`
	RunAt         string   `json:"run_at"`
	RetryUntil    string   `json:"retry_until"`
	Timezone      string   `json:"timezone"`
	Acked         []string `json:"acked"`
	MajorAcked    bool     `json:"major_acked"`
	CreatedBy     string   `json:"created_by"`
	CreatedAt     string   `json:"created_at"`
	CheckCount    int      `json:"check_count"`
	LastCheckAt   string   `json:"last_check_at"`
	LastReason    string   `json:"last_reason"`
	FiredAt       string   `json:"fired_at"`
	FinishedAt    string   `json:"finished_at"`
}

UpgradeSchedule is one scheduled control plane upgrade.

type UpgradeScheduleRequest added in v0.2.0

type UpgradeScheduleRequest struct {
	Target           string   `json:"target,omitempty"`
	At               string   `json:"at,omitempty"`
	AtLocal          string   `json:"at_local,omitempty"`
	Timezone         string   `json:"timezone,omitempty"`
	Window           bool     `json:"window,omitempty"`
	Ack              []string `json:"ack,omitempty"`
	AcknowledgeMajor bool     `json:"acknowledge_major,omitempty"`
	Replace          bool     `json:"replace,omitempty"`
}

UpgradeScheduleRequest is POST /api/v1/updates/schedule's body.

type UpgradeScheduleStatus added in v0.2.0

type UpgradeScheduleStatus struct {
	Available      bool              `json:"available"`
	ServerTimezone string            `json:"server_timezone"`
	Now            string            `json:"now"`
	Active         *UpgradeSchedule  `json:"active"`
	Recent         []UpgradeSchedule `json:"recent"`
	NextWindow     *UpgradeWindow    `json:"next_window"`
}

UpgradeScheduleStatus is GET /api/v1/updates/schedule's response.

type UpgradeWindow added in v0.2.0

type UpgradeWindow struct {
	Start  string `json:"start"`
	End    string `json:"end"`
	Source string `json:"source"`
	Active bool   `json:"active"`
}

UpgradeWindow is one opening of a maintenance window.

type UsageBudgets added in v0.2.0

type UsageBudgets struct {
	Budgets  []usagecost.BudgetStatus `json:"budgets"`
	Currency string                   `json:"currency"`
}

UsageBudgets is GET /api/v1/usage/budgets.

type UsageNodeInfo added in v0.2.0

type UsageNodeInfo struct {
	NodeID         string  `json:"node_id"`
	Name           string  `json:"name"`
	MonthlyPrice   float64 `json:"monthly_price"`
	VCPUs          float64 `json:"vcpus"`
	MemoryGiB      float64 `json:"memory_gib"`
	DetectedVCPUs  float64 `json:"detected_vcpus"`
	DetectedMemGiB float64 `json:"detected_memory_gib"`
	Priced         bool    `json:"priced"`
}

UsageNodeInfo is one node's bill and capacity in UsageSettings.

type UsageReport added in v0.2.0

type UsageReport struct {
	usagecost.Report
	Currency            string            `json:"currency"`
	Mode                string            `json:"mode"`
	Basis               string            `json:"basis"`
	Labels              map[string]string `json:"labels"`
	UnpricedNodes       []string          `json:"unpriced_nodes"`
	IncludesUnallocated bool              `json:"includes_unallocated"`
	Configured          bool              `json:"configured"`
	TelemetryAvailable  bool              `json:"telemetry_available"`
	GeneratedAt         string            `json:"generated_at"`
}

UsageReport is GET /api/v1/usage/report.

type UsageReportQuery added in v0.2.0

type UsageReportQuery struct {
	Period string
	From   string
	To     string
}

UsageReportQuery selects the period of a report.

type UsageSettings added in v0.2.0

type UsageSettings struct {
	Settings usagecost.Settings `json:"settings"`
	Nodes    []UsageNodeInfo    `json:"nodes"`
	Note     string             `json:"note"`
}

UsageSettings is GET/PUT /api/v1/usage/settings.

type UsageSettingsUpdate added in v0.2.0

type UsageSettingsUpdate struct {
	Settings     *usagecost.Settings    `json:"settings,omitempty"`
	Nodes        *[]usagecost.NodePrice `json:"nodes,omitempty"`
	RepriceMonth bool                   `json:"reprice_month,omitempty"`
}

UsageSettingsUpdate is the PUT body; nil fields are left unchanged.

type UseGitHubRepoAsSourceResponse added in v0.2.0

type UseGitHubRepoAsSourceResponse struct {
	GitSourceResource
	WebhookRegistered bool   `json:"webhook_registered"`
	WebhookError      string `json:"webhook_error,omitempty"`
}

UseGitHubRepoAsSourceResponse mirrors internal/api's useGitHubRepoAsSourceResponse: GitSourceResource plus whether the push webhook was actually auto-registered.

type UseRepoAsSourceRequest added in v0.2.0

type UseRepoAsSourceRequest struct {
	AppName     string `json:"app_name"`
	Branch      string `json:"branch,omitempty"`
	BuildType   string `json:"build_type,omitempty"`
	BuildPath   string `json:"build_path,omitempty"`
	TriggerMode string `json:"trigger_mode,omitempty"`
}

UseRepoAsSourceRequest mirrors internal/api's useRepoAsSourceRequest: the request body every provider's own use-as-source route shares (github-app, gitlab-app, bitbucket-app).

type UserResource

type UserResource struct {
	ID          string     `json:"id"`
	Email       string     `json:"email"`
	DisplayName string     `json:"display_name"`
	HasPassword bool       `json:"has_password"`
	Providers   []string   `json:"providers"`
	Abilities   []string   `json:"abilities"`
	Role        string     `json:"role,omitempty"`
	RoleID      string     `json:"role_id,omitempty"`
	IsFirstUser bool       `json:"is_first_user"`
	CreatedAt   time.Time  `json:"created_at"`
	LastLoginAt *time.Time `json:"last_login_at,omitempty"`
	Disabled    bool       `json:"disabled"`
	// MustChangePassword: sign-in is refused until a password reset completes.
	MustChangePassword bool `json:"must_change_password"`
}

UserResource mirrors internal/api's userResource (internal/api/users.go).

type VaultSettingsResource added in v0.2.0

type VaultSettingsResource struct {
	Enabled       bool   `json:"enabled"`
	Address       string `json:"address"`
	AuthMethod    string `json:"auth_method"`
	Namespace     string `json:"namespace,omitempty"`
	RoleID        string `json:"role_id,omitempty"`
	MountPath     string `json:"mount_path"`
	HasCredential bool   `json:"has_credential"`
}

VaultSettingsResource mirrors internal/api's vaultSettingsResource (internal/api/vault_settings.go): GET/PUT/DELETE /api/v1/settings/vault's wire shape. The credential (a Vault token or AppRole secret ID, depending on AuthMethod) never appears here in either direction.

type VolumeBackupPolicyResource added in v0.2.0

type VolumeBackupPolicyResource struct {
	ServiceName   string `json:"service_name"`
	VolumeName    string `json:"volume_name"`
	RetainDaily   int    `json:"retain_daily"`
	RetainWeekly  int    `json:"retain_weekly"`
	RetainMonthly int    `json:"retain_monthly"`
	PreHook       string `json:"pre_hook"`
	PostHook      string `json:"post_hook"`
	Quiesce       string `json:"quiesce"`
}

VolumeBackupPolicyResource mirrors internal/api's volumeBackupPolicyResource.

type VolumeBackupScheduleResource

type VolumeBackupScheduleResource struct {
	ServiceName string `json:"service_name"`
	VolumeName  string `json:"volume_name"`
	TargetID    string `json:"target_id,omitempty"`
	Schedule    string `json:"schedule,omitempty"`
	Retain      int    `json:"retain,omitempty"`
	RetainDays  int    `json:"retain_days,omitempty"`
	SqlitePath  string `json:"sqlite_path,omitempty"`
}

VolumeBackupScheduleResource mirrors internal/api's volumeBackupScheduleResource (internal/api/app_volume_backups.go).

type VolumeCloneRestoreResource

type VolumeCloneRestoreResource struct {
	ID                string `json:"id"`
	SourceServiceName string `json:"source_service_name"`
	SourceVolumeName  string `json:"source_volume_name"`
	NewVolumeName     string `json:"new_volume_name"`
	BackupHistoryID   string `json:"backup_history_id"`
	Status            string `json:"status"`
	Error             string `json:"error,omitempty"`
	StartedAt         string `json:"started_at"`
	FinishedAt        string `json:"finished_at,omitempty"`
}

VolumeCloneRestoreResource mirrors internal/api's volumeCloneRestoreResource (internal/api/app_volume_clone_restore.go): one "restore as new volume" attempt.

type VolumeGuide added in v0.2.0

type VolumeGuide struct {
	App           string `json:"app"`
	Kind          string `json:"kind"`
	Source        string `json:"source"`
	Target        string `json:"target"`
	ContainerPath string `json:"container_path"`
	Command       string `json:"command"`
}

VolumeGuide is a command to run on the target node to copy one volume.

type VolumeGuideResponse added in v0.2.0

type VolumeGuideResponse struct {
	Source  string        `json:"source"`
	Guides  []VolumeGuide `json:"guides"`
	Warning string        `json:"warning"`
}

VolumeGuideResponse is the volume copy guide.

type VolumeRestoreToRequest added in v0.2.0

type VolumeRestoreToRequest struct {
	BackupID      string `json:"backup_id"`
	NewVolumeName string `json:"new_volume_name,omitempty"`
	TargetApp     string `json:"target_app,omitempty"`
	NodeID        string `json:"node_id,omitempty"`
}

VolumeRestoreToRequest is POST .../volumes/{volume}/restore-to's body.

type VolumeRestoreToResponse added in v0.2.0

type VolumeRestoreToResponse struct {
	ID            string `json:"id"`
	NewVolumeName string `json:"new_volume_name"`
	NodeID        string `json:"node_id"`
}

VolumeRestoreToResponse is the 202 body of restore-to.

type VulnCounts added in v0.2.0

type VulnCounts struct {
	Critical int `json:"critical"`
	High     int `json:"high"`
	Medium   int `json:"medium"`
	Low      int `json:"low"`
	Unknown  int `json:"unknown"`
}

VulnCounts is the number of findings per severity.

type VulnGate added in v0.2.0

type VulnGate struct {
	Action string `json:"action"`
	Reason string `json:"reason,omitempty"`
}

VulnGate is the gate decision of a VulnReport.

type VulnReport added in v0.2.0

type VulnReport struct {
	DeploymentID string    `json:"deployment_id"`
	Scan         VulnScan  `json:"scan"`
	Gate         *VulnGate `json:"gate,omitempty"`
}

VulnReport is GET .../deployments/{id}/vulnerabilities' body.

type VulnScan added in v0.2.0

type VulnScan struct {
	Status    string          `json:"status"`
	Scanner   string          `json:"scanner,omitempty"`
	ScannedAt *time.Time      `json:"scanned_at,omitempty"`
	Error     string          `json:"error,omitempty"`
	Counts    *VulnCounts     `json:"counts,omitempty"`
	Fixable   int             `json:"fixable"`
	Top       []Vulnerability `json:"top"`
}

VulnScan is the scan half of a VulnReport.

type Vulnerability added in v0.2.0

type Vulnerability struct {
	ID           string `json:"id"`
	Package      string `json:"package"`
	Version      string `json:"version,omitempty"`
	FixedVersion string `json:"fixed_version,omitempty"`
	Severity     string `json:"severity"`
	Title        string `json:"title,omitempty"`
}

Vulnerability is one scanner finding.

type WALShipResource added in v0.2.0

type WALShipResource struct {
	LastAttemptAt string `json:"last_attempt_at,omitempty"`
	LastSuccessAt string `json:"last_success_at,omitempty"`
	LastError     string `json:"last_error,omitempty"`
	Shipped       int    `json:"shipped"`
	TargetID      string `json:"target_id,omitempty"`
}

WALShipResource mirrors internal/api's walShipResource.

type WaitOptions added in v0.2.0

type WaitOptions struct {
	// Interval is the poll period.
	Interval time.Duration
	// Window caps how long this call blocks; zero means until ctx ends.
	Window time.Duration
}

WaitOptions bounds one WaitForDeploy call.

type WaitResult added in v0.2.0

type WaitResult struct {
	Deploy DeployAttemptResource
	// Done is false when the window elapsed before the deploy finished.
	Done bool
}

WaitResult is the last state WaitForDeploy observed.

type WakeTiming

type WakeTiming struct {
	Samples        int    `json:"samples"`
	ReadyLastMs    *int64 `json:"ready_last_ms,omitempty"`
	ReadyP50Ms     *int64 `json:"ready_p50_ms,omitempty"`
	ReadyP95Ms     *int64 `json:"ready_p95_ms,omitempty"`
	ReleasedLastMs *int64 `json:"released_last_ms,omitempty"`
	ReleasedP50Ms  *int64 `json:"released_p50_ms,omitempty"`
	ReleasedP95Ms  *int64 `json:"released_p95_ms,omitempty"`
}

WakeTiming mirrors internal/api's wakeTimingResource. Ready is start to the first ready signal, Released is start to the moment held requests were let go. Every figure is nil, and Samples 0, until the app has a timed wake.

type WebhookDeliveryResource

type WebhookDeliveryResource struct {
	ID               string    `json:"id"`
	ServiceName      string    `json:"service_name"`
	Provider         string    `json:"provider"`
	EventType        string    `json:"event_type"`
	SignatureValid   bool      `json:"signature_valid"`
	Matched          bool      `json:"matched"`
	StatusCode       int       `json:"status_code"`
	Payload          string    `json:"payload"`
	PayloadTruncated bool      `json:"payload_truncated"`
	Error            string    `json:"error,omitempty"`
	Note             string    `json:"note,omitempty"`
	ReceivedAt       time.Time `json:"received_at"`
}

WebhookDeliveryResource mirrors internal/api's webhookDeliveryResource (internal/api/webhook_deliveries.go): one recorded inbound git-provider webhook request.

type WhoamiResource added in v0.2.0

type WhoamiResource struct {
	Kind      string   `json:"kind"`
	Name      string   `json:"name"`
	Abilities []string `json:"abilities"`
	ExpiresAt string   `json:"expires_at"`
}

WhoamiResource mirrors internal/api's whoamiResponse (internal/api/whoami.go).

type WorkspacePackage

type WorkspacePackage struct {
	Name       string   `json:"name"`
	Dir        string   `json:"dir"`
	Tool       string   `json:"tool"`
	Dockerfile string   `json:"dockerfile,omitempty"`
	DependsOn  []string `json:"depends_on"`
	WatchPaths []string `json:"watch_paths"`
}

WorkspacePackage mirrors internal/repolayout's Package.

type ZoneNode

type ZoneNode struct {
	NodeID    string `json:"node_id"`
	Name      string `json:"name"`
	Zone      string `json:"zone,omitempty"`
	Region    string `json:"region,omitempty"`
	Provider  string `json:"provider,omitempty"`
	Online    bool   `json:"online"`
	Workloads int    `json:"workloads"`
}

ZoneNode is one node with its failure-domain labels.

type ZoneSummary

type ZoneSummary struct {
	Zone      string   `json:"zone"`
	Region    string   `json:"region,omitempty"`
	Providers []string `json:"providers,omitempty"`
	NodeIDs   []string `json:"node_ids"`
	Online    int      `json:"online_nodes"`
	Workloads int      `json:"workloads"`
}

ZoneSummary is one failure domain and what it carries.

type Zones

type Zones struct {
	Zones   []ZoneSummary `json:"zones"`
	Nodes   []ZoneNode    `json:"nodes"`
	Labeled bool          `json:"labeled"`
}

Zones is the body of GET /api/v1/nodes/zones.

Source Files

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL