UNPKG

matrix-react-sdk

Version:
115 lines (107 loc) 17.4 kB
"use strict"; var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault"); Object.defineProperty(exports, "__esModule", { value: true }); exports.addManagedHybridWidget = addManagedHybridWidget; exports.isManagedHybridWidget = isManagedHybridWidget; exports.isManagedHybridWidgetEnabled = isManagedHybridWidgetEnabled; var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty")); var _logger = require("matrix-js-sdk/src/logger"); var _MatrixClientPeg = require("../MatrixClientPeg"); var _WellKnownUtils = require("../utils/WellKnownUtils"); var _WidgetUtils = _interopRequireDefault(require("../utils/WidgetUtils")); var _WidgetLayoutStore = require("../stores/widgets/WidgetLayoutStore"); var _WidgetEchoStore = _interopRequireDefault(require("../stores/WidgetEchoStore")); var _WidgetStore = _interopRequireDefault(require("../stores/WidgetStore")); var _SdkConfig = _interopRequireDefault(require("../SdkConfig")); var _getJoinedNonFunctionalMembers = require("../utils/room/getJoinedNonFunctionalMembers"); function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; } function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { (0, _defineProperty2.default)(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; } /* Copyright 2024 New Vector Ltd. Copyright 2021 The Matrix.org Foundation C.I.C. SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only Please see LICENSE files in the repository root for full details. */ /* eslint-disable camelcase */ /* eslint-enable camelcase */ function getWidgetBuildUrl(room) { const functionalMembers = (0, _getJoinedNonFunctionalMembers.getJoinedNonFunctionalMembers)(room); const isDm = functionalMembers.length === 2; if (_SdkConfig.default.get().widget_build_url) { if (isDm && _SdkConfig.default.get().widget_build_url_ignore_dm) { return undefined; } return _SdkConfig.default.get().widget_build_url; } const wellKnown = (0, _WellKnownUtils.getCallBehaviourWellKnown)(_MatrixClientPeg.MatrixClientPeg.safeGet()); if (isDm && wellKnown?.ignore_dm) { return undefined; } /* eslint-disable-next-line camelcase */ return wellKnown?.widget_build_url; } function isManagedHybridWidgetEnabled(room) { return !!getWidgetBuildUrl(room); } async function addManagedHybridWidget(room) { // Check for permission if (!_WidgetUtils.default.canUserModifyWidgets(room.client, room.roomId)) { _logger.logger.error(`User not allowed to modify widgets in ${room.roomId}`); return; } // Get widget data /* eslint-disable-next-line camelcase */ const widgetBuildUrl = getWidgetBuildUrl(room); if (!widgetBuildUrl) { return; } let widgetData; try { const response = await fetch(`${widgetBuildUrl}?roomId=${room.roomId}`); widgetData = await response.json(); } catch (e) { _logger.logger.error(`Managed hybrid widget builder failed for room ${room.roomId}`, e); return; } if (!widgetData) { return; } const { widget_id: widgetId, widget: widgetContent, layout } = widgetData; // Ensure the widget is not already present in the room let widgets = _WidgetStore.default.instance.getApps(room.roomId); const existing = widgets.some(w => w.id === widgetId) || _WidgetEchoStore.default.roomHasPendingWidgets(room.roomId, []); if (existing) { _logger.logger.error(`Managed hybrid widget already present in room ${room.roomId}`); return; } // Add the widget try { await _WidgetUtils.default.setRoomWidgetContent(room.client, room.roomId, widgetId, _objectSpread(_objectSpread({}, widgetContent), {}, { "io.element.managed_hybrid": true })); } catch (e) { _logger.logger.error(`Unable to add managed hybrid widget in room ${room.roomId}`, e); return; } // Move the widget into position if (!_WidgetLayoutStore.WidgetLayoutStore.instance.canCopyLayoutToRoom(room)) { return; } widgets = _WidgetStore.default.instance.getApps(room.roomId); const installedWidget = widgets.find(w => w.id === widgetId); if (!installedWidget) { return; } _WidgetLayoutStore.WidgetLayoutStore.instance.moveToContainer(room, installedWidget, layout.container); _WidgetLayoutStore.WidgetLayoutStore.instance.setContainerHeight(room, layout.container, layout.height); _WidgetLayoutStore.WidgetLayoutStore.instance.copyLayoutToRoom(room); } function isManagedHybridWidget(widget) { return !!widget["io.element.managed_hybrid"]; } //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfbG9nZ2VyIiwicmVxdWlyZSIsIl9NYXRyaXhDbGllbnRQZWciLCJfV2VsbEtub3duVXRpbHMiLCJfV2lkZ2V0VXRpbHMiLCJfaW50ZXJvcFJlcXVpcmVEZWZhdWx0IiwiX1dpZGdldExheW91dFN0b3JlIiwiX1dpZGdldEVjaG9TdG9yZSIsIl9XaWRnZXRTdG9yZSIsIl9TZGtDb25maWciLCJfZ2V0Sm9pbmVkTm9uRnVuY3Rpb25hbE1lbWJlcnMiLCJvd25LZXlzIiwiZSIsInIiLCJ0IiwiT2JqZWN0Iiwia2V5cyIsImdldE93blByb3BlcnR5U3ltYm9scyIsIm8iLCJmaWx0ZXIiLCJnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IiLCJlbnVtZXJhYmxlIiwicHVzaCIsImFwcGx5IiwiX29iamVjdFNwcmVhZCIsImFyZ3VtZW50cyIsImxlbmd0aCIsImZvckVhY2giLCJfZGVmaW5lUHJvcGVydHkyIiwiZGVmYXVsdCIsImdldE93blByb3BlcnR5RGVzY3JpcHRvcnMiLCJkZWZpbmVQcm9wZXJ0aWVzIiwiZGVmaW5lUHJvcGVydHkiLCJnZXRXaWRnZXRCdWlsZFVybCIsInJvb20iLCJmdW5jdGlvbmFsTWVtYmVycyIsImdldEpvaW5lZE5vbkZ1bmN0aW9uYWxNZW1iZXJzIiwiaXNEbSIsIlNka0NvbmZpZyIsImdldCIsIndpZGdldF9idWlsZF91cmwiLCJ3aWRnZXRfYnVpbGRfdXJsX2lnbm9yZV9kbSIsInVuZGVmaW5lZCIsIndlbGxLbm93biIsImdldENhbGxCZWhhdmlvdXJXZWxsS25vd24iLCJNYXRyaXhDbGllbnRQZWciLCJzYWZlR2V0IiwiaWdub3JlX2RtIiwiaXNNYW5hZ2VkSHlicmlkV2lkZ2V0RW5hYmxlZCIsImFkZE1hbmFnZWRIeWJyaWRXaWRnZXQiLCJXaWRnZXRVdGlscyIsImNhblVzZXJNb2RpZnlXaWRnZXRzIiwiY2xpZW50Iiwicm9vbUlkIiwibG9nZ2VyIiwiZXJyb3IiLCJ3aWRnZXRCdWlsZFVybCIsIndpZGdldERhdGEiLCJyZXNwb25zZSIsImZldGNoIiwianNvbiIsIndpZGdldF9pZCIsIndpZGdldElkIiwid2lkZ2V0Iiwid2lkZ2V0Q29udGVudCIsImxheW91dCIsIndpZGdldHMiLCJXaWRnZXRTdG9yZSIsImluc3RhbmNlIiwiZ2V0QXBwcyIsImV4aXN0aW5nIiwic29tZSIsInciLCJpZCIsIldpZGdldEVjaG9TdG9yZSIsInJvb21IYXNQZW5kaW5nV2lkZ2V0cyIsInNldFJvb21XaWRnZXRDb250ZW50IiwiV2lkZ2V0TGF5b3V0U3RvcmUiLCJjYW5Db3B5TGF5b3V0VG9Sb29tIiwiaW5zdGFsbGVkV2lkZ2V0IiwiZmluZCIsIm1vdmVUb0NvbnRhaW5lciIsImNvbnRhaW5lciIsInNldENvbnRhaW5lckhlaWdodCIsImhlaWdodCIsImNvcHlMYXlvdXRUb1Jvb20iLCJpc01hbmFnZWRIeWJyaWRXaWRnZXQiXSwic291cmNlcyI6WyIuLi8uLi9zcmMvd2lkZ2V0cy9NYW5hZ2VkSHlicmlkLnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qXG5Db3B5cmlnaHQgMjAyNCBOZXcgVmVjdG9yIEx0ZC5cbkNvcHlyaWdodCAyMDIxIFRoZSBNYXRyaXgub3JnIEZvdW5kYXRpb24gQy5JLkMuXG5cblNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBR1BMLTMuMC1vbmx5IE9SIEdQTC0zLjAtb25seVxuUGxlYXNlIHNlZSBMSUNFTlNFIGZpbGVzIGluIHRoZSByZXBvc2l0b3J5IHJvb3QgZm9yIGZ1bGwgZGV0YWlscy5cbiovXG5cbmltcG9ydCB7IElXaWRnZXQgfSBmcm9tIFwibWF0cml4LXdpZGdldC1hcGlcIjtcbmltcG9ydCB7IGxvZ2dlciB9IGZyb20gXCJtYXRyaXgtanMtc2RrL3NyYy9sb2dnZXJcIjtcbmltcG9ydCB7IFJvb20gfSBmcm9tIFwibWF0cml4LWpzLXNkay9zcmMvbWF0cml4XCI7XG5cbmltcG9ydCB7IE1hdHJpeENsaWVudFBlZyB9IGZyb20gXCIuLi9NYXRyaXhDbGllbnRQZWdcIjtcbmltcG9ydCB7IGdldENhbGxCZWhhdmlvdXJXZWxsS25vd24gfSBmcm9tIFwiLi4vdXRpbHMvV2VsbEtub3duVXRpbHNcIjtcbmltcG9ydCBXaWRnZXRVdGlscyBmcm9tIFwiLi4vdXRpbHMvV2lkZ2V0VXRpbHNcIjtcbmltcG9ydCB7IElTdG9yZWRMYXlvdXQsIFdpZGdldExheW91dFN0b3JlIH0gZnJvbSBcIi4uL3N0b3Jlcy93aWRnZXRzL1dpZGdldExheW91dFN0b3JlXCI7XG5pbXBvcnQgV2lkZ2V0RWNob1N0b3JlIGZyb20gXCIuLi9zdG9yZXMvV2lkZ2V0RWNob1N0b3JlXCI7XG5pbXBvcnQgV2lkZ2V0U3RvcmUsIHsgSUFwcCB9IGZyb20gXCIuLi9zdG9yZXMvV2lkZ2V0U3RvcmVcIjtcbmltcG9ydCBTZGtDb25maWcgZnJvbSBcIi4uL1Nka0NvbmZpZ1wiO1xuaW1wb3J0IHsgZ2V0Sm9pbmVkTm9uRnVuY3Rpb25hbE1lbWJlcnMgfSBmcm9tIFwiLi4vdXRpbHMvcm9vbS9nZXRKb2luZWROb25GdW5jdGlvbmFsTWVtYmVyc1wiO1xuXG4vKiBlc2xpbnQtZGlzYWJsZSBjYW1lbGNhc2UgKi9cbmludGVyZmFjZSBJTWFuYWdlZEh5YnJpZFdpZGdldERhdGEge1xuICAgIHdpZGdldF9pZDogc3RyaW5nO1xuICAgIHdpZGdldDogSVdpZGdldDtcbiAgICBsYXlvdXQ6IElTdG9yZWRMYXlvdXQ7XG59XG4vKiBlc2xpbnQtZW5hYmxlIGNhbWVsY2FzZSAqL1xuXG5mdW5jdGlvbiBnZXRXaWRnZXRCdWlsZFVybChyb29tOiBSb29tKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgICBjb25zdCBmdW5jdGlvbmFsTWVtYmVycyA9IGdldEpvaW5lZE5vbkZ1bmN0aW9uYWxNZW1iZXJzKHJvb20pO1xuICAgIGNvbnN0IGlzRG0gPSBmdW5jdGlvbmFsTWVtYmVycy5sZW5ndGggPT09IDI7XG4gICAgaWYgKFNka0NvbmZpZy5nZXQoKS53aWRnZXRfYnVpbGRfdXJsKSB7XG4gICAgICAgIGlmIChpc0RtICYmIFNka0NvbmZpZy5nZXQoKS53aWRnZXRfYnVpbGRfdXJsX2lnbm9yZV9kbSkge1xuICAgICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gU2RrQ29uZmlnLmdldCgpLndpZGdldF9idWlsZF91cmw7XG4gICAgfVxuXG4gICAgY29uc3Qgd2VsbEtub3duID0gZ2V0Q2FsbEJlaGF2aW91cldlbGxLbm93bihNYXRyaXhDbGllbnRQZWcuc2FmZUdldCgpKTtcbiAgICBpZiAoaXNEbSAmJiB3ZWxsS25vd24/Lmlnbm9yZV9kbSkge1xuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cbiAgICAvKiBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgY2FtZWxjYXNlICovXG4gICAgcmV0dXJuIHdlbGxLbm93bj8ud2lkZ2V0X2J1aWxkX3VybDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzTWFuYWdlZEh5YnJpZFdpZGdldEVuYWJsZWQocm9vbTogUm9vbSk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAhIWdldFdpZGdldEJ1aWxkVXJsKHJvb20pO1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gYWRkTWFuYWdlZEh5YnJpZFdpZGdldChyb29tOiBSb29tKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgLy8gQ2hlY2sgZm9yIHBlcm1pc3Npb25cbiAgICBpZiAoIVdpZGdldFV0aWxzLmNhblVzZXJNb2RpZnlXaWRnZXRzKHJvb20uY2xpZW50LCByb29tLnJvb21JZCkpIHtcbiAgICAgICAgbG9nZ2VyLmVycm9yKGBVc2VyIG5vdCBhbGxvd2VkIHRvIG1vZGlmeSB3aWRnZXRzIGluICR7cm9vbS5yb29tSWR9YCk7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBHZXQgd2lkZ2V0IGRhdGFcbiAgICAvKiBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgY2FtZWxjYXNlICovXG4gICAgY29uc3Qgd2lkZ2V0QnVpbGRVcmwgPSBnZXRXaWRnZXRCdWlsZFVybChyb29tKTtcbiAgICBpZiAoIXdpZGdldEJ1aWxkVXJsKSB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG4gICAgbGV0IHdpZGdldERhdGE6IElNYW5hZ2VkSHlicmlkV2lkZ2V0RGF0YTtcbiAgICB0cnkge1xuICAgICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGZldGNoKGAke3dpZGdldEJ1aWxkVXJsfT9yb29tSWQ9JHtyb29tLnJvb21JZH1gKTtcbiAgICAgICAgd2lkZ2V0RGF0YSA9IGF3YWl0IHJlc3BvbnNlLmpzb24oKTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIGxvZ2dlci5lcnJvcihgTWFuYWdlZCBoeWJyaWQgd2lkZ2V0IGJ1aWxkZXIgZmFpbGVkIGZvciByb29tICR7cm9vbS5yb29tSWR9YCwgZSk7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKCF3aWRnZXREYXRhKSB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgeyB3aWRnZXRfaWQ6IHdpZGdldElkLCB3aWRnZXQ6IHdpZGdldENvbnRlbnQsIGxheW91dCB9ID0gd2lkZ2V0RGF0YTtcblxuICAgIC8vIEVuc3VyZSB0aGUgd2lkZ2V0IGlzIG5vdCBhbHJlYWR5IHByZXNlbnQgaW4gdGhlIHJvb21cbiAgICBsZXQgd2lkZ2V0cyA9IFdpZGdldFN0b3JlLmluc3RhbmNlLmdldEFwcHMocm9vbS5yb29tSWQpO1xuICAgIGNvbnN0IGV4aXN0aW5nID0gd2lkZ2V0cy5zb21lKCh3KSA9PiB3LmlkID09PSB3aWRnZXRJZCkgfHwgV2lkZ2V0RWNob1N0b3JlLnJvb21IYXNQZW5kaW5nV2lkZ2V0cyhyb29tLnJvb21JZCwgW10pO1xuICAgIGlmIChleGlzdGluZykge1xuICAgICAgICBsb2dnZXIuZXJyb3IoYE1hbmFnZWQgaHlicmlkIHdpZGdldCBhbHJlYWR5IHByZXNlbnQgaW4gcm9vbSAke3Jvb20ucm9vbUlkfWApO1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gQWRkIHRoZSB3aWRnZXRcbiAgICB0cnkge1xuICAgICAgICBhd2FpdCBXaWRnZXRVdGlscy5zZXRSb29tV2lkZ2V0Q29udGVudChyb29tLmNsaWVudCwgcm9vbS5yb29tSWQsIHdpZGdldElkLCB7XG4gICAgICAgICAgICAuLi53aWRnZXRDb250ZW50LFxuICAgICAgICAgICAgXCJpby5lbGVtZW50Lm1hbmFnZWRfaHlicmlkXCI6IHRydWUsXG4gICAgICAgIH0pO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgbG9nZ2VyLmVycm9yKGBVbmFibGUgdG8gYWRkIG1hbmFnZWQgaHlicmlkIHdpZGdldCBpbiByb29tICR7cm9vbS5yb29tSWR9YCwgZSk7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBNb3ZlIHRoZSB3aWRnZXQgaW50byBwb3NpdGlvblxuICAgIGlmICghV2lkZ2V0TGF5b3V0U3RvcmUuaW5zdGFuY2UuY2FuQ29weUxheW91dFRvUm9vbShyb29tKSkge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuICAgIHdpZGdldHMgPSBXaWRnZXRTdG9yZS5pbnN0YW5jZS5nZXRBcHBzKHJvb20ucm9vbUlkKTtcbiAgICBjb25zdCBpbnN0YWxsZWRXaWRnZXQgPSB3aWRnZXRzLmZpbmQoKHcpID0+IHcuaWQgPT09IHdpZGdldElkKTtcbiAgICBpZiAoIWluc3RhbGxlZFdpZGdldCkge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuICAgIFdpZGdldExheW91dFN0b3JlLmluc3RhbmNlLm1vdmVUb0NvbnRhaW5lcihyb29tLCBpbnN0YWxsZWRXaWRnZXQsIGxheW91dC5jb250YWluZXIpO1xuICAgIFdpZGdldExheW91dFN0b3JlLmluc3RhbmNlLnNldENvbnRhaW5lckhlaWdodChyb29tLCBsYXlvdXQuY29udGFpbmVyLCBsYXlvdXQuaGVpZ2h0KTtcbiAgICBXaWRnZXRMYXlvdXRTdG9yZS5pbnN0YW5jZS5jb3B5TGF5b3V0VG9Sb29tKHJvb20pO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNNYW5hZ2VkSHlicmlkV2lkZ2V0KHdpZGdldDogSUFwcCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAhIXdpZGdldFtcImlvLmVsZW1lbnQubWFuYWdlZF9oeWJyaWRcIl07XG59XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7QUFTQSxJQUFBQSxPQUFBLEdBQUFDLE9BQUE7QUFHQSxJQUFBQyxnQkFBQSxHQUFBRCxPQUFBO0FBQ0EsSUFBQUUsZUFBQSxHQUFBRixPQUFBO0FBQ0EsSUFBQUcsWUFBQSxHQUFBQyxzQkFBQSxDQUFBSixPQUFBO0FBQ0EsSUFBQUssa0JBQUEsR0FBQUwsT0FBQTtBQUNBLElBQUFNLGdCQUFBLEdBQUFGLHNCQUFBLENBQUFKLE9BQUE7QUFDQSxJQUFBTyxZQUFBLEdBQUFILHNCQUFBLENBQUFKLE9BQUE7QUFDQSxJQUFBUSxVQUFBLEdBQUFKLHNCQUFBLENBQUFKLE9BQUE7QUFDQSxJQUFBUyw4QkFBQSxHQUFBVCxPQUFBO0FBQTRGLFNBQUFVLFFBQUFDLENBQUEsRUFBQUMsQ0FBQSxRQUFBQyxDQUFBLEdBQUFDLE1BQUEsQ0FBQUMsSUFBQSxDQUFBSixDQUFBLE9BQUFHLE1BQUEsQ0FBQUUscUJBQUEsUUFBQUMsQ0FBQSxHQUFBSCxNQUFBLENBQUFFLHFCQUFBLENBQUFMLENBQUEsR0FBQUMsQ0FBQSxLQUFBSyxDQUFBLEdBQUFBLENBQUEsQ0FBQUMsTUFBQSxXQUFBTixDQUFBLFdBQUFFLE1BQUEsQ0FBQUssd0JBQUEsQ0FBQVIsQ0FBQSxFQUFBQyxDQUFBLEVBQUFRLFVBQUEsT0FBQVAsQ0FBQSxDQUFBUSxJQUFBLENBQUFDLEtBQUEsQ0FBQVQsQ0FBQSxFQUFBSSxDQUFBLFlBQUFKLENBQUE7QUFBQSxTQUFBVSxjQUFBWixDQUFBLGFBQUFDLENBQUEsTUFBQUEsQ0FBQSxHQUFBWSxTQUFBLENBQUFDLE1BQUEsRUFBQWIsQ0FBQSxVQUFBQyxDQUFBLFdBQUFXLFNBQUEsQ0FBQVosQ0FBQSxJQUFBWSxTQUFBLENBQUFaLENBQUEsUUFBQUEsQ0FBQSxPQUFBRixPQUFBLENBQUFJLE1BQUEsQ0FBQUQsQ0FB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