ArlopassClient

The core client class. Manages connection state, provider selection, and chat operations over the protocol transport.

import { ArlopassClient } from "@arlopass/web-sdk";

Constructor options

Prop Type Default Description
transport
required
ArlopassTransport — Transport implementation (provided by the browser extension via window.arlopass).
origin string "https://app.arlopass.local" Origin URL for envelope metadata. Auto-set to window.location.origin when in a browser.
timeoutMs number 5000 Default request timeout in milliseconds.
envelopeTtlMs number 60000 Time-to-live for protocol envelopes.
protocolVersion string "1.0.0" Protocol version string.
nonce string — Nonce for envelope signatures.
now () => Date — Clock function for envelope timestamps. Defaults to () => new Date().
randomId () => string — ID generator for request/correlation IDs. Defaults to crypto.randomUUID().
defaultCapabilities readonly ProtocolCapability[] — Capabilities to request during connect.
defaultProviderId string "provider.system" Fallback provider ID for envelopes before selection.
defaultModelId string "model.default" Fallback model ID for envelopes before selection.
tracing TelemetryTracing — Optional tracing hook for observability.
const client = new ArlopassClient({
  transport,
  origin: window.location.origin,
});

Properties

Prop Type Default Description
state ClientState — Current connection state (readonly getter).
sessionId ` string undefined` —
selectedProvider ` { providerId: string; modelId: string } undefined` —
contextWindowSize number — Context window size in tokens for the selected model. Falls back to 4096 for unknown models.
chat { send, stream } — Chat operation namespace (see Methods below).

Methods

Prop Type Default Description
connect (options: ConnectOptions) => Promise<ConnectResult> — Establish connection with the extension. Transitions state: disconnected → connecting → connected.
disconnect () => Promise<void> — Disconnect and reset state to disconnected.
listProviders () => Promise<ListProvidersResult> — Fetch available providers and models. Requires connected state.
selectProvider (input: SelectProviderInput) => Promise<SelectProviderResult> — Select a provider/model pair. Requires connected state.
chat.send (input: ChatInput, options?: ChatOperationOptions) => Promise<ChatSendResult> — Send messages and receive a complete response. Requires connected state + selected provider.
chat.stream (input: ChatInput, options?: ChatOperationOptions) => AsyncIterable<ChatStreamEvent> — Send messages and stream the response as chunks. Supports AbortSignal via options.signal.
getContextInfo (messages: readonly ChatMessage[], reserveOutputTokens?: number) => ContextWindowInfo — Compute context window usage for the selected model given a set of messages. Useful for token meters and "context full" warnings.
const client = new ArlopassClient({ transport: window.arlopass });

await client.connect({ appId: "com.example.myapp" });
const { providers } = await client.listProviders();
await client.selectProvider({ providerId: "openai", modelId: "gpt-4o" });
// Non-streaming
const result = await client.chat.send({
  messages: [{ role: "user", content: "Hello" }],
});
console.log(result.message.content);

// Streaming
for await (const event of client.chat.stream({
  messages: [{ role: "user", content: "Hello" }],
})) {
  if (event.type === "chunk") process.stdout.write(event.delta);
}

// Context window info
const info = client.getContextInfo(messages);
console.log(
  `${info.usedTokens}/${info.maxTokens} (${Math.round(info.usageRatio * 100)}%)`,
);
console.log("Window size:", client.contextWindowSize);

State machine

// State machine transitions:
//
// disconnected ──connect()──→ connecting ──success──→ connected
//                                  │                      │
//                                  └──fail──→ failed      ├──degraded
//                                                         │
// connected ──disconnect()──→ disconnected       reconnecting
//                                                    │
//                                                    └──→ connected | failed