connectorruntime

package
v1.801.307 Latest Latest
Warning

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

Go to latest
Published: Jul 28, 2026 License: Apache-2.0 Imports: 20 Imported by: 0

Documentation

Overview

Package connectorruntime executes an automation connector's action NATIVELY in-process — no Node. A connector authored against the ActivePieces framework (@activepieces/pieces-framework + pieces-common) is compiled once to a single CommonJS program (see Bundle) and run inside goja, with the framework supplied by an in-process shim (shim.js) whose only impure primitive is a Go HTTP doer. Because that doer resolves synchronously, an action's `async run(ctx)` settles inside goja's own microtask drain, so a connector executes as ordinary in-process work — a goroutine, not a service.

This is the substrate that retires the standalone ActivePieces Node engine (the `auto` pod). It sits ALONGSIDE clients/automations' Tier-A native Go connectors: those are hand-written Go; this runs the long tail of JS connectors unchanged. Both are org-scoped by the caller — the runtime never resolves a credential itself; it receives the already-resolved `auth`.

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

func Bundle

func Bundle(entryPoint string, extraExternal ...string) ([]byte, error)

Bundle compiles ONE ActivePieces connector's TypeScript source tree into a single CommonJS program, with the framework packages left external so they resolve to the in-process shim at run time. This is the connector-ingest build step: run it once per connector (offline / CI), commit the JS blob, and the runtime compiles+executes that blob natively in goja — no Node.

entryPoint is the connector's index.ts. extraExternal lets a heavier connector mark additional npm deps external (each then needs a shim); for the framework-only pieces (the long tail) apExternals alone suffice.

func Connectors

func Connectors() []string

Connectors lists the registered connector ids (stable order) for the catalogue / health surface.

func Has

func Has(connector string) bool

Has reports whether a connector is registered (used to fail closed before a doomed call).

func Mount

func Mount(app cloud.Router, deps cloud.Deps) error

Mount wires the native single-connector execution surface onto the cloud binary, per HIP-0126 / HIP-0106:

POST /v1/automations/connectors/:id/run   run one connector action in-process

This is the native replacement for the standalone ActivePieces Node engine's /v1/auto/pieces/{piece}/run — same {action,auth,props} -> {ok,output,error} contract, executed in goja in-process (no `auto` pod). It is org-gated: only a validated principal may run a connector, and the caller's resolved credential travels in the request `auth`. The route is DISTINCT from automations' GET /v1/automations/connectors (the catalogue), so the two subsystems compose without collision.

func Run

func Run(ctx context.Context, org, connector, action string, auth any, props map[string]any) (any, error)

Run executes one connector action natively in-process. org is the caller's already-validated tenant — recorded for attribution; the runtime resolves no credential itself, it runs with the auth the caller passes (the KB path hands it this org's KMS-sealed OAuth token). Returns the action result or an error (unknown connector/action, or the action's own failure).

Types

type Connector

type Connector struct {
	Name string
	// contains filtered or unexported fields
}

Connector is one compiled connector program (an ActivePieces piece bundle wrapped as a CommonJS module). Compile once, Run many times.

type HTTPDoer

type HTTPDoer func(ctx context.Context, req HTTPRequest) (HTTPResponse, error)

HTTPDoer performs one connector HTTP call. ctx bounds it (the caller's request/flow context); the default doer is net/http (see http.go). Injecting a doer lets the host enforce SSRF policy or record egress.

type HTTPRequest

type HTTPRequest struct {
	Method      string
	URL         string
	Headers     map[string]string
	QueryParams map[string]string
	Body        any
	TimeoutMS   int
}

HTTPRequest is the request an in-VM httpClient.sendRequest hands to the Go doer. It mirrors the ActivePieces HttpRequest fields connectors actually set.

type HTTPResponse

type HTTPResponse struct {
	Status  int
	Headers map[string]string
	Body    any
}

HTTPResponse is what the doer returns; Body is the parsed value (JSON decoded when the response is JSON, else the raw string) the connector sees as response.body.

type RunInput

type RunInput struct {
	Action string         // action name, e.g. "web_search" / "custom_api_call"
	Auth   any            // resolved credential value handed to ctx.auth
	Props  map[string]any // ctx.propsValue
}

RunInput is one action invocation.

type Runtime

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

Runtime holds the compiled shim shared across all connectors and the HTTP doer. It is immutable after construction and safe for concurrent use — each Run builds its own goja VM, so no connector state crosses invocations (the tenant-isolation property: org A's run shares no heap with org B's).

func NewRuntime

func NewRuntime(doer HTTPDoer) (*Runtime, error)

NewRuntime compiles the shim and returns a runtime. A nil doer selects the default net/http doer.

func (*Runtime) Compile

func (rt *Runtime) Compile(name string, bundledJS []byte) (*Connector, error)

Compile wraps a connector's bundled CommonJS source as a callable module and compiles it. bundledJS is the output of Bundle (framework packages external).

func (*Runtime) Run

func (rt *Runtime) Run(ctx context.Context, c *Connector, in RunInput) (any, error)

Run executes c's action with the given auth+props and returns the action's result (JSON-shaped Go values). It is the single-connector execution the KB long-tail sync and the /v1/automations/connectors/:id/run surface call.

Directories

Path Synopsis
internal
bundlecmd command
Command bundlecmd is the offline connector-ingest step: it esbuild-bundles ONE ActivePieces connector source tree (its index.ts) into a single CommonJS program with the framework packages left external, and writes the blob.
Command bundlecmd is the offline connector-ingest step: it esbuild-bundles ONE ActivePieces connector source tree (its index.ts) into a single CommonJS program with the framework packages left external, and writes the blob.

Jump to

Keyboard shortcuts

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