executor

package
v1.16.0-rc.2 Latest Latest
Warning

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

Go to latest
Published: Aug 11, 2026 License: MIT Imports: 15 Imported by: 0

Documentation

Index

Constants

View Source
const (
	Executor_Execute_FullMethodName  = "/executor.Executor/Execute"
	Executor_Metadata_FullMethodName = "/executor.Executor/Metadata"
	Executor_Help_FullMethodName     = "/executor.Executor/Help"
)
View Source
const ProtocolVersion = 3

ProtocolVersion is the version that must match between Botkube core and Botkube plugins. This should be bumped whenever a change happens in one or the other that makes it so that they can't safely communicate. This could be adding a new interface value, it could be how helper/schema computes diffs, etc.

NOTE: In the future we can consider using VersionedPlugins. These can be used to negotiate a compatible version between client and server. If this is set, Handshake.ProtocolVersion is not required.

Variables

View Source
var Executor_ServiceDesc = grpc.ServiceDesc{
	ServiceName: "executor.Executor",
	HandlerType: (*ExecutorServer)(nil),
	Methods: []grpc.MethodDesc{
		{
			MethodName: "Execute",
			Handler:    _Executor_Execute_Handler,
		},
		{
			MethodName: "Metadata",
			Handler:    _Executor_Metadata_Handler,
		},
		{
			MethodName: "Help",
			Handler:    _Executor_Help_Handler,
		},
	},
	Streams:  []grpc.StreamDesc{},
	Metadata: "executor.proto",
}

Executor_ServiceDesc is the grpc.ServiceDesc for Executor service. It's only intended for direct use with grpc.RegisterService, and not to be introspected or modified (even as a copy)

View Source
var File_executor_proto protoreflect.FileDescriptor

Functions

func RegisterExecutorServer

func RegisterExecutorServer(s grpc.ServiceRegistrar, srv ExecutorServer)

func Serve

func Serve(p map[string]plugin.Plugin)

Serve serves given plugins.

Types

type Config

type Config struct {

	// rawYAML contains the Executor configuration in YAML definitions.
	// Configuration data is unique per executor.
	// Botkube related configuration details are stored in ExecuteContext instead.
	RawYAML []byte `protobuf:"bytes,1,opt,name=rawYAML,proto3" json:"rawYAML,omitempty"`
	// contains filtered or unexported fields
}

Config holds the Executor configuration.

func (*Config) Descriptor deprecated

func (*Config) Descriptor() ([]byte, []int)

Deprecated: Use Config.ProtoReflect.Descriptor instead.

func (*Config) GetRawYAML

func (x *Config) GetRawYAML() []byte

func (*Config) ProtoMessage

func (*Config) ProtoMessage()

func (*Config) ProtoReflect

func (x *Config) ProtoReflect() protoreflect.Message

func (*Config) Reset

func (x *Config) Reset()

func (*Config) String

func (x *Config) String() string

type Dependency

type Dependency struct {

	// urls is the map of URL of the dependency. The key is in format of "os/arch", such as "linux/amd64".
	Urls map[string]string `` /* 149-byte string literal not displayed */
	// contains filtered or unexported fields
}

Dependency represents a dependency of a given plugin. All binaries are downloaded before the plugin is started.

func (*Dependency) Descriptor deprecated

func (*Dependency) Descriptor() ([]byte, []int)

Deprecated: Use Dependency.ProtoReflect.Descriptor instead.

func (*Dependency) GetUrls

func (x *Dependency) GetUrls() map[string]string

func (*Dependency) ProtoMessage

func (*Dependency) ProtoMessage()

func (*Dependency) ProtoReflect

func (x *Dependency) ProtoReflect() protoreflect.Message

func (*Dependency) Reset

func (x *Dependency) Reset()

func (*Dependency) SetUrls

func (d *Dependency) SetUrls(in map[string]string)

SetUrls sets the urls map for the dependency.

This method is needed because of current Go limitation: > The Go compiler does not support accessing a struct field x.f where x is of type parameter type even if all types in the type parameter's type set have a field f. We may remove this restriction in a future release. See https://go.dev/doc/go1.18 and https://github.com/golang/go/issues/48522

func (*Dependency) String

func (x *Dependency) String() string

type ExecuteContext

type ExecuteContext struct {

	// isInteractivitySupported is set to true only if communication platform supports interactive Messages
	// with buttons, select menus, etc. If set to false, you should send only text based messages.
	IsInteractivitySupported bool `protobuf:"varint,1,opt,name=isInteractivitySupported,proto3" json:"isInteractivitySupported,omitempty"`
	// slackState represents modal state. It's available only if:
	//   - IsInteractivitySupported is set to true,
	//   - and interactive actions were used in the response Message.
	//
	// This is an alpha feature and may change in the future.
	// Most likely, it will be generalized to support all communication platforms.
	SlackState []byte `protobuf:"bytes,2,opt,name=slackState,proto3" json:"slackState,omitempty"`
	// kubeConfig is the slice of byte representation of kubeconfig file content.
	// it is available only if context.rbac is configured for a given plugins. Otherwise, it is empty.
	KubeConfig []byte `protobuf:"bytes,3,opt,name=kubeConfig,proto3" json:"kubeConfig,omitempty"`
	// message holds message details that triggered a given Executor.
	Message *MessageContext `protobuf:"bytes,4,opt,name=message,proto3" json:"message,omitempty"`
	// incomingWebhook holds details about Botkube built-in incoming webhook configuration.
	IncomingWebhook *IncomingWebhookContext `protobuf:"bytes,5,opt,name=incomingWebhook,proto3" json:"incomingWebhook,omitempty"`
	// contains filtered or unexported fields
}

func (*ExecuteContext) Descriptor deprecated

func (*ExecuteContext) Descriptor() ([]byte, []int)

Deprecated: Use ExecuteContext.ProtoReflect.Descriptor instead.

func (*ExecuteContext) GetIncomingWebhook

func (x *ExecuteContext) GetIncomingWebhook() *IncomingWebhookContext

func (*ExecuteContext) GetIsInteractivitySupported

func (x *ExecuteContext) GetIsInteractivitySupported() bool

func (*ExecuteContext) GetKubeConfig

func (x *ExecuteContext) GetKubeConfig() []byte

func (*ExecuteContext) GetMessage

func (x *ExecuteContext) GetMessage() *MessageContext

func (*ExecuteContext) GetSlackState

func (x *ExecuteContext) GetSlackState() []byte

func (*ExecuteContext) ProtoMessage

func (*ExecuteContext) ProtoMessage()

func (*ExecuteContext) ProtoReflect

func (x *ExecuteContext) ProtoReflect() protoreflect.Message

func (*ExecuteContext) Reset

func (x *ExecuteContext) Reset()

func (*ExecuteContext) String

func (x *ExecuteContext) String() string

type ExecuteInput

type ExecuteInput struct {
	// Context holds execution context.
	Context ExecuteInputContext
	// Command holds the command to be executed.
	Command string
	// Configs is a list of Executor configurations specified by users.
	Configs []*Config
}

ExecuteInput holds the input of the Execute function.

type ExecuteInputContext

type ExecuteInputContext struct {
	// IsInteractivitySupported is set to true only if communication platform supports interactive Messages.
	IsInteractivitySupported bool

	// KubeConfig is the slice of byte representation of kubeconfig file content
	KubeConfig []byte

	// SlackState represents modal state. It's available only if:
	//  - IsInteractivitySupported is set to true,
	//  - and interactive actions were used in the response Message.
	// This is an alpha feature and may change in the future.
	// Most likely, it will be generalized to support all communication platforms.
	SlackState *slack.BlockActionStates

	// Message details that triggered a given Executor.
	// Limitations:
	//   - It's available only for SocketSlack. In the future, it may be adopted across other platforms.
	Message Message

	IncomingWebhook IncomingWebhookDetailsContext
}

ExecuteInputContext holds execution context.

type ExecuteOutput

type ExecuteOutput struct {
	// Message represents the output of processing a given input command.
	// You can construct a complex message or just use one of our helper functions:
	//   - api.NewCodeBlockMessage("body", true)
	//   - api.NewPlaintextMessage("body", true)
	Message api.Message
	// Messages holds a collection of messages that should be dispatched to the user in the context of a given command execution.
	// To avoid spamming, you can specify max 15 messages.
	// Limitations:
	//   - It's available only for SocketSlack. In the future, it may be adopted across other platforms.
	//   - Message filtering is not available.
	Messages []api.Message
}

ExecuteOutput holds the output of the Execute function.

type ExecuteRequest

type ExecuteRequest struct {

	// command represents the exact command that was specified by the user.
	Command string `protobuf:"bytes,1,opt,name=command,proto3" json:"command,omitempty"`
	// configs is a list of Executor configurations specified by users.
	Configs []*Config `protobuf:"bytes,2,rep,name=configs,proto3" json:"configs,omitempty"`
	// context holds context execution.
	Context *ExecuteContext `protobuf:"bytes,3,opt,name=context,proto3" json:"context,omitempty"`
	// contains filtered or unexported fields
}

func (*ExecuteRequest) Descriptor deprecated

func (*ExecuteRequest) Descriptor() ([]byte, []int)

Deprecated: Use ExecuteRequest.ProtoReflect.Descriptor instead.

func (*ExecuteRequest) GetCommand

func (x *ExecuteRequest) GetCommand() string

func (*ExecuteRequest) GetConfigs

func (x *ExecuteRequest) GetConfigs() []*Config

func (*ExecuteRequest) GetContext

func (x *ExecuteRequest) GetContext() *ExecuteContext

func (*ExecuteRequest) ProtoMessage

func (*ExecuteRequest) ProtoMessage()

func (*ExecuteRequest) ProtoReflect

func (x *ExecuteRequest) ProtoReflect() protoreflect.Message

func (*ExecuteRequest) Reset

func (x *ExecuteRequest) Reset()

func (*ExecuteRequest) String

func (x *ExecuteRequest) String() string

type ExecuteResponse

type ExecuteResponse struct {

	// message represents the output of processing a given input command.
	// You can construct a complex message or just use one of our helper functions:
	//   - api.NewCodeBlockMessage("body", true)
	//   - api.NewPlaintextMessage("body", true)
	Message []byte `protobuf:"bytes,1,opt,name=message,proto3" json:"message,omitempty"`
	// messages holds a collection of messages that should be dispatched to the user in the context of a given command execution.
	// To avoid spamming, you can specify max 15 messages.
	// Limitations:
	//   - It's available only for SocketSlack. In the future, it may be adopted across other platforms.
	//   - Interactive message filtering is not available. (https://docs.botkube.io/usage/interactive-output-filtering)
	Messages [][]byte `protobuf:"bytes,2,rep,name=messages,proto3" json:"messages,omitempty"`
	// contains filtered or unexported fields
}

func (*ExecuteResponse) Descriptor deprecated

func (*ExecuteResponse) Descriptor() ([]byte, []int)

Deprecated: Use ExecuteResponse.ProtoReflect.Descriptor instead.

func (*ExecuteResponse) GetMessage

func (x *ExecuteResponse) GetMessage() []byte

func (*ExecuteResponse) GetMessages

func (x *ExecuteResponse) GetMessages() [][]byte

func (*ExecuteResponse) ProtoMessage

func (*ExecuteResponse) ProtoMessage()

func (*ExecuteResponse) ProtoReflect

func (x *ExecuteResponse) ProtoReflect() protoreflect.Message

func (*ExecuteResponse) Reset

func (x *ExecuteResponse) Reset()

func (*ExecuteResponse) String

func (x *ExecuteResponse) String() string

type Executor

type Executor interface {
	Execute(context.Context, ExecuteInput) (ExecuteOutput, error)
	Metadata(ctx context.Context) (api.MetadataOutput, error)
	Help(context.Context) (api.Message, error)
}

Executor defines the Botkube executor plugin functionality.

type ExecutorClient

type ExecutorClient interface {
	Execute(ctx context.Context, in *ExecuteRequest, opts ...grpc.CallOption) (*ExecuteResponse, error)
	Metadata(ctx context.Context, in *emptypb.Empty, opts ...grpc.CallOption) (*MetadataResponse, error)
	Help(ctx context.Context, in *emptypb.Empty, opts ...grpc.CallOption) (*HelpResponse, error)
}

ExecutorClient is the client API for Executor service.

For semantics around ctx use and closing/ending streaming RPCs, please refer to https://pkg.go.dev/google.golang.org/grpc/?tab=doc#ClientConn.NewStream.

func NewExecutorClient

func NewExecutorClient(cc grpc.ClientConnInterface) ExecutorClient

type ExecutorServer

type ExecutorServer interface {
	Execute(context.Context, *ExecuteRequest) (*ExecuteResponse, error)
	Metadata(context.Context, *emptypb.Empty) (*MetadataResponse, error)
	Help(context.Context, *emptypb.Empty) (*HelpResponse, error)
	// contains filtered or unexported methods
}

ExecutorServer is the server API for Executor service. All implementations must embed UnimplementedExecutorServer for forward compatibility

type HelpResponse

type HelpResponse struct {

	// help is the help of a given plugin.
	// You can construct a complex message with buttons etc, or just use one of our helper functions:
	//   - api.NewCodeBlockMessage("body", true)
	//   - api.NewPlaintextMessage("body", true)
	Help []byte `protobuf:"bytes,1,opt,name=help,proto3" json:"help,omitempty"`
	// contains filtered or unexported fields
}

HelpResponse represents help of a given plugin.

func (*HelpResponse) Descriptor deprecated

func (*HelpResponse) Descriptor() ([]byte, []int)

Deprecated: Use HelpResponse.ProtoReflect.Descriptor instead.

func (*HelpResponse) GetHelp

func (x *HelpResponse) GetHelp() []byte

func (*HelpResponse) ProtoMessage

func (*HelpResponse) ProtoMessage()

func (*HelpResponse) ProtoReflect

func (x *HelpResponse) ProtoReflect() protoreflect.Message

func (*HelpResponse) Reset

func (x *HelpResponse) Reset()

func (*HelpResponse) String

func (x *HelpResponse) String() string

type IncomingWebhookContext

type IncomingWebhookContext struct {
	BaseSourceURL string `protobuf:"bytes,1,opt,name=baseSourceURL,proto3" json:"baseSourceURL,omitempty"`
	// contains filtered or unexported fields
}

IncomingWebhookContext holds information about the built-in incoming webhook that allows triggering HandleExternalRequest on a given source.

func (*IncomingWebhookContext) Descriptor deprecated

func (*IncomingWebhookContext) Descriptor() ([]byte, []int)

Deprecated: Use IncomingWebhookContext.ProtoReflect.Descriptor instead.

func (*IncomingWebhookContext) GetBaseSourceURL

func (x *IncomingWebhookContext) GetBaseSourceURL() string

func (*IncomingWebhookContext) ProtoMessage

func (*IncomingWebhookContext) ProtoMessage()

func (*IncomingWebhookContext) ProtoReflect

func (x *IncomingWebhookContext) ProtoReflect() protoreflect.Message

func (*IncomingWebhookContext) Reset

func (x *IncomingWebhookContext) Reset()

func (*IncomingWebhookContext) String

func (x *IncomingWebhookContext) String() string

type IncomingWebhookDetailsContext

type IncomingWebhookDetailsContext struct {
	BaseSourceURL string
}

IncomingWebhookDetailsContext holds source incoming webhook context.

type JSONSchema

type JSONSchema struct {

	// value is the string value of the JSON schema.
	Value string `protobuf:"bytes,1,opt,name=value,proto3" json:"value,omitempty"`
	// ref_url is the remote reference of the JSON schema.
	RefUrl string `protobuf:"bytes,2,opt,name=ref_url,json=refUrl,proto3" json:"ref_url,omitempty"`
	// contains filtered or unexported fields
}

JSONSchema represents a JSON schema of a given plugin configuration.

func (*JSONSchema) Descriptor deprecated

func (*JSONSchema) Descriptor() ([]byte, []int)

Deprecated: Use JSONSchema.ProtoReflect.Descriptor instead.

func (*JSONSchema) GetRefUrl

func (x *JSONSchema) GetRefUrl() string

func (*JSONSchema) GetValue

func (x *JSONSchema) GetValue() string

func (*JSONSchema) ProtoMessage

func (*JSONSchema) ProtoMessage()

func (*JSONSchema) ProtoReflect

func (x *JSONSchema) ProtoReflect() protoreflect.Message

func (*JSONSchema) Reset

func (x *JSONSchema) Reset()

func (*JSONSchema) String

func (x *JSONSchema) String() string

type Message

type Message struct {
	Text string
	URL  string
	User User

	// ParentActivityID is the ID of the parent activity. If user follows with messages in a thread, this ID represents the originating message that started that thread.
	// Otherwise, it's the ID of the initial message.
	ParentActivityID string
}

Message holds information about the message that triggered a given Executor.

type MessageContext

type MessageContext struct {

	// text is the text of the message in the raw format.
	Text string `protobuf:"bytes,1,opt,name=text,proto3" json:"text,omitempty"`
	// url is the URL of the message. Can be used to open the message in a browser.
	Url string `protobuf:"bytes,2,opt,name=url,proto3" json:"url,omitempty"`
	// parentActivityId is the ID of the parent activity. If user follows with messages in a thread, this ID represents the originating message that started that thread.
	// Otherwise, it's the ID of the initial message.
	ParentActivityId string `protobuf:"bytes,3,opt,name=parentActivityId,proto3" json:"parentActivityId,omitempty"`
	// user holds user details that wrote a given message.
	User *UserContext `protobuf:"bytes,4,opt,name=user,proto3" json:"user,omitempty"`
	// contains filtered or unexported fields
}

func (*MessageContext) Descriptor deprecated

func (*MessageContext) Descriptor() ([]byte, []int)

Deprecated: Use MessageContext.ProtoReflect.Descriptor instead.

func (*MessageContext) GetParentActivityId

func (x *MessageContext) GetParentActivityId() string

func (*MessageContext) GetText

func (x *MessageContext) GetText() string

func (*MessageContext) GetUrl

func (x *MessageContext) GetUrl() string

func (*MessageContext) GetUser

func (x *MessageContext) GetUser() *UserContext

func (*MessageContext) ProtoMessage

func (*MessageContext) ProtoMessage()

func (*MessageContext) ProtoReflect

func (x *MessageContext) ProtoReflect() protoreflect.Message

func (*MessageContext) Reset

func (x *MessageContext) Reset()

func (*MessageContext) String

func (x *MessageContext) String() string

type MetadataResponse

type MetadataResponse struct {

	// version is a version of a given plugin. It should follow the SemVer syntax.
	Version string `protobuf:"bytes,1,opt,name=version,proto3" json:"version,omitempty"`
	// description is a description of a given plugin.
	Description string `protobuf:"bytes,2,opt,name=description,proto3" json:"description,omitempty"`
	// json_schema is a JSON schema of a given plugin.
	JsonSchema *JSONSchema `protobuf:"bytes,3,opt,name=json_schema,json=jsonSchema,proto3" json:"json_schema,omitempty"`
	// dependencies is a list of dependencies of a given plugin.
	Dependencies map[string]*Dependency `` /* 165-byte string literal not displayed */
	// URL to plugin documentation.
	DocumentationUrl string `protobuf:"bytes,5,opt,name=documentation_url,json=documentationUrl,proto3" json:"documentation_url,omitempty"`
	// Recommended plugin recommended
	Recommended bool `protobuf:"varint,6,opt,name=recommended,proto3" json:"recommended,omitempty"`
	// contains filtered or unexported fields
}

MetadataResponse represents metadata of a given plugin. Data is used to generate a plugin index file.

func (*MetadataResponse) Descriptor deprecated

func (*MetadataResponse) Descriptor() ([]byte, []int)

Deprecated: Use MetadataResponse.ProtoReflect.Descriptor instead.

func (*MetadataResponse) GetDependencies

func (x *MetadataResponse) GetDependencies() map[string]*Dependency

func (*MetadataResponse) GetDescription

func (x *MetadataResponse) GetDescription() string

func (*MetadataResponse) GetDocumentationUrl

func (x *MetadataResponse) GetDocumentationUrl() string

func (*MetadataResponse) GetJsonSchema

func (x *MetadataResponse) GetJsonSchema() *JSONSchema

func (*MetadataResponse) GetRecommended

func (x *MetadataResponse) GetRecommended() bool

func (*MetadataResponse) GetVersion

func (x *MetadataResponse) GetVersion() string

func (*MetadataResponse) ProtoMessage

func (*MetadataResponse) ProtoMessage()

func (*MetadataResponse) ProtoReflect

func (x *MetadataResponse) ProtoReflect() protoreflect.Message

func (*MetadataResponse) Reset

func (x *MetadataResponse) Reset()

func (*MetadataResponse) String

func (x *MetadataResponse) String() string

type Plugin

type Plugin struct {
	// The GRPC plugin must still implement the Plugin interface.
	plugin.NetRPCUnsupportedPlugin

	// Executor represents a concrete implementation that handles the business logic.
	Executor Executor
}

Plugin This is the implementation of plugin.GRPCPlugin, so we can serve and consume different Botkube Executors.

func (*Plugin) GRPCClient

func (p *Plugin) GRPCClient(_ context.Context, _ *plugin.GRPCBroker, c *grpc.ClientConn) (interface{}, error)

GRPCClient returns the interface implementation for the plugin that is serving via gRPC by GRPCServer.

func (*Plugin) GRPCServer

func (p *Plugin) GRPCServer(_ *plugin.GRPCBroker, s *grpc.Server) error

GRPCServer registers plugin for serving with the given GRPCServer.

type UnimplementedExecutorServer

type UnimplementedExecutorServer struct {
}

UnimplementedExecutorServer must be embedded to have forward compatible implementations.

func (UnimplementedExecutorServer) Execute

func (UnimplementedExecutorServer) Help

func (UnimplementedExecutorServer) Metadata

type UnsafeExecutorServer

type UnsafeExecutorServer interface {
	// contains filtered or unexported methods
}

UnsafeExecutorServer may be embedded to opt out of forward compatibility for this service. Use of this interface is not recommended, as added methods to ExecutorServer will result in compilation errors.

type User

type User struct {
	// ID represents users identifier.
	Mention string
	// DisplayName represents user display name. It can be empty.
	DisplayName string
}

User represents the user that sent a message.

type UserContext

type UserContext struct {

	// mention represents a user platforms specific mention of the user.
	Mention string `protobuf:"bytes,1,opt,name=mention,proto3" json:"mention,omitempty"`
	// displayName represents user display name. It can be empty.
	DisplayName string `protobuf:"bytes,2,opt,name=displayName,proto3" json:"displayName,omitempty"`
	// contains filtered or unexported fields
}

func (*UserContext) Descriptor deprecated

func (*UserContext) Descriptor() ([]byte, []int)

Deprecated: Use UserContext.ProtoReflect.Descriptor instead.

func (*UserContext) GetDisplayName

func (x *UserContext) GetDisplayName() string

func (*UserContext) GetMention

func (x *UserContext) GetMention() string

func (*UserContext) ProtoMessage

func (*UserContext) ProtoMessage()

func (*UserContext) ProtoReflect

func (x *UserContext) ProtoReflect() protoreflect.Message

func (*UserContext) Reset

func (x *UserContext) Reset()

func (*UserContext) String

func (x *UserContext) String() string

Jump to

Keyboard shortcuts

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