@centive/aria-sdk 0.5.4 → 0.5.5
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 +69 -1
- package/dist/context/AriaContext.d.ts +2 -0
- package/dist/context/AriaContext.d.ts.map +1 -1
- package/dist/context/AriaProvider.d.ts.map +1 -1
- package/dist/{index-BpJZlLfH.js → index-B3GM9bzB.js} +843 -712
- package/dist/index-B3GM9bzB.js.map +1 -0
- package/dist/{index-Cg6WCsh_.js → index-B5eKfkTN.js} +3 -3
- package/dist/{index-Cg6WCsh_.js.map → index-B5eKfkTN.js.map} +1 -1
- package/dist/index.js +1 -1
- package/dist/lib/AriaSessionManager.d.ts +43 -0
- package/dist/lib/AriaSessionManager.d.ts.map +1 -1
- package/dist/types/index.d.ts +16 -0
- package/dist/types/index.d.ts.map +1 -1
- package/package.json +1 -1
- package/dist/index-BpJZlLfH.js.map +0 -1
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;
|
|
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,
|
|
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,CAka9C,CAAC"}
|