UNPKG

matrix-react-sdk

Version:
90 lines (87 loc) 15.4 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.default = void 0; var _PermalinkConstructor = _interopRequireWildcard(require("./PermalinkConstructor")); function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function (e) { return e ? t : r; })(e); } function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != typeof e && "function" != typeof e) return { default: e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && {}.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n.default = e, t && t.set(e, n), n; } /* 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. */ /** * Generates matrix: scheme permalinks */ class MatrixSchemePermalinkConstructor extends _PermalinkConstructor.default { constructor() { super(); } encodeEntity(entity) { if (entity[0] === "!") { return `roomid/${entity.slice(1)}`; } else if (entity[0] === "#") { return `r/${entity.slice(1)}`; } else if (entity[0] === "@") { return `u/${entity.slice(1)}`; } else if (entity[0] === "$") { return `e/${entity.slice(1)}`; } throw new Error("Cannot encode entity: " + entity); } forEvent(roomId, eventId, serverCandidates) { return `matrix:${this.encodeEntity(roomId)}` + `/${this.encodeEntity(eventId)}${this.encodeServerCandidates(serverCandidates)}`; } forRoom(roomIdOrAlias, serverCandidates) { return `matrix:${this.encodeEntity(roomIdOrAlias)}${this.encodeServerCandidates(serverCandidates)}`; } forUser(userId) { return `matrix:${this.encodeEntity(userId)}`; } forEntity(entityId) { return `matrix:${this.encodeEntity(entityId)}`; } isPermalinkHost(testHost) { // TODO: Change API signature to accept the URL for checking return testHost === ""; } encodeServerCandidates(candidates) { if (!candidates || candidates.length === 0) return ""; return `?via=${candidates.map(c => encodeURIComponent(c)).join("&via=")}`; } parsePermalink(fullUrl) { if (!fullUrl || !fullUrl.startsWith("matrix:")) { throw new Error("Does not appear to be a permalink"); } const url = new URL(fullUrl); const parts = url.pathname.split("/"); const identifier = parts[0]; const entityNoSigil = parts[1]; if (identifier === "u") { // Probably a user, no further parsing needed. return _PermalinkConstructor.PermalinkParts.forUser(`@${entityNoSigil}`); } else if (identifier === "r" || identifier === "roomid") { const sigil = identifier === "r" ? "#" : "!"; if (parts.length === 2) { // room without event permalink const [roomId, query = ""] = entityNoSigil.split("?"); const via = query.split(/&?via=/g).filter(p => !!p); return _PermalinkConstructor.PermalinkParts.forRoom(`${sigil}${roomId}`, via); } if (parts[2] === "e") { // event permalink const eventIdAndQuery = parts.length > 3 ? parts.slice(3).join("/") : ""; const [eventId, query = ""] = eventIdAndQuery.split("?"); const via = query.split(/&?via=/g).filter(p => !!p); return _PermalinkConstructor.PermalinkParts.forEvent(`${sigil}${entityNoSigil}`, `$${eventId}`, via); } throw new Error("Faulty room permalink"); } else { throw new Error("Unknown entity type in permalink"); } } } exports.default = MatrixSchemePermalinkConstructor; //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfUGVybWFsaW5rQ29uc3RydWN0b3IiLCJfaW50ZXJvcFJlcXVpcmVXaWxkY2FyZCIsInJlcXVpcmUiLCJfZ2V0UmVxdWlyZVdpbGRjYXJkQ2FjaGUiLCJlIiwiV2Vha01hcCIsInIiLCJ0IiwiX19lc01vZHVsZSIsImRlZmF1bHQiLCJoYXMiLCJnZXQiLCJuIiwiX19wcm90b19fIiwiYSIsIk9iamVjdCIsImRlZmluZVByb3BlcnR5IiwiZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yIiwidSIsImhhc093blByb3BlcnR5IiwiY2FsbCIsImkiLCJzZXQiLCJNYXRyaXhTY2hlbWVQZXJtYWxpbmtDb25zdHJ1Y3RvciIsIlBlcm1hbGlua0NvbnN0cnVjdG9yIiwiY29uc3RydWN0b3IiLCJlbmNvZGVFbnRpdHkiLCJlbnRpdHkiLCJzbGljZSIsIkVycm9yIiwiZm9yRXZlbnQiLCJyb29tSWQiLCJldmVudElkIiwic2VydmVyQ2FuZGlkYXRlcyIsImVuY29kZVNlcnZlckNhbmRpZGF0ZXMiLCJmb3JSb29tIiwicm9vbUlkT3JBbGlhcyIsImZvclVzZXIiLCJ1c2VySWQiLCJmb3JFbnRpdHkiLCJlbnRpdHlJZCIsImlzUGVybWFsaW5rSG9zdCIsInRlc3RIb3N0IiwiY2FuZGlkYXRlcyIsImxlbmd0aCIsIm1hcCIsImMiLCJlbmNvZGVVUklDb21wb25lbnQiLCJqb2luIiwicGFyc2VQZXJtYWxpbmsiLCJmdWxsVXJsIiwic3RhcnRzV2l0aCIsInVybCIsIlVSTCIsInBhcnRzIiwicGF0aG5hbWUiLCJzcGxpdCIsImlkZW50aWZpZXIiLCJlbnRpdHlOb1NpZ2lsIiwiUGVybWFsaW5rUGFydHMiLCJzaWdpbCIsInF1ZXJ5IiwidmlhIiwiZmlsdGVyIiwicCIsImV2ZW50SWRBbmRRdWVyeSIsImV4cG9ydHMiXSwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvdXRpbHMvcGVybWFsaW5rcy9NYXRyaXhTY2hlbWVQZXJtYWxpbmtDb25zdHJ1Y3Rvci50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKlxuQ29weXJpZ2h0IDIwMjQgTmV3IFZlY3RvciBMdGQuXG5Db3B5cmlnaHQgMjAyMiBUaGUgTWF0cml4Lm9yZyBGb3VuZGF0aW9uIEMuSS5DLlxuXG5TUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQUdQTC0zLjAtb25seSBPUiBHUEwtMy4wLW9ubHlcblBsZWFzZSBzZWUgTElDRU5TRSBmaWxlcyBpbiB0aGUgcmVwb3NpdG9yeSByb290IGZvciBmdWxsIGRldGFpbHMuXG4qL1xuXG5pbXBvcnQgUGVybWFsaW5rQ29uc3RydWN0b3IsIHsgUGVybWFsaW5rUGFydHMgfSBmcm9tIFwiLi9QZXJtYWxpbmtDb25zdHJ1Y3RvclwiO1xuXG4vKipcbiAqIEdlbmVyYXRlcyBtYXRyaXg6IHNjaGVtZSBwZXJtYWxpbmtzXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIE1hdHJpeFNjaGVtZVBlcm1hbGlua0NvbnN0cnVjdG9yIGV4dGVuZHMgUGVybWFsaW5rQ29uc3RydWN0b3Ige1xuICAgIHB1YmxpYyBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgc3VwZXIoKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGVuY29kZUVudGl0eShlbnRpdHk6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgICAgIGlmIChlbnRpdHlbMF0gPT09IFwiIVwiKSB7XG4gICAgICAgICAgICByZXR1cm4gYHJvb21pZC8ke2VudGl0eS5zbGljZSgxKX1gO1xuICAgICAgICB9IGVsc2UgaWYgKGVudGl0eVswXSA9PT0gXCIjXCIpIHtcbiAgICAgICAgICAgIHJldHVybiBgci8ke2VudGl0eS5zbGljZSgxKX1gO1xuICAgICAgICB9IGVsc2UgaWYgKGVudGl0eVswXSA9PT0gXCJAXCIpIHtcbiAgICAgICAgICAgIHJldHVybiBgdS8ke2VudGl0eS5zbGljZSgxKX1gO1xuICAgICAgICB9IGVsc2UgaWYgKGVudGl0eVswXSA9PT0gXCIkXCIpIHtcbiAgICAgICAgICAgIHJldHVybiBgZS8ke2VudGl0eS5zbGljZSgxKX1gO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiQ2Fubm90IGVuY29kZSBlbnRpdHk6IFwiICsgZW50aXR5KTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZm9yRXZlbnQocm9vbUlkOiBzdHJpbmcsIGV2ZW50SWQ6IHN0cmluZywgc2VydmVyQ2FuZGlkYXRlczogc3RyaW5nW10pOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgYG1hdHJpeDoke3RoaXMuZW5jb2RlRW50aXR5KHJvb21JZCl9YCArXG4gICAgICAgICAgICBgLyR7dGhpcy5lbmNvZGVFbnRpdHkoZXZlbnRJZCl9JHt0aGlzLmVuY29kZVNlcnZlckNhbmRpZGF0ZXMoc2VydmVyQ2FuZGlkYXRlcyl9YFxuICAgICAgICApO1xuICAgIH1cblxuICAgIHB1YmxpYyBmb3JSb29tKHJvb21JZE9yQWxpYXM6IHN0cmluZywgc2VydmVyQ2FuZGlkYXRlczogc3RyaW5nW10pOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gYG1hdHJpeDoke3RoaXMuZW5jb2RlRW50aXR5KHJvb21JZE9yQWxpYXMpfSR7dGhpcy5lbmNvZGVTZXJ2ZXJDYW5kaWRhdGVzKHNlcnZlckNhbmRpZGF0ZXMpfWA7XG4gICAgfVxuXG4gICAgcHVibGljIGZvclVzZXIodXNlcklkOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gYG1hdHJpeDoke3RoaXMuZW5jb2RlRW50aXR5KHVzZXJJZCl9YDtcbiAgICB9XG5cbiAgICBwdWJsaWMgZm9yRW50aXR5KGVudGl0eUlkOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gYG1hdHJpeDoke3RoaXMuZW5jb2RlRW50aXR5KGVudGl0eUlkKX1gO1xuICAgIH1cblxuICAgIHB1YmxpYyBpc1Blcm1hbGlua0hvc3QodGVzdEhvc3Q6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgICAgICAvLyBUT0RPOiBDaGFuZ2UgQVBJIHNpZ25hdHVyZSB0byBhY2NlcHQgdGhlIFVSTCBmb3IgY2hlY2tpbmdcbiAgICAgICAgcmV0dXJuIHRlc3RIb3N0ID09PSBcIlwiO1xuICAgIH1cblxuICAgIHB1YmxpYyBlbmNvZGVTZXJ2ZXJDYW5kaWRhdGVzKGNhbmRpZGF0ZXM6IHN0cmluZ1tdKTogc3RyaW5nIHtcbiAgICAgICAgaWYgKCFjYW5kaWRhdGVzIHx8IGNhbmRpZGF0ZXMubGVuZ3RoID09PSAwKSByZXR1cm4gXCJcIjtcbiAgICAgICAgcmV0dXJuIGA/dmlhPSR7Y2FuZGlkYXRlcy5tYXAoKGMpID0+IGVuY29kZVVSSUNvbXBvbmVudChjKSkuam9pbihcIiZ2aWE9XCIpfWA7XG4gICAgfVxuXG4gICAgcHVibGljIHBhcnNlUGVybWFsaW5rKGZ1bGxVcmw6IHN0cmluZyk6IFBlcm1hbGlua1BhcnRzIHtcbiAgICAgICAgaWYgKCFmdWxsVXJsIHx8ICFmdWxsVXJsLnN0YXJ0c1dpdGgoXCJtYXRyaXg6XCIpKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJEb2VzIG5vdCBhcHBlYXIgdG8gYmUgYSBwZXJtYWxpbmtcIik7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCB1cmwgPSBuZXcgVVJMKGZ1bGxVcmwpO1xuICAgICAgICBjb25zdCBwYXJ0cyA9IHVybC5wYXRobmFtZS5zcGxpdChcIi9cIik7XG5cbiAgICAgICAgY29uc3QgaWRlbnRpZmllciA9IHBhcnRzWzBdO1xuICAgICAgICBjb25zdCBlbnRpdHlOb1NpZ2lsID0gcGFydHNbMV07XG4gICAgICAgIGlmIChpZGVudGlmaWVyID09PSBcInVcIikge1xuICAgICAgICAgICAgLy8gUHJvYmFibHkgYSB1c2VyLCBubyBmdXJ0aGVyIHBhcnNpbmcgbmVlZGVkLlxuICAgICAgICAgICAgcmV0dXJuIFBlcm1hbGlua1BhcnRzLmZvclVzZXIoYEAke2VudGl0eU5vU2lnaWx9YCk7XG4gICAgICAgIH0gZWxzZSBpZiAoaWRlbnRpZmllciA9PT0gXCJyXCIgfHwgaWRlbnRpZmllciA9PT0gXCJyb29taWRcIikge1xuICAgICAgICAgICAgY29uc3Qgc2lnaWwgPSBpZGVudGlmaWVyID09PSBcInJcIiA/IFwiI1wiIDogXCIhXCI7XG5cbiAgICAgICAgICAgIGlmIChwYXJ0cy5sZW5ndGggPT09IDIpIHtcbiAgICAgICAgICAgICAgICAvLyByb29tIHdpdGhvdXQgZXZlbnQgcGVybWFsaW5rXG4gICAgICAgICAgICAgICAgY29uc3QgW3Jvb21JZCwgcXVlcnkgPSBcIlwiXSA9IGVudGl0eU5vU2lnaWwuc3BsaXQoXCI/XCIpO1xuICAgICAgICAgICAgICAgIGNvbnN0IHZpYSA9IHF1ZXJ5LnNwbGl0KC8mP3ZpYT0vZykuZmlsdGVyKChwKSA9PiAhIXApO1xuICAgICAgICAgICAgICAgIHJldHVybiBQZXJtYWxpbmtQYXJ0cy5mb3JSb29tKGAke3NpZ2lsfSR7cm9vbUlkfWAsIHZpYSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChwYXJ0c1syXSA9PT0gXCJlXCIpIHtcbiAgICAgICAgICAgICAgICAvLyBldmVudCBwZXJtYWxpbmtcbiAgICAgICAgICAgICAgICBjb25zdCBldmVudElkQW5kUXVlcnkgPSBwYXJ0cy5sZW5ndGggPiAzID8gcGFydHMuc2xpY2UoMykuam9pbihcIi9cIikgOiBcIlwiO1xuICAgICAgICAgICAgICAgIGNvbnN0IFtldmVudElkLCBxdWVyeSA9IFwiXCJdID0gZXZlbnRJZEFuZFF1ZXJ5LnNwbGl0KFwiP1wiKTtcbiAgICAgICAgICAgICAgICBjb25zdCB2aWEgPSBxdWVyeS5zcGxpdCgvJj92aWE9L2cpLmZpbHRlcigocCkgPT4gISFwKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gUGVybWFsaW5rUGFydHMuZm9yRXZlbnQoYCR7c2lnaWx9JHtlbnRpdHlOb1NpZ2lsfWAsIGAkJHtldmVudElkfWAsIHZpYSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIkZhdWx0eSByb29tIHBlcm1hbGlua1wiKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIlVua25vd24gZW50aXR5IHR5cGUgaW4gcGVybWFsaW5rXCIpO1xuICAgICAgICB9XG4gICAgfVxufVxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7QUFRQSxJQUFBQSxxQkFBQSxHQUFBQyx1QkFBQSxDQUFBQyxPQUFBO0FBQThFLFNBQUFDLHlCQUFBQyxDQUFBLDZCQUFBQyxPQUFBLG1CQUFBQyxDQUFBLE9BQUFELE9BQUEsSUFBQUUsQ0FBQSxPQUFBRixPQUFBLFlBQUFGLHdCQUFBLFlBQUFBLENBQUFDLENBQUEsV0FBQUEsQ0FBQSxHQUFBRyxDQUFBLEdBQUFELENBQUEsS0FBQUYsQ0FBQTtBQUFBLFNBQUFILHdCQUFBRyxDQUFBLEVBQUFFLENBQUEsU0FBQUEsQ0FBQSxJQUFBRixDQUFBLElBQUFBLENBQUEsQ0FBQUksVUFBQSxTQUFBSixDQUFBLGVBQUFBLENBQUEsdUJBQUFBLENBQUEseUJBQUFBLENBQUEsV0FBQUssT0FBQSxFQUFBTCxDQUFBLFFBQUFHLENBQUEsR0FBQUosd0JBQUEsQ0FBQUcsQ0FBQSxPQUFBQyxDQUFBLElBQUFBLENBQUEsQ0FBQUcsR0FBQSxDQUFBTixDQUFBLFVBQUFHLENBQUEsQ0FBQUksR0FBQSxDQUFBUCxDQUFBLE9BQUFRLENBQUEsS0FBQUMsU0FBQSxVQUFBQyxDQUFBLEdBQUFDLE1BQUEsQ0FBQUMsY0FBQSxJQUFBRCxNQUFBLENBQUFFLHdCQUFBLFdBQUFDLENBQUEsSUFBQWQsQ0FBQSxvQkFBQWMsQ0FBQSxPQUFBQyxjQUFBLENBQUFDLElBQUEsQ0FBQWhCLENBQUEsRUFBQWMsQ0FBQSxTQUFBRyxDQUFBLEdBQUFQLENBQUEsR0FBQUMsTUFBQSxDQUFBRSx3QkFBQSxDQUFBYixDQUFBLEVBQUFjLENBQUEsVUFBQUcsQ0FBQSxLQUFBQSxDQUFBLENBQUFWLEdBQUEsSUFBQVUsQ0FBQSxDQUFBQyxHQUFBLElBQUFQLE1BQUEsQ0FBQUMsY0FBQSxDQUFBSixDQUFBLEVBQUFNLENBQUEsRUFBQUcsQ0FBQSxJQUFB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