@navsi.ai/sdk 1.0.3 → 1.0.4
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/dist/chunk-BM6443KF.js +2 -0
- package/dist/chunk-BM6443KF.js.map +1 -0
- package/dist/chunk-EL7YGOTY.js +2 -0
- package/dist/{chunk-427NHGTX.js.map → chunk-EL7YGOTY.js.map} +1 -1
- package/dist/chunk-NVT44CWP.js +548 -0
- package/dist/chunk-NVT44CWP.js.map +1 -0
- package/dist/components/index.js +1 -1
- package/dist/hooks/index.d.ts +47 -1
- package/dist/hooks/index.js +1 -1
- package/dist/index.d.ts +21 -2
- package/dist/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/package.json +9 -9
- package/dist/chunk-427NHGTX.js +0 -2
- package/dist/chunk-CSYGGJ3Q.js +0 -548
- package/dist/chunk-CSYGGJ3Q.js.map +0 -1
- package/dist/chunk-ZCUOPOFP.js +0 -2
- package/dist/chunk-ZCUOPOFP.js.map +0 -1
package/dist/components/index.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export{f as ChatbotProvider,g as ChatbotWidget}from'../chunk-
|
|
1
|
+
export{f as ChatbotProvider,g as ChatbotWidget}from'../chunk-NVT44CWP.js';import'../chunk-BM6443KF.js';//# sourceMappingURL=index.js.map
|
|
2
2
|
//# sourceMappingURL=index.js.map
|
package/dist/hooks/index.d.ts
CHANGED
|
@@ -101,4 +101,50 @@ interface UseActionExecutionReturn {
|
|
|
101
101
|
*/
|
|
102
102
|
declare function useActionExecution(): UseActionExecutionReturn;
|
|
103
103
|
|
|
104
|
-
|
|
104
|
+
/**
|
|
105
|
+
* useVoice Hook — Low-latency STT + TTS for the Navsi chatbot.
|
|
106
|
+
*
|
|
107
|
+
* Design goals:
|
|
108
|
+
* • Fast start: reuses a single SpeechRecognition instance across activations.
|
|
109
|
+
* • Low latency: fires an auto-send after a configurable silence gap so the
|
|
110
|
+
* user doesn't have to wait for the browser's default end-of-speech timeout.
|
|
111
|
+
* • Clean separation: all voice state is encapsulated here; ChatbotWidget
|
|
112
|
+
* only consumes the returned API.
|
|
113
|
+
* • TTS warm-up: a silent utterance is queued once so the first real TTS play
|
|
114
|
+
* doesn't incur a cold-start delay.
|
|
115
|
+
*
|
|
116
|
+
* Only depends on the Web Speech API — no extra packages.
|
|
117
|
+
*/
|
|
118
|
+
interface UseVoiceOptions {
|
|
119
|
+
/** BCP-47 language for STT & TTS (e.g. 'en-US'). */
|
|
120
|
+
lang: string;
|
|
121
|
+
/** Called with the final transcript when the user finishes speaking. */
|
|
122
|
+
onTranscript: (text: string) => void;
|
|
123
|
+
/** Milliseconds of silence before auto-sending (default 1200). */
|
|
124
|
+
silenceMs?: number;
|
|
125
|
+
/** Whether TTS should speak new assistant messages triggered by voice input. */
|
|
126
|
+
autoSpeak?: boolean;
|
|
127
|
+
}
|
|
128
|
+
interface UseVoiceReturn {
|
|
129
|
+
/** Whether the Web Speech API is available in this browser. */
|
|
130
|
+
isSupported: boolean;
|
|
131
|
+
/** Whether the mic is currently active / recording. */
|
|
132
|
+
isListening: boolean;
|
|
133
|
+
/** Live interim transcript while recording. */
|
|
134
|
+
transcript: string;
|
|
135
|
+
/** Human-readable error, or null. */
|
|
136
|
+
error: string | null;
|
|
137
|
+
/** Start recording. No-op if already listening. */
|
|
138
|
+
start: () => void;
|
|
139
|
+
/** Stop recording (fires onTranscript if there is accumulated text). */
|
|
140
|
+
stop: () => void;
|
|
141
|
+
/** Speak text aloud via TTS. */
|
|
142
|
+
speak: (text: string) => void;
|
|
143
|
+
/** Cancel any ongoing TTS playback. */
|
|
144
|
+
cancelSpeech: () => void;
|
|
145
|
+
/** Whether TTS is currently speaking. */
|
|
146
|
+
isSpeaking: boolean;
|
|
147
|
+
}
|
|
148
|
+
declare function useVoice({ lang, onTranscript, silenceMs, autoSpeak, }: UseVoiceOptions): UseVoiceReturn;
|
|
149
|
+
|
|
150
|
+
export { type UseActionExecutionReturn, type UseChatbotReturn, type UseVoiceOptions, type UseVoiceReturn, type UseWebSocketReturn, useActionExecution, useChatbot, useVoice, useWebSocket };
|
package/dist/hooks/index.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import'../chunk-
|
|
1
|
+
import'../chunk-EL7YGOTY.js';export{d as useActionExecution,c as useChatbot,f as useVoice,e as useWebSocket}from'../chunk-BM6443KF.js';//# sourceMappingURL=index.js.map
|
|
2
2
|
//# sourceMappingURL=index.js.map
|
package/dist/index.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
export { ChatbotProvider, ChatbotProviderProps, ChatbotWidget, ChatbotWidgetProps } from './components/index.js';
|
|
2
|
-
export { UseActionExecutionReturn, UseChatbotReturn, UseWebSocketReturn, useActionExecution, useChatbot, useWebSocket } from './hooks/index.js';
|
|
2
|
+
export { UseActionExecutionReturn, UseChatbotReturn, UseVoiceOptions, UseVoiceReturn, UseWebSocketReturn, useActionExecution, useChatbot, useVoice, useWebSocket } from './hooks/index.js';
|
|
3
3
|
import * as React from 'react';
|
|
4
4
|
import { WidgetConfig, Message, ChatMode, ConnectionState as ConnectionState$1, ExecutionState, ServerAction, ClientMessage, WebSocketEvents, NavigationAdapter, PageContext } from '@navsi.ai/shared';
|
|
5
5
|
export { ActionDefinition, ChatMode, Command, ExecutionState, Message, NavigationAdapter, PageContext, SDKConfig, ServerAction, WidgetConfig, WidgetTheme } from '@navsi.ai/shared';
|
|
@@ -86,9 +86,17 @@ declare class WebSocketClient {
|
|
|
86
86
|
*/
|
|
87
87
|
connect(): void;
|
|
88
88
|
/**
|
|
89
|
-
* Disconnect from the server
|
|
89
|
+
* Disconnect from the server.
|
|
90
|
+
* Clears timers and closes the socket but preserves event listeners
|
|
91
|
+
* so that a subsequent connect() call works correctly.
|
|
92
|
+
* Use destroy() for full teardown including listener removal.
|
|
90
93
|
*/
|
|
91
94
|
disconnect(): void;
|
|
95
|
+
/**
|
|
96
|
+
* Fully tear down the client — clears all timers, listeners, and the socket.
|
|
97
|
+
* Use this when the client will not be reused (e.g., on component unmount).
|
|
98
|
+
*/
|
|
99
|
+
destroy(): void;
|
|
92
100
|
/**
|
|
93
101
|
* Send a message to the server
|
|
94
102
|
*/
|
|
@@ -116,6 +124,8 @@ declare class WebSocketClient {
|
|
|
116
124
|
private createWebSocket;
|
|
117
125
|
private handleOpen;
|
|
118
126
|
private handleMessage;
|
|
127
|
+
/** Close codes that indicate permanent failures — reconnecting would be futile */
|
|
128
|
+
private static readonly NON_RETRIABLE_CLOSE_CODES;
|
|
119
129
|
private handleClose;
|
|
120
130
|
private handleError;
|
|
121
131
|
private handleConnected;
|
|
@@ -131,6 +141,15 @@ declare class WebSocketClient {
|
|
|
131
141
|
private handleConnectionFailure;
|
|
132
142
|
private flushMessageQueue;
|
|
133
143
|
private setState;
|
|
144
|
+
/**
|
|
145
|
+
* Close the socket and timers but preserve event listeners.
|
|
146
|
+
* Used by disconnect() to allow reconnection with existing listeners.
|
|
147
|
+
*/
|
|
148
|
+
private closeSocket;
|
|
149
|
+
/**
|
|
150
|
+
* Full cleanup — closes socket, timers, AND clears all event listeners.
|
|
151
|
+
* Used by destroy() for permanent teardown.
|
|
152
|
+
*/
|
|
134
153
|
private cleanup;
|
|
135
154
|
private log;
|
|
136
155
|
}
|
package/dist/index.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export{f as ChatbotProvider,g as ChatbotWidget,d as NavigationController,a as WebSocketClient,c as createMemoryAdapter,e as createNavigationController,b as createWebSocketClient}from'./chunk-
|
|
1
|
+
export{f as ChatbotProvider,g as ChatbotWidget,d as NavigationController,a as WebSocketClient,c as createMemoryAdapter,e as createNavigationController,b as createWebSocketClient}from'./chunk-NVT44CWP.js';import'./chunk-EL7YGOTY.js';export{a as ChatbotContext,d as useActionExecution,c as useChatbot,b as useChatbotContext,f as useVoice,e as useWebSocket}from'./chunk-BM6443KF.js';import {useRef,useEffect,useCallback}from'react';function T(s,o){let i=useRef(new Set),n=useRef(o.pathname);useEffect(()=>{o.pathname!==n.current&&(n.current=o.pathname,i.current.forEach(t=>{t(o.pathname);}));},[o.pathname]);let r=useCallback(t=>{s(t);},[s]),u=useCallback(()=>n.current,[]),a=useCallback(t=>(i.current.add(t),()=>{i.current.delete(t);}),[]),f=useCallback(async(t,d=1e4)=>new Promise(p=>{if(n.current===t){p(true);return}let c=false,g=a(C=>{C===t&&!c&&(c=true,g(),p(true));});setTimeout(()=>{c||(c=true,g(),p(n.current===t));},d);}),[a]),e=useRef(null);return e.current?(e.current.navigate=r,e.current.getCurrentPath=u,e.current.onRouteChange=a,e.current.waitForRoute=f):e.current={navigate:r,getCurrentPath:u,onRouteChange:a,waitForRoute:f},e.current}function E(s,o,i){let n=new Set;return i(r=>{n.forEach(u=>u(r.pathname));}),{navigate(r){s()(r);},getCurrentPath(){return o().pathname},onRouteChange(r){return n.add(r),()=>n.delete(r)},async waitForRoute(r,u=1e4){return new Promise(a=>{if(o().pathname===r){a(true);return}let e=false,t=this.onRouteChange(d=>{d===r&&!e&&(e=true,t(),a(true));});setTimeout(()=>{e||(e=true,t(),a(o().pathname===r));},u);})}}}function U(s,o){let i=useRef(new Set),n=useRef(o);useEffect(()=>{o!==n.current&&(n.current=o,i.current.forEach(t=>{t(o);}));},[o]);let r=useCallback(t=>{s.push(t);},[s]),u=useCallback(()=>n.current,[]),a=useCallback(t=>(i.current.add(t),()=>{i.current.delete(t);}),[]),f=useCallback(async(t,d=1e4)=>new Promise(p=>{if(n.current===t){p(true);return}let c=false,g=a(C=>{C===t&&!c&&(c=true,g(),p(true));});setTimeout(()=>{c||(c=true,g(),p(n.current===t));},d);}),[a]),e=useRef(null);return e.current?(e.current.navigate=r,e.current.getCurrentPath=u,e.current.onRouteChange=a,e.current.waitForRoute=f):e.current={navigate:r,getCurrentPath:u,onRouteChange:a,waitForRoute:f},e.current}export{E as createReactRouterAdapter,U as useNextRouterAdapter,T as useReactRouterAdapter};//# sourceMappingURL=index.js.map
|
|
2
2
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/core/navigation/react-router-adapter.ts","../src/core/navigation/nextjs-adapter.ts"],"names":["useReactRouterAdapter","navigate","location","listenersRef","useRef","currentPathRef","useEffect","callback","navigateTo","useCallback","path","getCurrentPath","onRouteChange","waitForRoute","timeout","resolve","resolved","unsubscribe","newPath","adapterRef","createReactRouterAdapter","getNavigate","getLocation","subscribeToLocation","listeners","useNextRouterAdapter","router","pathname"],"mappings":"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","file":"index.js","sourcesContent":["/**\n * React Router v6 Adapter\n * \n * Provides navigation adapter implementation for React Router v6.\n * This is a hook that creates an adapter from React Router hooks.\n */\n\nimport { useCallback, useEffect, useRef } from 'react';\nimport type { NavigationAdapter } from '@navsi.ai/shared';\nimport { DEFAULT_ROUTE_TIMEOUT } from './adapter.js';\n\n/**\n * Type for React Router's navigate function\n */\nexport type NavigateFunction = (to: string) => void;\n\n/**\n * Type for React Router's location object\n */\nexport interface RouterLocation {\n pathname: string;\n}\n\n/**\n * Creates a React Router v6 navigation adapter\n * \n * @example\n * ```tsx\n * import { useNavigate, useLocation } from 'react-router-dom';\n * \n * function App() {\n * const navigate = useNavigate();\n * const location = useLocation();\n * const adapter = useReactRouterAdapter(navigate, location);\n * \n * return (\n * <ChatbotProvider navigationAdapter={adapter}>\n * ...\n * </ChatbotProvider>\n * );\n * }\n * ```\n */\nexport function useReactRouterAdapter(\n navigate: NavigateFunction,\n location: RouterLocation\n): NavigationAdapter {\n const listenersRef = useRef<Set<(path: string) => void>>(new Set());\n const currentPathRef = useRef(location.pathname);\n\n // Update current path and notify listeners when location changes\n useEffect(() => {\n if (location.pathname !== currentPathRef.current) {\n currentPathRef.current = location.pathname;\n listenersRef.current.forEach((callback) => {\n callback(location.pathname);\n });\n }\n }, [location.pathname]);\n\n const navigateTo = useCallback((path: string) => {\n navigate(path);\n }, [navigate]);\n\n const getCurrentPath = useCallback(() => {\n return currentPathRef.current;\n }, []);\n\n const onRouteChange = useCallback((callback: (path: string) => void) => {\n listenersRef.current.add(callback);\n return () => {\n listenersRef.current.delete(callback);\n };\n }, []);\n\n const waitForRoute = useCallback(async (path: string, timeout = DEFAULT_ROUTE_TIMEOUT): Promise<boolean> => {\n return new Promise((resolve) => {\n if (currentPathRef.current === path) {\n resolve(true);\n return;\n }\n\n let resolved = false;\n\n const unsubscribe = onRouteChange((newPath) => {\n if (newPath === path && !resolved) {\n resolved = true;\n unsubscribe();\n resolve(true);\n }\n });\n\n setTimeout(() => {\n if (!resolved) {\n resolved = true;\n unsubscribe();\n resolve(currentPathRef.current === path);\n }\n }, timeout);\n });\n }, [onRouteChange]);\n\n // Return a stable reference to the adapter\n const adapterRef = useRef<NavigationAdapter | null>(null);\n\n if (!adapterRef.current) {\n adapterRef.current = {\n navigate: navigateTo,\n getCurrentPath,\n onRouteChange,\n waitForRoute,\n };\n } else {\n // Update functions to use latest refs\n adapterRef.current.navigate = navigateTo;\n adapterRef.current.getCurrentPath = getCurrentPath;\n adapterRef.current.onRouteChange = onRouteChange;\n adapterRef.current.waitForRoute = waitForRoute;\n }\n\n return adapterRef.current;\n}\n\n/**\n * Create a React Router adapter from outside React context\n * Useful when you need to create the adapter before rendering\n * \n * @param getNavigate Function that returns the navigate function\n * @param getLocation Function that returns the current location\n */\nexport function createReactRouterAdapter(\n getNavigate: () => NavigateFunction,\n getLocation: () => RouterLocation,\n subscribeToLocation: (callback: (location: RouterLocation) => void) => () => void\n): NavigationAdapter {\n const listeners = new Set<(path: string) => void>();\n\n // Subscribe to location changes\n subscribeToLocation((location) => {\n listeners.forEach((callback) => callback(location.pathname));\n });\n\n return {\n navigate(path: string): void {\n getNavigate()(path);\n },\n\n getCurrentPath(): string {\n return getLocation().pathname;\n },\n\n onRouteChange(callback: (path: string) => void): () => void {\n listeners.add(callback);\n return () => listeners.delete(callback);\n },\n\n async waitForRoute(path: string, timeout = DEFAULT_ROUTE_TIMEOUT): Promise<boolean> {\n return new Promise((resolve) => {\n const currentPath = getLocation().pathname;\n\n if (currentPath === path) {\n resolve(true);\n return;\n }\n\n let resolved = false;\n\n const unsubscribe = this.onRouteChange((newPath) => {\n if (newPath === path && !resolved) {\n resolved = true;\n unsubscribe();\n resolve(true);\n }\n });\n\n setTimeout(() => {\n if (!resolved) {\n resolved = true;\n unsubscribe();\n resolve(getLocation().pathname === path);\n }\n }, timeout);\n });\n },\n };\n}\n","'use client';\n/**\n * Next.js App Router Adapter\n *\n * Provides navigation adapter implementation for Next.js App Router.\n * Uses next/navigation: useRouter(), usePathname().\n */\n\nimport { useCallback, useEffect, useRef } from 'react';\nimport type { NavigationAdapter } from '@navsi.ai/shared';\nimport { DEFAULT_ROUTE_TIMEOUT } from './adapter.js';\n\n/** Next.js App Router: router from useRouter(), pathname from usePathname() */\nexport type NextRouterLike = { push: (href: string) => void };\n\n/**\n * Creates a Next.js App Router navigation adapter.\n * Must be used in a Client Component. Requires next to be installed.\n *\n * @example\n * ```tsx\n * 'use client';\n * import { useRouter, usePathname } from 'next/navigation';\n * import { ChatbotProvider, ChatbotWidget, useNextRouterAdapter } from '@navsi.ai/sdk';\n *\n * function ChatbotWrapper({ children }: { children: React.ReactNode }) {\n * const router = useRouter();\n * const pathname = usePathname();\n * const adapter = useNextRouterAdapter(router, pathname);\n * return (\n * <ChatbotProvider apiKey=\"...\" serverUrl=\"...\" navigationAdapter={adapter}>\n * {children}\n * <ChatbotWidget />\n * </ChatbotProvider>\n * );\n * }\n * ```\n */\nexport function useNextRouterAdapter(\n router: NextRouterLike,\n pathname: string\n): NavigationAdapter {\n const listenersRef = useRef<Set<(path: string) => void>>(new Set());\n const currentPathRef = useRef(pathname);\n\n useEffect(() => {\n if (pathname !== currentPathRef.current) {\n currentPathRef.current = pathname;\n listenersRef.current.forEach((callback) => {\n callback(pathname);\n });\n }\n }, [pathname]);\n\n const navigateTo = useCallback(\n (path: string) => {\n router.push(path);\n },\n [router]\n );\n\n const getCurrentPath = useCallback(() => {\n return currentPathRef.current;\n }, []);\n\n const onRouteChange = useCallback((callback: (path: string) => void) => {\n listenersRef.current.add(callback);\n return () => {\n listenersRef.current.delete(callback);\n };\n }, []);\n\n const waitForRoute = useCallback(\n async (path: string, timeout = DEFAULT_ROUTE_TIMEOUT): Promise<boolean> => {\n return new Promise((resolve) => {\n if (currentPathRef.current === path) {\n resolve(true);\n return;\n }\n\n let resolved = false;\n\n const unsubscribe = onRouteChange((newPath) => {\n if (newPath === path && !resolved) {\n resolved = true;\n unsubscribe();\n resolve(true);\n }\n });\n\n setTimeout(() => {\n if (!resolved) {\n resolved = true;\n unsubscribe();\n resolve(currentPathRef.current === path);\n }\n }, timeout);\n });\n },\n [onRouteChange]\n );\n\n const adapterRef = useRef<NavigationAdapter | null>(null);\n\n if (!adapterRef.current) {\n adapterRef.current = {\n navigate: navigateTo,\n getCurrentPath,\n onRouteChange,\n waitForRoute,\n };\n } else {\n adapterRef.current.navigate = navigateTo;\n adapterRef.current.getCurrentPath = getCurrentPath;\n adapterRef.current.onRouteChange = onRouteChange;\n adapterRef.current.waitForRoute = waitForRoute;\n }\n\n return adapterRef.current;\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/core/navigation/react-router-adapter.ts","../src/core/navigation/nextjs-adapter.ts"],"names":["useReactRouterAdapter","navigate","location","listenersRef","useRef","currentPathRef","useEffect","callback","navigateTo","useCallback","path","getCurrentPath","onRouteChange","waitForRoute","timeout","resolve","resolved","unsubscribe","newPath","adapterRef","createReactRouterAdapter","getNavigate","getLocation","subscribeToLocation","listeners","useNextRouterAdapter","router","pathname"],"mappings":"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","file":"index.js","sourcesContent":["/**\n * React Router v6 Adapter\n * \n * Provides navigation adapter implementation for React Router v6.\n * This is a hook that creates an adapter from React Router hooks.\n */\n\nimport { useCallback, useEffect, useRef } from 'react';\nimport type { NavigationAdapter } from '@navsi.ai/shared';\nimport { DEFAULT_ROUTE_TIMEOUT } from './adapter.js';\n\n/**\n * Type for React Router's navigate function\n */\nexport type NavigateFunction = (to: string) => void;\n\n/**\n * Type for React Router's location object\n */\nexport interface RouterLocation {\n pathname: string;\n}\n\n/**\n * Creates a React Router v6 navigation adapter\n * \n * @example\n * ```tsx\n * import { useNavigate, useLocation } from 'react-router-dom';\n * \n * function App() {\n * const navigate = useNavigate();\n * const location = useLocation();\n * const adapter = useReactRouterAdapter(navigate, location);\n * \n * return (\n * <ChatbotProvider navigationAdapter={adapter}>\n * ...\n * </ChatbotProvider>\n * );\n * }\n * ```\n */\nexport function useReactRouterAdapter(\n navigate: NavigateFunction,\n location: RouterLocation\n): NavigationAdapter {\n const listenersRef = useRef<Set<(path: string) => void>>(new Set());\n const currentPathRef = useRef(location.pathname);\n\n // Update current path and notify listeners when location changes\n useEffect(() => {\n if (location.pathname !== currentPathRef.current) {\n currentPathRef.current = location.pathname;\n listenersRef.current.forEach((callback) => {\n callback(location.pathname);\n });\n }\n }, [location.pathname]);\n\n const navigateTo = useCallback((path: string) => {\n navigate(path);\n }, [navigate]);\n\n const getCurrentPath = useCallback(() => {\n return currentPathRef.current;\n }, []);\n\n const onRouteChange = useCallback((callback: (path: string) => void) => {\n listenersRef.current.add(callback);\n return () => {\n listenersRef.current.delete(callback);\n };\n }, []);\n\n const waitForRoute = useCallback(async (path: string, timeout = DEFAULT_ROUTE_TIMEOUT): Promise<boolean> => {\n return new Promise((resolve) => {\n if (currentPathRef.current === path) {\n resolve(true);\n return;\n }\n\n let resolved = false;\n\n const unsubscribe = onRouteChange((newPath) => {\n if (newPath === path && !resolved) {\n resolved = true;\n unsubscribe();\n resolve(true);\n }\n });\n\n setTimeout(() => {\n if (!resolved) {\n resolved = true;\n unsubscribe();\n resolve(currentPathRef.current === path);\n }\n }, timeout);\n });\n }, [onRouteChange]);\n\n // Return a stable reference to the adapter\n const adapterRef = useRef<NavigationAdapter | null>(null);\n\n if (!adapterRef.current) {\n adapterRef.current = {\n navigate: navigateTo,\n getCurrentPath,\n onRouteChange,\n waitForRoute,\n };\n } else {\n // Update functions to use latest refs\n adapterRef.current.navigate = navigateTo;\n adapterRef.current.getCurrentPath = getCurrentPath;\n adapterRef.current.onRouteChange = onRouteChange;\n adapterRef.current.waitForRoute = waitForRoute;\n }\n\n return adapterRef.current;\n}\n\n/**\n * Create a React Router adapter from outside React context\n * Useful when you need to create the adapter before rendering\n * \n * @param getNavigate Function that returns the navigate function\n * @param getLocation Function that returns the current location\n */\nexport function createReactRouterAdapter(\n getNavigate: () => NavigateFunction,\n getLocation: () => RouterLocation,\n subscribeToLocation: (callback: (location: RouterLocation) => void) => () => void\n): NavigationAdapter {\n const listeners = new Set<(path: string) => void>();\n\n // Subscribe to location changes\n subscribeToLocation((location) => {\n listeners.forEach((callback) => callback(location.pathname));\n });\n\n return {\n navigate(path: string): void {\n getNavigate()(path);\n },\n\n getCurrentPath(): string {\n return getLocation().pathname;\n },\n\n onRouteChange(callback: (path: string) => void): () => void {\n listeners.add(callback);\n return () => listeners.delete(callback);\n },\n\n async waitForRoute(path: string, timeout = DEFAULT_ROUTE_TIMEOUT): Promise<boolean> {\n return new Promise((resolve) => {\n const currentPath = getLocation().pathname;\n\n if (currentPath === path) {\n resolve(true);\n return;\n }\n\n let resolved = false;\n\n const unsubscribe = this.onRouteChange((newPath) => {\n if (newPath === path && !resolved) {\n resolved = true;\n unsubscribe();\n resolve(true);\n }\n });\n\n setTimeout(() => {\n if (!resolved) {\n resolved = true;\n unsubscribe();\n resolve(getLocation().pathname === path);\n }\n }, timeout);\n });\n },\n };\n}\n","'use client';\n/**\n * Next.js App Router Adapter\n *\n * Provides navigation adapter implementation for Next.js App Router.\n * Uses next/navigation: useRouter(), usePathname().\n */\n\nimport { useCallback, useEffect, useRef } from 'react';\nimport type { NavigationAdapter } from '@navsi.ai/shared';\nimport { DEFAULT_ROUTE_TIMEOUT } from './adapter.js';\n\n/** Next.js App Router: router from useRouter(), pathname from usePathname() */\nexport type NextRouterLike = { push: (href: string) => void };\n\n/**\n * Creates a Next.js App Router navigation adapter.\n * Must be used in a Client Component. Requires next to be installed.\n *\n * @example\n * ```tsx\n * 'use client';\n * import { useRouter, usePathname } from 'next/navigation';\n * import { ChatbotProvider, ChatbotWidget, useNextRouterAdapter } from '@navsi.ai/sdk';\n *\n * function ChatbotWrapper({ children }: { children: React.ReactNode }) {\n * const router = useRouter();\n * const pathname = usePathname();\n * const adapter = useNextRouterAdapter(router, pathname);\n * return (\n * <ChatbotProvider apiKey=\"...\" serverUrl=\"...\" navigationAdapter={adapter}>\n * {children}\n * <ChatbotWidget />\n * </ChatbotProvider>\n * );\n * }\n * ```\n */\nexport function useNextRouterAdapter(\n router: NextRouterLike,\n pathname: string\n): NavigationAdapter {\n const listenersRef = useRef<Set<(path: string) => void>>(new Set());\n const currentPathRef = useRef(pathname);\n\n useEffect(() => {\n if (pathname !== currentPathRef.current) {\n currentPathRef.current = pathname;\n listenersRef.current.forEach((callback) => {\n callback(pathname);\n });\n }\n }, [pathname]);\n\n const navigateTo = useCallback(\n (path: string) => {\n router.push(path);\n },\n [router]\n );\n\n const getCurrentPath = useCallback(() => {\n return currentPathRef.current;\n }, []);\n\n const onRouteChange = useCallback((callback: (path: string) => void) => {\n listenersRef.current.add(callback);\n return () => {\n listenersRef.current.delete(callback);\n };\n }, []);\n\n const waitForRoute = useCallback(\n async (path: string, timeout = DEFAULT_ROUTE_TIMEOUT): Promise<boolean> => {\n return new Promise((resolve) => {\n if (currentPathRef.current === path) {\n resolve(true);\n return;\n }\n\n let resolved = false;\n\n const unsubscribe = onRouteChange((newPath) => {\n if (newPath === path && !resolved) {\n resolved = true;\n unsubscribe();\n resolve(true);\n }\n });\n\n setTimeout(() => {\n if (!resolved) {\n resolved = true;\n unsubscribe();\n resolve(currentPathRef.current === path);\n }\n }, timeout);\n });\n },\n [onRouteChange]\n );\n\n const adapterRef = useRef<NavigationAdapter | null>(null);\n\n if (!adapterRef.current) {\n adapterRef.current = {\n navigate: navigateTo,\n getCurrentPath,\n onRouteChange,\n waitForRoute,\n };\n } else {\n adapterRef.current.navigate = navigateTo;\n adapterRef.current.getCurrentPath = getCurrentPath;\n adapterRef.current.onRouteChange = onRouteChange;\n adapterRef.current.waitForRoute = waitForRoute;\n }\n\n return adapterRef.current;\n}\n"]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@navsi.ai/sdk",
|
|
3
|
-
"version": "1.0.
|
|
3
|
+
"version": "1.0.4",
|
|
4
4
|
"description": "React SDK for Navsi AI chatbot - Ask and Navigate modes",
|
|
5
5
|
"author": "Kushagra Tiwari",
|
|
6
6
|
"license": "MIT",
|
|
@@ -43,13 +43,6 @@
|
|
|
43
43
|
"files": [
|
|
44
44
|
"dist"
|
|
45
45
|
],
|
|
46
|
-
"scripts": {
|
|
47
|
-
"build": "tsup",
|
|
48
|
-
"dev": "tsup --watch",
|
|
49
|
-
"clean": "rm -rf dist",
|
|
50
|
-
"lint": "eslint \"src/**/*.{ts,tsx}\"",
|
|
51
|
-
"typecheck": "tsc --noEmit"
|
|
52
|
-
},
|
|
53
46
|
"dependencies": {
|
|
54
47
|
"@navsi.ai/shared": "^1.0.1",
|
|
55
48
|
"zod": "^3.22.0"
|
|
@@ -72,5 +65,12 @@
|
|
|
72
65
|
"react-dom": "^18.2.0",
|
|
73
66
|
"tsup": "^8.0.0",
|
|
74
67
|
"typescript": "^5.3.0"
|
|
68
|
+
},
|
|
69
|
+
"scripts": {
|
|
70
|
+
"build": "tsup",
|
|
71
|
+
"dev": "tsup --watch",
|
|
72
|
+
"clean": "rm -rf dist",
|
|
73
|
+
"lint": "eslint \"src/**/*.{ts,tsx}\"",
|
|
74
|
+
"typecheck": "tsc --noEmit"
|
|
75
75
|
}
|
|
76
|
-
}
|
|
76
|
+
}
|
package/dist/chunk-427NHGTX.js
DELETED