@robylon/react-native-sdk 2.0.29-staging.8 → 2.0.32-staging.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/lib/commonjs/Chatbotsdk.js +4 -3
- package/lib/commonjs/Chatbotsdk.js.map +1 -1
- package/lib/commonjs/FloatingButton/launchers/ImageLauncher.js +1 -1
- package/lib/commonjs/FloatingButton/launchers/ImageLauncher.js.map +1 -1
- package/lib/commonjs/FloatingButton/launchers/TextLauncher.js +1 -1
- package/lib/commonjs/FloatingButton/launchers/TextLauncher.js.map +1 -1
- package/lib/commonjs/FloatingButton/launchers/TextualImageLauncher.js +1 -1
- package/lib/commonjs/FloatingButton/launchers/TextualImageLauncher.js.map +1 -1
- package/lib/commonjs/FloatingButton.js +1 -1
- package/lib/commonjs/FloatingButton.js.map +1 -1
- package/lib/commonjs/LoadingIndicator.js +1 -1
- package/lib/commonjs/LoadingIndicator.js.map +1 -1
- package/lib/commonjs/Toast.js +1 -1
- package/lib/commonjs/Toast.js.map +1 -1
- package/lib/commonjs/components/DebugButton.js +1 -1
- package/lib/commonjs/components/DebugButton.js.map +1 -1
- package/lib/commonjs/types/events.js +1 -1
- package/lib/commonjs/types/events.js.map +1 -1
- package/lib/commonjs/versions/version.staging.js +1 -1
- package/lib/module/Chatbotsdk.js +4 -3
- package/lib/module/Chatbotsdk.js.map +1 -1
- package/lib/module/FloatingButton/launchers/ImageLauncher.js +1 -1
- package/lib/module/FloatingButton/launchers/ImageLauncher.js.map +1 -1
- package/lib/module/FloatingButton/launchers/TextLauncher.js +1 -1
- package/lib/module/FloatingButton/launchers/TextLauncher.js.map +1 -1
- package/lib/module/FloatingButton/launchers/TextualImageLauncher.js +1 -1
- package/lib/module/FloatingButton/launchers/TextualImageLauncher.js.map +1 -1
- package/lib/module/FloatingButton.js +1 -1
- package/lib/module/FloatingButton.js.map +1 -1
- package/lib/module/LoadingIndicator.js +1 -1
- package/lib/module/LoadingIndicator.js.map +1 -1
- package/lib/module/Toast.js +1 -1
- package/lib/module/Toast.js.map +1 -1
- package/lib/module/components/DebugButton.js +1 -1
- package/lib/module/components/DebugButton.js.map +1 -1
- package/lib/module/openChatbot.js +2 -1
- package/lib/module/openChatbot.js.map +1 -1
- package/lib/module/types/events.js +1 -1
- package/lib/module/types/events.js.map +1 -1
- package/lib/module/versions/version.staging.js +1 -1
- package/lib/typescript/Chatbotsdk.d.ts.map +1 -1
- package/lib/typescript/types/events.d.ts +4 -1
- package/lib/typescript/types/events.d.ts.map +1 -1
- package/lib/typescript/versions/version.staging.d.ts +1 -1
- package/package.json +1 -1
- package/src/Chatbotsdk.tsx +67 -15
- package/src/types/events.ts +3 -0
- package/src/versions/version.staging.ts +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Chatbotsdk.d.ts","sourceRoot":"","sources":["../../src/Chatbotsdk.tsx"],"names":[],"mappings":"AAAA,OAAO,KAQN,MAAM,OAAO,CAAC;AAkBf,OAAO,
|
|
1
|
+
{"version":3,"file":"Chatbotsdk.d.ts","sourceRoot":"","sources":["../../src/Chatbotsdk.tsx"],"names":[],"mappings":"AAAA,OAAO,KAQN,MAAM,OAAO,CAAC;AAkBf,OAAO,EAEL,mBAAmB,EAEpB,MAAM,gBAAgB,CAAC;AAsBxB,MAAM,WAAW,YAAY;IAC3B,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI,GAAG,MAAM,CAAC;IACjC,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,YAAY,CAAC,EAAE;QACb,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,MAAM,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;QACzB,YAAY,CAAC,EAAE,OAAO,CAAC;QACvB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,GAAG,CAAC;KAC7B,CAAC;IACF,OAAO,CAAC,EAAE,mBAAmB,CAAC;IAC9B,MAAM,CAAC,EAAE,MAAM,IAAI,CAAC;IACpB,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;IACrB,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;CACtB;AAED,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,MAAM,IAAI,CAAC;IACjB,KAAK,EAAE,MAAM,IAAI,CAAC;IAClB,MAAM,EAAE,MAAM,IAAI,CAAC;IACnB,OAAO,EAAE,MAAM,OAAO,CAAC;CACxB;AAED,UAAU,oBAAqB,SAAQ,YAAY;IACjD,oBAAoB,CAAC,EAAE,OAAO,CAAC;IAC/B,SAAS,CAAC,EAAE,CAAC,OAAO,EAAE,GAAG,KAAK,IAAI,CAAC;IACnC,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,eAAe,CAAC,EAAE,OAAO,CAAC;CAC3B;AAgCD,oBAAY,oBAAoB;IAC9B,MAAM,WAAW;IACjB,OAAO,YAAY;IACnB,KAAK,UAAU;CAChB;AAED,oBAAY,mBAAmB;IAC7B,KAAK,UAAU;IACf,IAAI,SAAS;CACd;AAED,MAAM,WAAW,yBAAyB;IACxC,QAAQ,EAAE,mBAAmB,CAAC;IAC9B,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB;AAED,oBAAY,YAAY;IACtB,IAAI,SAAS;IACb,KAAK,UAAU;IACf,aAAa,kBAAkB;CAChC;AAED,MAAM,WAAW,aAAa;IAC5B,YAAY,EAAE,MAAM,CAAC;IACrB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,qBAAqB,CAAC,EAAE;QACtB,mBAAmB,CAAC,EAAE,MAAM,EAAE,CAAC;QAC/B,YAAY,CAAC,EAAE,MAAM,CAAC;QACtB,eAAe,CAAC,EAAE,MAAM,CAAC;QACzB,YAAY,CAAC,EAAE,MAAM,CAAC;KACvB,CAAC;IACF,cAAc,CAAC,EAAE,oBAAoB,CAAC;IACtC,oBAAoB,CAAC,EAAE,yBAAyB,CAAC;IACjD,aAAa,EAAE,YAAY,CAAC;IAC5B,mBAAmB,EAAE;QACnB,IAAI,CAAC,EAAE,MAAM,CAAC;KACf,CAAC;IACF,MAAM,EAAE;QACN,kBAAkB,CAAC,EAAE;YACnB,GAAG,EAAE,MAAM,CAAC;SACb,CAAC;KACH,CAAC;IACF,eAAe,EAAE,MAAM,CAAC;CACzB;AAED,QAAA,MAAM,OAAO,yFAywBZ,CAAC;AA0CF,eAAe,OAAO,CAAC"}
|
|
@@ -7,7 +7,10 @@ export declare enum ChatbotEventType {
|
|
|
7
7
|
CHATBOT_LOADED = "CHATBOT_LOADED",
|
|
8
8
|
CHAT_INITIALIZED = "CHAT_INITIALIZED",
|
|
9
9
|
SESSION_REFRESHED = "SESSION_REFRESHED",
|
|
10
|
-
CHAT_INITIALIZATION_FAILED = "CHAT_INITIALIZATION_FAILED"
|
|
10
|
+
CHAT_INITIALIZATION_FAILED = "CHAT_INITIALIZATION_FAILED",
|
|
11
|
+
REQUEST_MIC_PERMISSION = "REQUEST_MIC_PERMISSION",
|
|
12
|
+
MIC_PERMISSION_GRANTED = "MIC_PERMISSION_GRANTED",
|
|
13
|
+
MIC_PERMISSION_DENIED = "MIC_PERMISSION_DENIED"
|
|
11
14
|
}
|
|
12
15
|
export declare enum InternalEventType {
|
|
13
16
|
CHAT_MOVED = "CHAT_MOVED"
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"events.d.ts","sourceRoot":"","sources":["../../../src/types/events.ts"],"names":[],"mappings":"AAAA,oBAAY,gBAAgB;IAC1B,qBAAqB,0BAA0B;IAC/C,sBAAsB,2BAA2B;IACjD,cAAc,mBAAmB;IACjC,cAAc,mBAAmB;IACjC,iBAAiB,sBAAsB;IACvC,cAAc,mBAAmB;IACjC,gBAAgB,qBAAqB;IACrC,iBAAiB,sBAAsB;IACvC,0BAA0B,+BAA+B;
|
|
1
|
+
{"version":3,"file":"events.d.ts","sourceRoot":"","sources":["../../../src/types/events.ts"],"names":[],"mappings":"AAAA,oBAAY,gBAAgB;IAC1B,qBAAqB,0BAA0B;IAC/C,sBAAsB,2BAA2B;IACjD,cAAc,mBAAmB;IACjC,cAAc,mBAAmB;IACjC,iBAAiB,sBAAsB;IACvC,cAAc,mBAAmB;IACjC,gBAAgB,qBAAqB;IACrC,iBAAiB,sBAAsB;IACvC,0BAA0B,+BAA+B;IACzD,sBAAsB,2BAA2B;IACjD,sBAAsB,2BAA2B;IACjD,qBAAqB,0BAA0B;CAChD;AAED,oBAAY,iBAAiB;IAC3B,UAAU,eAAe;CAC1B;AAED,MAAM,MAAM,aAAa,GAAG,gBAAgB,GAAG,iBAAiB,CAAC;AAEjE,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,gBAAgB,CAAC;IACvB,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,CAAC,EAAE,GAAG,CAAC;CACZ;AAED,MAAM,MAAM,mBAAmB,GAAG,CAAC,KAAK,EAAE,YAAY,KAAK,IAAI,CAAC"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export declare const SDK_VERSION = "2.0.
|
|
1
|
+
export declare const SDK_VERSION = "2.0.32-staging.4";
|
|
2
2
|
//# sourceMappingURL=version.staging.d.ts.map
|
package/package.json
CHANGED
package/src/Chatbotsdk.tsx
CHANGED
|
@@ -24,7 +24,11 @@ import FloatingButton from "./FloatingButton";
|
|
|
24
24
|
import { API_URL, BASE_CHATBOT_URL, DEFAULT_LAUNCHER_IMAGE } from "./constants";
|
|
25
25
|
import { getSystemInfo, getBrowserAndOSInfoScript } from "./utils/systemInfo";
|
|
26
26
|
import { useChatbotEvents } from "./hooks/useChatbotEvents";
|
|
27
|
-
import {
|
|
27
|
+
import {
|
|
28
|
+
ChatbotEventType,
|
|
29
|
+
ChatbotEventHandler,
|
|
30
|
+
InternalEventType,
|
|
31
|
+
} from "./types/events";
|
|
28
32
|
import { logger } from "./utils/logger";
|
|
29
33
|
import { enableNetworkDebug, enableWebViewDebug } from "./utils/debugConfig";
|
|
30
34
|
import DebugButton from "./components/DebugButton";
|
|
@@ -85,6 +89,28 @@ interface ChatbotMessage {
|
|
|
85
89
|
filename?: string;
|
|
86
90
|
}
|
|
87
91
|
|
|
92
|
+
const getOriginFromUrl = (url?: string): string | null => {
|
|
93
|
+
if (!url) return null;
|
|
94
|
+
try {
|
|
95
|
+
return new URL(url)?.origin ?? null;
|
|
96
|
+
} catch {
|
|
97
|
+
return null;
|
|
98
|
+
}
|
|
99
|
+
};
|
|
100
|
+
|
|
101
|
+
const warmupHttpOrigin = async (origin?: string | null) => {
|
|
102
|
+
if (!origin) return;
|
|
103
|
+
try {
|
|
104
|
+
await fetch(origin, { method: "HEAD" });
|
|
105
|
+
} catch {
|
|
106
|
+
try {
|
|
107
|
+
await fetch(origin, { method: "GET" });
|
|
108
|
+
} catch {
|
|
109
|
+
// Network warmup should be best-effort and non-blocking.
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
};
|
|
113
|
+
|
|
88
114
|
export enum ChatbotInterfaceType {
|
|
89
115
|
WIDGET = "WIDGET",
|
|
90
116
|
POPOVER = "POPOVER",
|
|
@@ -244,12 +270,11 @@ const Chatbot = forwardRef<ChatbotRef, InternalChatbotProps>(
|
|
|
244
270
|
|
|
245
271
|
// Handle WebView messages
|
|
246
272
|
const handleMessage = useCallback(
|
|
247
|
-
(event: WebViewMessageEvent) => {
|
|
273
|
+
async (event: WebViewMessageEvent) => {
|
|
248
274
|
const { data } = event.nativeEvent;
|
|
249
275
|
|
|
250
276
|
try {
|
|
251
277
|
const parsedData: ChatbotMessage = JSON.parse(data);
|
|
252
|
-
|
|
253
278
|
// Handle storage messages
|
|
254
279
|
if (
|
|
255
280
|
Object.values(StorageMessageType).includes(
|
|
@@ -369,6 +394,26 @@ const Chatbot = forwardRef<ChatbotRef, InternalChatbotProps>(
|
|
|
369
394
|
parsedData?.data
|
|
370
395
|
);
|
|
371
396
|
break;
|
|
397
|
+
case "REQUEST_MIC_PERMISSION":
|
|
398
|
+
const granted = await requestAndroidMicPermission();
|
|
399
|
+
if (webViewRef.current && isWebViewVisible) {
|
|
400
|
+
const messageData = {
|
|
401
|
+
name: "requestMicPermission",
|
|
402
|
+
action: "requestMicPermission",
|
|
403
|
+
type: granted
|
|
404
|
+
? "MIC_PERMISSION_GRANTED"
|
|
405
|
+
: "MIC_PERMISSION_DENIED",
|
|
406
|
+
};
|
|
407
|
+
logger.debug("messageData====>", JSON.stringify(messageData));
|
|
408
|
+
webViewRef.current?.injectJavaScript(`
|
|
409
|
+
window.postMessage(${JSON.stringify(messageData)}, '*');`);
|
|
410
|
+
}
|
|
411
|
+
// if (granted) {
|
|
412
|
+
// emitEvent(ChatbotEventType.MIC_PERMISSION_GRANTED);
|
|
413
|
+
// } else {
|
|
414
|
+
// emitEvent(ChatbotEventType.MIC_PERMISSION_DENIED);
|
|
415
|
+
// }
|
|
416
|
+
break;
|
|
372
417
|
default:
|
|
373
418
|
if (onMessage) onMessage(parsedData ?? {});
|
|
374
419
|
}
|
|
@@ -532,6 +577,20 @@ const Chatbot = forwardRef<ChatbotRef, InternalChatbotProps>(
|
|
|
532
577
|
}
|
|
533
578
|
}, [api_key, effectiveUserId, user_token]);
|
|
534
579
|
|
|
580
|
+
useEffect(() => {
|
|
581
|
+
const warmupOrigins = async () => {
|
|
582
|
+
const apiOrigin = getOriginFromUrl(API_URL);
|
|
583
|
+
const chatbotOrigin = getOriginFromUrl(BASE_CHATBOT_URL);
|
|
584
|
+
|
|
585
|
+
await Promise.allSettled([
|
|
586
|
+
warmupHttpOrigin(apiOrigin),
|
|
587
|
+
warmupHttpOrigin(chatbotOrigin),
|
|
588
|
+
]);
|
|
589
|
+
};
|
|
590
|
+
|
|
591
|
+
warmupOrigins();
|
|
592
|
+
}, []);
|
|
593
|
+
|
|
535
594
|
function constructUrl(): string {
|
|
536
595
|
if (!effectiveUserId) return "";
|
|
537
596
|
const params = new URLSearchParams({
|
|
@@ -572,7 +631,6 @@ const Chatbot = forwardRef<ChatbotRef, InternalChatbotProps>(
|
|
|
572
631
|
webViewRef.current.postMessage(
|
|
573
632
|
JSON.stringify({
|
|
574
633
|
name: "closeFrame",
|
|
575
|
-
domain: "app-domain.com",
|
|
576
634
|
})
|
|
577
635
|
);
|
|
578
636
|
}
|
|
@@ -618,11 +676,10 @@ const Chatbot = forwardRef<ChatbotRef, InternalChatbotProps>(
|
|
|
618
676
|
};
|
|
619
677
|
|
|
620
678
|
const requestAndroidMicPermission = useCallback(async () => {
|
|
621
|
-
Alert.alert(
|
|
622
|
-
"Microphone permission",
|
|
623
|
-
"This app uses your microphone for voice features in the chatbot."
|
|
624
|
-
);
|
|
625
679
|
try {
|
|
680
|
+
if (Platform.OS === "ios") {
|
|
681
|
+
return true;
|
|
682
|
+
}
|
|
626
683
|
// Check if already granted
|
|
627
684
|
const alreadyGranted = await PermissionsAndroid.check(
|
|
628
685
|
PermissionsAndroid.PERMISSIONS.RECORD_AUDIO
|
|
@@ -636,8 +693,7 @@ const Chatbot = forwardRef<ChatbotRef, InternalChatbotProps>(
|
|
|
636
693
|
PermissionsAndroid.PERMISSIONS.RECORD_AUDIO,
|
|
637
694
|
{
|
|
638
695
|
title: "Microphone permission",
|
|
639
|
-
message:
|
|
640
|
-
"This app uses your microphone for voice features in the chatbot.",
|
|
696
|
+
message: "This app uses your microphone for voice features.",
|
|
641
697
|
buttonPositive: "Allow",
|
|
642
698
|
buttonNegative: "Deny",
|
|
643
699
|
}
|
|
@@ -660,11 +716,6 @@ const Chatbot = forwardRef<ChatbotRef, InternalChatbotProps>(
|
|
|
660
716
|
}
|
|
661
717
|
}, []);
|
|
662
718
|
|
|
663
|
-
useEffect(() => {
|
|
664
|
-
// Fire and forget: we just want the OS dialog to show early
|
|
665
|
-
requestAndroidMicPermission();
|
|
666
|
-
}, [requestAndroidMicPermission]);
|
|
667
|
-
|
|
668
719
|
const screenDimensions = getScreenDimensions();
|
|
669
720
|
|
|
670
721
|
useEffect(() => {
|
|
@@ -749,6 +800,7 @@ const Chatbot = forwardRef<ChatbotRef, InternalChatbotProps>(
|
|
|
749
800
|
>
|
|
750
801
|
<ErrorBoundary componentName="ChatbotWebView">
|
|
751
802
|
<WebView
|
|
803
|
+
mediaCapturePermissionGrantType={"grant"}
|
|
752
804
|
webviewDebuggingEnabled={true}
|
|
753
805
|
ref={webViewRef}
|
|
754
806
|
source={{
|
package/src/types/events.ts
CHANGED
|
@@ -8,6 +8,9 @@ export enum ChatbotEventType {
|
|
|
8
8
|
CHAT_INITIALIZED = "CHAT_INITIALIZED",
|
|
9
9
|
SESSION_REFRESHED = "SESSION_REFRESHED",
|
|
10
10
|
CHAT_INITIALIZATION_FAILED = "CHAT_INITIALIZATION_FAILED",
|
|
11
|
+
REQUEST_MIC_PERMISSION = "REQUEST_MIC_PERMISSION",
|
|
12
|
+
MIC_PERMISSION_GRANTED = "MIC_PERMISSION_GRANTED",
|
|
13
|
+
MIC_PERMISSION_DENIED = "MIC_PERMISSION_DENIED",
|
|
11
14
|
}
|
|
12
15
|
|
|
13
16
|
export enum InternalEventType {
|
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
// This file is auto-generated. Do not modify it manually.
|
|
2
|
-
export const SDK_VERSION = '2.0.
|
|
2
|
+
export const SDK_VERSION = '2.0.32-staging.4';
|