@projectcor/maia-components 2.38.1 → 2.38.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 (166) hide show
  1. package/CHANGELOG.md +784 -0
  2. package/lib/components/atoms/ActionableButton.js +1 -6
  3. package/lib/components/atoms/ApprovalBox/ApprovalBox.spec.js +135 -0
  4. package/lib/components/atoms/Checkbox/Checkbox.spec.js +27 -0
  5. package/lib/components/atoms/Chip/Chip.spec.js +32 -0
  6. package/lib/components/atoms/ContextMentionChip/ContextMentionChip.spec.js +29 -0
  7. package/lib/components/atoms/Fade/Fade.spec.js +31 -0
  8. package/lib/components/atoms/FrequentlyAskedQuestions/FrequentlyAskedQuestions.js +4 -14
  9. package/lib/components/atoms/FrequentlyAskedQuestions/FrequentlyAskedQuestions.styles.js +3 -12
  10. package/lib/components/atoms/FrequentlyUsedActions/FrequentlyUsedActions.js +4 -20
  11. package/lib/components/atoms/FrequentlyUsedActions/FrequentlyUsedActions.styles.js +7 -18
  12. package/lib/components/atoms/MAIAButton/MAIAButton.spec.js +42 -0
  13. package/lib/components/atoms/MAIAInput/MAIAInput.js +14 -29
  14. package/lib/components/atoms/MAIAInput/MAIAInput.spec.js +300 -0
  15. package/lib/components/atoms/MAIAInput/styles.js +29 -36
  16. package/lib/components/atoms/ReasoningBlock/ReasoningBlock.js +3 -3
  17. package/lib/components/atoms/ReasoningBlock/ReasoningBlock.spec.js +68 -0
  18. package/lib/components/atoms/ReasoningBlock/ReasoningBlock.styles.js +2 -2
  19. package/lib/components/atoms/SkillsDropdown/SkillsDropdown.spec.js +107 -0
  20. package/lib/components/atoms/SlashCommandDropdown/SlashCommandDropdown.spec.js +85 -0
  21. package/lib/components/atoms/Switch/Switch.spec.js +41 -0
  22. package/lib/components/molecules/AbmSection/AbmAccessibilitySection/AbmAccessibilitySection.spec.js +77 -0
  23. package/lib/components/molecules/ChatAIHome/ChatAIHome.js +5 -16
  24. package/lib/components/molecules/ChatAIHome/ChatAIHome.spec.js +246 -0
  25. package/lib/components/molecules/ChatAIHome/ChatAIHomeMaiaker.js +2 -23
  26. package/lib/components/molecules/ChatAIHome/ChatAIHomeMaiaker.styles.js +5 -33
  27. package/lib/components/molecules/ChatAIHome/styles.js +2 -11
  28. package/lib/components/molecules/ChatAIMessages/ChatAICreateAgentActions.js +20 -31
  29. package/lib/components/molecules/ChatAIMessages/ChatAICreateAgentActions.spec.js +104 -0
  30. package/lib/components/molecules/ChatAIMessages/ChatAIMessages.js +2 -7
  31. package/lib/components/molecules/ChatAIMessages/ChatAIMessages.spec.js +291 -0
  32. package/lib/components/molecules/ChatAIMessages/ChatAISuggestions.spec.js +46 -0
  33. package/lib/components/molecules/ChatAIModal/ChatAIModal.styles.js +2 -2
  34. package/lib/components/molecules/ChatAIModal/components/ChatAiAgentOptions/ChatAiAgentOptions.js +1 -8
  35. package/lib/components/molecules/ChatAIModal/components/ChatAiAgentOptions/ChatAiAgentOptions.styles.js +9 -15
  36. package/lib/components/molecules/ChatAIModal/components/ChatAiModalFooter/ChatAiModalFooter.js +3 -18
  37. package/lib/components/molecules/ChatAIModal/components/ChatAiModalFooter/ChatAiModalFooter.styles.js +2 -2
  38. package/lib/components/molecules/ChatAIModal/components/ChatAiModalHeader/ChatAiModalHeader.js +2 -13
  39. package/lib/components/molecules/ChatAIModal/components/ChatAiModalHeader/ChatAiModalHeader.styles.js +5 -14
  40. package/lib/components/molecules/ChatAIModal/layout.js +2 -2
  41. package/lib/components/molecules/ChatAIMyAgents/ChatAIMyAgents.js +2 -12
  42. package/lib/components/molecules/ChatAIMyAgents/ChatAIMyAgents.styles.js +3 -3
  43. package/lib/components/molecules/ChatAIMySkills/ChatAIMySkills.js +10 -34
  44. package/lib/components/molecules/ChatAIMySkills/ChatAIMySkills.spec.js +128 -0
  45. package/lib/components/molecules/ChatAIMySkills/ChatAIMySkills.styles.js +6 -14
  46. package/lib/components/molecules/ChatFooter/ChatFooter.js +45 -66
  47. package/lib/components/molecules/ChatFooter/ChatFooter.spec.js +105 -0
  48. package/lib/components/molecules/ChatFooter/styles.js +6 -12
  49. package/lib/components/molecules/ContextMentionInput/ContextMentionInput.spec.js +84 -0
  50. package/lib/components/molecules/MessageFeedback/MessageFeedback.js +5 -15
  51. package/lib/components/molecules/MessageFeedback/MessageFeedback.spec.js +116 -0
  52. package/lib/components/molecules/Sidebar/Sidebar.layout.styles.js +2 -2
  53. package/lib/components/molecules/Sidebar/Sidebar.spec.js +208 -0
  54. package/lib/components/organisms/AbmAgentModal/AbmAgentModal.js +11 -30
  55. package/lib/components/organisms/AbmAgentModal/AbmAgentModal.spec.js +335 -0
  56. package/lib/components/organisms/AbmSkillGenerateModal/AbmSkillGenerateModal.js +18 -31
  57. package/lib/components/organisms/AbmSkillModal/AbmSkillModal.js +19 -40
  58. package/lib/components/organisms/AbmSkillModal/AbmSkillModal.spec.js +315 -0
  59. package/lib/components/organisms/AbmSkillModal/AbmSkillModal.styles.js +2 -2
  60. package/lib/components/organisms/ChatAI/ChatAI.js +1 -6
  61. package/lib/components/organisms/ChatAI/ChatAI.spec.js +174 -0
  62. package/lib/components/organisms/DeleteAgentModal/DeleteAgentModal.spec.js +59 -0
  63. package/lib/components/organisms/DeleteQuestionModal/DeleteQuestionModal.spec.js +79 -0
  64. package/lib/components/organisms/EditQuestionModal/EditQuestionModal.spec.js +86 -0
  65. package/lib/constants/permissions/utils.spec.js +34 -0
  66. package/lib/hooks/useAgentModel/useCreateAgent.spec.js +95 -0
  67. package/lib/hooks/useAgentModel/useUpdateAgent.spec.js +96 -0
  68. package/lib/hooks/useCaretPosition.spec.js +58 -0
  69. package/lib/hooks/useChatManager/useChatManager.js +34 -55
  70. package/lib/hooks/useDebounce.spec.js +42 -0
  71. package/lib/hooks/useEvent.spec.js +40 -0
  72. package/lib/hooks/useMentionAllowedTypes.spec.js +89 -0
  73. package/lib/hooks/useModal/useModal.spec.js +73 -0
  74. package/lib/hooks/useResize.spec.js +37 -0
  75. package/lib/hooks/useSkillsCatalog.spec.js +88 -0
  76. package/lib/hooks/useSnackBarManager/useSnackBarManager.spec.js +33 -0
  77. package/lib/hooks/useT.spec.js +20 -0
  78. package/lib/hooks/useToggle.spec.js +33 -0
  79. package/lib/lang/br/index.js +2 -6
  80. package/lib/lang/en/index.js +2 -6
  81. package/lib/lang/es/index.js +2 -6
  82. package/lib/lang/fr/index.js +3 -7
  83. package/lib/lib/utils.js +9 -0
  84. package/lib/services/maia/Access/updateAccess.spec.js +108 -0
  85. package/lib/services/maia/Actions/getFrequentlyUsedActions.spec.js +69 -0
  86. package/lib/services/maia/Actions/getSlashCommands.spec.js +74 -0
  87. package/lib/services/maia/Agents/createAgent.spec.js +55 -0
  88. package/lib/services/maia/Agents/deleteAgent.spec.js +42 -0
  89. package/lib/services/maia/Agents/fetchAgentDetail.spec.js +108 -0
  90. package/lib/services/maia/Agents/getAgentById.spec.js +55 -0
  91. package/lib/services/maia/Agents/getAgentSuggestions.spec.js +82 -0
  92. package/lib/services/maia/Agents/setAgentToolGroups.spec.js +45 -0
  93. package/lib/services/maia/Agents/toggleFavorite.spec.js +47 -0
  94. package/lib/services/maia/Agents/updateAgent.spec.js +48 -0
  95. package/lib/services/maia/Chats/deleteChat.spec.js +31 -0
  96. package/lib/services/maia/Chats/getChatMessages.spec.js +150 -0
  97. package/lib/services/maia/Chats/getChatsByUserId.spec.js +149 -0
  98. package/lib/services/maia/Chats/markSessionAsRead.spec.js +30 -0
  99. package/lib/services/maia/Chats/patchChat.spec.js +41 -0
  100. package/lib/services/maia/Chats/wasHelpfulChat.spec.js +28 -0
  101. package/lib/services/maia/Faqs/getFrequentlyAskedQuestions.spec.js +58 -0
  102. package/lib/services/maia/Knowledge/delete.spec.js +45 -0
  103. package/lib/services/maia/Knowledge/download.spec.js +78 -0
  104. package/lib/services/maia/Knowledge/save.spec.js +58 -0
  105. package/lib/services/maia/Orchestrator/orchestrator.spec.js +72 -0
  106. package/lib/services/maia/RecentClients/getRecentClients.spec.js +52 -0
  107. package/lib/services/maia/RecentContexts/getRecentContexts.spec.js +83 -0
  108. package/lib/services/maia/RecentProjects/getRecentProjects.spec.js +82 -0
  109. package/lib/services/maia/RecentTasks/getRecentTasks.spec.js +63 -0
  110. package/lib/services/maia/RecentUsers/getRecentUsers.spec.js +82 -0
  111. package/lib/services/maia/Skills/createSkill.spec.js +68 -0
  112. package/lib/services/maia/Skills/deleteSkill.spec.js +42 -0
  113. package/lib/services/maia/Skills/generateSkill.spec.js +48 -0
  114. package/lib/services/maia/Skills/getSkills.spec.js +152 -0
  115. package/lib/services/maia/Skills/updateSkill.spec.js +62 -0
  116. package/lib/services/maia/client.spec.js +56 -0
  117. package/lib/services/maia/index.js +2 -4
  118. package/lib/services/utils/fetchCOR.js +57 -106
  119. package/lib/services/utils/fetchCOR.spec.js +211 -0
  120. package/lib/services/utils/getCookie.spec.js +20 -0
  121. package/lib/services/utils/index.js +1 -2
  122. package/lib/store/chatsSidebarOptimistic.spec.js +120 -0
  123. package/lib/store/index.js +1 -2
  124. package/lib/store/maiaLastChatPersistence.spec.js +22 -0
  125. package/lib/store/maiaPanelSessionPersistence.spec.js +62 -0
  126. package/lib/store/sessions/sessionStreamManager.js +35 -70
  127. package/lib/store/sessions/sessions.types.js +1 -1
  128. package/lib/store/sessions/sessions.types.spec.js +16 -0
  129. package/lib/store/sessions/useSessionsStore.spec.js +135 -0
  130. package/lib/store/useChatsStore.spec.js +619 -0
  131. package/lib/store/useFaqsStore.spec.js +57 -0
  132. package/lib/utils/agentDisplayName.spec.js +44 -0
  133. package/lib/utils/autoApproveStorage.spec.js +25 -0
  134. package/lib/utils/chatInputFiles.spec.js +39 -0
  135. package/lib/utils/contextMentionLabel.spec.js +13 -0
  136. package/lib/utils/contextMentionTriggers.spec.js +38 -0
  137. package/lib/utils/contextMentionTypeLabel.spec.js +14 -0
  138. package/lib/utils/corConnectorMentionTypes.spec.js +23 -0
  139. package/lib/utils/fileDownloadHelper.spec.js +67 -0
  140. package/lib/utils/formatQuickActionMessage.spec.js +27 -0
  141. package/lib/utils/formatUnreadCount.spec.js +12 -0
  142. package/lib/utils/getUnitFileSize.spec.js +18 -0
  143. package/lib/utils/hitlAnalytics.spec.js +100 -0
  144. package/lib/utils/hoursPlannerQuickActionType.spec.js +64 -0
  145. package/lib/utils/mapBackendLang.spec.js +19 -0
  146. package/lib/utils/normalizeAgentConnectors.spec.js +89 -0
  147. package/lib/utils/orchestratorSubagents.spec.js +32 -0
  148. package/lib/utils/reasoningMappers.spec.js +103 -0
  149. package/lib/utils/retryCompletion.spec.js +99 -0
  150. package/lib/utils/skillContentSize.spec.js +13 -0
  151. package/lib/utils/slashCommandMarker.spec.js +43 -0
  152. package/lib/utils/sortManagerHoursHomeFuas.spec.js +51 -0
  153. package/lib/utils/sseStreamContent.spec.js +31 -0
  154. package/lib/utils/streamActivityMessages.spec.js +98 -0
  155. package/lib/utils/validateTrimmedFields.spec.js +26 -0
  156. package/package.json +1 -1
  157. package/lib/components/molecules/UsageBlockedBanner/UsageBlockedBanner.js +0 -30
  158. package/lib/components/molecules/UsageBlockedBanner/UsageBlockedBanner.styles.js +0 -47
  159. package/lib/components/molecules/UsageBlockedBanner/index.js +0 -2
  160. package/lib/lang/__mocks__/index.js +0 -9
  161. package/lib/services/maia/Usage/getUsage.js +0 -45
  162. package/lib/services/maia/Usage/index.js +0 -6
  163. package/lib/services/utils/MaiaApiError.js +0 -34
  164. package/lib/store/useUsageStore.js +0 -115
  165. package/lib/types/usage.js +0 -16
  166. package/lib/utils/usageBlockedMessage.js +0 -11
@@ -1,97 +1,20 @@
1
1
  import _slicedToArray from "@babel/runtime/helpers/slicedToArray";
2
2
  import _asyncToGenerator from "@babel/runtime/helpers/asyncToGenerator";
3
- import _typeof from "@babel/runtime/helpers/typeof";
4
3
  import _regeneratorRuntime from "@babel/runtime/regenerator";
5
4
  /* eslint-disable camelcase */
6
5
  /* eslint-disable no-nested-ternary */
7
6
  /* eslint-disable no-undef */
8
7
 
9
8
  import { getCookie } from './getCookie';
10
- import { MaiaApiError } from './MaiaApiError';
11
9
  var MAX_ATTEMPTS = 2;
12
- var parseErrorDetail = function parseErrorDetail(errorData) {
13
- if (!errorData || _typeof(errorData) !== 'object') {
14
- return {};
15
- }
16
- var data = errorData;
17
- var detail = data.detail;
18
- if (typeof detail === 'string') {
19
- return {
20
- accessDeniedDetail: detail.includes('Access denied') ? detail : undefined,
21
- message: detail,
22
- detail: detail
23
- };
24
- }
25
- if (detail && _typeof(detail) === 'object') {
26
- var detailObj = detail;
27
- return {
28
- message: typeof detailObj.message === 'string' ? detailObj.message : undefined,
29
- code: typeof detailObj.code === 'string' ? detailObj.code : undefined,
30
- detail: detail
31
- };
32
- }
33
- return {
34
- detail: detail
35
- };
36
- };
37
-
38
- /** Lanza MaiaApiError preservando status/code/message (p. ej. 402 usage_quota_exceeded). */
39
- var throwFromFailedResponse = /*#__PURE__*/function () {
40
- var _ref = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime.mark(function _callee(response) {
41
- var errorData, parsed, _t;
42
- return _regeneratorRuntime.wrap(function (_context) {
43
- while (1) switch (_context.prev = _context.next) {
44
- case 0:
45
- _context.prev = 0;
46
- _context.next = 1;
47
- return response.json();
48
- case 1:
49
- errorData = _context.sent;
50
- parsed = parseErrorDetail(errorData);
51
- if (!(response.status === 403 && parsed.accessDeniedDetail)) {
52
- _context.next = 2;
53
- break;
54
- }
55
- throw new Error(parsed.accessDeniedDetail);
56
- case 2:
57
- if (!(parsed.code || parsed.message)) {
58
- _context.next = 3;
59
- break;
60
- }
61
- throw new MaiaApiError(parsed.message || 'Failed fetching data', response.status, {
62
- code: parsed.code,
63
- detail: parsed.detail
64
- });
65
- case 3:
66
- throw new Error('Failed fetching data');
67
- case 4:
68
- _context.prev = 4;
69
- _t = _context["catch"](0);
70
- if (!(_t instanceof SyntaxError)) {
71
- _context.next = 5;
72
- break;
73
- }
74
- throw new Error('Failed fetching data');
75
- case 5:
76
- throw _t;
77
- case 6:
78
- case "end":
79
- return _context.stop();
80
- }
81
- }, _callee, null, [[0, 4]]);
82
- }));
83
- return function throwFromFailedResponse(_x) {
84
- return _ref.apply(this, arguments);
85
- };
86
- }();
87
10
  var _fetchCOR = /*#__PURE__*/function () {
88
- var _ref3 = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime.mark(function _callee2(url, _ref2) {
11
+ var _ref2 = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime.mark(function _callee(url, _ref) {
89
12
  var _$_ca, _$_ca2, _$_ca3;
90
- var path, _ref2$method, method, _ref2$body, body, _ref2$attempt, attempt, headers, signal, token, requestHeaders, response, _$_ca4, contentType;
91
- return _regeneratorRuntime.wrap(function (_context2) {
92
- while (1) switch (_context2.prev = _context2.next) {
13
+ var path, _ref$method, method, _ref$body, body, _ref$attempt, attempt, headers, signal, token, requestHeaders, response, _$_ca4, contentType, errorData, _t;
14
+ return _regeneratorRuntime.wrap(function (_context) {
15
+ while (1) switch (_context.prev = _context.next) {
93
16
  case 0:
94
- path = _ref2.path, _ref2$method = _ref2.method, method = _ref2$method === void 0 ? 'GET' : _ref2$method, _ref2$body = _ref2.body, body = _ref2$body === void 0 ? null : _ref2$body, _ref2$attempt = _ref2.attempt, attempt = _ref2$attempt === void 0 ? 0 : _ref2$attempt, headers = _ref2.headers, signal = _ref2.signal;
17
+ path = _ref.path, _ref$method = _ref.method, method = _ref$method === void 0 ? 'GET' : _ref$method, _ref$body = _ref.body, body = _ref$body === void 0 ? null : _ref$body, _ref$attempt = _ref.attempt, attempt = _ref$attempt === void 0 ? 0 : _ref$attempt, headers = _ref.headers, signal = _ref.signal;
95
18
  token = process.env.MOCK_CORPILOT_TOKEN ? process.env.MOCK_CORPILOT_TOKEN : typeof $_ca !== 'undefined' && (_$_ca = $_ca) !== null && _$_ca !== void 0 && _$_ca.getCookieATS ? (_$_ca2 = $_ca) === null || _$_ca2 === void 0 ? void 0 : _$_ca2.getCookieATS() : getCookie('ATS');
96
19
  requestHeaders = new Headers();
97
20
  if (!(headers !== null && headers !== void 0 && headers['Content-Type']) && !(body instanceof FormData)) {
@@ -99,14 +22,14 @@ var _fetchCOR = /*#__PURE__*/function () {
99
22
  }
100
23
  requestHeaders.append('Authorization', "Bearer ".concat(token));
101
24
  if (headers) {
102
- Object.entries(headers).forEach(function (_ref4) {
103
- var _ref5 = _slicedToArray(_ref4, 2),
104
- key = _ref5[0],
105
- value = _ref5[1];
25
+ Object.entries(headers).forEach(function (_ref3) {
26
+ var _ref4 = _slicedToArray(_ref3, 2),
27
+ key = _ref4[0],
28
+ value = _ref4[1];
106
29
  requestHeaders.append(key, value);
107
30
  });
108
31
  }
109
- _context2.next = 1;
32
+ _context.next = 1;
110
33
  return fetch("".concat(url, "/").concat(path), {
111
34
  method: method,
112
35
  headers: requestHeaders,
@@ -114,15 +37,15 @@ var _fetchCOR = /*#__PURE__*/function () {
114
37
  signal: signal // Add abort signal support
115
38
  });
116
39
  case 1:
117
- response = _context2.sent;
40
+ response = _context.sent;
118
41
  if (!(response.status === 401 && typeof $_ca !== 'undefined' && (_$_ca3 = $_ca) !== null && _$_ca3 !== void 0 && _$_ca3.refreshToken && attempt < MAX_ATTEMPTS)) {
119
- _context2.next = 3;
42
+ _context.next = 3;
120
43
  break;
121
44
  }
122
- _context2.next = 2;
45
+ _context.next = 2;
123
46
  return (_$_ca4 = $_ca) === null || _$_ca4 === void 0 ? void 0 : _$_ca4.refreshToken();
124
47
  case 2:
125
- return _context2.abrupt("return", _fetchCOR(url, {
48
+ return _context.abrupt("return", _fetchCOR(url, {
126
49
  path: path,
127
50
  method: method,
128
51
  body: body,
@@ -132,35 +55,63 @@ var _fetchCOR = /*#__PURE__*/function () {
132
55
  case 3:
133
56
  contentType = response.headers.get('content-type');
134
57
  if (!(contentType !== null && contentType !== void 0 && contentType.includes('text/event-stream'))) {
135
- _context2.next = 5;
58
+ _context.next = 5;
136
59
  break;
137
60
  }
138
61
  if (response.ok) {
139
- _context2.next = 4;
62
+ _context.next = 4;
140
63
  break;
141
64
  }
142
- _context2.next = 4;
143
- return throwFromFailedResponse(response);
65
+ throw new Error('Failed fetching data');
144
66
  case 4:
145
- return _context2.abrupt("return", response);
67
+ return _context.abrupt("return", response);
146
68
  case 5:
147
69
  if (response.ok) {
148
- _context2.next = 6;
70
+ _context.next = 13;
71
+ break;
72
+ }
73
+ if (!(response.status === 403)) {
74
+ _context.next = 12;
149
75
  break;
150
76
  }
151
- _context2.next = 6;
152
- return throwFromFailedResponse(response);
153
- case 6:
154
- return _context2.abrupt("return", response);
77
+ _context.prev = 6;
78
+ _context.next = 7;
79
+ return response.json();
155
80
  case 7:
81
+ errorData = _context.sent;
82
+ if (!(errorData.detail && errorData.detail.includes('Access denied'))) {
83
+ _context.next = 8;
84
+ break;
85
+ }
86
+ throw new Error(errorData.detail);
87
+ case 8:
88
+ throw new Error('Failed fetching data');
89
+ case 9:
90
+ _context.prev = 9;
91
+ _t = _context["catch"](6);
92
+ if (!(_t instanceof SyntaxError)) {
93
+ _context.next = 10;
94
+ break;
95
+ }
96
+ throw new Error('Failed fetching data');
97
+ case 10:
98
+ throw _t;
99
+ case 11:
100
+ _context.next = 13;
101
+ break;
102
+ case 12:
103
+ throw new Error('Failed fetching data');
104
+ case 13:
105
+ return _context.abrupt("return", response);
106
+ case 14:
156
107
  case "end":
157
- return _context2.stop();
108
+ return _context.stop();
158
109
  }
159
- }, _callee2);
110
+ }, _callee, null, [[6, 9]]);
160
111
  }));
161
- return function fetchCOR(_x2, _x3) {
162
- return _ref3.apply(this, arguments);
112
+ return function fetchCOR(_x, _x2) {
113
+ return _ref2.apply(this, arguments);
163
114
  };
164
115
  }();
165
116
  export { _fetchCOR as fetchCOR };
166
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJnZXRDb29raWUiLCJNYWlhQXBpRXJyb3IiLCJNQVhfQVRURU1QVFMiLCJwYXJzZUVycm9yRGV0YWlsIiwiZXJyb3JEYXRhIiwiX3R5cGVvZiIsImRhdGEiLCJkZXRhaWwiLCJhY2Nlc3NEZW5pZWREZXRhaWwiLCJpbmNsdWRlcyIsInVuZGVmaW5lZCIsIm1lc3NhZ2UiLCJkZXRhaWxPYmoiLCJjb2RlIiwidGhyb3dGcm9tRmFpbGVkUmVzcG9uc2UiLCJfcmVmIiwiX2FzeW5jVG9HZW5lcmF0b3IiLCJfcmVnZW5lcmF0b3JSdW50aW1lIiwibWFyayIsIl9jYWxsZWUiLCJyZXNwb25zZSIsInBhcnNlZCIsIl90Iiwid3JhcCIsIl9jb250ZXh0IiwicHJldiIsIm5leHQiLCJqc29uIiwic2VudCIsInN0YXR1cyIsIkVycm9yIiwiU3ludGF4RXJyb3IiLCJzdG9wIiwiX3giLCJhcHBseSIsImFyZ3VtZW50cyIsImZldGNoQ09SIiwiX3JlZjMiLCJfY2FsbGVlMiIsInVybCIsIl9yZWYyIiwiXyRfY2EiLCJfJF9jYTIiLCJfJF9jYTMiLCJwYXRoIiwiX3JlZjIkbWV0aG9kIiwibWV0aG9kIiwiX3JlZjIkYm9keSIsImJvZHkiLCJfcmVmMiRhdHRlbXB0IiwiYXR0ZW1wdCIsImhlYWRlcnMiLCJzaWduYWwiLCJ0b2tlbiIsInJlcXVlc3RIZWFkZXJzIiwiXyRfY2E0IiwiY29udGVudFR5cGUiLCJfY29udGV4dDIiLCJwcm9jZXNzIiwiZW52IiwiTU9DS19DT1JQSUxPVF9UT0tFTiIsIiRfY2EiLCJnZXRDb29raWVBVFMiLCJIZWFkZXJzIiwiRm9ybURhdGEiLCJhcHBlbmQiLCJjb25jYXQiLCJPYmplY3QiLCJlbnRyaWVzIiwiZm9yRWFjaCIsIl9yZWY0IiwiX3JlZjUiLCJfc2xpY2VkVG9BcnJheSIsImtleSIsInZhbHVlIiwiZmV0Y2giLCJKU09OIiwic3RyaW5naWZ5IiwicmVmcmVzaFRva2VuIiwiYWJydXB0IiwiZ2V0Iiwib2siLCJfeDIiLCJfeDMiLCJfZmV0Y2hDT1IiXSwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvc2VydmljZXMvdXRpbHMvZmV0Y2hDT1IudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLyogZXNsaW50LWRpc2FibGUgY2FtZWxjYXNlICovXG4vKiBlc2xpbnQtZGlzYWJsZSBuby1uZXN0ZWQtdGVybmFyeSAqL1xuLyogZXNsaW50LWRpc2FibGUgbm8tdW5kZWYgKi9cblxuaW1wb3J0IHsgZ2V0Q29va2llIH0gZnJvbSAnLi9nZXRDb29raWUnXG5pbXBvcnQgeyBNYWlhQXBpRXJyb3IgfSBmcm9tICcuL01haWFBcGlFcnJvcidcblxuY29uc3QgTUFYX0FUVEVNUFRTID0gMlxuXG5leHBvcnQgdHlwZSBGZXRjaENPUlBhcmFtcyA9IHtcbiAgcGF0aDogc3RyaW5nXG4gIG1ldGhvZD86IHN0cmluZ1xuICBib2R5PzogdW5rbm93blxuICBhdHRlbXB0PzogbnVtYmVyXG4gIGhlYWRlcnM/OiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+XG4gIHNpZ25hbD86IEFib3J0U2lnbmFsXG59XG5cbmNvbnN0IHBhcnNlRXJyb3JEZXRhaWwgPSAoXG4gIGVycm9yRGF0YTogdW5rbm93blxuKToge1xuICBtZXNzYWdlPzogc3RyaW5nXG4gIGNvZGU/OiBzdHJpbmdcbiAgZGV0YWlsPzogdW5rbm93blxuICBhY2Nlc3NEZW5pZWREZXRhaWw/OiBzdHJpbmdcbn0gPT4ge1xuICBpZiAoIWVycm9yRGF0YSB8fCB0eXBlb2YgZXJyb3JEYXRhICE9PSAnb2JqZWN0Jykge1xuICAgIHJldHVybiB7fVxuICB9XG5cbiAgY29uc3QgZGF0YSA9IGVycm9yRGF0YSBhcyB7IGRldGFpbD86IHVua25vd24gfVxuICBjb25zdCB7IGRldGFpbCB9ID0gZGF0YVxuXG4gIGlmICh0eXBlb2YgZGV0YWlsID09PSAnc3RyaW5nJykge1xuICAgIHJldHVybiB7XG4gICAgICBhY2Nlc3NEZW5pZWREZXRhaWw6IGRldGFpbC5pbmNsdWRlcygnQWNjZXNzIGRlbmllZCcpID8gZGV0YWlsIDogdW5kZWZpbmVkLFxuICAgICAgbWVzc2FnZTogZGV0YWlsLFxuICAgICAgZGV0YWlsLFxuICAgIH1cbiAgfVxuXG4gIGlmIChkZXRhaWwgJiYgdHlwZW9mIGRldGFpbCA9PT0gJ29iamVjdCcpIHtcbiAgICBjb25zdCBkZXRhaWxPYmogPSBkZXRhaWwgYXMgeyBtZXNzYWdlPzogdW5rbm93bjsgY29kZT86IHVua25vd24gfVxuICAgIHJldHVybiB7XG4gICAgICBtZXNzYWdlOiB0eXBlb2YgZGV0YWlsT2JqLm1lc3NhZ2UgPT09ICdzdHJpbmcnID8gZGV0YWlsT2JqLm1lc3NhZ2UgOiB1bmRlZmluZWQsXG4gICAgICBjb2RlOiB0eXBlb2YgZGV0YWlsT2JqLmNvZGUgPT09ICdzdHJpbmcnID8gZGV0YWlsT2JqLmNvZGUgOiB1bmRlZmluZWQsXG4gICAgICBkZXRhaWwsXG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHsgZGV0YWlsIH1cbn1cblxuLyoqIExhbnphIE1haWFBcGlFcnJvciBwcmVzZXJ2YW5kbyBzdGF0dXMvY29kZS9tZXNzYWdlIChwLiBlai4gNDAyIHVzYWdlX3F1b3RhX2V4Y2VlZGVkKS4gKi9cbmNvbnN0IHRocm93RnJvbUZhaWxlZFJlc3BvbnNlID0gYXN5bmMgKHJlc3BvbnNlOiBSZXNwb25zZSk6IFByb21pc2U8bmV2ZXI+ID0+IHtcbiAgdHJ5IHtcbiAgICBjb25zdCBlcnJvckRhdGE6IHVua25vd24gPSBhd2FpdCByZXNwb25zZS5qc29uKClcbiAgICBjb25zdCBwYXJzZWQgPSBwYXJzZUVycm9yRGV0YWlsKGVycm9yRGF0YSlcblxuICAgIGlmIChyZXNwb25zZS5zdGF0dXMgPT09IDQwMyAmJiBwYXJzZWQuYWNjZXNzRGVuaWVkRGV0YWlsKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IocGFyc2VkLmFjY2Vzc0RlbmllZERldGFpbClcbiAgICB9XG5cbiAgICBpZiAocGFyc2VkLmNvZGUgfHwgcGFyc2VkLm1lc3NhZ2UpIHtcbiAgICAgIHRocm93IG5ldyBNYWlhQXBpRXJyb3IocGFyc2VkLm1lc3NhZ2UgfHwgJ0ZhaWxlZCBmZXRjaGluZyBkYXRhJywgcmVzcG9uc2Uuc3RhdHVzLCB7XG4gICAgICAgIGNvZGU6IHBhcnNlZC5jb2RlLFxuICAgICAgICBkZXRhaWw6IHBhcnNlZC5kZXRhaWwsXG4gICAgICB9KVxuICAgIH1cblxuICAgIHRocm93IG5ldyBFcnJvcignRmFpbGVkIGZldGNoaW5nIGRhdGEnKVxuICB9IGNhdGNoIChqc29uRXJyb3IpIHtcbiAgICBpZiAoanNvbkVycm9yIGluc3RhbmNlb2YgU3ludGF4RXJyb3IpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignRmFpbGVkIGZldGNoaW5nIGRhdGEnKVxuICAgIH1cbiAgICB0aHJvdyBqc29uRXJyb3JcbiAgfVxufVxuXG5leHBvcnQgY29uc3QgZmV0Y2hDT1IgPSBhc3luYyAoXG4gIHVybDogc3RyaW5nLFxuICB7IHBhdGgsIG1ldGhvZCA9ICdHRVQnLCBib2R5ID0gbnVsbCwgYXR0ZW1wdCA9IDAsIGhlYWRlcnMsIHNpZ25hbCB9OiBGZXRjaENPUlBhcmFtc1xuKTogUHJvbWlzZTxSZXNwb25zZT4gPT4ge1xuICBjb25zdCB0b2tlbiA9IHByb2Nlc3MuZW52Lk1PQ0tfQ09SUElMT1RfVE9LRU5cbiAgICA/IHByb2Nlc3MuZW52Lk1PQ0tfQ09SUElMT1RfVE9LRU5cbiAgICA6IHR5cGVvZiAkX2NhICE9PSAndW5kZWZpbmVkJyAmJiAkX2NhPy5nZXRDb29raWVBVFNcbiAgICAgID8gJF9jYT8uZ2V0Q29va2llQVRTKClcbiAgICAgIDogZ2V0Q29va2llKCdBVFMnKVxuXG4gIGNvbnN0IHJlcXVlc3RIZWFkZXJzID0gbmV3IEhlYWRlcnMoKVxuICBpZiAoIWhlYWRlcnM/LlsnQ29udGVudC1UeXBlJ10gJiYgIShib2R5IGluc3RhbmNlb2YgRm9ybURhdGEpKSB7XG4gICAgcmVxdWVzdEhlYWRlcnMuYXBwZW5kKCdDb250ZW50LVR5cGUnLCAnYXBwbGljYXRpb24vanNvbicpXG4gIH1cbiAgcmVxdWVzdEhlYWRlcnMuYXBwZW5kKCdBdXRob3JpemF0aW9uJywgYEJlYXJlciAke3Rva2VufWApXG4gIGlmIChoZWFkZXJzKSB7XG4gICAgT2JqZWN0LmVudHJpZXMoaGVhZGVycykuZm9yRWFjaCgoW2tleSwgdmFsdWVdKSA9PiB7XG4gICAgICByZXF1ZXN0SGVhZGVycy5hcHBlbmQoa2V5LCB2YWx1ZSlcbiAgICB9KVxuICB9XG5cbiAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBmZXRjaChgJHt1cmx9LyR7cGF0aH1gLCB7XG4gICAgbWV0aG9kLFxuICAgIGhlYWRlcnM6IHJlcXVlc3RIZWFkZXJzLFxuICAgIGJvZHk6IGJvZHkgaW5zdGFuY2VvZiBGb3JtRGF0YSA/IGJvZHkgOiBib2R5ID8gSlNPTi5zdHJpbmdpZnkoYm9keSkgOiBudWxsLFxuICAgIHNpZ25hbCwgLy8gQWRkIGFib3J0IHNpZ25hbCBzdXBwb3J0XG4gIH0pXG5cbiAgaWYgKHJlc3BvbnNlLnN0YXR1cyA9PT0gNDAxICYmIHR5cGVvZiAkX2NhICE9PSAndW5kZWZpbmVkJyAmJiAkX2NhPy5yZWZyZXNoVG9rZW4gJiYgYXR0ZW1wdCA8IE1BWF9BVFRFTVBUUykge1xuICAgIGF3YWl0ICRfY2E/LnJlZnJlc2hUb2tlbigpXG4gICAgcmV0dXJuIGZldGNoQ09SKHVybCwgeyBwYXRoLCBtZXRob2QsIGJvZHksIGF0dGVtcHQ6IGF0dGVtcHQgKyAxLCBzaWduYWwgfSlcbiAgfVxuXG4gIGNvbnN0IGNvbnRlbnRUeXBlID0gcmVzcG9uc2UuaGVhZGVycy5nZXQoJ2NvbnRlbnQtdHlwZScpXG4gIGlmIChjb250ZW50VHlwZT8uaW5jbHVkZXMoJ3RleHQvZXZlbnQtc3RyZWFtJykpIHtcbiAgICBpZiAoIXJlc3BvbnNlLm9rKSB7XG4gICAgICBhd2FpdCB0aHJvd0Zyb21GYWlsZWRSZXNwb25zZShyZXNwb25zZSlcbiAgICB9XG4gICAgcmV0dXJuIHJlc3BvbnNlXG4gIH1cblxuICBpZiAoIXJlc3BvbnNlLm9rKSB7XG4gICAgYXdhaXQgdGhyb3dGcm9tRmFpbGVk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
117
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJnZXRDb29raWUiLCJNQVhfQVRURU1QVFMiLCJmZXRjaENPUiIsIl9yZWYyIiwiX2FzeW5jVG9HZW5lcmF0b3IiLCJfcmVnZW5lcmF0b3JSdW50aW1lIiwibWFyayIsIl9jYWxsZWUiLCJ1cmwiLCJfcmVmIiwiXyRfY2EiLCJfJF9jYTIiLCJfJF9jYTMiLCJwYXRoIiwiX3JlZiRtZXRob2QiLCJtZXRob2QiLCJfcmVmJGJvZHkiLCJib2R5IiwiX3JlZiRhdHRlbXB0IiwiYXR0ZW1wdCIsImhlYWRlcnMiLCJzaWduYWwiLCJ0b2tlbiIsInJlcXVlc3RIZWFkZXJzIiwicmVzcG9uc2UiLCJfJF9jYTQiLCJjb250ZW50VHlwZSIsImVycm9yRGF0YSIsIl90Iiwid3JhcCIsIl9jb250ZXh0IiwicHJldiIsIm5leHQiLCJwcm9jZXNzIiwiZW52IiwiTU9DS19DT1JQSUxPVF9UT0tFTiIsIiRfY2EiLCJnZXRDb29raWVBVFMiLCJIZWFkZXJzIiwiRm9ybURhdGEiLCJhcHBlbmQiLCJjb25jYXQiLCJPYmplY3QiLCJlbnRyaWVzIiwiZm9yRWFjaCIsIl9yZWYzIiwiX3JlZjQiLCJfc2xpY2VkVG9BcnJheSIsImtleSIsInZhbHVlIiwiZmV0Y2giLCJKU09OIiwic3RyaW5naWZ5Iiwic2VudCIsInN0YXR1cyIsInJlZnJlc2hUb2tlbiIsImFicnVwdCIsImdldCIsImluY2x1ZGVzIiwib2siLCJFcnJvciIsImpzb24iLCJkZXRhaWwiLCJTeW50YXhFcnJvciIsInN0b3AiLCJfeCIsIl94MiIsImFwcGx5IiwiYXJndW1lbnRzIiwiX2ZldGNoQ09SIl0sInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL3NlcnZpY2VzL3V0aWxzL2ZldGNoQ09SLnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qIGVzbGludC1kaXNhYmxlIGNhbWVsY2FzZSAqL1xuLyogZXNsaW50LWRpc2FibGUgbm8tbmVzdGVkLXRlcm5hcnkgKi9cbi8qIGVzbGludC1kaXNhYmxlIG5vLXVuZGVmICovXG5cbmltcG9ydCB7IGdldENvb2tpZSB9IGZyb20gJy4vZ2V0Q29va2llJ1xuXG5jb25zdCBNQVhfQVRURU1QVFMgPSAyXG5cbmV4cG9ydCB0eXBlIEZldGNoQ09SUGFyYW1zID0ge1xuICBwYXRoOiBzdHJpbmdcbiAgbWV0aG9kPzogc3RyaW5nXG4gIGJvZHk/OiB1bmtub3duXG4gIGF0dGVtcHQ/OiBudW1iZXJcbiAgaGVhZGVycz86IFJlY29yZDxzdHJpbmcsIHN0cmluZz5cbiAgc2lnbmFsPzogQWJvcnRTaWduYWxcbn1cblxuZXhwb3J0IGNvbnN0IGZldGNoQ09SID0gYXN5bmMgKFxuICB1cmw6IHN0cmluZyxcbiAgeyBwYXRoLCBtZXRob2QgPSAnR0VUJywgYm9keSA9IG51bGwsIGF0dGVtcHQgPSAwLCBoZWFkZXJzLCBzaWduYWwgfTogRmV0Y2hDT1JQYXJhbXNcbik6IFByb21pc2U8UmVzcG9uc2U+ID0+IHtcbiAgY29uc3QgdG9rZW4gPSBwcm9jZXNzLmVudi5NT0NLX0NPUlBJTE9UX1RPS0VOXG4gICAgPyBwcm9jZXNzLmVudi5NT0NLX0NPUlBJTE9UX1RPS0VOXG4gICAgOiB0eXBlb2YgJF9jYSAhPT0gJ3VuZGVmaW5lZCcgJiYgJF9jYT8uZ2V0Q29va2llQVRTXG4gICAgICA/ICRfY2E/LmdldENvb2tpZUFUUygpXG4gICAgICA6IGdldENvb2tpZSgnQVRTJylcblxuICBjb25zdCByZXF1ZXN0SGVhZGVycyA9IG5ldyBIZWFkZXJzKClcbiAgaWYgKCFoZWFkZXJzPy5bJ0NvbnRlbnQtVHlwZSddICYmICEoYm9keSBpbnN0YW5jZW9mIEZvcm1EYXRhKSkge1xuICAgIHJlcXVlc3RIZWFkZXJzLmFwcGVuZCgnQ29udGVudC1UeXBlJywgJ2FwcGxpY2F0aW9uL2pzb24nKVxuICB9XG4gIHJlcXVlc3RIZWFkZXJzLmFwcGVuZCgnQXV0aG9yaXphdGlvbicsIGBCZWFyZXIgJHt0b2tlbn1gKVxuICBpZiAoaGVhZGVycykge1xuICAgIE9iamVjdC5lbnRyaWVzKGhlYWRlcnMpLmZvckVhY2goKFtrZXksIHZhbHVlXSkgPT4ge1xuICAgICAgcmVxdWVzdEhlYWRlcnMuYXBwZW5kKGtleSwgdmFsdWUpXG4gICAgfSlcbiAgfVxuXG4gIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgZmV0Y2goYCR7dXJsfS8ke3BhdGh9YCwge1xuICAgIG1ldGhvZCxcbiAgICBoZWFkZXJzOiByZXF1ZXN0SGVhZGVycyxcbiAgICBib2R5OiBib2R5IGluc3RhbmNlb2YgRm9ybURhdGEgPyBib2R5IDogYm9keSA/IEpTT04uc3RyaW5naWZ5KGJvZHkpIDogbnVsbCxcbiAgICBzaWduYWwsIC8vIEFkZCBhYm9ydCBzaWduYWwgc3VwcG9ydFxuICB9KVxuXG4gIGlmIChyZXNwb25zZS5zdGF0dXMgPT09IDQwMSAmJiB0eXBlb2YgJF9jYSAhPT0gJ3VuZGVmaW5lZCcgJiYgJF9jYT8ucmVmcmVzaFRva2VuICYmIGF0dGVtcHQgPCBNQVhfQVRURU1QVFMpIHtcbiAgICBhd2FpdCAkX2NhPy5yZWZyZXNoVG9rZW4oKVxuICAgIHJldHVybiBmZXRjaENPUih1cmwsIHsgcGF0aCwgbWV0aG9kLCBib2R5LCBhdHRlbXB0OiBhdHRlbXB0ICsgMSwgc2lnbmFsIH0pXG4gIH1cblxuICBjb25zdCBjb250ZW50VHlwZSA9IHJlc3BvbnNlLmhlYWRlcnMuZ2V0KCdjb250ZW50LXR5cGUnKVxuICBpZiAoY29udGVudFR5cGU/LmluY2x1ZGVzKCd0ZXh0L2V2ZW50LXN0cmVhbScpKSB7XG4gICAgaWYgKCFyZXNwb25zZS5vaykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdGYWlsZWQgZmV0Y2hpbmcgZGF0YScpXG4gICAgfVxuICAgIHJldHVybiByZXNwb25zZVxuICB9XG5cbiAgaWYgKCFyZXNwb25zZS5vaykge1xuICAgIGlmIChyZXNwb25zZS5zdGF0dXMgPT09IDQwMykge1xuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgZXJyb3JEYXRhID0gYXdhaXQgcmVzcG9uc2UuanNvbigpXG4gICAgICAgIGlmIChlcnJvckRhdGEuZGV0YWlsICYmIGVycm9yRGF0YS5kZXRhaWwuaW5jbHVkZXMoJ0FjY2VzcyBkZW5pZWQnKSkge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihlcnJvckRhdGEuZGV0YWlsKVxuICAgICAgICB9XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignRmFpbGVkIGZldGNoaW5nIGRhdGEnKVxuICAgICAgfSBjYXRjaCAoanNvbkVycm9yKSB7XG4gICAgICAgIGlmIChqc29uRXJyb3IgaW5zdGFuY2VvZiBTeW50YXhFcnJvcikge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcignRmFpbGVkIGZldGNoaW5nIGRhdGEnKVxuICAgICAgICB9XG4gICAgICAgIHRocm93IGpzb25FcnJvclxuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ZhaWxlZCBmZXRjaGluZyBkYXRhJylcbiAgICB9XG4gIH1cblxuICByZXR1cm4gcmVzcG9uc2Vcbn1cbiJdLCJtYXBwaW5ncyI6Ijs7O0FBQUE7QUFDQTtBQUNBOztBQUVBLFNBQVNBLFNBQVMsUUFBUSxhQUFhO0FBRXZDLElBQU1DLFlBQVksR0FBRyxDQUFDO0FBV2YsSUFBTUMsU0FBUTtFQUFBLElBQUFDLEtBQUEsR0FBQUMsaUJBQUEsY0FBQUMsbUJBQUEsQ0FBQUMsSUFBQSxDQUFHLFNBQUFDLFFBQ3RCQyxHQUFXLEVBQUFDLElBQUE7SUFBQSxJQUFBQyxLQUFBLEVBQUFDLE1BQUEsRUFBQUMsTUFBQTtJQUFBLElBQUFDLElBQUEsRUFBQUMsV0FBQSxFQUFBQyxNQUFBLEVBQUFDLFNBQUEsRUFBQUMsSUFBQSxFQUFBQyxZQUFBLEVBQUFDLE9BQUEsRUFBQUMsT0FBQSxFQUFBQyxNQUFBLEVBQUFDLEtBQUEsRUFBQUMsY0FBQSxFQUFBQyxRQUFBLEVBQUFDLE1BQUEsRUFBQUMsV0FBQSxFQUFBQyxTQUFBLEVBQUFDLEVBQUE7SUFBQSxPQUFBdkIsbUJBQUEsQ0FBQXdCLElBQUEsV0FBQUMsUUFBQTtNQUFBLGtCQUFBQSxRQUFBLENBQUFDLElBQUEsR0FBQUQsUUFBQSxDQUFBRSxJQUFBO1FBQUE7VUFDVG5CLElBQUksR0FBQUosSUFBQSxDQUFKSSxJQUFJLEVBQUFDLFdBQUEsR0FBQUwsSUFBQSxDQUFFTSxNQUFNLEVBQU5BLE1BQU0sR0FBQUQsV0FBQSxjQUFHLEtBQUssR0FBQUEsV0FBQSxFQUFBRSxTQUFBLEdBQUFQLElBQUEsQ0FBRVEsSUFBSSxFQUFKQSxJQUFJLEdBQUFELFNBQUEsY0FBRyxJQUFJLEdBQUFBLFNBQUEsRUFBQUUsWUFBQSxHQUFBVCxJQUFBLENBQUVVLE9BQU8sRUFBUEEsT0FBTyxHQUFBRCxZQUFBLGNBQUcsQ0FBQyxHQUFBQSxZQUFBLEVBQUVFLE9BQU8sR0FBQVgsSUFBQSxDQUFQVyxPQUFPLEVBQUVDLE1BQU0sR0FBQVosSUFBQSxDQUFOWSxNQUFNO1VBRTNEQyxLQUFLLEdBQUdXLE9BQU8sQ0FBQ0MsR0FBRyxDQUFDQyxtQkFBbUIsR0FDekNGLE9BQU8sQ0FBQ0MsR0FBRyxDQUFDQyxtQkFBbUIsR0FDL0IsT0FBT0MsSUFBSSxLQUFLLFdBQVcsS0FBQTFCLEtBQUEsR0FBSTBCLElBQUksY0FBQTFCLEtBQUEsZUFBSkEsS0FBQSxDQUFNMkIsWUFBWSxJQUFBMUIsTUFBQSxHQUMvQ3lCLElBQUksY0FBQXpCLE1BQUEsdUJBQUpBLE1BQUEsQ0FBTTBCLFlBQVksQ0FBQyxDQUFDLEdBQ3BCckMsU0FBUyxDQUFDLEtBQUssQ0FBQztVQUVoQnVCLGNBQWMsR0FBRyxJQUFJZSxPQUFPLENBQUMsQ0FBQztVQUNwQyxJQUFJLEVBQUNsQixPQUFPLGFBQVBBLE9BQU8sZUFBUEEsT0FBTyxDQUFHLGNBQWMsQ0FBQyxLQUFJLEVBQUVILElBQUksWUFBWXNCLFFBQVEsQ0FBQyxFQUFFO1lBQzdEaEIsY0FBYyxDQUFDaUIsTUFBTSxDQUFDLGNBQWMsRUFBRSxrQkFBa0IsQ0FBQztVQUMzRDtVQUNBakIsY0FBYyxDQUFDaUIsTUFBTSxDQUFDLGVBQWUsWUFBQUMsTUFBQSxDQUFZbkIsS0FBSyxDQUFFLENBQUM7VUFDekQsSUFBSUYsT0FBTyxFQUFFO1lBQ1hzQixNQUFNLENBQUNDLE9BQU8sQ0FBQ3ZCLE9BQU8sQ0FBQyxDQUFDd0IsT0FBTyxDQUFDLFVBQUFDLEtBQUEsRUFBa0I7Y0FBQSxJQUFBQyxLQUFBLEdBQUFDLGNBQUEsQ0FBQUYsS0FBQTtnQkFBaEJHLEdBQUcsR0FBQUYsS0FBQTtnQkFBRUcsS0FBSyxHQUFBSCxLQUFBO2NBQzFDdkIsY0FBYyxDQUFDaUIsTUFBTSxDQUFDUSxHQUFHLEVBQUVDLEtBQUssQ0FBQztZQUNuQyxDQUFDLENBQUM7VUFDSjtVQUFDbkIsUUFBQSxDQUFBRSxJQUFBO1VBQUEsT0FFc0JrQixLQUFLLElBQUFULE1BQUEsQ0FBSWpDLEdBQUcsT0FBQWlDLE1BQUEsQ0FBSTVCLElBQUksR0FBSTtZQUM3Q0UsTUFBTSxFQUFOQSxNQUFNO1lBQ05LLE9BQU8sRUFBRUcsY0FBYztZQUN2Qk4sSUFBSSxFQUFFQSxJQUFJLFlBQVlzQixRQUFRLEdBQUd0QixJQUFJLEdBQUdBLElBQUksR0FBR2tDLElBQUksQ0FBQ0MsU0FBUyxDQUFDbkMsSUFBSSxDQUFDLEdBQUcsSUFBSTtZQUMxRUksTUFBTSxFQUFOQSxNQUFNLENBQUU7VUFDVixDQUFDLENBQUM7UUFBQTtVQUxJRyxRQUFRLEdBQUFNLFFBQUEsQ0FBQXVCLElBQUE7VUFBQSxNQU9WN0IsUUFBUSxDQUFDOEIsTUFBTSxLQUFLLEdBQUcsSUFBSSxPQUFPbEIsSUFBSSxLQUFLLFdBQVcsS0FBQXhCLE1BQUEsR0FBSXdCLElBQUksY0FBQXhCLE1BQUEsZUFBSkEsTUFBQSxDQUFNMkMsWUFBWSxJQUFJcEMsT0FBTyxHQUFHbEIsWUFBWTtZQUFBNkIsUUFBQSxDQUFBRSxJQUFBO1lBQUE7VUFBQTtVQUFBRixRQUFBLENBQUFFLElBQUE7VUFBQSxRQUFBUCxNQUFBLEdBQ2xHVyxJQUFJLGNBQUFYLE1BQUEsdUJBQUpBLE1BQUEsQ0FBTThCLFlBQVksQ0FBQyxDQUFDO1FBQUE7VUFBQSxPQUFBekIsUUFBQSxDQUFBMEIsTUFBQSxXQUNuQnRELFNBQVEsQ0FBQ00sR0FBRyxFQUFFO1lBQUVLLElBQUksRUFBSkEsSUFBSTtZQUFFRSxNQUFNLEVBQU5BLE1BQU07WUFBRUUsSUFBSSxFQUFKQSxJQUFJO1lBQUVFLE9BQU8sRUFBRUEsT0FBTyxHQUFHLENBQUM7WUFBRUUsTUFBTSxFQUFOQTtVQUFPLENBQUMsQ0FBQztRQUFBO1VBR3RFSyxXQUFXLEdBQUdGLFFBQVEsQ0FBQ0osT0FBTyxDQUFDcUMsR0FBRyxDQUFDLGNBQWMsQ0FBQztVQUFBLE1BQ3BEL0IsV0FBVyxhQUFYQSxXQUFXLGVBQVhBLFdBQVcsQ0FBRWdDLFFBQVEsQ0FBQyxtQkFBbUIsQ0FBQztZQUFBNUIsUUFBQSxDQUFBRSxJQUFBO1lBQUE7VUFBQTtVQUFBLElBQ3ZDUixRQUFRLENBQUNtQyxFQUFFO1lBQUE3QixRQUFBLENBQUFFLElBQUE7WUFBQTtVQUFBO1VBQUEsTUFDUixJQUFJNEIsS0FBSyxDQUFDLHNCQUFzQixDQUFDO1FBQUE7VUFBQSxPQUFBOUIsUUFBQSxDQUFBMEIsTUFBQSxXQUVsQ2hDLFFBQVE7UUFBQTtVQUFBLElBR1pBLFFBQVEsQ0FBQ21DLEVBQUU7WUFBQTdCLFFBQUEsQ0FBQUUsSUFBQTtZQUFBO1VBQUE7VUFBQSxNQUNWUixRQUFRLENBQUM4QixNQUFNLEtBQUssR0FBRztZQUFBeEIsUUFBQSxDQUFBRSxJQUFBO1lBQUE7VUFBQTtVQUFBRixRQUFBLENBQUFDLElBQUE7VUFBQUQsUUFBQSxDQUFBRSxJQUFBO1VBQUEsT0FFQ1IsUUFBUSxDQUFDcUMsSUFBSSxDQUFDLENBQUM7UUFBQTtVQUFqQ2xDLFNBQVMsR0FBQUcsUUFBQSxDQUFBdUIsSUFBQTtVQUFBLE1BQ1gxQixTQUFTLENBQUNtQyxNQUFNLElBQUluQyxTQUFTLENBQUNtQyxNQUFNLENBQUNKLFFBQVEsQ0FBQyxlQUFlLENBQUM7WUFBQTVCLFFBQUEsQ0FBQUUsSUFBQTtZQUFBO1VBQUE7VUFBQSxNQUMxRCxJQUFJNEIsS0FBSyxDQUFDakMsU0FBUyxDQUFDbUMsTUFBTSxDQUFDO1FBQUE7VUFBQSxNQUU3QixJQUFJRixLQUFLLENBQUMsc0JBQXNCLENBQUM7UUFBQTtVQUFBOUIsUUFBQSxDQUFBQyxJQUFBO1VBQUFILEVBQUEsR0FBQUUsUUFBQTtVQUFBLE1BRW5DRixFQUFBLFlBQXFCbUMsV0FBVztZQUFBakMsUUFBQSxDQUFBRSxJQUFBO1lBQUE7VUFBQTtVQUFBLE1BQzVCLElBQUk0QixLQUFLLENBQUMsc0JBQXNCLENBQUM7UUFBQTtVQUFBLE1BQUFoQyxFQUFBO1FBQUE7VUFBQUUsUUFBQSxDQUFBRSxJQUFBO1VBQUE7UUFBQTtVQUFBLE1BS3JDLElBQUk0QixLQUFLLENBQUMsc0JBQXNCLENBQUM7UUFBQTtVQUFBLE9BQUE5QixRQUFBLENBQUEwQixNQUFBLFdBSXBDaEMsUUFBUTtRQUFBO1FBQUE7VUFBQSxPQUFBTSxRQUFBLENBQUFrQyxJQUFBO01BQUE7SUFBQSxHQUFBekQsT0FBQTtFQUFBLENBQ2hCO0VBQUEsZ0JBN0RZTCxRQUFRQSxDQUFBK0QsRUFBQSxFQUFBQyxHQUFBO0lBQUEsT0FBQS9ELEtBQUEsQ0FBQWdFLEtBQUEsT0FBQUMsU0FBQTtFQUFBO0FBQUEsR0E2RHBCO0FBQUEsU0FBQUMsU0FBQSxJQUFBbkUsUUFBQSIsImlnbm9yZUxpc3QiOltdfQ==
@@ -0,0 +1,211 @@
1
+ import _asyncToGenerator from "@babel/runtime/helpers/asyncToGenerator";
2
+ import _regeneratorRuntime from "@babel/runtime/regenerator";
3
+ import { lastFetch, mockFetch, mockJsonError, mockJsonOk } from '../../test/mockFetch';
4
+ import { fetchCOR } from './fetchCOR';
5
+ var setCorAuth = function setCorAuth(value) {
6
+ Object.defineProperty(global, '$_ca', {
7
+ configurable: true,
8
+ writable: true,
9
+ value: value
10
+ });
11
+ };
12
+ describe('fetchCOR', function () {
13
+ var originalToken = process.env.MOCK_CORPILOT_TOKEN;
14
+ beforeEach(function () {
15
+ delete process.env.MOCK_CORPILOT_TOKEN;
16
+ setCorAuth(undefined);
17
+ document.cookie = 'ATS=cookie-token; path=/';
18
+ });
19
+ afterEach(function () {
20
+ if (originalToken) {
21
+ process.env.MOCK_CORPILOT_TOKEN = originalToken;
22
+ } else {
23
+ delete process.env.MOCK_CORPILOT_TOKEN;
24
+ }
25
+ setCorAuth(undefined);
26
+ });
27
+ it('sends JSON with the cookie token', /*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regeneratorRuntime.mark(function _callee() {
28
+ var request;
29
+ return _regeneratorRuntime.wrap(function (_context) {
30
+ while (1) switch (_context.prev = _context.next) {
31
+ case 0:
32
+ mockJsonOk({
33
+ ok: true
34
+ });
35
+ _context.next = 1;
36
+ return fetchCOR('https://maia.test', {
37
+ path: 'agents',
38
+ method: 'POST',
39
+ body: {
40
+ name: 'MAIA'
41
+ }
42
+ });
43
+ case 1:
44
+ request = lastFetch();
45
+ expect(request.url).toBe('https://maia.test/agents');
46
+ expect(request.method).toBe('POST');
47
+ expect(request.headers.get('Authorization')).toBe('Bearer cookie-token');
48
+ expect(request.headers.get('Content-Type')).toBe('application/json');
49
+ expect(request.parsedBody).toEqual({
50
+ name: 'MAIA'
51
+ });
52
+ case 2:
53
+ case "end":
54
+ return _context.stop();
55
+ }
56
+ }, _callee);
57
+ })));
58
+ it('prefers MOCK_CORPILOT_TOKEN over the cookie', /*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regeneratorRuntime.mark(function _callee2() {
59
+ return _regeneratorRuntime.wrap(function (_context2) {
60
+ while (1) switch (_context2.prev = _context2.next) {
61
+ case 0:
62
+ process.env.MOCK_CORPILOT_TOKEN = 'env-token';
63
+ mockJsonOk({});
64
+ _context2.next = 1;
65
+ return fetchCOR('https://maia.test', {
66
+ path: 'sessions'
67
+ });
68
+ case 1:
69
+ expect(lastFetch().headers.get('Authorization')).toBe('Bearer env-token');
70
+ case 2:
71
+ case "end":
72
+ return _context2.stop();
73
+ }
74
+ }, _callee2);
75
+ })));
76
+ it('prefers $_ca.getCookieATS when there is no mock token', /*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regeneratorRuntime.mark(function _callee3() {
77
+ return _regeneratorRuntime.wrap(function (_context3) {
78
+ while (1) switch (_context3.prev = _context3.next) {
79
+ case 0:
80
+ setCorAuth({
81
+ getCookieATS: function getCookieATS() {
82
+ return 'ca-token';
83
+ },
84
+ refreshToken: jest.fn()
85
+ });
86
+ mockJsonOk({});
87
+ _context3.next = 1;
88
+ return fetchCOR('https://maia.test', {
89
+ path: 'sessions'
90
+ });
91
+ case 1:
92
+ expect(lastFetch().headers.get('Authorization')).toBe('Bearer ca-token');
93
+ case 2:
94
+ case "end":
95
+ return _context3.stop();
96
+ }
97
+ }, _callee3);
98
+ })));
99
+ it('does not force Content-Type on FormData', /*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regeneratorRuntime.mark(function _callee4() {
100
+ var formData;
101
+ return _regeneratorRuntime.wrap(function (_context4) {
102
+ while (1) switch (_context4.prev = _context4.next) {
103
+ case 0:
104
+ mockJsonOk({});
105
+ formData = new FormData();
106
+ formData.append('files', new File(['x'], 'doc.txt'));
107
+ _context4.next = 1;
108
+ return fetchCOR('https://maia.test', {
109
+ path: 'upload',
110
+ method: 'POST',
111
+ body: formData
112
+ });
113
+ case 1:
114
+ expect(lastFetch().headers.get('Content-Type')).toBeNull();
115
+ expect(lastFetch().body).toBe(formData);
116
+ case 2:
117
+ case "end":
118
+ return _context4.stop();
119
+ }
120
+ }, _callee4);
121
+ })));
122
+ it('retries once after 401 when $_ca.refreshToken exists', /*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regeneratorRuntime.mark(function _callee5() {
123
+ var refreshToken, response;
124
+ return _regeneratorRuntime.wrap(function (_context5) {
125
+ while (1) switch (_context5.prev = _context5.next) {
126
+ case 0:
127
+ refreshToken = jest.fn().mockResolvedValue(undefined);
128
+ setCorAuth({
129
+ getCookieATS: function getCookieATS() {
130
+ return 'ca-token';
131
+ },
132
+ refreshToken: refreshToken
133
+ });
134
+ mockJsonError(401);
135
+ mockJsonOk({
136
+ data: []
137
+ });
138
+ _context5.next = 1;
139
+ return fetchCOR('https://maia.test', {
140
+ path: 'agents'
141
+ });
142
+ case 1:
143
+ response = _context5.sent;
144
+ expect(refreshToken).toHaveBeenCalledTimes(1);
145
+ expect(mockFetch).toHaveBeenCalledTimes(2);
146
+ expect(response.ok).toBe(true);
147
+ case 2:
148
+ case "end":
149
+ return _context5.stop();
150
+ }
151
+ }, _callee5);
152
+ })));
153
+ it('throws the access denied detail on 403', /*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regeneratorRuntime.mark(function _callee6() {
154
+ return _regeneratorRuntime.wrap(function (_context6) {
155
+ while (1) switch (_context6.prev = _context6.next) {
156
+ case 0:
157
+ mockJsonError(403, {
158
+ detail: 'Access denied for this agent'
159
+ });
160
+ _context6.next = 1;
161
+ return expect(fetchCOR('https://maia.test', {
162
+ path: 'agents'
163
+ })).rejects.toThrow('Access denied for this agent');
164
+ case 1:
165
+ case "end":
166
+ return _context6.stop();
167
+ }
168
+ }, _callee6);
169
+ })));
170
+ it('throws a generic error on other failed responses', /*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regeneratorRuntime.mark(function _callee7() {
171
+ return _regeneratorRuntime.wrap(function (_context7) {
172
+ while (1) switch (_context7.prev = _context7.next) {
173
+ case 0:
174
+ mockJsonError(500);
175
+ _context7.next = 1;
176
+ return expect(fetchCOR('https://maia.test', {
177
+ path: 'agents'
178
+ })).rejects.toThrow('Failed fetching data');
179
+ case 1:
180
+ case "end":
181
+ return _context7.stop();
182
+ }
183
+ }, _callee7);
184
+ })));
185
+ it('returns an event-stream response without parsing JSON', /*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regeneratorRuntime.mark(function _callee8() {
186
+ var stream, response;
187
+ return _regeneratorRuntime.wrap(function (_context8) {
188
+ while (1) switch (_context8.prev = _context8.next) {
189
+ case 0:
190
+ stream = new Response('data: hi\n\n', {
191
+ status: 200,
192
+ headers: {
193
+ 'content-type': 'text/event-stream'
194
+ }
195
+ });
196
+ mockFetch.mockResolvedValueOnce(stream);
197
+ _context8.next = 1;
198
+ return fetchCOR('https://maia.test', {
199
+ path: 'stream'
200
+ });
201
+ case 1:
202
+ response = _context8.sent;
203
+ expect(response).toBe(stream);
204
+ case 2:
205
+ case "end":
206
+ return _context8.stop();
207
+ }
208
+ }, _callee8);
209
+ })));
210
+ });
211
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJsYXN0RmV0Y2giLCJtb2NrRmV0Y2giLCJtb2NrSnNvbkVycm9yIiwibW9ja0pzb25PayIsImZldGNoQ09SIiwic2V0Q29yQXV0aCIsInZhbHVlIiwiT2JqZWN0IiwiZGVmaW5lUHJvcGVydHkiLCJnbG9iYWwiLCJjb25maWd1cmFibGUiLCJ3cml0YWJsZSIsImRlc2NyaWJlIiwib3JpZ2luYWxUb2tlbiIsInByb2Nlc3MiLCJlbnYiLCJNT0NLX0NPUlBJTE9UX1RPS0VOIiwiYmVmb3JlRWFjaCIsInVuZGVmaW5lZCIsImRvY3VtZW50IiwiY29va2llIiwiYWZ0ZXJFYWNoIiwiaXQiLCJfYXN5bmNUb0dlbmVyYXRvciIsIl9yZWdlbmVyYXRvclJ1bnRpbWUiLCJtYXJrIiwiX2NhbGxlZSIsInJlcXVlc3QiLCJ3cmFwIiwiX2NvbnRleHQiLCJwcmV2IiwibmV4dCIsIm9rIiwicGF0aCIsIm1ldGhvZCIsImJvZHkiLCJuYW1lIiwiZXhwZWN0IiwidXJsIiwidG9CZSIsImhlYWRlcnMiLCJnZXQiLCJwYXJzZWRCb2R5IiwidG9FcXVhbCIsInN0b3AiLCJfY2FsbGVlMiIsIl9jb250ZXh0MiIsIl9jYWxsZWUzIiwiX2NvbnRleHQzIiwiZ2V0Q29va2llQVRTIiwicmVmcmVzaFRva2VuIiwiamVzdCIsImZuIiwiX2NhbGxlZTQiLCJmb3JtRGF0YSIsIl9jb250ZXh0NCIsIkZvcm1EYXRhIiwiYXBwZW5kIiwiRmlsZSIsInRvQmVOdWxsIiwiX2NhbGxlZTUiLCJyZXNwb25zZSIsIl9jb250ZXh0NSIsIm1vY2tSZXNvbHZlZFZhbHVlIiwiZGF0YSIsInNlbnQiLCJ0b0hhdmVCZWVuQ2FsbGVkVGltZXMiLCJfY2FsbGVlNiIsIl9jb250ZXh0NiIsImRldGFpbCIsInJlamVjdHMiLCJ0b1Rocm93IiwiX2NhbGxlZTciLCJfY29udGV4dDciLCJfY2FsbGVlOCIsInN0cmVhbSIsIl9jb250ZXh0OCIsIlJlc3BvbnNlIiwic3RhdHVzIiwibW9ja1Jlc29sdmVkVmFsdWVPbmNlIl0sInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL3NlcnZpY2VzL3V0aWxzL2ZldGNoQ09SLnNwZWMudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgbGFzdEZldGNoLCBtb2NrRmV0Y2gsIG1vY2tKc29uRXJyb3IsIG1vY2tKc29uT2sgfSBmcm9tICcuLi8uLi90ZXN0L21vY2tGZXRjaCdcbmltcG9ydCB7IGZldGNoQ09SIH0gZnJvbSAnLi9mZXRjaENPUidcblxudHlwZSBDb3JBdXRoID0ge1xuICBnZXRDb29raWVBVFM6ICgpID0+IHN0cmluZ1xuICByZWZyZXNoVG9rZW46ICgpID0+IFByb21pc2U8dm9pZD5cbn1cblxuY29uc3Qgc2V0Q29yQXV0aCA9ICh2YWx1ZTogQ29yQXV0aCB8IHVuZGVmaW5lZCkgPT4ge1xuICBPYmplY3QuZGVmaW5lUHJvcGVydHkoZ2xvYmFsLCAnJF9jYScsIHtcbiAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgd3JpdGFibGU6IHRydWUsXG4gICAgdmFsdWUsXG4gIH0pXG59XG5cbmRlc2NyaWJlKCdmZXRjaENPUicsICgpID0+IHtcbiAgY29uc3Qgb3JpZ2luYWxUb2tlbiA9IHByb2Nlc3MuZW52Lk1PQ0tfQ09SUElMT1RfVE9LRU5cblxuICBiZWZvcmVFYWNoKCgpID0+IHtcbiAgICBkZWxldGUgcHJvY2Vzcy5lbnYuTU9DS19DT1JQSUxPVF9UT0tFTlxuICAgIHNldENvckF1dGgodW5kZWZpbmVkKVxuICAgIGRvY3VtZW50LmNvb2tpZSA9ICdBVFM9Y29va2llLXRva2VuOyBwYXRoPS8nXG4gIH0pXG5cbiAgYWZ0ZXJFYWNoKCgpID0+IHtcbiAgICBpZiAob3JpZ2luYWxUb2tlbikge1xuICAgICAgcHJvY2Vzcy5lbnYuTU9DS19DT1JQSUxPVF9UT0tFTiA9IG9yaWdpbmFsVG9rZW5cbiAgICB9IGVsc2Uge1xuICAgICAgZGVsZXRlIHByb2Nlc3MuZW52Lk1PQ0tfQ09SUElMT1RfVE9LRU5cbiAgICB9XG4gICAgc2V0Q29yQXV0aCh1bmRlZmluZWQpXG4gIH0pXG5cbiAgaXQoJ3NlbmRzIEpTT04gd2l0aCB0aGUgY29va2llIHRva2VuJywgYXN5bmMgKCkgPT4ge1xuICAgIG1vY2tKc29uT2soeyBvazogdHJ1ZSB9KVxuXG4gICAgYXdhaXQgZmV0Y2hDT1IoJ2h0dHBzOi8vbWFpYS50ZXN0JywgeyBwYXRoOiAnYWdlbnRzJywgbWV0aG9kOiAnUE9TVCcsIGJvZHk6IHsgbmFtZTogJ01BSUEnIH0gfSlcblxuICAgIGNvbnN0IHJlcXVlc3QgPSBsYXN0RmV0Y2goKVxuICAgIGV4cGVjdChyZXF1ZXN0LnVybCkudG9CZSgnaHR0cHM6Ly9tYWlhLnRlc3QvYWdlbnRzJylcbiAgICBleHBlY3QocmVxdWVzdC5tZXRob2QpLnRvQmUoJ1BPU1QnKVxuICAgIGV4cGVjdChyZXF1ZXN0LmhlYWRlcnMuZ2V0KCdBdXRob3JpemF0aW9uJykpLnRvQmUoJ0JlYXJlciBjb29raWUtdG9rZW4nKVxuICAgIGV4cGVjdChyZXF1ZXN0LmhlYWRlcnMuZ2V0KCdDb250ZW50LVR5cGUnKSkudG9CZSgnYXBwbGljYXRpb24vanNvbicpXG4gICAgZXhwZWN0KHJlcXVlc3QucGFyc2VkQm9keSkudG9FcXVhbCh7IG5hbWU6ICdNQUlBJyB9KVxuICB9KVxuXG4gIGl0KCdwcmVmZXJzIE1PQ0tfQ09SUElMT1RfVE9LRU4gb3ZlciB0aGUgY29va2llJywgYXN5bmMgKCkgPT4ge1xuICAgIHByb2Nlc3MuZW52Lk1PQ0tfQ09SUElMT1RfVE9LRU4gPSAnZW52LXRva2VuJ1xuICAgIG1vY2tKc29uT2soe30pXG5cbiAgICBhd2FpdCBmZXRjaENPUignaHR0cHM6Ly9tYWlhLnRlc3QnLCB7IHBhdGg6ICdzZXNzaW9ucycgfSlcblxuICAgIGV4cGVjdChsYXN0RmV0Y2goKS5oZWFkZXJzLmdldCgnQXV0aG9yaXphdGlvbicpKS50b0JlKCdCZWFyZXIgZW52LXRva2VuJylcbiAgfSlcblxuICBpdCgncHJlZmVycyAkX2NhLmdldENvb2tpZUFUUyB3aGVuIHRoZXJlIGlzIG5vIG1vY2sgdG9rZW4nLCBhc3luYyAoKSA9PiB7XG4gICAgc2V0Q29yQXV0aCh7XG4gICAgICBnZXRDb29raWVBVFM6ICgpID0+ICdjYS10b2tlbicsXG4gICAgICByZWZyZXNoVG9rZW46IGplc3QuZm4oKSxcbiAgICB9KVxuICAgIG1vY2tKc29uT2soe30pXG5cbiAgICBhd2FpdCBmZXRjaENPUignaHR0cHM6Ly9tYWlhLnRlc3QnLCB7IHBhdGg6ICdzZXNzaW9ucycgfSlcblxuICAgIGV4cGVjdChsYXN0RmV0Y2goKS5oZWFkZXJzLmdldCgnQXV0aG9yaXphdGlvbicpKS50b0JlKCdCZWFyZXIgY2EtdG9rZW4nKVxuICB9KVxuXG4gIGl0KCdkb2VzIG5vdCBmb3JjZSBDb250ZW50LVR5cGUgb24gRm9ybURhdGEnLCBhc3luYyAoKSA9PiB7XG4gICAgbW9ja0pzb25Payh7fSlcbiAgICBjb25zdCBmb3JtRGF0YSA9IG5ldyBGb3JtRGF0YSgpXG4gICAgZm9ybURhdGEuYXBwZW5kKCdmaWxlcycsIG5ldyBGaWxlKFsneCddLCAnZG9jLnR4dCcpKVxuXG4gICAgYXdhaXQgZmV0Y2hDT1IoJ2h0dHBzOi8vbWFpYS50ZXN0JywgeyBwYXRoOiAndXBsb2FkJywgbWV0aG9kOiAnUE9TVCcsIGJvZHk6IGZvcm1EYXRhIH0pXG5cbiAgICBleHBlY3QobGFzdEZldGNoKCkuaGVhZGVycy5nZXQoJ0NvbnRlbnQtVHlwZScpKS50b0JlTnVsbCgpXG4gICAgZXhwZWN0KGxhc3RGZXRjaCgpLmJvZHkpLnRvQmUoZm9ybURhdGEpXG4gIH0pXG5cbiAgaXQoJ3JldHJpZXMgb25jZSBhZnRlciA0MDEgd2hlbiAkX2NhLnJlZnJlc2hUb2tlbiBleGlzdHMnLCBhc3luYyAoKSA9PiB7XG4gICAgY29uc3QgcmVmcmVzaFRva2VuID0gamVzdC5mbigpLm1vY2tSZXNvbHZlZFZhbHVlKHVuZGVmaW5lZClcbiAgICBzZXRDb3JBdXRoKHtcbiAgICAgIGdldENvb2tpZUFUUzogKCkgPT4gJ2NhLXRva2VuJyxcbiAgICAgIHJlZnJlc2hUb2tlbixcbiAgICB9KVxuICAgIG1vY2tKc29uRXJyb3IoNDAxKVxuICAgIG1vY2tKc29uT2soeyBkYXRhOiBbXSB9KVxuXG4gICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBmZXRjaENPUignaHR0cHM6Ly9tYWlhLnRlc3QnLCB7IHBhdGg6ICdhZ2VudHMnIH0pXG5cbiAgICBleHBlY3QocmVmcmVzaFRva2VuKS50b0hhdmVCZWVuQ2FsbGVkVGltZXMoMSlcbiAgICBleHBlY3QobW9ja0ZldGNoKS50b0hhdmVCZWVuQ2FsbGVkVGltZXMoMilcbiAgICBleHBlY3QocmVzcG9uc2Uub2spLnRvQmUodHJ1ZSlcbiAgfSlcblxuICBpdCgndGhyb3dzIHRoZSBhY2Nlc3MgZGVuaWVkIGRldGFpbCBvbiA0MDMnLCBhc3luYyAoKSA9PiB7XG4gICAgbW9ja0pzb25FcnJvcig0MDMsIHsgZGV0YWlsOiAnQWNjZXNzIGRlbmllZCBmb3IgdGhpcyBhZ2VudCcgfSlcblxuICAgIGF3YWl0IGV4cGVjdChmZXRjaENPUignaHR0cHM6Ly9tYWlhLnRlc3QnLCB7IHBhdGg6ICdhZ2VudHMnIH0pKS5yZWplY3RzLnRvVGhyb3coJ0FjY2VzcyBkZW5pZWQgZm9yIHRoaXMgYWdlbnQnKVxuICB9KVxuXG4gIGl0KCd0aHJvd3MgYSBnZW5lcmljIGVycm9yIG9uIG90aGVyIGZhaWxlZCByZXNwb25zZXMnLCBhc3luYyAoKSA9PiB7XG4gICAgbW9ja0pzb25FcnJvcig1MDApXG5cbiAgICBhd2FpdCBleHBlY3QoZmV0Y2hDT1IoJ2h0dHBzOi8vbWFpYS50ZXN0JywgeyBwYXRoOiAnYWdlbnRzJyB9KSkucmVqZWN0cy50b1Rocm93KCdGYWlsZWQgZmV0Y2hpbmcgZGF0YScpXG4gIH0pXG5cbiAgaXQoJ3JldHVybnMgYW4gZXZlbnQtc3RyZWFtIHJlc3BvbnNlIHdpdGhvdXQgcGFyc2luZyBKU09OJywgYXN5bmMgKCkgPT4ge1xuICAgIGNvbnN0IHN0cmVhbSA9IG5ldyBSZXNwb25zZSgnZGF0YTogaGlcXG5cXG4nLCB7XG4gICAgICBzdGF0dXM6IDIwMCxcbiAgICAgIGhlYWRlcnM6IHsgJ2NvbnRlbnQtdHlwZSc6ICd0ZXh0L2V2ZW50LXN0cmVhbScgfSxcbiAgICB9KVxuICAgIG1vY2tGZXRjaC5tb2NrUmVzb2x2ZWRWYWx1ZU9uY2Uoc3RyZWFtKVxuXG4gICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBmZXRjaENPUignaHR0cHM6Ly9tYWlhLnRlc3QnLCB7IHBhdGg6ICdzdHJlYW0nIH0pXG5cbiAgICBleHBlY3QocmVzcG9uc2UpLnRvQmUoc3RyZWFtKVxuICB9KVxufSlcbiJdLCJtYXBwaW5ncyI6Ijs7QUFBQSxTQUFTQSxTQUFTLEVBQUVDLFNBQVMsRUFBRUMsYUFBYSxFQUFFQyxVQUFVLFFBQVEsc0JBQXNCO0FBQ3RGLFNBQVNDLFFBQVEsUUFBUSxZQUFZO0FBT3JDLElBQU1DLFVBQVUsR0FBRyxTQUFiQSxVQUFVQSxDQUFJQyxLQUEwQixFQUFLO0VBQ2pEQyxNQUFNLENBQUNDLGNBQWMsQ0FBQ0MsTUFBTSxFQUFFLE1BQU0sRUFBRTtJQUNwQ0MsWUFBWSxFQUFFLElBQUk7SUFDbEJDLFFBQVEsRUFBRSxJQUFJO0lBQ2RMLEtBQUssRUFBTEE7RUFDRixDQUFDLENBQUM7QUFDSixDQUFDO0FBRURNLFFBQVEsQ0FBQyxVQUFVLEVBQUUsWUFBTTtFQUN6QixJQUFNQyxhQUFhLEdBQUdDLE9BQU8sQ0FBQ0MsR0FBRyxDQUFDQyxtQkFBbUI7RUFFckRDLFVBQVUsQ0FBQyxZQUFNO0lBQ2YsT0FBT0gsT0FBTyxDQUFDQyxHQUFHLENBQUNDLG1CQUFtQjtJQUN0Q1gsVUFBVSxDQUFDYSxTQUFTLENBQUM7SUFDckJDLFFBQVEsQ0FBQ0MsTUFBTSxHQUFHLDBCQUEwQjtFQUM5QyxDQUFDLENBQUM7RUFFRkMsU0FBUyxDQUFDLFlBQU07SUFDZCxJQUFJUixhQUFhLEVBQUU7TUFDakJDLE9BQU8sQ0FBQ0MsR0FBRyxDQUFDQyxtQkFBbUIsR0FBR0gsYUFBYTtJQUNqRCxDQUFDLE1BQU07TUFDTCxPQUFPQyxPQUFPLENBQUNDLEdBQUcsQ0FBQ0Ms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
@@ -0,0 +1,20 @@
1
+ import { getCookie } from './getCookie';
2
+ describe('getCookie', function () {
3
+ afterEach(function () {
4
+ document.cookie.split(';').forEach(function (cookie) {
5
+ var _cookie$split$;
6
+ var name = (_cookie$split$ = cookie.split('=')[0]) === null || _cookie$split$ === void 0 ? void 0 : _cookie$split$.trim();
7
+ if (name) {
8
+ document.cookie = "".concat(name, "=; expires=Thu, 01 Jan 1970 00:00:00 GMT; path=/");
9
+ }
10
+ });
11
+ });
12
+ it('returns the value of an existing cookie', function () {
13
+ document.cookie = 'ATS=token-123; path=/';
14
+ expect(getCookie('ATS')).toBe('token-123');
15
+ });
16
+ it('returns null when the cookie is missing', function () {
17
+ expect(getCookie('ATS')).toBeNull();
18
+ });
19
+ });
20
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJnZXRDb29raWUiLCJkZXNjcmliZSIsImFmdGVyRWFjaCIsImRvY3VtZW50IiwiY29va2llIiwic3BsaXQiLCJmb3JFYWNoIiwiX2Nvb2tpZSRzcGxpdCQiLCJuYW1lIiwidHJpbSIsImNvbmNhdCIsIml0IiwiZXhwZWN0IiwidG9CZSIsInRvQmVOdWxsIl0sInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL3NlcnZpY2VzL3V0aWxzL2dldENvb2tpZS5zcGVjLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGdldENvb2tpZSB9IGZyb20gJy4vZ2V0Q29va2llJ1xuXG5kZXNjcmliZSgnZ2V0Q29va2llJywgKCkgPT4ge1xuICBhZnRlckVhY2goKCkgPT4ge1xuICAgIGRvY3VtZW50LmNvb2tpZS5zcGxpdCgnOycpLmZvckVhY2goY29va2llID0+IHtcbiAgICAgIGNvbnN0IG5hbWUgPSBjb29raWUuc3BsaXQoJz0nKVswXT8udHJpbSgpXG4gICAgICBpZiAobmFtZSkge1xuICAgICAgICBkb2N1bWVudC5jb29raWUgPSBgJHtuYW1lfT07IGV4cGlyZXM9VGh1LCAwMSBKYW4gMTk3MCAwMDowMDowMCBHTVQ7IHBhdGg9L2BcbiAgICAgIH1cbiAgICB9KVxuICB9KVxuXG4gIGl0KCdyZXR1cm5zIHRoZSB2YWx1ZSBvZiBhbiBleGlzdGluZyBjb29raWUnLCAoKSA9PiB7XG4gICAgZG9jdW1lbnQuY29va2llID0gJ0FUUz10b2tlbi0xMjM7IHBhdGg9LydcblxuICAgIGV4cGVjdChnZXRDb29raWUoJ0FUUycpKS50b0JlKCd0b2tlbi0xMjMnKVxuICB9KVxuXG4gIGl0KCdyZXR1cm5zIG51bGwgd2hlbiB0aGUgY29va2llIGlzIG1pc3NpbmcnLCAoKSA9PiB7XG4gICAgZXhwZWN0KGdldENvb2tpZSgnQVRTJykpLnRvQmVOdWxsKClcbiAgfSlcbn0pXG4iXSwibWFwcGluZ3MiOiJBQUFBLFNBQVNBLFNBQVMsUUFBUSxhQUFhO0FBRXZDQyxRQUFRLENBQUMsV0FBVyxFQUFFLFlBQU07RUFDMUJDLFNBQVMsQ0FBQyxZQUFNO0lBQ2RDLFFBQVEsQ0FBQ0MsTUFBTSxDQUFDQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUNDLE9BQU8sQ0FBQyxVQUFBRixNQUFNLEVBQUk7TUFBQSxJQUFBRyxjQUFBO01BQzNDLElBQU1DLElBQUksSUFBQUQsY0FBQSxHQUFHSCxNQUFNLENBQUNDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsY0FBQUUsY0FBQSx1QkFBcEJBLGNBQUEsQ0FBc0JFLElBQUksQ0FBQyxDQUFDO01BQ3pDLElBQUlELElBQUksRUFBRTtRQUNSTCxRQUFRLENBQUNDLE1BQU0sTUFBQU0sTUFBQSxDQUFNRixJQUFJLHFEQUFrRDtNQUM3RTtJQUNGLENBQUMsQ0FBQztFQUNKLENBQUMsQ0FBQztFQUVGRyxFQUFFLENBQUMseUNBQXlDLEVBQUUsWUFBTTtJQUNsRFIsUUFBUSxDQUFDQyxNQUFNLEdBQUcsdUJBQXVCO0lBRXpDUSxNQUFNLENBQUNaLFNBQVMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDYSxJQUFJLENBQUMsV0FBVyxDQUFDO0VBQzVDLENBQUMsQ0FBQztFQUVGRixFQUFFLENBQUMseUNBQXlDLEVBQUUsWUFBTTtJQUNsREMsTUFBTSxDQUFDWixTQUFTLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQ2MsUUFBUSxDQUFDLENBQUM7RUFDckMsQ0FBQyxDQUFDO0FBQ0osQ0FBQyxDQUFDIiwiaWdub3JlTGlzdCI6W119
@@ -1,4 +1,3 @@
1
1
  export { getCookie } from './getCookie';
2
2
  export { fetchCOR } from './fetchCOR';
3
- export { MaiaApiError, isMaiaApiError } from './MaiaApiError';
4
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJnZXRDb29raWUiLCJmZXRjaENPUiIsIk1haWFBcGlFcnJvciIsImlzTWFpYUFwaUVycm9yIl0sInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL3NlcnZpY2VzL3V0aWxzL2luZGV4LnRzIl0sInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCB7IGdldENvb2tpZSB9IGZyb20gJy4vZ2V0Q29va2llJ1xuZXhwb3J0IHsgZmV0Y2hDT1IsIHR5cGUgRmV0Y2hDT1JQYXJhbXMgfSBmcm9tICcuL2ZldGNoQ09SJ1xuZXhwb3J0IHsgTWFpYUFwaUVycm9yLCBpc01haWFBcGlFcnJvciB9IGZyb20gJy4vTWFpYUFwaUVycm9yJ1xuIl0sIm1hcHBpbmdzIjoiQUFBQSxTQUFTQSxTQUFTLFFBQVEsYUFBYTtBQUN2QyxTQUFTQyxRQUFRLFFBQTZCLFlBQVk7QUFDMUQsU0FBU0MsWUFBWSxFQUFFQyxjQUFjLFFBQVEsZ0JBQWdCIiwiaWdub3JlTGlzdCI6W119
3
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJnZXRDb29raWUiLCJmZXRjaENPUiJdLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9zZXJ2aWNlcy91dGlscy9pbmRleC50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgeyBnZXRDb29raWUgfSBmcm9tICcuL2dldENvb2tpZSdcbmV4cG9ydCB7IGZldGNoQ09SLCB0eXBlIEZldGNoQ09SUGFyYW1zIH0gZnJvbSAnLi9mZXRjaENPUidcbiJdLCJtYXBwaW5ncyI6IkFBQUEsU0FBU0EsU0FBUyxRQUFRLGFBQWE7QUFDdkMsU0FBU0MsUUFBUSxRQUE2QixZQUFZIiwiaWdub3JlTGlzdCI6W119