oneskies-live-chat-widget 0.1.0 → 0.1.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -1,15 +1,33 @@
1
- # OneSkies Live Chat Widget
1
+ # Live Chat Widget
2
2
 
3
- Reusable first-party live chat widget shared by the OneSkies public site, SkyWithLux public site, and CRM.
3
+ Reusable first-party React live chat widget for connecting a public website to a backend-powered support inbox.
4
4
 
5
5
  ## Install
6
6
 
7
- Install from the private GitHub repository:
8
-
9
7
  ```bash
10
- npm install git+https://github.com/andiq123/oneskies-live-chat-widget.git
8
+ npm install oneskies-live-chat-widget
9
+ ```
10
+
11
+ ## Usage
12
+
13
+ ```tsx
14
+ import { LiveChatWidget } from "oneskies-live-chat-widget";
15
+
16
+ export function AppLiveChat() {
17
+ return (
18
+ <LiveChatWidget
19
+ apiBaseUrl="https://api.example.com/api/v1"
20
+ apiKey="public-api-key"
21
+ brandName="Your Brand"
22
+ leadSource="website"
23
+ supportLabel="Support"
24
+ />
25
+ );
26
+ }
11
27
  ```
12
28
 
29
+ The package also exports `LiveChatTypingGhost` for staff-side typing previews.
30
+
13
31
  ## Build
14
32
 
15
33
  ```bash
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.tsx"],"names":[],"mappings":"AAYA,MAAM,MAAM,kBAAkB,GAAG,UAAU,GAAG,YAAY,CAAC;AAE3D,MAAM,MAAM,mBAAmB,GAAG;IAChC,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,kBAAkB,CAAC;IAC/B,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB,CAAC;AA+CF,MAAM,MAAM,wBAAwB,GAAG;IACrC,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB,CAAC;AAEF,wBAAgB,mBAAmB,CAAC,EAAE,IAAI,EAAE,IAAS,EAAE,SAAc,EAAE,EAAE,wBAAwB,2CA2EhG;AA+GD,wBAAgB,cAAc,CAAC,EAC7B,UAAU,EACV,MAAM,EACN,SAAS,EACT,UAAU,EACV,WAA4B,EAC5B,YAA+B,GAChC,EAAE,mBAAmB,2CAw7BrB"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.tsx"],"names":[],"mappings":"AAYA,MAAM,MAAM,kBAAkB,GAAG,UAAU,GAAG,YAAY,CAAC;AAE3D,MAAM,MAAM,mBAAmB,GAAG;IAChC,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,kBAAkB,CAAC;IAC/B,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB,CAAC;AAkDF,MAAM,MAAM,wBAAwB,GAAG;IACrC,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB,CAAC;AAEF,wBAAgB,mBAAmB,CAAC,EAAE,IAAI,EAAE,IAAS,EAAE,SAAc,EAAE,EAAE,wBAAwB,2CA2EhG;AA+GD,wBAAgB,cAAc,CAAC,EAC7B,UAAU,EACV,MAAM,EACN,SAAS,EACT,UAAU,EACV,WAA4B,EAC5B,YAA+B,GAChC,EAAE,mBAAmB,2CAogCrB"}
package/dist/index.js CHANGED
@@ -6,6 +6,9 @@ const STORAGE_PREFIX = "oneskies-live-chat";
6
6
  const DEFAULT_ACCENT = "#2563eb";
7
7
  const TIDIO_HIDE_STYLE_ID = "oneskies-live-chat-hide-tidio";
8
8
  const TYPING_BROADCAST_INTERVAL_MS = 120;
9
+ const WS_RECONNECT_BASE_DELAY_MS = 650;
10
+ const WS_RECONNECT_MAX_DELAY_MS = 12000;
11
+ const WS_MAX_MESSAGE_CHARS = 128 * 1024;
9
12
  export function LiveChatTypingGhost({ name, body = "", className = "" }) {
10
13
  const preview = body.trim();
11
14
  return (_jsxs("div", { className: `os-live-chat-typing-ghost ${className}`, "aria-live": "polite", children: [_jsxs("div", { className: "os-live-chat-typing-ghost__meta", children: [_jsxs("span", { children: [name || "Guest", " is typing"] }), _jsx("i", {}), _jsx("i", {}), _jsx("i", {})] }), preview ? _jsx("p", { children: preview }) : null, _jsx("style", { children: `
@@ -74,11 +77,11 @@ export function LiveChatTypingGhost({ name, body = "", className = "" }) {
74
77
  function normalizedBaseUrl(raw) {
75
78
  return raw.replace(/\/+$/, "");
76
79
  }
77
- function wsUrl(apiBaseUrl, sessionUUID, apiKey) {
80
+ function wsUrl(apiBaseUrl, sessionUUID, apiKey, clientId) {
78
81
  const base = normalizedBaseUrl(apiBaseUrl)
79
82
  .replace(/^http:\/\//i, "ws://")
80
83
  .replace(/^https:\/\//i, "wss://");
81
- const params = new URLSearchParams({ api_key: apiKey });
84
+ const params = new URLSearchParams({ api_key: apiKey, client_id: clientId });
82
85
  return `${base}/live-chat/sessions/${encodeURIComponent(sessionUUID)}/ws?${params.toString()}`;
83
86
  }
84
87
  async function readJson(response) {
@@ -195,6 +198,8 @@ export function LiveChatWidget({ apiBaseUrl, apiKey, brandName, leadSource, acce
195
198
  const [onlineAgents, setOnlineAgents] = useState([]);
196
199
  const wsRef = useRef(null);
197
200
  const openRef = useRef(false);
201
+ const clientIdRef = useRef(randomId());
202
+ const startSessionRef = useRef(null);
198
203
  const messagesEndRef = useRef(null);
199
204
  const typingSentAtRef = useRef(0);
200
205
  const typingTimeoutRef = useRef(null);
@@ -289,6 +294,8 @@ export function LiveChatWidget({ apiBaseUrl, apiKey, brandName, leadSource, acce
289
294
  useEffect(() => {
290
295
  if (!profileReady || session || !profile)
291
296
  return;
297
+ if (startSessionRef.current)
298
+ return;
292
299
  const currentProfile = profile;
293
300
  let cancelled = false;
294
301
  async function startSession() {
@@ -296,14 +303,6 @@ export function LiveChatWidget({ apiBaseUrl, apiKey, brandName, leadSource, acce
296
303
  setLoading(true);
297
304
  setError("");
298
305
  try {
299
- const stored = window.localStorage.getItem(storageKey);
300
- if (stored) {
301
- const parsed = JSON.parse(stored);
302
- if (parsed.uuid && parsed.guest_name === currentProfile.name) {
303
- setSession(parsed);
304
- return;
305
- }
306
- }
307
306
  const signature = await buildDeviceSignature(currentProfile.visitorId);
308
307
  const response = await fetch(`${baseUrl}/live-chat/sessions`, {
309
308
  method: "POST",
@@ -329,9 +328,12 @@ export function LiveChatWidget({ apiBaseUrl, apiKey, brandName, leadSource, acce
329
328
  finally {
330
329
  if (!cancelled)
331
330
  setLoading(false);
331
+ if (startSessionRef.current === startPromise)
332
+ startSessionRef.current = null;
332
333
  }
333
334
  }
334
- void startSession();
335
+ const startPromise = startSession();
336
+ startSessionRef.current = startPromise;
335
337
  return () => {
336
338
  cancelled = true;
337
339
  };
@@ -364,66 +366,124 @@ export function LiveChatWidget({ apiBaseUrl, apiKey, brandName, leadSource, acce
364
366
  useEffect(() => {
365
367
  if (!session)
366
368
  return;
367
- const socket = new WebSocket(wsUrl(baseUrl, session.uuid, apiKey));
368
- wsRef.current = socket;
369
- socket.onopen = () => {
370
- socket.send(JSON.stringify({ type: "state", open: openRef.current }));
371
- };
372
- socket.onmessage = (event) => {
373
- if (typeof event.data !== "string")
369
+ const sessionUUID = session.uuid;
370
+ const clientId = clientIdRef.current;
371
+ let cancelled = false;
372
+ let reconnectTimer = null;
373
+ let reconnectAttempts = 0;
374
+ let activeSocket = null;
375
+ function connect() {
376
+ if (cancelled)
374
377
  return;
375
- try {
376
- const payload = JSON.parse(event.data);
377
- if (payload.action === "typing" && payload.sender === "staff") {
378
- setStaffTypingName(payload.name?.trim() || brandName);
379
- if (typingTimeoutRef.current)
380
- clearTimeout(typingTimeoutRef.current);
381
- typingTimeoutRef.current = setTimeout(() => setStaffTypingName(""), 2200);
378
+ const socket = new WebSocket(wsUrl(baseUrl, sessionUUID, apiKey, clientId));
379
+ activeSocket = socket;
380
+ wsRef.current = socket;
381
+ socket.onopen = () => {
382
+ if (cancelled || activeSocket !== socket)
382
383
  return;
383
- }
384
- if (payload.action === "session_removed") {
385
- window.localStorage.removeItem(storageKey);
386
- window.localStorage.removeItem(profileKey);
387
- setSession(null);
388
- setMessages([]);
389
- setDraft("");
390
- setNameDraft("");
391
- setProfile(null);
392
- setProfileReady(false);
393
- setStaffTypingName("");
394
- setUnreadCount(0);
395
- setUnreadPreview("");
396
- setPreviewVisible(false);
397
- socket.close();
384
+ reconnectAttempts = 0;
385
+ socket.send(JSON.stringify({ type: "state", open: openRef.current }));
386
+ };
387
+ socket.onmessage = (event) => {
388
+ if (cancelled || activeSocket !== socket)
398
389
  return;
399
- }
400
- if (payload.action !== "message_created" || !payload.message)
390
+ if (typeof event.data !== "string")
401
391
  return;
402
- setStaffTypingName("");
403
- if (payload.message.sender === "staff" && !openRef.current) {
404
- setUnreadCount((count) => Math.min(count + 1, 99));
405
- setUnreadPreview(payload.message.body);
406
- setPreviewVisible(true);
407
- if (unreadPreviewTimeoutRef.current)
408
- clearTimeout(unreadPreviewTimeoutRef.current);
409
- unreadPreviewTimeoutRef.current = setTimeout(() => setPreviewVisible(false), 5000);
392
+ if (event.data.length > WS_MAX_MESSAGE_CHARS)
393
+ return;
394
+ try {
395
+ const payload = JSON.parse(event.data);
396
+ if (payload.action === "typing" && payload.sender === "staff") {
397
+ setStaffTypingName(payload.name?.trim() || brandName);
398
+ if (typingTimeoutRef.current)
399
+ clearTimeout(typingTimeoutRef.current);
400
+ typingTimeoutRef.current = setTimeout(() => setStaffTypingName(""), 2200);
401
+ return;
402
+ }
403
+ if (payload.action === "session_removed") {
404
+ window.localStorage.removeItem(storageKey);
405
+ window.localStorage.removeItem(profileKey);
406
+ setSession(null);
407
+ setMessages([]);
408
+ setDraft("");
409
+ setNameDraft("");
410
+ setProfile(null);
411
+ setProfileReady(false);
412
+ setStaffTypingName("");
413
+ setUnreadCount(0);
414
+ setUnreadPreview("");
415
+ setPreviewVisible(false);
416
+ socket.close();
417
+ return;
418
+ }
419
+ if (payload.action !== "message_created" || !payload.message)
420
+ return;
421
+ setStaffTypingName("");
422
+ if (payload.message.sender === "staff" && !openRef.current) {
423
+ setUnreadCount((count) => Math.min(count + 1, 99));
424
+ setUnreadPreview(payload.message.body);
425
+ setPreviewVisible(true);
426
+ if (unreadPreviewTimeoutRef.current)
427
+ clearTimeout(unreadPreviewTimeoutRef.current);
428
+ unreadPreviewTimeoutRef.current = setTimeout(() => setPreviewVisible(false), 5000);
429
+ }
430
+ setMessages((current) => {
431
+ if (current.some((item) => item.id === payload.message.id))
432
+ return current;
433
+ return [...current, payload.message];
434
+ });
410
435
  }
411
- setMessages((current) => {
412
- if (current.some((item) => item.id === payload.message.id))
413
- return current;
414
- return [...current, payload.message];
415
- });
416
- }
417
- catch {
418
- // Ignore malformed realtime payloads.
436
+ catch {
437
+ // Ignore malformed realtime payloads.
438
+ }
439
+ };
440
+ socket.onclose = () => {
441
+ if (cancelled || activeSocket !== socket)
442
+ return;
443
+ const delay = Math.min(WS_RECONNECT_BASE_DELAY_MS * 2 ** reconnectAttempts, WS_RECONNECT_MAX_DELAY_MS);
444
+ reconnectAttempts += 1;
445
+ reconnectTimer = setTimeout(connect, delay + Math.random() * 350);
446
+ };
447
+ socket.onerror = () => {
448
+ if (cancelled || activeSocket !== socket)
449
+ return;
450
+ socket.close();
451
+ };
452
+ }
453
+ connect();
454
+ function endPresence() {
455
+ const url = `${baseUrl}/live-chat/sessions/${encodeURIComponent(sessionUUID)}/presence/end?${new URLSearchParams({
456
+ api_key: apiKey,
457
+ client_id: clientId,
458
+ }).toString()}`;
459
+ const body = JSON.stringify({ client_id: clientId });
460
+ if (typeof navigator !== "undefined" && "sendBeacon" in navigator) {
461
+ const blob = new Blob([body], { type: "application/json" });
462
+ navigator.sendBeacon(url, blob);
463
+ return;
419
464
  }
420
- };
465
+ void fetch(url, {
466
+ method: "POST",
467
+ headers: apiHeaders(apiKey),
468
+ credentials: "omit",
469
+ keepalive: true,
470
+ body,
471
+ }).catch(() => undefined);
472
+ }
473
+ window.addEventListener("pagehide", endPresence);
474
+ window.addEventListener("beforeunload", endPresence);
421
475
  return () => {
422
- if (socket.readyState === WebSocket.OPEN) {
423
- socket.send(JSON.stringify({ type: "state", open: false }));
476
+ cancelled = true;
477
+ window.removeEventListener("pagehide", endPresence);
478
+ window.removeEventListener("beforeunload", endPresence);
479
+ if (reconnectTimer)
480
+ clearTimeout(reconnectTimer);
481
+ if (activeSocket?.readyState === WebSocket.OPEN) {
482
+ activeSocket.send(JSON.stringify({ type: "state", open: false }));
424
483
  }
425
- socket.close();
426
- if (wsRef.current === socket)
484
+ endPresence();
485
+ activeSocket?.close();
486
+ if (wsRef.current === activeSocket)
427
487
  wsRef.current = null;
428
488
  if (typingTimeoutRef.current)
429
489
  clearTimeout(typingTimeoutRef.current);
@@ -486,7 +546,7 @@ export function LiveChatWidget({ apiBaseUrl, apiKey, brandName, leadSource, acce
486
546
  const rootStyle = {
487
547
  "--os-chat-accent": accentColor,
488
548
  };
489
- return (_jsxs("div", { className: `os-live-chat ${visible ? "is-visible" : "is-hidden"}`, style: rootStyle, children: [open ? (_jsxs("section", { className: "os-live-chat-panel", "aria-label": `${brandName} live chat`, children: [_jsxs("header", { className: "os-live-chat-header", children: [_jsx("span", { className: "os-live-chat-mark", children: _jsx("span", { className: "os-live-chat-mark-icon", children: _jsx(Headphones, { size: 22, "aria-hidden": true }) }) }), _jsxs("div", { children: [_jsx("p", { children: supportLabel }), _jsx("span", { children: visitorName ? `${visitorName}, ${brandName} team is here` : `${brandName} team` })] }), _jsx("button", { type: "button", "aria-label": "Close chat", onClick: () => setOpen(false), children: _jsx(X, { size: 20, "aria-hidden": true }) })] }), needsProfile ? (_jsxs("form", { className: "os-live-chat-intro", onSubmit: saveName, children: [_jsx("strong", { children: "Welcome. What should we call you?" }), onlineAgents.length > 0 ? (_jsxs("div", { className: "os-live-chat-online", "aria-label": `${onlineAgents.length} support agents online`, children: [_jsx("div", { className: "os-live-chat-online-avatars", children: onlineAgents.map((agent, index) => (_jsx("span", { className: "os-live-chat-online-avatar", style: { "--os-agent-color": agent.color || accentColor }, children: agent.avatar_url ? _jsx("img", { src: agent.avatar_url, alt: "" }) : null }, `${agent.avatar_url || agent.color || "agent"}-${index}`))) }), _jsx("span", { children: "Support is online now" })] })) : null, _jsx("input", { autoFocus: true, value: nameDraft, onChange: (event) => setNameDraft(event.target.value), placeholder: "Your name", maxLength: 80 }), _jsx("button", { type: "submit", disabled: !nameDraft.trim(), children: "Start chat" })] })) : (_jsxs(_Fragment, { children: [_jsxs("div", { className: "os-live-chat-body", children: [loading ? (_jsxs("div", { className: "os-live-chat-empty", children: [_jsx(Loader2, { size: 18, className: "os-live-chat-spin", "aria-hidden": true }), "Connecting..."] })) : messages.length === 0 ? (_jsxs("div", { className: "os-live-chat-empty", children: [_jsx("strong", { children: "How can we help?" }), onlineAgents.length > 0 ? (_jsxs("div", { className: "os-live-chat-online", "aria-label": `${onlineAgents.length} support agents online`, children: [_jsx("div", { className: "os-live-chat-online-avatars", children: onlineAgents.map((agent, index) => (_jsx("span", { className: "os-live-chat-online-avatar", style: { "--os-agent-color": agent.color || accentColor }, children: agent.avatar_url ? _jsx("img", { src: agent.avatar_url, alt: "" }) : null }, `${agent.avatar_url || agent.color || "agent"}-${index}`))) }), _jsx("span", { children: "Support is online now" })] })) : null, _jsx("span", { children: "Send a message and our team will reply here." })] })) : (messages.map((message) => (_jsxs("article", { className: `os-live-chat-message ${message.sender === "guest" ? "is-guest" : "is-staff"}`, children: [_jsx("p", { children: message.body }), _jsxs("span", { children: [message.sender === "guest" ? "You" : brandName, " \u00B7 ", messageTime(message.created_at)] })] }, message.id)))), staffTypingName ? (_jsxs("div", { className: "os-live-chat-typing", "aria-live": "polite", children: [_jsx("span", { children: "Support is typing" }), _jsx("i", {}), _jsx("i", {}), _jsx("i", {})] })) : null, _jsx("div", { ref: messagesEndRef })] }), error ? _jsx("p", { className: "os-live-chat-error", children: error }) : null, _jsxs("form", { className: "os-live-chat-form", onSubmit: sendMessage, children: [_jsx("textarea", { value: draft, onChange: (event) => {
549
+ return (_jsxs("div", { className: `os-live-chat ${visible ? "is-visible" : "is-hidden"}`, style: rootStyle, children: [open ? (_jsxs("section", { className: "os-live-chat-panel", "aria-label": `${brandName} live chat`, children: [_jsxs("header", { className: "os-live-chat-header", children: [_jsx("span", { className: "os-live-chat-mark", children: _jsx("span", { className: "os-live-chat-mark-icon", children: _jsx(Headphones, { size: 22, "aria-hidden": true }) }) }), _jsxs("div", { children: [_jsx("p", { children: supportLabel }), _jsx("span", { children: visitorName ? `${visitorName}, ${brandName} team is here` : `${brandName} team` })] }), _jsx("button", { type: "button", "aria-label": "Close chat", onClick: () => setOpen(false), children: _jsx(X, { size: 20, "aria-hidden": true }) })] }), needsProfile ? (_jsxs("form", { className: "os-live-chat-intro", onSubmit: saveName, children: [_jsx("strong", { children: "Welcome. What should we call you?" }), onlineAgents.length > 0 ? (_jsxs("div", { className: "os-live-chat-online", "aria-label": `${onlineAgents.length} support agents online`, children: [_jsx("div", { className: "os-live-chat-online-avatars", children: onlineAgents.map((agent, index) => (_jsx("span", { className: "os-live-chat-online-avatar", style: { "--os-agent-color": agent.color || accentColor }, children: agent.avatar_url ? _jsx("img", { src: agent.avatar_url, alt: "" }) : null }, `${agent.avatar_url || agent.color || "agent"}-${index}`))) }), _jsx("span", { children: "Support is online now" })] })) : null, _jsx("input", { autoFocus: true, value: nameDraft, onChange: (event) => setNameDraft(event.target.value), placeholder: "Your name", maxLength: 80 }), _jsx("button", { type: "submit", disabled: !nameDraft.trim(), children: "Start chat" })] })) : (_jsxs(_Fragment, { children: [_jsxs("div", { className: "os-live-chat-body", children: [loading ? (_jsxs("div", { className: "os-live-chat-empty", children: [_jsx(Loader2, { size: 18, className: "os-live-chat-spin", "aria-hidden": true }), "Connecting..."] })) : messages.length === 0 ? (_jsxs("div", { className: "os-live-chat-empty", children: [_jsxs("strong", { children: ["Hi there ", _jsx("span", { "aria-hidden": true, children: "\uD83D\uDC4B" })] }), onlineAgents.length > 0 ? (_jsxs("div", { className: "os-live-chat-online", "aria-label": `${onlineAgents.length} support agents online`, children: [_jsx("div", { className: "os-live-chat-online-avatars", children: onlineAgents.map((agent, index) => (_jsx("span", { className: "os-live-chat-online-avatar", style: { "--os-agent-color": agent.color || accentColor }, children: agent.avatar_url ? _jsx("img", { src: agent.avatar_url, alt: "" }) : null }, `${agent.avatar_url || agent.color || "agent"}-${index}`))) }), _jsx("span", { children: "Support is online now" })] })) : null, _jsx("span", { children: "How may we help you today?" })] })) : (messages.map((message) => (_jsxs("article", { className: `os-live-chat-message ${message.sender === "guest" ? "is-guest" : "is-staff"}`, children: [_jsx("p", { children: message.body }), _jsxs("span", { children: [message.sender === "guest" ? "You" : brandName, " \u00B7 ", messageTime(message.created_at)] })] }, message.id)))), staffTypingName ? (_jsxs("div", { className: "os-live-chat-typing", "aria-live": "polite", children: [_jsx("span", { children: "Support is typing" }), _jsx("i", {}), _jsx("i", {}), _jsx("i", {})] })) : null, _jsx("div", { ref: messagesEndRef })] }), error ? _jsx("p", { className: "os-live-chat-error", children: error }) : null, _jsxs("form", { className: "os-live-chat-form", onSubmit: sendMessage, children: [_jsx("textarea", { value: draft, onChange: (event) => {
490
550
  const nextDraft = event.target.value;
491
551
  setDraft(nextDraft);
492
552
  announceTyping(nextDraft);
@@ -495,7 +555,7 @@ export function LiveChatWidget({ apiBaseUrl, apiKey, brandName, leadSource, acce
495
555
  event.preventDefault();
496
556
  event.currentTarget.form?.requestSubmit();
497
557
  }
498
- } }), _jsx("button", { type: "submit", disabled: !draft.trim() || !session || sending, "aria-label": "Send message", children: sending ? (_jsx(Loader2, { size: 19, className: "os-live-chat-spin", "aria-hidden": true })) : (_jsx(SendHorizontal, { size: 20, "aria-hidden": true })) })] })] }))] })) : null, visible ? (_jsxs("button", { className: "os-live-chat-bubble", type: "button", onClick: () => setOpen((value) => !value), "aria-label": "Open live chat", children: [_jsx(MessageCircle, { size: 25, "aria-hidden": true }), unreadCount > 0 ? _jsx("strong", { className: "os-live-chat-badge", children: unreadCount }) : null, _jsx("span", { className: unreadCount > 0 ? `has-unread ${previewVisible ? "is-preview-visible" : "is-preview-hidden"}` : "", children: unreadCount > 0 && previewVisible ? (_jsxs(_Fragment, { children: [_jsx("b", { children: "New message" }), _jsx("small", { children: unreadPreview })] })) : ("Need live assistance?") })] })) : null, _jsx("style", { children: `
558
+ } }), _jsx("button", { type: "submit", disabled: !draft.trim() || !session || sending, "aria-label": "Send message", children: sending ? (_jsx(Loader2, { size: 19, className: "os-live-chat-spin", "aria-hidden": true })) : (_jsx(SendHorizontal, { size: 20, "aria-hidden": true })) })] })] }))] })) : null, visible ? (_jsxs("button", { className: "os-live-chat-bubble", type: "button", onClick: () => setOpen((value) => !value), "aria-label": "Open live chat", children: [_jsx(MessageCircle, { size: 25, "aria-hidden": true }), unreadCount > 0 ? _jsx("strong", { className: "os-live-chat-badge", children: unreadCount }) : null, _jsx("span", { className: unreadCount > 0 ? `has-unread ${previewVisible ? "is-preview-visible" : "is-preview-hidden"}` : "", children: unreadCount > 0 && previewVisible ? (_jsxs(_Fragment, { children: [_jsx("b", { children: "New message" }), _jsx("small", { children: unreadPreview })] })) : (_jsxs(_Fragment, { children: ["Need live assistance? ", _jsx("small", { className: "os-live-chat-wave", "aria-hidden": true, children: "\uD83D\uDC4B" })] })) })] })) : null, _jsx("style", { children: `
499
559
  .os-live-chat {
500
560
  position: fixed;
501
561
  right: max(18px, env(safe-area-inset-right));
@@ -575,6 +635,14 @@ export function LiveChatWidget({ apiBaseUrl, apiKey, brandName, leadSource, acce
575
635
  font-weight: 700;
576
636
  line-height: 1.25;
577
637
  }
638
+ .os-live-chat-wave {
639
+ display: inline-block;
640
+ margin-left: 3px;
641
+ font-size: 18px;
642
+ line-height: 1;
643
+ transform-origin: 70% 70%;
644
+ animation: os-chat-wave 1.8s ease-in-out 900ms 2;
645
+ }
578
646
  .os-live-chat-badge {
579
647
  position: absolute;
580
648
  top: -5px;
@@ -958,6 +1026,17 @@ export function LiveChatWidget({ apiBaseUrl, apiKey, brandName, leadSource, acce
958
1026
  transform: translateX(0);
959
1027
  }
960
1028
  }
1029
+ @keyframes os-chat-wave {
1030
+ 0%, 60%, 100% {
1031
+ transform: rotate(0deg);
1032
+ }
1033
+ 10%, 30% {
1034
+ transform: rotate(14deg);
1035
+ }
1036
+ 20%, 40% {
1037
+ transform: rotate(-9deg);
1038
+ }
1039
+ }
961
1040
  @keyframes os-chat-preview-in {
962
1041
  from {
963
1042
  opacity: 0;
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.tsx"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "oneskies-live-chat-widget",
3
- "version": "0.1.0",
3
+ "version": "0.1.2",
4
4
  "type": "module",
5
5
  "main": "./dist/index.js",
6
6
  "types": "./dist/index.d.ts",
package/src/index.tsx CHANGED
@@ -65,6 +65,9 @@ const STORAGE_PREFIX = "oneskies-live-chat";
65
65
  const DEFAULT_ACCENT = "#2563eb";
66
66
  const TIDIO_HIDE_STYLE_ID = "oneskies-live-chat-hide-tidio";
67
67
  const TYPING_BROADCAST_INTERVAL_MS = 120;
68
+ const WS_RECONNECT_BASE_DELAY_MS = 650;
69
+ const WS_RECONNECT_MAX_DELAY_MS = 12_000;
70
+ const WS_MAX_MESSAGE_CHARS = 128 * 1024;
68
71
 
69
72
  export type LiveChatTypingGhostProps = {
70
73
  name: string;
@@ -153,11 +156,11 @@ function normalizedBaseUrl(raw: string): string {
153
156
  return raw.replace(/\/+$/, "");
154
157
  }
155
158
 
156
- function wsUrl(apiBaseUrl: string, sessionUUID: string, apiKey: string): string {
159
+ function wsUrl(apiBaseUrl: string, sessionUUID: string, apiKey: string, clientId: string): string {
157
160
  const base = normalizedBaseUrl(apiBaseUrl)
158
161
  .replace(/^http:\/\//i, "ws://")
159
162
  .replace(/^https:\/\//i, "wss://");
160
- const params = new URLSearchParams({ api_key: apiKey });
163
+ const params = new URLSearchParams({ api_key: apiKey, client_id: clientId });
161
164
  return `${base}/live-chat/sessions/${encodeURIComponent(sessionUUID)}/ws?${params.toString()}`;
162
165
  }
163
166
 
@@ -284,6 +287,8 @@ export function LiveChatWidget({
284
287
  const [onlineAgents, setOnlineAgents] = useState<LiveChatOnlineAgent[]>([]);
285
288
  const wsRef = useRef<WebSocket | null>(null);
286
289
  const openRef = useRef(false);
290
+ const clientIdRef = useRef(randomId());
291
+ const startSessionRef = useRef<Promise<void> | null>(null);
287
292
  const messagesEndRef = useRef<HTMLDivElement | null>(null);
288
293
  const typingSentAtRef = useRef(0);
289
294
  const typingTimeoutRef = useRef<ReturnType<typeof setTimeout> | null>(null);
@@ -375,20 +380,13 @@ export function LiveChatWidget({
375
380
 
376
381
  useEffect(() => {
377
382
  if (!profileReady || session || !profile) return;
383
+ if (startSessionRef.current) return;
378
384
  const currentProfile = profile;
379
385
  let cancelled = false;
380
386
  async function startSession() {
381
387
  if (visible && open) setLoading(true);
382
388
  setError("");
383
389
  try {
384
- const stored = window.localStorage.getItem(storageKey);
385
- if (stored) {
386
- const parsed = JSON.parse(stored) as LiveChatSession;
387
- if (parsed.uuid && parsed.guest_name === currentProfile.name) {
388
- setSession(parsed);
389
- return;
390
- }
391
- }
392
390
  const signature = await buildDeviceSignature(currentProfile.visitorId);
393
391
  const response = await fetch(`${baseUrl}/live-chat/sessions`, {
394
392
  method: "POST",
@@ -409,9 +407,11 @@ export function LiveChatWidget({
409
407
  if (!cancelled && visible && open) setError(err instanceof Error ? err.message : "Chat is unavailable.");
410
408
  } finally {
411
409
  if (!cancelled) setLoading(false);
410
+ if (startSessionRef.current === startPromise) startSessionRef.current = null;
412
411
  }
413
412
  }
414
- void startSession();
413
+ const startPromise = startSession();
414
+ startSessionRef.current = startPromise;
415
415
  return () => {
416
416
  cancelled = true;
417
417
  };
@@ -441,60 +441,116 @@ export function LiveChatWidget({
441
441
 
442
442
  useEffect(() => {
443
443
  if (!session) return;
444
- const socket = new WebSocket(wsUrl(baseUrl, session.uuid, apiKey));
445
- wsRef.current = socket;
446
- socket.onopen = () => {
447
- socket.send(JSON.stringify({ type: "state", open: openRef.current }));
448
- };
449
- socket.onmessage = (event) => {
450
- if (typeof event.data !== "string") return;
451
- try {
452
- const payload = JSON.parse(event.data) as SocketPayload;
453
- if (payload.action === "typing" && payload.sender === "staff") {
454
- setStaffTypingName(payload.name?.trim() || brandName);
455
- if (typingTimeoutRef.current) clearTimeout(typingTimeoutRef.current);
456
- typingTimeoutRef.current = setTimeout(() => setStaffTypingName(""), 2200);
457
- return;
458
- }
459
- if (payload.action === "session_removed") {
460
- window.localStorage.removeItem(storageKey);
461
- window.localStorage.removeItem(profileKey);
462
- setSession(null);
463
- setMessages([]);
464
- setDraft("");
465
- setNameDraft("");
466
- setProfile(null);
467
- setProfileReady(false);
444
+ const sessionUUID = session.uuid;
445
+ const clientId = clientIdRef.current;
446
+ let cancelled = false;
447
+ let reconnectTimer: ReturnType<typeof setTimeout> | null = null;
448
+ let reconnectAttempts = 0;
449
+ let activeSocket: WebSocket | null = null;
450
+
451
+ function connect() {
452
+ if (cancelled) return;
453
+ const socket = new WebSocket(wsUrl(baseUrl, sessionUUID, apiKey, clientId));
454
+ activeSocket = socket;
455
+ wsRef.current = socket;
456
+ socket.onopen = () => {
457
+ if (cancelled || activeSocket !== socket) return;
458
+ reconnectAttempts = 0;
459
+ socket.send(JSON.stringify({ type: "state", open: openRef.current }));
460
+ };
461
+ socket.onmessage = (event) => {
462
+ if (cancelled || activeSocket !== socket) return;
463
+ if (typeof event.data !== "string") return;
464
+ if (event.data.length > WS_MAX_MESSAGE_CHARS) return;
465
+ try {
466
+ const payload = JSON.parse(event.data) as SocketPayload;
467
+ if (payload.action === "typing" && payload.sender === "staff") {
468
+ setStaffTypingName(payload.name?.trim() || brandName);
469
+ if (typingTimeoutRef.current) clearTimeout(typingTimeoutRef.current);
470
+ typingTimeoutRef.current = setTimeout(() => setStaffTypingName(""), 2200);
471
+ return;
472
+ }
473
+ if (payload.action === "session_removed") {
474
+ window.localStorage.removeItem(storageKey);
475
+ window.localStorage.removeItem(profileKey);
476
+ setSession(null);
477
+ setMessages([]);
478
+ setDraft("");
479
+ setNameDraft("");
480
+ setProfile(null);
481
+ setProfileReady(false);
482
+ setStaffTypingName("");
483
+ setUnreadCount(0);
484
+ setUnreadPreview("");
485
+ setPreviewVisible(false);
486
+ socket.close();
487
+ return;
488
+ }
489
+ if (payload.action !== "message_created" || !payload.message) return;
468
490
  setStaffTypingName("");
469
- setUnreadCount(0);
470
- setUnreadPreview("");
471
- setPreviewVisible(false);
472
- socket.close();
473
- return;
474
- }
475
- if (payload.action !== "message_created" || !payload.message) return;
476
- setStaffTypingName("");
477
- if (payload.message.sender === "staff" && !openRef.current) {
478
- setUnreadCount((count) => Math.min(count + 1, 99));
479
- setUnreadPreview(payload.message.body);
480
- setPreviewVisible(true);
481
- if (unreadPreviewTimeoutRef.current) clearTimeout(unreadPreviewTimeoutRef.current);
482
- unreadPreviewTimeoutRef.current = setTimeout(() => setPreviewVisible(false), 5000);
483
- }
484
- setMessages((current) => {
485
- if (current.some((item) => item.id === payload.message!.id)) return current;
486
- return [...current, payload.message!];
487
- });
488
- } catch {
489
- // Ignore malformed realtime payloads.
491
+ if (payload.message.sender === "staff" && !openRef.current) {
492
+ setUnreadCount((count) => Math.min(count + 1, 99));
493
+ setUnreadPreview(payload.message.body);
494
+ setPreviewVisible(true);
495
+ if (unreadPreviewTimeoutRef.current) clearTimeout(unreadPreviewTimeoutRef.current);
496
+ unreadPreviewTimeoutRef.current = setTimeout(() => setPreviewVisible(false), 5000);
497
+ }
498
+ setMessages((current) => {
499
+ if (current.some((item) => item.id === payload.message!.id)) return current;
500
+ return [...current, payload.message!];
501
+ });
502
+ } catch {
503
+ // Ignore malformed realtime payloads.
504
+ }
505
+ };
506
+ socket.onclose = () => {
507
+ if (cancelled || activeSocket !== socket) return;
508
+ const delay = Math.min(WS_RECONNECT_BASE_DELAY_MS * 2 ** reconnectAttempts, WS_RECONNECT_MAX_DELAY_MS);
509
+ reconnectAttempts += 1;
510
+ reconnectTimer = setTimeout(connect, delay + Math.random() * 350);
511
+ };
512
+ socket.onerror = () => {
513
+ if (cancelled || activeSocket !== socket) return;
514
+ socket.close();
515
+ };
516
+ }
517
+
518
+ connect();
519
+
520
+ function endPresence() {
521
+ const url = `${baseUrl}/live-chat/sessions/${encodeURIComponent(sessionUUID)}/presence/end?${new URLSearchParams({
522
+ api_key: apiKey,
523
+ client_id: clientId,
524
+ }).toString()}`;
525
+ const body = JSON.stringify({ client_id: clientId });
526
+ if (typeof navigator !== "undefined" && "sendBeacon" in navigator) {
527
+ const blob = new Blob([body], { type: "application/json" });
528
+ navigator.sendBeacon(url, blob);
529
+ return;
490
530
  }
491
- };
531
+ void fetch(url, {
532
+ method: "POST",
533
+ headers: apiHeaders(apiKey),
534
+ credentials: "omit",
535
+ keepalive: true,
536
+ body,
537
+ }).catch(() => undefined);
538
+ }
539
+
540
+ window.addEventListener("pagehide", endPresence);
541
+ window.addEventListener("beforeunload", endPresence);
542
+
492
543
  return () => {
493
- if (socket.readyState === WebSocket.OPEN) {
494
- socket.send(JSON.stringify({ type: "state", open: false }));
544
+ cancelled = true;
545
+ window.removeEventListener("pagehide", endPresence);
546
+ window.removeEventListener("beforeunload", endPresence);
547
+ if (reconnectTimer) clearTimeout(reconnectTimer);
548
+ if (activeSocket?.readyState === WebSocket.OPEN) {
549
+ activeSocket.send(JSON.stringify({ type: "state", open: false }));
495
550
  }
496
- socket.close();
497
- if (wsRef.current === socket) wsRef.current = null;
551
+ endPresence();
552
+ activeSocket?.close();
553
+ if (wsRef.current === activeSocket) wsRef.current = null;
498
554
  if (typingTimeoutRef.current) clearTimeout(typingTimeoutRef.current);
499
555
  if (unreadPreviewTimeoutRef.current) clearTimeout(unreadPreviewTimeoutRef.current);
500
556
  };
@@ -613,7 +669,9 @@ export function LiveChatWidget({
613
669
  </div>
614
670
  ) : messages.length === 0 ? (
615
671
  <div className="os-live-chat-empty">
616
- <strong>How can we help?</strong>
672
+ <strong>
673
+ Hi there <span aria-hidden>👋</span>
674
+ </strong>
617
675
  {onlineAgents.length > 0 ? (
618
676
  <div className="os-live-chat-online" aria-label={`${onlineAgents.length} support agents online`}>
619
677
  <div className="os-live-chat-online-avatars">
@@ -630,7 +688,7 @@ export function LiveChatWidget({
630
688
  <span>Support is online now</span>
631
689
  </div>
632
690
  ) : null}
633
- <span>Send a message and our team will reply here.</span>
691
+ <span>How may we help you today?</span>
634
692
  </div>
635
693
  ) : (
636
694
  messages.map((message) => (
@@ -696,7 +754,9 @@ export function LiveChatWidget({
696
754
  <small>{unreadPreview}</small>
697
755
  </>
698
756
  ) : (
699
- "Need live assistance?"
757
+ <>
758
+ Need live assistance? <small className="os-live-chat-wave" aria-hidden>👋</small>
759
+ </>
700
760
  )}
701
761
  </span>
702
762
  </button>
@@ -781,6 +841,14 @@ export function LiveChatWidget({
781
841
  font-weight: 700;
782
842
  line-height: 1.25;
783
843
  }
844
+ .os-live-chat-wave {
845
+ display: inline-block;
846
+ margin-left: 3px;
847
+ font-size: 18px;
848
+ line-height: 1;
849
+ transform-origin: 70% 70%;
850
+ animation: os-chat-wave 1.8s ease-in-out 900ms 2;
851
+ }
784
852
  .os-live-chat-badge {
785
853
  position: absolute;
786
854
  top: -5px;
@@ -1164,6 +1232,17 @@ export function LiveChatWidget({
1164
1232
  transform: translateX(0);
1165
1233
  }
1166
1234
  }
1235
+ @keyframes os-chat-wave {
1236
+ 0%, 60%, 100% {
1237
+ transform: rotate(0deg);
1238
+ }
1239
+ 10%, 30% {
1240
+ transform: rotate(14deg);
1241
+ }
1242
+ 20%, 40% {
1243
+ transform: rotate(-9deg);
1244
+ }
1245
+ }
1167
1246
  @keyframes os-chat-preview-in {
1168
1247
  from {
1169
1248
  opacity: 0;