@neurobot/sdk-react 1.0.0

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.
Files changed (53) hide show
  1. package/INTEGRATION.md +140 -0
  2. package/LICENSE +21 -0
  3. package/MOCK_MODE.md +245 -0
  4. package/README.md +114 -0
  5. package/dist/components/ChatWindow.d.ts +25 -0
  6. package/dist/components/ChatWindow.d.ts.map +1 -0
  7. package/dist/components/ChatWindow.js +14 -0
  8. package/dist/components/ChatWindow.js.map +1 -0
  9. package/dist/components/FloatingButton.d.ts +9 -0
  10. package/dist/components/FloatingButton.d.ts.map +1 -0
  11. package/dist/components/FloatingButton.js +8 -0
  12. package/dist/components/FloatingButton.js.map +1 -0
  13. package/dist/components/InputForm.d.ts +11 -0
  14. package/dist/components/InputForm.d.ts.map +1 -0
  15. package/dist/components/InputForm.js +9 -0
  16. package/dist/components/InputForm.js.map +1 -0
  17. package/dist/components/MessageList.d.ts +11 -0
  18. package/dist/components/MessageList.d.ts.map +1 -0
  19. package/dist/components/MessageList.js +12 -0
  20. package/dist/components/MessageList.js.map +1 -0
  21. package/dist/components/NeuroBot.d.ts +4 -0
  22. package/dist/components/NeuroBot.d.ts.map +1 -0
  23. package/dist/components/NeuroBot.js +110 -0
  24. package/dist/components/NeuroBot.js.map +1 -0
  25. package/dist/context/NeuroBotContext.d.ts +18 -0
  26. package/dist/context/NeuroBotContext.d.ts.map +1 -0
  27. package/dist/context/NeuroBotContext.js +20 -0
  28. package/dist/context/NeuroBotContext.js.map +1 -0
  29. package/dist/index.d.ts +6 -0
  30. package/dist/index.d.ts.map +1 -0
  31. package/dist/index.esm.js +1776 -0
  32. package/dist/index.esm.js.map +1 -0
  33. package/dist/index.js +1783 -0
  34. package/dist/index.js.map +1 -0
  35. package/dist/index.umd.js +1787 -0
  36. package/dist/index.umd.js.map +1 -0
  37. package/dist/types/index.d.ts +25 -0
  38. package/dist/types/index.d.ts.map +1 -0
  39. package/dist/types/index.js +2 -0
  40. package/dist/types/index.js.map +1 -0
  41. package/dist/utils/api.d.ts +25 -0
  42. package/dist/utils/api.d.ts.map +1 -0
  43. package/dist/utils/api.js +49 -0
  44. package/dist/utils/api.js.map +1 -0
  45. package/dist/utils/auth.d.ts +20 -0
  46. package/dist/utils/auth.d.ts.map +1 -0
  47. package/dist/utils/auth.js +30 -0
  48. package/dist/utils/auth.js.map +1 -0
  49. package/dist/utils/mock.d.ts +20 -0
  50. package/dist/utils/mock.d.ts.map +1 -0
  51. package/dist/utils/mock.js +67 -0
  52. package/dist/utils/mock.js.map +1 -0
  53. package/package.json +64 -0
@@ -0,0 +1,110 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ import { useState, useRef, useEffect } from 'react';
3
+ import { sendMessage } from '../utils/api';
4
+ import { useNeuroBotContext } from '../context/NeuroBotContext';
5
+ import { ChatWindow } from './ChatWindow';
6
+ import { FloatingButton } from './FloatingButton';
7
+ // SDK logger - separate from main app logger to avoid dependencies
8
+ const sdkLogger = {
9
+ error: (message, error) => {
10
+ if (process.env.NODE_ENV === 'development') {
11
+ console.error(`[NeuroBot SDK] ${message}`, error);
12
+ }
13
+ },
14
+ debug: (message, data) => {
15
+ if (process.env.NODE_ENV === 'development') {
16
+ console.debug(`[NeuroBot SDK] ${message}`, data);
17
+ }
18
+ },
19
+ };
20
+ export const NeuroBot = ({ pipelineId, chatbotId, title = 'NeuroBot Assistant', position = 'bottom-right', config = {}, onMessageSent, onMessageReceived, useMock = false, }) => {
21
+ const context = useNeuroBotContext();
22
+ const [isOpen, setIsOpen] = useState(false);
23
+ const [isMinimized, setIsMinimized] = useState(false);
24
+ const [messages, setMessages] = useState([
25
+ {
26
+ id: 1,
27
+ type: 'bot',
28
+ text: `Hello! I'm ${title}. How can I help you today?`,
29
+ timestamp: new Date(),
30
+ },
31
+ ]);
32
+ const [inputValue, setInputValue] = useState('');
33
+ const [isLoading, setIsLoading] = useState(false);
34
+ const messagesEndRef = useRef(null);
35
+ const chatConfig = {
36
+ primaryColor: config.primaryColor || '#3b82f6',
37
+ accentColor: config.accentColor || '#1e40af',
38
+ backgroundColor: config.backgroundColor || '#ffffff',
39
+ textColor: config.textColor || '#1f2937',
40
+ borderRadius: config.borderRadius || '12px',
41
+ fontSize: config.fontSize || '14px',
42
+ };
43
+ const scrollToBottom = () => {
44
+ messagesEndRef.current?.scrollIntoView({ behavior: 'smooth' });
45
+ };
46
+ useEffect(() => {
47
+ scrollToBottom();
48
+ }, [messages]);
49
+ const handleSendMessage = async (e) => {
50
+ e.preventDefault();
51
+ if (!inputValue.trim())
52
+ return;
53
+ const userMessage = {
54
+ id: messages.length + 1,
55
+ type: 'user',
56
+ text: inputValue,
57
+ timestamp: new Date(),
58
+ };
59
+ setMessages((prev) => [...prev, userMessage]);
60
+ setInputValue('');
61
+ setIsLoading(true);
62
+ onMessageSent?.(inputValue);
63
+ try {
64
+ sdkLogger.debug('Sending message to NeuroBot API', { pipelineId, chatbotId, message: inputValue });
65
+ const data = await sendMessage({
66
+ pipelineId,
67
+ chatbotId,
68
+ message: inputValue,
69
+ context: {
70
+ pageUrl: typeof window !== 'undefined' ? window.location.href : '',
71
+ pageTitle: typeof document !== 'undefined' ? document.title : '',
72
+ },
73
+ }, {
74
+ publicKey: context.publicKey,
75
+ timeout: context.timeout,
76
+ useMock,
77
+ });
78
+ const botMessage = {
79
+ id: messages.length + 2,
80
+ type: 'bot',
81
+ text: data.response || 'I could not process that request.',
82
+ timestamp: new Date(),
83
+ };
84
+ sdkLogger.debug('Received response from NeuroBot API', { response: data.response });
85
+ setMessages((prev) => [...prev, botMessage]);
86
+ onMessageReceived?.(data.response);
87
+ }
88
+ catch (error) {
89
+ sdkLogger.error('Failed to send message to NeuroBot API', error);
90
+ const errorMessage = {
91
+ id: messages.length + 2,
92
+ type: 'bot',
93
+ text: 'Sorry, I encountered an error. Please try again.',
94
+ timestamp: new Date(),
95
+ };
96
+ setMessages((prev) => [...prev, errorMessage]);
97
+ }
98
+ finally {
99
+ setIsLoading(false);
100
+ }
101
+ };
102
+ const positionClasses = {
103
+ 'bottom-right': 'bottom-12 right-12',
104
+ 'bottom-left': 'bottom-12 left-12',
105
+ 'top-right': 'top-12 right-12',
106
+ 'top-left': 'top-12 left-12',
107
+ };
108
+ return (_jsx("div", { className: `fixed ${positionClasses[position]} z-50 font-sans`, children: isOpen ? (_jsx(ChatWindow, { title: title, messages: messages, inputValue: inputValue, isLoading: isLoading, isMinimized: isMinimized, messagesEndRef: messagesEndRef, config: chatConfig, onInputChange: setInputValue, onSubmit: handleSendMessage, onMinimize: () => setIsMinimized(!isMinimized), onClose: () => setIsOpen(false) })) : (_jsx(FloatingButton, { onClick: () => setIsOpen(true), primaryColor: chatConfig.primaryColor, accentColor: chatConfig.accentColor })) }));
109
+ };
110
+ //# sourceMappingURL=NeuroBot.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"NeuroBot.js","sourceRoot":"","sources":["../../components/NeuroBot.tsx"],"names":[],"mappings":";AAAA,OAAc,EAAE,QAAQ,EAAE,MAAM,EAAE,SAAS,EAAiB,MAAM,OAAO,CAAC;AAE1E,OAAO,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAC3C,OAAO,EAAE,kBAAkB,EAAE,MAAM,4BAA4B,CAAC;AAChE,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAC1C,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAElD,mEAAmE;AACnE,MAAM,SAAS,GAAG;IAChB,KAAK,EAAE,CAAC,OAAe,EAAE,KAAW,EAAE,EAAE;QACtC,IAAI,OAAO,CAAC,GAAG,CAAC,QAAQ,KAAK,aAAa,EAAE,CAAC;YAC3C,OAAO,CAAC,KAAK,CAAC,kBAAkB,OAAO,EAAE,EAAE,KAAK,CAAC,CAAC;QACpD,CAAC;IACH,CAAC;IACD,KAAK,EAAE,CAAC,OAAe,EAAE,IAAU,EAAE,EAAE;QACrC,IAAI,OAAO,CAAC,GAAG,CAAC,QAAQ,KAAK,aAAa,EAAE,CAAC;YAC3C,OAAO,CAAC,KAAK,CAAC,kBAAkB,OAAO,EAAE,EAAE,IAAI,CAAC,CAAC;QACnD,CAAC;IACH,CAAC;CACF,CAAC;AAEF,MAAM,CAAC,MAAM,QAAQ,GAAsB,CAAC,EAC1C,UAAU,EACV,SAAS,EACT,KAAK,GAAG,oBAAoB,EAC5B,QAAQ,GAAG,cAAc,EACzB,MAAM,GAAG,EAAE,EACX,aAAa,EACb,iBAAiB,EACjB,OAAO,GAAG,KAAK,GAChB,EAAE,EAAE;IACH,MAAM,OAAO,GAAG,kBAAkB,EAAE,CAAC;IACrC,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,GAAG,QAAQ,CAAU,KAAK,CAAC,CAAC;IACrD,MAAM,CAAC,WAAW,EAAE,cAAc,CAAC,GAAG,QAAQ,CAAU,KAAK,CAAC,CAAC;IAC/D,MAAM,CAAC,QAAQ,EAAE,WAAW,CAAC,GAAG,QAAQ,CAAY;QAClD;YACE,EAAE,EAAE,CAAC;YACL,IAAI,EAAE,KAAK;YACX,IAAI,EAAE,cAAc,KAAK,6BAA6B;YACtD,SAAS,EAAE,IAAI,IAAI,EAAE;SACtB;KACF,CAAC,CAAC;IACH,MAAM,CAAC,UAAU,EAAE,aAAa,CAAC,GAAG,QAAQ,CAAS,EAAE,CAAC,CAAC;IACzD,MAAM,CAAC,SAAS,EAAE,YAAY,CAAC,GAAG,QAAQ,CAAU,KAAK,CAAC,CAAC;IAC3D,MAAM,cAAc,GAAG,MAAM,CAAiB,IAAI,CAAC,CAAC;IAEpD,MAAM,UAAU,GAAyB;QACvC,YAAY,EAAE,MAAM,CAAC,YAAY,IAAI,SAAS;QAC9C,WAAW,EAAE,MAAM,CAAC,WAAW,IAAI,SAAS;QAC5C,eAAe,EAAE,MAAM,CAAC,eAAe,IAAI,SAAS;QACpD,SAAS,EAAE,MAAM,CAAC,SAAS,IAAI,SAAS;QACxC,YAAY,EAAE,MAAM,CAAC,YAAY,IAAI,MAAM;QAC3C,QAAQ,EAAE,MAAM,CAAC,QAAQ,IAAI,MAAM;KACpC,CAAC;IAEF,MAAM,cAAc,GAAG,GAAS,EAAE;QAChC,cAAc,CAAC,OAAO,EAAE,cAAc,CAAC,EAAE,QAAQ,EAAE,QAAQ,EAAE,CAAC,CAAC;IACjE,CAAC,CAAC;IAEF,SAAS,CAAC,GAAG,EAAE;QACb,cAAc,EAAE,CAAC;IACnB,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC;IAEf,MAAM,iBAAiB,GAAG,KAAK,EAAE,CAA6B,EAAiB,EAAE;QAC/E,CAAC,CAAC,cAAc,EAAE,CAAC;QACnB,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE;YAAE,OAAO;QAE/B,MAAM,WAAW,GAAY;YAC3B,EAAE,EAAE,QAAQ,CAAC,MAAM,GAAG,CAAC;YACvB,IAAI,EAAE,MAAM;YACZ,IAAI,EAAE,UAAU;YAChB,SAAS,EAAE,IAAI,IAAI,EAAE;SACtB,CAAC;QAEF,WAAW,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,GAAG,IAAI,EAAE,WAAW,CAAC,CAAC,CAAC;QAC9C,aAAa,CAAC,EAAE,CAAC,CAAC;QAClB,YAAY,CAAC,IAAI,CAAC,CAAC;QACnB,aAAa,EAAE,CAAC,UAAU,CAAC,CAAC;QAE5B,IAAI,CAAC;YACH,SAAS,CAAC,KAAK,CAAC,iCAAiC,EAAE,EAAE,UAAU,EAAE,SAAS,EAAE,OAAO,EAAE,UAAU,EAAE,CAAC,CAAC;YACnG,MAAM,IAAI,GAAG,MAAM,WAAW,CAC5B;gBACE,UAAU;gBACV,SAAS;gBACT,OAAO,EAAE,UAAU;gBACnB,OAAO,EAAE;oBACP,OAAO,EAAE,OAAO,MAAM,KAAK,WAAW,CAAC,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE;oBAClE,SAAS,EAAE,OAAO,QAAQ,KAAK,WAAW,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE;iBACjE;aACF,EACD;gBACE,SAAS,EAAE,OAAO,CAAC,SAAS;gBAC5B,OAAO,EAAE,OAAO,CAAC,OAAO;gBACxB,OAAO;aACR,CACF,CAAC;YAEF,MAAM,UAAU,GAAY;gBAC1B,EAAE,EAAE,QAAQ,CAAC,MAAM,GAAG,CAAC;gBACvB,IAAI,EAAE,KAAK;gBACX,IAAI,EAAE,IAAI,CAAC,QAAQ,IAAI,mCAAmC;gBAC1D,SAAS,EAAE,IAAI,IAAI,EAAE;aACtB,CAAC;YAEF,SAAS,CAAC,KAAK,CAAC,qCAAqC,EAAE,EAAE,QAAQ,EAAE,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC;YACpF,WAAW,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,GAAG,IAAI,EAAE,UAAU,CAAC,CAAC,CAAC;YAC7C,iBAAiB,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QACrC,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,SAAS,CAAC,KAAK,CAAC,wCAAwC,EAAE,KAAK,CAAC,CAAC;YAEjE,MAAM,YAAY,GAAY;gBAC5B,EAAE,EAAE,QAAQ,CAAC,MAAM,GAAG,CAAC;gBACvB,IAAI,EAAE,KAAK;gBACX,IAAI,EAAE,kDAAkD;gBACxD,SAAS,EAAE,IAAI,IAAI,EAAE;aACtB,CAAC;YACF,WAAW,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,GAAG,IAAI,EAAE,YAAY,CAAC,CAAC,CAAC;QACjD,CAAC;gBAAS,CAAC;YACT,YAAY,CAAC,KAAK,CAAC,CAAC;QACtB,CAAC;IACH,CAAC,CAAC;IAEF,MAAM,eAAe,GAAG;QACtB,cAAc,EAAE,oBAAoB;QACpC,aAAa,EAAE,mBAAmB;QAClC,WAAW,EAAE,iBAAiB;QAC9B,UAAU,EAAE,gBAAgB;KAC7B,CAAC;IAEF,OAAO,CACL,cAAK,SAAS,EAAE,SAAS,eAAe,CAAC,QAAQ,CAAC,iBAAiB,YAChE,MAAM,CAAC,CAAC,CAAC,CACR,KAAC,UAAU,IACT,KAAK,EAAE,KAAK,EACZ,QAAQ,EAAE,QAAQ,EAClB,UAAU,EAAE,UAAU,EACtB,SAAS,EAAE,SAAS,EACpB,WAAW,EAAE,WAAW,EACxB,cAAc,EAAE,cAAc,EAC9B,MAAM,EAAE,UAAU,EAClB,aAAa,EAAE,aAAa,EAC5B,QAAQ,EAAE,iBAAiB,EAC3B,UAAU,EAAE,GAAG,EAAE,CAAC,cAAc,CAAC,CAAC,WAAW,CAAC,EAC9C,OAAO,EAAE,GAAG,EAAE,CAAC,SAAS,CAAC,KAAK,CAAC,GAC/B,CACH,CAAC,CAAC,CAAC,CACF,KAAC,cAAc,IACb,OAAO,EAAE,GAAG,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,EAC9B,YAAY,EAAE,UAAU,CAAC,YAAY,EACrC,WAAW,EAAE,UAAU,CAAC,WAAW,GACnC,CACH,GACG,CACP,CAAC;AACJ,CAAC,CAAC"}
@@ -0,0 +1,18 @@
1
+ import React, { ReactNode } from 'react';
2
+ /**
3
+ * NeuroBotContext - Client-side configuration only
4
+ * SECURITY: Never include secret keys in client-side code
5
+ */
6
+ export interface NeuroBotContextType {
7
+ publicKey: string;
8
+ timeout?: number;
9
+ }
10
+ interface NeuroBotProviderProps {
11
+ publicKey: string;
12
+ timeout?: number;
13
+ children: ReactNode;
14
+ }
15
+ export declare const NeuroBotProvider: React.FC<NeuroBotProviderProps>;
16
+ export declare const useNeuroBotContext: () => NeuroBotContextType;
17
+ export {};
18
+ //# sourceMappingURL=NeuroBotContext.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"NeuroBotContext.d.ts","sourceRoot":"","sources":["../../context/NeuroBotContext.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,EAA6B,SAAS,EAAE,MAAM,OAAO,CAAC;AAEpE;;;GAGG;AAEH,MAAM,WAAW,mBAAmB;IAClC,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAID,UAAU,qBAAqB;IAC7B,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,SAAS,CAAC;CACrB;AAED,eAAO,MAAM,gBAAgB,EAAE,KAAK,CAAC,EAAE,CAAC,qBAAqB,CAmB5D,CAAC;AAEF,eAAO,MAAM,kBAAkB,QAAO,mBAQrC,CAAC"}
@@ -0,0 +1,20 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ import { createContext, useContext } from 'react';
3
+ const NeuroBotContext = createContext(undefined);
4
+ export const NeuroBotProvider = ({ publicKey, timeout = 30000, children, }) => {
5
+ if (!publicKey) {
6
+ throw new Error('NeuroBotProvider requires publicKey prop');
7
+ }
8
+ return (_jsx(NeuroBotContext.Provider, { value: {
9
+ publicKey,
10
+ timeout,
11
+ }, children: children }));
12
+ };
13
+ export const useNeuroBotContext = () => {
14
+ const context = useContext(NeuroBotContext);
15
+ if (!context) {
16
+ throw new Error('useNeuroBotContext must be used within NeuroBotProvider');
17
+ }
18
+ return context;
19
+ };
20
+ //# sourceMappingURL=NeuroBotContext.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"NeuroBotContext.js","sourceRoot":"","sources":["../../context/NeuroBotContext.tsx"],"names":[],"mappings":";AAAA,OAAc,EAAE,aAAa,EAAE,UAAU,EAAa,MAAM,OAAO,CAAC;AAYpE,MAAM,eAAe,GAAG,aAAa,CAAkC,SAAS,CAAC,CAAC;AAQlF,MAAM,CAAC,MAAM,gBAAgB,GAAoC,CAAC,EAChE,SAAS,EACT,OAAO,GAAG,KAAK,EACf,QAAQ,GACT,EAAE,EAAE;IACH,IAAI,CAAC,SAAS,EAAE,CAAC;QACf,MAAM,IAAI,KAAK,CAAC,0CAA0C,CAAC,CAAC;IAC9D,CAAC;IAED,OAAO,CACL,KAAC,eAAe,CAAC,QAAQ,IACvB,KAAK,EAAE;YACL,SAAS;YACT,OAAO;SACR,YAEA,QAAQ,GACgB,CAC5B,CAAC;AACJ,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,kBAAkB,GAAG,GAAwB,EAAE;IAC1D,MAAM,OAAO,GAAG,UAAU,CAAC,eAAe,CAAC,CAAC;IAC5C,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,MAAM,IAAI,KAAK,CACb,yDAAyD,CAC1D,CAAC;IACJ,CAAC;IACD,OAAO,OAAO,CAAC;AACjB,CAAC,CAAC"}
@@ -0,0 +1,6 @@
1
+ export { NeuroBot } from './components/NeuroBot';
2
+ export { NeuroBot as default } from './components/NeuroBot';
3
+ export { NeuroBotProvider, useNeuroBotContext } from './context/NeuroBotContext';
4
+ export type { NeuroBotProps, ChatConfig, Message } from './types';
5
+ export type { NeuroBotContextType } from './context/NeuroBotContext';
6
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AACjD,OAAO,EAAE,QAAQ,IAAI,OAAO,EAAE,MAAM,uBAAuB,CAAC;AAC5D,OAAO,EAAE,gBAAgB,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAC;AACjF,YAAY,EAAE,aAAa,EAAE,UAAU,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAClE,YAAY,EAAE,mBAAmB,EAAE,MAAM,2BAA2B,CAAC"}