genassist-chat-react 1.0.8 → 1.0.9
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/components/ChatMessage.d.ts +2 -8
- package/dist/components/ChatMessage.js +6 -60
- package/dist/components/GenAgentChat.js +26 -12
- package/dist/components/GenAgentConfigPanel.d.ts +24 -0
- package/dist/components/GenAgentConfigPanel.js +360 -0
- package/dist/components/Spinner.d.ts +7 -0
- package/dist/components/Spinner.js +8 -0
- package/dist/components/VoiceInput.js +6 -9
- package/dist/hooks/useChat.js +47 -20
- package/dist/index.d.ts +2 -0
- package/dist/index.js +2 -1
- package/dist/services/chatService.d.ts +3 -1
- package/dist/services/chatService.js +19 -10
- package/dist/types/index.d.ts +13 -8
- package/dist/types/index.js +1 -1
- package/dist/utils/fileIcons.d.ts +4 -0
- package/dist/utils/fileIcons.js +15 -0
- package/dist/utils/time.d.ts +4 -0
- package/dist/utils/time.js +36 -0
- package/package.json +1 -1
package/dist/types/index.d.ts
CHANGED
|
@@ -14,6 +14,18 @@ export interface ChatMessage {
|
|
|
14
14
|
message_id?: string;
|
|
15
15
|
feedback?: MessageFeedback[];
|
|
16
16
|
}
|
|
17
|
+
export interface ChatTheme {
|
|
18
|
+
primaryColor: string;
|
|
19
|
+
secondaryColor: string;
|
|
20
|
+
backgroundColor: string;
|
|
21
|
+
textColor: string;
|
|
22
|
+
fontFamily: string;
|
|
23
|
+
fontSize: string;
|
|
24
|
+
}
|
|
25
|
+
export interface ChatSettingsConfig {
|
|
26
|
+
name: string;
|
|
27
|
+
description: string;
|
|
28
|
+
}
|
|
17
29
|
export interface Attachment {
|
|
18
30
|
name: string;
|
|
19
31
|
type: string;
|
|
@@ -50,14 +62,7 @@ export interface GenAgentChatProps {
|
|
|
50
62
|
onError?: (error: Error) => void;
|
|
51
63
|
onTakeover?: () => void;
|
|
52
64
|
onFinalize?: () => void;
|
|
53
|
-
theme?:
|
|
54
|
-
primaryColor?: string;
|
|
55
|
-
secondaryColor?: string;
|
|
56
|
-
fontFamily?: string;
|
|
57
|
-
fontSize?: string;
|
|
58
|
-
backgroundColor?: string;
|
|
59
|
-
textColor?: string;
|
|
60
|
-
};
|
|
65
|
+
theme?: Partial<ChatTheme>;
|
|
61
66
|
headerTitle?: string;
|
|
62
67
|
placeholder?: string;
|
|
63
68
|
mode?: "embedded" | "floating";
|
package/dist/types/index.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
export {};
|
|
2
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvdHlwZXMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsInNvdXJjZXNDb250ZW50IjpbIi8vIENoYXQgbWVzc2FnZSB0eXBlc1xuZXhwb3J0IGludGVyZmFjZSBNZXNzYWdlRmVlZGJhY2sge1xuICBmZWVkYmFjazogXCJnb29kXCIgfCBcImJhZFwiO1xuICBmZWVkYmFja190aW1lc3RhbXA/OiBzdHJpbmc7XG4gIGZlZWRiYWNrX3VzZXJfaWQ/OiBzdHJpbmc7XG4gIGZlZWRiYWNrX21lc3NhZ2U/
|
|
2
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvdHlwZXMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsInNvdXJjZXNDb250ZW50IjpbIi8vIENoYXQgbWVzc2FnZSB0eXBlc1xuZXhwb3J0IGludGVyZmFjZSBNZXNzYWdlRmVlZGJhY2sge1xuICBmZWVkYmFjazogXCJnb29kXCIgfCBcImJhZFwiO1xuICBmZWVkYmFja190aW1lc3RhbXA/OiBzdHJpbmc7XG4gIGZlZWRiYWNrX3VzZXJfaWQ/OiBzdHJpbmc7XG4gIGZlZWRiYWNrX21lc3NhZ2U/OiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQ2hhdE1lc3NhZ2Uge1xuICBjcmVhdGVfdGltZTogbnVtYmVyO1xuICBzdGFydF90aW1lOiBudW1iZXI7XG4gIGVuZF90aW1lOiBudW1iZXI7XG4gIHNwZWFrZXI6IFwiY3VzdG9tZXJcIiB8IFwiYWdlbnRcIiB8IFwic3BlY2lhbFwiO1xuICB0ZXh0OiBzdHJpbmc7XG4gIGF0dGFjaG1lbnRzPzogQXR0YWNobWVudFtdO1xuICAvLyBPcHRpb25hbCBtZXRhZGF0YVxuICBtZXNzYWdlX2lkPzogc3RyaW5nO1xuICBmZWVkYmFjaz86IE1lc3NhZ2VGZWVkYmFja1tdO1xufVxuXG4vLyBUaGVtZSBhbmQgc2V0dGluZ3MgdHlwZXNcbmV4cG9ydCBpbnRlcmZhY2UgQ2hhdFRoZW1lIHtcbiAgcHJpbWFyeUNvbG9yOiBzdHJpbmc7XG4gIHNlY29uZGFyeUNvbG9yOiBzdHJpbmc7XG4gIGJhY2tncm91bmRDb2xvcjogc3RyaW5nO1xuICB0ZXh0Q29sb3I6IHN0cmluZztcbiAgZm9udEZhbWlseTogc3RyaW5nO1xuICBmb250U2l6ZTogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIENoYXRTZXR0aW5nc0NvbmZpZyB7XG4gIG5hbWU6IHN0cmluZztcbiAgZGVzY3JpcHRpb246IHN0cmluZztcbn1cblxuLy8gQXR0YWNobWVudCB0eXBlXG5leHBvcnQgaW50ZXJmYWNlIEF0dGFjaG1lbnQge1xuICBuYW1lOiBzdHJpbmc7XG4gIHR5cGU6IHN0cmluZztcbiAgc2l6ZTogbnVtYmVyO1xuICB1cmw6IHN0cmluZztcbn1cblxuLy8gQVBJIFJlc3BvbnNlIHR5cGVzXG5leHBvcnQgaW50ZXJmYWNlIFN0YXJ0Q29udmVyc2F0aW9uUmVzcG9uc2Uge1xuICBtZXNzYWdlOiBzdHJpbmc7XG4gIGNvbnZlcnNhdGlvbl9pZDogc3RyaW5nO1xuICBhZ2VudF93ZWxjb21lX21lc3NhZ2U/OiBzdHJpbmc7XG4gIGFnZW50X3Bvc3NpYmxlX3F1ZXJpZXM/OiBzdHJpbmdbXTtcbiAgYWdlbnRfd2VsY29tZV90aXRsZT86IHN0cmluZztcbiAgYWdlbnRfd2VsY29tZV9pbWFnZV91cmw/OiBzdHJpbmc7XG4gIGFnZW50X2lkPzogc3RyaW5nO1xuICBhZ2VudF90aGlua2luZ19waHJhc2VzPzogc3RyaW5nW107XG4gIGFnZW50X3RoaW5raW5nX3BocmFzZV9kZWxheT86IG51bWJlcjsgLy8gc2Vjb25kc1xuICBjcmVhdGVfdGltZT86IG51bWJlcjtcbn1cblxuLy8gQWdlbnQgd2VsY29tZS9jb25maWcgaW5mb1xuZXhwb3J0IGludGVyZmFjZSBBZ2VudFdlbGNvbWVEYXRhIHtcbiAgdGl0bGU/OiBzdHJpbmcgfCBudWxsO1xuICBtZXNzYWdlPzogc3RyaW5nIHwgbnVsbDtcbiAgaW1hZ2VVcmw/OiBzdHJpbmcgfCBudWxsO1xuICBwb3NzaWJsZVF1ZXJpZXM/OiBzdHJpbmdbXTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBBZ2VudFRoaW5raW5nQ29uZmlnIHtcbiAgcGhyYXNlczogc3RyaW5nW107XG4gIGRlbGF5TXM6IG51bWJlcjsgLy8gcm90YXRpb24gZGVsYXkgaW4gbXNcbn1cblxuLy8gUHJvcHMgZm9yIHRoZSBHZW5BZ2VudENoYXQgY29tcG9uZW50XG5leHBvcnQgaW50ZXJmYWNlIEdlbkFnZW50Q2hhdFByb3BzIHtcbiAgYmFzZVVybDogc3RyaW5nO1xuICBhcGlLZXk6IHN0cmluZztcbiAgdGVuYW50OiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gIG1ldGFkYXRhPzogUmVjb3JkPHN0cmluZywgYW55PjsgLy8gRm9yIHBhc3NpbmcgdXNlciBpbmZvcm1hdGlvbiBvciBvdGhlciBtZXRhZGF0YVxuICBvbkVycm9yPzogKGVycm9yOiBFcnJvcikgPT4gdm9pZDtcbiAgb25UYWtlb3Zlcj86ICgpID0+IHZvaWQ7XG4gIG9uRmluYWxpemU/OiAoKSA9PiB2b2lkO1xuICB0aGVtZT86IFBhcnRpYWw8Q2hhdFRoZW1lPjtcbiAgaGVhZGVyVGl0bGU/OiBzdHJpbmc7XG4gIHBsYWNlaG9sZGVyPzogc3RyaW5nO1xuICBtb2RlPzogXCJlbWJlZGRlZFwiIHwgXCJmbG9hdGluZ1wiO1xuICBmbG9hdGluZ0NvbmZpZz86IHtcbiAgICBwb3NpdGlvbj86IFwiYm90dG9tLXJpZ2h0XCIgfCBcImJvdHRvbS1sZWZ0XCIgfCBcInRvcC1yaWdodFwiIHwgXCJ0b3AtbGVmdFwiO1xuICAgIG9mZnNldD86IHsgeD86IG51bWJlcjsgeT86IG51bWJlciB9O1xuICAgIHRvZ2dsZUJ1dHRvbkljb24/OiBSZWFjdC5SZWFjdEVsZW1lbnQ7XG4gICAgY2xvc2VCdXR0b25JY29uPzogUmVhY3QuUmVhY3RFbGVtZW50O1xuICB9O1xufVxuIl19
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
|
+
import { FileText, FileJson, FileImage } from 'lucide-react';
|
|
3
|
+
/**
|
|
4
|
+
* Return an icon for a given MIME type.
|
|
5
|
+
*/
|
|
6
|
+
export function getFileIcon(type) {
|
|
7
|
+
if (type.startsWith('image/'))
|
|
8
|
+
return _jsx(FileImage, { size: 24, color: "#6D28D9" });
|
|
9
|
+
if (type === 'application/pdf')
|
|
10
|
+
return _jsx(FileText, { size: 24, color: "#B91C1C" });
|
|
11
|
+
if (type === 'application/json')
|
|
12
|
+
return _jsx(FileJson, { size: 24, color: "#1D4ED8" });
|
|
13
|
+
return _jsx(FileText, { size: 24, color: "#4B5563" });
|
|
14
|
+
}
|
|
15
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmlsZUljb25zLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3V0aWxzL2ZpbGVJY29ucy50c3giXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUNBLE9BQU8sRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFNBQVMsRUFBRSxNQUFNLGNBQWMsQ0FBQztBQUU3RDs7R0FFRztBQUNILE1BQU0sVUFBVSxXQUFXLENBQUMsSUFBWTtJQUN0QyxJQUFJLElBQUksQ0FBQyxVQUFVLENBQUMsUUFBUSxDQUFDO1FBQUUsT0FBTyxLQUFDLFNBQVMsSUFBQyxJQUFJLEVBQUUsRUFBRSxFQUFFLEtBQUssRUFBQyxTQUFTLEdBQUcsQ0FBQztJQUM5RSxJQUFJLElBQUksS0FBSyxpQkFBaUI7UUFBRSxPQUFPLEtBQUMsUUFBUSxJQUFDLElBQUksRUFBRSxFQUFFLEVBQUUsS0FBSyxFQUFDLFNBQVMsR0FBRyxDQUFDO0lBQzlFLElBQUksSUFBSSxLQUFLLGtCQUFrQjtRQUFFLE9BQU8sS0FBQyxRQUFRLElBQUMsSUFBSSxFQUFFLEVBQUUsRUFBRSxLQUFLLEVBQUMsU0FBUyxHQUFHLENBQUM7SUFDL0UsT0FBTyxLQUFDLFFBQVEsSUFBQyxJQUFJLEVBQUUsRUFBRSxFQUFFLEtBQUssRUFBQyxTQUFTLEdBQUcsQ0FBQztBQUNoRCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IEZpbGVUZXh0LCBGaWxlSnNvbiwgRmlsZUltYWdlIH0gZnJvbSAnbHVjaWRlLXJlYWN0JztcblxuLyoqXG4gKiBSZXR1cm4gYW4gaWNvbiBmb3IgYSBnaXZlbiBNSU1FIHR5cGUuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRGaWxlSWNvbih0eXBlOiBzdHJpbmcpOiBKU1guRWxlbWVudCB7XG4gIGlmICh0eXBlLnN0YXJ0c1dpdGgoJ2ltYWdlLycpKSByZXR1cm4gPEZpbGVJbWFnZSBzaXplPXsyNH0gY29sb3I9XCIjNkQyOEQ5XCIgLz47XG4gIGlmICh0eXBlID09PSAnYXBwbGljYXRpb24vcGRmJykgcmV0dXJuIDxGaWxlVGV4dCBzaXplPXsyNH0gY29sb3I9XCIjQjkxQzFDXCIgLz47XG4gIGlmICh0eXBlID09PSAnYXBwbGljYXRpb24vanNvbicpIHJldHVybiA8RmlsZUpzb24gc2l6ZT17MjR9IGNvbG9yPVwiIzFENEVEOFwiIC8+O1xuICByZXR1cm4gPEZpbGVUZXh0IHNpemU9ezI0fSBjb2xvcj1cIiM0QjU1NjNcIiAvPjtcbn1cblxuIl19
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Formats a Unix timestamp (seconds or milliseconds) into a user-friendly string.
|
|
3
|
+
*/
|
|
4
|
+
export function formatTimestamp(timestamp) {
|
|
5
|
+
try {
|
|
6
|
+
if (!timestamp || isNaN(Number(timestamp))) {
|
|
7
|
+
return 'Just now';
|
|
8
|
+
}
|
|
9
|
+
var ts = Number(timestamp);
|
|
10
|
+
var timestampMs = ts < 1000000000000 ? ts * 1000 : ts;
|
|
11
|
+
var date = new Date(timestampMs);
|
|
12
|
+
if (isNaN(date.getTime())) {
|
|
13
|
+
return 'Just now';
|
|
14
|
+
}
|
|
15
|
+
var today = new Date();
|
|
16
|
+
var yesterday = new Date(today);
|
|
17
|
+
yesterday.setDate(yesterday.getDate() - 1);
|
|
18
|
+
var timeOptions = { hour: 'numeric', minute: '2-digit', hour12: true };
|
|
19
|
+
var timeStr = date.toLocaleTimeString(undefined, timeOptions);
|
|
20
|
+
if (date.toDateString() === today.toDateString()) {
|
|
21
|
+
return "Today, ".concat(timeStr);
|
|
22
|
+
}
|
|
23
|
+
else if (date.toDateString() === yesterday.toDateString()) {
|
|
24
|
+
return "Yesterday, ".concat(timeStr);
|
|
25
|
+
}
|
|
26
|
+
else {
|
|
27
|
+
var dateOptions = { month: 'short', day: 'numeric', year: 'numeric' };
|
|
28
|
+
var dateStr = date.toLocaleDateString(undefined, dateOptions);
|
|
29
|
+
return "".concat(dateStr, ", ").concat(timeStr);
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
catch (_a) {
|
|
33
|
+
return 'Just now';
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGltZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy91dGlscy90aW1lLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOztHQUVHO0FBQ0gsTUFBTSxVQUFVLGVBQWUsQ0FBQyxTQUFvQztJQUNsRSxJQUFJLENBQUM7UUFDSCxJQUFJLENBQUMsU0FBUyxJQUFJLEtBQUssQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLENBQUMsRUFBRSxDQUFDO1lBQzNDLE9BQU8sVUFBVSxDQUFDO1FBQ3BCLENBQUM7UUFFRCxJQUFNLEVBQUUsR0FBRyxNQUFNLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDN0IsSUFBTSxXQUFXLEdBQUcsRUFBRSxHQUFHLGFBQWEsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO1FBQ3hELElBQU0sSUFBSSxHQUFHLElBQUksSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDO1FBQ25DLElBQUksS0FBSyxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQyxFQUFFLENBQUM7WUFDMUIsT0FBTyxVQUFVLENBQUM7UUFDcEIsQ0FBQztRQUVELElBQU0sS0FBSyxHQUFHLElBQUksSUFBSSxFQUFFLENBQUM7UUFDekIsSUFBTSxTQUFTLEdBQUcsSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDbEMsU0FBUyxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsT0FBTyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUM7UUFFM0MsSUFBTSxXQUFXLEdBQStCLEVBQUUsSUFBSSxFQUFFLFNBQVMsRUFBRSxNQUFNLEVBQUUsU0FBUyxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsQ0FBQztRQUNyRyxJQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsa0JBQWtCLENBQUMsU0FBUyxFQUFFLFdBQVcsQ0FBQyxDQUFDO1FBRWhFLElBQUksSUFBSSxDQUFDLFlBQVksRUFBRSxLQUFLLEtBQUssQ0FBQyxZQUFZLEVBQUUsRUFBRSxDQUFDO1lBQ2pELE9BQU8saUJBQVUsT0FBTyxDQUFFLENBQUM7UUFDN0IsQ0FBQzthQUFNLElBQUksSUFBSSxDQUFDLFlBQVksRUFBRSxLQUFLLFNBQVMsQ0FBQyxZQUFZLEVBQUUsRUFBRSxDQUFDO1lBQzVELE9BQU8scUJBQWMsT0FBTyxDQUFFLENBQUM7UUFDakMsQ0FBQzthQUFNLENBQUM7WUFDTixJQUFNLFdBQVcsR0FBK0IsRUFBRSxLQUFLLEVBQUUsT0FBTyxFQUFFLEdBQUcsRUFBRSxTQUFTLEVBQUUsSUFBSSxFQUFFLFNBQVMsRUFBRSxDQUFDO1lBQ3BHLElBQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxTQUFTLEVBQUUsV0FBVyxDQUFDLENBQUM7WUFDaEUsT0FBTyxVQUFHLE9BQU8sZUFBSyxPQUFPLENBQUUsQ0FBQztRQUNsQyxDQUFDO0lBQ0gsQ0FBQztJQUFDLFdBQU0sQ0FBQztRQUNQLE9BQU8sVUFBVSxDQUFDO0lBQ3BCLENBQUM7QUFDSCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBGb3JtYXRzIGEgVW5peCB0aW1lc3RhbXAgKHNlY29uZHMgb3IgbWlsbGlzZWNvbmRzKSBpbnRvIGEgdXNlci1mcmllbmRseSBzdHJpbmcuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBmb3JtYXRUaW1lc3RhbXAodGltZXN0YW1wOiBudW1iZXIgfCB1bmRlZmluZWQgfCBudWxsKTogc3RyaW5nIHtcbiAgdHJ5IHtcbiAgICBpZiAoIXRpbWVzdGFtcCB8fCBpc05hTihOdW1iZXIodGltZXN0YW1wKSkpIHtcbiAgICAgIHJldHVybiAnSnVzdCBub3cnO1xuICAgIH1cblxuICAgIGNvbnN0IHRzID0gTnVtYmVyKHRpbWVzdGFtcCk7XG4gICAgY29uc3QgdGltZXN0YW1wTXMgPSB0cyA8IDEwMDAwMDAwMDAwMDAgPyB0cyAqIDEwMDAgOiB0cztcbiAgICBjb25zdCBkYXRlID0gbmV3IERhdGUodGltZXN0YW1wTXMpO1xuICAgIGlmIChpc05hTihkYXRlLmdldFRpbWUoKSkpIHtcbiAgICAgIHJldHVybiAnSnVzdCBub3cnO1xuICAgIH1cblxuICAgIGNvbnN0IHRvZGF5ID0gbmV3IERhdGUoKTtcbiAgICBjb25zdCB5ZXN0ZXJkYXkgPSBuZXcgRGF0ZSh0b2RheSk7XG4gICAgeWVzdGVyZGF5LnNldERhdGUoeWVzdGVyZGF5LmdldERhdGUoKSAtIDEpO1xuXG4gICAgY29uc3QgdGltZU9wdGlvbnM6IEludGwuRGF0ZVRpbWVGb3JtYXRPcHRpb25zID0geyBob3VyOiAnbnVtZXJpYycsIG1pbnV0ZTogJzItZGlnaXQnLCBob3VyMTI6IHRydWUgfTtcbiAgICBjb25zdCB0aW1lU3RyID0gZGF0ZS50b0xvY2FsZVRpbWVTdHJpbmcodW5kZWZpbmVkLCB0aW1lT3B0aW9ucyk7XG5cbiAgICBpZiAoZGF0ZS50b0RhdGVTdHJpbmcoKSA9PT0gdG9kYXkudG9EYXRlU3RyaW5nKCkpIHtcbiAgICAgIHJldHVybiBgVG9kYXksICR7dGltZVN0cn1gO1xuICAgIH0gZWxzZSBpZiAoZGF0ZS50b0RhdGVTdHJpbmcoKSA9PT0geWVzdGVyZGF5LnRvRGF0ZVN0cmluZygpKSB7XG4gICAgICByZXR1cm4gYFllc3RlcmRheSwgJHt0aW1lU3RyfWA7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IGRhdGVPcHRpb25zOiBJbnRsLkRhdGVUaW1lRm9ybWF0T3B0aW9ucyA9IHsgbW9udGg6ICdzaG9ydCcsIGRheTogJ251bWVyaWMnLCB5ZWFyOiAnbnVtZXJpYycgfTtcbiAgICAgIGNvbnN0IGRhdGVTdHIgPSBkYXRlLnRvTG9jYWxlRGF0ZVN0cmluZyh1bmRlZmluZWQsIGRhdGVPcHRpb25zKTtcbiAgICAgIHJldHVybiBgJHtkYXRlU3RyfSwgJHt0aW1lU3RyfWA7XG4gICAgfVxuICB9IGNhdGNoIHtcbiAgICByZXR1cm4gJ0p1c3Qgbm93JztcbiAgfVxufVxuXG4iXX0=
|