PlayClaw
PlayClaw

API Reference

Full API Reference

All classes, methods, and options exported from playclaw-sdk.

PlayclawBridge

MethodReturnsDescription
new PlayclawBridge(options)PlayclawBridgeCreate a bridge. Only token is required.
bridge.connect()Promise<void>Open channel and start listening for audit turns.
bridge.disconnect()Promise<void>Gracefully close the channel.
bridge.onMessage(fn)voidRegister message handler. fn(message, context) → string.
bridge.onSessionStart(fn)voidfn(sessionId) — fires when a new audit session opens.
bridge.onSessionEnd(fn)voidfn(sessionId, history) — fires when session completes.
bridge.onConnect(fn)voidfn() — fires when channel is live.
bridge.onDisconnect(fn)voidfn() — fires when channel drops.
bridge.onError(fn)voidfn(error, sessionId?) — fires on any error.
bridge.use(fn)voidAdd pre-message middleware. Return transformed string or throw.
bridge.useReply(fn)voidAdd post-reply middleware. Return transformed string.
bridge.statsBridgeStats{ sessionsHandled, messagesHandled, errorsCount, reconnectsCount }
bridge.isConnectedbooleanTrue if the channel is currently live.
bridge.sessionInfoSessionInfo | nullCurrent session state or null between sessions.

PlayclawLogger

MethodDescription
new PlayclawLogger({ level, prefix, output })Create a logger. All options are optional.
logger.debug(msg)Log at debug level.
logger.info(msg)Log at info level.
logger.warn(msg)Log at warn level.
logger.error(msg)Log at error level.
logger.child(name)Create a child logger with a nested prefix.
logger.setLevel(l)Change log level at runtime.

PlayclawRateLimiter

MethodDescription
new PlayclawRateLimiter({ maxPerWindow, windowMs, maxConcurrent })Create a rate limiter.
limiter.isAllowed(sessionId)Returns true if the request should proceed.
limiter.recordStart(sessionId)Mark a session as processing.
limiter.recordEnd(sessionId)Mark a session as done.
limiter.status()Returns { count, windowMs, concurrent }.
limiter.middleware()Returns a bridge.use()-compatible middleware function.

MockTransport (testing)

Import from playclaw-sdk/test/transport.mock. Swaps out the real Supabase transport so your tests run without a network connection.

bridge.test.js
1import { PlayclawBridge } from "playclaw-sdk";
2import { MockTransport } from "playclaw-sdk/test/transport.mock";
3import assert from "node:assert";
4 
5const bridge = new PlayclawBridge({ token: "PC-TEST", logLevel: "silent" });
6const mock = new MockTransport();
7 
8// Swap the real Supabase transport with the mock
9bridge._transport = mock;
10mock._messageHandler = bridge._handleIncoming.bind(bridge);
11 
12bridge.onMessage(async (msg) => `echo: ${msg}`);
13 
14await mock.simulateMessage({ content: "hello", session_id: "s1" });
15 
16assert.strictEqual(mock.responses[0].payload.content, "echo: hello");
Property / MethodDescription
mock.simulateMessage(payload)Trigger an incoming message as if PlayClaw sent it.
mock.simulateDisconnect()Simulate a channel drop.
mock.simulateError()Simulate a transport error.
mock.responsesArray of agent:response events sent by the bridge.
mock.errorsArray of agent:error events sent by the bridge.
mock.sentEventsRaw array of all outgoing events.
mock.reset()Clear all recorded events.