@centive/aria-sdk 0.5.4 → 0.5.6

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
@@ -15,6 +15,7 @@ A production-ready React SDK for [Anam AI](https://docs.anam.ai/) with dual-mode
15
15
  ### 🚀 Global Session Management
16
16
  - **Session Preloading** - Session is ready before user clicks, for instant response
17
17
  - **Session Persistence** - Session survives page navigation in SPAs
18
+ - **Widget Toggle Persistence** - Keep session alive when widget is closed/reopened (optional)
18
19
  - **Proactive Refresh** - Automatically refreshes session before expiration
19
20
  - **Tab Visibility Awareness** - Only refreshes when tab is active
20
21
  - **Error Recovery** - Exponential backoff retry on failures
@@ -274,6 +275,7 @@ function MyComponent() {
274
275
  sessionState,
275
276
  sessionManagerStatus, // 'idle' | 'connecting' | 'connected' | 'preloading' | 'ready' | 'refreshing' | 'error'
276
277
  isSessionPreloaded, // True when session is ready before widget opens
278
+ isSessionPaused, // True when session is paused (widget closed with persistSession: true)
277
279
 
278
280
  // Actions
279
281
  openAssistant,
@@ -282,7 +284,7 @@ function MyComponent() {
282
284
  sendMessage,
283
285
  toggleMute,
284
286
  startSession,
285
- stopSession,
287
+ stopSession, // Ends session (ignores persistSession setting)
286
288
  triggerSession,
287
289
  refreshSession, // Manually refresh the session
288
290
  setVideoElement,
@@ -390,6 +392,12 @@ interface AriaSDKConfig {
390
392
  onSessionRefresh?: () => void; // Callback when session is refreshed
391
393
  onSessionRefreshError?: (error: Error) => void; // Callback when refresh fails
392
394
 
395
+ // Session persistence options (Widget Toggle Persistence)
396
+ persistSession?: boolean; // Keep session alive when widget closes (default: false)
397
+ keepWebSocketAlive?: boolean; // Keep WebSocket connected when paused (default: true)
398
+ onSessionPaused?: () => void; // Callback when session is paused (widget closed)
399
+ onSessionResumed?: () => void; // Callback when session is resumed (widget reopened)
400
+
393
401
  // Rendering options
394
402
  showFloatingButton?: boolean; // Show the default floating button (default: true)
395
403
  showAssistant?: boolean; // Show the assistant widget (default: true)
@@ -535,6 +543,66 @@ function App() {
535
543
 
536
544
  > **Note:** Even if placed incorrectly, the SDK's singleton pattern provides a safety net to maintain session continuity.
537
545
 
546
+ ### Session Persistence (Widget Toggle)
547
+
548
+ By default, the SDK ends the session when the widget is closed. With `persistSession: true`, the session stays alive across widget open/close cycles:
549
+
550
+ ```tsx
551
+ const config = {
552
+ websocketUrl: 'ws://localhost:8000/ws',
553
+ userId: 'user_123',
554
+
555
+ // Enable session persistence
556
+ persistSession: true, // Keep session alive when widget closes
557
+ keepWebSocketAlive: true, // Keep WebSocket connected (default: true)
558
+
559
+ // Callbacks
560
+ onSessionPaused: () => {
561
+ console.log('Session paused - widget closed');
562
+ },
563
+ onSessionResumed: () => {
564
+ console.log('Session resumed - widget reopened');
565
+ },
566
+ };
567
+ ```
568
+
569
+ **Behavior with `persistSession: true`:**
570
+
571
+ | Action | Result |
572
+ |--------|--------|
573
+ | User opens widget | Uses existing session (or creates new if none) |
574
+ | User closes widget | Session paused, stays alive |
575
+ | User reopens widget | Session resumed instantly |
576
+ | User calls `stopSession()` | Session ends (explicit action) |
577
+ | Tab/window closes | Session ends (beforeunload) |
578
+ | Session token expires | New session created on next open |
579
+
580
+ **Use Cases:**
581
+ - Customer support chat - User minimizes to browse, reopens to continue
582
+ - Sales assistant - Persistent context across multiple page views
583
+ - Onboarding flow - AI maintains context as user navigates steps
584
+ - Dashboard help - Toggle help widget without losing conversation
585
+
586
+ ```tsx
587
+ function SessionController() {
588
+ const {
589
+ isSessionPaused,
590
+ stopSession,
591
+ } = useAria();
592
+
593
+ return (
594
+ <div>
595
+ <p>Session paused: {isSessionPaused ? 'Yes' : 'No'}</p>
596
+
597
+ {/* Explicitly end session (ignores persistSession) */}
598
+ <button onClick={stopSession}>
599
+ End Session
600
+ </button>
601
+ </div>
602
+ );
603
+ }
604
+ ```
605
+
538
606
  ### Session Refresh
539
607
 
540
608
  The SDK automatically refreshes sessions before they expire:
@@ -13,6 +13,8 @@ export interface AriaContextType {
13
13
  sessionManagerStatus: SessionManagerStatus;
14
14
  /** Whether the session is preloaded and ready for instant use */
15
15
  isSessionPreloaded: boolean;
16
+ /** Whether the session is currently paused (widget closed with persistSession: true) */
17
+ isSessionPaused: boolean;
16
18
  openAssistant: (mode?: TriggerMode) => void;
17
19
  closeAssistant: () => void;
18
20
  toggleChat: () => void;
@@ -1 +1 @@
1
- {"version":3,"file":"AriaContext.d.ts","sourceRoot":"","sources":["../../src/context/AriaContext.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,WAAW,EAAE,aAAa,EAAE,WAAW,EAAE,WAAW,EAAE,KAAK,EAAE,YAAY,EAAE,qBAAqB,EAAE,oBAAoB,EAAE,MAAM,SAAS,CAAC;AAEtJ,MAAM,WAAW,eAAe;IAE9B,MAAM,EAAE,OAAO,CAAC;IAChB,WAAW,EAAE,OAAO,CAAC;IACrB,SAAS,EAAE,OAAO,CAAC;IACnB,YAAY,EAAE,WAAW,EAAE,CAAC;IAC5B,cAAc,EAAE,MAAM,CAAC;IACvB,aAAa,EAAE,OAAO,CAAC;IACvB,OAAO,EAAE,OAAO,CAAC;IACjB,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IAGrB,YAAY,EAAE,YAAY,CAAC;IAC3B,4CAA4C;IAC5C,oBAAoB,EAAE,oBAAoB,CAAC;IAC3C,iEAAiE;IACjE,kBAAkB,EAAE,OAAO,CAAC;IAG5B,aAAa,EAAE,CAAC,IAAI,CAAC,EAAE,WAAW,KAAK,IAAI,CAAC;IAC5C,cAAc,EAAE,MAAM,IAAI,CAAC;IAC3B,UAAU,EAAE,MAAM,IAAI,CAAC;IACvB,WAAW,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IAChD,UAAU,EAAE,MAAM,IAAI,CAAC;IACvB,YAAY,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IAClC,WAAW,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IACjC,cAAc,EAAE,CAAC,OAAO,CAAC,EAAE,qBAAqB,KAAK,IAAI,CAAC;IAC1D,+DAA+D;IAC/D,cAAc,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IACpC,eAAe,EAAE,CAAC,OAAO,EAAE,gBAAgB,GAAG,IAAI,KAAK,IAAI,CAAC;IAG5D,WAAW,EAAE,WAAW,CAAC;IACzB,WAAW,EAAE,WAAW,CAAC;IACzB,KAAK,EAAE,KAAK,CAAC;IAGb,MAAM,EAAE,aAAa,CAAC;IAGtB,YAAY,EAAE,MAAM,MAAM,GAAG,IAAI,CAAC;CACnC;AAED,eAAO,MAAM,WAAW,iDAA8C,CAAC"}
1
+ {"version":3,"file":"AriaContext.d.ts","sourceRoot":"","sources":["../../src/context/AriaContext.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,WAAW,EAAE,aAAa,EAAE,WAAW,EAAE,WAAW,EAAE,KAAK,EAAE,YAAY,EAAE,qBAAqB,EAAE,oBAAoB,EAAE,MAAM,SAAS,CAAC;AAEtJ,MAAM,WAAW,eAAe;IAE9B,MAAM,EAAE,OAAO,CAAC;IAChB,WAAW,EAAE,OAAO,CAAC;IACrB,SAAS,EAAE,OAAO,CAAC;IACnB,YAAY,EAAE,WAAW,EAAE,CAAC;IAC5B,cAAc,EAAE,MAAM,CAAC;IACvB,aAAa,EAAE,OAAO,CAAC;IACvB,OAAO,EAAE,OAAO,CAAC;IACjB,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IAGrB,YAAY,EAAE,YAAY,CAAC;IAC3B,4CAA4C;IAC5C,oBAAoB,EAAE,oBAAoB,CAAC;IAC3C,iEAAiE;IACjE,kBAAkB,EAAE,OAAO,CAAC;IAC5B,wFAAwF;IACxF,eAAe,EAAE,OAAO,CAAC;IAGzB,aAAa,EAAE,CAAC,IAAI,CAAC,EAAE,WAAW,KAAK,IAAI,CAAC;IAC5C,cAAc,EAAE,MAAM,IAAI,CAAC;IAC3B,UAAU,EAAE,MAAM,IAAI,CAAC;IACvB,WAAW,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IAChD,UAAU,EAAE,MAAM,IAAI,CAAC;IACvB,YAAY,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IAClC,WAAW,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IACjC,cAAc,EAAE,CAAC,OAAO,CAAC,EAAE,qBAAqB,KAAK,IAAI,CAAC;IAC1D,+DAA+D;IAC/D,cAAc,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IACpC,eAAe,EAAE,CAAC,OAAO,EAAE,gBAAgB,GAAG,IAAI,KAAK,IAAI,CAAC;IAG5D,WAAW,EAAE,WAAW,CAAC;IACzB,WAAW,EAAE,WAAW,CAAC;IACzB,KAAK,EAAE,KAAK,CAAC;IAGb,MAAM,EAAE,aAAa,CAAC;IAGtB,YAAY,EAAE,MAAM,MAAM,GAAG,IAAI,CAAC;CACnC;AAED,eAAO,MAAM,WAAW,iDAA8C,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"AriaProvider.d.ts","sourceRoot":"","sources":["../../src/context/AriaProvider.tsx"],"names":[],"mappings":"AAAA,OAAO,EAA4C,KAAK,EAAE,EAAE,KAAK,SAAS,EAAE,MAAM,OAAO,CAAC;AAU1F,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAK7C,UAAU,iBAAiB;IACzB,MAAM,EAAE,aAAa,CAAC;IACtB,QAAQ,CAAC,EAAE,SAAS,CAAC;CACtB;AAMD,eAAO,MAAM,YAAY,EAAE,EAAE,CAAC,iBAAiB,CA2X9C,CAAC"}
1
+ {"version":3,"file":"AriaProvider.d.ts","sourceRoot":"","sources":["../../src/context/AriaProvider.tsx"],"names":[],"mappings":"AAAA,OAAO,EAA4C,KAAK,EAAE,EAAE,KAAK,SAAS,EAAE,MAAM,OAAO,CAAC;AAU1F,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAK7C,UAAU,iBAAiB;IACzB,MAAM,EAAE,aAAa,CAAC;IACtB,QAAQ,CAAC,EAAE,SAAS,CAAC;CACtB;AAMD,eAAO,MAAM,YAAY,EAAE,EAAE,CAAC,iBAAiB,CA6a9C,CAAC"}