Client
SignerClient.connect opens a connection to the signing service. Every SDK (AssetSdk, StreamSdk) is built on one client.
Connect once
Instantiate the client once at startup and reuse it for the lifetime of the process. It is thread-safe and can be shared across concurrent async tasks. Do not reconnect per request.
import { SignerClient, AssetSdk } from "@limboai/verifox-sdk-issuer";
const client = await SignerClient.connect("https://api.trylimbo.com", {
headers: { authorization: `Bearer ${process.env.LIMBO_API_KEY}` },
});
const sdk = AssetSdk.create(client);
Authentication
Auth is carried by the headers field of ConnectOptions. The signing service issues a token for your integration; pass it as an authorization: Bearer … header, applied to every call the client makes.
ConnectOptions
connect takes a required second argument to supply headers and tune connection and timeout behavior. Every field on it is optional, so {} is a valid value:
| Field | Required | Meaning |
|---|---|---|
headers | no | Record<string, string> attached to every request. Carries authorization: Bearer <token> plus any routing or tenant metadata; header names are lower-cased when sent. |
rpcTimeoutMs | no | Per-call deadline for a signing request. |
connectTimeoutMs | no | Deadline for establishing the initial connection. Native only; ignored in wasm/browser builds, where the fetch transport manages its own timeouts. |
const client = await SignerClient.connect("https://api.trylimbo.com", {
headers: { authorization: `Bearer ${process.env.LIMBO_API_KEY}` },
rpcTimeoutMs: 30_000,
});
Both https:// and http:// endpoints are supported.
Consuming the client
A connected client is passed to the factory of whichever SDK you need:
const assets = AssetSdk.create(client);
import { StreamSdk } from "@limboai/verifox-sdk-issuer";
const streams = StreamSdk.create(client, ledger, vault);
One client can back multiple SDK instances. AssetSdk.create takes an optional second argument, an array of container plugins for non-c2pa formats such as MXF; omit it for a c2pa-only signer. StreamSdk.create additionally takes a caller-provided SessionLedger and SigningVault; see Stream storage.