UNPKG

matrix-react-sdk

Version:
94 lines (89 loc) 15.6 kB
"use strict"; var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault"); Object.defineProperty(exports, "__esModule", { value: true }); exports.default = void 0; var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty")); var _events = _interopRequireDefault(require("events")); var _rfc = require("rfc4648"); 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 2020 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. */ // Dev note: the interface is split in two so we don't have to disable the // linter across the whole project. // Any data about the room that would normally come from the homeserver // but has been passed out-of-band, eg. the room name and avatar URL // from an email invite (a workaround for the fact that we can't // get this information from the HS using an email invite). const STORAGE_PREFIX = "mx_threepid_invite_"; class ThreepidInviteStore extends _events.default { static get instance() { if (!ThreepidInviteStore._instance) { ThreepidInviteStore._instance = new ThreepidInviteStore(); } return ThreepidInviteStore._instance; } storeInvite(roomId, wireInvite) { const invite = _objectSpread({ roomId }, wireInvite); const id = this.generateIdOf(invite); localStorage.setItem(`${STORAGE_PREFIX}${id}`, JSON.stringify(invite)); return this.translateInvite(invite); } getWireInvites() { const results = []; for (let i = 0; i < localStorage.length; i++) { const keyName = localStorage.key(i); if (!keyName?.startsWith(STORAGE_PREFIX)) continue; try { results.push(JSON.parse(localStorage.getItem(keyName))); } catch (e) { console.warn("Failed to parse 3pid invite", e); } } return results; } getInvites() { return this.getWireInvites().map(i => this.translateInvite(i)); } // Currently Element can only handle one invite at a time, so handle that pickBestInvite() { return this.getInvites()[0]; } resolveInvite(invite) { localStorage.removeItem(`${STORAGE_PREFIX}${invite.id}`); } generateIdOf(persisted) { // Use a consistent "hash" to form an ID. return _rfc.base32.stringify(Buffer.from(JSON.stringify(persisted))); } translateInvite(persisted) { return { id: this.generateIdOf(persisted), roomId: persisted.roomId, toEmail: persisted.email, signUrl: persisted.signurl, roomName: persisted.room_name, roomAvatarUrl: persisted.room_avatar_url, inviterName: persisted.inviter_name }; } translateToWireFormat(invite) { return { email: invite.toEmail, signurl: invite.signUrl, room_name: invite.roomName, room_avatar_url: invite.roomAvatarUrl, inviter_name: invite.inviterName }; } } exports.default = ThreepidInviteStore; (0, _defineProperty2.default)(ThreepidInviteStore, "_instance", void 0); //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfZXZlbnRzIiwiX2ludGVyb3BSZXF1aXJlRGVmYXVsdCIsInJlcXVpcmUiLCJfcmZjIiwib3duS2V5cyIsImUiLCJyIiwidCIsIk9iamVjdCIsImtleXMiLCJnZXRPd25Qcm9wZXJ0eVN5bWJvbHMiLCJvIiwiZmlsdGVyIiwiZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yIiwiZW51bWVyYWJsZSIsInB1c2giLCJhcHBseSIsIl9vYmplY3RTcHJlYWQiLCJhcmd1bWVudHMiLCJsZW5ndGgiLCJmb3JFYWNoIiwiX2RlZmluZVByb3BlcnR5MiIsImRlZmF1bHQiLCJnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzIiwiZGVmaW5lUHJvcGVydGllcyIsImRlZmluZVByb3BlcnR5IiwiU1RPUkFHRV9QUkVGSVgiLCJUaHJlZXBpZEludml0ZVN0b3JlIiwiRXZlbnRFbWl0dGVyIiwiaW5zdGFuY2UiLCJfaW5zdGFuY2UiLCJzdG9yZUludml0ZSIsInJvb21JZCIsIndpcmVJbnZpdGUiLCJpbnZpdGUiLCJpZCIsImdlbmVyYXRlSWRPZiIsImxvY2FsU3RvcmFnZSIsInNldEl0ZW0iLCJKU09OIiwic3RyaW5naWZ5IiwidHJhbnNsYXRlSW52aXRlIiwiZ2V0V2lyZUludml0ZXMiLCJyZXN1bHRzIiwiaSIsImtleU5hbWUiLCJrZXkiLCJzdGFydHNXaXRoIiwicGFyc2UiLCJnZXRJdGVtIiwiY29uc29sZSIsIndhcm4iLCJnZXRJbnZpdGVzIiwibWFwIiwicGlja0Jlc3RJbnZpdGUiLCJyZXNvbHZlSW52aXRlIiwicmVtb3ZlSXRlbSIsInBlcnNpc3RlZCIsImJhc2UzMiIsIkJ1ZmZlciIsImZyb20iLCJ0b0VtYWlsIiwiZW1haWwiLCJzaWduVXJsIiwic2lnbnVybCIsInJvb21OYW1lIiwicm9vbV9uYW1lIiwicm9vbUF2YXRhclVybCIsInJvb21fYXZhdGFyX3VybCIsImludml0ZXJOYW1lIiwiaW52aXRlcl9uYW1lIiwidHJhbnNsYXRlVG9XaXJlRm9ybWF0IiwiZXhwb3J0cyJdLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9zdG9yZXMvVGhyZWVwaWRJbnZpdGVTdG9yZS50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKlxuQ29weXJpZ2h0IDIwMjQgTmV3IFZlY3RvciBMdGQuXG5Db3B5cmlnaHQgMjAyMCBUaGUgTWF0cml4Lm9yZyBGb3VuZGF0aW9uIEMuSS5DLlxuXG5TUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQUdQTC0zLjAtb25seSBPUiBHUEwtMy4wLW9ubHlcblBsZWFzZSBzZWUgTElDRU5TRSBmaWxlcyBpbiB0aGUgcmVwb3NpdG9yeSByb290IGZvciBmdWxsIGRldGFpbHMuXG4qL1xuXG5pbXBvcnQgRXZlbnRFbWl0dGVyIGZyb20gXCJldmVudHNcIjtcbmltcG9ydCB7IGJhc2UzMiB9IGZyb20gXCJyZmM0NjQ4XCI7XG5pbXBvcnQgeyBSb29tVHlwZSB9IGZyb20gXCJtYXRyaXgtanMtc2RrL3NyYy9tYXRyaXhcIjtcblxuLy8gRGV2IG5vdGU6IHRoZSBpbnRlcmZhY2UgaXMgc3BsaXQgaW4gdHdvIHNvIHdlIGRvbid0IGhhdmUgdG8gZGlzYWJsZSB0aGVcbi8vIGxpbnRlciBhY3Jvc3MgdGhlIHdob2xlIHByb2plY3QuXG5leHBvcnQgaW50ZXJmYWNlIElUaHJlZXBpZEludml0ZVdpcmVGb3JtYXQge1xuICAgIGVtYWlsOiBzdHJpbmc7XG4gICAgc2lnbnVybDogc3RyaW5nO1xuICAgIHJvb21fbmFtZTogc3RyaW5nOyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIGNhbWVsY2FzZVxuICAgIHJvb21fYXZhdGFyX3VybDogc3RyaW5nOyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIGNhbWVsY2FzZVxuICAgIGludml0ZXJfbmFtZTogc3RyaW5nOyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIGNhbWVsY2FzZVxuXG4gICAgLy8gVE9ETzogRmlndXJlIG91dCBpZiB0aGVzZSBhcmUgZXZlciBwb3B1bGF0ZWRcbiAgICBndWVzdF9hY2Nlc3NfdG9rZW4/OiBzdHJpbmc7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgY2FtZWxjYXNlXG4gICAgZ3Vlc3RfdXNlcl9pZD86IHN0cmluZzsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBjYW1lbGNhc2Vcbn1cblxuaW50ZXJmYWNlIElQZXJzaXN0ZWRUaHJlZXBpZEludml0ZSBleHRlbmRzIElUaHJlZXBpZEludml0ZVdpcmVGb3JtYXQge1xuICAgIHJvb21JZDogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIElUaHJlZXBpZEludml0ZSB7XG4gICAgaWQ6IHN0cmluZzsgLy8gZ2VuZXJhdGVkIGJ5IHVzXG4gICAgcm9vbUlkOiBzdHJpbmc7XG4gICAgdG9FbWFpbDogc3RyaW5nO1xuICAgIHNpZ25Vcmw6IHN0cmluZztcbiAgICByb29tTmFtZTogc3RyaW5nO1xuICAgIHJvb21BdmF0YXJVcmw6IHN0cmluZztcbiAgICBpbnZpdGVyTmFtZTogc3RyaW5nO1xufVxuXG4vLyBBbnkgZGF0YSBhYm91dCB0aGUgcm9vbSB0aGF0IHdvdWxkIG5vcm1hbGx5IGNvbWUgZnJvbSB0aGUgaG9tZXNlcnZlclxuLy8gYnV0IGhhcyBiZWVuIHBhc3NlZCBvdXQtb2YtYmFuZCwgZWcuIHRoZSByb29tIG5hbWUgYW5kIGF2YXRhciBVUkxcbi8vIGZyb20gYW4gZW1haWwgaW52aXRlIChhIHdvcmthcm91bmQgZm9yIHRoZSBmYWN0IHRoYXQgd2UgY2FuJ3Rcbi8vIGdldCB0aGlzIGluZm9ybWF0aW9uIGZyb20gdGhlIEhTIHVzaW5nIGFuIGVtYWlsIGludml0ZSkuXG5leHBvcnQgaW50ZXJmYWNlIElPT0JEYXRhIHtcbiAgICBuYW1lPzogc3RyaW5nOyAvLyBUaGUgcm9vbSdzIG5hbWVcbiAgICBhdmF0YXJVcmw/OiBzdHJpbmc7IC8vIFRoZSBteGM6Ly8gYXZhdGFyIFVSTCBmb3IgdGhlIHJvb21cbiAgICBpbnZpdGVyTmFtZT86IHN0cmluZzsgLy8gVGhlIGRpc3BsYXkgbmFtZSBvZiB0aGUgcGVyc29uIHdobyBpbnZpdGVkIHVzIHRvIHRoZSByb29tXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGNhbWVsY2FzZVxuICAgIHJvb21fbmFtZT86IHN0cmluZzsgLy8gVGhlIG5hbWUgb2YgdGhlIHJvb20sIHRvIGJlIHVzZWQgdW50aWwgd2UgYXJlIHRvbGQgYmV0dGVyIGJ5IHRoZSBzZXJ2ZXJcbiAgICByb29tVHlwZT86IFJvb21UeXBlIHwgc3RyaW5nOyAvLyBUaGUgdHlwZSBvZiB0aGUgcm9vbSwgdG8gYmUgdXNlZCB1bnRpbCB3ZSBhcmUgdG9sZCBiZXR0ZXIgYnkgdGhlIHNlcnZlclxufVxuXG5jb25zdCBTVE9SQUdFX1BSRUZJWCA9IFwibXhfdGhyZWVwaWRfaW52aXRlX1wiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBUaHJlZXBpZEludml0ZVN0b3JlIGV4dGVuZHMgRXZlbnRFbWl0dGVyIHtcbiAgICBwcml2YXRlIHN0YXRpYyBfaW5zdGFuY2U6IFRocmVlcGlkSW52aXRlU3RvcmU7XG5cbiAgICBwdWJsaWMgc3RhdGljIGdldCBpbnN0YW5jZSgpOiBUaHJlZXBpZEludml0ZVN0b3JlIHtcbiAgICAgICAgaWYgKCFUaHJlZXBpZEludml0ZVN0b3JlLl9pbnN0YW5jZSkge1xuICAgICAgICAgICAgVGhyZWVwaWRJbnZpdGVTdG9yZS5faW5zdGFuY2UgPSBuZXcgVGhyZWVwaWRJbnZpdGVTdG9yZSgpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBUaHJlZXBpZEludml0ZVN0b3JlLl9pbnN0YW5jZTtcbiAgICB9XG5cbiAgICBwdWJsaWMgc3RvcmVJbnZpdGUocm9vbUlkOiBzdHJpbmcsIHdpcmVJbnZpdGU6IElUaHJlZXBpZEludml0ZVdpcmVGb3JtYXQpOiBJVGhyZWVwaWRJbnZpdGUge1xuICAgICAgICBjb25zdCBpbnZpdGUgPSA8SVBlcnNpc3RlZFRocmVlcGlkSW52aXRlPnsgcm9vbUlkLCAuLi53aXJlSW52aXRlIH07XG4gICAgICAgIGNvbnN0IGlkID0gdGhpcy5nZW5lcmF0ZUlkT2YoaW52aXRlKTtcbiAgICAgICAgbG9jYWxTdG9yYWdlLnNldEl0ZW0oYCR7U1RPUkFHRV9QUkVGSVh9JHtpZH1gLCBKU09OLnN0cmluZ2lmeShpbnZpdGUpKTtcbiAgICAgICAgcmV0dXJuIHRoaXMudHJhbnNsYXRlSW52aXRlKGludml0ZSk7XG4gICAgfVxuXG4gICAgcHVibGljIGdldFdpcmVJbnZpdGVzKCk6IElQZXJzaXN0ZWRUaHJlZXBpZEludml0ZVtdIHtcbiAgICAgICAgY29uc3QgcmVzdWx0czogSVBlcnNpc3RlZFRocmVlcGlkSW52aXRlW10gPSBbXTtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBsb2NhbFN0b3JhZ2UubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGNvbnN0IGtleU5hbWUgPSBsb2NhbFN0b3JhZ2Uua2V5KGkpO1xuICAgICAgICAgICAgaWYgKCFrZXlOYW1lPy5zdGFydHNXaXRoKFNUT1JBR0VfUFJFRklYKSkgY29udGludWU7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIHJlc3VsdHMucHVzaChKU09OLnBhcnNlKGxvY2FsU3RvcmFnZS5nZXRJdGVtKGtleU5hbWUpISkgYXMgSVBlcnNpc3RlZFRocmVlcGlkSW52aXRlKTtcbiAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgICBjb25zb2xlLndhcm4oXCJGYWlsZWQgdG8gcGFyc2UgM3BpZCBpbnZpdGVcIiwgZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3VsdHM7XG4gICAgfVxuXG4gICAgcHVibGljIGdldEludml0ZXMoKTogSVRocmVlcGlkSW52aXRlW10ge1xuICAgICAgICByZXR1cm4gdGhpcy5nZXRXaXJlSW52aXRlcygpLm1hcCgoaSkgPT4gdGhpcy50cmFuc2xhdGVJbnZpdGUoaSkpO1xuICAgIH1cblxuICAgIC8vIEN1cnJlbnRseSBFbGVtZW50IGNhbiBvbmx5IGhhbmRsZSBvbmUgaW52aXRlIGF0IGEgdGltZSwgc28gaGFuZGxlIHRoYXRcbiAgICBwdWJsaWMgcGlja0Jlc3RJbnZpdGUoKTogSVRocmVlcGlkSW52aXRlIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0SW52aXRlcygpWzBdO1xuICAgIH1cblxuICAgIHB1YmxpYyByZXNvbHZlSW52aXRlKGludml0ZTogSVRocmVlcGlkSW52aXRlKTogdm9pZCB7XG4gICAgICAgIGxvY2FsU3RvcmFnZS5yZW1vdmVJdGVtKGAke1NUT1JBR0VfUFJFRklYfSR7aW52aXRlLmlkfWApO1xuICAgIH1cblxuICAgIHByaXZhdGUgZ2VuZXJhdGVJZE9mKHBlcnNpc3RlZDogSVBlcnNpc3RlZFRocmVlcGlkSW52aXRlKTogc3RyaW5nIHtcbiAgICAgICAgLy8gVXNlIGEgY29uc2lzdGVudCBcImhhc2hcIiB0byBmb3JtIGFuIElELlxuICAgICAgICByZXR1cm4gYmFzZTMyLnN0cmluZ2lmeShCdWZmZXIuZnJvbShKU09OLnN0cmluZ2lmeShwZXJzaXN0ZWQpKSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSB0cmFuc2xhdGVJbnZpdGUocGVyc2lzdGVkOiBJUGVyc2lzdGVkVGhyZWVwaWRJbnZpdGUpOiBJVGhyZWVwaWRJbnZpdGUge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgaWQ6IHRoaXMuZ2VuZXJhdGVJZE9mKHBlcnNpc3RlZCksXG4gICAgICAgICAgICByb29tSWQ6IHBlcnNpc3RlZC5yb29tSWQsXG4gICAgICAgICAgICB0b0VtYWlsOiBwZXJzaXN0ZWQuZW1haWwsXG4gICAgICAgICAgICBzaWduVXJsOiBwZXJzaXN0ZWQuc2lnbnVybCxcbiAgICAgICAgICAgIHJvb21OYW1lOiBwZXJzaXN0ZWQucm9vbV9uYW1lLFxuICAgICAgICAgICAgcm9vbUF2YXRhclVybDogcGVyc2lzdGVkLnJvb21fYXZhdGFyX3VybCxcbiAgICAgICAgICAgIGludml0ZXJOYW1lOiBwZXJzaXN0ZWQuaW52aXRlcl9uYW1lLFxuICAgICAgICB9O1xuICAgIH1cblxuICAgIHB1YmxpYyB0cmFuc2xhdGVUb1dpcmVGb3JtYXQoaW52aXRlOiBJVGhyZWVwaWRJbnZpdGUpOiBJVGhyZWVwaWRJbnZpdGVXaXJlRm9ybWF0IHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGVtYWlsOiBpbnZpdGUudG9FbWFpbCxcbiAgICAgICAgICAgIHNpZ251cmw6IGludml0ZS5zaWduVXJsLFxuICAgICAgICAgICAgcm9vbV9uYW1lOiBpbnZpdGUucm9vbU5hbWUsXG4gICAgICAgICAgICByb29tX2F2YXRhcl91cmw6IGludml0ZS5yb29tQXZhdGFyVXJsLFxuICAgICAgICAgICAgaW52aXRlcl9uYW1lOiBpbnZpdGUuaW52aXRlck5hbWUsXG4gICAgICAgIH07XG4gICAgfVxufVxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7OztBQVFBLElBQUFBLE9BQUEsR0FBQUMsc0JBQUEsQ0FBQUMsT0FBQTtBQUNBLElBQUFDLElBQUEsR0FBQUQsT0FBQTtBQUFpQyxTQUFBRSxRQUFBQyxDQUFBLEVBQUFDLENBQUEsUUFBQUMsQ0FBQSxHQUFBQyxNQUFBLENBQUFDLElBQUEsQ0FBQUosQ0FBQSxPQUFBRyxNQUFBLENBQUFFLHFCQUFBLFFBQUFDLENBQUEsR0FBQUgsTUFBQSxDQUFBRSxxQkFBQSxDQUFBTCxDQUFBLEdBQUFDLENBQUEsS0FBQUssQ0FBQSxHQUFBQSxDQUFBLENBQUFDLE1BQUEsV0FBQU4sQ0FBQSxXQUFBRSxNQUFBLENBQUFLLHdCQUFBLENBQUFSLENBQUEsRUFBQUMsQ0FBQSxFQUFBUSxVQUFBLE9BQUFQLENBQUEsQ0FBQVEsSUFBQSxDQUFBQyxLQUFBLENBQUFULENBQUEsRUFBQUksQ0FBQSxZQUFBSixDQUFBO0FBQUEsU0FBQVUsY0FBQVosQ0FBQSxhQUFBQyxDQUFBLE1BQUFBLENBQUEsR0FBQVksU0FBQSxDQUFBQyxNQUFBLEVBQUFiLENBQUEsVUFBQUMsQ0FBQSxXQUFBVyxTQUFBLENBQUFaLENBQUEsSUFBQVksU0FBQSxDQUFBWixDQUFBLFFBQUFBLENBQUEsT0FBQUYsT0FBQSxDQUFBSSxNQUFB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