UNPKG

botframework-webchat-component

Version:
142 lines (122 loc) 18.8 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.default = void 0; var _botframeworkWebchatApi = require("botframework-webchat-api"); var _classnames = _interopRequireDefault(require("classnames")); var _propTypes = _interopRequireDefault(require("prop-types")); var _react = _interopRequireDefault(require("react")); var _textFormatToContentType = _interopRequireDefault(require("./Utils/textFormatToContentType")); var _useStripMarkdown = _interopRequireDefault(require("./hooks/internal/useStripMarkdown")); var _useStyleToEmotionObject = _interopRequireDefault(require("./hooks/internal/useStyleToEmotionObject")); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); } function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); } function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; } function _iterableToArrayLimit(arr, i) { if (typeof Symbol === "undefined" || !(Symbol.iterator in Object(arr))) return; var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"] != null) _i["return"](); } finally { if (_d) throw _e; } } return _arr; } function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; } var useAvatarForBot = _botframeworkWebchatApi.hooks.useAvatarForBot, useCreateAttachmentForScreenReaderRenderer = _botframeworkWebchatApi.hooks.useCreateAttachmentForScreenReaderRenderer, useDateFormatter = _botframeworkWebchatApi.hooks.useDateFormatter, useLocalizer = _botframeworkWebchatApi.hooks.useLocalizer; var ROOT_STYLE = { '&.webchat__screen-reader-activity': { color: 'transparent', height: 1, opacity: 0, overflow: 'hidden', position: 'absolute', top: 0, whiteSpace: 'nowrap', width: 1 } }; var ACTIVITY_NUM_ATTACHMENTS_ALT_IDS = { few: 'ACTIVITY_NUM_ATTACHMENTS_FEW_ALT', many: 'ACTIVITY_NUM_ATTACHMENTS_MANY_ALT', one: 'ACTIVITY_NUM_ATTACHMENTS_ONE_ALT', other: 'ACTIVITY_NUM_ATTACHMENTS_OTHER_ALT', two: 'ACTIVITY_NUM_ATTACHMENTS_TWO_ALT' }; // When "renderAttachments" is false, we will not render the content of attachments. // That means, it will only render "2 attachments", instead of "image attachment". // This is used in the visual transcript, where we render "Press ENTER to interact." var ScreenReaderActivity = function ScreenReaderActivity(_ref) { var activity = _ref.activity, children = _ref.children, id = _ref.id, renderAttachments = _ref.renderAttachments; var _useAvatarForBot = useAvatarForBot(), _useAvatarForBot2 = _slicedToArray(_useAvatarForBot, 1), botInitials = _useAvatarForBot2[0].initials; var createAttachmentForScreenReaderRenderer = useCreateAttachmentForScreenReaderRenderer(); var formatDate = useDateFormatter(); var localize = useLocalizer(); var localizeWithPlural = useLocalizer({ plural: true }); var rootClassName = (0, _useStyleToEmotionObject.default)()(ROOT_STYLE) + ''; var _activity$attachments = activity.attachments, attachments = _activity$attachments === void 0 ? [] : _activity$attachments, _activity$channelData = activity.channelData; _activity$channelData = _activity$channelData === void 0 ? {} : _activity$channelData; var _activity$channelData2 = _activity$channelData.messageBack; _activity$channelData2 = _activity$channelData2 === void 0 ? {} : _activity$channelData2; var messageBackDisplayText = _activity$channelData2.displayText, _activity$from = activity.from; _activity$from = _activity$from === void 0 ? {} : _activity$from; var role = _activity$from.role, text = activity.text, textFormat = activity.textFormat, timestamp = activity.timestamp; var fromUser = role === 'user'; var contentTypeMarkdown = (0, _textFormatToContentType.default)(textFormat) === 'text/markdown'; var displayText = messageBackDisplayText || text; var attachmentForScreenReaderRenderers = renderAttachments ? attachments.map(function (attachment) { return createAttachmentForScreenReaderRenderer({ activity: activity, attachment: attachment }); }).filter(function (render) { return render; }) : []; var greetingAlt = (fromUser ? localize('ACTIVITY_YOU_SAID_ALT') : localize('ACTIVITY_BOT_SAID_ALT', botInitials || '')).replace(/[\t-\r \xA0\u1680\u2000-\u200A\u2028\u2029\u202F\u205F\u3000\uFEFF]{2,}/g, ' '); var numGenericAttachments = attachments.length - attachmentForScreenReaderRenderers.length; var numAttachmentsAlt = !!numGenericAttachments && localizeWithPlural(ACTIVITY_NUM_ATTACHMENTS_ALT_IDS, numGenericAttachments); var textAlt = (0, _useStripMarkdown.default)(contentTypeMarkdown && displayText) || displayText; var timestampAlt = localize('ACTIVITY_STATUS_SEND_STATUS_ALT_SENT_AT', formatDate(timestamp)); return /*#__PURE__*/_react.default.createElement("article", { "aria-atomic": true, "aria-roledescription": "message", className: (0, _classnames.default)('webchat__screen-reader-activity', rootClassName) // "id" attribute is used by `aria-labelledby`. // eslint-disable-next-line react/forbid-dom-props , id: id, role: "region" }, /*#__PURE__*/_react.default.createElement("p", null, /*#__PURE__*/_react.default.createElement("span", null, greetingAlt), /*#__PURE__*/_react.default.createElement("span", null, textAlt)), !!attachmentForScreenReaderRenderers.length && /*#__PURE__*/_react.default.createElement("ul", null, attachmentForScreenReaderRenderers.map(function (render, index) { return ( /*#__PURE__*/ // eslint-disable-next-line react/no-array-index-key _react.default.createElement("li", { key: index }, render()) ); })), numAttachmentsAlt && /*#__PURE__*/_react.default.createElement("p", null, numAttachmentsAlt), /*#__PURE__*/_react.default.createElement("p", { className: "webchat__screen-reader-activity__timestamp" }, timestampAlt), children); }; ScreenReaderActivity.defaultProps = { children: undefined, id: undefined, renderAttachments: true }; ScreenReaderActivity.propTypes = { activity: _propTypes.default.any.isRequired, children: _propTypes.default.any, id: _propTypes.default.string, renderAttachments: _propTypes.default.bool }; var _default = ScreenReaderActivity; exports.default = _default; //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9TY3JlZW5SZWFkZXJBY3Rpdml0eS5qcyJdLCJuYW1lcyI6WyJ1c2VBdmF0YXJGb3JCb3QiLCJob29rcyIsInVzZUNyZWF0ZUF0dGFjaG1lbnRGb3JTY3JlZW5SZWFkZXJSZW5kZXJlciIsInVzZURhdGVGb3JtYXR0ZXIiLCJ1c2VMb2NhbGl6ZXIiLCJST09UX1NUWUxFIiwiY29sb3IiLCJoZWlnaHQiLCJvcGFjaXR5Iiwib3ZlcmZsb3ciLCJwb3NpdGlvbiIsInRvcCIsIndoaXRlU3BhY2UiLCJ3aWR0aCIsIkFDVElWSVRZX05VTV9BVFRBQ0hNRU5UU19BTFRfSURTIiwiZmV3IiwibWFueSIsIm9uZSIsIm90aGVyIiwidHdvIiwiU2NyZWVuUmVhZGVyQWN0aXZpdHkiLCJhY3Rpdml0eSIsImNoaWxkcmVuIiwiaWQiLCJyZW5kZXJBdHRhY2htZW50cyIsImJvdEluaXRpYWxzIiwiaW5pdGlhbHMiLCJjcmVhdGVBdHRhY2htZW50Rm9yU2NyZWVuUmVhZGVyUmVuZGVyZXIiLCJmb3JtYXREYXRlIiwibG9jYWxpemUiLCJsb2NhbGl6ZVdpdGhQbHVyYWwiLCJwbHVyYWwiLCJyb290Q2xhc3NOYW1lIiwiYXR0YWNobWVudHMiLCJjaGFubmVsRGF0YSIsIm1lc3NhZ2VCYWNrIiwibWVzc2FnZUJhY2tEaXNwbGF5VGV4dCIsImRpc3BsYXlUZXh0IiwiZnJvbSIsInJvbGUiLCJ0ZXh0IiwidGV4dEZvcm1hdCIsInRpbWVzdGFtcCIsImZyb21Vc2VyIiwiY29udGVudFR5cGVNYXJrZG93biIsImF0dGFjaG1lbnRGb3JTY3JlZW5SZWFkZXJSZW5kZXJlcnMiLCJtYXAiLCJhdHRhY2htZW50IiwiZmlsdGVyIiwicmVuZGVyIiwiZ3JlZXRpbmdBbHQiLCJyZXBsYWNlIiwibnVtR2VuZXJpY0F0dGFjaG1lbnRzIiwibGVuZ3RoIiwibnVtQXR0YWNobWVudHNBbHQiLCJ0ZXh0QWx0IiwidGltZXN0YW1wQWx0IiwiaW5kZXgiLCJkZWZhdWx0UHJvcHMiLCJ1bmRl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QUNDLEdBQW5DLENBQXVDLFVBQUNHLE1BQUQsRUFBU1EsS0FBVDtBQUFBO0FBQUE7QUFDdEM7QUFDQTtBQUFJLFFBQUEsR0FBRyxFQUFFQTtBQUFULFNBQWlCUixNQUFNLEVBQXZCO0FBRnNDO0FBQUEsR0FBdkMsQ0FESCxDQWRKLEVBcUJHSyxpQkFBaUIsaUJBQUksd0NBQUlBLGlCQUFKLENBckJ4QixlQXNCRTtBQUFHLElBQUEsU0FBUyxFQUFDO0FBQWIsS0FBMkRFLFlBQTNELENBdEJGLEVBdUJHbEMsUUF2QkgsQ0FERjtBQTJCRCxDQWpFRDs7QUFtRUFGLG9CQUFvQixDQUFDc0MsWUFBckIsR0FBb0M7QUFDbENwQyxFQUFBQSxRQUFRLEVBQUVxQyxTQUR3QjtBQUVsQ3BDLEVBQUFBLEVBQUUsRUFBRW9DLFNBRjhCO0FBR2xDbkMsRUFBQUEsaUJBQWlCLEVBQUU7QUFIZSxDQUFwQztBQU1BSixvQkFBb0IsQ0FBQ3dDLFNBQXJCLEdBQWlDO0FBQy9CdkMsRUFBQUEsUUFBUSxFQUFFd0MsbUJBQVVDLEdBQVYsQ0FBY0MsVUFETztBQUUvQnpDLEVBQUFBLFFBQVEsRUFBRXVDLG1CQUFVQyxHQUZXO0FBRy9CdkMsRUFBQUEsRUFBRSxFQUFFc0MsbUJBQVVHLE1BSGlCO0FBSS9CeEMsRUFBQUEsaUJBQWlCLEVBQUVxQyxtQkFBVUk7QUFKRSxDQUFqQztlQU9lN0Msb0IiLCJzb3VyY2VSb290IjoiY29tcG9uZW50Oi8vLyIsInNvdXJjZXNDb250ZW50IjpbIi8qIGVzbGludCBuby1tYWdpYy1udW1iZXJzOiBbXCJlcnJvclwiLCB7IFwiaWdub3JlXCI6IFsyXSB9XSAqL1xuXG5pbXBvcnQgeyBob29rcyB9IGZyb20gJ2JvdGZyYW1ld29yay13ZWJjaGF0LWFwaSc7XG5pbXBvcnQgY2xhc3NOYW1lcyBmcm9tICdjbGFzc25hbWVzJztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG5pbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuXG5pbXBvcnQgdGV4dEZvcm1hdFRvQ29udGVudFR5cGUgZnJvbSAnLi9VdGlscy90ZXh0Rm9ybWF0VG9Db250ZW50VHlwZSc7XG5pbXBvcnQgdXNlU3RyaXBNYXJrZG93biBmcm9tICcuL2hvb2tzL2ludGVybmFsL3VzZVN0cmlwTWFya2Rvd24nO1xuaW1wb3J0IHVzZVN0eWxlVG9FbW90aW9uT2JqZWN0IGZyb20gJy4vaG9va3MvaW50ZXJuYWwvdXNlU3R5bGVUb0Vtb3Rpb25PYmplY3QnO1xuXG5jb25zdCB7IHVzZUF2YXRhckZvckJvdCwgdXNlQ3JlYXRlQXR0YWNobWVudEZvclNjcmVlblJlYWRlclJlbmRlcmVyLCB1c2VEYXRlRm9ybWF0dGVyLCB1c2VMb2NhbGl6ZXIgfSA9IGhvb2tzO1xuXG5jb25zdCBST09UX1NUWUxFID0ge1xuICAnJi53ZWJjaGF0X19zY3JlZW4tcmVhZGVyLWFjdGl2aXR5Jzoge1xuICAgIGNvbG9yOiAndHJhbnNwYXJlbnQnLFxuICAgIGhlaWdodDogMSxcbiAgICBvcGFjaXR5OiAwLFxuICAgIG92ZXJmbG93OiAnaGlkZGVuJyxcbiAgICBwb3NpdGlvbjogJ2Fic29sdXRlJyxcbiAgICB0b3A6IDAsXG4gICAgd2hpdGVTcGFjZTogJ25vd3JhcCcsXG4gICAgd2lkdGg6IDFcbiAgfVxufTtcblxuY29uc3QgQUNUSVZJVFlfTlVNX0FUVEFDSE1FTlRTX0FMVF9JRFMgPSB7XG4gIGZldzogJ0FDVElWSVRZX05VTV9BVFRBQ0hNRU5UU19GRVdfQUxUJyxcbiAgbWFueTogJ0FDVElWSVRZX05VTV9BVFRBQ0hNRU5UU19NQU5ZX0FMVCcsXG4gIG9uZTogJ0FDVElWSVRZX05VTV9BVFRBQ0hNRU5UU19PTkVfQUxUJyxcbiAgb3RoZXI6ICdBQ1RJVklUWV9OVU1fQVRUQUNITUVOVFNfT1RIRVJfQUxUJyxcbiAgdHdvOiAnQUNUSVZJVFlfTlVNX0FUVEFDSE1FTlRTX1RXT19BTFQnXG59O1xuXG4vLyBXaGVuIFwicmVuZGVyQXR0YWNobWVudHNcIiBpcyBmYWxzZSwgd2Ugd2lsbCBub3QgcmVuZGVyIHRoZSBjb250ZW50IG9mIGF0dGFjaG1lbnRzLlxuLy8gVGhhdCBtZWFucywgaXQgd2lsbCBvbmx5IHJlbmRlciBcIjIgYXR0YWNobWVudHNcIiwgaW5zdGVhZCBvZiBcImltYWdlIGF0dGFjaG1lbnRcIi5cbi8vIFRoaXMgaXMgdXNlZCBpbiB0aGUgdmlzdWFsIHRyYW5zY3JpcHQsIHdoZXJlIHdlIHJlbmRlciBcIlByZXNzIEVOVEVSIHRvIGludGVyYWN0LlwiXG5jb25zdCBTY3JlZW5SZWFkZXJBY3Rpdml0eSA9ICh7IGFjdGl2aXR5LCBjaGlsZHJlbiwgaWQsIHJlbmRlckF0dGFjaG1lbnRzIH0pID0+IHtcbiAgY29uc3QgW3sgaW5pdGlhbHM6IGJvdEluaXRpYWxzIH1dID0gdXNlQXZhdGFyRm9yQm90KCk7XG4gIGNvbnN0IGNyZWF0ZUF0dGFjaG1lbnRGb3JTY3JlZW5SZWFkZXJSZW5kZXJlciA9IHVzZUNyZWF0ZUF0dGFjaG1lbnRGb3JTY3JlZW5SZWFkZXJSZW5kZXJlcigpO1xuICBjb25zdCBmb3JtYXREYXRlID0gdXNlRGF0ZUZvcm1hdHRlcigpO1xuICBjb25zdCBsb2NhbGl6ZSA9IHVzZUxvY2FsaXplcigpO1xuICBjb25zdCBsb2NhbGl6ZVdpdGhQbHVyYWwgPSB1c2VMb2NhbGl6ZXIoeyBwbHVyYWw6IHRydWUgfSk7XG4gIGNvbnN0IHJvb3RDbGFzc05hbWUgPSB1c2VTdHlsZVRvRW1vdGlvbk9iamVjdCgpKFJPT1RfU1RZTEUpICsgJyc7XG5cbiAgY29uc3Qge1xuICAgIGF0dGFjaG1lbnRzID0gW10sXG4gICAgY2hhbm5lbERhdGE6IHsgbWVzc2FnZUJhY2s6IHsgZGlzcGxheVRleHQ6IG1lc3NhZ2VCYWNrRGlzcGxheVRleHQgfSA9IHt9IH0gPSB7fSxcbiAgICBmcm9tOiB7IHJvbGUgfSA9IHt9LFxuICAgIHRleHQsXG4gICAgdGV4dEZvcm1hdCxcbiAgICB0aW1lc3RhbXBcbiAgfSA9IGFjdGl2aXR5O1xuXG4gIGNvbnN0IGZyb21Vc2VyID0gcm9sZSA9PT0gJ3VzZXInO1xuICBjb25zdCBjb250ZW50VHlwZU1hcmtkb3duID0gdGV4dEZvcm1hdFRvQ29udGVudFR5cGUodGV4dEZvcm1hdCkgPT09ICd0ZXh0L21hcmtkb3duJztcbiAgY29uc3QgZGlzcGxheVRleHQgPSBtZXNzYWdlQmFja0Rpc3BsYXlUZXh0IHx8IHRleHQ7XG5cbiAgY29uc3QgYXR0YWNobWVudEZvclNjcmVlblJlYWRlclJlbmRlcmVycyA9IHJlbmRlckF0dGFjaG1lbnRzXG4gICAgPyBhdHRhY2htZW50c1xuICAgICAgICAubWFwKGF0dGFjaG1lbnQgPT4gY3JlYXRlQXR0YWNobWVudEZvclNjcmVlblJlYWRlclJlbmRlcmVyKHsgYWN0aXZpdHksIGF0dGFjaG1lbnQgfSkpXG4gICAgICAgIC5maWx0ZXIocmVuZGVyID0+IHJlbmRlcilcbiAgICA6IFtdO1xuXG4gIGNvbnN0IGdyZWV0aW5nQWx0ID0gKGZyb21Vc2VyXG4gICAgPyBsb2NhbGl6ZSgnQUNUSVZJVFlfWU9VX1NBSURfQUxUJylcbiAgICA6IGxvY2FsaXplKCdBQ1RJVklUWV9CT1RfU0FJRF9BTFQnLCBib3RJbml0aWFscyB8fCAnJylcbiAgKS5yZXBsYWNlKC9cXHN7Mix9L2d1LCAnICcpO1xuICBjb25zdCBudW1HZW5lcmljQXR0YWNobWVudHMgPSBhdHRhY2htZW50cy5sZW5ndGggLSBhdHRhY2htZW50Rm9yU2NyZWVuUmVhZGVyUmVuZGVyZXJzLmxlbmd0aDtcblxuICBjb25zdCBudW1BdHRhY2htZW50c0FsdCA9XG4gICAgISFudW1HZW5lcmljQXR0YWNobWVudHMgJiYgbG9jYWxpemVXaXRoUGx1cmFsKEFDVElWSVRZX05VTV9BVFRBQ0hNRU5UU19BTFRfSURTLCBudW1HZW5lcmljQXR0YWNobWVudHMpO1xuICBjb25zdCB0ZXh0QWx0ID0gdXNlU3RyaXBNYXJrZG93bihjb250ZW50VHlwZU1hcmtkb3duICYmIGRpc3BsYXlUZXh0KSB8fCBkaXNwbGF5VGV4dDtcbiAgY29uc3QgdGltZXN0YW1wQWx0ID0gbG9jYWxpemUoJ0FDVElWSVRZX1NUQVRVU19TRU5EX1NUQVRVU19BTFRfU0VOVF9BVCcsIGZvcm1hdERhdGUodGltZXN0YW1wKSk7XG5cbiAgcmV0dXJuIChcbiAgICA8YXJ0aWNsZVxuICAgICAgYXJpYS1hdG9taWM9e3RydWV9XG4gICAgICBhcmlhLXJvbGVkZXNjcmlwdGlvbj1cIm1lc3NhZ2VcIlxuICAgICAgY2xhc3NOYW1lPXtjbGFzc05hbWVzKCd3ZWJjaGF0X19zY3JlZW4tcmVhZGVyLWFjdGl2aXR5Jywgcm9vdENsYXNzTmFtZSl9XG4gICAgICAvLyBcImlkXCIgYXR0cmlidXRlIGlzIHVzZWQgYnkgYGFyaWEtbGFiZWxsZWRieWAuXG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcmVhY3QvZm9yYmlkLWRvbS1wcm9wc1xuICAgICAgaWQ9e2lkfVxuICAgICAgcm9sZT1cInJlZ2lvblwiXG4gICAgPlxuICAgICAgPHA+XG4gICAgICAgIDxzcGFuPntncmVldGluZ0FsdH08L3NwYW4+XG4gICAgICAgIDxzcGFuPnt0ZXh0QWx0fTwvc3Bhbj5cbiAgICAgIDwvcD5cbiAgICAgIHshIWF0dGFjaG1lbnRGb3JTY3JlZW5SZWFkZXJSZW5kZXJlcnMubGVuZ3RoICYmIChcbiAgICAgICAgPHVsPlxuICAgICAgICAgIHthdHRhY2htZW50Rm9yU2NyZWVuUmVhZGVyUmVuZGVyZXJzLm1hcCgocmVuZGVyLCBpbmRleCkgPT4gKFxuICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHJlYWN0L25vLWFycmF5LWluZGV4LWtleVxuICAgICAgICAgICAgPGxpIGtleT17aW5kZXh9PntyZW5kZXIoKX08L2xpPlxuICAgICAgICAgICkpfVxuICAgICAgICA8L3VsPlxuICAgICAgKX1cbiAgICAgIHtudW1BdHRhY2htZW50c0FsdCAmJiA8cD57bnVtQXR0YWNobWVudHNBbHR9PC9wPn1cbiAgICAgIDxwIGNsYXNzTmFtZT1cIndlYmNoYXRfX3NjcmVlbi1yZWFkZXItYWN0aXZpdHlfX3RpbWVzdGFtcFwiPnt0aW1lc3RhbXBBbHR9PC9wPlxuICAgICAge2NoaWxkcmVufVxuICAgIDwvYXJ0aWNsZT5cbiAgKTtcbn07XG5cblNjcmVlblJlYWRlckFjdGl2aXR5LmRlZmF1bHRQcm9wcyA9IHtcbiAgY2hpbGRyZW46IHVuZGVmaW5lZCxcbiAgaWQ6IHVuZGVmaW5lZCxcbiAgcmVuZGVyQXR0YWNobWVudHM6IHRydWVcbn07XG5cblNjcmVlblJlYWRlckFjdGl2aXR5LnByb3BUeXBlcyA9IHtcbiAgYWN0aXZpdHk6IFByb3BUeXBlcy5hbnkuaXNSZXF1aXJlZCxcbiAgY2hpbGRyZW46IFByb3BUeXBlcy5hbnksXG4gIGlkOiBQcm9wVHlwZXMuc3RyaW5nLFxuICByZW5kZXJBdHRhY2htZW50czogUHJvcFR5cGVzLmJvb2xcbn07XG5cbmV4cG9ydCBkZWZhdWx0IFNjcmVlblJlYWRlckFjdGl2aXR5O1xuIl19