Core JavaScript SDK for BootDesk Chat SDK — framework-agnostic chat client with real-time broadcasting, streaming, and push notifications.
npm install @bootdesk/js-web-adapter-core
import { WebChatClient } from "@bootdesk/js-web-adapter-core";
const client = new WebChatClient({
apiUrl: "https://your-app.com/api",
userId: "user-1",
userName: "Alice",
});
const unsub = client.onMessagePosted((event) => {
console.log("New message:", event.text);
});
await client.connect();
| Method | Description |
|---|---|
connect() |
Initialize connection, start listening |
disconnect() |
Cleanup, remove listeners |
loadMessages(options?) |
Fetch paginated messages |
sendMessage(text, attachments?) |
Send a new message |
sendAction(messageId, actionId, value) |
Send a button action |
editMessage(messageId, text) |
Edit an existing message |
deleteMessage(messageId) |
Delete a message |
addReaction(messageId, emoji) |
Add a reaction |
removeReaction(messageId, emoji) |
Remove a reaction |
onMessagePosted(cb) |
Subscribe to new messages |
onMessageEdited(cb) |
Subscribe to edits |
onMessageDeleted(cb) |
Subscribe to deletions |
onReactionAdded(cb) |
Subscribe to reaction adds |
onReactionRemoved(cb) |
Subscribe to reaction removes |
onTypingStarted(cb) |
Subscribe to typing events |
onStreamingChunk(cb) |
Subscribe to streaming chunks |
reconfigure(config) |
Update identity (userId, userName, verifyToken, conversationId, headers) after construction |
Use reconfigure() to update the client's identity after construction — useful for pre-entry flows where the user's info is collected first:
client.reconfigure({
userId: "user-abc",
userName: "Alice",
verifyToken: "encrypted-token",
conversationId: "conv-xyz",
});
Updates HTTP headers (X-User-Id, X-User-Name, X-Verify-Token) and internal state.
import { PusherBroadcastClient } from "@bootdesk/js-web-adapter-core";
const broadcast = new PusherBroadcastClient({
key: "pusher-key",
cluster: "us2",
});
const client = new WebChatClient({
apiUrl: "https://your-app.com/api",
userId: "user-1",
userName: "Alice",
broadcastClient: broadcast,
});
import { PushManager, createPushSubscriptionHandlers } from "@bootdesk/js-web-adapter-core";
import { HttpClient } from "@bootdesk/js-web-adapter-core";
const httpClient = new HttpClient({ apiUrl: "https://your-app.com/api" });
const manager = new PushManager({
getVapidPublicKey: async () => "your-vapid-public-key",
onSubscribe: createPushSubscriptionHandlers(httpClient, "user-1").onSubscribe,
onUnsubscribe: createPushSubscriptionHandlers(httpClient, "user-1").onUnsubscribe,
});
await manager.initialize();
await manager.subscribe();
manager.onMessage((data) => {
console.log("Push received:", data);
});
MIT