Documentation ¶
Index ¶
- Constants
- Variables
- func ExecuteSync(ctx context.Context, c CallbackExecutable, request CapabilityRequest) (*values.List, error)
- func ExecuteSyncWithTimeout(ctx context.Context, c CallbackExecutable, request CapabilityRequest, ...) (*values.List, error)
- type ActionCapability
- type BaseCapability
- type CallbackCapability
- type CallbackExecutable
- type CapabilityConfiguration
- type CapabilityInfo
- func MustNewCapabilityInfo(id string, capabilityType CapabilityType, description string) CapabilityInfo
- func MustNewRemoteCapabilityInfo(id string, capabilityType CapabilityType, description string, don *DON) CapabilityInfo
- func NewCapabilityInfo(id string, capabilityType CapabilityType, description string) (CapabilityInfo, error)
- func NewRemoteCapabilityInfo(id string, capabilityType CapabilityType, description string, don *DON) (CapabilityInfo, error)
- type CapabilityRequest
- type CapabilityResponse
- type CapabilityType
- type ConsensusCapability
- type DON
- type Node
- type RegisterToWorkflowRequest
- type RegistrationMetadata
- type RemoteTargetConfig
- type RemoteTriggerConfig
- type RequestMetadata
- type TargetCapability
- type TriggerCapability
- type TriggerEvent
- type TriggerExecutable
- type UnregisterFromWorkflowRequest
- type Validatable
- type Validator
- func (v *Validator[Config, Inputs, Outputs]) ConfigSchema() (string, error)
- func (v *Validator[Config, Inputs, Outputs]) InputsSchema() (string, error)
- func (v *Validator[Config, Inputs, Outputs]) OutputsSchema() (string, error)
- func (v *Validator[Config, Inputs, Outputs]) Schema() (string, error)
- func (v *Validator[Config, Inputs, Outputs]) ValidateConfig(config *values.Map) (*Config, error)
- func (v *Validator[Config, Inputs, Outputs]) ValidateInputs(inputs *values.Map) (*Inputs, error)
- func (v *Validator[Config, Inputs, Outputs]) ValidateOutputs(outputs *values.Map) (*Outputs, error)
- type ValidatorArgs
Constants ¶
Variables ¶
var ErrStopExecution = &errStopExecution{}
Functions ¶
func ExecuteSync ¶ added in v0.2.0
func ExecuteSync(ctx context.Context, c CallbackExecutable, request CapabilityRequest) (*values.List, error)
ExecuteSync executes a capability synchronously. We are not handling a case where a capability panics and crashes. There is default timeout of 10 seconds. If a capability takes longer than that then it should be executed asynchronously.
func ExecuteSyncWithTimeout ¶ added in v0.2.0
func ExecuteSyncWithTimeout(ctx context.Context, c CallbackExecutable, request CapabilityRequest, timeout time.Duration) (*values.List, error)
ExecuteSyncWithTimeout allows explicitly passing in a timeout to customise the desired duration.
Types ¶
type ActionCapability ¶
type ActionCapability interface { CallbackCapability }
ActionCapability interface needs to be implemented by all action capabilities.
type BaseCapability ¶
type BaseCapability interface {
Info(ctx context.Context) (CapabilityInfo, error)
}
BaseCapability interface needs to be implemented by all capability types. Capability interfaces are intentionally duplicated to allow for an easy change or extension in the future.
type CallbackCapability ¶ added in v0.2.0
type CallbackCapability interface { BaseCapability CallbackExecutable }
CallbackCapability is the interface implemented by action, consensus and target capabilities. This interface is useful when trying to capture capabilities of varying types.
type CallbackExecutable ¶ added in v0.2.0
type CallbackExecutable interface { RegisterToWorkflow(ctx context.Context, request RegisterToWorkflowRequest) error UnregisterFromWorkflow(ctx context.Context, request UnregisterFromWorkflowRequest) error // Capability must respect context.Done and cleanup any request specific resources // when the context is cancelled. When a request has been completed the capability // is also expected to close the callback channel. // Request specific configuration is passed in via the request parameter. // A successful response must always return a value. An error is assumed otherwise. // The intent is to make the API explicit. Execute(ctx context.Context, request CapabilityRequest) (<-chan CapabilityResponse, error) }
CallbackExecutable is an interface for executing a capability.
type CapabilityConfiguration ¶
type CapabilityConfiguration struct { DefaultConfig *values.Map RemoteTriggerConfig *RemoteTriggerConfig RemoteTargetConfig *RemoteTargetConfig }
type CapabilityInfo ¶
type CapabilityInfo struct { // The capability ID is a fully qualified identifier for the capability. // // It takes the form of `{name}:{label1_key}_{labe1_value}:{label2_key}_{label2_value}@{version}` // // The labels within the ID are ordered alphanumerically. ID string CapabilityType CapabilityType Description string DON *DON IsLocal bool }
CapabilityInfo is a struct for the info of a capability.
func MustNewCapabilityInfo ¶
func MustNewCapabilityInfo( id string, capabilityType CapabilityType, description string, ) CapabilityInfo
MustNewCapabilityInfo returns a new CapabilityInfo, `panic`ing if we could not instantiate a CapabilityInfo.
func MustNewRemoteCapabilityInfo ¶
func MustNewRemoteCapabilityInfo( id string, capabilityType CapabilityType, description string, don *DON, ) CapabilityInfo
MustNewRemoteCapabilityInfo returns a new CapabilityInfo, `panic`ing if we could not instantiate a CapabilityInfo.
func NewCapabilityInfo ¶
func NewCapabilityInfo( id string, capabilityType CapabilityType, description string, ) (CapabilityInfo, error)
NewCapabilityInfo returns a new CapabilityInfo.
func NewRemoteCapabilityInfo ¶
func NewRemoteCapabilityInfo( id string, capabilityType CapabilityType, description string, don *DON, ) (CapabilityInfo, error)
NewRemoteCapabilityInfo returns a new CapabilityInfo for remote capabilities. This is largely intended for internal use by the registry syncer. Capability developers should use `NewCapabilityInfo` instead as this omits the requirement to pass in the DON Info.
func (CapabilityInfo) Info ¶
func (c CapabilityInfo) Info(ctx context.Context) (CapabilityInfo, error)
Info returns the info of the capability.
func (CapabilityInfo) Version ¶
func (c CapabilityInfo) Version() string
Parse out the version from the ID.
type CapabilityRequest ¶
type CapabilityRequest struct { Metadata RequestMetadata Config *values.Map Inputs *values.Map }
CapabilityRequest is a struct for the Execute request of a capability.
type CapabilityResponse ¶
CapabilityResponse is a struct for the Execute response of a capability.
type CapabilityType ¶
type CapabilityType string
CapabilityType is an enum for the type of capability.
const ( CapabilityTypeUnknown CapabilityType = "unknown" CapabilityTypeTrigger CapabilityType = "trigger" CapabilityTypeAction CapabilityType = "action" CapabilityTypeConsensus CapabilityType = "consensus" CapabilityTypeTarget CapabilityType = "target" )
CapabilityType enum values.
func (CapabilityType) IsValid ¶
func (c CapabilityType) IsValid() error
IsValid checks if the capability type is valid.
type ConsensusCapability ¶
type ConsensusCapability interface { CallbackCapability }
ConsensusCapability interface needs to be implemented by all consensus capabilities.
type DON ¶
type DON struct { ID uint32 ConfigVersion uint32 Members []p2ptypes.PeerID F uint8 IsPublic bool AcceptsWorkflows bool }
DON represents a network of connected nodes.
For an example of an empty DON check, see the following link: https://github.com/goplugin/plugin_latest/blob/develop/core/capabilities/transmission/local_target_capability.go#L31
type Node ¶
Node contains the node's peer ID and the DONs it is part of.
Note the following relationships between the workflow and capability DONs and this node.
There is a 1:0..1 relationship between this node and a workflow DON. This means that this node can be part at most one workflow DON at a time. As a side note, a workflow DON can have multiple nodes.
There is a 1:N relationship between this node and capability DONs, where N is the number of capability DONs. This means that this node can be part of multiple capability DONs at a time.
Although WorkflowDON is a value rather than a pointer, a node can be part of no workflow DON but 0 or more capability DONs. You can assert this by checking for zero values in the WorkflowDON field. See https://github.com/goplugin/plugin_latest/blob/develop/core/capabilities/transmission/local_target_capability.go#L31 for an example.
type RegisterToWorkflowRequest ¶
type RegisterToWorkflowRequest struct { Metadata RegistrationMetadata Config *values.Map }
type RegistrationMetadata ¶
type RemoteTargetConfig ¶
type RemoteTargetConfig struct {
RequestHashExcludedAttributes []string
}
type RemoteTriggerConfig ¶
type RemoteTriggerConfig struct { RegistrationRefresh time.Duration RegistrationExpiry time.Duration MinResponsesToAggregate uint32 MessageExpiry time.Duration }
func (*RemoteTriggerConfig) ApplyDefaults ¶
func (c *RemoteTriggerConfig) ApplyDefaults()
NOTE: consider splitting this config into values stored in Registry (KS-118) and values defined locally by Capability owners.
type RequestMetadata ¶
type TargetCapability ¶
type TargetCapability interface { CallbackCapability }
TargetsCapability interface needs to be implemented by all target capabilities.
type TriggerCapability ¶
type TriggerCapability interface { BaseCapability TriggerExecutable }
TriggerCapability interface needs to be implemented by all trigger capabilities.
type TriggerEvent ¶
type TriggerExecutable ¶
type TriggerExecutable interface { RegisterTrigger(ctx context.Context, request CapabilityRequest) (<-chan CapabilityResponse, error) UnregisterTrigger(ctx context.Context, request CapabilityRequest) error }
type UnregisterFromWorkflowRequest ¶
type UnregisterFromWorkflowRequest struct { Metadata RegistrationMetadata Config *values.Map }
type Validatable ¶
type Validator ¶
type Validator[Config any, Inputs any, Outputs any] struct { ValidatorArgs // contains filtered or unexported fields }
A Validator can validate the config, inputs, and outputs of a capability.
The library generates a JSON schema for each of these types to both describe the types in a language-agnostic way and to validate the API boundary of the capability.
To see how to annotate your structs with JSON schema tags, take a look at the jsonschema package.
func NewValidator ¶
func NewValidator[Config any, Inputs any, Outputs any](args ValidatorArgs) Validator[Config, Inputs, Outputs]
func (*Validator[Config, Inputs, Outputs]) ConfigSchema ¶
func (*Validator[Config, Inputs, Outputs]) InputsSchema ¶
func (*Validator[Config, Inputs, Outputs]) OutputsSchema ¶
func (*Validator[Config, Inputs, Outputs]) Schema ¶
Schema returns the a JSON schema that combines the config, inputs, and outputs into a single schema.
This fully describes the capability's API boundary.
func (*Validator[Config, Inputs, Outputs]) ValidateConfig ¶
func (*Validator[Config, Inputs, Outputs]) ValidateInputs ¶
type ValidatorArgs ¶
type ValidatorArgs struct { Info CapabilityInfo // You can customize each one of the reflectors // or leave them nil to use the default reflector. // // You can also override the default reflector by setting // the DefaultReflector field. DefaultReflector *jsonschema.Reflector SchemaReflector *jsonschema.Reflector ConfigReflector *jsonschema.Reflector InputsReflector *jsonschema.Reflector OutputsReflector *jsonschema.Reflector }