capabilitycontract

package
v0.3.0 Latest Latest
Warning

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

Go to latest
Published: Jul 14, 2026 License: MIT Imports: 22 Imported by: 0

Documentation

Index

Constants

View Source
const (
	MaxArtifactFileBytes   int64 = 4 << 20
	MaxArtifactBundleBytes int64 = 8 << 20
)
View Source
const (
	MaxSchemaDepth      = 32
	MaxSchemaNodes      = 4096
	MaxSchemaProperties = 1024
	MaxSchemaEnumValues = 1024
	MaxSchemaBranches   = 64
)
View Source
const SchemaVersion = "redevplugin.host_capability_contract.v1"

Variables

View Source
var (
	ErrInvalidContract = errors.New("host capability contract is invalid")
	ErrInvalidBundle   = errors.New("host capability artifact bundle is invalid")
	ErrPinMismatch     = errors.New("host capability artifact pin mismatch")
	ErrSignature       = errors.New("host capability artifact signature is invalid")
	ErrCompatibility   = errors.New("host capability artifact is incompatible")
)

Functions

func CompareCapabilityVersions

func CompareCapabilityVersions(left, right string) (int, error)

func DetailSchemaSHA256

func DetailSchemaSHA256(schema map[string]any) (string, error)

func GenerateTypeScript

func GenerateTypeScript(contract Contract) ([]byte, error)

func SchemaSHA256

func SchemaSHA256(schema map[string]any) (string, error)

func Validate

func Validate(contract Contract) error

func ValidateArtifactRef

func ValidateArtifactRef(ref string) error

func ValidatePin

func ValidatePin(pin Pin) error

func ValidateValue

func ValidateValue(schema map[string]any, value any) error

Types

type BuildRequest

type BuildRequest struct {
	Contract                 Contract
	PublisherID              string
	ArtifactBaseRef          string
	GeneratedAt              time.Time
	SourceCommit             string
	MinReDevPluginVersion    string
	SignatureKeyID           string
	SignaturePolicyEpoch     string
	SignatureRevocationEpoch string
	PrivateKey               ed25519.PrivateKey
	Notices                  []Notice
}

type Bundle

type Bundle struct {
	Pin   Pin
	Files map[string][]byte
}

func Build

func Build(req BuildRequest) (Bundle, error)

type BusinessError

type BusinessError struct {
	Code          string         `json:"code"`
	Message       string         `json:"message"`
	DetailsSchema map[string]any `json:"details_schema,omitempty"`
}

type CancelPolicy

type CancelPolicy struct {
	Cancelable        bool   `json:"cancelable"`
	DisableBehavior   string `json:"disable_behavior"`
	UninstallBehavior string `json:"uninstall_behavior"`
	AckTimeoutMS      int    `json:"ack_timeout_ms,omitempty"`
}

type Compatibility

type Compatibility struct {
	SchemaVersion         string `json:"schema_version"`
	ContractID            string `json:"contract_id"`
	ContractVersion       string `json:"contract_version"`
	CapabilityID          string `json:"capability_id"`
	CapabilityVersion     string `json:"capability_version"`
	MinReDevPluginVersion string `json:"min_redevplugin_version"`
}

type Confirmation

type Confirmation struct {
	Mode              string   `json:"mode"`
	PreflightMethod   string   `json:"preflight_method,omitempty"`
	RequestHashFields []string `json:"request_hash_fields,omitempty"`
	PlanHashRequired  bool     `json:"plan_hash_required,omitempty"`
}

type Contract

type Contract struct {
	SchemaVersion     string          `json:"schema_version"`
	ContractID        string          `json:"contract_id"`
	ContractVersion   string          `json:"contract_version"`
	PublisherID       string          `json:"publisher_id"`
	CapabilityID      string          `json:"capability_id"`
	CapabilityVersion string          `json:"capability_version"`
	ClientName        string          `json:"client_name"`
	Methods           []Method        `json:"methods"`
	Errors            []BusinessError `json:"errors,omitempty"`
}

type Manifest

type Manifest struct {
	SchemaVersion            string          `json:"schema_version"`
	PublisherID              string          `json:"publisher_id"`
	ContractID               string          `json:"contract_id"`
	ContractVersion          string          `json:"contract_version"`
	CapabilityID             string          `json:"capability_id"`
	CapabilityVersion        string          `json:"capability_version"`
	GeneratedAt              string          `json:"generated_at"`
	SourceCommit             string          `json:"source_commit"`
	SignatureAlgorithm       string          `json:"signature_algorithm"`
	SignatureKeyID           string          `json:"signature_key_id"`
	SignaturePolicyEpoch     string          `json:"signature_policy_epoch"`
	SignatureRevocationEpoch string          `json:"signature_revocation_epoch"`
	Entries                  []ManifestEntry `json:"entries"`
}

type ManifestEntry

type ManifestEntry struct {
	Role      string `json:"role"`
	Ref       string `json:"ref"`
	MediaType string `json:"media_type"`
	SHA256    string `json:"sha256"`
	Size      int64  `json:"size"`
}

type Method

type Method struct {
	Name                string         `json:"name"`
	ClientMethod        string         `json:"client_method"`
	Effect              string         `json:"effect"`
	Execution           string         `json:"execution"`
	PreflightOnly       bool           `json:"preflight_only,omitempty"`
	RequiredPermissions []string       `json:"required_permissions,omitempty"`
	TargetFields        []string       `json:"target_fields"`
	TargetSchema        map[string]any `json:"target_schema"`
	RequestTypeName     string         `json:"request_type_name"`
	ResponseTypeName    string         `json:"response_type_name"`
	RequestSchema       map[string]any `json:"request_schema"`
	ResponseSchema      map[string]any `json:"response_schema"`
	EventTypeName       string         `json:"event_type_name,omitempty"`
	EventSchema         map[string]any `json:"event_schema,omitempty"`
	Confirmation        *Confirmation  `json:"confirmation,omitempty"`
	CancelPolicy        *CancelPolicy  `json:"cancel_policy,omitempty"`
	Quota               Quota          `json:"quota"`
}

type Notice

type Notice struct {
	Name      string `json:"name"`
	Version   string `json:"version"`
	License   string `json:"license"`
	SourceURL string `json:"source_url,omitempty"`
}

type Pin

type Pin struct {
	PublisherID              string `json:"publisher_id"`
	ContractID               string `json:"contract_id"`
	ContractVersion          string `json:"contract_version"`
	ArtifactRef              string `json:"artifact_ref"`
	ArtifactSHA256           string `json:"artifact_sha256"`
	ManifestRef              string `json:"manifest_ref"`
	ManifestSHA256           string `json:"manifest_sha256"`
	SignatureRef             string `json:"signature_ref"`
	SignatureSHA256          string `json:"signature_sha256"`
	SignatureKeyID           string `json:"signature_key_id"`
	SignaturePolicyEpoch     string `json:"signature_policy_epoch"`
	SignatureRevocationEpoch string `json:"signature_revocation_epoch"`
	CompatibilityRef         string `json:"compatibility_ref"`
	CompatibilitySHA256      string `json:"compatibility_sha256"`
	GeneratedClientRef       string `json:"generated_client_ref"`
	GeneratedClientSHA256    string `json:"generated_client_sha256"`
	NoticesRef               string `json:"notices_ref"`
	NoticesSHA256            string `json:"notices_sha256"`
}

type Quota

type Quota struct {
	MaxConcurrent  int   `json:"max_concurrent,omitempty"`
	MaxDurationMS  int   `json:"max_duration_ms,omitempty"`
	MaxStreamBytes int64 `json:"max_stream_bytes,omitempty"`
}

type Registry

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

func NewRegistry

func NewRegistry() *Registry

func (*Registry) Add

func (r *Registry) Add(contract VerifiedContract) error

func (*Registry) Require

func (r *Registry) Require(pin Pin) (VerifiedContract, error)

func (*Registry) ResolveCapability

func (r *Registry) ResolveCapability(capabilityID, minimumVersion string) (VerifiedContract, error)

type SignatureEnvelope

type SignatureEnvelope struct {
	SchemaVersion   string `json:"schema_version"`
	Algorithm       string `json:"algorithm"`
	KeyID           string `json:"key_id"`
	ManifestSHA256  string `json:"manifest_sha256"`
	SignatureBase64 string `json:"signature_base64"`
}

type TrustedKey

type TrustedKey struct {
	PublisherID     string
	KeyID           string
	PublicKey       []byte
	PolicyEpoch     string
	RevocationEpoch string
}

type VerifiedContract

type VerifiedContract struct {
	Contract        Contract
	Pin             Pin
	Manifest        Manifest
	Compatibility   Compatibility
	GeneratedClient []byte
	Notices         []Notice
	// contains filtered or unexported fields
}

func Verify

func Verify(req VerifyRequest) (VerifiedContract, error)

func (VerifiedContract) PublicKeySHA256

func (v VerifiedContract) PublicKeySHA256() string

type VerifyRequest

type VerifyRequest struct {
	Bundle                    Bundle
	ExpectedPin               Pin
	TrustedKey                TrustedKey
	CurrentReDevPluginVersion string
}

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL