Files
2026-05-06 10:14:55 +03:00

44 lines
1.9 KiB
Go

// Package engineclient is the trusted-internal HTTP client `internal/runtime`
// uses to talk to a running `galaxy-game` engine container. The engine
// contract is the OpenAPI document shipped with the engine module
// (`galaxy/game/openapi.yaml`); this package reuses the existing typed
// DTOs in `pkg/model/{rest,order,report}` rather than introducing its
// own request/response types.
//
// The engine endpoint URL is per-call: the runtime stores it on
// `runtime_records.engine_endpoint` (the value the dockerclient adapter
// returns from Run). The client therefore does not bind a base URL at
// construction time — only the per-call timeouts are wired through
// `Config`.
//
// Error model:
//
// - ErrEngineUnreachable — network failure, 5xx, or timeout. The
// caller transitions the runtime record to `engine_unreachable`
// and re-tries on the next snapshot tick.
// - ErrEngineValidation — engine rejected the request (HTTP 4xx).
// The caller surfaces the engine's body verbatim through to the
// user.
// - ErrEngineProtocolViolation — engine returned an empty body or a
// malformed JSON response on a path that requires one.
package engineclient
import "errors"
var (
// ErrEngineUnreachable means the engine call failed because of a
// transport error (network, DNS, connect refused, timeout, 5xx).
// The implementation callers map this to a runtime status of
// `engine_unreachable` after a snapshot read.
ErrEngineUnreachable = errors.New("engineclient: engine unreachable")
// ErrEngineValidation means the engine returned a 4xx response.
// Callers forward the engine body so end users see the engine's
// per-command error reason verbatim.
ErrEngineValidation = errors.New("engineclient: engine validation failed")
// ErrEngineProtocolViolation means the engine returned an empty or
// malformed body on a path that contractually requires one.
ErrEngineProtocolViolation = errors.New("engineclient: engine protocol violation")
)