@projectcor/maia-components 2.11.100-1 → 2.11.100-2

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.
Files changed (31) hide show
  1. package/lib/App.js +4 -2
  2. package/lib/components/atoms/AgentActivityIndicator/AgentActivityIndicator.js +4 -1
  3. package/lib/components/atoms/AgentActivityIndicator/AgentActivityIndicator.styles.js +30 -22
  4. package/lib/components/molecules/AbmSection/AbmAccessibilitySection/AbmAccessibilitySection.js +91 -4
  5. package/lib/components/molecules/ChatAIMessages/ChatAIMessages.js +157 -35
  6. package/lib/components/molecules/StreamAssistantTurnTimeline/StreamAssistantTurnTimeline.js +90 -0
  7. package/lib/components/molecules/StreamAssistantTurnTimeline/StreamAssistantTurnTimeline.styles.js +19 -0
  8. package/lib/components/molecules/StreamAssistantTurnTimeline/index.js +2 -0
  9. package/lib/components/organisms/AbmAgentModal/AbmAgentModal.js +34 -5
  10. package/lib/dev/DevStreamTimelineDemo.js +614 -0
  11. package/lib/dev/mockStreamTimelineDemo.js +417 -0
  12. package/lib/dev/mockStreamTimelineRunner.js +298 -0
  13. package/lib/hooks/useAgentModel/useCreateAgent.js +40 -14
  14. package/lib/hooks/useAgentModel/useUpdateAgent.js +37 -11
  15. package/lib/hooks/useChatManager/useChatManager.js +118 -40
  16. package/lib/hooks/useEvent.js +2 -1
  17. package/lib/hooks/useOrchestratorStream/useOrchestratorStream.js +151 -20
  18. package/lib/hooks/useStreamTimeline/index.js +7 -0
  19. package/lib/hooks/useStreamTimeline/streamTimelineStore.js +37 -0
  20. package/lib/lang/br/index.js +8 -1
  21. package/lib/lang/en/index.js +8 -1
  22. package/lib/lang/es/index.js +8 -1
  23. package/lib/lang/fr/index.js +8 -1
  24. package/lib/services/maia/Agents/connectors.js +124 -0
  25. package/lib/types/agentModal.js +1 -1
  26. package/lib/types/streamTimeline.js +2 -0
  27. package/lib/utils/normalizeAgentConnectors.js +28 -3
  28. package/lib/utils/streamDebugLog.js +169 -0
  29. package/lib/utils/streamExecutionSteps.js +19 -2
  30. package/lib/utils/streamTimeline.js +161 -0
  31. package/package.json +1 -1
@@ -0,0 +1,298 @@
1
+ import _asyncToGenerator from "@babel/runtime/helpers/asyncToGenerator";
2
+ function _createForOfIteratorHelper(r, e) { var t = "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (!t) { if (Array.isArray(r) || (t = _unsupportedIterableToArray(r)) || e && r && "number" == typeof r.length) { t && (r = t); var _n = 0, F = function F() {}; return { s: F, n: function n() { return _n >= r.length ? { done: !0 } : { done: !1, value: r[_n++] }; }, e: function e(r) { throw r; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var o, a = !0, u = !1; return { s: function s() { t = t.call(r); }, n: function n() { var r = t.next(); return a = r.done, r; }, e: function e(r) { u = !0, o = r; }, f: function f() { try { a || null == t["return"] || t["return"](); } finally { if (u) throw o; } } }; }
3
+ function _unsupportedIterableToArray(r, a) { if (r) { if ("string" == typeof r) return _arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return "Object" === t && r.constructor && (t = r.constructor.name), "Map" === t || "Set" === t ? Array.from(r) : "Arguments" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0; } }
4
+ function _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; }
5
+ import _regeneratorRuntime from "@babel/runtime/regenerator";
6
+ import { streamTimelineStore } from '../hooks/useStreamTimeline';
7
+ import { appendContentToStreamTimeline, appendNodeToStreamTimeline, finalizeStreamTimeline, startStreamTimelineTurn } from '../utils/streamTimeline';
8
+ import { getInitialStreamActivity, resolveInitialHitlStreamActivity } from '../utils/streamActivityMessages';
9
+ import { resetExecutionStepCounter } from '../utils/streamExecutionSteps';
10
+ import { mergeStreamChunk } from '../utils/sseStreamContent';
11
+ import { DEMO_TURN_ID, sleep } from './mockStreamTimelineDemo';
12
+ var buildHitlContext = function buildHitlContext(approval, messageText) {
13
+ var _approval$pending_act;
14
+ return {
15
+ messageId: "approval-".concat(approval.original_thread_id),
16
+ messageText: messageText,
17
+ approval: approval,
18
+ pendingActions: approval.pending_actions,
19
+ threadIds: (_approval$pending_act = approval.pending_actions) === null || _approval$pending_act === void 0 ? void 0 : _approval$pending_act.map(function (action) {
20
+ return action.thread_id;
21
+ })
22
+ };
23
+ };
24
+ export var resetMockRunnerState = function resetMockRunnerState(callbacks) {
25
+ streamTimelineStore.clear();
26
+ resetExecutionStepCounter();
27
+ callbacks.onHitlContext(null);
28
+ callbacks.onApprovalUi(null);
29
+ callbacks.onUiPatch({
30
+ waitingResponse: false,
31
+ isWriting: false,
32
+ initialActivity: null,
33
+ phase: 'idle'
34
+ });
35
+ };
36
+ export var beginMockTurn = function beginMockTurn(callbacks) {
37
+ var turnId = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : DEMO_TURN_ID;
38
+ resetExecutionStepCounter();
39
+ streamTimelineStore.replace(startStreamTimelineTurn(turnId));
40
+ callbacks.onUiPatch({
41
+ phase: 'running',
42
+ waitingResponse: true,
43
+ isWriting: false
44
+ });
45
+ };
46
+ export var beginMockHitlContinue = function beginMockHitlContinue(t, hitlContext, callbacks) {
47
+ var turnId = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : DEMO_TURN_ID;
48
+ resetExecutionStepCounter();
49
+ streamTimelineStore.replace(startStreamTimelineTurn(turnId));
50
+ callbacks.onHitlContext(hitlContext);
51
+ callbacks.onUiPatch({
52
+ phase: 'running_continue',
53
+ waitingResponse: true,
54
+ isWriting: false,
55
+ initialActivity: resolveInitialHitlStreamActivity(t, hitlContext)
56
+ });
57
+ };
58
+ export var applyMockStreamEvent = /*#__PURE__*/function () {
59
+ var _ref = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime.mark(function _callee(event, runId, t, accumulatedRef, hitlContextRef, callbacks) {
60
+ var _event$charDelayMs, delay, buffer, i, _callbacks$onAccumula, _callbacks$onAccumula2, isManual, hitlContext;
61
+ return _regeneratorRuntime.wrap(function (_context) {
62
+ while (1) switch (_context.prev = _context.next) {
63
+ case 0:
64
+ if (callbacks.isRunActive(runId)) {
65
+ _context.next = 1;
66
+ break;
67
+ }
68
+ return _context.abrupt("return", 'stopped');
69
+ case 1:
70
+ if (!(event.kind === 'wait')) {
71
+ _context.next = 3;
72
+ break;
73
+ }
74
+ callbacks.onLog(event.label);
75
+ _context.next = 2;
76
+ return sleep(event.ms);
77
+ case 2:
78
+ return _context.abrupt("return", callbacks.isRunActive(runId) ? 'continue' : 'stopped');
79
+ case 3:
80
+ if (!(event.kind === 'thinking')) {
81
+ _context.next = 4;
82
+ break;
83
+ }
84
+ callbacks.onLog('event: thinking');
85
+ callbacks.onUiPatch({
86
+ waitingResponse: true,
87
+ isWriting: false,
88
+ initialActivity: getInitialStreamActivity(t, {})
89
+ });
90
+ return _context.abrupt("return", 'continue');
91
+ case 4:
92
+ if (!(event.kind === 'writing')) {
93
+ _context.next = 5;
94
+ break;
95
+ }
96
+ callbacks.onLog('event: writing_started');
97
+ callbacks.onUiPatch({
98
+ isWriting: true
99
+ });
100
+ streamTimelineStore.replace(appendContentToStreamTimeline(streamTimelineStore.getSnapshot(), accumulatedRef.current));
101
+ return _context.abrupt("return", 'continue');
102
+ case 5:
103
+ if (!(event.kind === 'node')) {
104
+ _context.next = 6;
105
+ break;
106
+ }
107
+ callbacks.onLog("event: ".concat(event.label));
108
+ streamTimelineStore.replace(appendNodeToStreamTimeline(streamTimelineStore.getSnapshot(), event.payload, accumulatedRef.current, t, hitlContextRef.current, event.payload.thread_id));
109
+ return _context.abrupt("return", 'continue');
110
+ case 6:
111
+ if (!(event.kind === 'tokens')) {
112
+ _context.next = 11;
113
+ break;
114
+ }
115
+ callbacks.onLog("event: ".concat(event.label));
116
+ delay = (_event$charDelayMs = event.charDelayMs) !== null && _event$charDelayMs !== void 0 ? _event$charDelayMs : 18;
117
+ buffer = accumulatedRef.current;
118
+ i = 0;
119
+ case 7:
120
+ if (!(i < event.text.length)) {
121
+ _context.next = 10;
122
+ break;
123
+ }
124
+ if (callbacks.isRunActive(runId)) {
125
+ _context.next = 8;
126
+ break;
127
+ }
128
+ return _context.abrupt("return", 'stopped');
129
+ case 8:
130
+ buffer += event.text[i];
131
+ accumulatedRef.current = buffer;
132
+ streamTimelineStore.replace(appendContentToStreamTimeline(streamTimelineStore.getSnapshot(), buffer));
133
+ (_callbacks$onAccumula = callbacks.onAccumulatedChange) === null || _callbacks$onAccumula === void 0 || _callbacks$onAccumula.call(callbacks, buffer);
134
+ // eslint-disable-next-line no-await-in-loop
135
+ _context.next = 9;
136
+ return sleep(delay);
137
+ case 9:
138
+ i += 1;
139
+ _context.next = 7;
140
+ break;
141
+ case 10:
142
+ return _context.abrupt("return", 'continue');
143
+ case 11:
144
+ if (!(event.kind === 'content')) {
145
+ _context.next = 12;
146
+ break;
147
+ }
148
+ callbacks.onLog("event: ".concat(event.label));
149
+ callbacks.onUiPatch({
150
+ isWriting: true
151
+ });
152
+ accumulatedRef.current = mergeStreamChunk(accumulatedRef.current, event.text);
153
+ streamTimelineStore.replace(appendContentToStreamTimeline(streamTimelineStore.getSnapshot(), accumulatedRef.current));
154
+ (_callbacks$onAccumula2 = callbacks.onAccumulatedChange) === null || _callbacks$onAccumula2 === void 0 || _callbacks$onAccumula2.call(callbacks, accumulatedRef.current);
155
+ return _context.abrupt("return", 'continue');
156
+ case 12:
157
+ if (!(event.kind === 'approval_required')) {
158
+ _context.next = 14;
159
+ break;
160
+ }
161
+ callbacks.onLog("event: ".concat(event.label));
162
+ isManual = event.approval.manual_approval_detected === true;
163
+ hitlContext = buildHitlContext(event.approval, accumulatedRef.current);
164
+ hitlContextRef.current = hitlContext;
165
+ callbacks.onHitlContext(hitlContext);
166
+ if (!isManual) {
167
+ _context.next = 13;
168
+ break;
169
+ }
170
+ callbacks.onLog('→ manual_approval_detected: stream sigue');
171
+ callbacks.onUiPatch({
172
+ waitingResponse: true,
173
+ isWriting: false,
174
+ initialActivity: resolveInitialHitlStreamActivity(t, hitlContext)
175
+ });
176
+ return _context.abrupt("return", 'continue');
177
+ case 13:
178
+ callbacks.onLog('→ stream settled: timeline limpiado, ApprovalBox');
179
+ streamTimelineStore.clear();
180
+ callbacks.onUiPatch({
181
+ waitingResponse: false,
182
+ isWriting: false,
183
+ initialActivity: null,
184
+ phase: 'awaiting_approval'
185
+ });
186
+ callbacks.onApprovalUi({
187
+ message: accumulatedRef.current,
188
+ approval: event.approval,
189
+ status: 'pending'
190
+ });
191
+ return _context.abrupt("return", 'pause');
192
+ case 14:
193
+ if (!(event.kind === 'complete')) {
194
+ _context.next = 18;
195
+ break;
196
+ }
197
+ callbacks.onLog("event: ".concat(event.label));
198
+ streamTimelineStore.replace(finalizeStreamTimeline(appendContentToStreamTimeline(streamTimelineStore.getSnapshot(), accumulatedRef.current)));
199
+ callbacks.onUiPatch({
200
+ waitingResponse: false,
201
+ isWriting: false,
202
+ initialActivity: null,
203
+ phase: 'done'
204
+ });
205
+ hitlContextRef.current = null;
206
+ callbacks.onHitlContext(null);
207
+ if (!(callbacks.showProdCompleteBehavior && !callbacks.keepTimelineOnComplete)) {
208
+ _context.next = 17;
209
+ break;
210
+ }
211
+ _context.next = 15;
212
+ return sleep(400);
213
+ case 15:
214
+ if (callbacks.isRunActive(runId)) {
215
+ _context.next = 16;
216
+ break;
217
+ }
218
+ return _context.abrupt("return", 'stopped');
219
+ case 16:
220
+ streamTimelineStore.clear();
221
+ callbacks.onLog('→ timeline limpiado (comportamiento prod)');
222
+ case 17:
223
+ return _context.abrupt("return", 'continue');
224
+ case 18:
225
+ return _context.abrupt("return", 'continue');
226
+ case 19:
227
+ case "end":
228
+ return _context.stop();
229
+ }
230
+ }, _callee);
231
+ }));
232
+ return function applyMockStreamEvent(_x, _x2, _x3, _x4, _x5, _x6) {
233
+ return _ref.apply(this, arguments);
234
+ };
235
+ }();
236
+ export var runMockEventList = /*#__PURE__*/function () {
237
+ var _ref2 = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime.mark(function _callee2(events, runId, t, accumulatedRef, hitlContextRef, callbacks) {
238
+ var _iterator, _step, event, result, _t;
239
+ return _regeneratorRuntime.wrap(function (_context2) {
240
+ while (1) switch (_context2.prev = _context2.next) {
241
+ case 0:
242
+ _iterator = _createForOfIteratorHelper(events);
243
+ _context2.prev = 1;
244
+ _iterator.s();
245
+ case 2:
246
+ if ((_step = _iterator.n()).done) {
247
+ _context2.next = 7;
248
+ break;
249
+ }
250
+ event = _step.value;
251
+ if (callbacks.isRunActive(runId)) {
252
+ _context2.next = 3;
253
+ break;
254
+ }
255
+ return _context2.abrupt("return", 'stopped');
256
+ case 3:
257
+ _context2.next = 4;
258
+ return applyMockStreamEvent(event, runId, t, accumulatedRef, hitlContextRef, callbacks);
259
+ case 4:
260
+ result = _context2.sent;
261
+ if (!(result === 'pause')) {
262
+ _context2.next = 5;
263
+ break;
264
+ }
265
+ return _context2.abrupt("return", 'paused');
266
+ case 5:
267
+ if (!(result === 'stopped')) {
268
+ _context2.next = 6;
269
+ break;
270
+ }
271
+ return _context2.abrupt("return", 'stopped');
272
+ case 6:
273
+ _context2.next = 2;
274
+ break;
275
+ case 7:
276
+ _context2.next = 9;
277
+ break;
278
+ case 8:
279
+ _context2.prev = 8;
280
+ _t = _context2["catch"](1);
281
+ _iterator.e(_t);
282
+ case 9:
283
+ _context2.prev = 9;
284
+ _iterator.f();
285
+ return _context2.finish(9);
286
+ case 10:
287
+ return _context2.abrupt("return", 'completed');
288
+ case 11:
289
+ case "end":
290
+ return _context2.stop();
291
+ }
292
+ }, _callee2, null, [[1, 8, 9, 10]]);
293
+ }));
294
+ return function runMockEventList(_x7, _x8, _x9, _x0, _x1, _x10) {
295
+ return _ref2.apply(this, arguments);
296
+ };
297
+ }();
298
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJzdHJlYW1UaW1lbGluZVN0b3JlIiwiYXBwZW5kQ29udGVudFRvU3RyZWFtVGltZWxpbmUiLCJhcHBlbmROb2RlVG9TdHJlYW1UaW1lbGluZSIsImZpbmFsaXplU3RyZWFtVGltZWxpbmUiLCJzdGFydFN0cmVhbVRpbWVsaW5lVHVybiIsImdldEluaXRpYWxTdHJlYW1BY3Rpdml0eSIsInJlc29sdmVJbml0aWFsSGl0bFN0cmVhbUFjdGl2aXR5IiwicmVzZXRFeGVjdXRpb25TdGVwQ291bnRlciIsIm1lcmdlU3RyZWFtQ2h1bmsiLCJERU1PX1RVUk5fSUQiLCJzbGVlcCIsImJ1aWxkSGl0bENvbnRleHQiLCJhcHByb3ZhbCIsIm1lc3NhZ2VUZXh0IiwiX2FwcHJvdmFsJHBlbmRpbmdfYWN0IiwibWVzc2FnZUlkIiwiY29uY2F0Iiwib3JpZ2luYWxfdGhyZWFkX2lkIiwicGVuZGluZ0FjdGlvbnMiLCJwZW5kaW5nX2FjdGlvbnMiLCJ0aHJlYWRJZHMiLCJtYXAiLCJhY3Rpb24iLCJ0aHJlYWRfaWQiLCJyZXNldE1vY2tSdW5uZXJTdGF0ZSIsImNhbGxiYWNrcyIsImNsZWFyIiwib25IaXRsQ29udGV4dCIsIm9uQXBwcm92YWxVaSIsIm9uVWlQYXRjaCIsIndhaXRpbmdSZXNwb25zZSIsImlzV3JpdGluZyIsImluaXRpYWxBY3Rpdml0eSIsInBoYXNlIiwiYmVnaW5Nb2NrVHVybiIsInR1cm5JZCIsImFyZ3VtZW50cyIsImxlbmd0aCIsInVuZGVmaW5lZCIsInJlcGxhY2UiLCJiZWdpbk1vY2tIaXRsQ29udGludWUiLCJ0IiwiaGl0bENvbnRleHQiLCJhcHBseU1vY2tTdHJlYW1FdmVudCIsIl9yZWYiLCJfYXN5bmNUb0dlbmVyYXRvciIsIl9yZWdlbmVyYXRvclJ1bnRpbWUiLCJtYXJrIiwiX2NhbGxlZSIsImV2ZW50IiwicnVuSWQiLCJhY2N1bXVsYXRlZFJlZiIsImhpdGxDb250ZXh0UmVmIiwiX2V2ZW50JGNoYXJEZWxheU1zIiwiZGVsYXkiLCJidWZmZXIiLCJpIiwiX2NhbGxiYWNrcyRvbkFjY3VtdWxhIiwiX2NhbGxiYWNrcyRvbkFjY3VtdWxhMiIsImlzTWFudWFsIiwid3JhcCIsIl9jb250ZXh0IiwicHJldiIsIm5leHQiLCJpc1J1bkFjdGl2ZSIsImFicnVwdCIsImtpbmQiLCJvbkxvZyIsImxhYmVsIiwibXMiLCJnZXRTbmFwc2hvdCIsImN1cnJlbnQiLCJwYXlsb2FkIiwiY2hhckRlbGF5TXMiLCJ0ZXh0Iiwib25BY2N1bXVsYXRlZENoYW5nZSIsImNhbGwiLCJtYW51YWxfYXBwcm92YWxfZGV0ZWN0ZWQiLCJtZXNzYWdlIiwic3RhdHVzIiwic2hvd1Byb2RDb21wbGV0ZUJlaGF2aW9yIiwia2VlcFRpbWVsaW5lT25Db21wbGV0ZSIsInN0b3AiLCJfeCIsIl94MiIsIl94MyIsIl94NCIsIl94NSIsIl94NiIsImFwcGx5IiwicnVuTW9ja0V2ZW50TGlzdCIsIl9yZWYyIiwiX2NhbGxlZTIiLCJldmVudHMiLCJfaXRlcmF0b3IiLCJfc3RlcCIsInJlc3VsdCIsIl90IiwiX2NvbnRleHQyIiwiX2NyZWF0ZUZvck9mSXRlcmF0b3JIZWxwZXIiLCJzIiwibiIsImRvbmUiLCJ2YWx1ZSIsInNlbnQiLCJlIiwiZiIsImZpbmlzaCIsIl94NyIsIl94OCIsIl94OSIsIl94MCIsIl94MSIsIl94MTAiXSwic291cmNlcyI6WyIuLi8uLi9zcmMvZGV2L21vY2tTdHJlYW1UaW1lbGluZVJ1bm5lci50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7IEFwcHJvdmFsUmVxdWVzdCB9IGZyb20gJy4uL3R5cGVzL0NoYXQnXG5pbXBvcnQgdHlwZSB7IFN0cmVhbUFjdGl2aXR5IH0gZnJvbSAnLi4vdHlwZXMvc3RyZWFtQWN0aXZpdHknXG5pbXBvcnQgeyBzdHJlYW1UaW1lbGluZVN0b3JlIH0gZnJvbSAnLi4vaG9va3MvdXNlU3RyZWFtVGltZWxpbmUnXG5pbXBvcnQge1xuICBhcHBlbmRDb250ZW50VG9TdHJlYW1UaW1lbGluZSxcbiAgYXBwZW5kTm9kZVRvU3RyZWFtVGltZWxpbmUsXG4gIGZpbmFsaXplU3RyZWFtVGltZWxpbmUsXG4gIHN0YXJ0U3RyZWFtVGltZWxpbmVUdXJuLFxufSBmcm9tICcuLi91dGlscy9zdHJlYW1UaW1lbGluZSdcbmltcG9ydCB7XG4gIGdldEluaXRpYWxTdHJlYW1BY3Rpdml0eSxcbiAgcmVzb2x2ZUluaXRpYWxIaXRsU3RyZWFtQWN0aXZpdHksXG4gIHR5cGUgSGl0bEV4ZWN1dGlvbkNvbnRleHQsXG59IGZyb20gJy4uL3V0aWxzL3N0cmVhbUFjdGl2aXR5TWVzc2FnZXMnXG5pbXBvcnQgeyByZXNldEV4ZWN1dGlvblN0ZXBDb3VudGVyIH0gZnJvbSAnLi4vdXRpbHMvc3RyZWFtRXhlY3V0aW9uU3RlcHMnXG5pbXBvcnQgeyBtZXJnZVN0cmVhbUNodW5rIH0gZnJvbSAnLi4vdXRpbHMvc3NlU3RyZWFtQ29udGVudCdcbmltcG9ydCB0eXBlIHsgTW9ja1N0cmVhbVRpbWVsaW5lRXZlbnQgfSBmcm9tICcuL21vY2tTdHJlYW1UaW1lbGluZURlbW8nXG5pbXBvcnQgeyBERU1PX1RVUk5fSUQsIHNsZWVwIH0gZnJvbSAnLi9tb2NrU3RyZWFtVGltZWxpbmVEZW1vJ1xuXG50eXBlIFRyYW5zbGF0ZUZuID0gKGtleTogc3RyaW5nKSA9PiBzdHJpbmdcblxuZXhwb3J0IHR5cGUgTW9ja1J1bm5lclVpU3RhdGUgPSB7XG4gIHdhaXRpbmdSZXNwb25zZTogYm9vbGVhblxuICBpc1dyaXRpbmc6IGJvb2xlYW5cbiAgaW5pdGlhbEFjdGl2aXR5OiBTdHJlYW1BY3Rpdml0eSB8IG51bGxcbiAgcGhhc2U6ICdpZGxlJyB8ICdydW5uaW5nJyB8ICdhd2FpdGluZ19hcHByb3ZhbCcgfCAncnVubmluZ19jb250aW51ZScgfCAnZG9uZSdcbn1cblxuZXhwb3J0IHR5cGUgTW9ja0FwcHJvdmFsVWlTdGF0ZSA9IHtcbiAgbWVzc2FnZTogc3RyaW5nXG4gIGFwcHJvdmFsOiBBcHByb3ZhbFJlcXVlc3RcbiAgc3RhdHVzOiAncGVuZGluZycgfCAnYXBwcm92ZWQnIHwgJ3JlamVjdGVkJ1xufSB8IG51bGxcblxuZXhwb3J0IHR5cGUgQXBwbHlFdmVudFJlc3VsdCA9ICdjb250aW51ZScgfCAncGF1c2UnIHwgJ3N0b3BwZWQnXG5cbmV4cG9ydCB0eXBlIE1vY2tSdW5uZXJDYWxsYmFja3MgPSB7XG4gIG9uVWlQYXRjaDogKHBhdGNoOiBQYXJ0aWFsPE1vY2tSdW5uZXJVaVN0YXRlPikgPT4gdm9pZFxuICBvbkFwcHJvdmFsVWk6IChzdGF0ZTogTW9ja0FwcHJvdmFsVWlTdGF0ZSkgPT4gdm9pZFxuICBvbkhpdGxDb250ZXh0OiAoY3R4OiBIaXRsRXhlY3V0aW9uQ29udGV4dCB8IG51bGwpID0+IHZvaWRcbiAgb25Mb2c6IChsaW5lOiBzdHJpbmcpID0+IHZvaWRcbiAgb25BY2N1bXVsYXRlZENoYW5nZT86ICh0ZXh0OiBzdHJpbmcpID0+IHZvaWRcbiAgZ2V0UnVuSWQ6ICgpID0+IG51bWJlclxuICBpc1J1bkFjdGl2ZTogKHJ1bklkOiBudW1iZXIpID0+IGJvb2xlYW5cbiAgc2hvd1Byb2RDb21wbGV0ZUJlaGF2aW9yOiBib29sZWFuXG4gIGtlZXBUaW1lbGluZU9uQ29tcGxldGU6IGJvb2xlYW5cbn1cblxuY29uc3QgYnVpbGRIaXRsQ29udGV4dCA9IChhcHByb3ZhbDogQXBwcm92YWxSZXF1ZXN0LCBtZXNzYWdlVGV4dDogc3RyaW5nKTogSGl0bEV4ZWN1dGlvbkNvbnRleHQgPT4gKHtcbiAgbWVzc2FnZUlkOiBgYXBwcm92YWwtJHthcHByb3ZhbC5vcmlnaW5hbF90aHJlYWRfaWR9YCxcbiAgbWVzc2FnZVRleHQsXG4gIGFwcHJvdmFsLFxuICBwZW5kaW5nQWN0aW9uczogYXBwcm92YWwucGVuZGluZ19hY3Rpb25zLFxuICB0aHJlYWRJZHM6IGFwcHJvdmFsLnBlbmRpbmdfYWN0aW9ucz8ubWFwKGFjdGlvbiA9PiBhY3Rpb24udGhyZWFkX2lkKSxcbn0pXG5cbmV4cG9ydCBjb25zdCByZXNldE1vY2tSdW5uZXJTdGF0ZSA9IChjYWxsYmFja3M6IE1vY2tSdW5uZXJDYWxsYmFja3MpOiB2b2lkID0+IHtcbiAgc3RyZWFtVGltZWxpbmVTdG9yZS5jbGVhcigpXG4gIHJlc2V0RXhlY3V0aW9uU3RlcENvdW50ZXIoKVxuICBjYWxsYmFja3Mub25IaXRsQ29udGV4dChudWxsKVxuICBjYWxsYmFja3Mub25BcHByb3ZhbFVpKG51bGwpXG4gIGNhbGxiYWNrcy5vblVpUGF0Y2goe1xuICAgIHdhaXRpbmdSZXNwb25zZTogZmFsc2UsXG4gICAgaXNXcml0aW5nOiBmYWxzZSxcbiAgICBpbml0aWFsQWN0aXZpdHk6IG51bGwsXG4gICAgcGhhc2U6ICdpZGxlJyxcbiAgfSlcbn1cblxuZXhwb3J0IGNvbnN0IGJlZ2luTW9ja1R1cm4gPSAoY2FsbGJhY2tzOiBNb2NrUnVubmVyQ2FsbGJhY2tzLCB0dXJuSWQgPSBERU1PX1RVUk5fSUQpOiB2b2lkID0+IHtcbiAgcmVzZXRFeGVjdXRpb25TdGVwQ291bnRlcigpXG4gIHN0cmVhbVRpbWVsaW5lU3RvcmUucmVwbGFjZShzdGFydFN0cmVhbVRpbWVsaW5lVHVybih0dXJuSWQpKVxuICBjYWxsYmFja3Mub25VaVBhdGNoKHsgcGhhc2U6ICdydW5uaW5nJywgd2FpdGluZ1Jlc3BvbnNlOiB0cnVlLCBpc1dyaXRpbmc6IGZhbHNlIH0pXG59XG5cbmV4cG9ydCBjb25zdCBiZWdpbk1vY2tIaXRsQ29udGludWUgPSAoXG4gIHQ6IFRyYW5zbGF0ZUZuLFxuICBoaXRsQ29udGV4dDogSGl0bEV4ZWN1dGlvbkNvbnRleHQsXG4gIGNhbGxiYWNrczogTW9ja1J1bm5lckNhbGxiYWNrcyxcbiAgdHVybklkID0gREVNT19UVVJOX0lEXG4pOiB2b2lkID0+IHtcbiAgcmVzZXRFeGVjdXRpb25TdGVwQ291bnRlcigpXG4gIHN0cmVhbVRpbWVsaW5lU3RvcmUucmVwbGFjZShzdGFydFN0cmVhbVRpbWVsaW5lVHVybih0dXJuSWQpKVxuICBjYWxsYmFja3Mub25IaXRsQ29udGV4dChoaXRsQ29udGV4dClcbiAgY2FsbGJhY2tzLm9uVWlQYXRjaCh7XG4gICAgcGhhc2U6ICdydW5uaW5nX2NvbnRpbnVlJyxcbiAgICB3YWl0aW5nUmVzcG9uc2U6IHRydWUsXG4gICAgaXNXcml0aW5nOiBmYWxzZSxcbiAgICBpbml0aWFsQWN0aXZpdHk6IHJlc29sdmVJbml0aWFsSGl0bFN0cmVhbUFjdGl2aXR5KHQsIGhpdGxDb250ZXh0KSxcbiAgfSlcbn1cblxuZXhwb3J0IGNvbnN0IGFwcGx5TW9ja1N0cmVhbUV2ZW50ID0gYXN5bmMgKFxuICBldmVudDogTW9ja1N0cmVhbVRpbWVsaW5lRXZlbnQsXG4gIHJ1bklkOiBudW1iZXIsXG4gIHQ6IFRyYW5zbGF0ZUZuLFxuICBhY2N1bXVsYXRlZFJlZjogeyBjdXJyZW50OiBzdHJpbmcgfSxcbiAgaGl0bENvbnRleHRSZWY6IHsgY3VycmVudDogSGl0bEV4ZWN1dGlvbkNvbnRleHQgfCBudWxsIH0sXG4gIGNhbGxiYWNrczogTW9ja1J1bm5lckNhbGxiYWNrc1xuKTogUHJvbWlzZTxBcHBseUV2ZW50UmVzdWx0PiA9PiB7XG4gIGlmICghY2FsbGJhY2tzLmlzUnVuQWN0aXZlKHJ1bklkKSkgcmV0dXJuICdzdG9wcGVkJ1xuXG4gIGlmIChldmVudC5raW5kID09PSAnd2FpdCcpIHtcbiAgICBjYWxsYmFja3Mub25Mb2coZXZlbnQubGFiZWwpXG4gICAgYXdhaXQgc2xlZXAoZXZlbnQubXMpXG4gICAgcmV0dXJuIGNhbGxiYWNrcy5pc1J1bkFjdGl2ZShydW5JZCkgPyAnY29udGludWUnIDogJ3N0b3BwZWQnXG4gIH1cblxuICBpZiAoZXZlbnQua2luZCA9PT0gJ3RoaW5raW5nJykge1xuICAgIGNhbGxiYWNrcy5vbkxvZygnZXZlbnQ6IHRoaW5raW5nJylcbiAgICBjYWxsYmFja3Mub25VaVBhdGNoKHtcbiAgICAgIHdhaXRpbmdSZXNwb25zZTogdHJ1ZSxcbiAgICAgIGlzV3JpdGluZzogZmFsc2UsXG4gICAgICBpbml0aWFsQWN0aXZpdHk6IGdldEluaXRpYWxTdHJlYW1BY3Rpdml0eSh0LCB7fSksXG4gICAgfSlcbiAgICByZXR1cm4gJ2NvbnRpbnVlJ1xuICB9XG5cbiAgaWYgKGV2ZW50LmtpbmQgPT09ICd3cml0aW5nJykge1xuICAgIGNhbGxiYWNrcy5vbkxvZygnZXZlbnQ6IHdyaXRpbmdfc3RhcnRlZCcpXG4gICAgY2FsbGJhY2tzLm9uVWlQYXRjaCh7IGlzV3JpdGluZzogdHJ1ZSB9KVxuICAgIHN0cmVhbVRpbWVsaW5lU3RvcmUucmVwbGFjZShcbiAgICAgIGFwcGVuZENvbnRlbnRUb1N0cmVhbVRpbWVsaW5lKHN0cmVhbVRpbWVsaW5lU3RvcmUuZ2V0U25hcHNob3QoKSwgYWNjdW11bGF0ZWRSZWYuY3VycmVudClcbiAgICApXG4gICAgcmV0dXJuICdjb250aW51ZSdcbiAgfVxuXG4gIGlmIChldmVudC5raW5kID09PSAnbm9kZScpIHtcbiAgICBjYWxsYmFja3Mub25Mb2coYGV2ZW50OiAke2V2ZW50LmxhYmVsfWApXG4gICAgc3RyZWFtVGltZWxpbmVTdG9yZS5yZXBsYWNlKFxuICAgICAgYXBwZW5kTm9kZVRvU3RyZWFtVGltZWxpbmUoXG4gICAgICAgIHN0cmVhbVRpbWVsaW5lU3RvcmUuZ2V0U25hcHNob3QoKSxcbiAgICAgICAgZXZlbnQucGF5bG9hZCxcbiAgICAgICAgYWNjdW11bGF0ZWRSZWYuY3VycmVudCxcbiAgICAgICAgdCxcbiAgICAgICAgaGl0bENvbnRleHRSZWYuY3VycmVudCxcbiAgICAgICAgZXZlbnQucGF5bG9hZC50aHJlYWRfaWRcbiAgICAgIClcbiAgICApXG4gICAgcmV0dXJuICdjb250aW51ZSdcbiAgfVxuXG4gIGlmIChldmVudC5raW5kID09PSAndG9rZW5zJykge1xuICAgIGNhbGxiYWNrcy5vbkxvZyhgZXZlbnQ6ICR7ZXZlbnQubGFiZWx9YClcbiAgICBjb25zdCBkZWxheSA9IGV2ZW50LmNoYXJEZWxheU1zID8/IDE4XG4gICAgbGV0IGJ1ZmZlciA9IGFjY3VtdWxhdGVkUmVmLmN1cnJlbnRcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGV2ZW50LnRleHQubGVuZ3RoOyBpICs9IDEpIHtcbiAgICAgIGlmICghY2FsbGJhY2tzLmlzUnVuQWN0aXZlKHJ1bklkKSkgcmV0dXJuICdzdG9wcGVkJ1xuICAgICAgYnVmZmVyICs9IGV2ZW50LnRleHRbaV1cbiAgICAgIGFjY3VtdWxhdGVkUmVmLmN1cnJlbnQgPSBidWZmZXJcbiAgICAgIHN0cmVhbVRpbWVsaW5lU3RvcmUucmVwbGFjZShhcHBlbmRDb250ZW50VG9TdHJlYW1UaW1lbGluZShzdHJlYW1UaW1lbGluZVN0b3JlLmdldFNuYXBzaG90KCksIGJ1ZmZlcikpXG4gICAgICBjYWxsYmFja3Mub25BY2N1bXVsYXRlZENoYW5nZT8uKGJ1ZmZlcilcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1hd2FpdC1pbi1sb29wXG4gICAgICBhd2FpdCBzbGVlcChkZWxheSlcbiAgICB9XG4gICAgcmV0dXJuICdjb250aW51ZSdcbiAgfVxuXG4gIGlmIChldmVudC5raW5kID09PSAnY29udGVudCcpIHtcbiAgICBjYWxsYmFja3Mub25Mb2coYGV2ZW50OiAke2V2ZW50LmxhYmVsfWApXG4gICAgY2FsbGJhY2tzLm9uVWlQYXRjaCh7IGlzV3JpdGluZzogdHJ1ZSB9KVxuICAgIGFjY3VtdWxhdGVkUmVmLmN1cnJlbnQgPSBtZXJnZVN0cmVhbUNodW5rKGFjY3VtdWxhdGVkUmVmLmN1cnJlbnQsIGV2ZW50LnRleHQpXG4gICAgc3RyZWFtVGltZWxpbmVTdG9yZS5yZXBsYWNlKFxuICAgICAgYXBwZW5kQ29udGVudFRvU3RyZWFtVGltZWxpbmUoc3RyZWFtVGltZWxpbmVTdG9yZS5nZXRTbmFwc2hvdCgpLCBhY2N1bXVsYXRlZFJlZi5jdXJyZW50KVxuICAgIClcbiAgICBjYWxsYmFja3Mub25BY2N1bXVsYXRlZENoYW5nZT8uKGFjY3VtdWxhdGVkUmVmLmN1cnJlbnQpXG4gICAgcmV0dXJuICdjb250aW51ZSdcbiAgfVxuXG4gIGlmIChldmVudC5raW5kID09PSAnYXBwcm92YWxfcmVxdWlyZWQnKSB7XG4gICAgY2FsbGJhY2tzLm9uTG9nKGBldmVudDogJHtldmVudC5sYWJlbH1gKVxuICAgIGNvbnN0IGlzTWFudWFsID0gZXZlbnQuYXBwcm92YWwubWFudWFsX2FwcHJvdmFsX2RldGVjdGVkID09PSB0cnVlXG4gICAgY29uc3QgaGl0bENvbnRleHQgPSBidWlsZEhpdGxDb250ZXh0KGV2ZW50LmFwcHJvdmFsLCBhY2N1bXVsYXRlZFJlZi5jdXJyZW50KVxuICAgIGhpdGxDb250ZXh0UmVmLmN1cnJlbnQgPSBoaXRsQ29udGV4dFxuICAgIGNhbGxiYWNrcy5vbkhpdGxDb250ZXh0KGhpdGxDb250ZXh0KVxuXG4gICAgaWYgKGlzTWFudWFsKSB7XG4gICAgICBjYWxsYmFja3Mub25Mb2coJ+KGkiBtYW51YWxfYXBwcm92YWxfZGV0ZWN0ZWQ6IHN0cmVhbSBzaWd1ZScpXG4gICAgICBjYWxsYmFja3Mub25VaVBhdGNoKHtcbiAgICAgICAgd2FpdGluZ1Jlc3BvbnNlOiB0cnVlLFxuICAgICAgICBpc1dyaXRpbmc6IGZhbHNlLFxuICAgICAgICBpbml0aWFsQWN0aXZpdHk6IHJlc29sdmVJbml0aWFsSGl0bFN0cmVhbUFjdGl2aXR5KHQsIGhpdGxDb250ZXh0KSxcbiAgICAgIH0pXG4gICAgICByZXR1cm4gJ2NvbnRpbnVlJ1xuICAgIH1cblxuICAgIGNhbGxiYWNrcy5vbkxvZygn4oaSIHN0cmVhbSBzZXR0bGVkOiB0aW1lbGluZSBsaW1waWFkbywgQXBwcm92YWxCb3gnKVxuICAgIHN0cmVhbVRpbWVsaW5lU3RvcmUuY2xlYXIoKVxuICAgIGNhbGxiYWNrcy5vblVpUGF0Y2goe1xuICAgICAgd2FpdGluZ1Jlc3BvbnNlOiBmYWxzZSxcbiAgICAgIGlzV3JpdGluZzogZmFsc2UsXG4gICAgICBpbml0aWFsQWN0aXZpdHk6IG51bGwsXG4gICAgICBwaGFzZTogJ2F3YWl0aW5nX2FwcHJvdmFsJyxcbiAgICB9KVxuICAgIGNhbGxiYWNrcy5vbkFwcHJvdmFsVWkoe1xuICAgICAgbWVzc2FnZTogYWNjdW11bGF0ZWRSZWYuY3VycmVudCxcbiAgICAgIGFwcHJvdmFsOiBldmVudC5hcHByb3ZhbCxcbiAgICAgIHN0YXR1czogJ3BlbmRpbmcnLFxuICAgIH0pXG4gICAgcmV0dXJuICdwYXVzZSdcbiAgfVxuXG4gIGlmIChldmVudC5raW5kID09PSAnY29tcGxldGUnKSB7XG4gICAgY2FsbGJhY2tzLm9uTG9nKGBldmVudDogJHtldmVudC5sYWJlbH1gKVxuICAgIHN0cmVhbVRpbWVsaW5lU3RvcmUucmVwbGFjZShcbiAgICAgIGZpbmFsaXplU3RyZWFtVGltZWxpbmUoYXBwZW5kQ29udGVudFRvU3RyZWFtVGltZWxpbmUoc3RyZWFtVGltZWxpbmVTdG9yZS5nZXRTbmFwc2hvdCgpLCBhY2N1bXVsYXRlZFJlZi5jdXJyZW50KSlcbiAgICApXG4gICAgY2FsbGJhY2tzLm9uVWlQYXRjaCh7XG4gICAgICB3YWl0aW5nUmVzcG9uc2U6IGZhbHNlLFxuICAgICAgaXNXcml0aW5nOiBmYWxzZSxcbiAgICAgIGluaXRpYWxBY3Rpdml0eTogbnVsbCxcbiAgICAgIHBoYXNlOiAnZG9uZScsXG4gICAgfSlcbiAgICBoaXRsQ29udGV4dFJlZi5jdXJyZW50ID0gbnVsbFxuICAgIGNhbGxiYWNrcy5vbkhpdGxDb250ZXh0KG51bGwpXG5cbiAgICBpZiAoY2FsbGJhY2tzLnNob3dQcm9kQ29tcGxldGVCZWhhdmlvciAmJiAhY2FsbGJhY2tzLmtlZXBUaW1lbGluZU9uQ29tcGxldGUpIHtcbiAgICAgIGF3YWl0IHNsZWVwKDQwMClcbiAgICAgIGlmICghY2FsbGJhY2tzLmlzUnVuQWN0aXZlKHJ1bklkKSkgcmV0dXJuICdzdG9wcGVkJ1xuICAgICAgc3RyZWFtVGltZWxpbmVTdG9yZS5jbGVhcigpXG4gICAgICBjYWxsYmFja3Mub25Mb2coJ+KGkiB0aW1lbGluZSBsaW1waWFkbyAoY29tcG9ydGFtaWVudG8gcHJvZCknKVxuICAgIH1cbiAgICByZXR1cm4gJ2NvbnRpbnVlJ1xuICB9XG5cbiAgcmV0dXJuICdjb250aW51ZSdcbn1cblxuZXhwb3J0IGNvbnN0IHJ1bk1vY2tFdmVudExpc3QgPSBhc3luYyAoXG4gIGV2ZW50czogTW9ja1N0cmVhbVRpbWVsaW5lRXZlbnRbXSxcbiAgcnVuSWQ6IG51bWJlcixcbiAgdDogVHJhbnNsYXRlRm4sXG4gIGFjY3VtdWxhdGVkUmVmOiB7IGN1cnJlbnQ6IHN0cmluZyB9LFxuICBoaXRsQ29udGV4dFJlZjogeyBjdXJyZW50OiBIaXRsRXhlY3V0aW9uQ29udGV4dCB8IG51bGwgfSxcbiAgY2FsbGJhY2tzOiBNb2NrUnVubmVyQ2FsbGJhY2tzXG4pOiBQcm9taXNlPCdjb21wbGV0ZWQnIHwgJ3BhdXNlZCcgfCAnc3RvcHBlZCc+ID0+IHtcbiAgZm9yIChjb25zdCBldmVudCBvZiBldmVudHMpIHtcbiAgICBpZiAoIWNhbGxiYWNrcy5pc1J1bkFjdGl2ZShydW5JZCkpIHJldHVybiAnc3RvcHBlZCdcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tYXdhaXQtaW4tbG9vcFxuICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGFwcGx5TW9ja1N0cmVhbUV2ZW50KGV2ZW50LCBydW5JZCwgdCwgYWNjdW11bGF0ZWRSZWYsIGhpdGxDb250ZXh0UmVmLCBjYWxsYmFja3MpXG4gICAgaWYgKHJlc3VsdCA9PT0gJ3BhdXNlJykgcmV0dXJuICdwYXVzZWQnXG4gICAgaWYgKHJlc3VsdCA9PT0gJ3N0b3BwZWQnKSByZXR1cm4gJ3N0b3BwZWQnXG4gIH1cbiAgcmV0dXJuICdjb21wbGV0ZWQnXG59XG4iXSwibWFwcGluZ3MiOiI7Ozs7O0FBRUEsU0FBU0EsbUJBQW1CLFFBQVEsNEJBQTRCO0FBQ2hFLFNBQ0VDLDZCQUE2QixFQUM3QkMsMEJBQTBCLEVBQzFCQyxzQkFBc0IsRUFDdEJDLHVCQUF1QixRQUNsQix5QkFBeUI7QUFDaEMsU0FDRUMsd0JBQXdCLEVBQ3hCQyxnQ0FBZ0MsUUFFM0IsaUNBQWlDO0FBQ3hDLFNBQVNDLHlCQUF5QixRQUFRLCtCQUErQjtBQUN6RSxTQUFTQyxn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
@@ -9,6 +9,7 @@ import { useState, useRef } from 'react';
9
9
  import { useTranslation } from 'react-i18next';
10
10
  import { createAgent } from '../../services/maia/Agents/createAgent';
11
11
  import { setAgentToolGroups } from '../../services/maia/Agents/setAgentToolGroups';
12
+ import { connectorAuthErrorMessage, openConnectorAuthorizationWindows, saveAgentConnectors } from '../../services/maia/Agents/connectors';
12
13
  import { useSnackBarManager } from '../useSnackBarManager/useSnackBarManager';
13
14
  import { buildAgentToolGroupsRequest, buildAgentConnectorsFromTaskAccess } from '../../utils/normalizeAgentConnectors';
14
15
  export var parsedValuesByReq = function parsedValuesByReq(agentValues) {
@@ -46,7 +47,7 @@ export var useCreateAgent = function useCreateAgent() {
46
47
  };
47
48
  var handleCreateAgent = /*#__PURE__*/function () {
48
49
  var _ref = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime.mark(function _callee(values) {
49
- var parsedValue, _values$accessibility, _values$accessibility2, response, taskAccess, _t, _t2;
50
+ var parsedValue, _values$accessibility, _values$accessibility2, _values$accessibility3, response, taskAccess, selectedConnectors, authPopup, connectorsResponse, authErrors, _t, _t2, _t3;
50
51
  return _regeneratorRuntime.wrap(function (_context) {
51
52
  while (1) switch (_context.prev = _context.next) {
52
53
  case 0:
@@ -72,8 +73,10 @@ export var useCreateAgent = function useCreateAgent() {
72
73
  throw new Error(response.error);
73
74
  case 4:
74
75
  taskAccess = (_values$accessibility = (_values$accessibility2 = values.accessibility) === null || _values$accessibility2 === void 0 ? void 0 : _values$accessibility2.taskAccess) !== null && _values$accessibility !== void 0 ? _values$accessibility : true;
76
+ selectedConnectors = ((_values$accessibility3 = values.accessibility) === null || _values$accessibility3 === void 0 ? void 0 : _values$accessibility3.selectedConnectors) || [];
77
+ authPopup = selectedConnectors.length > 0 ? window.open('', '_blank', 'popup=yes,width=560,height=760') : null;
75
78
  if (!(response !== null && response !== void 0 && response.id)) {
76
- _context.next = 8;
79
+ _context.next = 11;
77
80
  break;
78
81
  }
79
82
  _context.prev = 5;
@@ -87,27 +90,50 @@ export var useCreateAgent = function useCreateAgent() {
87
90
  _t = _context["catch"](5);
88
91
  console.error('Error setting agent tool groups:', _t);
89
92
  case 8:
93
+ _context.prev = 8;
94
+ _context.next = 9;
95
+ return saveAgentConnectors(response.id.toString(), selectedConnectors);
96
+ case 9:
97
+ connectorsResponse = _context.sent;
98
+ openConnectorAuthorizationWindows(connectorsResponse.requires_auth || [], authPopup);
99
+ authErrors = connectorsResponse.auth_errors || [];
100
+ if (authErrors.length) {
101
+ handleSnackbarError(authErrors.map(function (error) {
102
+ return error.slug === 'netsuite' ? t('accessibilitySection.netsuiteAuthSetupRequired') : connectorAuthErrorMessage(error);
103
+ }).join(' '));
104
+ }
105
+ _context.next = 11;
106
+ break;
107
+ case 10:
108
+ _context.prev = 10;
109
+ _t2 = _context["catch"](8);
110
+ console.error('Error setting agent connectors:', _t2);
111
+ if (authPopup && !authPopup.closed) {
112
+ authPopup.close();
113
+ }
114
+ handleSnackbarError(t('accessibilitySection.connectorAuthFailed'));
115
+ case 11:
90
116
  setError(null);
91
117
  setSuccess(_objectSpread(_objectSpread({}, response), {}, {
92
- connectors: buildAgentConnectorsFromTaskAccess(taskAccess)
118
+ connectors: buildAgentConnectorsFromTaskAccess(taskAccess, selectedConnectors)
93
119
  }));
94
- _context.next = 10;
120
+ _context.next = 13;
95
121
  break;
96
- case 9:
97
- _context.prev = 9;
98
- _t2 = _context["catch"](2);
99
- setError(_t2 instanceof Error ? _t2.message : t('errorAgentCreated'));
122
+ case 12:
123
+ _context.prev = 12;
124
+ _t3 = _context["catch"](2);
125
+ setError(_t3 instanceof Error ? _t3.message : t('errorAgentCreated'));
100
126
  handleSnackbarError(t('errorAgentCreated'));
101
- case 10:
102
- _context.prev = 10;
127
+ case 13:
128
+ _context.prev = 13;
103
129
  setIsLoading(false);
104
130
  isProcessingRef.current = false;
105
- return _context.finish(10);
106
- case 11:
131
+ return _context.finish(13);
132
+ case 14:
107
133
  case "end":
108
134
  return _context.stop();
109
135
  }
110
- }, _callee, null, [[2, 9, 10, 11], [5, 7]]);
136
+ }, _callee, null, [[2, 12, 13, 14], [5, 7], [8, 10]]);
111
137
  }));
112
138
  return function handleCreateAgent(_x) {
113
139
  return _ref.apply(this, arguments);
@@ -125,4 +151,4 @@ export var useCreateAgent = function useCreateAgent() {
125
151
  resetSuccess: resetSuccess
126
152
  };
127
153
  };
128
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJ1c2VTdGF0ZSIsInVzZVJlZiIsInVzZVRyYW5zbGF0aW9uIiwiY3JlYXRlQWdlbnQiLCJzZXRBZ2VudFRvb2xHcm91cHMiLCJ1c2VTbmFja0Jhck1hbmFnZXIiLCJidWlsZEFnZW50VG9vbEdyb3Vwc1JlcXVlc3QiLCJidWlsZEFnZW50Q29ubmVjdG9yc0Zyb21UYXNrQWNjZXNzIiwicGFyc2VkVmFsdWVzQnlSZXEiLCJhZ2VudFZhbHVlcyIsIl9hZ2VudFZhbHVlcyRhaU1vZGVsIiwiX2FnZW50VmFsdWVzJGFpTW9kZWwyIiwibmFtZSIsImVtb2ppIiwiaW50cm9kdWN0aW9uIiwiaW5wdXRfcGxhY2Vob2xkZXIiLCJpbnB1dFBsYWNlaG9sZGVyIiwidXNlcl9wcm9tcHQiLCJ1c2VyUHJvbXB0IiwicHJvdmlkZXIiLCJhaU1vZGVsIiwibW9kZWxfbmFtZSIsInVzZUNyZWF0ZUFnZW50IiwiX3VzZVRyYW5zbGF0aW9uIiwidCIsIl91c2VTdGF0ZSIsIl91c2VTdGF0ZTIiLCJfc2xpY2VkVG9BcnJheSIsImlzTG9hZGluZyIsInNldElzTG9hZGluZyIsIl91c2VTdGF0ZTMiLCJfdXNlU3RhdGU0IiwiZXJyb3IiLCJzZXRFcnJvciIsIl91c2VTdGF0ZTUiLCJfdXNlU3RhdGU2Iiwic3VjY2VzcyIsInNldFN1Y2Nlc3MiLCJfdXNlU25hY2tCYXJNYW5hZ2VyIiwiaGFuZGxlU25hY2tiYXJFcnJvciIsImlzUHJvY2Vzc2luZ1JlZiIsImhhbmRsZVNldFN1Y2Nlc3MiLCJ2YWx1ZSIsImhhbmRsZUNyZWF0ZUFnZW50IiwiX3JlZiIsIl9hc3luY1RvR2VuZXJhdG9yIiwiX3JlZ2VuZXJhdG9yUnVudGltZSIsIm1hcmsiLCJfY2FsbGVlIiwidmFsdWVzIiwicGFyc2VkVmFsdWUiLCJfdmFsdWVzJGFjY2Vzc2liaWxpdHkiLCJfdmFsdWVzJGFjY2Vzc2liaWxpdHkyIiwicmVzcG9uc2UiLCJ0YXNrQWNjZXNzIiwiX3QiLCJfdDIiLCJ3cmFwIiwiX2NvbnRleHQiLCJwcmV2IiwibmV4dCIsImN1cnJlbnQiLCJhYnJ1cHQiLCJnZW5lcmFsIiwic2VudCIsIkVycm9yIiwiYWNjZXNzaWJpbGl0eSIsImlkIiwidG9TdHJpbmciLCJjb25zb2xlIiwiX29iamVjdFNwcmVhZCIsImNvbm5lY3RvcnMiLCJtZXNzYWdlIiwiZmluaXNoIiwic3RvcCIsIl94IiwiYXBwbHkiLCJhcmd1bWVudHMiLCJyZXNldFN1Y2Nlc3MiXSwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvaG9va3MvdXNlQWdlbnRNb2RlbC91c2VDcmVhdGVBZ2VudC50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKiBlc2xpbnQtZGlzYWJsZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55ICovXG5pbXBvcnQgeyB1c2VTdGF0ZSwgdXNlUmVmIH0gZnJvbSAncmVhY3QnXG5pbXBvcnQgeyB1c2VUcmFuc2xhdGlvbiB9IGZyb20gJ3JlYWN0LWkxOG5leHQnXG5pbXBvcnQgeyBBZ2VudENyZWF0ZVJlcXVlc3QsIGNyZWF0ZUFnZW50IH0gZnJvbSAnLi4vLi4vc2VydmljZXMvbWFpYS9BZ2VudHMvY3JlYXRlQWdlbnQnXG5pbXBvcnQgeyBzZXRBZ2VudFRvb2xHcm91cHMgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9tYWlhL0FnZW50cy9zZXRBZ2VudFRvb2xHcm91cHMnXG5pbXBvcnQgeyB1c2VTbmFja0Jhck1hbmFnZXIgfSBmcm9tICcuLi91c2VTbmFja0Jhck1hbmFnZXIvdXNlU25hY2tCYXJNYW5hZ2VyJ1xuaW1wb3J0IHsgYnVpbGRBZ2VudFRvb2xHcm91cHNSZXF1ZXN0LCBidWlsZEFnZW50Q29ubmVjdG9yc0Zyb21UYXNrQWNjZXNzIH0gZnJvbSAnLi4vLi4vdXRpbHMvbm9ybWFsaXplQWdlbnRDb25uZWN0b3JzJ1xuXG5leHBvcnQgY29uc3QgcGFyc2VkVmFsdWVzQnlSZXEgPSAoYWdlbnRWYWx1ZXM6IGFueSk6IEFnZW50Q3JlYXRlUmVxdWVzdCA9PiB7XG4gIHJldHVybiB7XG4gICAgbmFtZTogYWdlbnRWYWx1ZXMubmFtZSxcbiAgICBlbW9qaTogYWdlbnRWYWx1ZXMuZW1vamkgfHwgJ+KcqCcsXG4gICAgaW50cm9kdWN0aW9uOiBhZ2VudFZhbHVlcy5pbnRyb2R1Y3Rpb24gfHwgJycsXG4gICAgaW5wdXRfcGxhY2Vob2xkZXI6IGFnZW50VmFsdWVzLmlucHV0UGxhY2Vob2xkZXIgfHwgJycsXG4gICAgdXNlcl9wcm9tcHQ6IGFnZW50VmFsdWVzLnVzZXJQcm9tcHQsXG4gICAgcHJvdmlkZXI6IGFnZW50VmFsdWVzLmFpTW9kZWw/LnByb3ZpZGVyLFxuICAgIG1vZGVsX25hbWU6IGFnZW50VmFsdWVzLmFpTW9kZWw/Lm1vZGVsX25hbWUsXG4gIH1cbn1cblxuZXhwb3J0IGNvbnN0IHVzZUNyZWF0ZUFnZW50ID0gKCkgPT4ge1xuICBjb25zdCB7IHQgfSA9IHVzZVRyYW5zbGF0aW9uKCdhYm1fYWdlbnRfc2VjdGlvbicpXG4gIGNvbnN0IFtpc0xvYWRpbmcsIHNldElzTG9hZGluZ10gPSB1c2VTdGF0ZShmYWxzZSlcbiAgY29uc3QgW2Vycm9yLCBzZXRFcnJvcl0gPSB1c2VTdGF0ZTxzdHJpbmcgfCBudWxsPihudWxsKVxuICBjb25zdCBbc3VjY2Vzcywgc2V0U3VjY2Vzc10gPSB1c2VTdGF0ZTxhbnk+KGZhbHNlKVxuICBjb25zdCB7IGhhbmRsZVNuYWNrYmFyRXJyb3IgfSA9IHVzZVNuYWNrQmFyTWFuYWdlcigpXG4gIGNvbnN0IGlzUHJvY2Vzc2luZ1JlZiA9IHVzZVJlZihmYWxzZSlcblxuICBjb25zdCBoYW5kbGVTZXRTdWNjZXNzID0gKHZhbHVlOiBib29sZWFuKSA9PiB7XG4gICAgc2V0U3VjY2Vzcyh2YWx1ZSlcbiAgfVxuXG4gIGNvbnN0IGhhbmRsZUNyZWF0ZUFnZW50ID0gYXN5bmMgKHZhbHVlczogYW55KSA9PiB7XG4gICAgaWYgKGlzUHJvY2Vzc2luZ1JlZi5jdXJyZW50KSB7XG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICBjb25zdCBwYXJzZWRWYWx1ZTogQWdlbnRDcmVhdGVSZXF1ZXN0ID0gcGFyc2VkVmFsdWVzQnlSZXEodmFsdWVzLmdlbmVyYWwpXG5cbiAgICBpc1Byb2Nlc3NpbmdSZWYuY3VycmVudCA9IHRydWVcbiAgICBzZXRJc0xvYWRpbmcodHJ1ZSlcbiAgICBzZXRTdWNjZXNzKGZhbHNlKVxuXG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgY3JlYXRlQWdlbnQocGFyc2VkVmFsdWUpXG5cbiAgICAgIGlmIChyZXNwb25zZS5lcnJvcikge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IocmVzcG9uc2UuZXJyb3IpXG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHRhc2tBY2Nlc3MgPSB2YWx1ZXMuYWNjZXNzaWJpbGl0eT8udGFza0FjY2VzcyA/PyB0cnVlXG5cbiAgICAgIGlmIChyZXNwb25zZT8uaWQpIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBhd2FpdCBzZXRBZ2VudFRvb2xHcm91cHMocmVzcG9uc2UuaWQudG9TdHJpbmcoKSwgYnVpbGRBZ2VudFRvb2xHcm91cHNSZXF1ZXN0KHRhc2tBY2Nlc3MpKVxuICAgICAgICB9IGNhdGNoICh0b29sR3JvdXBzRXJyb3IpIHtcbiAgICAgICAgICBjb25zb2xlLmVycm9yKCdFcnJvciBzZXR0aW5nIGFnZW50IHRvb2wgZ3JvdXBzOicsIHRvb2xHcm91cHNFcnJvcilcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBzZXRFcnJvcihudWxsKVxuICAgICAgc2V0U3VjY2Vzcyh7IC4uLnJlc3BvbnNlLCBjb25uZWN0b3JzOiBidWlsZEFnZW50Q29ubmVjdG9yc0Zyb21UYXNrQWNjZXNzKHRhc2tBY2Nlc3MpIH0pXG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICBzZXRFcnJvcihlcnIgaW5zdGFuY2VvZiBFcnJvciA/IGVyci5tZXNzYWdlIDogdCgnZXJyb3JBZ2VudENyZWF0ZWQnKSlcbiAgICAgIGhhbmRsZVNuYWNrYmFyRXJyb3IodCgnZXJyb3JBZ2VudENyZWF0ZWQnKSlcbiAgICB9IGZpbmFsbHkge1xuICAgICAgc2V0SXNMb2FkaW5nKGZhbHNlKVxuICAgICAgaXNQcm9jZXNzaW5nUmVmLmN1cnJlbnQgPSBmYWxzZVxuICAgIH1cbiAgfVxuXG4gIGNvbnN0IHJlc2V0U3VjY2VzcyA9ICgpID0+IHtcbiAgICBzZXRTdWNjZXNzKGZhbHNlKVxuICB9XG5cbiAgcmV0dXJuIHtcbiAgICBoYW5kbGVDcmVhdGVBZ2VudCxcbiAgICBpc0xvYWRpbmcsXG4gICAgZXJyb3IsXG4gICAgc3VjY2VzcyxcbiAgICBoYW5kbGVTZXRTdWNjZXNzLFxuICAgIHJlc2V0U3VjY2VzcyxcbiAgfVxufVxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7QUFBQTtBQUNBLFNBQVNBLFFBQVEsRUFBRUMsTUFBTSxRQUFRLE9BQU87QUFDeEMsU0FBU0MsY0FBYyxRQUFRLGVBQWU7QUFDOUMsU0FBNkJDLFdBQVcsUUFBUSx3Q0FBd0M7QUFDeEYsU0FBU0Msa0JBQWtCLFFBQVEsK0NBQStDO0FBQ2xGLFNBQVNDLGtCQUFrQixRQUFRLDBDQUEwQztBQUM3RSxTQUFTQywyQkFBMkIsRUFBRUMsa0NBQWtDLFFBQVEsc0NBQXNDO0FBRXRILE9BQU8sSUFBTUMsaUJBQWlCLEdBQUcsU0FBcEJBLGlCQUFpQkEsQ0FBSUMsV0FBZ0IsRUFBeUI7RUFBQSxJQUFBQyxvQkFBQSxFQUFBQyxxQkFBQTtFQUN6RSxPQUFPO0lBQ0xDLElBQUksRUFBRUgsV0FBVyxDQUFDRyxJQUFJO0lBQ3RCQyxLQUFLLEVBQUVKLFdBQVcsQ0FBQ0ksS0FBSyxJQUFJLEdBQUc7SUFDL0JDLFlBQVksRUFBRUwsV0FBVyxDQUFDSyxZQUFZLElBQUksRUFBRTtJQUM1Q0MsaUJBQWlCLEVBQUVOLFdBQVcsQ0FBQ08sZ0JBQWdCLElBQUksRUFBRTtJQUNyREMsV0FBVyxFQUFFUixXQUFXLENBQUNTLFVBQVU7SUFDbkNDLFFBQVEsR0FBQVQsb0JBQUEsR0FBRUQsV0FBVyxDQUFDVyxPQUFPLGNBQUFWLG9CQUFBLHVCQUFuQkEsb0JBQUEsQ0FBcUJTLFFBQVE7SUFD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
154
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJ1c2VTdGF0ZSIsInVzZVJlZiIsInVzZVRyYW5zbGF0aW9uIiwiY3JlYXRlQWdlbnQiLCJzZXRBZ2VudFRvb2xHcm91cHMiLCJjb25uZWN0b3JBdXRoRXJyb3JNZXNzYWdlIiwib3BlbkNvbm5lY3RvckF1dGhvcml6YXRpb25XaW5kb3dzIiwic2F2ZUFnZW50Q29ubmVjdG9ycyIsInVzZVNuYWNrQmFyTWFuYWdlciIsImJ1aWxkQWdlbnRUb29sR3JvdXBzUmVxdWVzdCIsImJ1aWxkQWdlbnRDb25uZWN0b3JzRnJvbVRhc2tBY2Nlc3MiLCJwYXJzZWRWYWx1ZXNCeVJlcSIsImFnZW50VmFsdWVzIiwiX2FnZW50VmFsdWVzJGFpTW9kZWwiLCJfYWdlbnRWYWx1ZXMkYWlNb2RlbDIiLCJuYW1lIiwiZW1vamkiLCJpbnRyb2R1Y3Rpb24iLCJpbnB1dF9wbGFjZWhvbGRlciIsImlucHV0UGxhY2Vob2xkZXIiLCJ1c2VyX3Byb21wdCIsInVzZXJQcm9tcHQiLCJwcm92aWRlciIsImFpTW9kZWwiLCJtb2RlbF9uYW1lIiwidXNlQ3JlYXRlQWdlbnQiLCJfdXNlVHJhbnNsYXRpb24iLCJ0IiwiX3VzZVN0YXRlIiwiX3VzZVN0YXRlMiIsIl9zbGljZWRUb0FycmF5IiwiaXNMb2FkaW5nIiwic2V0SXNMb2FkaW5nIiwiX3VzZVN0YXRlMyIsIl91c2VTdGF0ZTQiLCJlcnJvciIsInNldEVycm9yIiwiX3VzZVN0YXRlNSIsIl91c2VTdGF0ZTYiLCJzdWNjZXNzIiwic2V0U3VjY2VzcyIsIl91c2VTbmFja0Jhck1hbmFnZXIiLCJoYW5kbGVTbmFja2JhckVycm9yIiwiaXNQcm9jZXNzaW5nUmVmIiwiaGFuZGxlU2V0U3VjY2VzcyIsInZhbHVlIiwiaGFuZGxlQ3JlYXRlQWdlbnQiLCJfcmVmIiwiX2FzeW5jVG9HZW5lcmF0b3IiLCJfcmVnZW5lcmF0b3JSdW50aW1lIiwibWFyayIsIl9jYWxsZWUiLCJ2YWx1ZXMiLCJwYXJzZWRWYWx1ZSIsIl92YWx1ZXMkYWNjZXNzaWJpbGl0eSIsIl92YWx1ZXMkYWNjZXNzaWJpbGl0eTIiLCJfdmFsdWVzJGFjY2Vzc2liaWxpdHkzIiwicmVzcG9uc2UiLCJ0YXNrQWNjZXNzIiwic2VsZWN0ZWRDb25uZWN0b3JzIiwiYXV0aFBvcHVwIiwiY29ubmVjdG9yc1Jlc3BvbnNlIiwiYXV0aEVycm9ycyIsIl90IiwiX3QyIiwiX3QzIiwid3JhcCIsIl9jb250ZXh0IiwicHJldiIsIm5leHQiLCJjdXJyZW50IiwiYWJydXB0IiwiZ2VuZXJhbCIsInNlbnQiLCJFcnJvciIsImFjY2Vzc2liaWxpdHkiLCJsZW5ndGgiLCJ3aW5kb3ciLCJvcGVuIiwiaWQiLCJ0b1N0cmluZyIsImNvbnNvbGUiLCJyZXF1aXJlc19hdXRoIiwiYXV0aF9lcnJvcnMiLCJtYXAiLCJzbHVnIiwiam9pbiIsImNsb3NlZCIsImNsb3NlIiwiX29iamVjdFNwcmVhZCIsImNvbm5lY3RvcnMiLCJtZXNzYWdlIiwiZmluaXNoIiwic3RvcCIsIl94IiwiYXBwbHkiLCJhcmd1bWVudHMiLCJyZXNldFN1Y2Nlc3MiXSwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvaG9va3MvdXNlQWdlbnRNb2RlbC91c2VDcmVhdGVBZ2VudC50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKiBlc2xpbnQtZGlzYWJsZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55ICovXG5pbXBvcnQgeyB1c2VTdGF0ZSwgdXNlUmVmIH0gZnJvbSAncmVhY3QnXG5pbXBvcnQgeyB1c2VUcmFuc2xhdGlvbiB9IGZyb20gJ3JlYWN0LWkxOG5leHQnXG5pbXBvcnQgeyBBZ2VudENyZWF0ZVJlcXVlc3QsIGNyZWF0ZUFnZW50IH0gZnJvbSAnLi4vLi4vc2VydmljZXMvbWFpYS9BZ2VudHMvY3JlYXRlQWdlbnQnXG5pbXBvcnQgeyBzZXRBZ2VudFRvb2xHcm91cHMgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9tYWlhL0FnZW50cy9zZXRBZ2VudFRvb2xHcm91cHMnXG5pbXBvcnQgeyBjb25uZWN0b3JBdXRoRXJyb3JNZXNzYWdlLCBvcGVuQ29ubmVjdG9yQXV0aG9yaXphdGlvbldpbmRvd3MsIHNhdmVBZ2VudENvbm5lY3RvcnMgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9tYWlhL0FnZW50cy9jb25uZWN0b3JzJ1xuaW1wb3J0IHsgdXNlU25hY2tCYXJNYW5hZ2VyIH0gZnJvbSAnLi4vdXNlU25hY2tCYXJNYW5hZ2VyL3VzZVNuYWNrQmFyTWFuYWdlcidcbmltcG9ydCB7IGJ1aWxkQWdlbnRUb29sR3JvdXBzUmVxdWVzdCwgYnVpbGRBZ2VudENvbm5lY3RvcnNGcm9tVGFza0FjY2VzcyB9IGZyb20gJy4uLy4uL3V0aWxzL25vcm1hbGl6ZUFnZW50Q29ubmVjdG9ycydcblxuZXhwb3J0IGNvbnN0IHBhcnNlZFZhbHVlc0J5UmVxID0gKGFnZW50VmFsdWVzOiBhbnkpOiBBZ2VudENyZWF0ZVJlcXVlc3QgPT4ge1xuICByZXR1cm4ge1xuICAgIG5hbWU6IGFnZW50VmFsdWVzLm5hbWUsXG4gICAgZW1vamk6IGFnZW50VmFsdWVzLmVtb2ppIHx8ICfinKgnLFxuICAgIGludHJvZHVjdGlvbjogYWdlbnRWYWx1ZXMuaW50cm9kdWN0aW9uIHx8ICcnLFxuICAgIGlucHV0X3BsYWNlaG9sZGVyOiBhZ2VudFZhbHVlcy5pbnB1dFBsYWNlaG9sZGVyIHx8ICcnLFxuICAgIHVzZXJfcHJvbXB0OiBhZ2VudFZhbHVlcy51c2VyUHJvbXB0LFxuICAgIHByb3ZpZGVyOiBhZ2VudFZhbHVlcy5haU1vZGVsPy5wcm92aWRlcixcbiAgICBtb2RlbF9uYW1lOiBhZ2VudFZhbHVlcy5haU1vZGVsPy5tb2RlbF9uYW1lLFxuICB9XG59XG5cbmV4cG9ydCBjb25zdCB1c2VDcmVhdGVBZ2VudCA9ICgpID0+IHtcbiAgY29uc3QgeyB0IH0gPSB1c2VUcmFuc2xhdGlvbignYWJtX2FnZW50X3NlY3Rpb24nKVxuICBjb25zdCBbaXNMb2FkaW5nLCBzZXRJc0xvYWRpbmddID0gdXNlU3RhdGUoZmFsc2UpXG4gIGNvbnN0IFtlcnJvciwgc2V0RXJyb3JdID0gdXNlU3RhdGU8c3RyaW5nIHwgbnVsbD4obnVsbClcbiAgY29uc3QgW3N1Y2Nlc3MsIHNldFN1Y2Nlc3NdID0gdXNlU3RhdGU8YW55PihmYWxzZSlcbiAgY29uc3QgeyBoYW5kbGVTbmFja2JhckVycm9yIH0gPSB1c2VTbmFja0Jhck1hbmFnZXIoKVxuICBjb25zdCBpc1Byb2Nlc3NpbmdSZWYgPSB1c2VSZWYoZmFsc2UpXG5cbiAgY29uc3QgaGFuZGxlU2V0U3VjY2VzcyA9ICh2YWx1ZTogYm9vbGVhbikgPT4ge1xuICAgIHNldFN1Y2Nlc3ModmFsdWUpXG4gIH1cblxuICBjb25zdCBoYW5kbGVDcmVhdGVBZ2VudCA9IGFzeW5jICh2YWx1ZXM6IGFueSkgPT4ge1xuICAgIGlmIChpc1Byb2Nlc3NpbmdSZWYuY3VycmVudCkge1xuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgY29uc3QgcGFyc2VkVmFsdWU6IEFnZW50Q3JlYXRlUmVxdWVzdCA9IHBhcnNlZFZhbHVlc0J5UmVxKHZhbHVlcy5nZW5lcmFsKVxuXG4gICAgaXNQcm9jZXNzaW5nUmVmLmN1cnJlbnQgPSB0cnVlXG4gICAgc2V0SXNMb2FkaW5nKHRydWUpXG4gICAgc2V0U3VjY2VzcyhmYWxzZSlcblxuICAgIHRyeSB7XG4gICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGNyZWF0ZUFnZW50KHBhcnNlZFZhbHVlKVxuXG4gICAgICBpZiAocmVzcG9uc2UuZXJyb3IpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKHJlc3BvbnNlLmVycm9yKVxuICAgICAgfVxuXG4gICAgICBjb25zdCB0YXNrQWNjZXNzID0gdmFsdWVzLmFjY2Vzc2liaWxpdHk/LnRhc2tBY2Nlc3MgPz8gdHJ1ZVxuICAgICAgY29uc3Qgc2VsZWN0ZWRDb25uZWN0b3JzOiBzdHJpbmdbXSA9IHZhbHVlcy5hY2Nlc3NpYmlsaXR5Py5zZWxlY3RlZENvbm5lY3RvcnMgfHwgW11cbiAgICAgIGNvbnN0IGF1dGhQb3B1cCA9XG4gICAgICAgIHNlbGVjdGVkQ29ubmVjdG9ycy5sZW5ndGggPiAwID8gd2luZG93Lm9wZW4oJycsICdfYmxhbmsnLCAncG9wdXA9eWVzLHdpZHRoPTU2MCxoZWlnaHQ9NzYwJykgOiBudWxsXG5cbiAgICAgIGlmIChyZXNwb25zZT8uaWQpIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBhd2FpdCBzZXRBZ2VudFRvb2xHcm91cHMocmVzcG9uc2UuaWQudG9TdHJpbmcoKSwgYnVpbGRBZ2VudFRvb2xHcm91cHNSZXF1ZXN0KHRhc2tBY2Nlc3MpKVxuICAgICAgICB9IGNhdGNoICh0b29sR3JvdXBzRXJyb3IpIHtcbiAgICAgICAgICBjb25zb2xlLmVycm9yKCdFcnJvciBzZXR0aW5nIGFnZW50IHRvb2wgZ3JvdXBzOicsIHRvb2xHcm91cHNFcnJvcilcbiAgICAgICAgfVxuXG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgY29uc3QgY29ubmVjdG9yc1Jlc3BvbnNlID0gYXdhaXQgc2F2ZUFnZW50Q29ubmVjdG9ycyhyZXNwb25zZS5pZC50b1N0cmluZygpLCBzZWxlY3RlZENvbm5lY3RvcnMpXG4gICAgICAgICAgb3BlbkNvbm5lY3RvckF1dGhvcml6YXRpb25XaW5kb3dzKGNvbm5lY3RvcnNSZXNwb25zZS5yZXF1aXJlc19hdXRoIHx8IFtdLCBhdXRoUG9wdXApXG4gICAgICAgICAgY29uc3QgYXV0aEVycm9ycyA9IGNvbm5lY3RvcnNSZXNwb25zZS5hdXRoX2Vycm9ycyB8fCBbXVxuICAgICAgICAgIGlmIChhdXRoRXJyb3JzLmxlbmd0aCkge1xuICAgICAgICAgICAgaGFuZGxlU25hY2tiYXJFcnJvcihcbiAgICAgICAgICAgICAgYXV0aEVycm9ycy5tYXAoZXJyb3IgPT5cbiAgICAgICAgICAgICAgICBlcnJvci5zbHVnID09PSAnbmV0c3VpdGUnID8gdCgnYWNjZXNzaWJpbGl0eVNlY3Rpb24ubmV0c3VpdGVBdXRoU2V0dXBSZXF1aXJlZCcpIDogY29ubmVjdG9yQXV0aEVycm9yTWVzc2FnZShlcnJvcilcbiAgICAgICAgICAgICAgKS5qb2luKCcgJylcbiAgICAgICAgICAgIClcbiAgICAgICAgICB9XG4gICAgICAgIH0gY2F0Y2ggKGNvbm5lY3RvcnNFcnJvcikge1xuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ0Vycm9yIHNldHRpbmcgYWdlbnQgY29ubmVjdG9yczonLCBjb25uZWN0b3JzRXJyb3IpXG4gICAgICAgICAgaWYgKGF1dGhQb3B1cCAmJiAhYXV0aFBvcHVwLmNsb3NlZCkge1xuICAgICAgICAgICAgYXV0aFBvcHVwLmNsb3NlKClcbiAgICAgICAgICB9XG4gICAgICAgICAgaGFuZGxlU25hY2tiYXJFcnJvcih0KCdhY2Nlc3NpYmlsaXR5U2VjdGlvbi5jb25uZWN0b3JBdXRoRmFpbGVkJykpXG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgc2V0RXJyb3IobnVsbClcbiAgICAgIHNldFN1Y2Nlc3MoeyAuLi5yZXNwb25zZSwgY29ubmVjdG9yczogYnVpbGRBZ2VudENvbm5lY3RvcnNGcm9tVGFza0FjY2Vzcyh0YXNrQWNjZXNzLCBzZWxlY3RlZENvbm5lY3RvcnMpIH0pXG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICBzZXRFcnJvcihlcnIgaW5zdGFuY2VvZiBFcnJvciA/IGVyci5tZXNzYWdlIDogdCgnZXJyb3JBZ2VudENyZWF0ZWQnKSlcbiAgICAgIGhhbmRsZVNuYWNrYmFyRXJyb3IodCgnZXJyb3JBZ2VudENyZWF0ZWQnKSlcbiAgICB9IGZpbmFsbHkge1xuICAgICAgc2V0SXNMb2FkaW5nKGZhbHNlKVxuICAgICAgaXNQcm9jZXNzaW5nUmVmLmN1cnJlbnQgPSBmYWxzZVxuICAgIH1cbiAgfVxuXG4gIGNvbnN0IHJlc2V0U3VjY2VzcyA9ICgpID0+IHtcbiAgICBzZXRTdWNjZXNzKGZhbHNlKVxuICB9XG5cbiAgcmV0dXJuIHtcbiAgICBoYW5kbGVDcmVhdGVBZ2VudCxcbiAgICBpc0xvYWRpbmcsXG4gICAgZXJyb3IsXG4gICAgc3VjY2VzcyxcbiAgICBoYW5kbGVTZXRTdWNjZXNzLFxuICAgIHJl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RSxJQUFBO1lBQUE7VUFBQTtZQUFBRixRQUFBLENBQUFDLElBQUE7WUFBQUosR0FBQSxHQUFBRyxRQUFBO1lBRURjLE9BQU8sQ0FBQzlDLEtBQUssQ0FBQyxpQ0FBaUMsRUFBQTZCLEdBQWlCLENBQUM7WUFDakUsSUFBSUosU0FBUyxJQUFJLENBQUNBLFNBQVMsQ0FBQzJCLE1BQU0sRUFBRTtjQUNsQzNCLFNBQVMsQ0FBQzRCLEtBQUssQ0FBQyxDQUFDO1lBQ25CO1lBQ0E5QyxtQkFBbUIsQ0FBQ2YsQ0FBQyxDQUFDLDBDQUEwQyxDQUFDLENBQUM7VUFBQTtZQUl0RVMsUUFBUSxDQUFDLElBQUksQ0FBQztZQUNkSSxVQUFVLENBQUFpRCxhQUFBLENBQUFBLGFBQUEsS0FBTWhDLFFBQVE7Y0FBRWlDLFVBQVUsRUFBRWhGLGtDQUFrQyxDQUFDZ0QsVUFBVSxFQUFFQyxrQkFBa0I7WUFBQyxFQUFFLENBQUM7WUFBQVEsUUFBQSxDQUFBRSxJQUFBO1lBQUE7VUFBQTtZQUFBRixRQUFBLENBQUFDLElBQUE7WUFBQUgsR0FBQSxHQUFBRSxRQUFBO1lBRTNHL0IsUUFBUSxDQUFDNkIsR0FBQSxZQUFlUyxLQUFLLEdBQUdULEdBQUEsQ0FBSTBCLE9BQU8sR0FBR2hFLENBQUMsQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDO1lBQ3JFZSxtQkFBbUIsQ0FBQ2YsQ0FBQyxDQUFDLG1CQUFtQixDQUFDLENBQUM7VUFBQTtZQUFBd0MsUUFBQSxDQUFBQyxJQUFBO1lBRTNDcEMsWUFBWSxDQUFDLEtBQUssQ0FBQztZQUNuQlcsZUFBZSxDQUFDMkIsT0FBTyxHQUFHLEtBQUs7WUFBQSxPQUFBSCxRQUFBLENBQUF5QixNQUFBO1VBQUE7VUFBQTtZQUFBLE9BQUF6QixRQUFBLENBQUEwQixJQUFBO1FBQUE7TUFBQSxHQUFBMUMsT0FBQTtJQUFBLENBRWxDO0lBQUEsZ0JBM0RLTCxpQkFBaUJBLENBQUFnRCxFQUFBO01BQUEsT0FBQS9DLElBQUEsQ0FBQWdELEtBQUEsT0FBQUMsU0FBQTtJQUFBO0VBQUEsR0EyRHRCO0VBRUQsSUFBTUMsWUFBWSxHQUFHLFNBQWZBLFlBQVlBLENBQUEsRUFBUztJQUN6QnpELFVBQVUsQ0FBQyxLQUFLLENBQUM7RUFDbkIsQ0FBQztFQUVELE9BQU87SUFDTE0saUJBQWlCLEVBQWpCQSxpQkFBaUI7SUFDakJmLFNBQVMsRUFBVEEsU0FBUztJQUNUSSxLQUFLLEVBQUxBLEtBQUs7SUFDTEksT0FBTyxFQUFQQSxPQUFPO0lBQ1BLLGdCQUFnQixFQUFoQkEsZ0JBQWdCO0lBQ2hCcUQsWUFBWSxFQUFaQTtFQUNGLENBQUM7QUFDSCxDQUFDIiwiaWdub3JlTGlzdCI6W119
@@ -9,6 +9,7 @@ import { useState, useRef } from 'react';
9
9
  import { useTranslation } from 'react-i18next';
10
10
  import { updateAgent } from '../../services/maia/Agents/updateAgent';
11
11
  import { setAgentToolGroups } from '../../services/maia/Agents/setAgentToolGroups';
12
+ import { connectorAuthErrorMessage, openConnectorAuthorizationWindows, saveAgentConnectors } from '../../services/maia/Agents/connectors';
12
13
  import { useSnackBarManager } from '../useSnackBarManager/useSnackBarManager';
13
14
  import { buildAgentToolGroupsRequest, buildAgentConnectorsFromTaskAccess } from '../../utils/normalizeAgentConnectors';
14
15
  export var parsedValuesByReq = function parsedValuesByReq(agentValues) {
@@ -47,7 +48,7 @@ export var useUpdateAgent = function useUpdateAgent() {
47
48
  };
48
49
  var handleUpdateAgent = /*#__PURE__*/function () {
49
50
  var _ref = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime.mark(function _callee(values) {
50
- var parsedValue, _values$accessibility, _values$accessibility2, _values$general, response, taskAccess, agentId, _t, _t2;
51
+ var parsedValue, _values$accessibility, _values$accessibility2, _values$accessibility3, _values$general, response, taskAccess, selectedConnectors, agentId, authPopup, connectorsResponse, authErrors, _t, _t2, _t3;
51
52
  return _regeneratorRuntime.wrap(function (_context) {
52
53
  while (1) switch (_context.prev = _context.next) {
53
54
  case 0:
@@ -73,9 +74,11 @@ export var useUpdateAgent = function useUpdateAgent() {
73
74
  throw new Error(response.error);
74
75
  case 4:
75
76
  taskAccess = (_values$accessibility = (_values$accessibility2 = values.accessibility) === null || _values$accessibility2 === void 0 ? void 0 : _values$accessibility2.taskAccess) !== null && _values$accessibility !== void 0 ? _values$accessibility : true;
77
+ selectedConnectors = ((_values$accessibility3 = values.accessibility) === null || _values$accessibility3 === void 0 ? void 0 : _values$accessibility3.selectedConnectors) || [];
76
78
  agentId = (_values$general = values.general) === null || _values$general === void 0 ? void 0 : _values$general.id;
79
+ authPopup = selectedConnectors.length > 0 ? window.open('', '_blank', 'popup=yes,width=560,height=760') : null;
77
80
  if (!agentId) {
78
- _context.next = 8;
81
+ _context.next = 11;
79
82
  break;
80
83
  }
81
84
  _context.prev = 5;
@@ -89,26 +92,49 @@ export var useUpdateAgent = function useUpdateAgent() {
89
92
  _t = _context["catch"](5);
90
93
  console.error('Error setting agent tool groups:', _t);
91
94
  case 8:
95
+ _context.prev = 8;
96
+ _context.next = 9;
97
+ return saveAgentConnectors(agentId.toString(), selectedConnectors);
98
+ case 9:
99
+ connectorsResponse = _context.sent;
100
+ openConnectorAuthorizationWindows(connectorsResponse.requires_auth || [], authPopup);
101
+ authErrors = connectorsResponse.auth_errors || [];
102
+ if (authErrors.length) {
103
+ handleSnackbarError(authErrors.map(function (error) {
104
+ return error.slug === 'netsuite' ? t('accessibilitySection.netsuiteAuthSetupRequired') : connectorAuthErrorMessage(error);
105
+ }).join(' '));
106
+ }
107
+ _context.next = 11;
108
+ break;
109
+ case 10:
110
+ _context.prev = 10;
111
+ _t2 = _context["catch"](8);
112
+ console.error('Error setting agent connectors:', _t2);
113
+ if (authPopup && !authPopup.closed) {
114
+ authPopup.close();
115
+ }
116
+ handleSnackbarError(t('accessibilitySection.connectorAuthFailed'));
117
+ case 11:
92
118
  setError(null);
93
119
  setSuccess(_objectSpread(_objectSpread({}, response), {}, {
94
- connectors: buildAgentConnectorsFromTaskAccess(taskAccess)
120
+ connectors: buildAgentConnectorsFromTaskAccess(taskAccess, selectedConnectors)
95
121
  }));
96
122
  setIsLoading(false);
97
123
  isProcessingRef.current = false;
98
- _context.next = 10;
124
+ _context.next = 13;
99
125
  break;
100
- case 9:
101
- _context.prev = 9;
102
- _t2 = _context["catch"](2);
103
- setError(_t2 instanceof Error ? _t2.message : t('errorAgentCreated'));
126
+ case 12:
127
+ _context.prev = 12;
128
+ _t3 = _context["catch"](2);
129
+ setError(_t3 instanceof Error ? _t3.message : t('errorAgentCreated'));
104
130
  setIsLoading(false);
105
131
  isProcessingRef.current = false;
106
132
  handleSnackbarError(t('errorAgentCreated'));
107
- case 10:
133
+ case 13:
108
134
  case "end":
109
135
  return _context.stop();
110
136
  }
111
- }, _callee, null, [[2, 9], [5, 7]]);
137
+ }, _callee, null, [[2, 12], [5, 7], [8, 10]]);
112
138
  }));
113
139
  return function handleUpdateAgent(_x) {
114
140
  return _ref.apply(this, arguments);
@@ -126,4 +152,4 @@ export var useUpdateAgent = function useUpdateAgent() {
126
152
  resetSuccess: resetSuccess
127
153
  };
128
154
  };
129
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJ1c2VTdGF0ZSIsInVzZVJlZiIsInVzZVRyYW5zbGF0aW9uIiwidXBkYXRlQWdlbnQiLCJzZXRBZ2VudFRvb2xHcm91cHMiLCJ1c2VTbmFja0Jhck1hbmFnZXIiLCJidWlsZEFnZW50VG9vbEdyb3Vwc1JlcXVlc3QiLCJidWlsZEFnZW50Q29ubmVjdG9yc0Zyb21UYXNrQWNjZXNzIiwicGFyc2VkVmFsdWVzQnlSZXEiLCJhZ2VudFZhbHVlcyIsIl9hZ2VudFZhbHVlcyRhaU1vZGVsIiwiX2FnZW50VmFsdWVzJGFpTW9kZWwyIiwiaWQiLCJuYW1lIiwiZW1vamkiLCJpbnRyb2R1Y3Rpb24iLCJpbnB1dF9wbGFjZWhvbGRlciIsImlucHV0UGxhY2Vob2xkZXIiLCJ1c2VyX3Byb21wdCIsInVzZXJQcm9tcHQiLCJwcm92aWRlciIsImFpTW9kZWwiLCJtb2RlbF9uYW1lIiwidXNlVXBkYXRlQWdlbnQiLCJfdXNlVHJhbnNsYXRpb24iLCJ0IiwiX3VzZVN0YXRlIiwiX3VzZVN0YXRlMiIsIl9zbGljZWRUb0FycmF5IiwiaXNMb2FkaW5nIiwic2V0SXNMb2FkaW5nIiwiX3VzZVN0YXRlMyIsIl91c2VTdGF0ZTQiLCJlcnJvciIsInNldEVycm9yIiwiX3VzZVN0YXRlNSIsIl91c2VTdGF0ZTYiLCJzdWNjZXNzIiwic2V0U3VjY2VzcyIsIl91c2VTbmFja0Jhck1hbmFnZXIiLCJoYW5kbGVTbmFja2JhckVycm9yIiwiaXNQcm9jZXNzaW5nUmVmIiwiaGFuZGxlU2V0U3VjY2VzcyIsInZhbHVlIiwiaGFuZGxlVXBkYXRlQWdlbnQiLCJfcmVmIiwiX2FzeW5jVG9HZW5lcmF0b3IiLCJfcmVnZW5lcmF0b3JSdW50aW1lIiwibWFyayIsIl9jYWxsZWUiLCJ2YWx1ZXMiLCJwYXJzZWRWYWx1ZSIsIl92YWx1ZXMkYWNjZXNzaWJpbGl0eSIsIl92YWx1ZXMkYWNjZXNzaWJpbGl0eTIiLCJfdmFsdWVzJGdlbmVyYWwiLCJyZXNwb25zZSIsInRhc2tBY2Nlc3MiLCJhZ2VudElkIiwiX3QiLCJfdDIiLCJ3cmFwIiwiX2NvbnRleHQiLCJwcmV2IiwibmV4dCIsImN1cnJlbnQiLCJhYnJ1cHQiLCJnZW5lcmFsIiwic2VudCIsIkVycm9yIiwiYWNjZXNzaWJpbGl0eSIsInRvU3RyaW5nIiwiY29uc29sZSIsIl9vYmplY3RTcHJlYWQiLCJjb25uZWN0b3JzIiwibWVzc2FnZSIsInN0b3AiLCJfeCIsImFwcGx5IiwiYXJndW1lbnRzIiwicmVzZXRTdWNjZXNzIl0sInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2hvb2tzL3VzZUFnZW50TW9kZWwvdXNlVXBkYXRlQWdlbnQudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLyogZXNsaW50LWRpc2FibGUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueSAqL1xuaW1wb3J0IHsgdXNlU3RhdGUsIHVzZVJlZiB9IGZyb20gJ3JlYWN0J1xuaW1wb3J0IHsgdXNlVHJhbnNsYXRpb24gfSBmcm9tICdyZWFjdC1pMThuZXh0J1xuaW1wb3J0IHsgQWdlbnRVcGRhdGVSZXF1ZXN0LCB1cGRhdGVBZ2VudCB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL21haWEvQWdlbnRzL3VwZGF0ZUFnZW50J1xuaW1wb3J0IHsgc2V0QWdlbnRUb29sR3JvdXBzIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvbWFpYS9BZ2VudHMvc2V0QWdlbnRUb29sR3JvdXBzJ1xuaW1wb3J0IHsgdXNlU25hY2tCYXJNYW5hZ2VyIH0gZnJvbSAnLi4vdXNlU25hY2tCYXJNYW5hZ2VyL3VzZVNuYWNrQmFyTWFuYWdlcidcbmltcG9ydCB7IGJ1aWxkQWdlbnRUb29sR3JvdXBzUmVxdWVzdCwgYnVpbGRBZ2VudENvbm5lY3RvcnNGcm9tVGFza0FjY2VzcyB9IGZyb20gJy4uLy4uL3V0aWxzL25vcm1hbGl6ZUFnZW50Q29ubmVjdG9ycydcblxuZXhwb3J0IGNvbnN0IHBhcnNlZFZhbHVlc0J5UmVxID0gKGFnZW50VmFsdWVzOiBhbnkpOiBBZ2VudFVwZGF0ZVJlcXVlc3QgPT4ge1xuICByZXR1cm4ge1xuICAgIGlkOiBhZ2VudFZhbHVlcy5pZCxcbiAgICBuYW1lOiBhZ2VudFZhbHVlcy5uYW1lLFxuICAgIGVtb2ppOiBhZ2VudFZhbHVlcy5lbW9qaSB8fCAn4pyoJyxcbiAgICBpbnRyb2R1Y3Rpb246IGFnZW50VmFsdWVzLmludHJvZHVjdGlvbiB8fCAnJyxcbiAgICBpbnB1dF9wbGFjZWhvbGRlcjogYWdlbnRWYWx1ZXMuaW5wdXRQbGFjZWhvbGRlciB8fCAnJyxcbiAgICB1c2VyX3Byb21wdDogYWdlbnRWYWx1ZXMudXNlclByb21wdCxcbiAgICBwcm92aWRlcjogYWdlbnRWYWx1ZXMuYWlNb2RlbD8ucHJvdmlkZXIsXG4gICAgbW9kZWxfbmFtZTogYWdlbnRWYWx1ZXMuYWlNb2RlbD8ubW9kZWxfbmFtZSxcbiAgfVxufVxuXG5leHBvcnQgY29uc3QgdXNlVXBkYXRlQWdlbnQgPSAoKSA9PiB7XG4gIGNvbnN0IHsgdCB9ID0gdXNlVHJhbnNsYXRpb24oJ2FibV9hZ2VudF9zZWN0aW9uJylcbiAgY29uc3QgW2lzTG9hZGluZywgc2V0SXNMb2FkaW5nXSA9IHVzZVN0YXRlKGZhbHNlKVxuICBjb25zdCBbZXJyb3IsIHNldEVycm9yXSA9IHVzZVN0YXRlPHN0cmluZyB8IG51bGw+KG51bGwpXG4gIGNvbnN0IFtzdWNjZXNzLCBzZXRTdWNjZXNzXSA9IHVzZVN0YXRlPGFueT4oZmFsc2UpXG4gIGNvbnN0IHsgaGFuZGxlU25hY2tiYXJFcnJvciB9ID0gdXNlU25hY2tCYXJNYW5hZ2VyKClcbiAgY29uc3QgaXNQcm9jZXNzaW5nUmVmID0gdXNlUmVmKGZhbHNlKVxuXG4gIGNvbnN0IGhhbmRsZVNldFN1Y2Nlc3MgPSAodmFsdWU6IGJvb2xlYW4pID0+IHtcbiAgICBzZXRTdWNjZXNzKHZhbHVlKVxuICB9XG5cbiAgY29uc3QgaGFuZGxlVXBkYXRlQWdlbnQgPSBhc3luYyAodmFsdWVzOiBhbnkpID0+IHtcbiAgICBpZiAoaXNQcm9jZXNzaW5nUmVmLmN1cnJlbnQpIHtcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIGNvbnN0IHBhcnNlZFZhbHVlOiBBZ2VudFVwZGF0ZVJlcXVlc3QgPSBwYXJzZWRWYWx1ZXNCeVJlcSh2YWx1ZXMuZ2VuZXJhbClcblxuICAgIGlzUHJvY2Vzc2luZ1JlZi5jdXJyZW50ID0gdHJ1ZVxuICAgIHNldElzTG9hZGluZyh0cnVlKVxuICAgIHNldFN1Y2Nlc3MoZmFsc2UpXG5cbiAgICB0cnkge1xuICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCB1cGRhdGVBZ2VudChwYXJzZWRWYWx1ZSlcblxuICAgICAgaWYgKHJlc3BvbnNlLmVycm9yKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihyZXNwb25zZS5lcnJvcilcbiAgICAgIH1cblxuICAgICAgY29uc3QgdGFza0FjY2VzcyA9IHZhbHVlcy5hY2Nlc3NpYmlsaXR5Py50YXNrQWNjZXNzID8/IHRydWVcbiAgICAgIGNvbnN0IGFnZW50SWQgPSB2YWx1ZXMuZ2VuZXJhbD8uaWRcbiAgICAgIGlmIChhZ2VudElkKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgYXdhaXQgc2V0QWdlbnRUb29sR3JvdXBzKGFnZW50SWQudG9TdHJpbmcoKSwgYnVpbGRBZ2VudFRvb2xHcm91cHNSZXF1ZXN0KHRhc2tBY2Nlc3MpKVxuICAgICAgICB9IGNhdGNoICh0b29sR3JvdXBzRXJyb3IpIHtcbiAgICAgICAgICBjb25zb2xlLmVycm9yKCdFcnJvciBzZXR0aW5nIGFnZW50IHRvb2wgZ3JvdXBzOicsIHRvb2xHcm91cHNFcnJvcilcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBzZXRFcnJvcihudWxsKVxuICAgICAgc2V0U3VjY2Vzcyh7IC4uLnJlc3BvbnNlLCBjb25uZWN0b3JzOiBidWlsZEFnZW50Q29ubmVjdG9yc0Zyb21UYXNrQWNjZXNzKHRhc2tBY2Nlc3MpIH0pXG4gICAgICBzZXRJc0xvYWRpbmcoZmFsc2UpXG4gICAgICBpc1Byb2Nlc3NpbmdSZWYuY3VycmVudCA9IGZhbHNlXG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICBzZXRFcnJvcihlcnIgaW5zdGFuY2VvZiBFcnJvciA/IGVyci5tZXNzYWdlIDogdCgnZXJyb3JBZ2VudENyZWF0ZWQnKSlcbiAgICAgIHNldElzTG9hZGluZyhmYWxzZSlcbiAgICAgIGlzUHJvY2Vzc2luZ1JlZi5jdXJyZW50ID0gZmFsc2VcbiAgICAgIGhhbmRsZVNuYWNrYmFyRXJyb3IodCgnZXJyb3JBZ2VudENyZWF0ZWQnKSlcbiAgICB9XG4gIH1cblxuICBjb25zdCByZXNldFN1Y2Nlc3MgPSAoKSA9PiB7XG4gICAgc2V0U3VjY2VzcyhmYWxzZSlcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgaGFuZGxlVXBkYXRlQWdlbnQsXG4gICAgaXNMb2FkaW5nLFxuICAgIGVycm9yLFxuICAgIHN1Y2Nlc3MsXG4gICAgaGFuZGxlU2V0U3VjY2VzcyxcbiAgICByZXNldFN1Y2Nlc3MsXG4gIH1cbn1cbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQUE7QUFDQSxTQUFTQSxRQUFRLEVBQUVDLE1BQU0sUUFBUSxPQUFPO0FBQ3hDLFNBQVNDLGNBQWMsUUFBUSxlQUFlO0FBQzlDLFNBQTZCQyxXQUFXLFFBQVEsd0NBQXdDO0FBQ3hGLFNBQVNDLGtCQUFrQixRQUFRLCtDQUErQztBQUNsRixTQUFTQyxrQkFBa0IsUUFBUSwwQ0FBMEM7QUFDN0UsU0FBU0MsMkJBQTJCLEVBQUVDLGtDQUFrQyxRQUFRLHNDQUFzQztBQUV0SCxPQUFPLElBQU1DLGlCQUFpQixHQUFHLFNBQXBCQSxpQkFBaUJBLENBQUlDLFdBQWdCLEVBQXlCO0VBQUEsSUFBQUMsb0JBQUEsRUFBQUMscUJBQUE7RUFDekUsT0FBTztJQUNMQyxFQUFFLEVBQUVILFdBQVcsQ0FBQ0csRUFBRTtJQUNsQkMsSUFBSSxFQUFFSixXQUFXLENBQUNJLElBQUk7SUFDdEJDLEtBQUssRUFBRUwsV0FBVyxDQUFDSyxLQUFLLElBQUksR0FBRztJQUMvQkMsWUFBWSxFQUFFTixXQUFXLENBQUNNLFlBQVksSUFBSSxFQUFFO0lBQzVDQyxpQkFB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
155
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJ1c2VTdGF0ZSIsInVzZVJlZiIsInVzZVRyYW5zbGF0aW9uIiwidXBkYXRlQWdlbnQiLCJzZXRBZ2VudFRvb2xHcm91cHMiLCJjb25uZWN0b3JBdXRoRXJyb3JNZXNzYWdlIiwib3BlbkNvbm5lY3RvckF1dGhvcml6YXRpb25XaW5kb3dzIiwic2F2ZUFnZW50Q29ubmVjdG9ycyIsInVzZVNuYWNrQmFyTWFuYWdlciIsImJ1aWxkQWdlbnRUb29sR3JvdXBzUmVxdWVzdCIsImJ1aWxkQWdlbnRDb25uZWN0b3JzRnJvbVRhc2tBY2Nlc3MiLCJwYXJzZWRWYWx1ZXNCeVJlcSIsImFnZW50VmFsdWVzIiwiX2FnZW50VmFsdWVzJGFpTW9kZWwiLCJfYWdlbnRWYWx1ZXMkYWlNb2RlbDIiLCJpZCIsIm5hbWUiLCJlbW9qaSIsImludHJvZHVjdGlvbiIsImlucHV0X3BsYWNlaG9sZGVyIiwiaW5wdXRQbGFjZWhvbGRlciIsInVzZXJfcHJvbXB0IiwidXNlclByb21wdCIsInByb3ZpZGVyIiwiYWlNb2RlbCIsIm1vZGVsX25hbWUiLCJ1c2VVcGRhdGVBZ2VudCIsIl91c2VUcmFuc2xhdGlvbiIsInQiLCJfdXNlU3RhdGUiLCJfdXNlU3RhdGUyIiwiX3NsaWNlZFRvQXJyYXkiLCJpc0xvYWRpbmciLCJzZXRJc0xvYWRpbmciLCJfdXNlU3RhdGUzIiwiX3VzZVN0YXRlNCIsImVycm9yIiwic2V0RXJyb3IiLCJfdXNlU3RhdGU1IiwiX3VzZVN0YXRlNiIsInN1Y2Nlc3MiLCJzZXRTdWNjZXNzIiwiX3VzZVNuYWNrQmFyTWFuYWdlciIsImhhbmRsZVNuYWNrYmFyRXJyb3IiLCJpc1Byb2Nlc3NpbmdSZWYiLCJoYW5kbGVTZXRTdWNjZXNzIiwidmFsdWUiLCJoYW5kbGVVcGRhdGVBZ2VudCIsIl9yZWYiLCJfYXN5bmNUb0dlbmVyYXRvciIsIl9yZWdlbmVyYXRvclJ1bnRpbWUiLCJtYXJrIiwiX2NhbGxlZSIsInZhbHVlcyIsInBhcnNlZFZhbHVlIiwiX3ZhbHVlcyRhY2Nlc3NpYmlsaXR5IiwiX3ZhbHVlcyRhY2Nlc3NpYmlsaXR5MiIsIl92YWx1ZXMkYWNjZXNzaWJpbGl0eTMiLCJfdmFsdWVzJGdlbmVyYWwiLCJyZXNwb25zZSIsInRhc2tBY2Nlc3MiLCJzZWxlY3RlZENvbm5lY3RvcnMiLCJhZ2VudElkIiwiYXV0aFBvcHVwIiwiY29ubmVjdG9yc1Jlc3BvbnNlIiwiYXV0aEVycm9ycyIsIl90IiwiX3QyIiwiX3QzIiwid3JhcCIsIl9jb250ZXh0IiwicHJldiIsIm5leHQiLCJjdXJyZW50IiwiYWJydXB0IiwiZ2VuZXJhbCIsInNlbnQiLCJFcnJvciIsImFjY2Vzc2liaWxpdHkiLCJsZW5ndGgiLCJ3aW5kb3ciLCJvcGVuIiwidG9TdHJpbmciLCJjb25zb2xlIiwicmVxdWlyZXNfYXV0aCIsImF1dGhfZXJyb3JzIiwibWFwIiwic2x1ZyIsImpvaW4iLCJjbG9zZWQiLCJjbG9zZSIsIl9vYmplY3RTcHJlYWQiLCJjb25uZWN0b3JzIiwibWVzc2FnZSIsInN0b3AiLCJfeCIsImFwcGx5IiwiYXJndW1lbnRzIiwicmVzZXRTdWNjZXNzIl0sInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2hvb2tzL3VzZUFnZW50TW9kZWwvdXNlVXBkYXRlQWdlbnQudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLyogZXNsaW50LWRpc2FibGUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueSAqL1xuaW1wb3J0IHsgdXNlU3RhdGUsIHVzZVJlZiB9IGZyb20gJ3JlYWN0J1xuaW1wb3J0IHsgdXNlVHJhbnNsYXRpb24gfSBmcm9tICdyZWFjdC1pMThuZXh0J1xuaW1wb3J0IHsgQWdlbnRVcGRhdGVSZXF1ZXN0LCB1cGRhdGVBZ2VudCB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL21haWEvQWdlbnRzL3VwZGF0ZUFnZW50J1xuaW1wb3J0IHsgc2V0QWdlbnRUb29sR3JvdXBzIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvbWFpYS9BZ2VudHMvc2V0QWdlbnRUb29sR3JvdXBzJ1xuaW1wb3J0IHsgY29ubmVjdG9yQXV0aEVycm9yTWVzc2FnZSwgb3BlbkNvbm5lY3RvckF1dGhvcml6YXRpb25XaW5kb3dzLCBzYXZlQWdlbnRDb25uZWN0b3JzIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvbWFpYS9BZ2VudHMvY29ubmVjdG9ycydcbmltcG9ydCB7IHVzZVNuYWNrQmFyTWFuYWdlciB9IGZyb20gJy4uL3VzZVNuYWNrQmFyTWFuYWdlci91c2VTbmFja0Jhck1hbmFnZXInXG5pbXBvcnQgeyBidWlsZEFnZW50VG9vbEdyb3Vwc1JlcXVlc3QsIGJ1aWxkQWdlbnRDb25uZWN0b3JzRnJvbVRhc2tBY2Nlc3MgfSBmcm9tICcuLi8uLi91dGlscy9ub3JtYWxpemVBZ2VudENvbm5lY3RvcnMnXG5cbmV4cG9ydCBjb25zdCBwYXJzZWRWYWx1ZXNCeVJlcSA9IChhZ2VudFZhbHVlczogYW55KTogQWdlbnRVcGRhdGVSZXF1ZXN0ID0+IHtcbiAgcmV0dXJuIHtcbiAgICBpZDogYWdlbnRWYWx1ZXMuaWQsXG4gICAgbmFtZTogYWdlbnRWYWx1ZXMubmFtZSxcbiAgICBlbW9qaTogYWdlbnRWYWx1ZXMuZW1vamkgfHwgJ+KcqCcsXG4gICAgaW50cm9kdWN0aW9uOiBhZ2VudFZhbHVlcy5pbnRyb2R1Y3Rpb24gfHwgJycsXG4gICAgaW5wdXRfcGxhY2Vob2xkZXI6IGFnZW50VmFsdWVzLmlucHV0UGxhY2Vob2xkZXIgfHwgJycsXG4gICAgdXNlcl9wcm9tcHQ6IGFnZW50VmFsdWVzLnVzZXJQcm9tcHQsXG4gICAgcHJvdmlkZXI6IGFnZW50VmFsdWVzLmFpTW9kZWw/LnByb3ZpZGVyLFxuICAgIG1vZGVsX25hbWU6IGFnZW50VmFsdWVzLmFpTW9kZWw/Lm1vZGVsX25hbWUsXG4gIH1cbn1cblxuZXhwb3J0IGNvbnN0IHVzZVVwZGF0ZUFnZW50ID0gKCkgPT4ge1xuICBjb25zdCB7IHQgfSA9IHVzZVRyYW5zbGF0aW9uKCdhYm1fYWdlbnRfc2VjdGlvbicpXG4gIGNvbnN0IFtpc0xvYWRpbmcsIHNldElzTG9hZGluZ10gPSB1c2VTdGF0ZShmYWxzZSlcbiAgY29uc3QgW2Vycm9yLCBzZXRFcnJvcl0gPSB1c2VTdGF0ZTxzdHJpbmcgfCBudWxsPihudWxsKVxuICBjb25zdCBbc3VjY2Vzcywgc2V0U3VjY2Vzc10gPSB1c2VTdGF0ZTxhbnk+KGZhbHNlKVxuICBjb25zdCB7IGhhbmRsZVNuYWNrYmFyRXJyb3IgfSA9IHVzZVNuYWNrQmFyTWFuYWdlcigpXG4gIGNvbnN0IGlzUHJvY2Vzc2luZ1JlZiA9IHVzZVJlZihmYWxzZSlcblxuICBjb25zdCBoYW5kbGVTZXRTdWNjZXNzID0gKHZhbHVlOiBib29sZWFuKSA9PiB7XG4gICAgc2V0U3VjY2Vzcyh2YWx1ZSlcbiAgfVxuXG4gIGNvbnN0IGhhbmRsZVVwZGF0ZUFnZW50ID0gYXN5bmMgKHZhbHVlczogYW55KSA9PiB7XG4gICAgaWYgKGlzUHJvY2Vzc2luZ1JlZi5jdXJyZW50KSB7XG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICBjb25zdCBwYXJzZWRWYWx1ZTogQWdlbnRVcGRhdGVSZXF1ZXN0ID0gcGFyc2VkVmFsdWVzQnlSZXEodmFsdWVzLmdlbmVyYWwpXG5cbiAgICBpc1Byb2Nlc3NpbmdSZWYuY3VycmVudCA9IHRydWVcbiAgICBzZXRJc0xvYWRpbmcodHJ1ZSlcbiAgICBzZXRTdWNjZXNzKGZhbHNlKVxuXG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgdXBkYXRlQWdlbnQocGFyc2VkVmFsdWUpXG5cbiAgICAgIGlmIChyZXNwb25zZS5lcnJvcikge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IocmVzcG9uc2UuZXJyb3IpXG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHRhc2tBY2Nlc3MgPSB2YWx1ZXMuYWNjZXNzaWJpbGl0eT8udGFza0FjY2VzcyA/PyB0cnVlXG4gICAgICBjb25zdCBzZWxlY3RlZENvbm5lY3RvcnM6IHN0cmluZ1tdID0gdmFsdWVzLmFjY2Vzc2liaWxpdHk/LnNlbGVjdGVkQ29ubmVjdG9ycyB8fCBbXVxuICAgICAgY29uc3QgYWdlbnRJZCA9IHZhbHVlcy5nZW5lcmFsPy5pZFxuICAgICAgY29uc3QgYXV0aFBvcHVwID1cbiAgICAgICAgc2VsZWN0ZWRDb25uZWN0b3JzLmxlbmd0aCA+IDAgPyB3aW5kb3cub3BlbignJywgJ19ibGFuaycsICdwb3B1cD15ZXMsd2lkdGg9NTYwLGhlaWdodD03NjAnKSA6IG51bGxcbiAgICAgIGlmIChhZ2VudElkKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgYXdhaXQgc2V0QWdlbnRUb29sR3JvdXBzKGFnZW50SWQudG9TdHJpbmcoKSwgYnVpbGRBZ2VudFRvb2xHcm91cHNSZXF1ZXN0KHRhc2tBY2Nlc3MpKVxuICAgICAgICB9IGNhdGNoICh0b29sR3JvdXBzRXJyb3IpIHtcbiAgICAgICAgICBjb25zb2xlLmVycm9yKCdFcnJvciBzZXR0aW5nIGFnZW50IHRvb2wgZ3JvdXBzOicsIHRvb2xHcm91cHNFcnJvcilcbiAgICAgICAgfVxuXG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgY29uc3QgY29ubmVjdG9yc1Jlc3BvbnNlID0gYXdhaXQgc2F2ZUFnZW50Q29ubmVjdG9ycyhhZ2VudElkLnRvU3RyaW5nKCksIHNlbGVjdGVkQ29ubmVjdG9ycylcbiAgICAgICAgICBvcGVuQ29ubmVjdG9yQXV0aG9yaXphdGlvbldpbmRvd3MoY29ubmVjdG9yc1Jlc3BvbnNlLnJlcXVpcmVzX2F1dGggfHwgW10sIGF1dGhQb3B1cClcbiAgICAgICAgICBjb25zdCBhdXRoRXJyb3JzID0gY29ubmVjdG9yc1Jlc3BvbnNlLmF1dGhfZXJyb3JzIHx8IFtdXG4gICAgICAgICAgaWYgKGF1dGhFcnJvcnMubGVuZ3RoKSB7XG4gICAgICAgICAgICBoYW5kbGVTbmFja2JhckVycm9yKFxuICAgICAgICAgICAgICBhdXRoRXJyb3JzLm1hcChlcnJvciA9PlxuICAgICAgICAgICAgICAgIGVycm9yLnNsdWcgPT09ICduZXRzdWl0ZScgPyB0KCdhY2Nlc3NpYmlsaXR5U2VjdGlvbi5uZXRzdWl0ZUF1dGhTZXR1cFJlcXVpcmVkJykgOiBjb25uZWN0b3JBdXRoRXJyb3JNZXNzYWdlKGVycm9yKVxuICAgICAgICAgICAgICApLmpvaW4oJyAnKVxuICAgICAgICAgICAgKVxuICAgICAgICAgIH1cbiAgICAgICAgfSBjYXRjaCAoY29ubmVjdG9yc0Vycm9yKSB7XG4gICAgICAgICAgY29uc29sZS5lcnJvcignRXJyb3Igc2V0dGluZyBhZ2VudCBjb25uZWN0b3JzOicsIGNvbm5lY3RvcnNFcnJvcilcbiAgICAgICAgICBpZiAoYXV0aFBvcHVwICYmICFhdXRoUG9wdXAuY2xvc2VkKSB7XG4gICAgICAgICAgICBhdXRoUG9wdXAuY2xvc2UoKVxuICAgICAgICAgIH1cbiAgICAgICAgICBoYW5kbGVTbmFja2JhckVycm9yKHQoJ2FjY2Vzc2liaWxpdHlTZWN0aW9uLmNvbm5lY3RvckF1dGhGYWlsZWQnKSlcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBzZXRFcnJvcihudWxsKVxuICAgICAgc2V0U3VjY2Vzcyh7IC4uLnJlc3BvbnNlLCBjb25uZWN0b3JzOiBidWlsZEFnZW50Q29ubmVjdG9yc0Zyb21UYXNrQWNjZXNzKHRhc2tBY2Nlc3MsIHNlbGVjdGVkQ29ubmVjdG9ycykgfSlcbiAgICAgIHNldElzTG9hZGluZyhmYWxzZSlcbiAgICAgIGlzUHJvY2Vzc2luZ1JlZi5jdXJyZW50ID0gZmFsc2VcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIHNldEVycm9yKGVyciBpbnN0YW5jZW9mIEVycm9yID8gZXJyLm1lc3NhZ2UgOiB0KCdlcnJvckFnZW50Q3JlYXRlZCcpKVxuICAgICAgc2V0SXNMb2FkaW5nKGZhbHNlKVxuICAgICAgaXNQcm9jZXNzaW5nUmVmLmN1cnJlbnQgPSBmYWxzZVxuICAgICAgaGFuZGxlU25hY2tiYXJFcnJvcih0KCdlcnJvckFnZW50Q3JlYXRlZCcpKVxuICAgIH1cbiAgfVxuXG4gIGNvbnN0IHJlc2V0U3VjY2VzcyA9ICgpID0+IHtcbiAgICBzZXRTdWNjZXNzKGZhbHNlKVxuICB9XG5cbiAgcmV0dXJuIHtcbiAgICBoYW5kbGVVcGRhdGVBZ2VudCxcbiAgICBpc0xvYWRpbmcsXG4gICAgZXJyb3IsXG4gICAgc3VjY2VzcyxcbiAgICBoYW5kbGVTZXRTdWNjZXNzLFxuICAgIHJlc2V0U3VjY2VzcyxcbiAgfVxufVxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7QUFBQTtBQUNBLFNBQVNBLFFBQVEsRUFBRUMsTUFBTSxRQUFRLE9BQU87QUFDeEMsU0FBU0MsY0FBYyxRQUFRLGVBQWU7QUFDOUMsU0FBNkJDLFdBQVcsUUFBUSx3Q0FBd0M7QUFDeEYsU0FBU0Msa0JBQWtCLFFBQVEsK0NBQStDO0FBQ2xGLFNBQVNDLHlCQUF5QixFQUFFQyxpQ0FBaUMsRUFBRUMsbUJBQW1CLFFBQVEsdUNBQXVDO0FBQ3pJLFNBQVNDLGtCQUFrQixRQUFRLDBDQUEwQztBQUM3RSxTQUFTQywyQkFBMkIsRUFBRUMsa0NBQWtDLFFBQVEsc0NBQXNDO0FBRXRILE9BQU8sSUFBTUMsaUJBQWlCLEdBQUcsU0FBcEJBLGlCQUFpQkEsQ0FBSUMsV0FBZ0IsRUFBeUI7RUFBQSxJQUFBQyxvQkFBQSxFQUFBQyxxQkFBQTtFQUN6RSxPQUFPO0lBQ0xDLEVBQUUsRUFBRUgsV0FBVyxDQUFDRyxFQUFFO0lBQ2xCQyxJQUFJLEVBQUVKLFdBQVcsQ0FBQ0ksSUFBSTtJQUN0QkMsS0FBSyxFQUFFTCxXQUFXLENBQUNLLEtBQUssSUFBSSxHQUFHO0lBQy9CQyxZQUFZLEVBQUVOLFdBQVcsQ0FBQ00sWUFBWSxJQUFJLEVBQUU7SUFDNUNDLGlCQUFpQixFQUFFUCxXQUFXLENBQUNRLGdCQUFnQixJQUFJLEVBQUU7SUFDckRDLFdBQVcsRUFBRVQsV0FBVyxDQUFDVSxVQUFVO0lBQ25DQyxRQUFRLEdBQUFWLG9CQUFBLEdBQUVELFdBQVcsQ0FBQ1ksT0FBTyxjQUFBWCxvQkFBQSx1QkFBbkJBLG9CQUFBLENBQXFCVSxRQUFRO0lBQ3ZDRSxVQUFVLEdBQUFYLHFCQUFBLEdBQUVGLFdBQVcsQ0FBQ1ksT0FBTyxjQUFBVixx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