UNPKG

matrix-react-sdk

Version:
100 lines (92 loc) 12.9 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.removeClientInformation = exports.recordClientInformation = exports.pruneClientInformation = exports.getDeviceClientInformation = exports.getClientInformationEventType = void 0; /* Copyright 2024 New Vector Ltd. Copyright 2022 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. */ const formatUrl = () => { // don't record url for electron clients if (window.electron) { return undefined; } // strip query-string and fragment from uri const url = new URL(window.location.href); return [url.host, url.pathname.replace(/\/$/, "") // Remove trailing slash if present ].join(""); }; const clientInformationEventPrefix = "io.element.matrix_client_information."; const getClientInformationEventType = deviceId => `${clientInformationEventPrefix}${deviceId}`; /** * Record extra client information for the current device * https://github.com/vector-im/element-meta/blob/develop/spec/matrix_client_information.md */ exports.getClientInformationEventType = getClientInformationEventType; const recordClientInformation = async (matrixClient, sdkConfig, platform) => { const deviceId = matrixClient.getDeviceId(); const { brand } = sdkConfig; const version = await platform?.getAppVersion(); const type = getClientInformationEventType(deviceId); const url = formatUrl(); await matrixClient.setAccountData(type, { name: brand, version, url }); }; /** * Remove client information events for devices that no longer exist * @param validDeviceIds - ids of current devices, * client information for devices NOT in this list will be removed */ exports.recordClientInformation = recordClientInformation; const pruneClientInformation = (validDeviceIds, matrixClient) => { Array.from(matrixClient.store.accountData.values()).forEach(event => { if (!event.getType().startsWith(clientInformationEventPrefix)) { return; } const [, deviceId] = event.getType().split(clientInformationEventPrefix); if (deviceId && !validDeviceIds.includes(deviceId)) { matrixClient.deleteAccountData(event.getType()); } }); }; /** * Remove extra client information for current device */ exports.pruneClientInformation = pruneClientInformation; const removeClientInformation = async matrixClient => { const deviceId = matrixClient.getDeviceId(); const type = getClientInformationEventType(deviceId); const clientInformation = getDeviceClientInformation(matrixClient, deviceId); // if a non-empty client info event exists, remove it if (clientInformation.name || clientInformation.version || clientInformation.url) { await matrixClient.deleteAccountData(type); } }; exports.removeClientInformation = removeClientInformation; const sanitizeContentString = value => value && typeof value === "string" ? value : undefined; const getDeviceClientInformation = (matrixClient, deviceId) => { const event = matrixClient.getAccountData(getClientInformationEventType(deviceId)); if (!event) { return {}; } const { name, version, url } = event.getContent(); return { name: sanitizeContentString(name), version: sanitizeContentString(version), url: sanitizeContentString(url) }; }; exports.getDeviceClientInformation = getDeviceClientInformation; //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJmb3JtYXRVcmwiLCJ3aW5kb3ciLCJlbGVjdHJvbiIsInVuZGVmaW5lZCIsInVybCIsIlVSTCIsImxvY2F0aW9uIiwiaHJlZiIsImhvc3QiLCJwYXRobmFtZSIsInJlcGxhY2UiLCJqb2luIiwiY2xpZW50SW5mb3JtYXRpb25FdmVudFByZWZpeCIsImdldENsaWVudEluZm9ybWF0aW9uRXZlbnRUeXBlIiwiZGV2aWNlSWQiLCJleHBvcnRzIiwicmVjb3JkQ2xpZW50SW5mb3JtYXRpb24iLCJtYXRyaXhDbGllbnQiLCJzZGtDb25maWciLCJwbGF0Zm9ybSIsImdldERldmljZUlkIiwiYnJhbmQiLCJ2ZXJzaW9uIiwiZ2V0QXBwVmVyc2lvbiIsInR5cGUiLCJzZXRBY2NvdW50RGF0YSIsIm5hbWUiLCJwcnVuZUNsaWVudEluZm9ybWF0aW9uIiwidmFsaWREZXZpY2VJZHMiLCJBcnJheSIsImZyb20iLCJzdG9yZSIsImFjY291bnREYXRhIiwidmFsdWVzIiwiZm9yRWFjaCIsImV2ZW50IiwiZ2V0VHlwZSIsInN0YXJ0c1dpdGgiLCJzcGxpdCIsImluY2x1ZGVzIiwiZGVsZXRlQWNjb3VudERhdGEiLCJyZW1vdmVDbGllbnRJbmZvcm1hdGlvbiIsImNsaWVudEluZm9ybWF0aW9uIiwiZ2V0RGV2aWNlQ2xpZW50SW5mb3JtYXRpb24iLCJzYW5pdGl6ZUNvbnRlbnRTdHJpbmciLCJ2YWx1ZSIsImdldEFjY291bnREYXRhIiwiZ2V0Q29udGVudCJdLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy91dGlscy9kZXZpY2UvY2xpZW50SW5mb3JtYXRpb24udHMiXSwic291cmNlc0NvbnRlbnQiOlsiLypcbkNvcHlyaWdodCAyMDI0IE5ldyBWZWN0b3IgTHRkLlxuQ29weXJpZ2h0IDIwMjIgVGhlIE1hdHJpeC5vcmcgRm91bmRhdGlvbiBDLkkuQy5cblxuU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFHUEwtMy4wLW9ubHkgT1IgR1BMLTMuMC1vbmx5XG5QbGVhc2Ugc2VlIExJQ0VOU0UgZmlsZXMgaW4gdGhlIHJlcG9zaXRvcnkgcm9vdCBmb3IgZnVsbCBkZXRhaWxzLlxuKi9cblxuaW1wb3J0IHsgTWF0cml4Q2xpZW50IH0gZnJvbSBcIm1hdHJpeC1qcy1zZGsvc3JjL21hdHJpeFwiO1xuXG5pbXBvcnQgQmFzZVBsYXRmb3JtIGZyb20gXCIuLi8uLi9CYXNlUGxhdGZvcm1cIjtcbmltcG9ydCB7IElDb25maWdPcHRpb25zIH0gZnJvbSBcIi4uLy4uL0lDb25maWdPcHRpb25zXCI7XG5pbXBvcnQgeyBEZWVwUmVhZG9ubHkgfSBmcm9tIFwiLi4vLi4vQHR5cGVzL2NvbW1vblwiO1xuXG5leHBvcnQgdHlwZSBEZXZpY2VDbGllbnRJbmZvcm1hdGlvbiA9IHtcbiAgICBuYW1lPzogc3RyaW5nO1xuICAgIHZlcnNpb24/OiBzdHJpbmc7XG4gICAgdXJsPzogc3RyaW5nO1xufTtcblxuY29uc3QgZm9ybWF0VXJsID0gKCk6IHN0cmluZyB8IHVuZGVmaW5lZCA9PiB7XG4gICAgLy8gZG9uJ3QgcmVjb3JkIHVybCBmb3IgZWxlY3Ryb24gY2xpZW50c1xuICAgIGlmICh3aW5kb3cuZWxlY3Ryb24pIHtcbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG5cbiAgICAvLyBzdHJpcCBxdWVyeS1zdHJpbmcgYW5kIGZyYWdtZW50IGZyb20gdXJpXG4gICAgY29uc3QgdXJsID0gbmV3IFVSTCh3aW5kb3cubG9jYXRpb24uaHJlZik7XG5cbiAgICByZXR1cm4gW1xuICAgICAgICB1cmwuaG9zdCxcbiAgICAgICAgdXJsLnBhdGhuYW1lLnJlcGxhY2UoL1xcLyQvLCBcIlwiKSwgLy8gUmVtb3ZlIHRyYWlsaW5nIHNsYXNoIGlmIHByZXNlbnRcbiAgICBdLmpvaW4oXCJcIik7XG59O1xuXG5jb25zdCBjbGllbnRJbmZvcm1hdGlvbkV2ZW50UHJlZml4ID0gXCJpby5lbGVtZW50Lm1hdHJpeF9jbGllbnRfaW5mb3JtYXRpb24uXCI7XG5leHBvcnQgY29uc3QgZ2V0Q2xpZW50SW5mb3JtYXRpb25FdmVudFR5cGUgPSAoZGV2aWNlSWQ6IHN0cmluZyk6IHN0cmluZyA9PiBgJHtjbGllbnRJbmZvcm1hdGlvbkV2ZW50UHJlZml4fSR7ZGV2aWNlSWR9YDtcblxuLyoqXG4gKiBSZWNvcmQgZXh0cmEgY2xpZW50IGluZm9ybWF0aW9uIGZvciB0aGUgY3VycmVudCBkZXZpY2VcbiAqIGh0dHBzOi8vZ2l0aHViLmNvbS92ZWN0b3ItaW0vZWxlbWVudC1tZXRhL2Jsb2IvZGV2ZWxvcC9zcGVjL21hdHJpeF9jbGllbnRfaW5mb3JtYXRpb24ubWRcbiAqL1xuZXhwb3J0IGNvbnN0IHJlY29yZENsaWVudEluZm9ybWF0aW9uID0gYXN5bmMgKFxuICAgIG1hdHJpeENsaWVudDogTWF0cml4Q2xpZW50LFxuICAgIHNka0NvbmZpZzogRGVlcFJlYWRvbmx5PElDb25maWdPcHRpb25zPixcbiAgICBwbGF0Zm9ybT86IEJhc2VQbGF0Zm9ybSxcbik6IFByb21pc2U8dm9pZD4gPT4ge1xuICAgIGNvbnN0IGRldmljZUlkID0gbWF0cml4Q2xpZW50LmdldERldmljZUlkKCkhO1xuICAgIGNvbnN0IHsgYnJhbmQgfSA9IHNka0NvbmZpZztcbiAgICBjb25zdCB2ZXJzaW9uID0gYXdhaXQgcGxhdGZvcm0/LmdldEFwcFZlcnNpb24oKTtcbiAgICBjb25zdCB0eXBlID0gZ2V0Q2xpZW50SW5mb3JtYXRpb25FdmVudFR5cGUoZGV2aWNlSWQpO1xuICAgIGNvbnN0IHVybCA9IGZvcm1hdFVybCgpO1xuXG4gICAgYXdhaXQgbWF0cml4Q2xpZW50LnNldEFjY291bnREYXRhKHR5cGUsIHtcbiAgICAgICAgbmFtZTogYnJhbmQsXG4gICAgICAgIHZlcnNpb24sXG4gICAgICAgIHVybCxcbiAgICB9KTtcbn07XG5cbi8qKlxuICogUmVtb3ZlIGNsaWVudCBpbmZvcm1hdGlvbiBldmVudHMgZm9yIGRldmljZXMgdGhhdCBubyBsb25nZXIgZXhpc3RcbiAqIEBwYXJhbSB2YWxpZERldmljZUlkcyAtIGlkcyBvZiBjdXJyZW50IGRldmljZXMsXG4gKiAgICAgICAgICAgICAgICAgICAgICBjbGllbnQgaW5mb3JtYXRpb24gZm9yIGRldmljZXMgTk9UIGluIHRoaXMgbGlzdCB3aWxsIGJlIHJlbW92ZWRcbiAqL1xuZXhwb3J0IGNvbnN0IHBydW5lQ2xpZW50SW5mb3JtYXRpb24gPSAodmFsaWREZXZpY2VJZHM6IHN0cmluZ1tdLCBtYXRyaXhDbGllbnQ6IE1hdHJpeENsaWVudCk6IHZvaWQgPT4ge1xuICAgIEFycmF5LmZyb20obWF0cml4Q2xpZW50LnN0b3JlLmFjY291bnREYXRhLnZhbHVlcygpKS5mb3JFYWNoKChldmVudCkgPT4ge1xuICAgICAgICBpZiAoIWV2ZW50LmdldFR5cGUoKS5zdGFydHNXaXRoKGNsaWVudEluZm9ybWF0aW9uRXZlbnRQcmVmaXgpKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgWywgZGV2aWNlSWRdID0gZXZlbnQuZ2V0VHlwZSgpLnNwbGl0KGNsaWVudEluZm9ybWF0aW9uRXZlbnRQcmVmaXgpO1xuICAgICAgICBpZiAoZGV2aWNlSWQgJiYgIXZhbGlkRGV2aWNlSWRzLmluY2x1ZGVzKGRldmljZUlkKSkge1xuICAgICAgICAgICAgbWF0cml4Q2xpZW50LmRlbGV0ZUFjY291bnREYXRhKGV2ZW50LmdldFR5cGUoKSk7XG4gICAgICAgIH1cbiAgICB9KTtcbn07XG5cbi8qKlxuICogUmVtb3ZlIGV4dHJhIGNsaWVudCBpbmZvcm1hdGlvbiBmb3IgY3VycmVudCBkZXZpY2VcbiAqL1xuZXhwb3J0IGNvbnN0IHJlbW92ZUNsaWVudEluZm9ybWF0aW9uID0gYXN5bmMgKG1hdHJpeENsaWVudDogTWF0cml4Q2xpZW50KTogUHJvbWlzZTx2b2lkPiA9PiB7XG4gICAgY29uc3QgZGV2aWNlSWQgPSBtYXRyaXhDbGllbnQuZ2V0RGV2aWNlSWQoKSE7XG4gICAgY29uc3QgdHlwZSA9IGdldENsaWVudEluZm9ybWF0aW9uRXZlbnRUeXBlKGRldmljZUlkKTtcbiAgICBjb25zdCBjbGllbnRJbmZvcm1hdGlvbiA9IGdldERldmljZUNsaWVudEluZm9ybWF0aW9uKG1hdHJpeENsaWVudCwgZGV2aWNlSWQpO1xuXG4gICAgLy8gaWYgYSBub24tZW1wdHkgY2xpZW50IGluZm8gZXZlbnQgZXhpc3RzLCByZW1vdmUgaXRcbiAgICBpZiAoY2xpZW50SW5mb3JtYXRpb24ubmFtZSB8fCBjbGllbnRJbmZvcm1hdGlvbi52ZXJzaW9uIHx8IGNsaWVudEluZm9ybWF0aW9uLnVybCkge1xuICAgICAgICBhd2FpdCBtYXRyaXhDbGllbnQuZGVsZXRlQWNjb3VudERhdGEodHlwZSk7XG4gICAgfVxufTtcblxuY29uc3Qgc2FuaXRpemVDb250ZW50U3RyaW5nID0gKHZhbHVlOiB1bmtub3duKTogc3RyaW5nIHwgdW5kZWZpbmVkID0+XG4gICAgdmFsdWUgJiYgdHlwZW9mIHZhbHVlID09PSBcInN0cmluZ1wiID8gdmFsdWUgOiB1bmRlZmluZWQ7XG5cbmV4cG9ydCBjb25zdCBnZXREZXZpY2VDbGllbnRJbmZvcm1hdGlvbiA9IChtYXRyaXhDbGllbnQ6IE1hdHJpeENsaWVudCwgZGV2aWNlSWQ6IHN0cmluZyk6IERldmljZUNsaWVudEluZm9ybWF0aW9uID0+IHtcbiAgICBjb25zdCBldmVudCA9IG1hdHJpeENsaWVudC5nZXRBY2NvdW50RGF0YShnZXRDbGllbnRJbmZvcm1hdGlvbkV2ZW50VHlwZShkZXZpY2VJZCkpO1xuXG4gICAgaWYgKCFldmVudCkge1xuICAgICAgICByZXR1cm4ge307XG4gICAgfVxuXG4gICAgY29uc3QgeyBuYW1lLCB2ZXJzaW9uLCB1cmwgfSA9IGV2ZW50LmdldENvbnRlbnQoKTtcblxuICAgIHJldHVybiB7XG4gICAgICAgIG5hbWU6IHNhbml0aXplQ29udGVudFN0cmluZyhuYW1lKSxcbiAgICAgICAgdmVyc2lvbjogc2FuaXRpemVDb250ZW50U3RyaW5nKHZlcnNpb24pLFxuICAgICAgICB1cmw6IHNhbml0aXplQ29udGVudFN0cmluZyh1cmwpLFxu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