Documentation
¶
Overview ¶
Package sdk is the typed Go client over the funcd control-plane REST API (ADR-0024). It speaks the code-first huma surface (ADR-0005/0018) at /apis/funcd.io/v1alpha1/..., exposing a kind-parameterized CRUD surface (Apply/Get/List/Delete) typed via the v1.Object interface — no generics, no `any`. It is on the public surface and depends only on api/** + stdlib.
Index ¶
- Constants
- func ContractName(build string, isDir bool) string
- func DecodeManifest(data []byte) (v1.Object, error)
- func DecodeManifests(data []byte) ([]v1.Object, error)
- func GenerateTypes(c *ContractFile, b v1.FunctionBindings) (map[string][]byte, error)
- func KindFromToken(token string) (v1.Kind, bool)
- func ReadOnlyKind(k v1.Kind) bool
- func ReadOnlyWriter(k v1.Kind) string
- type ApplyOption
- type Client
- func (c *Client) Apply(ctx context.Context, obj v1.Object, opts ...ApplyOption) (v1.Object, error)
- func (c *Client) Create(ctx context.Context, obj v1.Object) (v1.Object, error)
- func (c *Client) DeadLetter(ctx context.Context, ns v1.NamespaceName, id string) (deadletter.DeadLetter, error)
- func (c *Client) DeadLetters(ctx context.Context, ns v1.NamespaceName) ([]deadletter.DeadLetter, error)
- func (c *Client) Delete(ctx context.Context, kind v1.Kind, ns v1.NamespaceName, name v1.ObjectName, ...) error
- func (c *Client) DiscardDeadLetter(ctx context.Context, ns v1.NamespaceName, id string) error
- func (c *Client) Get(ctx context.Context, kind v1.Kind, ns v1.NamespaceName, name v1.ObjectName) (v1.Object, error)
- func (c *Client) HandoverKVStore(ctx context.Context, ns v1.NamespaceName, store, workflow v1.ObjectName) error
- func (c *Client) HoldStatus(ctx context.Context) (hold.Evidence, error)
- func (c *Client) List(ctx context.Context, kind v1.Kind, ns v1.NamespaceName) ([]v1.Object, error)
- func (c *Client) Logs(ctx context.Context, ns v1.NamespaceName, fn v1.ObjectName, o LogsOptions) ([]logread.Line, error)
- func (c *Client) PlatformBackup(ctx context.Context) (runner.Status, error)
- func (c *Client) ReleaseHold(ctx context.Context, advance []string) error
- func (c *Client) ReleaseNamespaceHold(ctx context.Context, namespaces []string) error
- func (c *Client) ReplayDeadLetter(ctx context.Context, ns v1.NamespaceName, id string) error
- func (c *Client) RetryApp(ctx context.Context, ns v1.NamespaceName, name v1.ObjectName) error
- func (c *Client) RunLogs(ctx context.Context, ns v1.NamespaceName, run v1.ObjectName, o LogsOptions) ([]logread.Line, error)
- type ContractFile
- type DeleteOption
- type LogsOptions
- type ManifestDocument
- type Option
Constants ¶
const VoidSchema = `{"type":"null"}`
VoidSchema is the canonical void side (ADR-0090/0122): a contract side that carries no meaningful payload is the explicit JSON Schema {"type":"null"}, never an omission. Kept in pkg/sdk (not imported from internal/artifact) so funcdctl and the SDK share it without a package-boundary violation; the value matches internal/artifact.VoidSchema.
Variables ¶
This section is empty.
Functions ¶
func ContractName ¶ added in v0.15.0
ContractName is the name a build's contract file carries: a file's stem, or a bundle directory's base name (ADR-0247 Decision 2).
func DecodeManifest ¶
DecodeManifest parses a single-document resource manifest (apiVersion/kind/metadata/spec) into the concrete v1.Object. An unknown/empty kind is a fault.Invalid, never a panic; so is a manifest holding more than one document (DecodeManifests decodes each).
func DecodeManifests ¶ added in v0.2.1
DecodeManifests parses a manifest that may hold several YAML documents separated by "---" into one v1.Object per document, in order. Empty and comment-only documents are skipped; a manifest with no document is a fault.Invalid.
func GenerateTypes ¶
func GenerateTypes(c *ContractFile, b v1.FunctionBindings) (map[string][]byte, error)
GenerateTypes returns funcd_types.py or funcd.d.ts for c's runtime family (ADR-0247 Decision 3, ADR-0122 Decision 4): the FuncInput/FuncOutput payload types from the contract file's sides, plus a typed binding context from b, the bindings of the Function document the contract file describes (empty for a step or an App part). python* ⇒ a ".py" module (top-level-importable, no TYPE_CHECKING dance); node* ⇒ a ".d.ts" (imported with `import type`). This is DX-only — the platform never trusts these types. The map is keyed by the file's basename; the caller writes each into the output directory.
func KindFromToken ¶
KindFromToken resolves a CLI token (plural, singular, or alias) to a v1.Kind.
func ReadOnlyKind ¶ added in v0.6.0
ReadOnlyKind reports whether the API serves only get and list for k, a kind a reconciler alone writes (ADR-0172, ADR-0200).
func ReadOnlyWriter ¶ added in v0.9.0
ReadOnlyWriter names the writer of a read-only kind, for the refusal of a write to it; "" if k is writable.
Types ¶
type ApplyOption ¶ added in v0.10.0
type ApplyOption func(*applyOptions)
ApplyOption tunes an Apply.
func DryRun ¶ added in v0.10.0
func DryRun() ApplyOption
DryRun makes Apply admit obj without storing it (ADR-0220): every request Apply sends carries dryRun=true, and the answer is the object as the write would store it, an App's with its plan in status.plan. Before its first dry-run write the client reads the server's OpenAPI document once; when the operation does not declare dryRun, Apply sends no write and fails, since an older server would ignore the flag and store the object.
type Client ¶
type Client struct {
// contains filtered or unexported fields
}
Client is a typed Go client over the funcd control-plane REST API.
func New ¶
New builds a Client. baseURL (e.g. "http://localhost:8080") is required.
func (*Client) Apply ¶
Apply create-or-replaces obj: PUT the named path; on a 404 (the object does not yet exist) POST the collection path to create it. Returns the stored object, or with DryRun the object as it would be stored.
func (*Client) Create ¶ added in v0.2.1
Create creates obj by POSTing the collection path, never replacing an existing object: a taken name is a fault.Conflict. An empty name with GenerateName set lets the server assign one.
func (*Client) DeadLetter ¶
func (c *Client) DeadLetter(ctx context.Context, ns v1.NamespaceName, id string) (deadletter.DeadLetter, error)
DeadLetter fetches one parked dead letter by id (ADR-0118), or fault.NotFound if absent.
func (*Client) DeadLetters ¶
func (c *Client) DeadLetters(ctx context.Context, ns v1.NamespaceName) ([]deadletter.DeadLetter, error)
DeadLetters lists a namespace's parked dead letters, newest first (ADR-0118). Tenant-scoped by the caller's identity (get/Sensor in the namespace) — the namespace is the authorized path segment.
func (*Client) Delete ¶
func (c *Client) Delete(ctx context.Context, kind v1.Kind, ns v1.NamespaceName, name v1.ObjectName, opts ...DeleteOption) error
Delete removes one object.
func (*Client) DiscardDeadLetter ¶
DiscardDeadLetter deletes a parked dead letter (ADR-0118) — a plain CRUD delete; absent is not an error server-side.
func (*Client) Get ¶
func (c *Client) Get(ctx context.Context, kind v1.Kind, ns v1.NamespaceName, name v1.ObjectName) (v1.Object, error)
Get fetches one object.
func (*Client) HandoverKVStore ¶ added in v0.5.0
func (c *Client) HandoverKVStore(ctx context.Context, ns v1.NamespaceName, store, workflow v1.ObjectName) error
HandoverKVStore makes workflow the owner of the kept KVStore store, so that Workflow binds it again (ADR-0178). The caller needs KVStore update and delete and Workflow get in ns.
func (*Client) HoldStatus ¶ added in v0.10.0
HoldStatus reads the platform hold's evidence (ADR-0206 Decision 8); admin-only.
func (*Client) Logs ¶
func (c *Client) Logs(ctx context.Context, ns v1.NamespaceName, fn v1.ObjectName, o LogsOptions) ([]logread.Line, error)
Logs reads a function's logs from the control-plane logs route (ADR-0084). The result is tenant-scoped to the caller's authenticated identity by the server (admin sees any namespace, developer/viewer only a bound one) — the namespace is the authorized path segment, never a client-asserted filter.
func (*Client) PlatformBackup ¶ added in v0.10.0
PlatformBackup reads the platform backup's status (ADR-0205); only an admin may.
func (*Client) ReleaseHold ¶ added in v0.10.0
ReleaseHold lifts the platform hold (ADR-0206 Decision 8). advance names blob EventSources, <ns>/<name>, whose listed keys are marked seen instead of replayed. Not held ⇒ fault.Conflict; an advance naming no blob event of an existing EventSource ⇒ fault.Invalid, both before any change.
func (*Client) ReleaseNamespaceHold ¶ added in v0.11.0
ReleaseNamespaceHold removes the hold a restore left on each namespace (ADR-0222 Decision 8): restore run's data marker and an ended in-place Restore's marker. POST …/hold/release with namespaces, which needs update on each Namespace; an in-place Restore still Pending or Running ⇒ fault.Conflict naming it.
func (*Client) ReplayDeadLetter ¶
ReplayDeadLetter re-injects a parked dead letter through the LIVE Sensor action path (ADR-0118 §3): ONE synchronous attempt. Success removes the entry (nil); failure re-parks it (Attempts reset) and returns the delivery error; a gone Sensor/action ⇒ fault.NotFound.
func (*Client) RetryApp ¶ added in v0.10.0
func (c *Client) RetryApp(ctx context.Context, ns v1.NamespaceName, name v1.ObjectName) error
RetryApp starts again, without waiting, the failed hook of the App's latest revision (ADR-0214 Decision 7). The caller needs App update in ns; fault.Conflict when the App has no failed hook, a hook call of it runs or it is paused.
func (*Client) RunLogs ¶
func (c *Client) RunLogs(ctx context.Context, ns v1.NamespaceName, run v1.ObjectName, o LogsOptions) ([]logread.Line, error)
RunLogs reads a whole workflow run's logs from the run-scoped control-plane route (ADR-0106): the server resolves the run's status.traceId and returns the namespace-wide, trace-filtered lines — every step function's output plus any sub-workflow child steps (one composition = one trace). Tenant-scoped by the caller's identity (get/WorkflowRun in the namespace). o.Step narrows to one step's function.
type ContractFile ¶ added in v0.15.0
type ContractFile struct {
Runtime v1.RuntimeName `json:"runtime"`
Protocol v1.FunctionProtocol `json:"protocol,omitempty"`
Input json.RawMessage `json:"input,omitempty"`
Output json.RawMessage `json:"output,omitempty"`
}
ContractFile is a function's contract file, <name>.contract.yaml or <name>.contract.json (ADR-0247 Decision 1): what its artifact is. The Function resource says how it runs.
func LoadContract ¶ added in v0.15.0
func LoadContract(dir, name string) (*ContractFile, string, error)
LoadContract reads <dir>/<name>.contract.yaml or .json (exactly one), decodes it strictly, validates it (ADR-0247 Decision 1) and returns its path. A funcdctl.yaml where it looks fails, naming the files that replace it (Decision 11).
func (*ContractFile) Sides ¶ added in v0.15.0
func (c *ContractFile) Sides() (input, output []byte)
Sides returns the two contract sides of a cloudevent Function, or none for an http one (ADR-0243).
type DeleteOption ¶ added in v0.4.0
type DeleteOption func(*deleteOptions)
DeleteOption tunes a Delete.
func Force ¶ added in v0.4.0
func Force() DeleteOption
Force deletes a ResourceGroup's members first, each under its own protections, then the group (ADR-0170). Delete refuses it with fault.Invalid for any other kind, before a request.
func IfVersion ¶ added in v0.10.0
func IfVersion(rv string) DeleteOption
IfVersion makes Delete conditional on rv: fault.Conflict when the object's resourceVersion differs (ADR-0210).
type LogsOptions ¶
type LogsOptions struct {
Since string // logread.SinceForms: a duration ("15m") or a timestamp ("2026-10-07T22:00:00.000Z"); "" ⇒ no lower bound
Severity string // minimum level (trace|debug|info|warn|error|fatal); "" ⇒ all
Limit int // max records (most-recent); <= 0 ⇒ the server default
Step string // RunLogs only (ADR-0106): narrow to one step's function (the --step drill-down); "" ⇒ all
}
LogsOptions are the optional filters for Client.Logs / Client.RunLogs (ADR-0084/0106).
type ManifestDocument ¶ added in v0.2.2
ManifestDocument is one decoded manifest document and its 1-based position in the manifest, counted as the decode errors count it (skipped empty and comment-only documents included).
func DecodeManifestDocuments ¶ added in v0.2.2
func DecodeManifestDocuments(data []byte) ([]ManifestDocument, error)
DecodeManifestDocuments is DecodeManifests that also returns each object's document number, so a caller can name the document a later error belongs to (issue #316).
type Option ¶
type Option func(*Client)
Option configures a Client (functional-options facade, ADR-0002).
func WithHTTPClient ¶
WithHTTPClient overrides the HTTP client (default http.DefaultClient). A client without a CheckRedirect policy gets the SDK's, which refuses a redirect that would change the method.