genassist-chat-react 1.0.37 → 1.0.38
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/README.md +26 -4
- package/dist/components/AudioPlayer.d.ts +11 -0
- package/dist/components/AudioPlayer.js +199 -0
- package/dist/components/ChatMessage.d.ts +3 -0
- package/dist/components/ChatMessage.js +5 -4
- package/dist/components/GenAgentChat.js +147 -838
- package/dist/components/VoiceInput.d.ts +1 -3
- package/dist/components/VoiceInput.js +262 -48
- package/dist/hooks/useAudioRecorder.d.ts +8 -0
- package/dist/hooks/useAudioRecorder.js +124 -0
- package/dist/hooks/useChat.d.ts +1 -0
- package/dist/hooks/useChat.js +45 -9
- package/dist/hooks/useFileAttachments.d.ts +16 -0
- package/dist/hooks/useFileAttachments.js +183 -0
- package/dist/hooks/useScrollManagement.d.ts +15 -0
- package/dist/hooks/useScrollManagement.js +124 -0
- package/dist/hooks/useThinkingAnimation.d.ts +12 -0
- package/dist/hooks/useThinkingAnimation.js +53 -0
- package/dist/hooks/useViewportManager.d.ts +20 -0
- package/dist/hooks/useViewportManager.js +100 -0
- package/dist/services/chatService.d.ts +1 -0
- package/dist/services/chatService.js +67 -12
- package/dist/styles/genAgentChatStyles.d.ts +80 -0
- package/dist/styles/genAgentChatStyles.js +427 -0
- package/dist/types/index.d.ts +2 -0
- package/dist/types/index.js +1 -1
- package/package.json +6 -2
|
@@ -1,9 +1,7 @@
|
|
|
1
1
|
import React from 'react';
|
|
2
2
|
interface VoiceInputProps {
|
|
3
|
-
|
|
3
|
+
onAudioReady: (blob: Blob, format: string) => void;
|
|
4
4
|
onError: (error: Error) => void;
|
|
5
|
-
baseUrl: string;
|
|
6
|
-
apiKey: string;
|
|
7
5
|
theme?: {
|
|
8
6
|
primaryColor?: string;
|
|
9
7
|
backgroundColor?: string;
|
|
@@ -1,52 +1,266 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
1
|
+
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
2
|
+
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
3
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
|
4
|
+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
5
|
+
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
6
|
+
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
7
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
8
|
+
});
|
|
9
|
+
};
|
|
10
|
+
var __generator = (this && this.__generator) || function (thisArg, body) {
|
|
11
|
+
var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g = Object.create((typeof Iterator === "function" ? Iterator : Object).prototype);
|
|
12
|
+
return g.next = verb(0), g["throw"] = verb(1), g["return"] = verb(2), typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
|
|
13
|
+
function verb(n) { return function (v) { return step([n, v]); }; }
|
|
14
|
+
function step(op) {
|
|
15
|
+
if (f) throw new TypeError("Generator is already executing.");
|
|
16
|
+
while (g && (g = 0, op[0] && (_ = 0)), _) try {
|
|
17
|
+
if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
|
|
18
|
+
if (y = 0, t) op = [op[0] & 2, t.value];
|
|
19
|
+
switch (op[0]) {
|
|
20
|
+
case 0: case 1: t = op; break;
|
|
21
|
+
case 4: _.label++; return { value: op[1], done: false };
|
|
22
|
+
case 5: _.label++; y = op[1]; op = [0]; continue;
|
|
23
|
+
case 7: op = _.ops.pop(); _.trys.pop(); continue;
|
|
24
|
+
default:
|
|
25
|
+
if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
|
|
26
|
+
if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
|
|
27
|
+
if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
|
|
28
|
+
if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
|
|
29
|
+
if (t[2]) _.ops.pop();
|
|
30
|
+
_.trys.pop(); continue;
|
|
31
|
+
}
|
|
32
|
+
op = body.call(thisArg, _);
|
|
33
|
+
} catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
|
|
34
|
+
if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
|
|
35
|
+
}
|
|
36
|
+
};
|
|
37
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
38
|
+
import { useState, useRef, useCallback, useEffect } from 'react';
|
|
39
|
+
import { Mic, Square, Send, Trash2 } from 'lucide-react';
|
|
40
|
+
import { useAudioRecorder } from '../hooks/useAudioRecorder';
|
|
41
|
+
import { AudioPlayer } from './AudioPlayer';
|
|
42
|
+
var BAR_COUNT = 32;
|
|
43
|
+
var BAR_HEIGHTS = Array.from({ length: BAR_COUNT }, function (_, i) {
|
|
44
|
+
var center = BAR_COUNT / 2;
|
|
45
|
+
var dist = Math.abs(i - center) / center;
|
|
46
|
+
return 0.3 + 0.7 * (1 - dist * dist);
|
|
47
|
+
});
|
|
5
48
|
export var VoiceInput = function (_a) {
|
|
6
|
-
var
|
|
7
|
-
var _c =
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
var
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
var
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
49
|
+
var onAudioReady = _a.onAudioReady, onError = _a.onError, theme = _a.theme, _b = _a.disabled, disabled = _b === void 0 ? false : _b;
|
|
50
|
+
var _c = useState('idle'), voiceState = _c[0], setVoiceState = _c[1];
|
|
51
|
+
var _d = useState(null), pendingBlob = _d[0], setPendingBlob = _d[1];
|
|
52
|
+
var _e = useState('webm'), pendingFormat = _e[0], setPendingFormat = _e[1];
|
|
53
|
+
var _f = useState(null), blobUrl = _f[0], setBlobUrl = _f[1];
|
|
54
|
+
var _g = useState(0), recordingTime = _g[0], setRecordingTime = _g[1];
|
|
55
|
+
var timerRef = useRef(null);
|
|
56
|
+
var handleRecordingDone = useCallback(function (blob, format) {
|
|
57
|
+
setPendingBlob(blob);
|
|
58
|
+
setPendingFormat(format);
|
|
59
|
+
var url = URL.createObjectURL(blob);
|
|
60
|
+
setBlobUrl(url);
|
|
61
|
+
setVoiceState('preview');
|
|
62
|
+
if (timerRef.current) {
|
|
63
|
+
clearInterval(timerRef.current);
|
|
64
|
+
timerRef.current = null;
|
|
65
|
+
}
|
|
66
|
+
}, []);
|
|
67
|
+
var _h = useAudioRecorder(handleRecordingDone, onError), isRecording = _h.isRecording, startRecording = _h.startRecording, stopRecording = _h.stopRecording, cancelRecording = _h.cancelRecording;
|
|
68
|
+
var handleMicClick = useCallback(function () { return __awaiter(void 0, void 0, void 0, function () {
|
|
69
|
+
return __generator(this, function (_a) {
|
|
70
|
+
switch (_a.label) {
|
|
71
|
+
case 0:
|
|
72
|
+
if (disabled)
|
|
73
|
+
return [2 /*return*/];
|
|
74
|
+
setRecordingTime(0);
|
|
75
|
+
return [4 /*yield*/, startRecording()];
|
|
76
|
+
case 1:
|
|
77
|
+
_a.sent();
|
|
78
|
+
setVoiceState('recording');
|
|
79
|
+
timerRef.current = window.setInterval(function () { return setRecordingTime(function (t) { return t + 1; }); }, 1000);
|
|
80
|
+
return [2 /*return*/];
|
|
81
|
+
}
|
|
82
|
+
});
|
|
83
|
+
}); }, [disabled, startRecording]);
|
|
84
|
+
var handleStop = useCallback(function () {
|
|
85
|
+
stopRecording();
|
|
86
|
+
}, [stopRecording]);
|
|
87
|
+
var handleSend = useCallback(function () {
|
|
88
|
+
if (pendingBlob) {
|
|
89
|
+
onAudioReady(pendingBlob, pendingFormat);
|
|
90
|
+
}
|
|
91
|
+
cleanup();
|
|
92
|
+
}, [pendingBlob, pendingFormat, onAudioReady]);
|
|
93
|
+
var handleDiscard = useCallback(function () {
|
|
94
|
+
cleanup();
|
|
95
|
+
}, []);
|
|
96
|
+
var cleanup = function () {
|
|
97
|
+
if (blobUrl)
|
|
98
|
+
URL.revokeObjectURL(blobUrl);
|
|
99
|
+
setBlobUrl(null);
|
|
100
|
+
setPendingBlob(null);
|
|
101
|
+
setVoiceState('idle');
|
|
102
|
+
setRecordingTime(0);
|
|
103
|
+
if (timerRef.current) {
|
|
104
|
+
clearInterval(timerRef.current);
|
|
105
|
+
timerRef.current = null;
|
|
106
|
+
}
|
|
29
107
|
};
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
cursor: isDisabled ? 'not-allowed' : 'pointer',
|
|
44
|
-
outline: 'none',
|
|
45
|
-
transition: 'all 0.2s ease',
|
|
46
|
-
flexShrink: 0,
|
|
47
|
-
boxShadow: '0 1px 3px rgba(0, 0, 0, 0.08)',
|
|
48
|
-
opacity: isDisabled ? 0.6 : 1,
|
|
108
|
+
useEffect(function () {
|
|
109
|
+
return function () {
|
|
110
|
+
if (timerRef.current)
|
|
111
|
+
clearInterval(timerRef.current);
|
|
112
|
+
if (blobUrl)
|
|
113
|
+
URL.revokeObjectURL(blobUrl);
|
|
114
|
+
};
|
|
115
|
+
}, []);
|
|
116
|
+
var primaryColor = (theme === null || theme === void 0 ? void 0 : theme.primaryColor) || '#4f46e5';
|
|
117
|
+
var formatTime = function (s) {
|
|
118
|
+
var m = Math.floor(s / 60);
|
|
119
|
+
var sec = s % 60;
|
|
120
|
+
return "".concat(m, ":").concat(sec.toString().padStart(2, '0'));
|
|
49
121
|
};
|
|
50
|
-
|
|
122
|
+
if (voiceState === 'idle') {
|
|
123
|
+
return (_jsx("button", { type: "button", onClick: handleMicClick, disabled: disabled, style: {
|
|
124
|
+
position: 'absolute',
|
|
125
|
+
right: 6,
|
|
126
|
+
top: '50%',
|
|
127
|
+
transform: 'translateY(-50%)',
|
|
128
|
+
backgroundColor: primaryColor,
|
|
129
|
+
color: '#ffffff',
|
|
130
|
+
border: 'none',
|
|
131
|
+
borderRadius: '50%',
|
|
132
|
+
width: 36,
|
|
133
|
+
height: 36,
|
|
134
|
+
display: 'flex',
|
|
135
|
+
alignItems: 'center',
|
|
136
|
+
justifyContent: 'center',
|
|
137
|
+
cursor: disabled ? 'not-allowed' : 'pointer',
|
|
138
|
+
flexShrink: 0,
|
|
139
|
+
boxShadow: '0 1px 3px rgba(0, 0, 0, 0.12)',
|
|
140
|
+
opacity: disabled ? 0.5 : 1,
|
|
141
|
+
zIndex: 5,
|
|
142
|
+
transition: 'opacity 0.15s ease',
|
|
143
|
+
}, title: "Start Recording", children: _jsx(Mic, { size: 18, color: "#ffffff" }) }));
|
|
144
|
+
}
|
|
145
|
+
if (voiceState === 'recording') {
|
|
146
|
+
return (_jsxs("div", { style: {
|
|
147
|
+
position: 'absolute',
|
|
148
|
+
inset: 0,
|
|
149
|
+
display: 'flex',
|
|
150
|
+
alignItems: 'center',
|
|
151
|
+
gap: 0,
|
|
152
|
+
padding: '0 6px',
|
|
153
|
+
backgroundColor: '#fff',
|
|
154
|
+
borderRadius: 24,
|
|
155
|
+
zIndex: 10,
|
|
156
|
+
overflow: 'hidden',
|
|
157
|
+
}, children: [_jsx("button", { type: "button", onClick: function () { cancelRecording(); cleanup(); }, style: {
|
|
158
|
+
background: 'none',
|
|
159
|
+
border: 'none',
|
|
160
|
+
cursor: 'pointer',
|
|
161
|
+
padding: 6,
|
|
162
|
+
display: 'flex',
|
|
163
|
+
alignItems: 'center',
|
|
164
|
+
justifyContent: 'center',
|
|
165
|
+
color: '#9ca3af',
|
|
166
|
+
borderRadius: '50%',
|
|
167
|
+
flexShrink: 0,
|
|
168
|
+
transition: 'color 0.15s ease',
|
|
169
|
+
}, title: "Cancel", onMouseEnter: function (e) { return (e.currentTarget.style.color = '#6b7280'); }, onMouseLeave: function (e) { return (e.currentTarget.style.color = '#9ca3af'); }, children: _jsx(Trash2, { size: 18 }) }), _jsxs("div", { style: {
|
|
170
|
+
display: 'flex',
|
|
171
|
+
alignItems: 'center',
|
|
172
|
+
gap: 6,
|
|
173
|
+
padding: '0 8px 0 4px',
|
|
174
|
+
flexShrink: 0,
|
|
175
|
+
}, children: [_jsx("div", { style: {
|
|
176
|
+
width: 8,
|
|
177
|
+
height: 8,
|
|
178
|
+
borderRadius: '50%',
|
|
179
|
+
backgroundColor: '#ef4444',
|
|
180
|
+
animation: 'ga-rec-pulse 1.5s ease-in-out infinite',
|
|
181
|
+
flexShrink: 0,
|
|
182
|
+
} }), _jsx("span", { style: {
|
|
183
|
+
fontSize: 13,
|
|
184
|
+
fontWeight: 600,
|
|
185
|
+
color: '#374151',
|
|
186
|
+
fontVariantNumeric: 'tabular-nums',
|
|
187
|
+
minWidth: 32,
|
|
188
|
+
fontFamily: 'inherit',
|
|
189
|
+
}, children: formatTime(recordingTime) })] }), _jsx("div", { style: {
|
|
190
|
+
flex: 1,
|
|
191
|
+
display: 'flex',
|
|
192
|
+
alignItems: 'center',
|
|
193
|
+
justifyContent: 'center',
|
|
194
|
+
gap: 2,
|
|
195
|
+
height: '100%',
|
|
196
|
+
padding: '0 4px',
|
|
197
|
+
overflow: 'hidden',
|
|
198
|
+
}, children: BAR_HEIGHTS.map(function (scale, i) { return (_jsx("div", { style: {
|
|
199
|
+
width: 2.5,
|
|
200
|
+
borderRadius: 3,
|
|
201
|
+
backgroundColor: primaryColor,
|
|
202
|
+
opacity: 0.55 + 0.45 * scale,
|
|
203
|
+
animation: "ga-wave ".concat(0.6 + (i % 5) * 0.15, "s ease-in-out ").concat(i * 0.04, "s infinite alternate"),
|
|
204
|
+
minHeight: 3,
|
|
205
|
+
maxHeight: Math.round(scale * 26),
|
|
206
|
+
flexShrink: 0,
|
|
207
|
+
} }, i)); }) }), _jsx("button", { type: "button", onClick: handleStop, style: {
|
|
208
|
+
backgroundColor: '#ef4444',
|
|
209
|
+
color: '#fff',
|
|
210
|
+
border: 'none',
|
|
211
|
+
borderRadius: '50%',
|
|
212
|
+
width: 36,
|
|
213
|
+
height: 36,
|
|
214
|
+
display: 'flex',
|
|
215
|
+
alignItems: 'center',
|
|
216
|
+
justifyContent: 'center',
|
|
217
|
+
cursor: 'pointer',
|
|
218
|
+
flexShrink: 0,
|
|
219
|
+
boxShadow: '0 1px 4px rgba(239, 68, 68, 0.3)',
|
|
220
|
+
transition: 'box-shadow 0.15s ease',
|
|
221
|
+
}, title: "Stop Recording", onMouseEnter: function (e) { return (e.currentTarget.style.boxShadow = '0 2px 8px rgba(239, 68, 68, 0.4)'); }, onMouseLeave: function (e) { return (e.currentTarget.style.boxShadow = '0 1px 4px rgba(239, 68, 68, 0.3)'); }, children: _jsx(Square, { size: 12, fill: "#fff" }) }), _jsx("style", { children: "\n @keyframes ga-wave {\n 0% { height: 3px; }\n 100% { height: var(--ga-wave-h, 22px); }\n }\n @keyframes ga-rec-pulse {\n 0%, 100% { opacity: 1; }\n 50% { opacity: 0.3; }\n }\n " })] }));
|
|
222
|
+
}
|
|
223
|
+
return (_jsxs("div", { style: {
|
|
224
|
+
position: 'absolute',
|
|
225
|
+
inset: 0,
|
|
226
|
+
display: 'flex',
|
|
227
|
+
alignItems: 'center',
|
|
228
|
+
gap: 0,
|
|
229
|
+
padding: '0 6px',
|
|
230
|
+
backgroundColor: '#fff',
|
|
231
|
+
borderRadius: 24,
|
|
232
|
+
zIndex: 10,
|
|
233
|
+
overflow: 'hidden',
|
|
234
|
+
}, children: [_jsx("button", { type: "button", onClick: handleDiscard, style: {
|
|
235
|
+
background: 'none',
|
|
236
|
+
border: 'none',
|
|
237
|
+
cursor: 'pointer',
|
|
238
|
+
padding: 6,
|
|
239
|
+
display: 'flex',
|
|
240
|
+
alignItems: 'center',
|
|
241
|
+
justifyContent: 'center',
|
|
242
|
+
color: '#9ca3af',
|
|
243
|
+
borderRadius: '50%',
|
|
244
|
+
flexShrink: 0,
|
|
245
|
+
transition: 'color 0.15s ease',
|
|
246
|
+
}, title: "Discard", onMouseEnter: function (e) { return (e.currentTarget.style.color = '#ef4444'); }, onMouseLeave: function (e) { return (e.currentTarget.style.color = '#9ca3af'); }, children: _jsx(Trash2, { size: 18 }) }), _jsx("div", { style: {
|
|
247
|
+
flex: 1,
|
|
248
|
+
minWidth: 0,
|
|
249
|
+
padding: '0 4px',
|
|
250
|
+
}, children: blobUrl && _jsx(AudioPlayer, { blobUrl: blobUrl, primaryColor: primaryColor, compact: true }) }), _jsx("button", { type: "button", onClick: handleSend, style: {
|
|
251
|
+
backgroundColor: primaryColor,
|
|
252
|
+
color: '#fff',
|
|
253
|
+
border: 'none',
|
|
254
|
+
borderRadius: '50%',
|
|
255
|
+
width: 36,
|
|
256
|
+
height: 36,
|
|
257
|
+
display: 'flex',
|
|
258
|
+
alignItems: 'center',
|
|
259
|
+
justifyContent: 'center',
|
|
260
|
+
cursor: 'pointer',
|
|
261
|
+
flexShrink: 0,
|
|
262
|
+
boxShadow: "0 1px 4px ".concat(primaryColor, "44"),
|
|
263
|
+
transition: 'box-shadow 0.15s ease',
|
|
264
|
+
}, title: "Send", onMouseEnter: function (e) { return (e.currentTarget.style.boxShadow = "0 2px 8px ".concat(primaryColor, "55")); }, onMouseLeave: function (e) { return (e.currentTarget.style.boxShadow = "0 1px 4px ".concat(primaryColor, "44")); }, children: _jsx(Send, { size: 16 }) })] }));
|
|
51
265
|
};
|
|
52
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiVm9pY2VJbnB1dC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9jb21wb25lbnRzL1ZvaWNlSW5wdXQudHN4Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFDQSxPQUFPLEVBQUUsR0FBRyxFQUFFLE1BQU0sY0FBYyxDQUFDO0FBQ25DLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxXQUFXLENBQUM7QUFDcEMsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBZXZELE1BQU0sQ0FBQyxJQUFNLFVBQVUsR0FBOEIsVUFBQyxFQU9yRDtRQU5DLGVBQWUscUJBQUEsRUFDZixPQUFPLGFBQUEsRUFDUCxPQUFPLGFBQUEsRUFDUCxNQUFNLFlBQUEsRUFDTixLQUFLLFdBQUEsRUFDTCxnQkFBZ0IsRUFBaEIsUUFBUSxtQkFBRyxLQUFLLEtBQUE7SUFFVixJQUFBLEtBQThDLGFBQWEsQ0FBQztRQUNoRSxPQUFPLFNBQUE7UUFDUCxNQUFNLFFBQUE7UUFDTixlQUFlLGlCQUFBO1FBQ2YsT0FBTyxTQUFBO0tBQ1IsQ0FBQyxFQUxNLFdBQVcsaUJBQUEsRUFBRSxTQUFTLGVBQUEsRUFBRSxlQUFlLHFCQUs3QyxDQUFDO0lBRUgsSUFBTSxXQUFXLEdBQUcsVUFBQyxDQUFtQjtRQUN0QyxDQUFDLENBQUMsY0FBYyxFQUFFLENBQUM7UUFDbkIsQ0FBQyxDQUFDLGVBQWUsRUFBRSxDQUFDO1FBQ3BCLElBQUksUUFBUTtZQUFFLE9BQU87UUFDckIsZUFBZSxFQUFFLENBQUM7SUFDcEIsQ0FBQyxDQUFDO0lBRUYsSUFBTSxnQkFBZ0IsR0FBRztRQUN2QixJQUFJLFNBQVM7WUFBRSxPQUFPLEtBQUMsT0FBTyxJQUFDLElBQUksRUFBRSxFQUFFLEVBQUUsS0FBSyxFQUFDLFNBQVMsR0FBRyxDQUFDO1FBQzVELE9BQU8sS0FBQyxHQUFHLElBQUMsSUFBSSxFQUFFLEVBQUUsRUFBRSxLQUFLLEVBQUMsU0FBUyxHQUFHLENBQUM7SUFDM0MsQ0FBQyxDQUFDO0lBRUYsSUFBTSxRQUFRLEdBQUc7UUFDZixJQUFJLFNBQVM7WUFBRSxPQUFPLGVBQWUsQ0FBQztRQUN0QyxPQUFPLFdBQVcsQ0FBQyxDQUFDLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxDQUFDLGlCQUFpQixDQUFDO0lBQzVELENBQUMsQ0FBQztJQUVGLElBQU0sTUFBTSxHQUFHLENBQUEsS0FBSyxhQUFMLEtBQUssdUJBQUwsS0FBSyxDQUFFLFlBQVksS0FBSSxTQUFTLENBQUM7SUFDaEQsSUFBTSxRQUFRLEdBQUcsU0FBUyxDQUFDLENBQUMscUJBQXFCO0lBQ2pELElBQU0sVUFBVSxHQUFHLFFBQVEsSUFBSSxTQUFTLENBQUM7SUFDekMsSUFBTSxXQUFXLEdBQXdCO1FBQ3ZDLGVBQWUsRUFBRSxXQUFXLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsTUFBTTtRQUNoRCxLQUFLLEVBQUUsU0FBUztRQUNoQixNQUFNLEVBQUUsTUFBTTtRQUNkLFlBQVksRUFBRSxLQUFLO1FBQ25CLEtBQUssRUFBRSxNQUFNO1FBQ2IsTUFBTSxFQUFFLE1BQU07UUFDZCxPQUFPLEVBQUUsTUFBTTtRQUNmLFVBQVUsRUFBRSxRQUFRO1FBQ3BCLGNBQWMsRUFBRSxRQUFRO1FBQ3hCLE1BQU0sRUFBRSxVQUFVLENBQUMsQ0FBQyxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUMsU0FBUztRQUM5QyxPQUFPLEVBQUUsTUFBTTtRQUNmLFVBQVUsRUFBRSxlQUFlO1FBQzNCLFVBQVUsRUFBRSxDQUFDO1FBQ2IsU0FBUyxFQUFFLCtCQUErQjtRQUMxQyxPQUFPLEVBQUUsVUFBVSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7S0FDOUIsQ0FBQztJQUVGLE9BQU8sQ0FDTCw0QkFDRSxpQkFDRSxJQUFJLEVBQUMsUUFBUSxFQUNiLEtBQUssRUFBRSxXQUFXLEVBQ2xCLE9BQU8sRUFBRSxXQUFXLEVBQ3BCLEtBQUssRUFBRSxRQUFRLEVBQUUsRUFDakIsUUFBUSxFQUFFLFVBQVUsWUFFbkIsZ0JBQWdCLEVBQUUsR0FDWixHQUNSLENBQ0osQ0FBQztBQUNKLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBNaWMgfSBmcm9tICdsdWNpZGUtcmVhY3QnO1xuaW1wb3J0IHsgU3Bpbm5lciB9IGZyb20gJy4vU3Bpbm5lcic7XG5pbXBvcnQgeyB1c2VWb2ljZUlucHV0IH0gZnJvbSAnLi4vaG9va3MvdXNlVm9pY2VJbnB1dCc7XG5cbmludGVyZmFjZSBWb2ljZUlucHV0UHJvcHMge1xuICBvblRyYW5zY3JpcHRpb246ICh0ZXh0OiBzdHJpbmcpID0+IHZvaWQ7XG4gIG9uRXJyb3I6IChlcnJvcjogRXJyb3IpID0+IHZvaWQ7XG4gIGJhc2VVcmw6IHN0cmluZztcbiAgYXBpS2V5OiBzdHJpbmc7XG4gIHRoZW1lPzoge1xuICAgIHByaW1hcnlDb2xvcj86IHN0cmluZztcbiAgICBiYWNrZ3JvdW5kQ29sb3I/OiBzdHJpbmc7XG4gICAgZm9udEZhbWlseT86IHN0cmluZztcbiAgfTtcbiAgZGlzYWJsZWQ/OiBib29sZWFuO1xufVxuXG5leHBvcnQgY29uc3QgVm9pY2VJbnB1dDogUmVhY3QuRkM8Vm9pY2VJbnB1dFByb3BzPiA9ICh7XG4gIG9uVHJhbnNjcmlwdGlvbixcbiAgb25FcnJvcixcbiAgYmFzZVVybCxcbiAgYXBpS2V5LFxuICB0aGVtZSxcbiAgZGlzYWJsZWQgPSBmYWxzZVxufSkgPT4ge1xuICBjb25zdCB7IGlzUmVjb3JkaW5nLCBpc0xvYWRpbmcsIHRvZ2dsZVJlY29yZGluZyB9ID0gdXNlVm9pY2VJbnB1dCh7XG4gICAgYmFzZVVybCxcbiAgICBhcGlLZXksXG4gICAgb25UcmFuc2NyaXB0aW9uLFxuICAgIG9uRXJyb3IsXG4gIH0pO1xuXG4gIGNvbnN0IGhhbmRsZUNsaWNrID0gKGU6IFJlYWN0Lk1vdXNlRXZlbnQpID0+IHtcbiAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgZS5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICBpZiAoZGlzYWJsZWQpIHJldHVybjtcbiAgICB0b2dnbGVSZWNvcmRpbmcoKTtcbiAgfTtcblxuICBjb25zdCBnZXRCdXR0b25Db250ZW50ID0gKCkgPT4ge1xuICAgIGlmIChpc0xvYWRpbmcpIHJldHVybiA8U3Bpbm5lciBzaXplPXsxOH0gY29sb3I9XCIjZmZmZmZmXCIgLz47XG4gICAgcmV0dXJuIDxNaWMgc2l6ZT17MTh9IGNvbG9yPVwiI2ZmZmZmZlwiIC8+O1xuICB9O1xuXG4gIGNvbnN0IGdldFRpdGxlID0gKCkgPT4ge1xuICAgIGlmIChpc0xvYWRpbmcpIHJldHVybiAnQ29ubmVjdGluZy4uLic7XG4gICAgcmV0dXJuIGlzUmVjb3JkaW5nID8gJ1N0b3AgUmVjb3JkaW5nJyA6ICdTdGFydCBSZWNvcmRpbmcnO1xuICB9O1xuXG4gIGNvbnN0IGlkbGVCZyA9IHRoZW1lPy5wcmltYXJ5Q29sb3IgfHwgJyMyOTYyRkYnO1xuICBjb25zdCBhY3RpdmVCZyA9ICcjRkYzQjMwJzsgLy8gcmVkIHdoZW4gcmVjb3JkaW5nXG4gIGNvbnN0IGlzRGlzYWJsZWQgPSBkaXNhYmxlZCB8fCBpc0xvYWRpbmc7XG4gIGNvbnN0IGJ1dHRvblN0eWxlOiBSZWFjdC5DU1NQcm9wZXJ0aWVzID0ge1xuICAgIGJhY2tncm91bmRDb2xvcjogaXNSZWNvcmRpbmcgPyBhY3RpdmVCZyA6IGlkbGVCZyxcbiAgICBjb2xvcjogJyNmZmZmZmYnLFxuICAgIGJvcmRlcjogJ25vbmUnLFxuICAgIGJvcmRlclJhZGl1czogJzUwJScsXG4gICAgd2lkdGg6ICczNnB4JyxcbiAgICBoZWlnaHQ6ICczNnB4JyxcbiAgICBkaXNwbGF5OiAnZmxleCcsXG4gICAgYWxpZ25JdGVtczogJ2NlbnRlcicsXG4gICAganVzdGlmeUNvbnRlbnQ6ICdjZW50ZXInLFxuICAgIGN1cnNvcjogaXNEaXNhYmxlZCA/ICdub3QtYWxsb3dlZCcgOiAncG9pbnRlcicsXG4gICAgb3V0bGluZTogJ25vbmUnLFxuICAgIHRyYW5zaXRpb246ICdhbGwgMC4ycyBlYXNlJyxcbiAgICBmbGV4U2hyaW5rOiAwLFxuICAgIGJveFNoYWRvdzogJzAgMXB4IDNweCByZ2JhKDAsIDAsIDAsIDAuMDgpJyxcbiAgICBvcGFjaXR5OiBpc0Rpc2FibGVkID8gMC42IDogMSxcbiAgfTtcblxuICByZXR1cm4gKFxuICAgIDw+XG4gICAgICA8YnV0dG9uXG4gICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICBzdHlsZT17YnV0dG9uU3R5bGV9XG4gICAgICAgIG9uQ2xpY2s9e2hhbmRsZUNsaWNrfVxuICAgICAgICB0aXRsZT17Z2V0VGl0bGUoKX1cbiAgICAgICAgZGlzYWJsZWQ9e2lzRGlzYWJsZWR9XG4gICAgICA+XG4gICAgICAgIHtnZXRCdXR0b25Db250ZW50KCl9XG4gICAgICA8L2J1dHRvbj5cbiAgICA8Lz5cbiAgKTtcbn07XG4iXX0=
|
|
266
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiVm9pY2VJbnB1dC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9jb21wb25lbnRzL1ZvaWNlSW5wdXQudHN4Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSxPQUFjLEVBQUUsUUFBUSxFQUFFLE1BQU0sRUFBRSxXQUFXLEVBQUUsU0FBUyxFQUFFLE1BQU0sT0FBTyxDQUFDO0FBQ3hFLE9BQU8sRUFBRSxHQUFHLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRSxNQUFNLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFDekQsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDN0QsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQWU1QyxJQUFNLFNBQVMsR0FBRyxFQUFFLENBQUM7QUFDckIsSUFBTSxXQUFXLEdBQUcsS0FBSyxDQUFDLElBQUksQ0FBQyxFQUFFLE1BQU0sRUFBRSxTQUFTLEVBQUUsRUFBRSxVQUFDLENBQUMsRUFBRSxDQUFDO0lBQ3pELElBQU0sTUFBTSxHQUFHLFNBQVMsR0FBRyxDQUFDLENBQUM7SUFDN0IsSUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDLEdBQUcsTUFBTSxDQUFDO0lBQzNDLE9BQU8sR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFDLENBQUMsR0FBRyxJQUFJLEdBQUcsSUFBSSxDQUFDLENBQUM7QUFDdkMsQ0FBQyxDQUFDLENBQUM7QUFFSCxNQUFNLENBQUMsSUFBTSxVQUFVLEdBQThCLFVBQUMsRUFLckQ7UUFKQyxZQUFZLGtCQUFBLEVBQ1osT0FBTyxhQUFBLEVBQ1AsS0FBSyxXQUFBLEVBQ0wsZ0JBQWdCLEVBQWhCLFFBQVEsbUJBQUcsS0FBSyxLQUFBO0lBRVYsSUFBQSxLQUE4QixRQUFRLENBQWEsTUFBTSxDQUFDLEVBQXpELFVBQVUsUUFBQSxF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b0JBQ2pCLFVBQVUsRUFBRSxDQUFDO29CQUNiLFNBQVMsRUFBRSxvQkFBYSxZQUFZLE9BQUk7b0JBQ3hDLFVBQVUsRUFBRSx1QkFBdUI7aUJBQ3BDLEVBQ0QsS0FBSyxFQUFDLE1BQU0sRUFDWixZQUFZLEVBQUUsVUFBQSxDQUFDLElBQUksT0FBQSxDQUFDLENBQUMsQ0FBQyxhQUFhLENBQUMsS0FBSyxDQUFDLFNBQVMsR0FBRyxvQkFBYSxZQUFZLE9BQUksQ0FBQyxFQUFqRSxDQUFpRSxFQUNwRixZQUFZLEVBQUUsVUFBQSxDQUFDLElBQUksT0FBQSxDQUFDLENBQUMsQ0FBQyxhQUFhLENBQUMsS0FBSyxDQUFDLFNBQVMsR0FBRyxvQkFBYSxZQUFZLE9BQUksQ0FBQyxFQUFqRSxDQUFpRSxZQUVwRixLQUFDLElBQUksSUFBQyxJQUFJLEVBQUUsRUFBRSxHQUFJLEdBQ1gsSUFDTCxDQUNQLENBQUM7QUFDSixDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgUmVhY3QsIHsgdXNlU3RhdGUsIHVzZVJlZiwgdXNlQ2FsbGJhY2ssIHVzZUVmZmVjdCB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IE1pYywgU3F1YXJlLCBTZW5kLCBUcmFzaDIgfSBmcm9tICdsdWNpZGUtcmVhY3QnO1xuaW1wb3J0IHsgdXNlQXVkaW9SZWNvcmRlciB9IGZyb20gJy4uL2hvb2tzL3VzZUF1ZGlvUmVjb3JkZXInO1xuaW1wb3J0IHsgQXVkaW9QbGF5ZXIgfSBmcm9tICcuL0F1ZGlvUGxheWVyJztcblxudHlwZSBWb2ljZVN0YXRlID0gJ2lkbGUnIHwgJ3JlY29yZGluZycgfCAncHJldmlldyc7XG5cbmludGVyZmFjZSBWb2ljZUlucHV0UHJvcHMge1xuICBvbkF1ZGlvUmVhZHk6IChibG9iOiBCbG9iLCBmb3JtYXQ6IHN0cmluZykgPT4gdm9pZDtcbiAgb25FcnJvcjogKGVycm9yOiBFcnJvcikgPT4gdm9pZDtcbiAgdGhlbWU/OiB7XG4gICAgcHJpbWFyeUNvbG9yPzogc3RyaW5nO1xuICAgIGJhY2tncm91bmRDb2xvcj86IHN0cmluZztcbiAgICBmb250RmFtaWx5Pzogc3RyaW5nO1xuICB9O1xuICBkaXNhYmxlZD86IGJvb2xlYW47XG59XG5cbmNvbnN0IEJBUl9DT1VOVCA9IDMyO1xuY29uc3QgQkFSX0hFSUdIVFMgPSBBcnJheS5mcm9tKHsgbGVuZ3RoOiBCQVJfQ09VTlQgfSwgKF8sIGkpID0+IHtcbiAgY29uc3QgY2VudGVyID0gQkFSX0NPVU5UIC8gMjtcbiAgY29uc3QgZGlzdCA9IE1hdGguYWJzKGkgLSBjZW50ZXIpIC8gY2VudGVyO1xuICByZXR1cm4gMC4zICsgMC43ICogKDEgLSBkaXN0ICogZGlzdCk7XG59KTtcblxuZXhwb3J0IGNvbnN0IFZvaWNlSW5wdXQ6IFJlYWN0LkZDPFZvaWNlSW5wdXRQcm9wcz4gPSAoe1xuICBvbkF1ZGlvUmVhZHksXG4gIG9uRXJyb3IsXG4gIHRoZW1lLFxuICBkaXNhYmxlZCA9IGZhbHNlLFxufSkgPT4ge1xuICBjb25zdCBbdm9pY2VTdGF0ZSwgc2V0Vm9pY2VTdGF0ZV0gPSB1c2VTdGF0ZTxWb2ljZVN0YXRlPignaWRsZScpO1xuICBjb25zdCBbcGVuZGluZ0Jsb2IsIHNldFBlbmRpbmdCbG9iXSA9IHVzZVN0YXRlPEJsb2IgfCBudWxsPihudWxsKTtcbiAgY29uc3QgW3BlbmRpbmdGb3JtYXQsIHNldFBlbmRpbmdGb3JtYXRdID0gdXNlU3RhdGU8c3RyaW5nPignd2VibScpO1xuICBjb25zdCBbYmxvYlVybCwgc2V0QmxvYlVybF0gPSB1c2VTdGF0ZTxzdHJpbmcgfCBudWxsPihudWxsKTtcbiAgY29uc3QgW3JlY29yZGluZ1RpbWUsIHNldFJlY29yZGluZ1RpbWVdID0gdXNlU3RhdGUoMCk7XG4gIGNvbnN0IHRpbWVyUmVmID0gdXNlUmVmPG51bWJlciB8IG51bGw+KG51bGwpO1xuXG4gIGNvbnN0IGhhbmRsZVJlY29yZGluZ0RvbmUgPSB1c2VDYWxsYmFjaygoYmxvYjogQmxvYiwgZm9ybWF0OiBzdHJpbmcpID0+IHtcbiAgICBzZXRQZW5kaW5nQmxvYihibG9iKTtcbiAgICBzZXRQZW5kaW5nRm9ybWF0KGZvcm1hdCk7XG4gICAgY29uc3QgdXJsID0gVVJMLmNyZWF0ZU9iamVjdFVSTChibG9iKTtcbiAgICBzZXRCbG9iVXJsKHVybCk7XG4gICAgc2V0Vm9pY2VTdGF0ZSgncHJldmlldycpO1xuICAgIGlmICh0aW1lclJlZi5jdXJyZW50KSB7IGNsZWFySW50ZXJ2YWwodGltZXJSZWYuY3VycmVudCk7IHRpbWVyUmVmLmN1cnJlbnQgPSBudWxsOyB9XG4gIH0sIFtdKTtcblxuICBjb25zdCB7IGlzUmVjb3JkaW5nLCBzdGFydFJlY29yZGluZywgc3RvcFJlY29yZGluZywgY2FuY2VsUmVjb3JkaW5nIH0gPSB1c2VBdWRpb1JlY29yZGVyKGhhbmRsZVJlY29yZGluZ0RvbmUsIG9uRXJyb3IpO1xuXG4gIGNvbnN0IGhhbmRsZU1pY0NsaWNrID0gdXNlQ2FsbGJhY2soYXN5bmMgKCkgPT4ge1xuICAgIGlmIChkaXNhYmxlZCkgcmV0dXJuO1xuICAgIHNldFJlY29yZGluZ1RpbWUoMCk7XG4gICAgYXdhaXQgc3RhcnRSZWNvcmRpbmcoKTtcbiAgICBzZXRWb2ljZVN0YXRlKCdyZWNvcmRpbmcnKTtcbiAgICB0aW1lclJlZi5jdXJyZW50ID0gd2luZG93LnNldEludGVydmFsKCgpID0+IHNldFJlY29yZGluZ1RpbWUoKHQpID0+IHQgKyAxKSwgMTAwMCk7XG4gIH0sIFtkaXNhYmxlZCwgc3RhcnRSZWNvcmRpbmddKTtcblxuICBjb25zdCBoYW5kbGVTdG9wID0gdXNlQ2FsbGJhY2soKCkgPT4ge1xuICAgIHN0b3BSZWNvcmRpbmcoKTtcbiAgfSwgW3N0b3BSZWNvcmRpbmddKTtcblxuICBjb25zdCBoYW5kbGVTZW5kID0gdXNlQ2FsbGJhY2soKCkgPT4ge1xuICAgIGlmIChwZW5kaW5nQmxvYikge1xuICAgICAgb25BdWRpb1JlYWR5KHBlbmRpbmdCbG9iLCBwZW5kaW5nRm9ybWF0KTtcbiAgICB9XG4gICAgY2xlYW51cCgpO1xuICB9LCBbcGVuZGluZ0Jsb2IsIHBlbmRpbmdGb3JtYXQsIG9uQXVkaW9SZWFkeV0pO1xuXG4gIGNvbnN0IGhhbmRsZURpc2NhcmQgPSB1c2VDYWxsYmFjaygoKSA9PiB7XG4gICAgY2xlYW51cCgpO1xuICB9LCBbXSk7XG5cbiAgY29uc3QgY2xlYW51cCA9ICgpID0+IHtcbiAgICBpZiAoYmxvYlVybCkgVVJMLnJldm9rZU9iamVjdFVSTChibG9iVXJsKTtcbiAgICBzZXRCbG9iVXJsKG51bGwpO1xuICAgIHNldFBlbmRpbmdCbG9iKG51bGwpO1xuICAgIHNldFZvaWNlU3RhdGUoJ2lkbGUnKTtcbiAgICBzZXRSZWNvcmRpbmdUaW1lKDApO1xuICAgIGlmICh0aW1lclJlZi5jdXJyZW50KSB7IGNsZWFySW50ZXJ2YWwodGltZXJSZWYuY3VycmVudCk7IHRpbWVyUmVmLmN1cnJlbnQgPSBudWxsOyB9XG4gIH07XG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgaWYgKHRpbWVyUmVmLmN1cnJlbnQpIGNsZWFySW50ZXJ2YWwodGltZXJSZWYuY3VycmVudCk7XG4gICAgICBpZiAoYmxvYlVybCkgVVJMLnJldm9rZU9iamVjdFVSTChibG9iVXJsKTtcbiAgICB9O1xuICB9LCBbXSk7XG5cbiAgY29uc3QgcHJpbWFyeUNvbG9yID0gdGhlbWU/LnByaW1hcnlDb2xvciB8fCAnIzRmNDZlNSc7XG5cbiAgY29uc3QgZm9ybWF0VGltZSA9IChzOiBudW1iZXIpID0+IHtcbiAgICBjb25zdCBtID0gTWF0aC5mbG9vcihzIC8gNjApO1xuICAgIGNvbnN0IHNlYyA9IHMgJSA2MDtcbiAgICByZXR1cm4gYCR7bX06JHtzZWMudG9TdHJpbmcoKS5wYWRTdGFydCgyLCAnMCcpfWA7XG4gIH07XG5cbiAgaWYgKHZvaWNlU3RhdGUgPT09ICdpZGxlJykge1xuICAgIHJldHVybiAoXG4gICAgICA8YnV0dG9uXG4gICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICBvbkNsaWNrPXtoYW5kbGVNaWNDbGlja31cbiAgICAgICAgZGlzYWJsZWQ9e2Rpc2FibGVkfVxuICAgICAgICBzdHlsZT17e1xuICAgICAgICAgIHBvc2l0aW9uOiAnYWJzb2x1dGUnLFxuICAgICAgICAgIHJpZ2h0OiA2LFxuICAgICAgICAgIHRvcDogJzUwJScsXG4gICAgICAgICAgdHJhbnNmb3JtOiAndHJhbnNsYXRlWSgtNTAlKScsXG4gICAgICAgICAgYmFja2dyb3VuZENvbG9yOiBwcmltYXJ5Q29sb3IsXG4gICAgICAgICAgY29sb3I6ICcjZmZmZmZmJyxcbiAgICAgICAgICBib3JkZXI6ICdub25lJyxcbiAgICAgICAgICBib3JkZXJSYWRpdXM6ICc1MCUnLFxuICAgICAgICAgIHdpZHRoOiAzNixcbiAgICAgICAgICBoZWlnaHQ6IDM2LFxuICAgICAgICAgIGRpc3BsYXk6ICdmbGV4JyxcbiAgICAgICAgICBhbGlnbkl0ZW1zOiAnY2VudGVyJyxcbiAgICAgICAgICBqdXN0aWZ5Q29udGVudDogJ2NlbnRlcicsXG4gICAgICAgICAgY3Vyc29yOiBkaXNhYmxlZCA/ICdub3QtYWxsb3dlZCcgOiAncG9pbnRlcicsXG4gICAgICAgICAgZmxleFNocmluazogMCxcbiAgICAgICAgICBib3hTaGFkb3c6ICcwIDFweCAzcHggcmdiYSgwLCAwLCAwLCAwLjEyKScsXG4gICAgICAgICAgb3BhY2l0eTogZGlzYWJsZWQgPyAwLjUgOiAxLFxuICAgICAgICAgIHpJbmRleDogNSxcbiAgICAgICAgICB0cmFuc2l0aW9uOiAnb3BhY2l0eSAwLjE1cyBlYXNlJyxcbiAgICAgICAgfX1cbiAgICAgICAgdGl0bGU9XCJTdGFydCBSZWNvcmRpbmdcIlxuICAgICAgPlxuICAgICAgICA8TWljIHNpemU9ezE4fSBjb2xvcj1cIiNmZmZmZmZcIiAvPlxuICAgICAgPC9idXR0b24+XG4gICAgKTtcbiAgfVxuXG4gIGlmICh2b2ljZVN0YXRlID09PSAncmVjb3JkaW5nJykge1xuICAgIHJldHVybiAoXG4gICAgICA8ZGl2IHN0eWxlPXt7XG4gICAgICAgIHBvc2l0aW9uOiAnYWJzb2x1dGUnLFxuICAgICAgICBpbnNldDogMCxcbiAgICAgICAgZGlzcGxheTogJ2ZsZXgnLFxuICAgICAgICBhbGlnbkl0ZW1zOiAnY2VudGVyJyxcbiAgICAgICAgZ2FwOiAwLFxuICAgICAgICBwYWRkaW5nOiAnMCA2cHgnLFxuICAgICAgICBiYWNrZ3JvdW5kQ29sb3I6ICcjZmZmJyxcbiAgICAgICAgYm9yZGVyUmFkaXVzOiAyNCxcbiAgICAgICAgekluZGV4OiAxMCxcbiAgICAgICAgb3ZlcmZsb3c6ICdoaWRkZW4nLFxuICAgICAgfX0+XG4gICAgICAgIHsvKiBEaXNjYXJkICovfVxuICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgb25DbGljaz17KCkgPT4geyBjYW5jZWxSZWNvcmRpbmcoKTsgY2xlYW51cCgpOyB9fVxuICAgICAgICAgIHN0eWxlPXt7XG4gICAgICAgICAgICBiYWNrZ3JvdW5kOiAnbm9uZScsXG4gICAgICAgICAgICBib3JkZXI6ICdub25lJyxcbiAgICAgICAgICAgIGN1cnNvcjogJ3BvaW50ZXInLFxuICAgICAgICAgICAgcGFkZGluZzogNixcbiAgICAgICAgICAgIGRpc3BsYXk6ICdmbGV4JyxcbiAgICAgICAgICAgIGFsaWduSXRlbXM6ICdjZW50ZXInLFxuICAgICAgICAgICAganVzdGlmeUNvbnRlbnQ6ICdjZW50ZXInLFxuICAgICAgICAgICAgY29sb3I6ICcjOWNhM2FmJyxcbiAgICAgICAgICAgIGJvcmRlclJhZGl1czogJzUwJScsXG4gICAgICAgICAgICBmbGV4U2hyaW5rOiAwLFxuICAgICAgICAgICAgdHJhbnNpdGlvbjogJ2NvbG9yIDAuMTVzIGVhc2UnLFxuICAgICAgICAgIH19XG4gICAgICAgICAgdGl0bGU9XCJDYW5jZWxcIlxuICAgICAgICAgIG9uTW91c2VFbnRlcj17ZSA9PiAoZS5jdXJyZW50VGFyZ2V0LnN0eWxlLmNvbG9yID0gJyM2YjcyODAnKX1cbiAgICAgICAgICBvbk1vdXNlTGVhdmU9e2UgPT4gKGUuY3VycmVudFRhcmdldC5zdHlsZS5jb2xvciA9ICcjOWNhM2FmJyl9XG4gICAgICAgID5cbiAgICAgICAgICA8VHJhc2gyIHNpemU9ezE4fSAvPlxuICAgICAgICA8L2J1dHRvbj5cblxuICAgICAgICB7LyogUmVkIGRvdCArIFRpbWVyICovfVxuICAgICAgICA8ZGl2IHN0eWxlPXt7XG4gICAgICAgICAgZGlzcGxheTogJ2ZsZXgnLFxuICAgICAgICAgIGFsaWduSXRlbXM6ICdjZW50ZXInLFxuICAgICAgICAgIGdhcDogNixcbiAgICAgICAgICBwYWRkaW5nOiAnMCA4cHggMCA0cHgnLFxuICAgICAgICAgIGZsZXhTaHJpbms6IDAsXG4gICAgICAgIH19PlxuICAgICAgICAgIDxkaXYgc3R5bGU9e3tcbiAgICAgICAgICAgIHdpZHRoOiA4LFxuICAgICAgICAgICAgaGVpZ2h0OiA4LFxuICAgICAgICAgICAgYm9yZGVyUmFkaXVzOiAnNTAlJyxcbiAgICAgICAgICAgIGJhY2tncm91bmRDb2xvcjogJyNlZjQ0NDQnLFxuICAgICAgICAgICAgYW5pbWF0aW9uOiAnZ2EtcmVjLXB1bHNlIDEuNXMgZWFzZS1pbi1vdXQgaW5maW5pdGUnLFxuICAgICAgICAgICAgZmxleFNocmluazogMCxcbiAgICAgICAgICB9fSAvPlxuICAgICAgICAgIDxzcGFuIHN0eWxlPXt7XG4gICAgICAgICAgICBmb250U2l6ZTogMTMsXG4gICAgICAgICAgICBmb250V2VpZ2h0OiA2MDAsXG4gICAgICAgICAgICBjb2xvcjogJyMzNzQxNTEnLFxuICAgICAgICAgICAgZm9udFZhcmlhbnROdW1lcmljOiAndGFidWxhci1udW1zJyxcbiAgICAgICAgICAgIG1pbldpZHRoOiAzMixcbiAgICAgICAgICAgIGZvbnRGYW1pbHk6ICdpbmhlcml0JyxcbiAgICAgICAgICB9fT5cbiAgICAgICAgICAgIHtmb3JtYXRUaW1lKHJlY29yZGluZ1RpbWUpfVxuICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgey8qIFdhdmUgYW5pbWF0aW9uICovfVxuICAgICAgICA8ZGl2IHN0eWxlPXt7XG4gICAgICAgICAgZmxleDogMSxcbiAgICAgICAgICBkaXNwbGF5OiAnZmxleCcsXG4gICAgICAgICAgYWxpZ25JdGVtczogJ2NlbnRlcicsXG4gICAgICAgICAganVzdGlmeUNvbnRlbnQ6ICdjZW50ZXInLFxuICAgICAgICAgIGdhcDogMixcbiAgICAgICAgICBoZWlnaHQ6ICcxMDAlJyxcbiAgICAgICAgICBwYWRkaW5nOiAnMCA0cHgnLFxuICAgICAgICAgIG92ZXJmbG93OiAnaGlkZGVuJyxcbiAgICAgICAgfX0+XG4gICAgICAgICAge0JBUl9IRUlHSFRTLm1hcCgoc2NhbGUsIGkpID0+IChcbiAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAga2V5PXtpfVxuICAgICAgICAgICAgICBzdHlsZT17e1xuICAgICAgICAgICAgICAgIHdpZHRoOiAyLjUsXG4gICAgICAgICAgICAgICAgYm9yZGVyUmFkaXVzOiAzLFxuICAgICAgICAgICAgICAgIGJhY2tncm91bmRDb2xvcjogcHJpbWFyeUNvbG9yLFxuICAgICAgICAgICAgICAgIG9wYWNpdHk6IDAuNTUgKyAwLjQ1ICogc2NhbGUsXG4gICAgICAgICAgICAgICAgYW5pbWF0aW9uOiBgZ2Etd2F2ZSAkezAuNiArIChpICUgNSkgKiAwLjE1fXMgZWFzZS1pbi1vdXQgJHtpICogMC4wNH1zIGluZmluaXRlIGFsdGVybmF0ZWAsXG4gICAgICAgICAgICAgICAgbWluSGVpZ2h0OiAzLFxuICAgICAgICAgICAgICAgIG1heEhlaWdodDogTWF0aC5yb3VuZChzY2FsZSAqIDI2KSxcbiAgICAgICAgICAgICAgICBmbGV4U2hyaW5rOiAwLFxuICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgLz5cbiAgICAgICAgICApKX1cbiAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgey8qIFN0b3AgYnV0dG9uICovfVxuICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgb25DbGljaz17aGFuZGxlU3RvcH1cbiAgICAgICAgICBzdHlsZT17e1xuICAgICAgICAgICAgYmFja2dyb3VuZENvbG9yOiAnI2VmNDQ0NCcsXG4gICAgICAgICAgICBjb2xvcjogJyNmZmYnLFxuICAgICAgICAgICAgYm9yZGVyOiAnbm9uZScsXG4gICAgICAgICAgICBib3JkZXJSYWRpdXM6ICc1MCUnLFxuICAgICAgICAgICAgd2lkdGg6IDM2LFxuICAgICAgICAgICAgaGVpZ2h0OiAzNixcbiAgICAgICAgICAgIGRpc3BsYXk6ICdmbGV4JyxcbiAgICAgICAgICAgIGFsaWduSXRlbXM6ICdjZW50ZXInLFxuICAgICAgICAgICAganVzdGlmeUNvbnRlbnQ6ICdjZW50ZXInLFxuICAgICAgICAgICAgY3Vyc29yOiAncG9pbnRlcicsXG4gICAgICAgICAgICBmbGV4U2hyaW5rOiAwLFxuICAgICAgICAgICAgYm94U2hhZG93OiAnMCAxcHggNHB4IHJnYmEoMjM5LCA2OCwgNjgsIDAuMyknLFxuICAgICAgICAgICAgdHJhbnNpdGlvbjogJ2JveC1zaGFkb3cgMC4xNXMgZWFzZScsXG4gICAgICAgICAgfX1cbiAgICAgICAgICB0aXRsZT1cIlN0b3AgUmVjb3JkaW5nXCJcbiAgICAgICAgICBvbk1vdXNlRW50ZXI9e2UgPT4gKGUuY3VycmVudFRhcmdldC5zdHlsZS5ib3hTaGFkb3cgPSAnMCAycHggOHB4IHJnYmEoMjM5LCA2OCwgNjgsIDAuNCknKX1cbiAgICAgICAgICBvbk1vdXNlTGVhdmU9e2UgPT4gKGUuY3VycmVudFRhcmdldC5zdHlsZS5ib3hTaGFkb3cgPSAnMCAxcHggNHB4IHJnYmEoMjM5LCA2OCwgNjgsIDAuMyknKX1cbiAgICAgICAgPlxuICAgICAgICAgIDxTcXVhcmUgc2l6ZT17MTJ9IGZpbGw9XCIjZmZmXCIgLz5cbiAgICAgICAgPC9idXR0b24+XG5cbiAgICAgICAgPHN0eWxlPntgXG4gICAgICAgICAgQGtleWZyYW1lcyBnYS13YXZlIHtcbiAgICAgICAgICAgIDAlIHsgaGVpZ2h0OiAzcHg7IH1cbiAgICAgICAgICAgIDEwMCUgeyBoZWlnaHQ6IHZhcigtLWdhLXdhdmUtaCwgMjJweCk7IH1cbiAgICAgICAgICB9XG4gICAgICAgICAgQGtleWZyYW1lcyBnYS1yZWMtcHVsc2Uge1xuICAgICAgICAgICAgMCUsIDEwMCUgeyBvcGFjaXR5OiAxOyB9XG4gICAgICAgICAgICA1MCUgeyBvcGFjaXR5OiAwLjM7IH1cbiAgICAgICAgICB9XG4gICAgICAgIGB9PC9zdHlsZT5cbiAgICAgIDwvZGl2PlxuICAgICk7XG4gIH1cblxuICByZXR1cm4gKFxuICAgIDxkaXYgc3R5bGU9e3tcbiAgICAgIHBvc2l0aW9uOiAnYWJzb2x1dGUnLFxuICAgICAgaW5zZXQ6IDAsXG4gICAgICBkaXNwbGF5OiAnZmxleCcsXG4gICAgICBhbGlnbkl0ZW1zOiAnY2VudGVyJyxcbiAgICAgIGdhcDogMCxcbiAgICAgIHBhZGRpbmc6ICcwIDZweCcsXG4gICAgICBiYWNrZ3JvdW5kQ29sb3I6ICcjZmZmJyxcbiAgICAgIGJvcmRlclJhZGl1czogMjQsXG4gICAgICB6SW5kZXg6IDEwLFxuICAgICAgb3ZlcmZsb3c6ICdoaWRkZW4nLFxuICAgIH19PlxuICAgICAgey8qIERpc2NhcmQgKi99XG4gICAgICA8YnV0dG9uXG4gICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICBvbkNsaWNrPXtoYW5kbGVEaXNjYXJkfVxuICAgICAgICBzdHlsZT17e1xuICAgICAgICAgIGJhY2tncm91bmQ6ICdub25lJyxcbiAgICAgICAgICBib3JkZXI6ICdub25lJyxcbiAgICAgICAgICBjdXJzb3I6ICdwb2ludGVyJyxcbiAgICAgICAgICBwYWRkaW5nOiA2LFxuICAgICAgICAgIGRpc3BsYXk6ICdmbGV4JyxcbiAgICAgICAgICBhbGlnbkl0ZW1zOiAnY2VudGVyJyxcbiAgICAgICAgICBqdXN0aWZ5Q29udGVudDogJ2NlbnRlcicsXG4gICAgICAgICAgY29sb3I6ICcjOWNhM2FmJyxcbiAgICAgICAgICBib3JkZXJSYWRpdXM6ICc1MCUnLFxuICAgICAgICAgIGZsZXhTaHJpbms6IDAsXG4gICAgICAgICAgdHJhbnNpdGlvbjogJ2NvbG9yIDAuMTVzIGVhc2UnLFxuICAgICAgICB9fVxuICAgICAgICB0aXRsZT1cIkRpc2NhcmRcIlxuICAgICAgICBvbk1vdXNlRW50ZXI9e2UgPT4gKGUuY3VycmVudFRhcmdldC5zdHlsZS5jb2xvciA9ICcjZWY0NDQ0Jyl9XG4gICAgICAgIG9uTW91c2VMZWF2ZT17ZSA9PiAoZS5jdXJyZW50VGFyZ2V0LnN0eWxlLmNvbG9yID0gJyM5Y2EzYWYnKX1cbiAgICAgID5cbiAgICAgICAgPFRyYXNoMiBzaXplPXsxOH0gLz5cbiAgICAgIDwvYnV0dG9uPlxuXG4gICAgICB7LyogQXVkaW8gcGxheWVyICovfVxuICAgICAgPGRpdiBzdHlsZT17e1xuICAgICAgICBmbGV4OiAxLFxuICAgICAgICBtaW5XaWR0aDogMCxcbiAgICAgICAgcGFkZGluZzogJzAgNHB4JyxcbiAgICAgIH19PlxuICAgICAgICB7YmxvYlVybCAmJiA8QXVkaW9QbGF5ZXIgYmxvYlVybD17YmxvYlVybH0gcHJpbWFyeUNvbG9yPXtwcmltYXJ5Q29sb3J9IGNvbXBhY3QgLz59XG4gICAgICA8L2Rpdj5cblxuICAgICAgey8qIFNlbmQgKi99XG4gICAgICA8YnV0dG9uXG4gICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICBvbkNsaWNrPXtoYW5kbGVTZW5kfVxuICAgICAgICBzdHlsZT17e1xuICAgICAgICAgIGJhY2tncm91bmRDb2xvcjogcHJpbWFyeUNvbG9yLFxuICAgICAgICAgIGNvbG9yOiAnI2ZmZicsXG4gICAgICAgICAgYm9yZGVyOiAnbm9uZScsXG4gICAgICAgICAgYm9yZGVyUmFkaXVzOiAnNTAlJyxcbiAgICAgICAgICB3aWR0aDogMzYsXG4gICAgICAgICAgaGVpZ2h0OiAzNixcbiAgICAgICAgICBkaXNwbGF5OiAnZmxleCcsXG4gICAgICAgICAgYWxpZ25JdGVtczogJ2NlbnRlcicsXG4gICAgICAgICAganVzdGlmeUNvbnRlbnQ6ICdjZW50ZXInLFxuICAgICAgICAgIGN1cnNvcjogJ3BvaW50ZXInLFxuICAgICAgICAgIGZsZXhTaHJpbms6IDAsXG4gICAgICAgICAgYm94U2hhZG93OiBgMCAxcHggNHB4ICR7cHJpbWFyeUNvbG9yfTQ0YCxcbiAgICAgICAgICB0cmFuc2l0aW9uOiAnYm94LXNoYWRvdyAwLjE1cyBlYXNlJyxcbiAgICAgICAgfX1cbiAgICAgICAgdGl0bGU9XCJTZW5kXCJcbiAgICAgICAgb25Nb3VzZUVudGVyPXtlID0+IChlLmN1cnJlbnRUYXJnZXQuc3R5bGUuYm94U2hhZG93ID0gYDAgMnB4IDhweCAke3ByaW1hcnlDb2xvcn01NWApfVxuICAgICAgICBvbk1vdXNlTGVhdmU9e2UgPT4gKGUuY3VycmVudFRhcmdldC5zdHlsZS5ib3hTaGFkb3cgPSBgMCAxcHggNHB4ICR7cHJpbWFyeUNvbG9yfTQ0YCl9XG4gICAgICA+XG4gICAgICAgIDxTZW5kIHNpemU9ezE2fSAvPlxuICAgICAgPC9idXR0b24+XG4gICAgPC9kaXY+XG4gICk7XG59O1xuIl19
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
interface UseAudioRecorderReturn {
|
|
2
|
+
isRecording: boolean;
|
|
3
|
+
startRecording: () => Promise<void>;
|
|
4
|
+
stopRecording: () => void;
|
|
5
|
+
cancelRecording: () => void;
|
|
6
|
+
}
|
|
7
|
+
export declare function useAudioRecorder(onAudioReady: (blob: Blob, format: string) => void, onError?: (error: Error) => void): UseAudioRecorderReturn;
|
|
8
|
+
export {};
|
|
@@ -0,0 +1,124 @@
|
|
|
1
|
+
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
2
|
+
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
3
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
|
4
|
+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
5
|
+
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
6
|
+
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
7
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
8
|
+
});
|
|
9
|
+
};
|
|
10
|
+
var __generator = (this && this.__generator) || function (thisArg, body) {
|
|
11
|
+
var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g = Object.create((typeof Iterator === "function" ? Iterator : Object).prototype);
|
|
12
|
+
return g.next = verb(0), g["throw"] = verb(1), g["return"] = verb(2), typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
|
|
13
|
+
function verb(n) { return function (v) { return step([n, v]); }; }
|
|
14
|
+
function step(op) {
|
|
15
|
+
if (f) throw new TypeError("Generator is already executing.");
|
|
16
|
+
while (g && (g = 0, op[0] && (_ = 0)), _) try {
|
|
17
|
+
if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
|
|
18
|
+
if (y = 0, t) op = [op[0] & 2, t.value];
|
|
19
|
+
switch (op[0]) {
|
|
20
|
+
case 0: case 1: t = op; break;
|
|
21
|
+
case 4: _.label++; return { value: op[1], done: false };
|
|
22
|
+
case 5: _.label++; y = op[1]; op = [0]; continue;
|
|
23
|
+
case 7: op = _.ops.pop(); _.trys.pop(); continue;
|
|
24
|
+
default:
|
|
25
|
+
if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
|
|
26
|
+
if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
|
|
27
|
+
if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
|
|
28
|
+
if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
|
|
29
|
+
if (t[2]) _.ops.pop();
|
|
30
|
+
_.trys.pop(); continue;
|
|
31
|
+
}
|
|
32
|
+
op = body.call(thisArg, _);
|
|
33
|
+
} catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
|
|
34
|
+
if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
|
|
35
|
+
}
|
|
36
|
+
};
|
|
37
|
+
import { useCallback, useRef, useState } from 'react';
|
|
38
|
+
function getMimeType() {
|
|
39
|
+
if (typeof MediaRecorder === 'undefined')
|
|
40
|
+
return '';
|
|
41
|
+
if (MediaRecorder.isTypeSupported('audio/webm;codecs=opus'))
|
|
42
|
+
return 'audio/webm;codecs=opus';
|
|
43
|
+
if (MediaRecorder.isTypeSupported('audio/webm'))
|
|
44
|
+
return 'audio/webm';
|
|
45
|
+
if (MediaRecorder.isTypeSupported('audio/mp4'))
|
|
46
|
+
return 'audio/mp4';
|
|
47
|
+
return '';
|
|
48
|
+
}
|
|
49
|
+
function formatFromMime(mimeType) {
|
|
50
|
+
if (mimeType.includes('webm'))
|
|
51
|
+
return 'webm';
|
|
52
|
+
if (mimeType.includes('mp4'))
|
|
53
|
+
return 'mp4';
|
|
54
|
+
return 'webm';
|
|
55
|
+
}
|
|
56
|
+
export function useAudioRecorder(onAudioReady, onError) {
|
|
57
|
+
var _this = this;
|
|
58
|
+
var _a = useState(false), isRecording = _a[0], setIsRecording = _a[1];
|
|
59
|
+
var mediaRecorderRef = useRef(null);
|
|
60
|
+
var chunksRef = useRef([]);
|
|
61
|
+
var streamRef = useRef(null);
|
|
62
|
+
var cancelledRef = useRef(false);
|
|
63
|
+
var startRecording = useCallback(function () { return __awaiter(_this, void 0, void 0, function () {
|
|
64
|
+
var mimeType_1, stream, recorder, err_1;
|
|
65
|
+
return __generator(this, function (_a) {
|
|
66
|
+
switch (_a.label) {
|
|
67
|
+
case 0:
|
|
68
|
+
_a.trys.push([0, 2, , 3]);
|
|
69
|
+
mimeType_1 = getMimeType();
|
|
70
|
+
if (!mimeType_1) {
|
|
71
|
+
throw new Error('Audio recording is not supported in this browser');
|
|
72
|
+
}
|
|
73
|
+
cancelledRef.current = false;
|
|
74
|
+
return [4 /*yield*/, navigator.mediaDevices.getUserMedia({ audio: true })];
|
|
75
|
+
case 1:
|
|
76
|
+
stream = _a.sent();
|
|
77
|
+
streamRef.current = stream;
|
|
78
|
+
chunksRef.current = [];
|
|
79
|
+
recorder = new MediaRecorder(stream, { mimeType: mimeType_1 });
|
|
80
|
+
mediaRecorderRef.current = recorder;
|
|
81
|
+
recorder.ondataavailable = function (e) {
|
|
82
|
+
if (e.data.size > 0) {
|
|
83
|
+
chunksRef.current.push(e.data);
|
|
84
|
+
}
|
|
85
|
+
};
|
|
86
|
+
recorder.onstop = function () {
|
|
87
|
+
var _a;
|
|
88
|
+
var wasCancelled = cancelledRef.current;
|
|
89
|
+
var blob = new Blob(chunksRef.current, { type: mimeType_1 });
|
|
90
|
+
var format = formatFromMime(mimeType_1);
|
|
91
|
+
chunksRef.current = [];
|
|
92
|
+
(_a = streamRef.current) === null || _a === void 0 ? void 0 : _a.getTracks().forEach(function (t) { return t.stop(); });
|
|
93
|
+
streamRef.current = null;
|
|
94
|
+
if (!wasCancelled) {
|
|
95
|
+
onAudioReady(blob, format);
|
|
96
|
+
}
|
|
97
|
+
};
|
|
98
|
+
recorder.start();
|
|
99
|
+
setIsRecording(true);
|
|
100
|
+
return [3 /*break*/, 3];
|
|
101
|
+
case 2:
|
|
102
|
+
err_1 = _a.sent();
|
|
103
|
+
onError === null || onError === void 0 ? void 0 : onError(err_1 instanceof Error ? err_1 : new Error(String(err_1)));
|
|
104
|
+
return [3 /*break*/, 3];
|
|
105
|
+
case 3: return [2 /*return*/];
|
|
106
|
+
}
|
|
107
|
+
});
|
|
108
|
+
}); }, [onAudioReady, onError]);
|
|
109
|
+
var stopRecording = useCallback(function () {
|
|
110
|
+
if (mediaRecorderRef.current && mediaRecorderRef.current.state !== 'inactive') {
|
|
111
|
+
mediaRecorderRef.current.stop();
|
|
112
|
+
}
|
|
113
|
+
setIsRecording(false);
|
|
114
|
+
}, []);
|
|
115
|
+
var cancelRecording = useCallback(function () {
|
|
116
|
+
cancelledRef.current = true;
|
|
117
|
+
if (mediaRecorderRef.current && mediaRecorderRef.current.state !== 'inactive') {
|
|
118
|
+
mediaRecorderRef.current.stop();
|
|
119
|
+
}
|
|
120
|
+
setIsRecording(false);
|
|
121
|
+
}, []);
|
|
122
|
+
return { isRecording: isRecording, startRecording: startRecording, stopRecording: stopRecording, cancelRecording: cancelRecording };
|
|
123
|
+
}
|
|
124
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXNlQXVkaW9SZWNvcmRlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9ob29rcy91c2VBdWRpb1JlY29yZGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxFQUFFLFFBQVEsRUFBRSxNQUFNLE9BQU8sQ0FBQztBQVN0RCxTQUFTLFdBQVc7SUFDbEIsSUFBSSxPQUFPLGFBQWEsS0FBSyxXQUFXO1FBQUUsT0FBTyxFQUFFLENBQUM7SUFDcEQsSUFBSSxhQUFhLENBQUMsZUFBZSxDQUFDLHdCQUF3QixDQUFDO1FBQUUsT0FBTyx3QkFBd0IsQ0FBQztJQUM3RixJQUFJLGFBQWEsQ0FBQyxlQUFlLENBQUMsWUFBWSxDQUFDO1FBQUUsT0FBTyxZQUFZLENBQUM7SUFDckUsSUFBSSxhQUFhLENBQUMsZUFBZSxDQUFDLFdBQVcsQ0FBQztRQUFFLE9BQU8sV0FBVyxDQUFDO0lBQ25FLE9BQU8sRUFBRSxDQUFDO0FBQ1osQ0FBQztBQUVELFNBQVMsY0FBYyxDQUFDLFFBQWdCO0lBQ3RDLElBQUksUUFBUSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUM7UUFBRSxPQUFPLE1BQU0sQ0FBQztJQUM3QyxJQUFJLFFBQVEsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDO1FBQUUsT0FBTyxLQUFLLENBQUM7SUFDM0MsT0FBTyxNQUFNLENBQUM7QUFDaEIsQ0FBQztBQUVELE1BQU0sVUFBVSxnQkFBZ0IsQ0FDOUIsWUFBa0QsRUFDbEQsT0FBZ0M7SUFGbEMsaUJBb0VDO0lBaEVPLElBQUEsS0FBZ0MsUUFBUSxDQUFDLEtBQUssQ0FBQyxFQUE5QyxXQUFXLFFBQUEsRUFBRSxjQUFjLFFBQW1CLENBQUM7SUFDdEQsSUFBTSxnQkFBZ0IsR0FBRyxNQUFNLENBQXVCLElBQUksQ0FBQyxDQUFDO0lBQzVELElBQU0sU0FBUyxHQUFHLE1BQU0s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RyxJQUFJLENBQUM7UUFDNUIsSUFBSSxnQkFBZ0IsQ0FBQyxPQUFPLElBQUksZ0JBQWdCLENBQUMsT0FBTyxDQUFDLEtBQUssS0FBSyxVQUFVLEVBQUUsQ0FBQztZQUM5RSxnQkFBZ0IsQ0FBQyxPQUFPLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDbEMsQ0FBQztRQUNELGNBQWMsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUN4QixDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUM7SUFFUCxPQUFPLEVBQUUsV0FBVyxhQUFBLEVBQUUsY0FBYyxnQkFBQSxFQUFFLGFBQWEsZUFBQSxFQUFFLGVBQWUsaUJBQUEsRUFBRSxDQUFDO0FBQ3pFLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyB1c2VDYWxsYmFjaywgdXNlUmVmLCB1c2VTdGF0ZSB9IGZyb20gJ3JlYWN0JztcblxuaW50ZXJmYWNlIFVzZUF1ZGlvUmVjb3JkZXJSZXR1cm4ge1xuICBpc1JlY29yZGluZzogYm9vbGVhbjtcbiAgc3RhcnRSZWNvcmRpbmc6ICgpID0+IFByb21pc2U8dm9pZD47XG4gIHN0b3BSZWNvcmRpbmc6ICgpID0+IHZvaWQ7XG4gIGNhbmNlbFJlY29yZGluZzogKCkgPT4gdm9pZDtcbn1cblxuZnVuY3Rpb24gZ2V0TWltZVR5cGUoKTogc3RyaW5nIHtcbiAgaWYgKHR5cGVvZiBNZWRpYVJlY29yZGVyID09PSAndW5kZWZpbmVkJykgcmV0dXJuICcnO1xuICBpZiAoTWVkaWFSZWNvcmRlci5pc1R5cGVTdXBwb3J0ZWQoJ2F1ZGlvL3dlYm07Y29kZWNzPW9wdXMnKSkgcmV0dXJuICdhdWRpby93ZWJtO2NvZGVjcz1vcHVzJztcbiAgaWYgKE1lZGlhUmVjb3JkZXIuaXNUeXBlU3VwcG9ydGVkKCdhdWRpby93ZWJtJykpIHJldHVybiAnYXVkaW8vd2VibSc7XG4gIGlmIChNZWRpYVJlY29yZGVyLmlzVHlwZVN1cHBvcnRlZCgnYXVkaW8vbXA0JykpIHJldHVybiAnYXVkaW8vbXA0JztcbiAgcmV0dXJuICcnO1xufVxuXG5mdW5jdGlvbiBmb3JtYXRGcm9tTWltZShtaW1lVHlwZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgaWYgKG1pbWVUeXBlLmluY2x1ZGVzKCd3ZWJtJykpIHJldHVybiAnd2VibSc7XG4gIGlmIChtaW1lVHlwZS5pbmNsdWRlcygnbXA0JykpIHJldHVybiAnbXA0JztcbiAgcmV0dXJuICd3ZWJtJztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHVzZUF1ZGlvUmVjb3JkZXIoXG4gIG9uQXVkaW9SZWFkeTogKGJsb2I6IEJsb2IsIGZvcm1hdDogc3RyaW5nKSA9PiB2b2lkLFxuICBvbkVycm9yPzogKGVycm9yOiBFcnJvcikgPT4gdm9pZCxcbik6IFVzZUF1ZGlvUmVjb3JkZXJSZXR1cm4ge1xuICBjb25zdCBbaXNSZWNvcmRpbmcsIHNldElzUmVjb3JkaW5nXSA9IHVzZVN0YXRlKGZhbHNlKTtcbiAgY29uc3QgbWVkaWFSZWNvcmRlclJlZiA9IHVzZVJlZjxNZWRpYVJlY29yZGVyIHwgbnVsbD4obnVsbCk7XG4gIGNvbnN0IGNodW5rc1JlZiA9IHVzZVJlZjxCbG9iW10+KFtdKTtcbiAgY29uc3Qgc3RyZWFtUmVmID0gdXNlUmVmPE1lZGlhU3RyZWFtIHwgbnVsbD4obnVsbCk7XG4gIGNvbnN0IGNhbmNlbGxlZFJlZiA9IHVzZVJlZihmYWxzZSk7XG5cbiAgY29uc3Qgc3RhcnRSZWNvcmRpbmcgPSB1c2VDYWxsYmFjayhhc3luYyAoKSA9PiB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IG1pbWVUeXBlID0gZ2V0TWltZVR5cGUoKTtcbiAgICAgIGlmICghbWltZVR5cGUpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdBdWRpbyByZWNvcmRpbmcgaXMgbm90IHN1cHBvcnRlZCBpbiB0aGlzIGJyb3dzZXInKTtcbiAgICAgIH1cblxuICAgICAgY2FuY2VsbGVkUmVmLmN1cnJlbnQgPSBmYWxzZTtcbiAgICAgIGNvbnN0IHN0cmVhbSA9IGF3YWl0IG5hdmlnYXRvci5tZWRpYURldmljZXMuZ2V0VXNlck1lZGlhKHsgYXVkaW86IHRydWUgfSk7XG4gICAgICBzdHJlYW1SZWYuY3VycmVudCA9IHN0cmVhbTtcbiAgICAgIGNodW5rc1JlZi5jdXJyZW50ID0gW107XG5cbiAgICAgIGNvbnN0IHJlY29yZGVyID0gbmV3IE1lZGlhUmVjb3JkZXIoc3RyZWFtLCB7IG1pbWVUeXBlIH0pO1xuICAgICAgbWVkaWFSZWNvcmRlclJlZi5jdXJyZW50ID0gcmVjb3JkZXI7XG5cbiAgICAgIHJlY29yZGVyLm9uZGF0YWF2YWlsYWJsZSA9IChlKSA9PiB7XG4gICAgICAgIGlmIChlLmRhdGEuc2l6ZSA+IDApIHtcbiAgICAgICAgICBjaHVua3NSZWYuY3VycmVudC5wdXNoKGUuZGF0YSk7XG4gICAgICAgIH1cbiAgICAgIH07XG5cbiAgICAgIHJlY29yZGVyLm9uc3RvcCA9ICgpID0+IHtcbiAgICAgICAgY29uc3Qgd2FzQ2FuY2VsbGVkID0gY2FuY2VsbGVkUmVmLmN1cnJlbnQ7XG4gICAgICAgIGNvbnN0IGJsb2IgPSBuZXcgQmxvYihjaHVua3NSZWYuY3VycmVudCwgeyB0eXBlOiBtaW1lVHlwZSB9KTtcbiAgICAgICAgY29uc3QgZm9ybWF0ID0gZm9ybWF0RnJvbU1pbWUobWltZVR5cGUpO1xuICAgICAgICBjaHVua3NSZWYuY3VycmVudCA9IFtdO1xuXG4gICAgICAgIHN0cmVhbVJlZi5jdXJyZW50Py5nZXRUcmFja3MoKS5mb3JFYWNoKCh0KSA9PiB0LnN0b3AoKSk7XG4gICAgICAgIHN0cmVhbVJlZi5jdXJyZW50ID0gbnVsbDtcblxuICAgICAgICBpZiAoIXdhc0NhbmNlbGxlZCkge1xuICAgICAgICAgIG9uQXVkaW9SZWFkeShibG9iLCBmb3JtYXQpO1xuICAgICAgICB9XG4gICAgICB9O1xuXG4gICAgICByZWNvcmRlci5zdGFydCgpO1xuICAgICAgc2V0SXNSZWNvcmRpbmcodHJ1ZSk7XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICBvbkVycm9yPy4oZXJyIGluc3RhbmNlb2YgRXJyb3IgPyBlcnIgOiBuZXcgRXJyb3IoU3RyaW5nKGVycikpKTtcbiAgICB9XG4gIH0sIFtvbkF1ZGlvUmVhZHksIG9uRXJyb3JdKTtcblxuICBjb25zdCBzdG9wUmVjb3JkaW5nID0gdXNlQ2FsbGJhY2soKCkgPT4ge1xuICAgIGlmIChtZWRpYVJlY29yZGVyUmVmLmN1cnJlbnQgJiYgbWVkaWFSZWNvcmRlclJlZi5jdXJyZW50LnN0YXRlICE9PSAnaW5hY3RpdmUnKSB7XG4gICAgICBtZWRpYVJlY29yZGVyUmVmLmN1cnJlbnQuc3RvcCgpO1xuICAgIH1cbiAgICBzZXRJc1JlY29yZGluZyhmYWxzZSk7XG4gIH0sIFtdKTtcblxuICBjb25zdCBjYW5jZWxSZWNvcmRpbmcgPSB1c2VDYWxsYmFjaygoKSA9PiB7XG4gICAgY2FuY2VsbGVkUmVmLmN1cnJlbnQgPSB0cnVlO1xuICAgIGlmIChtZWRpYVJlY29yZGVyUmVmLmN1cnJlbnQgJiYgbWVkaWFSZWNvcmRlclJlZi5jdXJyZW50LnN0YXRlICE9PSAnaW5hY3RpdmUnKSB7XG4gICAgICBtZWRpYVJlY29yZGVyUmVmLmN1cnJlbnQuc3RvcCgpO1xuICAgIH1cbiAgICBzZXRJc1JlY29yZGluZyhmYWxzZSk7XG4gIH0sIFtdKTtcblxuICByZXR1cm4geyBpc1JlY29yZGluZywgc3RhcnRSZWNvcmRpbmcsIHN0b3BSZWNvcmRpbmcsIGNhbmNlbFJlY29yZGluZyB9O1xufVxuIl19
|
package/dist/hooks/useChat.d.ts
CHANGED
|
@@ -22,6 +22,7 @@ export declare const useChat: ({ baseUrl, websocketUrl, apiKey, tenant, metadata
|
|
|
22
22
|
messages: ChatMessage[];
|
|
23
23
|
isLoading: boolean;
|
|
24
24
|
sendMessage: (text: string, files?: File[], extraMetadata?: Record<string, any>, reCaptchaToken?: string) => Promise<void>;
|
|
25
|
+
sendAudioMessage: (audioBlob: Blob, audioFormat: string) => Promise<void>;
|
|
25
26
|
uploadFile: (file: File) => Promise<Attachment | null>;
|
|
26
27
|
resetConversation: (reCaptchaToken?: string | undefined) => Promise<void>;
|
|
27
28
|
startConversation: (reCaptchaToken?: string | undefined) => Promise<void>;
|