Files
message-inbox-web-frontend-sdk/docs/SDK.md
T
2026-07-17 21:48:37 +05:30

3.4 KiB

SDK reference — @lynkd/messaging-inbox-sdk

Headless React building blocks for messaging, inbox and support. Wrap your tree in the provider, then use the hooks. Bring your own UI, or reuse the demo components in apps/web/components.

Install & provider

import { MessagingInboxProvider } from "@lynkd/messaging-inbox-sdk";

<MessagingInboxProvider
  bffBaseUrl=""                       // "" = same-origin /api/bff
  brandName="LynkedUp Pro"
  theme={{ mode: "dark", accent: "#FDA913", radiusCard: "20px" }}
  flags={{ huddles: true, support: true }}
>
  <App />
</MessagingInboxProvider>

Prefer resolving config on the server and passing a single config prop (as the demo does via getServerConfig()), so env-driven flags/theme reach the client as plain JSON.

Context hooks

Hook Returns
useSdk() { config, flags, client, me, users, channels, userById, channelById, scheme, setScheme, toggleScheme, theme, setThemeOverrides, resetTheme, loading, refresh }
useFeature(name) boolean for one flag
useFeatureFlags() the whole FeatureFlags object
useTheme() { scheme, setScheme, toggleScheme, theme, setThemeOverrides, resetTheme }

Data hooks

Hook Purpose
useChannels() { all, starred, channels, dms, totalUnread, totalMentions, me }
useChannel(id) one Channel
useMessages(channelId) { messages, pinned, send, react, pin, save, reload, loading }
useThread(channelId, parentId) { parent, replies, reply, reload }
useTyping(channelId) ID[] currently typing (mock)
useInbox(state?) { items, state, setState, markDone, snooze, archive, reload }
useTickets(scope?) { tickets, patch, reload }
useTicket(id) { ticket, reply, setState, reload }
useAvailability() AgentAvailability[]
useSearch() { query, setQuery, results, loading } (debounced)
useNotifications() { notifications, unread }

Minimal chat example

import { useChannels, useMessages } from "@lynkd/messaging-inbox-sdk";

function Chat() {
  const { channels } = useChannels();
  const active = channels[0]?.id ?? null;
  const { messages, send } = useMessages(active);

  return (
    <>
      <ul>{messages.map((m) => <li key={m.id}>{m.body}</li>)}</ul>
      <form onSubmit={(e) => { e.preventDefault();
        const f = e.currentTarget.elements.namedItem("t") as HTMLInputElement;
        send(f.value); f.value = ""; }}>
        <input name="t" placeholder="Message…" />
      </form>
    </>
  );
}

Direct client (no React)

import { BffClient } from "@lynkd/messaging-inbox-sdk";
const client = new BffClient("");           // base URL
const { channels } = await client.listChannels();
await client.sendMessage(channels[0].id, "Hi");

Types

Import any domain type: User, Channel, Message, RichBlock, Attachment, Reaction, InboxItem, Ticket, CallbackRequest, AgentAvailability, Notification, SearchResult, Bootstrap, PresenceState, ChannelKind, InboxKind, InboxState, TicketState, TicketPriority — plus config types FeatureFlags, ThemeConfig, ThemeTokens, SdkConfig.

Publishing the SDK

The package is workspace-consumed as TS source. To publish standalone, add a build step (e.g. tsup src/index.ts --dts --format esm,cjs) and point main/module/types at dist/. The public surface is the index.ts barrel.