matrix-react-sdk
Version:
SDK for matrix.org using React
100 lines (92 loc) • 12.9 kB
JavaScript
;
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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