genassist-chat-react 1.0.3 → 1.0.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.
@@ -16,24 +16,26 @@ export var VoiceInput = function (_a) {
16
16
  };
17
17
  var getButtonContent = function () {
18
18
  if (isLoading) {
19
- return (_jsx(Loader2, { size: 20, color: "#757575", style: {
19
+ return (_jsx(Loader2, { size: 18, color: "#ffffff", style: {
20
20
  animation: 'spin 1s linear infinite',
21
21
  } }));
22
22
  }
23
- return _jsx(Mic, { size: 20, color: isRecording ? '#ff0000' : '#757575' });
23
+ return _jsx(Mic, { size: 18, color: "#ffffff" });
24
24
  };
25
25
  var getTitle = function () {
26
26
  if (isLoading)
27
27
  return 'Connecting...';
28
28
  return isRecording ? 'Stop Recording' : 'Start Recording';
29
29
  };
30
+ var idleBg = (theme === null || theme === void 0 ? void 0 : theme.primaryColor) || '#2962FF';
31
+ var activeBg = '#FF3B30'; // red when recording
30
32
  var buttonStyle = {
31
- backgroundColor: '#ffffff',
32
- color: isRecording ? '#ff0000' : '#757575',
33
+ backgroundColor: isRecording ? activeBg : idleBg,
34
+ color: '#ffffff',
33
35
  border: 'none',
34
- borderRadius: '8px',
35
- width: '48px',
36
- height: '48px',
36
+ borderRadius: '50%',
37
+ width: '36px',
38
+ height: '36px',
37
39
  display: 'flex',
38
40
  alignItems: 'center',
39
41
  justifyContent: 'center',
@@ -41,11 +43,11 @@ export var VoiceInput = function (_a) {
41
43
  outline: 'none',
42
44
  transition: 'all 0.2s ease',
43
45
  flexShrink: 0,
44
- boxShadow: '0 1px 3px rgba(0, 0, 0, 0.05)',
45
- opacity: isLoading ? 0.7 : 1,
46
+ boxShadow: '0 1px 3px rgba(0, 0, 0, 0.08)',
47
+ opacity: isLoading ? 0.9 : 1,
46
48
  };
47
49
  // Keyframe animation for the spinner
48
50
  var spinKeyframes = "\n @keyframes spin {\n from {\n transform: rotate(0deg);\n }\n to {\n transform: rotate(360deg);\n }\n }\n ";
49
51
  return (_jsxs(_Fragment, { children: [_jsx("style", { children: spinKeyframes }), _jsx("button", { type: "button", style: buttonStyle, onClick: handleClick, title: getTitle(), disabled: isLoading, children: getButtonContent() })] }));
50
52
  };
51
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiVm9pY2VJbnB1dC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9jb21wb25lbnRzL1ZvaWNlSW5wdXQudHN4Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFDQSxPQUFPLEVBQUUsR0FBRyxFQUFFLE9BQU8sRUFBRSxNQUFNLGNBQWMsQ0FBQztBQUM1QyxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFjdkQsTUFBTSxDQUFDLElBQU0sVUFBVSxHQUE4QixVQUFDLEVBTXJEO1FBTEMsZUFBZSxxQkFBQSxFQUNmLE9BQU8sYUFBQSxFQUNQLE9BQU8sYUFBQSxFQUNQLE1BQU0sWUFBQSxFQUNOLEtBQUssV0FBQTtJQUVDLElBQUEsS0FBOEMsYUFBYSxDQUFDO1FBQ2hFLE9BQU8sU0FBQTtRQUNQLE1BQU0sUUFBQTtRQUNOLGVBQWUsaUJBQUE7UUFDZixPQUFPLFNBQUE7S0FDUixDQUFDLEVBTE0sV0FBVyxpQkFBQSxFQUFFLFNBQVMsZUFBQSxFQUFFLGVBQWUscUJBSzdDLENBQUM7SUFFSCxJQUFNLFdBQVcsR0FBRyxVQUFDLENBQW1CO1FBQ3RDLENBQUMsQ0FBQyxjQUFjLEVBQUUsQ0FBQztRQUNuQixDQUFDLENBQUMsZUFBZSxFQUFFLENBQUM7UUFDcEIsZUFBZSxFQUFFLENBQUM7SUFDcEIsQ0FBQyxDQUFDO0lBRUYsSUFBTSxnQkFBZ0IsR0FBRztRQUN2QixJQUFJLFNBQVMsRUFBRSxDQUFDO1lBQ2QsT0FBTyxDQUNMLEtBQUMsT0FBTyxJQUNOLElBQUksRUFBRSxFQUFFLEVBQ1IsS0FBSyxFQUFDLFNBQVMsRUFDZixLQUFLLEVBQUU7b0JBQ0wsU0FBUyxFQUFFLHlCQUF5QjtpQkFDckMsR0FDRCxDQUNILENBQUM7UUFDSixDQUFDO1FBQ0QsT0FBTyxLQUFDLEdBQUcsSUFBQyxJQUFJLEVBQUUsRUFBRSxFQUFFLEtBQUssRUFBRSxXQUFXLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsU0FBUyxHQUFJLENBQUM7SUFDdkUsQ0FBQyxDQUFDO0lBRUYsSUFBTSxRQUFRLEdBQUc7UUFDZixJQUFJLFNBQVM7WUFBRSxPQUFPLGVBQWUsQ0FBQztRQUN0QyxPQUFPLFdBQVcsQ0FBQyxDQUFDLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxDQUFDLGlCQUFpQixDQUFDO0lBQzVELENBQUMsQ0FBQztJQUVGLElBQU0sV0FBVyxHQUF3QjtRQUN2QyxlQUFlLEVBQUUsU0FBUztRQUMxQixLQUFLLEVBQUUsV0FBVyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLFNBQVM7UUFDMUMsTUFBTSxFQUFFLE1BQU07UUFDZCxZQUFZLEVBQUUsS0FBSztRQUNuQixLQUFLLEVBQUUsTUFBTTtRQUNiLE1BQU0sRUFBRSxNQUFNO1FBQ2QsT0FBTyxFQUFFLE1BQU07UUFDZixVQUFVLEVBQUUsUUFBUTtRQUNwQixjQUFjLEVBQUUsUUFBUTtRQUN4QixNQUFNLEVBQUUsU0FBUyxDQUFDLENBQUMsQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDLFNBQVM7UUFDN0MsT0FBTyxFQUFFLE1BQU07UUFDZixVQUFVLEVBQUUsZUFBZTtRQUMzQixVQUFVLEVBQUUsQ0FBQztRQUNiLFNBQVMsRUFBRSwrQkFBK0I7UUFDMUMsT0FBTyxFQUFFLFNBQVMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0tBQzdCLENBQUM7SUFFRixxQ0FBcUM7SUFDckMsSUFBTSxhQUFhLEdBQUcsc0pBU3JCLENBQUM7SUFFRixPQUFPLENBQ0wsOEJBQ0UsMEJBQVEsYUFBYSxHQUFTLEVBQzlCLGlCQUNFLElBQUksRUFBQyxRQUFRLEVBQ2IsS0FBSyxFQUFFLFdBQVcsRUFDbEIsT0FBTyxFQUFFLFdBQVcsRUFDcEIsS0FBSyxFQUFFLFFBQVEsRUFBRSxFQUNqQixRQUFRLEVBQUUsU0FBUyxZQUVsQixnQkFBZ0IsRUFBRSxHQUNaLElBQ1IsQ0FDSixDQUFDO0FBQ0osQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IE1pYywgTG9hZGVyMiB9IGZyb20gJ2x1Y2lkZS1yZWFjdCc7XG5pbXBvcnQgeyB1c2VWb2ljZUlucHV0IH0gZnJvbSAnLi4vaG9va3MvdXNlVm9pY2VJbnB1dCc7XG5cbmludGVyZmFjZSBWb2ljZUlucHV0UHJvcHMge1xuICBvblRyYW5zY3JpcHRpb246ICh0ZXh0OiBzdHJpbmcpID0+IHZvaWQ7XG4gIG9uRXJyb3I6IChlcnJvcjogRXJyb3IpID0+IHZvaWQ7XG4gIGJhc2VVcmw6IHN0cmluZztcbiAgYXBpS2V5OiBzdHJpbmc7XG4gIHRoZW1lPzoge1xuICAgIHByaW1hcnlDb2xvcj86IHN0cmluZztcbiAgICBiYWNrZ3JvdW5kQ29sb3I/OiBzdHJpbmc7XG4gICAgZm9udEZhbWlseT86IHN0cmluZztcbiAgfTtcbn1cblxuZXhwb3J0IGNvbnN0IFZvaWNlSW5wdXQ6IFJlYWN0LkZDPFZvaWNlSW5wdXRQcm9wcz4gPSAoe1xuICBvblRyYW5zY3JpcHRpb24sXG4gIG9uRXJyb3IsXG4gIGJhc2VVcmwsXG4gIGFwaUtleSxcbiAgdGhlbWVcbn0pID0+IHtcbiAgY29uc3QgeyBpc1JlY29yZGluZywgaXNMb2FkaW5nLCB0b2dnbGVSZWNvcmRpbmcgfSA9IHVzZVZvaWNlSW5wdXQoe1xuICAgIGJhc2VVcmwsXG4gICAgYXBpS2V5LFxuICAgIG9uVHJhbnNjcmlwdGlvbixcbiAgICBvbkVycm9yLFxuICB9KTtcblxuICBjb25zdCBoYW5kbGVDbGljayA9IChlOiBSZWFjdC5Nb3VzZUV2ZW50KSA9PiB7XG4gICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIGUuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgdG9nZ2xlUmVjb3JkaW5nKCk7XG4gIH07XG5cbiAgY29uc3QgZ2V0QnV0dG9uQ29udGVudCA9ICgpID0+IHtcbiAgICBpZiAoaXNMb2FkaW5nKSB7XG4gICAgICByZXR1cm4gKFxuICAgICAgICA8TG9hZGVyMiBcbiAgICAgICAgICBzaXplPXsyMH0gXG4gICAgICAgICAgY29sb3I9XCIjNzU3NTc1XCIgXG4gICAgICAgICAgc3R5bGU9e3tcbiAgICAgICAgICAgIGFuaW1hdGlvbjogJ3NwaW4gMXMgbGluZWFyIGluZmluaXRlJyxcbiAgICAgICAgICB9fVxuICAgICAgICAvPlxuICAgICAgKTtcbiAgICB9XG4gICAgcmV0dXJuIDxNaWMgc2l6ZT17MjB9IGNvbG9yPXtpc1JlY29yZGluZyA/ICcjZmYwMDAwJyA6ICcjNzU3NTc1J30gLz47XG4gIH07XG5cbiAgY29uc3QgZ2V0VGl0bGUgPSAoKSA9PiB7XG4gICAgaWYgKGlzTG9hZGluZykgcmV0dXJuICdDb25uZWN0aW5nLi4uJztcbiAgICByZXR1cm4gaXNSZWNvcmRpbmcgPyAnU3RvcCBSZWNvcmRpbmcnIDogJ1N0YXJ0IFJlY29yZGluZyc7XG4gIH07XG5cbiAgY29uc3QgYnV0dG9uU3R5bGU6IFJlYWN0LkNTU1Byb3BlcnRpZXMgPSB7XG4gICAgYmFja2dyb3VuZENvbG9yOiAnI2ZmZmZmZicsXG4gICAgY29sb3I6IGlzUmVjb3JkaW5nID8gJyNmZjAwMDAnIDogJyM3NTc1NzUnLFxuICAgIGJvcmRlcjogJ25vbmUnLFxuICAgIGJvcmRlclJhZGl1czogJzhweCcsXG4gICAgd2lkdGg6ICc0OHB4JyxcbiAgICBoZWlnaHQ6ICc0OHB4JyxcbiAgICBkaXNwbGF5OiAnZmxleCcsXG4gICAgYWxpZ25JdGVtczogJ2NlbnRlcicsXG4gICAganVzdGlmeUNvbnRlbnQ6ICdjZW50ZXInLFxuICAgIGN1cnNvcjogaXNMb2FkaW5nID8gJ25vdC1hbGxvd2VkJyA6ICdwb2ludGVyJyxcbiAgICBvdXRsaW5lOiAnbm9uZScsXG4gICAgdHJhbnNpdGlvbjogJ2FsbCAwLjJzIGVhc2UnLFxuICAgIGZsZXhTaHJpbms6IDAsXG4gICAgYm94U2hhZG93OiAnMCAxcHggM3B4IHJnYmEoMCwgMCwgMCwgMC4wNSknLFxuICAgIG9wYWNpdHk6IGlzTG9hZGluZyA/IDAuNyA6IDEsXG4gIH07XG5cbiAgLy8gS2V5ZnJhbWUgYW5pbWF0aW9uIGZvciB0aGUgc3Bpbm5lclxuICBjb25zdCBzcGluS2V5ZnJhbWVzID0gYFxuICAgIEBrZXlmcmFtZXMgc3BpbiB7XG4gICAgICBmcm9tIHtcbiAgICAgICAgdHJhbnNmb3JtOiByb3RhdGUoMGRlZyk7XG4gICAgICB9XG4gICAgICB0byB7XG4gICAgICAgIHRyYW5zZm9ybTogcm90YXRlKDM2MGRlZyk7XG4gICAgICB9XG4gICAgfVxuICBgO1xuXG4gIHJldHVybiAoXG4gICAgPD5cbiAgICAgIDxzdHlsZT57c3BpbktleWZyYW1lc308L3N0eWxlPlxuICAgICAgPGJ1dHRvblxuICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgc3R5bGU9e2J1dHRvblN0eWxlfVxuICAgICAgICBvbkNsaWNrPXtoYW5kbGVDbGlja31cbiAgICAgICAgdGl0bGU9e2dldFRpdGxlKCl9XG4gICAgICAgIGRpc2FibGVkPXtpc0xvYWRpbmd9XG4gICAgICA+XG4gICAgICAgIHtnZXRCdXR0b25Db250ZW50KCl9XG4gICAgICA8L2J1dHRvbj5cbiAgICA8Lz5cbiAgKTtcbn07ICJdfQ==
53
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiVm9pY2VJbnB1dC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9jb21wb25lbnRzL1ZvaWNlSW5wdXQudHN4Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFDQSxPQUFPLEVBQUUsR0FBRyxFQUFFLE9BQU8sRUFBRSxNQUFNLGNBQWMsQ0FBQztBQUM1QyxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFjdkQsTUFBTSxDQUFDLElBQU0sVUFBVSxHQUE4QixVQUFDLEVBTXJEO1FBTEMsZUFBZSxxQkFBQSxFQUNmLE9BQU8sYUFBQSxFQUNQLE9BQU8sYUFBQSxFQUNQLE1BQU0sWUFBQSxFQUNOLEtBQUssV0FBQTtJQUVDLElBQUEsS0FBOEMsYUFBYSxDQUFDO1FBQ2hFLE9BQU8sU0FBQTtRQUNQLE1BQU0sUUFBQTtRQUNOLGVBQWUsaUJBQUE7UUFDZixPQUFPLFNBQUE7S0FDUixDQUFDLEVBTE0sV0FBVyxpQkFBQSxFQUFFLFNBQVMsZUFBQSxFQUFFLGVBQWUscUJBSzdDLENBQUM7SUFFSCxJQUFNLFdBQVcsR0FBRyxVQUFDLENBQW1CO1FBQ3RDLENBQUMsQ0FBQyxjQUFjLEVBQUUsQ0FBQztRQUNuQixDQUFDLENBQUMsZUFBZSxFQUFFLENBQUM7UUFDcEIsZUFBZSxFQUFFLENBQUM7SUFDcEIsQ0FBQyxDQUFDO0lBRUYsSUFBTSxnQkFBZ0IsR0FBRztRQUN2QixJQUFJLFNBQVMsRUFBRSxDQUFDO1lBQ2QsT0FBTyxDQUNMLEtBQUMsT0FBTyxJQUNOLElBQUksRUFBRSxFQUFFLEVBQ1IsS0FBSyxFQUFDLFNBQVMsRUFDZixLQUFLLEVBQUU7b0JBQ0wsU0FBUyxFQUFFLHlCQUF5QjtpQkFDckMsR0FDRCxDQUNILENBQUM7UUFDSixDQUFDO1FBQ0QsT0FBTyxLQUFDLEdBQUcsSUFBQyxJQUFJLEVBQUUsRUFBRSxFQUFFLEtBQUssRUFBQyxTQUFTLEdBQUcsQ0FBQztJQUMzQyxDQUFDLENBQUM7SUFFRixJQUFNLFFBQVEsR0FBRztRQUNmLElBQUksU0FBUztZQUFFLE9BQU8sZUFBZSxDQUFDO1FBQ3RDLE9BQU8sV0FBVyxDQUFDLENBQUMsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLENBQUMsaUJBQWlCLENBQUM7SUFDNUQsQ0FBQyxDQUFDO0lBRUYsSUFBTSxNQUFNLEdBQUcsQ0FBQSxLQUFLLGFBQUwsS0FBSyx1QkFBTCxLQUFLLENBQUUsWUFBWSxLQUFJLFNBQVMsQ0FBQztJQUNoRCxJQUFNLFFBQVEsR0FBRyxTQUFTLENBQUMsQ0FBQyxxQkFBcUI7SUFDakQsSUFBTSxXQUFXLEdBQXdCO1FBQ3ZDLGVBQWUsRUFBRSxXQUFXLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsTUFBTTtRQUNoRCxLQUFLLEVBQUUsU0FBUztRQUNoQixNQUFNLEVBQUUsTUFBTTtRQUNkLFlBQVksRUFBRSxLQUFLO1FBQ25CLEtBQUssRUFBRSxNQUFNO1FBQ2IsTUFBTSxFQUFFLE1BQU07UUFDZCxPQUFPLEVBQUUsTUFBTTtRQUNmLFVBQVUsRUFBRSxRQUFRO1FBQ3BCLGNBQWMsRUFBRSxRQUFRO1FBQ3hCLE1BQU0sRUFBRSxTQUFTLENBQUMsQ0FBQyxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUMsU0FBUztRQUM3QyxPQUFPLEVBQUUsTUFBTTtRQUNmLFVBQVUsRUFBRSxlQUFlO1FBQzNCLFVBQVUsRUFBRSxDQUFDO1FBQ2IsU0FBUyxFQUFFLCtCQUErQjtRQUMxQyxPQUFPLEVBQUUsU0FBUyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7S0FDN0IsQ0FBQztJQUVGLHFDQUFxQztJQUNyQyxJQUFNLGFBQWEsR0FBRyxzSkFTckIsQ0FBQztJQUVGLE9BQU8sQ0FDTCw4QkFDRSwwQkFBUSxhQUFhLEdBQVMsRUFDOUIsaUJBQ0UsSUFBSSxFQUFDLFFBQVEsRUFDYixLQUFLLEVBQUUsV0FBVyxFQUNsQixPQUFPLEVBQUUsV0FBVyxFQUNwQixLQUFLLEVBQUUsUUFBUSxFQUFFLEVBQ2pCLFFBQVEsRUFBRSxTQUFTLFlBRWxCLGdCQUFnQixFQUFFLEdBQ1osSUFDUixDQUNKLENBQUM7QUFDSixDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgTWljLCBMb2FkZXIyIH0gZnJvbSAnbHVjaWRlLXJlYWN0JztcbmltcG9ydCB7IHVzZVZvaWNlSW5wdXQgfSBmcm9tICcuLi9ob29rcy91c2VWb2ljZUlucHV0JztcblxuaW50ZXJmYWNlIFZvaWNlSW5wdXRQcm9wcyB7XG4gIG9uVHJhbnNjcmlwdGlvbjogKHRleHQ6IHN0cmluZykgPT4gdm9pZDtcbiAgb25FcnJvcjogKGVycm9yOiBFcnJvcikgPT4gdm9pZDtcbiAgYmFzZVVybDogc3RyaW5nO1xuICBhcGlLZXk6IHN0cmluZztcbiAgdGhlbWU/OiB7XG4gICAgcHJpbWFyeUNvbG9yPzogc3RyaW5nO1xuICAgIGJhY2tncm91bmRDb2xvcj86IHN0cmluZztcbiAgICBmb250RmFtaWx5Pzogc3RyaW5nO1xuICB9O1xufVxuXG5leHBvcnQgY29uc3QgVm9pY2VJbnB1dDogUmVhY3QuRkM8Vm9pY2VJbnB1dFByb3BzPiA9ICh7XG4gIG9uVHJhbnNjcmlwdGlvbixcbiAgb25FcnJvcixcbiAgYmFzZVVybCxcbiAgYXBpS2V5LFxuICB0aGVtZVxufSkgPT4ge1xuICBjb25zdCB7IGlzUmVjb3JkaW5nLCBpc0xvYWRpbmcsIHRvZ2dsZVJlY29yZGluZyB9ID0gdXNlVm9pY2VJbnB1dCh7XG4gICAgYmFzZVVybCxcbiAgICBhcGlLZXksXG4gICAgb25UcmFuc2NyaXB0aW9uLFxuICAgIG9uRXJyb3IsXG4gIH0pO1xuXG4gIGNvbnN0IGhhbmRsZUNsaWNrID0gKGU6IFJlYWN0Lk1vdXNlRXZlbnQpID0+IHtcbiAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgZS5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICB0b2dnbGVSZWNvcmRpbmcoKTtcbiAgfTtcblxuICBjb25zdCBnZXRCdXR0b25Db250ZW50ID0gKCkgPT4ge1xuICAgIGlmIChpc0xvYWRpbmcpIHtcbiAgICAgIHJldHVybiAoXG4gICAgICAgIDxMb2FkZXIyIFxuICAgICAgICAgIHNpemU9ezE4fSBcbiAgICAgICAgICBjb2xvcj1cIiNmZmZmZmZcIiBcbiAgICAgICAgICBzdHlsZT17e1xuICAgICAgICAgICAgYW5pbWF0aW9uOiAnc3BpbiAxcyBsaW5lYXIgaW5maW5pdGUnLFxuICAgICAgICAgIH19XG4gICAgICAgIC8+XG4gICAgICApO1xuICAgIH1cbiAgICByZXR1cm4gPE1pYyBzaXplPXsxOH0gY29sb3I9XCIjZmZmZmZmXCIgLz47XG4gIH07XG5cbiAgY29uc3QgZ2V0VGl0bGUgPSAoKSA9PiB7XG4gICAgaWYgKGlzTG9hZGluZykgcmV0dXJuICdDb25uZWN0aW5nLi4uJztcbiAgICByZXR1cm4gaXNSZWNvcmRpbmcgPyAnU3RvcCBSZWNvcmRpbmcnIDogJ1N0YXJ0IFJlY29yZGluZyc7XG4gIH07XG5cbiAgY29uc3QgaWRsZUJnID0gdGhlbWU/LnByaW1hcnlDb2xvciB8fCAnIzI5NjJGRic7XG4gIGNvbnN0IGFjdGl2ZUJnID0gJyNGRjNCMzAnOyAvLyByZWQgd2hlbiByZWNvcmRpbmdcbiAgY29uc3QgYnV0dG9uU3R5bGU6IFJlYWN0LkNTU1Byb3BlcnRpZXMgPSB7XG4gICAgYmFja2dyb3VuZENvbG9yOiBpc1JlY29yZGluZyA/IGFjdGl2ZUJnIDogaWRsZUJnLFxuICAgIGNvbG9yOiAnI2ZmZmZmZicsXG4gICAgYm9yZGVyOiAnbm9uZScsXG4gICAgYm9yZGVyUmFkaXVzOiAnNTAlJyxcbiAgICB3aWR0aDogJzM2cHgnLFxuICAgIGhlaWdodDogJzM2cHgnLFxuICAgIGRpc3BsYXk6ICdmbGV4JyxcbiAgICBhbGlnbkl0ZW1zOiAnY2VudGVyJyxcbiAgICBqdXN0aWZ5Q29udGVudDogJ2NlbnRlcicsXG4gICAgY3Vyc29yOiBpc0xvYWRpbmcgPyAnbm90LWFsbG93ZWQnIDogJ3BvaW50ZXInLFxuICAgIG91dGxpbmU6ICdub25lJyxcbiAgICB0cmFuc2l0aW9uOiAnYWxsIDAuMnMgZWFzZScsXG4gICAgZmxleFNocmluazogMCxcbiAgICBib3hTaGFkb3c6ICcwIDFweCAzcHggcmdiYSgwLCAwLCAwLCAwLjA4KScsXG4gICAgb3BhY2l0eTogaXNMb2FkaW5nID8gMC45IDogMSxcbiAgfTtcblxuICAvLyBLZXlmcmFtZSBhbmltYXRpb24gZm9yIHRoZSBzcGlubmVyXG4gIGNvbnN0IHNwaW5LZXlmcmFtZXMgPSBgXG4gICAgQGtleWZyYW1lcyBzcGluIHtcbiAgICAgIGZyb20ge1xuICAgICAgICB0cmFuc2Zvcm06IHJvdGF0ZSgwZGVnKTtcbiAgICAgIH1cbiAgICAgIHRvIHtcbiAgICAgICAgdHJhbnNmb3JtOiByb3RhdGUoMzYwZGVnKTtcbiAgICAgIH1cbiAgICB9XG4gIGA7XG5cbiAgcmV0dXJuIChcbiAgICA8PlxuICAgICAgPHN0eWxlPntzcGluS2V5ZnJhbWVzfTwvc3R5bGU+XG4gICAgICA8YnV0dG9uXG4gICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICBzdHlsZT17YnV0dG9uU3R5bGV9XG4gICAgICAgIG9uQ2xpY2s9e2hhbmRsZUNsaWNrfVxuICAgICAgICB0aXRsZT17Z2V0VGl0bGUoKX1cbiAgICAgICAgZGlzYWJsZWQ9e2lzTG9hZGluZ31cbiAgICAgID5cbiAgICAgICAge2dldEJ1dHRvbkNvbnRlbnQoKX1cbiAgICAgIDwvYnV0dG9uPlxuICAgIDwvPlxuICApO1xufTsgXG4iXX0=
@@ -2,12 +2,13 @@ import { ChatMessage, Attachment } from '../types';
2
2
  export interface UseChatProps {
3
3
  baseUrl: string;
4
4
  apiKey: string;
5
+ tenant?: string | undefined;
5
6
  metadata?: Record<string, any>;
6
7
  onError?: (error: Error) => void;
7
8
  onTakeover?: () => void;
8
9
  onFinalize?: () => void;
9
10
  }
10
- export declare const useChat: ({ baseUrl, apiKey, metadata, onError, onTakeover, onFinalize }: UseChatProps) => {
11
+ export declare const useChat: ({ baseUrl, apiKey, tenant, metadata, onError, onTakeover, onFinalize }: UseChatProps) => {
11
12
  messages: ChatMessage[];
12
13
  isLoading: boolean;
13
14
  sendMessage: (text: string, files?: File[]) => Promise<void>;
@@ -20,4 +21,9 @@ export declare const useChat: ({ baseUrl, apiKey, metadata, onError, onTakeover,
20
21
  isTakenOver: boolean;
21
22
  isFinalized: boolean;
22
23
  isAgentTyping: boolean;
24
+ addFeedback: (messageId: string, value: "good" | "bad", feedbackMessage?: string) => Promise<void>;
25
+ welcomeTitle: string | null;
26
+ welcomeImageUrl: string | null;
27
+ thinkingPhrases: string[];
28
+ thinkingDelayMs: number;
23
29
  };
@@ -57,7 +57,7 @@ var __spreadArray = (this && this.__spreadArray) || function (to, from, pack) {
57
57
  import { useState, useEffect, useCallback, useRef } from 'react';
58
58
  import { ChatService } from '../services/chatService';
59
59
  export var useChat = function (_a) {
60
- var baseUrl = _a.baseUrl, apiKey = _a.apiKey, metadata = _a.metadata, onError = _a.onError, onTakeover = _a.onTakeover, onFinalize = _a.onFinalize;
60
+ var baseUrl = _a.baseUrl, apiKey = _a.apiKey, tenant = _a.tenant, metadata = _a.metadata, onError = _a.onError, onTakeover = _a.onTakeover, onFinalize = _a.onFinalize;
61
61
  var _b = useState(function () {
62
62
  try {
63
63
  var storedMessages = localStorage.getItem('chatMessages');
@@ -75,11 +75,16 @@ export var useChat = function (_a) {
75
75
  var chatServiceRef = useRef(null);
76
76
  var _g = useState(null), conversationId = _g[0], setConversationId = _g[1];
77
77
  var _h = useState([]), possibleQueries = _h[0], setPossibleQueries = _h[1];
78
- var _j = useState(false), isTakenOver = _j[0], setIsTakenOver = _j[1];
79
- var _k = useState(false), isFinalized = _k[0], setIsFinalized = _k[1];
78
+ var _j = useState(null), welcomeTitle = _j[0], setWelcomeTitle = _j[1];
79
+ var _k = useState(null), welcomeImageUrl = _k[0], setWelcomeImageUrl = _k[1];
80
+ var _l = useState([]), thinkingPhrases = _l[0], setThinkingPhrases = _l[1];
81
+ var _m = useState(1000), thinkingDelayMs = _m[0], setThinkingDelayMs = _m[1];
82
+ var _o = useState(false), isTakenOver = _o[0], setIsTakenOver = _o[1];
83
+ var _p = useState(false), isFinalized = _p[0], setIsFinalized = _p[1];
80
84
  // Initialize chat service
81
85
  useEffect(function () {
82
- chatServiceRef.current = new ChatService(baseUrl, apiKey, metadata);
86
+ var _a, _b, _c, _d, _e, _f;
87
+ chatServiceRef.current = new ChatService(baseUrl, apiKey, metadata, tenant);
83
88
  chatServiceRef.current.setMessageHandler(function (message) {
84
89
  var normalizedMessage = __assign(__assign({}, message), { create_time: (!message.create_time || isNaN(message.create_time))
85
90
  ? Math.floor(Date.now() / 1000)
@@ -122,6 +127,22 @@ export var useChat = function (_a) {
122
127
  chatServiceRef.current.connectWebSocket();
123
128
  }
124
129
  }
130
+ // Pull initial static data
131
+ if (chatServiceRef.current) {
132
+ var queries = ((_b = (_a = chatServiceRef.current).getPossibleQueries) === null || _b === void 0 ? void 0 : _b.call(_a)) || [];
133
+ if (queries.length)
134
+ setPossibleQueries(queries);
135
+ var welcome = (_d = (_c = chatServiceRef.current).getWelcomeData) === null || _d === void 0 ? void 0 : _d.call(_c);
136
+ if (welcome) {
137
+ setWelcomeTitle(welcome.title || null);
138
+ setWelcomeImageUrl(welcome.imageUrl || null);
139
+ }
140
+ var thinking = (_f = (_e = chatServiceRef.current).getThinkingConfig) === null || _f === void 0 ? void 0 : _f.call(_e);
141
+ if (thinking) {
142
+ setThinkingPhrases(thinking.phrases || []);
143
+ setThinkingDelayMs(thinking.delayMs || 1000);
144
+ }
145
+ }
125
146
  // Cleanup
126
147
  return function () {
127
148
  if (chatServiceRef.current) {
@@ -139,7 +160,7 @@ export var useChat = function (_a) {
139
160
  }, [messages]);
140
161
  // Reset conversation
141
162
  var resetConversation = useCallback(function () { return __awaiter(void 0, void 0, void 0, function () {
142
- var convId, queries, error_1;
163
+ var convId, queries, welcome, thinking, error_1;
143
164
  return __generator(this, function (_a) {
144
165
  switch (_a.label) {
145
166
  case 0:
@@ -150,8 +171,13 @@ export var useChat = function (_a) {
150
171
  setIsLoading(true);
151
172
  setMessages([]);
152
173
  setPossibleQueries([]);
174
+ setWelcomeTitle(null);
175
+ setWelcomeImageUrl(null);
176
+ setThinkingPhrases([]);
177
+ setThinkingDelayMs(1000);
153
178
  localStorage.removeItem('chatMessages');
154
179
  setIsFinalized(false);
180
+ setIsTakenOver(false);
155
181
  setIsAgentTyping(false);
156
182
  _a.label = 1;
157
183
  case 1:
@@ -170,6 +196,17 @@ export var useChat = function (_a) {
170
196
  setPossibleQueries(queries);
171
197
  }
172
198
  }
199
+ // welcome and thinking data
200
+ if (chatServiceRef.current.getWelcomeData) {
201
+ welcome = chatServiceRef.current.getWelcomeData();
202
+ setWelcomeTitle(welcome.title || null);
203
+ setWelcomeImageUrl(welcome.imageUrl || null);
204
+ }
205
+ if (chatServiceRef.current.getThinkingConfig) {
206
+ thinking = chatServiceRef.current.getThinkingConfig();
207
+ setThinkingPhrases(thinking.phrases || []);
208
+ setThinkingDelayMs(thinking.delayMs || 1000);
209
+ }
173
210
  return [3 /*break*/, 5];
174
211
  case 3:
175
212
  error_1 = _a.sent();
@@ -247,8 +284,10 @@ export var useChat = function (_a) {
247
284
  uploadedFiles = files.map(function (f) { return preloadedAttachments.find(function (pa) { return pa.name === f.name && pa.size === f.size; }); }).filter(Boolean);
248
285
  newAttachments.push.apply(newAttachments, uploadedFiles);
249
286
  }
250
- // Start typing immediately when user sends
251
- setIsAgentTyping(true);
287
+ // Start typing immediately when user sends, unless conversation is taken over by a human
288
+ if (!isTakenOver) {
289
+ setIsAgentTyping(true);
290
+ }
252
291
  return [4 /*yield*/, chatServiceRef.current.sendMessage(text, newAttachments)];
253
292
  case 2:
254
293
  _a.sent();
@@ -271,9 +310,9 @@ export var useChat = function (_a) {
271
310
  }
272
311
  });
273
312
  });
274
- }, [onError, preloadedAttachments]);
313
+ }, [onError, preloadedAttachments, isTakenOver]);
275
314
  var startConversation = useCallback(function () { return __awaiter(void 0, void 0, void 0, function () {
276
- var convId, queries, error_4;
315
+ var convId, queries, welcome, thinking, error_4;
277
316
  return __generator(this, function (_a) {
278
317
  switch (_a.label) {
279
318
  case 0:
@@ -290,6 +329,7 @@ export var useChat = function (_a) {
290
329
  setPossibleQueries([]);
291
330
  localStorage.removeItem('chatMessages');
292
331
  setIsFinalized(false);
332
+ setIsTakenOver(false);
293
333
  setIsAgentTyping(false);
294
334
  chatServiceRef.current.resetConversation();
295
335
  return [4 /*yield*/, chatServiceRef.current.startConversation()];
@@ -303,6 +343,16 @@ export var useChat = function (_a) {
303
343
  setPossibleQueries(queries);
304
344
  }
305
345
  }
346
+ if (chatServiceRef.current.getWelcomeData) {
347
+ welcome = chatServiceRef.current.getWelcomeData();
348
+ setWelcomeTitle(welcome.title || null);
349
+ setWelcomeImageUrl(welcome.imageUrl || null);
350
+ }
351
+ if (chatServiceRef.current.getThinkingConfig) {
352
+ thinking = chatServiceRef.current.getThinkingConfig();
353
+ setThinkingPhrases(thinking.phrases || []);
354
+ setThinkingDelayMs(thinking.delayMs || 1000);
355
+ }
306
356
  return [3 /*break*/, 5];
307
357
  case 3:
308
358
  error_4 = _a.sent();
@@ -322,6 +372,45 @@ export var useChat = function (_a) {
322
372
  }
323
373
  });
324
374
  }); }, [onError]);
375
+ // Add feedback to an agent message
376
+ var addFeedback = useCallback(function (messageId, value, feedbackMessage) { return __awaiter(void 0, void 0, void 0, function () {
377
+ var newFeedback_1, error_5;
378
+ return __generator(this, function (_a) {
379
+ switch (_a.label) {
380
+ case 0:
381
+ if (!chatServiceRef.current || !conversationId) {
382
+ console.error('Cannot add feedback, conversation not ready');
383
+ return [2 /*return*/];
384
+ }
385
+ _a.label = 1;
386
+ case 1:
387
+ _a.trys.push([1, 3, , 4]);
388
+ return [4 /*yield*/, chatServiceRef.current.addFeedback(messageId, value, feedbackMessage)];
389
+ case 2:
390
+ _a.sent();
391
+ newFeedback_1 = {
392
+ feedback: value,
393
+ feedback_message: feedbackMessage,
394
+ feedback_timestamp: new Date().toISOString(),
395
+ };
396
+ setMessages(function (prev) {
397
+ return prev.map(function (m) {
398
+ return m.message_id === messageId
399
+ ? __assign(__assign({}, m), { feedback: __spreadArray(__spreadArray([], (m.feedback || []), true), [newFeedback_1], false) }) : m;
400
+ });
401
+ });
402
+ return [3 /*break*/, 4];
403
+ case 3:
404
+ error_5 = _a.sent();
405
+ console.error('Failed to add feedback:', error_5);
406
+ if (onError) {
407
+ onError(error_5);
408
+ }
409
+ return [3 /*break*/, 4];
410
+ case 4: return [2 /*return*/];
411
+ }
412
+ });
413
+ }); }, [conversationId, onError]);
325
414
  return {
326
415
  messages: messages,
327
416
  isLoading: isLoading,
@@ -335,6 +424,11 @@ export var useChat = function (_a) {
335
424
  isTakenOver: isTakenOver,
336
425
  isFinalized: isFinalized,
337
426
  isAgentTyping: isAgentTyping,
427
+ addFeedback: addFeedback,
428
+ welcomeTitle: welcomeTitle,
429
+ welcomeImageUrl: welcomeImageUrl,
430
+ thinkingPhrases: thinkingPhrases,
431
+ thinkingDelayMs: thinkingDelayMs,
338
432
  };
339
433
  };
340
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXNlQ2hhdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9ob29rcy91c2VDaGF0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUEsT0FBTyxFQUFFLFFBQVEsRUFBRSxTQUFTLEVBQUUsV0FBVyxFQUFFLE1BQU0sRUFBRSxNQUFNLE9BQU8sQ0FBQztBQUNqRSxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFZdEQsTUFBTSxDQUFDLElBQU0sT0FBTyxHQUFHLFVBQUMsRUFBNEU7UUFBMUUsT0FBTyxhQUFBLEVBQUUsTUFBTSxZQUFBLEVBQUUsUUFBUSxjQUFBLEVBQUUsT0FBTyxhQUFBLEVBQUUsVUFBVSxnQkFBQSxFQUFFLFVBQVUsZ0JBQUE7SUFDNUUsSUFBQSxLQUEwQixRQUFRLENBQWdCO1FBQ3RELElBQUksQ0FBQztZQUNILElBQU0sY0FBYyxHQUFHLFlBQVksQ0FBQyxPQUFPLENBQUMsY0FBYyxDQUFDLENBQUM7WUFDNUQsT0FBTyxjQUFjLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsY0FBYyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztRQUMxRCxDQUFDO1FBQUMsT0FBTyxLQUFLLEVBQUUsQ0FBQztZQUNmLE9BQU8sQ0FBQyxLQUFLLENBQUMsMkNBQTJDLEVBQUUsS0FBSyxDQUFDLENBQUM7WUFDbEUsT0FBTyxFQUFFLENBQUM7UUFDWixDQUFDO0lBQ0gsQ0FBQyxDQUFDLEVBUkssUUFBUSxRQUFBLEVBQUUsV0FBVyxRQVExQixDQUFDO0lBQ0csSUFBQSxLQUE0QixRQUFRLENBQVUsS0FBSyxDQUFDLEVBQW5ELFNBQVMsUUFBQSxFQUFFLFlBQVksUUFBNEIsQ0FBQztJQUNyRCxJQUFBLEtBQWtELFFBQVEsQ0FBZSxFQUFFLENBQUMsRUFBM0Usb0JBQW9CLFFBQUEs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TixPQUFPLENBQUMsS0FBSyxDQUFDLCtCQUErQixFQUFFLE9BQUssQ0FBQyxDQUFDO29CQUN4RCxDQUFDOzs7b0JBRUQsWUFBWSxDQUFDLEtBQUssQ0FBQyxDQUFDOzs7OztTQUV2QixFQUFFLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQztJQUVkLE9BQU87UUFDTCxRQUFRLFVBQUE7UUFDUixTQUFTLFdBQUE7UUFDVCxXQUFXLGFBQUE7UUFDWCxVQUFVLFlBQUE7UUFDVixpQkFBaUIsbUJBQUE7UUFDakIsaUJBQWlCLG1CQUFBO1FBQ2pCLGVBQWUsaUJBQUE7UUFDZixjQUFjLGdCQUFBO1FBQ2QsZUFBZSxpQkFBQTtRQUNmLFdBQVcsYUFBQTtRQUNYLFdBQVcsYUFBQTtRQUNYLGFBQWEsZUFBQTtLQUNkLENBQUM7QUFDSixDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyB1c2VTdGF0ZSwgdXNlRWZmZWN0LCB1c2VDYWxsYmFjaywgdXNlUmVmIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgQ2hhdFNlcnZpY2UgfSBmcm9tICcuLi9zZXJ2aWNlcy9jaGF0U2VydmljZSc7XG5pbXBvcnQgeyBDaGF0TWVzc2FnZSwgQXR0YWNobWVudCB9IGZyb20gJy4uL3R5cGVzJztcblxuZXhwb3J0IGludGVyZmFjZSBVc2VDaGF0UHJvcHMge1xuICBiYXNlVXJsOiBzdHJpbmc7XG4gIGFwaUtleTogc3RyaW5nO1xuICBtZXRhZGF0YT86IFJlY29yZDxzdHJpbmcsIGFueT47XG4gIG9uRXJyb3I/OiAoZXJyb3I6IEVycm9yKSA9PiB2b2lkO1xuICBvblRha2VvdmVyPzogKCkgPT4gdm9pZDtcbiAgb25GaW5hbGl6ZT86ICgpID0+IHZvaWQ7XG59XG5cbmV4cG9ydCBjb25zdCB1c2VDaGF0ID0gKHsgYmFzZVVybCwgYXBpS2V5LCBtZXRhZGF0YSwgb25FcnJvciwgb25UYWtlb3Zlciwgb25GaW5hbGl6ZSB9OiBVc2VDaGF0UHJvcHMpID0+IHtcbiAgY29uc3QgW21lc3NhZ2VzLCBzZXRNZXNzYWdlc10gPSB1c2VTdGF0ZTxDaGF0TWVzc2FnZVtdPigoKSA9PiB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHN0b3JlZE1lc3NhZ2VzID0gbG9jYWxTdG9yYWdlLmdldEl0ZW0oJ2NoYXRNZXNzYWdlcycpO1xuICAgICAgcmV0dXJuIHN0b3JlZE1lc3NhZ2VzID8gSlNPTi5wYXJzZShzdG9yZWRNZXNzYWdlcykgOiBbXTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgY29uc29sZS5lcnJvcignRXJyb3IgbG9hZGluZyBtZXNzYWdlcyBmcm9tIGxvY2FsU3RvcmFnZTonLCBlcnJvcik7XG4gICAgICByZXR1cm4gW107XG4gICAgfVxuICB9KTtcbiAgY29uc3QgW2lzTG9hZGluZywgc2V0SXNMb2FkaW5nXSA9IHVzZVN0YXRlPGJvb2xlYW4+KGZhbHNlKTtcbiAgY29uc3QgW3ByZWxvYWRlZEF0dGFjaG1lbnRzLCBzZXRQcmVsb2FkZWRBdHRhY2htZW50c10gPSB1c2VTdGF0ZTxBdHRhY2htZW50W10+KFtdKTtcbiAgY29uc3QgW2Nvbm5lY3Rpb25TdGF0ZSwgc2V0Q29ubmVjdGlvblN0YXRlXSA9IHVzZVN0YXRlPCdjb25uZWN0aW5nJyB8ICdjb25uZWN0ZWQnIHwgJ2Rpc2Nvbm5lY3RlZCc+KCdkaXNjb25uZWN0ZWQnKTtcbiAgY29uc3QgW2lzQWdlbnRUeXBpbmcsIHNldElzQWdlbnRUeXBpbmddID0gdXNlU3RhdGU8Ym9vbGVhbj4oZmFsc2UpO1xuICBjb25zdCBjaGF0U2VydmljZVJlZiA9IHVzZVJlZjxDaGF0U2VydmljZSB8IG51bGw+KG51bGwpO1xuICBjb25zdCBbY29udmVyc2F0aW9uSWQsIHNldENvbnZlcnNhdGlvbklkXSA9IHVzZVN0YXRlPHN0cmluZyB8IG51bGw+KG51bGwpO1xuICBjb25zdCBbcG9zc2libGVRdWVyaWVzLCBzZXRQb3NzaWJsZVF1ZXJpZXNdID0gdXNlU3RhdGU8c3RyaW5nW10+KFtdKTtcbiAgY29uc3QgW2lzVGFrZW5PdmVyLCBzZXRJc1Rha2VuT3Zlcl0gPSB1c2VTdGF0ZTxib29sZWFuPihmYWxzZSk7XG4gIGNvbnN0IFtpc0ZpbmFsaXplZCwgc2V0SXNGaW5hbGl6ZWRdID0gdXNlU3RhdGU8Ym9vbGVhbj4oZmFsc2UpO1xuXG4gIC8vIEluaXRpYWxpemUgY2hhdCBzZXJ2aWNlXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgY2hhdFNlcnZpY2VSZWYuY3VycmVudCA9IG5ldyBDaGF0U2VydmljZShiYXNlVXJsLCBhcGlLZXksIG1ldGFkYXRhKTtcbiAgICBcbiAgICBjaGF0U2VydmljZVJlZi5jdXJyZW50LnNldE1lc3NhZ2VIYW5kbGVyKChtZXNzYWdlOiBDaGF0TWVzc2FnZSkgPT4ge1xuICAgICAgY29uc3Qgbm9ybWFsaXplZE1lc3NhZ2U6IENoYXRNZXNzYWdlID0ge1xuICAgICAgICAuLi5tZXNzYWdlLFxuICAgICAgICBjcmVhdGVfdGltZTogKCFtZXNzYWdlLmNyZWF0ZV90aW1lIHx8IGlzTmFOKG1lc3NhZ2UuY3JlYXRlX3RpbWUpKVxuICAgICAgICAgID8gTWF0aC5mbG9vcihEYXRlLm5vdygpIC8gMTAwMClcbiAgICAgICAgICA6IG1lc3NhZ2UuY3JlYXRlX3RpbWUsXG4gICAgICB9O1xuXG4gICAgICBzZXRNZXNzYWdlcyhwcmV2TWVzc2FnZXMgPT4gWy4uLnByZXZNZXNzYWdlcywgbm9ybWFsaXplZE1lc3NhZ2VdKTtcbiAgICAgIC8vIFN0b3AgdHlwaW5nIGFuaW1hdGlvbiB3aGVuIGFnZW50IG9yIHN5c3RlbSBtZXNzYWdlIGFycml2ZXNcbiAgICAgIGlmIChub3JtYWxpemVkTWVzc2FnZS5zcGVha2VyID09PSAnYWdlbnQnIHx8IG5vcm1hbGl6ZWRNZXNzYWdlLnNwZWFrZXIgPT09ICdzcGVjaWFsJykge1xuICAgICAgICBzZXRJc0FnZW50VHlwaW5nKGZhbHNlKTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIGNoYXRTZXJ2aWNlUmVmLmN1cnJlbnQuc2V0VGFrZW92ZXJIYW5kbGVyKCgpID0+IHtcbiAgICAgIHNldElzVGFrZW5PdmVyKHRydWUpO1xuICAgICAgc2V0SXNBZ2VudFR5cGluZyhmYWxzZSk7XG4gICAgICBpZiAob25UYWtlb3Zlcikge1xuICAgICAgICBvblRha2VvdmVyKCk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBjaGF0U2VydmljZVJlZi5jdXJyZW50LnNldEZpbmFsaXplZEhhbmRsZXIoKCkgPT4ge1xuICAgICAgc2V0SXNGaW5hbGl6ZWQodHJ1ZSk7XG4gICAgICBzZXRJc0FnZW50VHlwaW5nKGZhbHNlKTtcbiAgICAgIGlmIChvbkZpbmFsaXplKSB7XG4gICAgICAgIG9uRmluYWxpemUoKTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIC8vIENsZWFyIHR5cGluZyBhbmltYXRpb24gaWYgYWdlbnQgaXMgbm90IGNvbm5lY3RlZFxuICAgIGNoYXRTZXJ2aWNlUmVmLmN1cnJlbnQuc2V0Q29ubmVjdGlvblN0YXRlSGFuZGxlcigoc3RhdGUpID0+IHtcbiAgICAgIHNldENvbm5lY3Rpb25TdGF0ZShzdGF0ZSk7XG4gICAgICBpZiAoc3RhdGUgIT09ICdjb25uZWN0ZWQnKSB7XG4gICAgICAgIHNldElzQWdlbnRUeXBpbmcoZmFsc2UpO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgLy8gQ2hlY2sgZm9yIGEgc2F2ZWQgY29udmVyc2F0aW9uIGFuZCBjb25uZWN0IHRvIGl0XG4gICAgY29uc3QgY29udklkID0gY2hhdFNlcnZpY2VSZWYuY3VycmVudC5nZXRDb252ZXJzYXRpb25JZCgpO1xuICAgIGlmIChjb252SWQpIHtcbiAgICAgICAgc2V0Q29udmVyc2F0aW9uSWQoY29udklkKTtcbiAgICAgICAgaWYgKGNoYXRTZXJ2aWNlUmVmLmN1cnJlbnQuaXNDb252ZXJzYXRpb25GaW5hbGl6ZWQoKSkge1xuICAgICAgICAgIHNldElzRmluYWxpemVkKHRydWUpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGNoYXRTZXJ2aWNlUmVmLmN1cnJlbnQuY29ubmVjdFdlYlNvY2tldCgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLy8gQ2xlYW51cFxuICAgIHJldHVybiAoKSA9PiB7XG4gICAgICBpZiAoY2hhdFNlcnZpY2VSZWYuY3VycmVudCkge1xuICAgICAgICBjaGF0U2VydmljZVJlZi5jdXJyZW50LmRpc2Nvbm5lY3QoKTtcbiAgICAgIH1cbiAgICB9O1xuICB9LCBbYmFzZVVybCwgYXBpS2V5LCBtZXRhZGF0YSwgb25FcnJvciwgb25UYWtlb3Zlciwgb25GaW5hbGl6ZV0pO1xuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgdHJ5IHtcbiAgICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKCdjaGF0TWVzc2FnZXMnLCBKU09OLnN0cmluZ2lmeShtZXNzYWdlcykpO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBjb25zb2xlLmVycm9yKCdFcnJvciBzYXZpbmcgbWVzc2FnZXMgdG8gbG9jYWxTdG9yYWdlOicsIGVycm9yKTtcbiAgICB9XG4gIH0sIFttZXNzYWdlc10pO1xuXG4gIC8vIFJlc2V0IGNvbnZlcnNhdGlvblxuICBjb25zdCByZXNldENvbnZlcnNhdGlvbiA9IHVzZUNhbGxiYWNrKGFzeW5jICgpID0+IHtcbiAgICBpZiAoIWNoYXRTZXJ2aWNlUmVmLmN1cnJlbnQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgXG4gICAgc2V0Q29ubmVjdGlvblN0YXRlKCdjb25uZWN0aW5nJyk7XG4gICAgc2V0SXNMb2FkaW5nKHRydWUpO1xuICAgIHNldE1lc3NhZ2VzKFtdKTtcbiAgICBzZXRQb3NzaWJsZVF1ZXJpZXMoW10pO1xuICAgIGxvY2FsU3RvcmFnZS5yZW1vdmVJdGVtKCdjaGF0TWVzc2FnZXMnKTtcbiAgICBzZXRJc0ZpbmFsaXplZChmYWxzZSk7XG4gICAgc2V0SXNBZ2VudFR5cGluZyhmYWxzZSk7XG4gICAgXG4gICAgdHJ5IHtcbiAgICAgIC8vIFJlc2V0IHRoZSBjb252ZXJzYXRpb24gaW4gdGhlIGNoYXQgc2VydmljZVxuICAgICAgY2hhdFNlcnZpY2VSZWYuY3VycmVudC5yZXNldENvbnZlcnNhdGlvbigpO1xuICAgICAgXG4gICAgICAvLyBTdGFydCBhIG5ldyBjb252ZXJzYXRpb25cbiAgICAgIGNvbnN0IGNvbnZJZCA9IGF3YWl0IGNoYXRTZXJ2aWNlUmVmLmN1cnJlbnQuc3RhcnRDb252ZXJzYXRpb24oKTtcbiAgICAgIHNldENvbnZlcnNhdGlvbklkKGNvbnZJZCk7XG4gICAgICBzZXRDb25uZWN0aW9uU3RhdGUoJ2Nvbm5lY3RlZCcpO1xuXG4gICAgICAvLyBHZXQgcG9zc2libGUgcXVlcmllcyBmcm9tIEFQSSByZXNwb25zZVxuICAgICAgaWYgKGNoYXRTZXJ2aWNlUmVmLmN1cnJlbnQuZ2V0UG9zc2libGVRdWVyaWVzKSB7XG4gICAgICAgIGNvbnN0IHF1ZXJpZXMgPSBjaGF0U2VydmljZVJlZi5jdXJyZW50LmdldFBvc3NpYmxlUXVlcmllcygpO1xuICAgICAgICBpZiAocXVlcmllcyAmJiBxdWVyaWVzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICBzZXRQb3NzaWJsZVF1ZXJpZXMocXVlcmllcyk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgc2V0Q29ubmVjdGlvblN0YXRlKCdkaXNjb25uZWN0ZWQnKTtcbiAgICAgIHNldElzQWdlbnRUeXBpbmcoZmFsc2UpO1xuICAgICAgaWYgKG9uRXJyb3IgJiYgZXJyb3IgaW5zdGFuY2VvZiBFcnJvcikge1xuICAgICAgICBvbkVycm9yKGVycm9yKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoJ0ZhaWxlZCB0byByZXNldCBjb252ZXJzYXRpb246JywgZXJyb3IpO1xuICAgICAgfVxuICAgIH0gZmluYWxseSB7XG4gICAgICBzZXRJc0xvYWRpbmcoZmFsc2UpO1xuICAgIH1cbiAgfSwgW29uRXJyb3JdKTtcblxuICBjb25zdCB1cGxvYWRGaWxlID0gdXNlQ2FsbGJhY2soYXN5bmMgKGZpbGU6IEZpbGUpOiBQcm9taXNlPEF0dGFjaG1lbnQgfCBudWxsPiA9PiB7XG4gICAgaWYgKCFjaGF0U2VydmljZVJlZi5jdXJyZW50IHx8ICFjaGF0U2VydmljZVJlZi5jdXJyZW50LmdldENvbnZlcnNhdGlvbklkKCkpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ0Nhbm5vdCB1cGxvYWQgZmlsZSwgY29udmVyc2F0aW9uIG5vdCByZWFkeScpO1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHsgZmlsZVVybCB9ID0gYXdhaXQgY2hhdFNlcnZpY2VSZWYuY3VycmVudC51cGxvYWRGaWxlKFxuICAgICAgICBjaGF0U2VydmljZVJlZi5jdXJyZW50LmdldENvbnZlcnNhdGlvbklkKCkgYXMgc3RyaW5nLFxuICAgICAgICBmaWxlXG4gICAgICApO1xuICAgICAgXG4gICAgICBjb25zdCBhdHRhY2htZW50OiBBdHRhY2htZW50ID0ge1xuICAgICAgICBuYW1lOiBmaWxlLm5hbWUsXG4gICAgICAgIHR5cGU6IGZpbGUudHlwZSxcbiAgICAgICAgc2l6ZTogZmlsZS5zaXplLFxuICAgICAgICB1cmw6IGZpbGVVcmwsXG4gICAgICB9O1xuXG4gICAgICBzZXRQcmVsb2FkZWRBdHRhY2htZW50cyhwcmV2ID0+IFsuLi5wcmV2LCBhdHRhY2htZW50XSk7XG4gICAgICByZXR1cm4gYXR0YWNobWVudDtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgY29uc29sZS5lcnJvcignRmlsZSB1cGxvYWQgZmFpbGVkOicsIGVycm9yKTtcbiAgICAgIGlmIChvbkVycm9yKSB7XG4gICAgICAgIG9uRXJyb3IoZXJyb3IgYXMgRXJyb3IpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICB9LCBbb25FcnJvcl0pO1xuXG4gIC8vIFNlbmQgbWVzc2FnZVxuICBjb25zdCBzZW5kTWVzc2FnZSA9IHVzZUNhbGxiYWNrKGFzeW5jICh0ZXh0OiBzdHJpbmcsIGZpbGVzOiBGaWxlW10gPSBbXSkgPT4ge1xuICAgIGlmICghY2hhdFNlcnZpY2VSZWYuY3VycmVudCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdDaGF0IHNlcnZpY2Ugbm90IGluaXRpYWxpemVkJyk7XG4gICAgfVxuXG4gICAgdHJ5IHtcbiAgICAgIHNldElzTG9hZGluZyh0cnVlKTtcblxuICAgICAgY29uc3QgbmV3QXR0YWNobWVudHM6IEF0dGFjaG1lbnRbXSA9IFtdO1xuICAgICAgXG4gICAgICBpZiAoZmlsZXMubGVuZ3RoID4gMCkge1xuICAgICAgICBjb25zdCB1cGxvYWRlZEZpbGVzID0gZmlsZXMubWFwKGYgPT4gcHJlbG9hZGVkQXR0YWNobWVudHMuZmluZChwYSA9PiBwYS5uYW1lID09PSBmLm5hbWUgJiYgcGEuc2l6ZSA9PT0gZi5zaXplKSkuZmlsdGVyKEJvb2xlYW4pIGFzIEF0dGFjaG1lbnRbXTtcbiAgICAgICAgbmV3QXR0YWNobWVudHMucHVzaCguLi51cGxvYWRlZEZpbGVzKTtcbiAgICAgIH1cblxuICAgICAgLy8gU3RhcnQgdHlwaW5nIGltbWVkaWF0ZWx5IHdoZW4gdXNlciBzZW5kc1xuICAgICAgc2V0SXNBZ2VudFR5cGluZyh0cnVlKTtcbiAgICAgIGF3YWl0IGNoYXRTZXJ2aWNlUmVmLmN1cnJlbnQuc2VuZE1lc3NhZ2UodGV4dCwgbmV3QXR0YWNobWVudHMpO1xuXG4gICAgICBzZXRQcmVsb2FkZWRBdHRhY2htZW50cyhbXSk7XG5cbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgc2V0SXNBZ2VudFR5cGluZyhmYWxzZSk7XG4gICAgICBpZiAob25FcnJvciAmJiBlcnJvciBpbnN0YW5jZW9mIEVycm9yKSB7XG4gICAgICAgIG9uRXJyb3IoZXJyb3IpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc29sZS5lcnJvcignRmFpbGVkIHRvIHNlbmQgbWVzc2FnZTonLCBlcnJvcik7XG4gICAgICB9XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIHNldElzTG9hZGluZyhmYWxzZSk7XG4gICAgfVxuICB9LCBbb25FcnJvciwgcHJlbG9hZGVkQXR0YWNobWVudHNdKTtcblxuICBjb25zdCBzdGFydENvbnZlcnNhdGlvbiA9IHVzZUNhbGxiYWNrKGFzeW5jICgpID0+IHtcbiAgICBpZiAoIWNoYXRTZXJ2aWNlUmVmLmN1cnJlbnQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdHJ5IHtcbiAgICAgIHNldENvbm5lY3Rpb25TdGF0ZSgnY29ubmVjdGluZycpO1xuICAgICAgc2V0SXNMb2FkaW5nKHRydWUpO1xuICAgICAgXG4gICAgICAvLyBSZXNldCBzdGF0ZSBmb3IgbmV3IGNvbnZlcnNhdGlvblxuICAgICAgc2V0TWVzc2FnZXMoW10pO1xuICAgICAgc2V0UG9zc2libGVRdWVyaWVzKFtdKTtcbiAgICAgIGxvY2FsU3RvcmFnZS5yZW1vdmVJdGVtKCdjaGF0TWVzc2FnZXMnKTtcbiAgICAgIHNldElzRmluYWxpemVkKGZhbHNlKTtcbiAgICAgIHNldElzQWdlbnRUeXBpbmcoZmFsc2UpO1xuICAgICAgY2hhdFNlcnZpY2VSZWYuY3VycmVudC5yZXNldENvbnZlcnNhdGlvbigpO1xuXG4gICAgICBjb25zdCBjb252SWQgPSBhd2FpdCBjaGF0U2VydmljZVJlZi5jdXJyZW50LnN0YXJ0Q29udmVyc2F0aW9uKCk7XG4gICAgICBzZXRDb252ZXJzYXRpb25JZChjb252SWQpO1xuICAgICAgc2V0Q29ubmVjdGlvblN0YXRlKCdjb25uZWN0ZWQnKTtcblxuICAgICAgaWYgKGNoYXRTZXJ2aWNlUmVmLmN1cnJlbnQuZ2V0UG9zc2libGVRdWVyaWVzKSB7XG4gICAgICAgIGNvbnN0IHF1ZXJpZXMgPSBjaGF0U2VydmljZVJlZi5jdXJyZW50LmdldFBvc3NpYmxlUXVlcmllcygpO1xuICAgICAgICBpZiAocXVlcmllcyAmJiBxdWVyaWVzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICBzZXRQb3NzaWJsZVF1ZXJpZXMocXVlcmllcyk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgc2V0Q29ubmVjdGlvblN0YXRlKCdkaXNjb25uZWN0ZWQnKTtcbiAgICAgIHNldElzQWdlbnRUeXBpbmcoZmFsc2UpO1xuICAgICAgaWYgKG9uRXJyb3IgJiYgZXJyb3IgaW5zdGFuY2VvZiBFcnJvcikge1xuICAgICAgICBvbkVycm9yKGVycm9yKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoJ0ZhaWxlZCB0byBzdGFydCBjb252ZXJzYXRpb246JywgZXJyb3IpO1xuICAgICAgfVxuICAgIH0gZmluYWxseSB7XG4gICAgICBzZXRJc0xvYWRpbmcoZmFsc2UpO1xuICAgIH1cbiAgfSwgW29uRXJyb3JdKTtcblxuICByZXR1cm4ge1xuICAgIG1lc3NhZ2VzLFxuICAgIGlzTG9hZGluZyxcbiAgICBzZW5kTWVzc2FnZSxcbiAgICB1cGxvYWRGaWxlLFxuICAgIHJlc2V0Q29udmVyc2F0aW9uLFxuICAgIHN0YXJ0Q29udmVyc2F0aW9uLFxuICAgIGNvbm5lY3Rpb25TdGF0ZSxcbiAgICBjb252ZXJzYXRpb25JZCxcbiAgICBwb3NzaWJsZVF1ZXJpZXMsXG4gICAgaXNUYWtlbk92ZXIsXG4gICAgaXNGaW5hbGl6ZWQsXG4gICAgaXNBZ2VudFR5cGluZyxcbiAgfTtcbn07ICJdfQ==
434
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXNlQ2hhdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9ob29rcy91c2VDaGF0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUEsT0FBTyxFQUFFLFFBQVEsRUFBRSxTQUFTLEVBQUUsV0FBVyxFQUFFLE1BQU0sRUFBRSxNQUFNLE9BQU8sQ0FBQztBQUNqRSxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFhdEQsTUFBTSxDQUFDLElBQU0sT0FBTyxHQUFHLFVBQUMsRUFBb0Y7UUFBbEYsT0FBTyxhQUFBLEVBQUUsTUFBTSxZQUFBLEVBQUUsTUFBTSxZQUFBLEVBQUUsUUFBUSxjQUFBLEVBQUUsT0FBTyxhQUFBLEVBQUUsVUFBVSxnQkFBQSxFQUFFLFVBQVUsZ0JBQUE7SUFDcEYsSUFBQSxLQUEwQixRQUFRLENBQWdCO1FBQ3RELElBQUksQ0FBQztZQUNILElBQU0sY0FBYyxHQUFHLFlBQVksQ0FBQyxPQUFPLENBQUMsY0FBYyxDQUFDLENBQUM7WUFDNUQsT0FBTyxjQUFjLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsY0FBYyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztRQUMxRCxDQUFDO1FBQUMsT0FBTyxLQUFLLEVBQUUsQ0FBQztZQUNmLE9BQU8sQ0FBQyxLQUFLLENBQUMsMkNBQTJDLEVBQUUsS0FBSyxDQUFDLENBQUM7WUFDbEUsT0FBTyxFQUFFLENBQUM7UUFDWixDQUFDO0lBQ0gsQ0FBQyxDQUFDLEVBUkssUUFBUSxRQUFBLEVBQUUsV0FBVyxRQVExQixDQUFDO0lBQ0csSUFBQSxLQUE0QixRQUFRLENBQVUsS0FBSyxDQUFDLEVBQW5ELFNBQVMsUUFBQSxFQUFFLFlBQVksUUFBNEIsQ0FBQztJQUNyRCxJQUFBLEtBQWtELFFBQVEsQ0FBZSxFQUFFLENBQUMsRUFB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QUFHLENBQUMsVUFBQSxDQUFDOzRCQUNSLE9BQUEsQ0FBQyxDQUFDLFVBQVUsS0FBSyxTQUFTO2dDQUN4QixDQUFDLHVCQUFNLENBQUMsS0FBRSxRQUFRLGtDQUFNLENBQUMsQ0FBQyxDQUFDLFFBQVEsSUFBSSxFQUFFLENBQUMsVUFBRSxhQUFXLGFBQ3ZELENBQUMsQ0FBQyxDQUFDO3dCQUZMLENBRUssQ0FDTjtvQkFKRCxDQUlDLENBQ0YsQ0FBQzs7OztvQkFFRixPQUFPLENBQUMsS0FBSyxDQUFDLHlCQUF5QixFQUFFLE9BQUssQ0FBQyxDQUFDO29CQUNoRCxJQUFJLE9BQU8sRUFBRSxDQUFDO3dCQUNaLE9BQU8sQ0FBQyxPQUFjLENBQUMsQ0FBQztvQkFDMUIsQ0FBQzs7Ozs7U0FFSixFQUNELENBQUMsY0FBYyxFQUFFLE9BQU8sQ0FBQyxDQUMxQixDQUFDO0lBRUYsT0FBTztRQUNMLFFBQVEsVUFBQTtRQUNSLFNBQVMsV0FBQTtRQUNULFdBQVcsYUFBQTtRQUNYLFVBQVUsWUFBQTtRQUNWLGlCQUFpQixtQkFBQTtRQUNqQixpQkFBaUIsbUJBQUE7UUFDakIsZUFBZSxpQkFBQTtRQUNmLGNBQWMsZ0JBQUE7UUFDZCxlQUFlLGlCQUFBO1FBQ2YsV0FBVyxhQUFBO1FBQ1gsV0FBVyxhQUFBO1FBQ1gsYUFBYSxlQUFBO1FBQ2IsV0FBVyxhQUFBO1FBQ1gsWUFBWSxjQUFBO1FBQ1osZUFBZSxpQkFBQTtRQUNmLGVBQWUsaUJBQUE7UUFDZixlQUFlLGlCQUFBO0tBQ2hCLENBQUM7QUFDSixDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyB1c2VTdGF0ZSwgdXNlRWZmZWN0LCB1c2VDYWxsYmFjaywgdXNlUmVmIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgQ2hhdFNlcnZpY2UgfSBmcm9tICcuLi9zZXJ2aWNlcy9jaGF0U2VydmljZSc7XG5pbXBvcnQgeyBDaGF0TWVzc2FnZSwgQXR0YWNobWVudCwgTWVzc2FnZUZlZWRiYWNrIH0gZnJvbSAnLi4vdHlwZXMnO1xuXG5leHBvcnQgaW50ZXJmYWNlIFVzZUNoYXRQcm9wcyB7XG4gIGJhc2VVcmw6IHN0cmluZztcbiAgYXBpS2V5OiBzdHJpbmc7XG4gIHRlbmFudD86IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgbWV0YWRhdGE/OiBSZWNvcmQ8c3RyaW5nLCBhbnk+O1xuICBvbkVycm9yPzogKGVycm9yOiBFcnJvcikgPT4gdm9pZDtcbiAgb25UYWtlb3Zlcj86ICgpID0+IHZvaWQ7XG4gIG9uRmluYWxpemU/OiAoKSA9PiB2b2lkO1xufVxuXG5leHBvcnQgY29uc3QgdXNlQ2hhdCA9ICh7IGJhc2VVcmwsIGFwaUtleSwgdGVuYW50LCBtZXRhZGF0YSwgb25FcnJvciwgb25UYWtlb3Zlciwgb25GaW5hbGl6ZSB9OiBVc2VDaGF0UHJvcHMpID0+IHtcbiAgY29uc3QgW21lc3NhZ2VzLCBzZXRNZXNzYWdlc10gPSB1c2VTdGF0ZTxDaGF0TWVzc2FnZVtdPigoKSA9PiB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHN0b3JlZE1lc3NhZ2VzID0gbG9jYWxTdG9yYWdlLmdldEl0ZW0oJ2NoYXRNZXNzYWdlcycpO1xuICAgICAgcmV0dXJuIHN0b3JlZE1lc3NhZ2VzID8gSlNPTi5wYXJzZShzdG9yZWRNZXNzYWdlcykgOiBbXTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgY29uc29sZS5lcnJvcignRXJyb3IgbG9hZGluZyBtZXNzYWdlcyBmcm9tIGxvY2FsU3RvcmFnZTonLCBlcnJvcik7XG4gICAgICByZXR1cm4gW107XG4gICAgfVxuICB9KTtcbiAgY29uc3QgW2lzTG9hZGluZywgc2V0SXNMb2FkaW5nXSA9IHVzZVN0YXRlPGJvb2xlYW4+KGZhbHNlKTtcbiAgY29uc3QgW3ByZWxvYWRlZEF0dGFjaG1lbnRzLCBzZXRQcmVsb2FkZWRBdHRhY2htZW50c10gPSB1c2VTdGF0ZTxBdHRhY2htZW50W10+KFtdKTtcbiAgY29uc3QgW2Nvbm5lY3Rpb25TdGF0ZSwgc2V0Q29ubmVjdGlvblN0YXRlXSA9IHVzZVN0YXRlPCdjb25uZWN0aW5nJyB8ICdjb25uZWN0ZWQnIHwgJ2Rpc2Nvbm5lY3RlZCc+KCdkaXNjb25uZWN0ZWQnKTtcbiAgY29uc3QgW2lzQWdlbnRUeXBpbmcsIHNldElzQWdlbnRUeXBpbmddID0gdXNlU3RhdGU8Ym9vbGVhbj4oZmFsc2UpO1xuICBjb25zdCBjaGF0U2VydmljZVJlZiA9IHVzZVJlZjxDaGF0U2VydmljZSB8IG51bGw+KG51bGwpO1xuICBjb25zdCBbY29udmVyc2F0aW9uSWQsIHNldENvbnZlcnNhdGlvbklkXSA9IHVzZVN0YXRlPHN0cmluZyB8IG51bGw+KG51bGwpO1xuICBjb25zdCBbcG9zc2libGVRdWVyaWVzLCBzZXRQb3NzaWJsZVF1ZXJpZXNdID0gdXNlU3RhdGU8c3RyaW5nW10+KFtdKTtcbiAgY29uc3QgW3dlbGNvbWVUaXRsZSwgc2V0V2VsY29tZVRpdGxlXSA9IHVzZVN0YXRlPHN0cmluZyB8IG51bGw+KG51bGwpO1xuICBjb25zdCBbd2VsY29tZUltYWdlVXJsLCBzZXRXZWxjb21lSW1hZ2VVcmxdID0gdXNlU3RhdGU8c3RyaW5nIHwgbnVsbD4obnVsbCk7XG4gIGNvbnN0IFt0aGlua2luZ1BocmFzZXMsIHNldFRoaW5raW5nUGhyYXNlc10gPSB1c2VTdGF0ZTxzdHJpbmdbXT4oW10pO1xuICBjb25zdCBbdGhpbmtpbmdEZWxheU1zLCBzZXRUaGlua2luZ0RlbGF5TXNdID0gdXNlU3RhdGU8bnVtYmVyPigxMDAwKTtcbiAgY29uc3QgW2lzVGFrZW5PdmVyLCBzZXRJc1Rha2VuT3Zlcl0gPSB1c2VTdGF0ZTxib29sZWFuPihmYWxzZSk7XG4gIGNvbnN0IFtpc0ZpbmFsaXplZCwgc2V0SXNGaW5hbGl6ZWRdID0gdXNlU3RhdGU8Ym9vbGVhbj4oZmFsc2UpO1xuXG4gIC8vIEluaXRpYWxpemUgY2hhdCBzZXJ2aWNlXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgY2hhdFNlcnZpY2VSZWYuY3VycmVudCA9IG5ldyBDaGF0U2VydmljZShiYXNlVXJsLCBhcGlLZXksIG1ldGFkYXRhLCB0ZW5hbnQpO1xuICAgIFxuICAgIGNoYXRTZXJ2aWNlUmVmLmN1cnJlbnQuc2V0TWVzc2FnZUhhbmRsZXIoKG1lc3NhZ2U6IENoYXRNZXNzYWdlKSA9PiB7XG4gICAgICBjb25zdCBub3JtYWxpemVkTWVzc2FnZTogQ2hhdE1lc3NhZ2UgPSB7XG4gICAgICAgIC4uLm1lc3NhZ2UsXG4gICAgICAgIGNyZWF0ZV90aW1lOiAoIW1lc3NhZ2UuY3JlYXRlX3RpbWUgfHwgaXNOYU4obWVzc2FnZS5jcmVhdGVfdGltZSkpXG4gICAgICAgICAgPyBNYXRoLmZsb29yKERhdGUubm93KCkgLyAxMDAwKVxuICAgICAgICAgIDogbWVzc2FnZS5jcmVhdGVfdGltZSxcbiAgICAgIH07XG5cbiAgICAgIHNldE1lc3NhZ2VzKHByZXZNZXNzYWdlcyA9PiBbLi4ucHJldk1lc3NhZ2VzLCBub3JtYWxpemVkTWVzc2FnZV0pO1xuICAgICAgLy8gU3RvcCB0eXBpbmcgYW5pbWF0aW9uIHdoZW4gYWdlbnQgb3Igc3lzdGVtIG1lc3NhZ2UgYXJyaXZlc1xuICAgICAgaWYgKG5vcm1hbGl6ZWRNZXNzYWdlLnNwZWFrZXIgPT09ICdhZ2VudCcgfHwgbm9ybWFsaXplZE1lc3NhZ2Uuc3BlYWtlciA9PT0gJ3NwZWNpYWwnKSB7XG4gICAgICAgIHNldElzQWdlbnRUeXBpbmcoZmFsc2UpO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgY2hhdFNlcnZpY2VSZWYuY3VycmVudC5zZXRUYWtlb3ZlckhhbmRsZXIoKCkgPT4ge1xuICAgICAgc2V0SXNUYWtlbk92ZXIodHJ1ZSk7XG4gICAgICBzZXRJc0FnZW50VHlwaW5nKGZhbHNlKTtcbiAgICAgIGlmIChvblRha2VvdmVyKSB7XG4gICAgICAgIG9uVGFrZW92ZXIoKTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIGNoYXRTZXJ2aWNlUmVmLmN1cnJlbnQuc2V0RmluYWxpemVkSGFuZGxlcigoKSA9PiB7XG4gICAgICBzZXRJc0ZpbmFsaXplZCh0cnVlKTtcbiAgICAgIHNldElzQWdlbnRUeXBpbmcoZmFsc2UpO1xuICAgICAgaWYgKG9uRmluYWxpemUpIHtcbiAgICAgICAgb25GaW5hbGl6ZSgpO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgLy8gQ2xlYXIgdHlwaW5nIGFuaW1hdGlvbiBpZiBhZ2VudCBpcyBub3QgY29ubmVjdGVkXG4gICAgY2hhdFNlcnZpY2VSZWYuY3VycmVudC5zZXRDb25uZWN0aW9uU3RhdGVIYW5kbGVyKChzdGF0ZSkgPT4ge1xuICAgICAgc2V0Q29ubmVjdGlvblN0YXRlKHN0YXRlKTtcbiAgICAgIGlmIChzdGF0ZSAhPT0gJ2Nvbm5lY3RlZCcpIHtcbiAgICAgICAgc2V0SXNBZ2VudFR5cGluZyhmYWxzZSk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICAvLyBDaGVjayBmb3IgYSBzYXZlZCBjb252ZXJzYXRpb24gYW5kIGNvbm5lY3QgdG8gaXRcbiAgICBjb25zdCBjb252SWQgPSBjaGF0U2VydmljZVJlZi5jdXJyZW50LmdldENvbnZlcnNhdGlvbklkKCk7XG4gICAgaWYgKGNvbnZJZCkge1xuICAgICAgICBzZXRDb252ZXJzYXRpb25JZChjb252SWQpO1xuICAgICAgICBpZiAoY2hhdFNlcnZpY2VSZWYuY3VycmVudC5pc0NvbnZlcnNhdGlvbkZpbmFsaXplZCgpKSB7XG4gICAgICAgICAgc2V0SXNGaW5hbGl6ZWQodHJ1ZSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY2hhdFNlcnZpY2VSZWYuY3VycmVudC5jb25uZWN0V2ViU29ja2V0KCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgLy8gUHVsbCBpbml0aWFsIHN0YXRpYyBkYXRhXG4gICAgaWYgKGNoYXRTZXJ2aWNlUmVmLmN1cnJlbnQpIHtcbiAgICAgIGNvbnN0IHF1ZXJpZXMgPSBjaGF0U2VydmljZVJlZi5jdXJyZW50LmdldFBvc3NpYmxlUXVlcmllcz8uKCkgfHwgW107XG4gICAgICBpZiAocXVlcmllcy5sZW5ndGgpIHNldFBvc3NpYmxlUXVlcmllcyhxdWVyaWVzKTtcbiAgICAgIGNvbnN0IHdlbGNvbWUgPSBjaGF0U2VydmljZVJlZi5jdXJyZW50LmdldFdlbGNvbWVEYXRhPy4oKTtcbiAgICAgIGlmICh3ZWxjb21lKSB7XG4gICAgICAgIHNldFdlbGNvbWVUaXRsZSh3ZWxjb21lLnRpdGxlIHx8IG51bGwpO1xuICAgICAgICBzZXRXZWxjb21lSW1hZ2VVcmwod2VsY29tZS5pbWFnZVVybCB8fCBudWxsKTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IHRoaW5raW5nID0gY2hhdFNlcnZpY2VSZWYuY3VycmVudC5nZXRUaGlua2luZ0NvbmZpZz8uKCk7XG4gICAgICBpZiAodGhpbmtpbmcpIHtcbiAgICAgICAgc2V0VGhpbmtpbmdQaHJhc2VzKHRoaW5raW5nLnBocmFzZXMgfHwgW10pO1xuICAgICAgICBzZXRUaGlua2luZ0RlbGF5TXModGhpbmtpbmcuZGVsYXlNcyB8fCAxMDAwKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBDbGVhbnVwXG4gICAgcmV0dXJuICgpID0+IHtcbiAgICAgIGlmIChjaGF0U2VydmljZVJlZi5jdXJyZW50KSB7XG4gICAgICAgIGNoYXRTZXJ2aWNlUmVmLmN1cnJlbnQuZGlzY29ubmVjdCgpO1xuICAgICAgfVxuICAgIH07XG4gIH0sIFtiYXNlVXJsLCBhcGlLZXksIG1ldGFkYXRhLCBvbkVycm9yLCBvblRha2VvdmVyLCBvbkZpbmFsaXplXSk7XG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICB0cnkge1xuICAgICAgbG9jYWxTdG9yYWdlLnNldEl0ZW0oJ2NoYXRNZXNzYWdlcycsIEpTT04uc3RyaW5naWZ5KG1lc3NhZ2VzKSk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ0Vycm9yIHNhdmluZyBtZXNzYWdlcyB0byBsb2NhbFN0b3JhZ2U6JywgZXJyb3IpO1xuICAgIH1cbiAgfSwgW21lc3NhZ2VzXSk7XG5cbiAgLy8gUmVzZXQgY29udmVyc2F0aW9uXG4gIGNvbnN0IHJlc2V0Q29udmVyc2F0aW9uID0gdXNlQ2FsbGJhY2soYXN5bmMgKCkgPT4ge1xuICAgIGlmICghY2hhdFNlcnZpY2VSZWYuY3VycmVudCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBcbiAgICBzZXRDb25uZWN0aW9uU3RhdGUoJ2Nvbm5lY3RpbmcnKTtcbiAgICBzZXRJc0xvYWRpbmcodHJ1ZSk7XG4gICAgc2V0TWVzc2FnZXMoW10pO1xuICAgIHNldFBvc3NpYmxlUXVlcmllcyhbXSk7XG4gICAgc2V0V2VsY29tZVRpdGxlKG51bGwpO1xuICAgIHNldFdlbGNvbWVJbWFnZVVybChudWxsKTtcbiAgICBzZXRUaGlua2luZ1BocmFzZXMoW10pO1xuICAgIHNldFRoaW5raW5nRGVsYXlNcygxMDAwKTtcbiAgICBsb2NhbFN0b3JhZ2UucmVtb3ZlSXRlbSgnY2hhdE1lc3NhZ2VzJyk7XG4gICAgc2V0SXNGaW5hbGl6ZWQoZmFsc2UpO1xuICAgIHNldElzVGFrZW5PdmVyKGZhbHNlKTtcbiAgICBzZXRJc0FnZW50VHlwaW5nKGZhbHNlKTtcbiAgICBcbiAgICB0cnkge1xuICAgICAgLy8gUmVzZXQgdGhlIGNvbnZlcnNhdGlvbiBpbiB0aGUgY2hhdCBzZXJ2aWNlXG4gICAgICBjaGF0U2VydmljZVJlZi5jdXJyZW50LnJlc2V0Q29udmVyc2F0aW9uKCk7XG4gICAgICBcbiAgICAgIC8vIFN0YXJ0IGEgbmV3IGNvbnZlcnNhdGlvblxuICAgICAgY29uc3QgY29udklkID0gYXdhaXQgY2hhdFNlcnZpY2VSZWYuY3VycmVudC5zdGFydENvbnZlcnNhdGlvbigpO1xuICAgICAgc2V0Q29udmVyc2F0aW9uSWQoY29udklkKTtcbiAgICAgIHNldENvbm5lY3Rpb25TdGF0ZSgnY29ubmVjdGVkJyk7XG5cbiAgICAgIC8vIEdldCBwb3NzaWJsZSBxdWVyaWVzIGZyb20gQVBJIHJlc3BvbnNlXG4gICAgICBpZiAoY2hhdFNlcnZpY2VSZWYuY3VycmVudC5nZXRQb3NzaWJsZVF1ZXJpZXMpIHtcbiAgICAgICAgY29uc3QgcXVlcmllcyA9IGNoYXRTZXJ2aWNlUmVmLmN1cnJlbnQuZ2V0UG9zc2libGVRdWVyaWVzKCk7XG4gICAgICAgIGlmIChxdWVyaWVzICYmIHF1ZXJpZXMubGVuZ3RoID4gMCkge1xuICAgICAgICAgIHNldFBvc3NpYmxlUXVlcmllcyhxdWVyaWVzKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgLy8gd2VsY29tZSBhbmQgdGhpbmtpbmcgZGF0YVxuICAgICAgaWYgKGNoYXRTZXJ2aWNlUmVmLmN1cnJlbnQuZ2V0V2VsY29tZURhdGEpIHtcbiAgICAgICAgY29uc3Qgd2VsY29tZSA9IGNoYXRTZXJ2aWNlUmVmLmN1cnJlbnQuZ2V0V2VsY29tZURhdGEoKTtcbiAgICAgICAgc2V0V2VsY29tZVRpdGxlKHdlbGNvbWUudGl0bGUgfHwgbnVsbCk7XG4gICAgICAgIHNldFdlbGNvbWVJbWFnZVVybCh3ZWxjb21lLmltYWdlVXJsIHx8IG51bGwpO1xuICAgICAgfVxuICAgICAgaWYgKGNoYXRTZXJ2aWNlUmVmLmN1cnJlbnQuZ2V0VGhpbmtpbmdDb25maWcpIHtcbiAgICAgICAgY29uc3QgdGhpbmtpbmcgPSBjaGF0U2VydmljZVJlZi5jdXJyZW50LmdldFRoaW5raW5nQ29uZmlnKCk7XG4gICAgICAgIHNldFRoaW5raW5nUGhyYXNlcyh0aGlua2luZy5waHJhc2VzIHx8IFtdKTtcbiAgICAgICAgc2V0VGhpbmtpbmdEZWxheU1zKHRoaW5raW5nLmRlbGF5TXMgfHwgMTAwMCk7XG4gICAgICB9XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIHNldENvbm5lY3Rpb25TdGF0ZSgnZGlzY29ubmVjdGVkJyk7XG4gICAgICBzZXRJc0FnZW50VHlwaW5nKGZhbHNlKTtcbiAgICAgIGlmIChvbkVycm9yICYmIGVycm9yIGluc3RhbmNlb2YgRXJyb3IpIHtcbiAgICAgICAgb25FcnJvcihlcnJvcik7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zb2xlLmVycm9yKCdGYWlsZWQgdG8gcmVzZXQgY29udmVyc2F0aW9uOicsIGVycm9yKTtcbiAgICAgIH1cbiAgICB9IGZpbmFsbHkge1xuICAgICAgc2V0SXNMb2FkaW5nKGZhbHNlKTtcbiAgICB9XG4gIH0sIFtvbkVycm9yXSk7XG5cbiAgY29uc3QgdXBsb2FkRmlsZSA9IHVzZUNhbGxiYWNrKGFzeW5jIChmaWxlOiBGaWxlKTogUHJvbWlzZTxBdHRhY2htZW50IHwgbnVsbD4gPT4ge1xuICAgIGlmICghY2hhdFNlcnZpY2VSZWYuY3VycmVudCB8fCAhY2hhdFNlcnZpY2VSZWYuY3VycmVudC5nZXRDb252ZXJzYXRpb25JZCgpKSB7XG4gICAgICBjb25zb2xlLmVycm9yKCdDYW5ub3QgdXBsb2FkIGZpbGUsIGNvbnZlcnNhdGlvbiBub3QgcmVhZHknKTtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIHRyeSB7XG4gICAgICBjb25zdCB7IGZpbGVVcmwgfSA9IGF3YWl0IGNoYXRTZXJ2aWNlUmVmLmN1cnJlbnQudXBsb2FkRmlsZShcbiAgICAgICAgY2hhdFNlcnZpY2VSZWYuY3VycmVudC5nZXRDb252ZXJzYXRpb25JZCgpIGFzIHN0cmluZyxcbiAgICAgICAgZmlsZVxuICAgICAgKTtcbiAgICAgIFxuICAgICAgY29uc3QgYXR0YWNobWVudDogQXR0YWNobWVudCA9IHtcbiAgICAgICAgbmFtZTogZmlsZS5uYW1lLFxuICAgICAgICB0eXBlOiBmaWxlLnR5cGUsXG4gICAgICAgIHNpemU6IGZpbGUuc2l6ZSxcbiAgICAgICAgdXJsOiBmaWxlVXJsLFxuICAgICAgfTtcblxuICAgICAgc2V0UHJlbG9hZGVkQXR0YWNobWVudHMocHJldiA9PiBbLi4ucHJldiwgYXR0YWNobWVudF0pO1xuICAgICAgcmV0dXJuIGF0dGFjaG1lbnQ7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ0ZpbGUgdXBsb2FkIGZhaWxlZDonLCBlcnJvcik7XG4gICAgICBpZiAob25FcnJvcikge1xuICAgICAgICBvbkVycm9yKGVycm9yIGFzIEVycm9yKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgfSwgW29uRXJyb3JdKTtcblxuICAvLyBTZW5kIG1lc3NhZ2VcbiAgY29uc3Qgc2VuZE1lc3NhZ2UgPSB1c2VDYWxsYmFjayhhc3luYyAodGV4dDogc3RyaW5nLCBmaWxlczogRmlsZVtdID0gW10pID0+IHtcbiAgICBpZiAoIWNoYXRTZXJ2aWNlUmVmLmN1cnJlbnQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignQ2hhdCBzZXJ2aWNlIG5vdCBpbml0aWFsaXplZCcpO1xuICAgIH1cblxuICAgIHRyeSB7XG4gICAgICBzZXRJc0xvYWRpbmcodHJ1ZSk7XG5cbiAgICAgIGNvbnN0IG5ld0F0dGFjaG1lbnRzOiBBdHRhY2htZW50W10gPSBbXTtcbiAgICAgIFxuICAgICAgaWYgKGZpbGVzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgY29uc3QgdXBsb2FkZWRGaWxlcyA9IGZpbGVzLm1hcChmID0+IHByZWxvYWRlZEF0dGFjaG1lbnRzLmZpbmQocGEgPT4gcGEubmFtZSA9PT0gZi5uYW1lICYmIHBhLnNpemUgPT09IGYuc2l6ZSkpLmZpbHRlcihCb29sZWFuKSBhcyBBdHRhY2htZW50W107XG4gICAgICAgIG5ld0F0dGFjaG1lbnRzLnB1c2goLi4udXBsb2FkZWRGaWxlcyk7XG4gICAgICB9XG5cbiAgICAgIC8vIFN0YXJ0IHR5cGluZyBpbW1lZGlhdGVseSB3aGVuIHVzZXIgc2VuZHMsIHVubGVzcyBjb252ZXJzYXRpb24gaXMgdGFrZW4gb3ZlciBieSBhIGh1bWFuXG4gICAgICBpZiAoIWlzVGFrZW5PdmVyKSB7XG4gICAgICAgIHNldElzQWdlbnRUeXBpbmcodHJ1ZSk7XG4gICAgICB9XG4gICAgICBhd2FpdCBjaGF0U2VydmljZVJlZi5jdXJyZW50LnNlbmRNZXNzYWdlKHRleHQsIG5ld0F0dGFjaG1lbnRzKTtcblxuICAgICAgc2V0UHJlbG9hZGVkQXR0YWNobWVudHMoW10pO1xuXG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIHNldElzQWdlbnRUeXBpbmcoZmFsc2UpO1xuICAgICAgaWYgKG9uRXJyb3IgJiYgZXJyb3IgaW5zdGFuY2VvZiBFcnJvcikge1xuICAgICAgICBvbkVycm9yKGVycm9yKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoJ0ZhaWxlZCB0byBzZW5kIG1lc3NhZ2U6JywgZXJyb3IpO1xuICAgICAgfVxuICAgIH0gZmluYWxseSB7XG4gICAgICBzZXRJc0xvYWRpbmcoZmFsc2UpO1xuICAgIH1cbiAgfSwgW29uRXJyb3IsIHByZWxvYWRlZEF0dGFjaG1lbnRzLCBpc1Rha2VuT3Zlcl0pO1xuXG4gIGNvbnN0IHN0YXJ0Q29udmVyc2F0aW9uID0gdXNlQ2FsbGJhY2soYXN5bmMgKCkgPT4ge1xuICAgIGlmICghY2hhdFNlcnZpY2VSZWYuY3VycmVudCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0cnkge1xuICAgICAgc2V0Q29ubmVjdGlvblN0YXRlKCdjb25uZWN0aW5nJyk7XG4gICAgICBzZXRJc0xvYWRpbmcodHJ1ZSk7XG4gICAgICBcbiAgICAgIC8vIFJlc2V0IHN0YXRlIGZvciBuZXcgY29udmVyc2F0aW9uXG4gICAgICBzZXRNZXNzYWdlcyhbXSk7XG4gICAgICBzZXRQb3NzaWJsZVF1ZXJpZXMoW10pO1xuICAgICAgbG9jYWxTdG9yYWdlLnJlbW92ZUl0ZW0oJ2NoYXRNZXNzYWdlcycpO1xuICAgICAgc2V0SXNGaW5hbGl6ZWQoZmFsc2UpO1xuICAgICAgc2V0SXNUYWtlbk92ZXIoZmFsc2UpO1xuICAgICAgc2V0SXNBZ2VudFR5cGluZyhmYWxzZSk7XG4gICAgICBjaGF0U2VydmljZVJlZi5jdXJyZW50LnJlc2V0Q29udmVyc2F0aW9uKCk7XG5cbiAgICAgIGNvbnN0IGNvbnZJZCA9IGF3YWl0IGNoYXRTZXJ2aWNlUmVmLmN1cnJlbnQuc3RhcnRDb252ZXJzYXRpb24oKTtcbiAgICAgIHNldENvbnZlcnNhdGlvbklkKGNvbnZJZCk7XG4gICAgICBzZXRDb25uZWN0aW9uU3RhdGUoJ2Nvbm5lY3RlZCcpO1xuXG4gICAgICBpZiAoY2hhdFNlcnZpY2VSZWYuY3VycmVudC5nZXRQb3NzaWJsZVF1ZXJpZXMpIHtcbiAgICAgICAgY29uc3QgcXVlcmllcyA9IGNoYXRTZXJ2aWNlUmVmLmN1cnJlbnQuZ2V0UG9zc2libGVRdWVyaWVzKCk7XG4gICAgICAgIGlmIChxdWVyaWVzICYmIHF1ZXJpZXMubGVuZ3RoID4gMCkge1xuICAgICAgICAgIHNldFBvc3NpYmxlUXVlcmllcyhxdWVyaWVzKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKGNoYXRTZXJ2aWNlUmVmLmN1cnJlbnQuZ2V0V2VsY29tZURhdGEpIHtcbiAgICAgICAgY29uc3Qgd2VsY29tZSA9IGNoYXRTZXJ2aWNlUmVmLmN1cnJlbnQuZ2V0V2VsY29tZURhdGEoKTtcbiAgICAgICAgc2V0V2VsY29tZVRpdGxlKHdlbGNvbWUudGl0bGUgfHwgbnVsbCk7XG4gICAgICAgIHNldFdlbGNvbWVJbWFnZVVybCh3ZWxjb21lLmltYWdlVXJsIHx8IG51bGwpO1xuICAgICAgfVxuICAgICAgaWYgKGNoYXRTZXJ2aWNlUmVmLmN1cnJlbnQuZ2V0VGhpbmtpbmdDb25maWcpIHtcbiAgICAgICAgY29uc3QgdGhpbmtpbmcgPSBjaGF0U2VydmljZVJlZi5jdXJyZW50LmdldFRoaW5raW5nQ29uZmlnKCk7XG4gICAgICAgIHNldFRoaW5raW5nUGhyYXNlcyh0aGlua2luZy5waHJhc2VzIHx8IFtdKTtcbiAgICAgICAgc2V0VGhpbmtpbmdEZWxheU1zKHRoaW5raW5nLmRlbGF5TXMgfHwgMTAwMCk7XG4gICAgICB9XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIHNldENvbm5lY3Rpb25TdGF0ZSgnZGlzY29ubmVjdGVkJyk7XG4gICAgICBzZXRJc0FnZW50VHlwaW5nKGZhbHNlKTtcbiAgICAgIGlmIChvbkVycm9yICYmIGVycm9yIGluc3RhbmNlb2YgRXJyb3IpIHtcbiAgICAgICAgb25FcnJvcihlcnJvcik7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zb2xlLmVycm9yKCdGYWlsZWQgdG8gc3RhcnQgY29udmVyc2F0aW9uOicsIGVycm9yKTtcbiAgICAgIH1cbiAgICB9IGZpbmFsbHkge1xuICAgICAgc2V0SXNMb2FkaW5nKGZhbHNlKTtcbiAgICB9XG4gIH0sIFtvbkVycm9yXSk7XG5cbiAgLy8gQWRkIGZlZWRiYWNrIHRvIGFuIGFnZW50IG1lc3NhZ2VcbiAgY29uc3QgYWRkRmVlZGJhY2sgPSB1c2VDYWxsYmFjayhcbiAgICBhc3luYyAobWVzc2FnZUlkOiBzdHJpbmcsIHZhbHVlOiAnZ29vZCcgfCAnYmFkJywgZmVlZGJhY2tNZXNzYWdlPzogc3RyaW5nKSA9PiB7XG4gICAgICBpZiAoIWNoYXRTZXJ2aWNlUmVmLmN1cnJlbnQgfHwgIWNvbnZlcnNhdGlvbklkKSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoJ0Nhbm5vdCBhZGQgZmVlZGJhY2ssIGNvbnZlcnNhdGlvbiBub3QgcmVhZHknKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgdHJ5IHtcbiAgICAgICAgYXdhaXQgY2hhdFNlcnZpY2VSZWYuY3VycmVudC5hZGRGZWVkYmFjayhtZXNzYWdlSWQsIHZhbHVlLCBmZWVkYmFja01lc3NhZ2UpO1xuXG4gICAgICAgIGNvbnN0IG5ld0ZlZWRiYWNrOiBNZXNzYWdlRmVlZGJhY2sgPSB7XG4gICAgICAgICAgZmVlZGJhY2s6IHZhbHVlLFxuICAgICAgICAgIGZlZWRiYWNrX21lc3NhZ2U6IGZlZWRiYWNrTWVzc2FnZSxcbiAgICAgICAgICBmZWVkYmFja190aW1lc3RhbXA6IG5ldyBEYXRlKCkudG9JU09TdHJpbmcoKSxcbiAgICAgICAgfTtcblxuICAgICAgICBzZXRNZXNzYWdlcyhwcmV2ID0+XG4gICAgICAgICAgcHJldi5tYXAobSA9PlxuICAgICAgICAgICAgbS5tZXNzYWdlX2lkID09PSBtZXNzYWdlSWRcbiAgICAgICAgICAgICAgPyB7IC4uLm0sIGZlZWRiYWNrOiBbLi4uKG0uZmVlZGJhY2sgfHwgW10pLCBuZXdGZWVkYmFja10gfVxuICAgICAgICAgICAgICA6IG1cbiAgICAgICAgICApXG4gICAgICAgICk7XG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICBjb25zb2xlLmVycm9yKCdGYWlsZWQgdG8gYWRkIGZlZWRiYWNrOicsIGVycm9yKTtcbiAgICAgICAgaWYgKG9uRXJyb3IpIHtcbiAgICAgICAgICBvbkVycm9yKGVycm9yIGFzIEVycm9yKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sXG4gICAgW2NvbnZlcnNhdGlvbklkLCBvbkVycm9yXVxuICApO1xuXG4gIHJldHVybiB7XG4gICAgbWVzc2FnZXMsXG4gICAgaXNMb2FkaW5nLFxuICAgIHNlbmRNZXNzYWdlLFxuICAgIHVwbG9hZEZpbGUsXG4gICAgcmVzZXRDb252ZXJzYXRpb24sXG4gICAgc3RhcnRDb252ZXJzYXRpb24sXG4gICAgY29ubmVjdGlvblN0YXRlLFxuICAgIGNvbnZlcnNhdGlvbklkLFxuICAgIHBvc3NpYmxlUXVlcmllcyxcbiAgICBpc1Rha2VuT3ZlcixcbiAgICBpc0ZpbmFsaXplZCxcbiAgICBpc0FnZW50VHlwaW5nLFxuICAgIGFkZEZlZWRiYWNrLFxuICAgIHdlbGNvbWVUaXRsZSxcbiAgICB3ZWxjb21lSW1hZ2VVcmwsXG4gICAgdGhpbmtpbmdQaHJhc2VzLFxuICAgIHRoaW5raW5nRGVsYXlNcyxcbiAgfTtcbn07Il19
@@ -1,4 +1,4 @@
1
- import { ChatMessage, Attachment } from '../types';
1
+ import { ChatMessage, Attachment, AgentThinkingConfig, AgentWelcomeData } from "../types";
2
2
  export declare class ChatService {
3
3
  private baseUrl;
4
4
  private apiKey;
@@ -13,12 +13,18 @@ export declare class ChatService {
13
13
  private connectionStateHandler;
14
14
  private storageKey;
15
15
  private possibleQueries;
16
- constructor(baseUrl: string, apiKey: string, metadata?: Record<string, any>);
16
+ private welcomeData;
17
+ private thinkingConfig;
18
+ private welcomeObjectUrl;
19
+ private tenant;
20
+ constructor(baseUrl: string, apiKey: string, metadata?: Record<string, any>, tenant?: string);
17
21
  setMessageHandler(handler: (message: ChatMessage) => void): void;
18
22
  setTakeoverHandler(handler: () => void): void;
19
23
  setFinalizedHandler(handler: () => void): void;
20
- setConnectionStateHandler(handler: (state: 'connecting' | 'connected' | 'disconnected') => void): void;
24
+ setConnectionStateHandler(handler: (state: "connecting" | "connected" | "disconnected") => void): void;
21
25
  getPossibleQueries(): string[];
26
+ getWelcomeData(): AgentWelcomeData;
27
+ getThinkingConfig(): AgentThinkingConfig;
22
28
  /**
23
29
  * Load a saved conversation ID from localStorage
24
30
  */
@@ -47,5 +53,6 @@ export declare class ChatService {
47
53
  }>;
48
54
  connectWebSocket(): void;
49
55
  disconnect(): void;
56
+ addFeedback(messageId: string, feedback: "good" | "bad", feedback_message?: string): Promise<void>;
50
57
  private adjustMessageTimestamps;
51
58
  }