@obep/sdk
v0.1.0
Published
Thin, framework-agnostic OBEP client for the customer's app — relay.run(task) with a live status stream. Apache-2.0.
Maintainers
Readme
@obep/sdk
The thin client for driving OpenErrand / OBEP tasks from your app — run real browser actions inside your end user's own browser, logged in as them. Framework- and runtime-agnostic (browser or Node).
npm install @obep/sdkQuickstart
import { RelayClient } from "@obep/sdk";
const client = new RelayClient({
url: "wss://relay.openerrand.app",
apiKey: process.env.OPENERRAND_API_KEY, // server-side only
});
// Run a task under a signed playbook, targeting a paired user.
const run = client.run({
url: "https://portal.example.com/login",
userId: "dana",
playbookId: "acme.portal-upload",
decide, // your LLM — only used on the LLM-fallback path
});
// A TaskRun is BOTH a live status stream...
for await (const status of run) {
console.log(status.phase, status.detail ?? "");
}
// ...and awaitable for the final result.
const { confirmationNumber } = await run;API
new RelayClient({ url, apiKey?, WebSocketImpl? })
url— the relay WebSocket endpoint (wss://…).apiKey— your tenant API key. The relay derives the tenant from it; keep it server-side. Required for multi-tenant routing.WebSocketImpl— a WebSocket constructor. Defaults to the browser'sWebSocket; in Node, pass thewspackage:import { WebSocket } from "ws"; new RelayClient({ url, apiKey, WebSocketImpl: WebSocket });
client.run(task) → TaskRun
task: { url, userId?, playbookId?, decide, taskId?, onStatus? }.
decide(ctx)turns eachPageContextinto the nextCommand— your intelligence (an LLM, or a stub). It's unused when a fully deterministic playbook drives the task.
A TaskRun is a PromiseLike (await it for the result bag) and an
AsyncIterable<StatusMessage> (iterate it for live status). A terminal error status
ends the stream and rejects the result.
How it fits
Credentials never flow through this SDK or the relay — fillSecret carries only a
vault key reference, resolved on the user's device. (A document you upload does ride
the command path; source it locally where you can.) See the
integration guide
and the security model.
Apache-2.0.
