Use SE2's APIs from JS/TS
You can find a detailed specification of SE2's APIs here.
Use our JavaScript SDK to easily interact with SE2's APIs using JavaScript or TypeScript.
Install SE2 for JS/TS
npm install @suborbital/se2
Setup
Import the library and configure the client. The default configuration will point the client at SE2's default production URLs in your cluster.
A configuration for local development is also provided.
Default Config
By default, the client will point to the control plane and data plane within your Kubernetes cluster.
import { Suborbital } from "@suborbital/se2";
const suborbital = new Suborbital();
Local config
For local development with SE2 running in docker-compose, the local configuration will point to the services running on your local machine.
import { Suborbital, localConfig } from "@suborbital/se2";
const suborbital = new Suborbital(localConfig);
Custom API URLs or ports
import { Suborbital } from "@suborbital/se2";
const configuration = {
adminUri: "https://acme.co:8081",
execUri: "https://acme.co:8080",
builderUri: "https://acme.co/builder",
};
const suborbital = new Suborbital(configuration);
Getting started
Using the SE2 APIs, this guide will use the Administrative and Execution APIs to get a list of available plugins and execute one.
The Administrative APIs getPlugins
method takes an object with a userId
and a namespace
and returns a list of available plugins for that user in the provided namespace.
async function listAvailablePlugins() {
const plugins = await suborbital.admin.getPlugins({
userId: "1234",
namespace: "default",
});
console.log("Plugins:", plugins);
}
Example output
{
"plugins": [
{
"name": "foo",
"namespace": "...",
"lang": "...",
"version": "...",
"draftVersion": "...",
"apiVersion": "...",
"fqext": "...",
"fqextURI": "...",
}
]
}
The result includes a plugin named foo
(which for this tutorial already exists) and which we will execute using the Execution APIs run
method.
The run
method takes an object with the environment
, userId
, namespace
, extName
, and version
, and returns the result of the executed plugin.
async function runExtension() {
const result = await suborbital.exec.run({
environment: "com.acmeco",
userId: "1234",
namespace: "default",
pluginName: "foo",
version: "v1.0.0",
});
console.log("Extension output:", result);
}
Full API
These are all of the available methods.
Admin
suborbital.admin.getToken
Description: Retrieves an authentication token for the given plugin, typically used to authenticate calls to the Builder API.
Args: An object containing environment
, userId
, namespace
, pluginName
.
Result: A string containing the token used for authorization.
suborbital.admin.getPlugins
Description: Returns a list of available plugins for the given user in the given namespace.
Args: An object containing userId
, namespace
.
Result:
{
"plugins": [
{
"name": "foo",
"namespace": "...",
"lang": "...",
"version": "...",
"draftVersion": "...",
"apiVersion": "...",
"fqmn": "...",
"fqmnURI": "...",
}
]
}
suborbital.admin.getExecutionResult
Description: Returns the most recent results (up to 5) produced by the execution of the given plugin.
Args: An object containing environment
, userId
, namespace
, pluginName
, version
.
Result:
{
"results": [
{
"uuid": "...",
"timestamp": "...",
"response": "..."
}
]
}
Exec
suborbital.exec.run
Description: Executes the given plugin, with the provided body, params and state loaded into the extension at runtime.
Args: An object containing environment
,userId
,namespace
, pluginName
,version
.
Result: The result of the executed plugin.
Builder
suborbital.builder.build
Description: Builds the provided code using the specified language toolchain.
Args: An object containing language
, environment
, userId
, namespace
, pluginName
, token
.
Result: A string containing the logs for the build.
suborbital.builder.getDraft
Description: Gets the draft for the specified runnable.
Args: An object containing environment
, userId
, namespace
, pluginName
, token
.
Result: A specified runnable.
suborbital.builder.deployDraft
Description: Deploys the specified runnable.
Args: An object containing environment
, userId
, namespace
, pluginName
, token
.
Result: A string containing the version.
suborbital.builder.testDraft
Description: Tests the draft for the specified runnable.
Args: An object containing environment
, userId
, namespace
, pluginName
.
Result: A string containing the result.
suborbital.builder.getTemplate
Description: Gets the template (which controls what your users see when they create a new plugin) for a new extension of the given language.
Args: An object containing pluginName
, language
.
Result:
import { logInfo } from "@suborbital/suborbital"
export function run(input: ArrayBuffer): ArrayBuffer {
let inStr = String.UTF8.decode(input)
let out = "Hello there, " + inStr
return String.UTF8.encode(out)
}