mirror of
https://github.com/DeBrosOfficial/network.git
synced 2026-01-30 12:43:04 +00:00
130 lines
5.6 KiB
Go
130 lines
5.6 KiB
Go
package contracts
|
|
|
|
import (
|
|
"context"
|
|
"time"
|
|
)
|
|
|
|
// FunctionExecutor handles the execution of WebAssembly serverless functions.
|
|
// Manages compilation, caching, and runtime execution of WASM modules.
|
|
type FunctionExecutor interface {
|
|
// Execute runs a function with the given input and returns the output.
|
|
// fn contains the function metadata, input is the function's input data,
|
|
// and invCtx provides context about the invocation (caller, trigger type, etc.).
|
|
Execute(ctx context.Context, fn *Function, input []byte, invCtx *InvocationContext) ([]byte, error)
|
|
|
|
// Precompile compiles a WASM module and caches it for faster execution.
|
|
// wasmCID is the content identifier, wasmBytes is the raw WASM bytecode.
|
|
// Precompiling reduces cold-start latency for subsequent invocations.
|
|
Precompile(ctx context.Context, wasmCID string, wasmBytes []byte) error
|
|
|
|
// Invalidate removes a compiled module from the cache.
|
|
// Call this when a function is updated or deleted.
|
|
Invalidate(wasmCID string)
|
|
}
|
|
|
|
// FunctionRegistry manages function metadata and bytecode storage.
|
|
// Responsible for CRUD operations on function definitions.
|
|
type FunctionRegistry interface {
|
|
// Register deploys a new function or updates an existing one.
|
|
// fn contains the function definition, wasmBytes is the compiled WASM code.
|
|
// Returns the old function definition if it was updated, or nil for new registrations.
|
|
Register(ctx context.Context, fn *FunctionDefinition, wasmBytes []byte) (*Function, error)
|
|
|
|
// Get retrieves a function by name and optional version.
|
|
// If version is 0, returns the latest active version.
|
|
// Returns an error if the function is not found.
|
|
Get(ctx context.Context, namespace, name string, version int) (*Function, error)
|
|
|
|
// List returns all active functions in a namespace.
|
|
// Returns only the latest version of each function.
|
|
List(ctx context.Context, namespace string) ([]*Function, error)
|
|
|
|
// Delete marks a function as inactive (soft delete).
|
|
// If version is 0, marks all versions as inactive.
|
|
Delete(ctx context.Context, namespace, name string, version int) error
|
|
|
|
// GetWASMBytes retrieves the compiled WASM bytecode for a function.
|
|
// wasmCID is the content identifier returned during registration.
|
|
GetWASMBytes(ctx context.Context, wasmCID string) ([]byte, error)
|
|
|
|
// GetLogs retrieves execution logs for a function.
|
|
// limit constrains the number of log entries returned.
|
|
GetLogs(ctx context.Context, namespace, name string, limit int) ([]LogEntry, error)
|
|
}
|
|
|
|
// Function represents a deployed serverless function with its metadata.
|
|
type Function struct {
|
|
ID string `json:"id"`
|
|
Name string `json:"name"`
|
|
Namespace string `json:"namespace"`
|
|
Version int `json:"version"`
|
|
WASMCID string `json:"wasm_cid"`
|
|
SourceCID string `json:"source_cid,omitempty"`
|
|
MemoryLimitMB int `json:"memory_limit_mb"`
|
|
TimeoutSeconds int `json:"timeout_seconds"`
|
|
IsPublic bool `json:"is_public"`
|
|
RetryCount int `json:"retry_count"`
|
|
RetryDelaySeconds int `json:"retry_delay_seconds"`
|
|
DLQTopic string `json:"dlq_topic,omitempty"`
|
|
Status FunctionStatus `json:"status"`
|
|
CreatedAt time.Time `json:"created_at"`
|
|
UpdatedAt time.Time `json:"updated_at"`
|
|
CreatedBy string `json:"created_by"`
|
|
}
|
|
|
|
// FunctionDefinition contains the configuration for deploying a function.
|
|
type FunctionDefinition struct {
|
|
Name string `json:"name"`
|
|
Namespace string `json:"namespace"`
|
|
Version int `json:"version,omitempty"`
|
|
MemoryLimitMB int `json:"memory_limit_mb,omitempty"`
|
|
TimeoutSeconds int `json:"timeout_seconds,omitempty"`
|
|
IsPublic bool `json:"is_public,omitempty"`
|
|
RetryCount int `json:"retry_count,omitempty"`
|
|
RetryDelaySeconds int `json:"retry_delay_seconds,omitempty"`
|
|
DLQTopic string `json:"dlq_topic,omitempty"`
|
|
EnvVars map[string]string `json:"env_vars,omitempty"`
|
|
}
|
|
|
|
// InvocationContext provides context for a function invocation.
|
|
type InvocationContext struct {
|
|
RequestID string `json:"request_id"`
|
|
FunctionID string `json:"function_id"`
|
|
FunctionName string `json:"function_name"`
|
|
Namespace string `json:"namespace"`
|
|
CallerWallet string `json:"caller_wallet,omitempty"`
|
|
TriggerType TriggerType `json:"trigger_type"`
|
|
WSClientID string `json:"ws_client_id,omitempty"`
|
|
EnvVars map[string]string `json:"env_vars,omitempty"`
|
|
}
|
|
|
|
// LogEntry represents a log message from a function execution.
|
|
type LogEntry struct {
|
|
Level string `json:"level"`
|
|
Message string `json:"message"`
|
|
Timestamp time.Time `json:"timestamp"`
|
|
}
|
|
|
|
// FunctionStatus represents the current state of a deployed function.
|
|
type FunctionStatus string
|
|
|
|
const (
|
|
FunctionStatusActive FunctionStatus = "active"
|
|
FunctionStatusInactive FunctionStatus = "inactive"
|
|
FunctionStatusError FunctionStatus = "error"
|
|
)
|
|
|
|
// TriggerType identifies the type of event that triggered a function invocation.
|
|
type TriggerType string
|
|
|
|
const (
|
|
TriggerTypeHTTP TriggerType = "http"
|
|
TriggerTypeWebSocket TriggerType = "websocket"
|
|
TriggerTypeCron TriggerType = "cron"
|
|
TriggerTypeDatabase TriggerType = "database"
|
|
TriggerTypePubSub TriggerType = "pubsub"
|
|
TriggerTypeTimer TriggerType = "timer"
|
|
TriggerTypeJob TriggerType = "job"
|
|
)
|