@volkansuner/aichat-react-native 0.1.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.
- package/LICENSE +22 -0
- package/README.md +528 -0
- package/dist/AIChatSDK.d.ts +75 -0
- package/dist/AIChatSDK.d.ts.map +1 -0
- package/dist/AIChatSDK.js +357 -0
- package/dist/AIChatSDK.js.map +1 -0
- package/dist/components/AIChatProvider.d.ts +25 -0
- package/dist/components/AIChatProvider.d.ts.map +1 -0
- package/dist/components/AIChatProvider.js +93 -0
- package/dist/components/AIChatProvider.js.map +1 -0
- package/dist/components/AIChatWidget.d.ts +62 -0
- package/dist/components/AIChatWidget.d.ts.map +1 -0
- package/dist/components/AIChatWidget.handlers.d.ts +15 -0
- package/dist/components/AIChatWidget.handlers.d.ts.map +1 -0
- package/dist/components/AIChatWidget.handlers.js +180 -0
- package/dist/components/AIChatWidget.handlers.js.map +1 -0
- package/dist/components/AIChatWidget.js +403 -0
- package/dist/components/AIChatWidget.js.map +1 -0
- package/dist/components/AIChatWidget.styles.d.ts +17 -0
- package/dist/components/AIChatWidget.styles.d.ts.map +1 -0
- package/dist/components/AIChatWidget.styles.js +68 -0
- package/dist/components/AIChatWidget.styles.js.map +1 -0
- package/dist/components/AIChatWidget.types.d.ts +250 -0
- package/dist/components/AIChatWidget.types.d.ts.map +1 -0
- package/dist/components/AIChatWidget.types.js +3 -0
- package/dist/components/AIChatWidget.types.js.map +1 -0
- package/dist/components/AIChatWidget.utils.d.ts +12 -0
- package/dist/components/AIChatWidget.utils.d.ts.map +1 -0
- package/dist/components/AIChatWidget.utils.js +109 -0
- package/dist/components/AIChatWidget.utils.js.map +1 -0
- package/dist/components/ConfigError.d.ts +33 -0
- package/dist/components/ConfigError.d.ts.map +1 -0
- package/dist/components/ConfigError.js +195 -0
- package/dist/components/ConfigError.js.map +1 -0
- package/dist/components/FloatingButton.d.ts +12 -0
- package/dist/components/FloatingButton.d.ts.map +1 -0
- package/dist/components/FloatingButton.js +163 -0
- package/dist/components/FloatingButton.js.map +1 -0
- package/dist/components/InputArea.d.ts +58 -0
- package/dist/components/InputArea.d.ts.map +1 -0
- package/dist/components/InputArea.js +135 -0
- package/dist/components/InputArea.js.map +1 -0
- package/dist/components/MarkdownText.d.ts +16 -0
- package/dist/components/MarkdownText.d.ts.map +1 -0
- package/dist/components/MarkdownText.js +263 -0
- package/dist/components/MarkdownText.js.map +1 -0
- package/dist/components/MessageBubble.d.ts +101 -0
- package/dist/components/MessageBubble.d.ts.map +1 -0
- package/dist/components/MessageBubble.js +377 -0
- package/dist/components/MessageBubble.js.map +1 -0
- package/dist/components/NavigationSuggestion.d.ts +13 -0
- package/dist/components/NavigationSuggestion.d.ts.map +1 -0
- package/dist/components/NavigationSuggestion.js +117 -0
- package/dist/components/NavigationSuggestion.js.map +1 -0
- package/dist/components/QuickReplies.d.ts +15 -0
- package/dist/components/QuickReplies.d.ts.map +1 -0
- package/dist/components/QuickReplies.js +49 -0
- package/dist/components/QuickReplies.js.map +1 -0
- package/dist/components/TemplateRenderer.d.ts +17 -0
- package/dist/components/TemplateRenderer.d.ts.map +1 -0
- package/dist/components/TemplateRenderer.js +397 -0
- package/dist/components/TemplateRenderer.js.map +1 -0
- package/dist/components/TypingIndicator.d.ts +29 -0
- package/dist/components/TypingIndicator.d.ts.map +1 -0
- package/dist/components/TypingIndicator.js +110 -0
- package/dist/components/TypingIndicator.js.map +1 -0
- package/dist/components/defaults/DefaultCard.d.ts +15 -0
- package/dist/components/defaults/DefaultCard.d.ts.map +1 -0
- package/dist/components/defaults/DefaultCard.js +157 -0
- package/dist/components/defaults/DefaultCard.js.map +1 -0
- package/dist/components/defaults/DefaultDetail.d.ts +15 -0
- package/dist/components/defaults/DefaultDetail.d.ts.map +1 -0
- package/dist/components/defaults/DefaultDetail.js +139 -0
- package/dist/components/defaults/DefaultDetail.js.map +1 -0
- package/dist/components/defaults/DefaultList.d.ts +13 -0
- package/dist/components/defaults/DefaultList.d.ts.map +1 -0
- package/dist/components/defaults/DefaultList.js +99 -0
- package/dist/components/defaults/DefaultList.js.map +1 -0
- package/dist/components/defaults/DefaultTable.d.ts +15 -0
- package/dist/components/defaults/DefaultTable.d.ts.map +1 -0
- package/dist/components/defaults/DefaultTable.js +205 -0
- package/dist/components/defaults/DefaultTable.js.map +1 -0
- package/dist/components/defaults/index.d.ts +15 -0
- package/dist/components/defaults/index.d.ts.map +1 -0
- package/dist/components/defaults/index.js +26 -0
- package/dist/components/defaults/index.js.map +1 -0
- package/dist/components/index.d.ts +17 -0
- package/dist/components/index.d.ts.map +1 -0
- package/dist/components/index.js +33 -0
- package/dist/components/index.js.map +1 -0
- package/dist/constants.d.ts +41 -0
- package/dist/constants.d.ts.map +1 -0
- package/dist/constants.js +52 -0
- package/dist/constants.js.map +1 -0
- package/dist/hooks/useAIChatConfig.d.ts +61 -0
- package/dist/hooks/useAIChatConfig.d.ts.map +1 -0
- package/dist/hooks/useAIChatConfig.js +95 -0
- package/dist/hooks/useAIChatConfig.js.map +1 -0
- package/dist/hooks/useChatMessages.d.ts +27 -0
- package/dist/hooks/useChatMessages.d.ts.map +1 -0
- package/dist/hooks/useChatMessages.js +255 -0
- package/dist/hooks/useChatMessages.js.map +1 -0
- package/dist/hooks/useContextManager.d.ts +13 -0
- package/dist/hooks/useContextManager.d.ts.map +1 -0
- package/dist/hooks/useContextManager.js +42 -0
- package/dist/hooks/useContextManager.js.map +1 -0
- package/dist/hooks/useSDK.d.ts +18 -0
- package/dist/hooks/useSDK.d.ts.map +1 -0
- package/dist/hooks/useSDK.js +64 -0
- package/dist/hooks/useSDK.js.map +1 -0
- package/dist/index.d.ts +15 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +46 -0
- package/dist/index.js.map +1 -0
- package/dist/registry/TemplateRegistry.d.ts +48 -0
- package/dist/registry/TemplateRegistry.d.ts.map +1 -0
- package/dist/registry/TemplateRegistry.js +77 -0
- package/dist/registry/TemplateRegistry.js.map +1 -0
- package/dist/registry/index.d.ts +5 -0
- package/dist/registry/index.d.ts.map +1 -0
- package/dist/registry/index.js +9 -0
- package/dist/registry/index.js.map +1 -0
- package/dist/services/BackendService.d.ts +47 -0
- package/dist/services/BackendService.d.ts.map +1 -0
- package/dist/services/BackendService.js +362 -0
- package/dist/services/BackendService.js.map +1 -0
- package/dist/services/ConversationManager.d.ts +40 -0
- package/dist/services/ConversationManager.d.ts.map +1 -0
- package/dist/services/ConversationManager.js +95 -0
- package/dist/services/ConversationManager.js.map +1 -0
- package/dist/services/LocalAIClassifier.d.ts +32 -0
- package/dist/services/LocalAIClassifier.d.ts.map +1 -0
- package/dist/services/LocalAIClassifier.js +149 -0
- package/dist/services/LocalAIClassifier.js.map +1 -0
- package/dist/services/NavigationHandler.d.ts +30 -0
- package/dist/services/NavigationHandler.d.ts.map +1 -0
- package/dist/services/NavigationHandler.js +74 -0
- package/dist/services/NavigationHandler.js.map +1 -0
- package/dist/themes/dark.d.ts +6 -0
- package/dist/themes/dark.d.ts.map +1 -0
- package/dist/themes/dark.js +130 -0
- package/dist/themes/dark.js.map +1 -0
- package/dist/themes/index.d.ts +13 -0
- package/dist/themes/index.d.ts.map +1 -0
- package/dist/themes/index.js +34 -0
- package/dist/themes/index.js.map +1 -0
- package/dist/themes/light.d.ts +6 -0
- package/dist/themes/light.d.ts.map +1 -0
- package/dist/themes/light.js +130 -0
- package/dist/themes/light.js.map +1 -0
- package/dist/themes/types.d.ts +143 -0
- package/dist/themes/types.d.ts.map +1 -0
- package/dist/themes/types.js +6 -0
- package/dist/themes/types.js.map +1 -0
- package/dist/types/api.d.ts +118 -0
- package/dist/types/api.d.ts.map +1 -0
- package/dist/types/api.js +6 -0
- package/dist/types/api.js.map +1 -0
- package/dist/types/chat.d.ts +154 -0
- package/dist/types/chat.d.ts.map +1 -0
- package/dist/types/chat.js +6 -0
- package/dist/types/chat.js.map +1 -0
- package/dist/types/components.d.ts +69 -0
- package/dist/types/components.d.ts.map +1 -0
- package/dist/types/components.js +17 -0
- package/dist/types/components.js.map +1 -0
- package/dist/types/config.d.ts +122 -0
- package/dist/types/config.d.ts.map +1 -0
- package/dist/types/config.js +18 -0
- package/dist/types/config.js.map +1 -0
- package/dist/types/document.d.ts +108 -0
- package/dist/types/document.d.ts.map +1 -0
- package/dist/types/document.js +7 -0
- package/dist/types/document.js.map +1 -0
- package/dist/types/index.d.ts +14 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/index.js +31 -0
- package/dist/types/index.js.map +1 -0
- package/dist/types/local-ai.d.ts +48 -0
- package/dist/types/local-ai.d.ts.map +1 -0
- package/dist/types/local-ai.js +17 -0
- package/dist/types/local-ai.js.map +1 -0
- package/dist/types/navigation.d.ts +89 -0
- package/dist/types/navigation.d.ts.map +1 -0
- package/dist/types/navigation.js +6 -0
- package/dist/types/navigation.js.map +1 -0
- package/dist/types/sdk.d.ts +47 -0
- package/dist/types/sdk.d.ts.map +1 -0
- package/dist/types/sdk.js +6 -0
- package/dist/types/sdk.js.map +1 -0
- package/dist/types/template.d.ts +220 -0
- package/dist/types/template.d.ts.map +1 -0
- package/dist/types/template.js +8 -0
- package/dist/types/template.js.map +1 -0
- package/dist/utils/configLoader.d.ts +69 -0
- package/dist/utils/configLoader.d.ts.map +1 -0
- package/dist/utils/configLoader.js +278 -0
- package/dist/utils/configLoader.js.map +1 -0
- package/dist/utils/deepMerge.d.ts +47 -0
- package/dist/utils/deepMerge.d.ts.map +1 -0
- package/dist/utils/deepMerge.js +71 -0
- package/dist/utils/deepMerge.js.map +1 -0
- package/package.json +65 -0
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Registry exports
|
|
4
|
+
*/
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.TemplateRegistry = void 0;
|
|
7
|
+
var TemplateRegistry_1 = require("./TemplateRegistry");
|
|
8
|
+
Object.defineProperty(exports, "TemplateRegistry", { enumerable: true, get: function () { return TemplateRegistry_1.TemplateRegistry; } });
|
|
9
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/registry/index.ts"],"names":[],"mappings":";AAAA;;GAEG;;;AAEH,uDAAsD;AAA7C,oHAAA,gBAAgB,OAAA"}
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
import { ChatResponse } from '../types';
|
|
2
|
+
/**
|
|
3
|
+
* Backend API Service using native fetch
|
|
4
|
+
*/
|
|
5
|
+
export declare class BackendService {
|
|
6
|
+
private baseURL;
|
|
7
|
+
private apiKey;
|
|
8
|
+
private timeout;
|
|
9
|
+
private bundleId;
|
|
10
|
+
private appVersion;
|
|
11
|
+
private deviceModel;
|
|
12
|
+
constructor(apiKey: string, apiUrl?: string);
|
|
13
|
+
/**
|
|
14
|
+
* Initialize device information for security headers
|
|
15
|
+
*/
|
|
16
|
+
private initDeviceInfo;
|
|
17
|
+
/**
|
|
18
|
+
* Get security headers for API requests
|
|
19
|
+
*/
|
|
20
|
+
private getSecurityHeaders;
|
|
21
|
+
/**
|
|
22
|
+
* Make HTTP request with timeout
|
|
23
|
+
*/
|
|
24
|
+
private fetchWithTimeout;
|
|
25
|
+
/**
|
|
26
|
+
* Handle response errors with detailed messages
|
|
27
|
+
*/
|
|
28
|
+
private handleResponse;
|
|
29
|
+
/**
|
|
30
|
+
* Send chat message to backend
|
|
31
|
+
*/
|
|
32
|
+
sendMessage(message: string, sessionId: string, context?: Record<string, any>, contextDescription?: string): Promise<ChatResponse>;
|
|
33
|
+
/**
|
|
34
|
+
* Get conversation history
|
|
35
|
+
*/
|
|
36
|
+
getHistory(sessionId: string, limit?: number): Promise<any>;
|
|
37
|
+
/**
|
|
38
|
+
* Delete conversation
|
|
39
|
+
*/
|
|
40
|
+
deleteConversation(sessionId: string): Promise<void>;
|
|
41
|
+
/**
|
|
42
|
+
* 🆕 Send message with streaming response
|
|
43
|
+
* React Native compatible version using XMLHttpRequest
|
|
44
|
+
*/
|
|
45
|
+
sendMessageStream(message: string, sessionId: string, onChunk: (chunk: string) => void, onComplete: (response: ChatResponse) => void, onError: (error: Error) => void, context?: Record<string, any>, contextDescription?: string, onToolSuggestions?: (tools: any[]) => void): Promise<void>;
|
|
46
|
+
}
|
|
47
|
+
//# sourceMappingURL=BackendService.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"BackendService.d.ts","sourceRoot":"","sources":["../../src/services/BackendService.ts"],"names":[],"mappings":"AAAA,OAAO,EAAe,YAAY,EAAE,MAAM,UAAU,CAAC;AAWrD;;GAEG;AACH,qBAAa,cAAc;IACzB,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,QAAQ,CAAuB;IACvC,OAAO,CAAC,UAAU,CAAuB;IACzC,OAAO,CAAC,WAAW,CAAuB;gBAE9B,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM;IAsB3C;;OAEG;YACW,cAAc;IAsB5B;;OAEG;IACH,OAAO,CAAC,kBAAkB;IAyB1B;;OAEG;YACW,gBAAgB;IA4B9B;;OAEG;YACW,cAAc;IAuE5B;;OAEG;IACG,WAAW,CACf,OAAO,EAAE,MAAM,EACf,SAAS,EAAE,MAAM,EACjB,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EAC7B,kBAAkB,CAAC,EAAE,MAAM,GAC1B,OAAO,CAAC,YAAY,CAAC;IA0BxB;;OAEG;IACG,UAAU,CAAC,SAAS,EAAE,MAAM,EAAE,KAAK,GAAE,MAAW,GAAG,OAAO,CAAC,GAAG,CAAC;IAkBrE;;OAEG;IACG,kBAAkB,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAiB1D;;;OAGG;IACG,iBAAiB,CACrB,OAAO,EAAE,MAAM,EACf,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,EAChC,UAAU,EAAE,CAAC,QAAQ,EAAE,YAAY,KAAK,IAAI,EAC5C,OAAO,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,EAC/B,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EAC7B,kBAAkB,CAAC,EAAE,MAAM,EAC3B,iBAAiB,CAAC,EAAE,CAAC,KAAK,EAAE,GAAG,EAAE,KAAK,IAAI,GACzC,OAAO,CAAC,IAAI,CAAC;CA0IjB"}
|
|
@@ -0,0 +1,362 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.BackendService = void 0;
|
|
4
|
+
const react_native_1 = require("react-native");
|
|
5
|
+
// Lazy import DeviceInfo to avoid NativeEventEmitter warning on module load
|
|
6
|
+
let DeviceInfo = null;
|
|
7
|
+
try {
|
|
8
|
+
DeviceInfo = require('react-native-device-info').default;
|
|
9
|
+
}
|
|
10
|
+
catch (error) {
|
|
11
|
+
console.warn('[AIChatSDK] react-native-device-info not available. Some features may be limited.');
|
|
12
|
+
}
|
|
13
|
+
/**
|
|
14
|
+
* Backend API Service using native fetch
|
|
15
|
+
*/
|
|
16
|
+
class BackendService {
|
|
17
|
+
baseURL;
|
|
18
|
+
apiKey;
|
|
19
|
+
timeout;
|
|
20
|
+
bundleId = null;
|
|
21
|
+
appVersion = null;
|
|
22
|
+
deviceModel = null;
|
|
23
|
+
constructor(apiKey, apiUrl) {
|
|
24
|
+
// If custom apiUrl provided, ensure it has /api/v1 prefix
|
|
25
|
+
if (apiUrl) {
|
|
26
|
+
// Remove trailing slash if exists
|
|
27
|
+
const cleanUrl = apiUrl.replace(/\/$/, '');
|
|
28
|
+
// Add /api/v1 if not already present
|
|
29
|
+
this.baseURL = cleanUrl.includes('/api/v1') ? cleanUrl : `${cleanUrl}/api/v1`;
|
|
30
|
+
}
|
|
31
|
+
else {
|
|
32
|
+
this.baseURL = 'https://api.aichatsdk.com/v1';
|
|
33
|
+
}
|
|
34
|
+
this.apiKey = apiKey;
|
|
35
|
+
this.timeout = 60000; // 60 seconds for AI responses with RAG
|
|
36
|
+
// Initialize device info asynchronously
|
|
37
|
+
this.initDeviceInfo();
|
|
38
|
+
console.log('[AIChatSDK] BackendService initialized with URL:', this.baseURL);
|
|
39
|
+
console.log('[AIChatSDK] API Key: ', this.apiKey);
|
|
40
|
+
console.log('[AIChatSDK] SDK Version: 0.1.0');
|
|
41
|
+
console.log('[AIChatSDK] Platform: ', react_native_1.Platform.OS);
|
|
42
|
+
console.log('[AIChatSDK] Bundle ID: ', this.bundleId);
|
|
43
|
+
}
|
|
44
|
+
/**
|
|
45
|
+
* Initialize device information for security headers
|
|
46
|
+
*/
|
|
47
|
+
async initDeviceInfo() {
|
|
48
|
+
try {
|
|
49
|
+
if (!DeviceInfo) {
|
|
50
|
+
console.warn('[AIChatSDK] DeviceInfo not available, using fallback values');
|
|
51
|
+
this.bundleId = 'com.esas.burda2';
|
|
52
|
+
this.appVersion = '1.0.0';
|
|
53
|
+
this.deviceModel = react_native_1.Platform.OS;
|
|
54
|
+
return;
|
|
55
|
+
}
|
|
56
|
+
this.bundleId = DeviceInfo.getBundleId();
|
|
57
|
+
this.appVersion = DeviceInfo.getVersion();
|
|
58
|
+
this.deviceModel = await DeviceInfo.getDeviceName();
|
|
59
|
+
}
|
|
60
|
+
catch (error) {
|
|
61
|
+
console.warn('[AIChatSDK] Failed to initialize device info:', error);
|
|
62
|
+
// Fallback values
|
|
63
|
+
this.bundleId = 'com.esas.burda2';
|
|
64
|
+
this.appVersion = '1.0.0';
|
|
65
|
+
this.deviceModel = react_native_1.Platform.OS;
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
/**
|
|
69
|
+
* Get security headers for API requests
|
|
70
|
+
*/
|
|
71
|
+
getSecurityHeaders() {
|
|
72
|
+
const headers = {
|
|
73
|
+
'x-api-key': this.apiKey,
|
|
74
|
+
'x-platform': react_native_1.Platform.OS, // 'ios' or 'android'
|
|
75
|
+
'x-sdk-version': '0.1.0', // SDK version
|
|
76
|
+
};
|
|
77
|
+
// Add bundle ID (required for bundle ID restrictions)
|
|
78
|
+
if (this.bundleId) {
|
|
79
|
+
headers['x-bundle-id'] = this.bundleId;
|
|
80
|
+
}
|
|
81
|
+
// Add app version
|
|
82
|
+
if (this.appVersion) {
|
|
83
|
+
headers['x-app-version'] = this.appVersion;
|
|
84
|
+
}
|
|
85
|
+
// Add device model
|
|
86
|
+
if (this.deviceModel) {
|
|
87
|
+
headers['x-device-model'] = this.deviceModel;
|
|
88
|
+
}
|
|
89
|
+
return headers;
|
|
90
|
+
}
|
|
91
|
+
/**
|
|
92
|
+
* Make HTTP request with timeout
|
|
93
|
+
*/
|
|
94
|
+
async fetchWithTimeout(url, options) {
|
|
95
|
+
const controller = new AbortController();
|
|
96
|
+
const timeoutId = setTimeout(() => controller.abort(), this.timeout);
|
|
97
|
+
try {
|
|
98
|
+
const response = await fetch(url, {
|
|
99
|
+
...options,
|
|
100
|
+
signal: controller.signal,
|
|
101
|
+
headers: {
|
|
102
|
+
'Content-Type': 'application/json',
|
|
103
|
+
...this.getSecurityHeaders(),
|
|
104
|
+
...options.headers,
|
|
105
|
+
},
|
|
106
|
+
});
|
|
107
|
+
clearTimeout(timeoutId);
|
|
108
|
+
return response;
|
|
109
|
+
}
|
|
110
|
+
catch (error) {
|
|
111
|
+
clearTimeout(timeoutId);
|
|
112
|
+
if (error.name === 'AbortError') {
|
|
113
|
+
throw new Error('Request timeout');
|
|
114
|
+
}
|
|
115
|
+
throw error;
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
/**
|
|
119
|
+
* Handle response errors with detailed messages
|
|
120
|
+
*/
|
|
121
|
+
async handleResponse(response) {
|
|
122
|
+
if (!response.ok) {
|
|
123
|
+
const errorData = await response.json().catch(() => ({}));
|
|
124
|
+
const errorCode = errorData.error || 'UNKNOWN_ERROR';
|
|
125
|
+
const errorMessage = errorData.message || response.statusText;
|
|
126
|
+
const hint = errorData.hint || '';
|
|
127
|
+
// 401: Unauthorized (Invalid/Missing API Key)
|
|
128
|
+
if (response.status === 401) {
|
|
129
|
+
if (errorCode === 'MISSING_API_KEY') {
|
|
130
|
+
throw new Error('❌ API key is required. Please check your configuration.');
|
|
131
|
+
}
|
|
132
|
+
if (errorCode === 'INVALID_API_KEY') {
|
|
133
|
+
throw new Error('❌ Invalid API key. Please check your Dashboard for the correct key.');
|
|
134
|
+
}
|
|
135
|
+
throw new Error(`❌ Unauthorized: ${errorMessage}`);
|
|
136
|
+
}
|
|
137
|
+
// 403: Forbidden (Bundle ID, Platform, Permission issues)
|
|
138
|
+
if (response.status === 403) {
|
|
139
|
+
if (errorCode === 'INVALID_BUNDLE_ID') {
|
|
140
|
+
const bundleIdMsg = this.bundleId
|
|
141
|
+
? `Your bundle ID: ${this.bundleId}`
|
|
142
|
+
: 'Bundle ID could not be detected';
|
|
143
|
+
throw new Error(`🔒 Access Denied: ${errorMessage}\n${bundleIdMsg}\n💡 ${hint || 'Add your bundle ID to API key restrictions in the Dashboard'}`);
|
|
144
|
+
}
|
|
145
|
+
if (errorCode === 'INVALID_PLATFORM') {
|
|
146
|
+
throw new Error(`🔒 Access Denied: ${errorMessage}\n💡 Add '${react_native_1.Platform.OS}' to allowed platforms in the Dashboard`);
|
|
147
|
+
}
|
|
148
|
+
if (errorCode === 'INACTIVE_API_KEY') {
|
|
149
|
+
throw new Error('🔒 API key is inactive. Please activate it in the Dashboard.');
|
|
150
|
+
}
|
|
151
|
+
if (errorCode === 'EXPIRED_API_KEY') {
|
|
152
|
+
throw new Error('🔒 API key has expired. Please generate a new key in the Dashboard.');
|
|
153
|
+
}
|
|
154
|
+
if (errorCode.startsWith('PERMISSION_DENIED')) {
|
|
155
|
+
const feature = errorCode.replace('PERMISSION_DENIED_', '').toLowerCase();
|
|
156
|
+
throw new Error(`🔒 Permission Denied: ${feature} access is not enabled for this API key.\n💡 Enable it in the Dashboard`);
|
|
157
|
+
}
|
|
158
|
+
throw new Error(`🔒 Access Denied: ${errorMessage}\n💡 ${hint}`);
|
|
159
|
+
}
|
|
160
|
+
// 429: Rate Limit Exceeded
|
|
161
|
+
if (response.status === 429) {
|
|
162
|
+
const retryAfter = response.headers.get('Retry-After');
|
|
163
|
+
const rateLimitReset = response.headers.get('X-RateLimit-Reset');
|
|
164
|
+
const retryMsg = retryAfter
|
|
165
|
+
? `Try again in ${retryAfter} seconds`
|
|
166
|
+
: rateLimitReset
|
|
167
|
+
? `Try again at ${new Date(parseInt(rateLimitReset) * 1000).toLocaleTimeString()}`
|
|
168
|
+
: 'Try again later';
|
|
169
|
+
throw new Error(`⚠️ Rate Limit Exceeded: ${errorMessage}\n💡 ${retryMsg}\n📊 Increase rate limits in the Dashboard`);
|
|
170
|
+
}
|
|
171
|
+
// Other errors
|
|
172
|
+
throw new Error(errorData.message || `❌ HTTP Error ${response.status}: ${response.statusText}`);
|
|
173
|
+
}
|
|
174
|
+
return response.json();
|
|
175
|
+
}
|
|
176
|
+
/**
|
|
177
|
+
* Send chat message to backend
|
|
178
|
+
*/
|
|
179
|
+
async sendMessage(message, sessionId, context, contextDescription) {
|
|
180
|
+
try {
|
|
181
|
+
const request = {
|
|
182
|
+
message,
|
|
183
|
+
sessionId,
|
|
184
|
+
context: context ? {
|
|
185
|
+
metadata: {
|
|
186
|
+
...context,
|
|
187
|
+
contextDescription,
|
|
188
|
+
},
|
|
189
|
+
} : undefined,
|
|
190
|
+
};
|
|
191
|
+
console.log('🚀 Sending message to backend:', request);
|
|
192
|
+
const response = await this.fetchWithTimeout(`${this.baseURL}/chat`, {
|
|
193
|
+
method: 'POST',
|
|
194
|
+
body: JSON.stringify(request),
|
|
195
|
+
});
|
|
196
|
+
return this.handleResponse(response);
|
|
197
|
+
}
|
|
198
|
+
catch (error) {
|
|
199
|
+
throw new Error(error.message || 'Failed to send message');
|
|
200
|
+
}
|
|
201
|
+
}
|
|
202
|
+
/**
|
|
203
|
+
* Get conversation history
|
|
204
|
+
*/
|
|
205
|
+
async getHistory(sessionId, limit = 50) {
|
|
206
|
+
try {
|
|
207
|
+
const params = new URLSearchParams({
|
|
208
|
+
sessionId,
|
|
209
|
+
limit: limit.toString(),
|
|
210
|
+
});
|
|
211
|
+
const response = await this.fetchWithTimeout(`${this.baseURL}/chat/history?${params}`, { method: 'GET' });
|
|
212
|
+
return this.handleResponse(response);
|
|
213
|
+
}
|
|
214
|
+
catch (error) {
|
|
215
|
+
throw new Error('Failed to fetch conversation history');
|
|
216
|
+
}
|
|
217
|
+
}
|
|
218
|
+
/**
|
|
219
|
+
* Delete conversation
|
|
220
|
+
*/
|
|
221
|
+
async deleteConversation(sessionId) {
|
|
222
|
+
try {
|
|
223
|
+
const params = new URLSearchParams({ sessionId });
|
|
224
|
+
const response = await this.fetchWithTimeout(`${this.baseURL}/chat/conversation?${params}`, { method: 'DELETE' });
|
|
225
|
+
if (!response.ok) {
|
|
226
|
+
throw new Error(`Failed to delete: ${response.statusText}`);
|
|
227
|
+
}
|
|
228
|
+
}
|
|
229
|
+
catch (error) {
|
|
230
|
+
throw new Error('Failed to delete conversation');
|
|
231
|
+
}
|
|
232
|
+
}
|
|
233
|
+
/**
|
|
234
|
+
* 🆕 Send message with streaming response
|
|
235
|
+
* React Native compatible version using XMLHttpRequest
|
|
236
|
+
*/
|
|
237
|
+
async sendMessageStream(message, sessionId, onChunk, onComplete, onError, context, contextDescription, onToolSuggestions // 🆕 Tool suggestions callback
|
|
238
|
+
) {
|
|
239
|
+
try {
|
|
240
|
+
const request = {
|
|
241
|
+
message,
|
|
242
|
+
sessionId,
|
|
243
|
+
context: context ? {
|
|
244
|
+
metadata: {
|
|
245
|
+
...context,
|
|
246
|
+
contextDescription,
|
|
247
|
+
},
|
|
248
|
+
} : undefined,
|
|
249
|
+
};
|
|
250
|
+
// Use XMLHttpRequest for React Native streaming support
|
|
251
|
+
const xhr = new XMLHttpRequest();
|
|
252
|
+
let fullResponse = '';
|
|
253
|
+
let messageId = '';
|
|
254
|
+
let tokensUsed = 0;
|
|
255
|
+
let navigationSuggestion = undefined;
|
|
256
|
+
let apiSuggestions = [];
|
|
257
|
+
let lastProcessedIndex = 0;
|
|
258
|
+
let firstChunkReceived = false; // ⏱️ Track first chunk
|
|
259
|
+
xhr.onprogress = () => {
|
|
260
|
+
// Get new data since last update
|
|
261
|
+
const currentText = xhr.responseText;
|
|
262
|
+
const newText = currentText.substring(lastProcessedIndex);
|
|
263
|
+
lastProcessedIndex = currentText.length;
|
|
264
|
+
if (!newText)
|
|
265
|
+
return;
|
|
266
|
+
// ⏱️ Log first chunk arrival at network level
|
|
267
|
+
if (!firstChunkReceived) {
|
|
268
|
+
console.log('📡 First network chunk received from backend');
|
|
269
|
+
firstChunkReceived = true;
|
|
270
|
+
}
|
|
271
|
+
console.log('🌊 Streaming chunk received:', newText.substring(0, 50) + '...');
|
|
272
|
+
// Parse SSE events (format: "data: {...}\n\n")
|
|
273
|
+
const lines = newText.split('\n');
|
|
274
|
+
for (const line of lines) {
|
|
275
|
+
if (line.startsWith('data: ')) {
|
|
276
|
+
const jsonStr = line.slice(6).trim(); // Remove "data: " prefix
|
|
277
|
+
if (!jsonStr)
|
|
278
|
+
continue;
|
|
279
|
+
try {
|
|
280
|
+
const event = JSON.parse(jsonStr);
|
|
281
|
+
switch (event.type) {
|
|
282
|
+
case 'content':
|
|
283
|
+
// Stream content chunk
|
|
284
|
+
console.log('✅ Content chunk:', event.content);
|
|
285
|
+
fullResponse += event.content;
|
|
286
|
+
onChunk(event.content);
|
|
287
|
+
break;
|
|
288
|
+
case 'navigation':
|
|
289
|
+
navigationSuggestion = event.navigation;
|
|
290
|
+
break;
|
|
291
|
+
case 'api_suggestions':
|
|
292
|
+
console.log('🔌 API suggestions received:', event.suggestions);
|
|
293
|
+
apiSuggestions = event.suggestions || [];
|
|
294
|
+
break;
|
|
295
|
+
case 'tool_suggestions':
|
|
296
|
+
// 🆕 Tool Registry suggestions
|
|
297
|
+
console.log('🛠️ Tool suggestions received:', event.tools);
|
|
298
|
+
if (onToolSuggestions && event.tools) {
|
|
299
|
+
onToolSuggestions(event.tools);
|
|
300
|
+
}
|
|
301
|
+
break;
|
|
302
|
+
case 'done':
|
|
303
|
+
// Stream complete
|
|
304
|
+
messageId = event.messageId;
|
|
305
|
+
tokensUsed = event.tokensUsed;
|
|
306
|
+
break;
|
|
307
|
+
case 'error':
|
|
308
|
+
onError(new Error(event.error));
|
|
309
|
+
return;
|
|
310
|
+
}
|
|
311
|
+
}
|
|
312
|
+
catch (e) {
|
|
313
|
+
// Skip malformed JSON
|
|
314
|
+
console.warn('Failed to parse SSE event:', jsonStr, e);
|
|
315
|
+
}
|
|
316
|
+
}
|
|
317
|
+
}
|
|
318
|
+
};
|
|
319
|
+
xhr.onload = () => {
|
|
320
|
+
if (xhr.status === 200) {
|
|
321
|
+
// Call onComplete with full response
|
|
322
|
+
onComplete({
|
|
323
|
+
id: messageId || `msg-${Date.now()}`,
|
|
324
|
+
message: fullResponse,
|
|
325
|
+
text: fullResponse,
|
|
326
|
+
timestamp: new Date(),
|
|
327
|
+
handledBy: 'backend',
|
|
328
|
+
handled: 'backend',
|
|
329
|
+
tokensUsed,
|
|
330
|
+
navigationSuggestion,
|
|
331
|
+
apiSuggestions: apiSuggestions.length > 0 ? apiSuggestions : undefined,
|
|
332
|
+
});
|
|
333
|
+
}
|
|
334
|
+
else {
|
|
335
|
+
try {
|
|
336
|
+
const errorData = JSON.parse(xhr.responseText);
|
|
337
|
+
onError(new Error(errorData.message || `HTTP Error: ${xhr.status}`));
|
|
338
|
+
}
|
|
339
|
+
catch {
|
|
340
|
+
onError(new Error(`HTTP Error: ${xhr.status}`));
|
|
341
|
+
}
|
|
342
|
+
}
|
|
343
|
+
};
|
|
344
|
+
xhr.onerror = () => {
|
|
345
|
+
onError(new Error('Network error occurred'));
|
|
346
|
+
};
|
|
347
|
+
xhr.ontimeout = () => {
|
|
348
|
+
onError(new Error('Request timeout'));
|
|
349
|
+
};
|
|
350
|
+
xhr.open('POST', `${this.baseURL}/chat/stream`);
|
|
351
|
+
xhr.setRequestHeader('Content-Type', 'application/json');
|
|
352
|
+
xhr.setRequestHeader('x-api-key', this.apiKey);
|
|
353
|
+
xhr.timeout = this.timeout;
|
|
354
|
+
xhr.send(JSON.stringify(request));
|
|
355
|
+
}
|
|
356
|
+
catch (error) {
|
|
357
|
+
onError(error instanceof Error ? error : new Error(error.message || 'Stream failed'));
|
|
358
|
+
}
|
|
359
|
+
}
|
|
360
|
+
}
|
|
361
|
+
exports.BackendService = BackendService;
|
|
362
|
+
//# sourceMappingURL=BackendService.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"BackendService.js","sourceRoot":"","sources":["../../src/services/BackendService.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
import { ChatMessage } from '../types/chat';
|
|
2
|
+
/**
|
|
3
|
+
* Conversation Manager
|
|
4
|
+
* Handles conversation history and session management
|
|
5
|
+
*/
|
|
6
|
+
export declare class ConversationManager {
|
|
7
|
+
private sessionId;
|
|
8
|
+
private messages;
|
|
9
|
+
private maxMessages;
|
|
10
|
+
constructor(sessionId?: string);
|
|
11
|
+
/**
|
|
12
|
+
* Add message to conversation
|
|
13
|
+
*/
|
|
14
|
+
addMessage(message: ChatMessage): void;
|
|
15
|
+
/**
|
|
16
|
+
* Get conversation history
|
|
17
|
+
*/
|
|
18
|
+
getHistory(limit?: number): ChatMessage[];
|
|
19
|
+
/**
|
|
20
|
+
* Get session ID
|
|
21
|
+
*/
|
|
22
|
+
getSessionId(): string;
|
|
23
|
+
/**
|
|
24
|
+
* Clear conversation
|
|
25
|
+
*/
|
|
26
|
+
clear(): Promise<void>;
|
|
27
|
+
/**
|
|
28
|
+
* Load from storage
|
|
29
|
+
*/
|
|
30
|
+
private loadFromStorage;
|
|
31
|
+
/**
|
|
32
|
+
* Save to storage
|
|
33
|
+
*/
|
|
34
|
+
private saveToStorage;
|
|
35
|
+
/**
|
|
36
|
+
* Generate session ID
|
|
37
|
+
*/
|
|
38
|
+
private generateSessionId;
|
|
39
|
+
}
|
|
40
|
+
//# sourceMappingURL=ConversationManager.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ConversationManager.d.ts","sourceRoot":"","sources":["../../src/services/ConversationManager.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAG5C;;;GAGG;AACH,qBAAa,mBAAmB;IAC9B,OAAO,CAAC,SAAS,CAAS;IAC1B,OAAO,CAAC,QAAQ,CAAqB;IACrC,OAAO,CAAC,WAAW,CAAc;gBAErB,SAAS,CAAC,EAAE,MAAM;IAK9B;;OAEG;IACH,UAAU,CAAC,OAAO,EAAE,WAAW,GAAG,IAAI;IAWtC;;OAEG;IACH,UAAU,CAAC,KAAK,CAAC,EAAE,MAAM,GAAG,WAAW,EAAE;IAOzC;;OAEG;IACH,YAAY,IAAI,MAAM;IAItB;;OAEG;IACG,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAM5B;;OAEG;YACW,eAAe;IAa7B;;OAEG;YACW,aAAa;IAgB3B;;OAEG;IACH,OAAO,CAAC,iBAAiB;CAG1B"}
|
|
@@ -0,0 +1,95 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.ConversationManager = void 0;
|
|
7
|
+
const async_storage_1 = __importDefault(require("@react-native-async-storage/async-storage"));
|
|
8
|
+
const constants_1 = require("../constants");
|
|
9
|
+
/**
|
|
10
|
+
* Conversation Manager
|
|
11
|
+
* Handles conversation history and session management
|
|
12
|
+
*/
|
|
13
|
+
class ConversationManager {
|
|
14
|
+
sessionId;
|
|
15
|
+
messages = [];
|
|
16
|
+
maxMessages = 50;
|
|
17
|
+
constructor(sessionId) {
|
|
18
|
+
this.sessionId = sessionId || this.generateSessionId();
|
|
19
|
+
this.loadFromStorage();
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
* Add message to conversation
|
|
23
|
+
*/
|
|
24
|
+
addMessage(message) {
|
|
25
|
+
this.messages.push(message);
|
|
26
|
+
// Keep only last N messages
|
|
27
|
+
if (this.messages.length > this.maxMessages) {
|
|
28
|
+
this.messages = this.messages.slice(-this.maxMessages);
|
|
29
|
+
}
|
|
30
|
+
this.saveToStorage();
|
|
31
|
+
}
|
|
32
|
+
/**
|
|
33
|
+
* Get conversation history
|
|
34
|
+
*/
|
|
35
|
+
getHistory(limit) {
|
|
36
|
+
if (limit) {
|
|
37
|
+
return this.messages.slice(-limit);
|
|
38
|
+
}
|
|
39
|
+
return [...this.messages];
|
|
40
|
+
}
|
|
41
|
+
/**
|
|
42
|
+
* Get session ID
|
|
43
|
+
*/
|
|
44
|
+
getSessionId() {
|
|
45
|
+
return this.sessionId;
|
|
46
|
+
}
|
|
47
|
+
/**
|
|
48
|
+
* Clear conversation
|
|
49
|
+
*/
|
|
50
|
+
async clear() {
|
|
51
|
+
this.messages = [];
|
|
52
|
+
this.sessionId = this.generateSessionId();
|
|
53
|
+
await async_storage_1.default.removeItem(constants_1.STORAGE_KEYS.CONVERSATION_HISTORY);
|
|
54
|
+
}
|
|
55
|
+
/**
|
|
56
|
+
* Load from storage
|
|
57
|
+
*/
|
|
58
|
+
async loadFromStorage() {
|
|
59
|
+
try {
|
|
60
|
+
const stored = await async_storage_1.default.getItem(constants_1.STORAGE_KEYS.CONVERSATION_HISTORY);
|
|
61
|
+
if (stored) {
|
|
62
|
+
const data = JSON.parse(stored);
|
|
63
|
+
this.messages = data.messages || [];
|
|
64
|
+
this.sessionId = data.sessionId || this.sessionId;
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
catch (error) {
|
|
68
|
+
console.warn('Failed to load conversation history:', error);
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
/**
|
|
72
|
+
* Save to storage
|
|
73
|
+
*/
|
|
74
|
+
async saveToStorage() {
|
|
75
|
+
try {
|
|
76
|
+
const data = {
|
|
77
|
+
sessionId: this.sessionId,
|
|
78
|
+
messages: this.messages,
|
|
79
|
+
updatedAt: new Date().toISOString(),
|
|
80
|
+
};
|
|
81
|
+
await async_storage_1.default.setItem(constants_1.STORAGE_KEYS.CONVERSATION_HISTORY, JSON.stringify(data));
|
|
82
|
+
}
|
|
83
|
+
catch (error) {
|
|
84
|
+
console.warn('Failed to save conversation history:', error);
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
/**
|
|
88
|
+
* Generate session ID
|
|
89
|
+
*/
|
|
90
|
+
generateSessionId() {
|
|
91
|
+
return `session_${Date.now()}_${Math.random().toString(36).substr(2, 9)}`;
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
exports.ConversationManager = ConversationManager;
|
|
95
|
+
//# sourceMappingURL=ConversationManager.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ConversationManager.js","sourceRoot":"","sources":["../../src/services/ConversationManager.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import { LocalAIConfig, ClassificationResult } from '../types';
|
|
2
|
+
/**
|
|
3
|
+
* Local AI Classifier using ONNX Runtime
|
|
4
|
+
* Phase 1: Simple rule-based classifier
|
|
5
|
+
* Phase 2: Will use DistilBERT ONNX model
|
|
6
|
+
*/
|
|
7
|
+
export declare class LocalAIClassifier {
|
|
8
|
+
private isInitialized;
|
|
9
|
+
constructor(_config?: LocalAIConfig);
|
|
10
|
+
/**
|
|
11
|
+
* Initialize the classifier
|
|
12
|
+
*/
|
|
13
|
+
initialize(): Promise<void>;
|
|
14
|
+
/**
|
|
15
|
+
* Classify user message intent
|
|
16
|
+
*/
|
|
17
|
+
classify(message: string): Promise<ClassificationResult>;
|
|
18
|
+
/**
|
|
19
|
+
* Rule-based classifier (Phase 1)
|
|
20
|
+
* Phase 2: This will be replaced with ONNX model inference
|
|
21
|
+
*/
|
|
22
|
+
private ruleBasedClassify;
|
|
23
|
+
/**
|
|
24
|
+
* Extract potential screen name from message
|
|
25
|
+
*/
|
|
26
|
+
private extractScreenName;
|
|
27
|
+
/**
|
|
28
|
+
* Destroy classifier
|
|
29
|
+
*/
|
|
30
|
+
destroy(): Promise<void>;
|
|
31
|
+
}
|
|
32
|
+
//# sourceMappingURL=LocalAIClassifier.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"LocalAIClassifier.d.ts","sourceRoot":"","sources":["../../src/services/LocalAIClassifier.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAe,oBAAoB,EAAE,MAAM,UAAU,CAAC;AAE5E;;;;GAIG;AACH,qBAAa,iBAAiB;IAC5B,OAAO,CAAC,aAAa,CAAkB;gBAE3B,OAAO,CAAC,EAAE,aAAa;IAInC;;OAEG;IACG,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IAajC;;OAEG;IACG,QAAQ,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,oBAAoB,CAAC;IAoB9D;;;OAGG;IACH,OAAO,CAAC,iBAAiB;IAqEzB;;OAEG;IACH,OAAO,CAAC,iBAAiB;IA8BzB;;OAEG;IACG,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;CAI/B"}
|