matrix-react-sdk
Version:
SDK for matrix.org using React
84 lines (79 loc) • 11.3 kB
JavaScript
;
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.startDm = startDm;
var _actions = require("../../dispatcher/actions");
var _directMessages = require("../direct-messages");
var _DMRoomMap = _interopRequireDefault(require("../DMRoomMap"));
var _isLocalRoom = require("../localRoom/isLocalRoom");
var _findDMForUser = require("./findDMForUser");
var _dispatcher = _interopRequireDefault(require("../../dispatcher/dispatcher"));
var _UserAddress = require("../../UserAddress");
var _createRoom = _interopRequireDefault(require("../../createRoom"));
/*
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.
*/
/**
* Start a DM.
*
* @returns {Promise<string | null} Resolves to the room id.
*/
async function startDm(client, targets, showSpinner = true) {
const targetIds = targets.map(t => t.userId);
// Check if there is already a DM with these people and reuse it if possible.
let existingRoom;
if (targetIds.length === 1) {
existingRoom = (0, _findDMForUser.findDMForUser)(client, targetIds[0]);
} else {
existingRoom = _DMRoomMap.default.shared().getDMRoomForIdentifiers(targetIds) ?? undefined;
}
if (existingRoom && !(0, _isLocalRoom.isLocalRoom)(existingRoom)) {
_dispatcher.default.dispatch({
action: _actions.Action.ViewRoom,
room_id: existingRoom.roomId,
should_peek: false,
joining: false,
metricsTrigger: "MessageUser"
});
return Promise.resolve(existingRoom.roomId);
}
const createRoomOptions = {
inlineErrors: true
};
if (await (0, _directMessages.determineCreateRoomEncryptionOption)(client, targets)) {
createRoomOptions.encryption = true;
}
// Check if it's a traditional DM and create the room if required.
// TODO: [Canonical DMs] Remove this check and instead just create the multi-person DM
const isSelf = targetIds.length === 1 && targetIds[0] === client.getUserId();
if (targetIds.length === 1 && !isSelf) {
createRoomOptions.dmUserId = targetIds[0];
}
if (targetIds.length > 1) {
createRoomOptions.createOpts = targetIds.reduce((roomOptions, address) => {
const type = (0, _UserAddress.getAddressType)(address);
if (type === "email") {
const invite = {
id_server: client.getIdentityServerUrl(true),
medium: "email",
address
};
roomOptions.invite_3pid.push(invite);
} else if (type === "mx-user-id") {
roomOptions.invite.push(address);
}
return roomOptions;
}, {
invite: [],
invite_3pid: []
});
}
createRoomOptions.spinner = showSpinner;
return (0, _createRoom.default)(client, createRoomOptions);
}
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfYWN0aW9ucyIsInJlcXVpcmUiLCJfZGlyZWN0TWVzc2FnZXMiLCJfRE1Sb29tTWFwIiwiX2ludGVyb3BSZXF1aXJlRGVmYXVsdCIsIl9pc0xvY2FsUm9vbSIsIl9maW5kRE1Gb3JVc2VyIiwiX2Rpc3BhdGNoZXIiLCJfVXNlckFkZHJlc3MiLCJfY3JlYXRlUm9vbSIsInN0YXJ0RG0iLCJjbGllbnQiLCJ0YXJnZXRzIiwic2hvd1NwaW5uZXIiLCJ0YXJnZXRJZHMiLCJtYXAiLCJ0IiwidXNlcklkIiwiZXhpc3RpbmdSb29tIiwibGVuZ3RoIiwiZmluZERNRm9yVXNlciIsIkRNUm9vbU1hcCIsInNoYXJlZCIsImdldERNUm9vbUZvcklkZW50aWZpZXJzIiwidW5kZWZpbmVkIiwiaXNMb2NhbFJvb20iLCJkaXMiLCJkaXNwYXRjaCIsImFjdGlvbiIsIkFjdGlvbiIsIlZpZXdSb29tIiwicm9vbV9pZCIsInJvb21JZCIsInNob3VsZF9wZWVrIiwiam9pbmluZyIsIm1ldHJpY3NUcmlnZ2VyIiwiUHJvbWlzZSIsInJlc29sdmUiLCJjcmVhdGVSb29tT3B0aW9ucyIsImlubGluZUVycm9ycyIsImRldGVybWluZUNyZWF0ZVJvb21FbmNyeXB0aW9uT3B0aW9uIiwiZW5jcnlwdGlvbiIsImlzU2VsZiIsImdldFVzZXJJZCIsImRtVXNlcklkIiwiY3JlYXRlT3B0cyIsInJlZHVjZSIsInJvb21PcHRpb25zIiwiYWRkcmVzcyIsInR5cGUiLCJnZXRBZGRyZXNzVHlwZSIsImludml0ZSIsImlkX3NlcnZlciIsImdldElkZW50aXR5U2VydmVyVXJsIiwibWVkaXVtIiwiaW52aXRlXzNwaWQiLCJwdXNoIiwic3Bpbm5lciIsImNyZWF0ZVJvb20iXSwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvdXRpbHMvZG0vc3RhcnREbS50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKlxuQ29weXJpZ2h0IDIwMjQgTmV3IFZlY3RvciBMdGQuXG5Db3B5cmlnaHQgMjAyMiBUaGUgTWF0cml4Lm9yZyBGb3VuZGF0aW9uIEMuSS5DLlxuXG5TUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQUdQTC0zLjAtb25seSBPUiBHUEwtMy4wLW9ubHlcblBsZWFzZSBzZWUgTElDRU5TRSBmaWxlcyBpbiB0aGUgcmVwb3NpdG9yeSByb290IGZvciBmdWxsIGRldGFpbHMuXG4qL1xuXG5pbXBvcnQgeyBJSW52aXRlM1BJRCwgTWF0cml4Q2xpZW50LCBSb29tIH0gZnJvbSBcIm1hdHJpeC1qcy1zZGsvc3JjL21hdHJpeFwiO1xuaW1wb3J0IHsgT3B0aW9uYWwgfSBmcm9tIFwibWF0cml4LWV2ZW50cy1zZGtcIjtcblxuaW1wb3J0IHsgQWN0aW9uIH0gZnJvbSBcIi4uLy4uL2Rpc3BhdGNoZXIvYWN0aW9uc1wiO1xuaW1wb3J0IHsgVmlld1Jvb21QYXlsb2FkIH0gZnJvbSBcIi4uLy4uL2Rpc3BhdGNoZXIvcGF5bG9hZHMvVmlld1Jvb21QYXlsb2FkXCI7XG5pbXBvcnQgeyBkZXRlcm1pbmVDcmVhdGVSb29tRW5jcnlwdGlvbk9wdGlvbiwgTWVtYmVyIH0gZnJvbSBcIi4uL2RpcmVjdC1tZXNzYWdlc1wiO1xuaW1wb3J0IERNUm9vbU1hcCBmcm9tIFwiLi4vRE1Sb29tTWFwXCI7XG5pbXBvcnQgeyBpc0xvY2FsUm9vbSB9IGZyb20gXCIuLi9sb2NhbFJvb20vaXNMb2NhbFJvb21cIjtcbmltcG9ydCB7IGZpbmRETUZvclVzZXIgfSBmcm9tIFwiLi9maW5kRE1Gb3JVc2VyXCI7XG5pbXBvcnQgZGlzIGZyb20gXCIuLi8uLi9kaXNwYXRjaGVyL2Rpc3BhdGNoZXJcIjtcbmltcG9ydCB7IGdldEFkZHJlc3NUeXBlIH0gZnJvbSBcIi4uLy4uL1VzZXJBZGRyZXNzXCI7XG5pbXBvcnQgY3JlYXRlUm9vbSwgeyBJT3B0cyB9IGZyb20gXCIuLi8uLi9jcmVhdGVSb29tXCI7XG5cbi8qKlxuICogU3RhcnQgYSBETS5cbiAqXG4gKiBAcmV0dXJucyB7UHJvbWlzZTxzdHJpbmcgfCBudWxsfSBSZXNvbHZlcyB0byB0aGUgcm9vbSBpZC5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHN0YXJ0RG0oY2xpZW50OiBNYXRyaXhDbGllbnQsIHRhcmdldHM6IE1lbWJlcltdLCBzaG93U3Bpbm5lciA9IHRydWUpOiBQcm9taXNlPHN0cmluZyB8IG51bGw+IHtcbiAgICBjb25zdCB0YXJnZXRJZHMgPSB0YXJnZXRzLm1hcCgodCkgPT4gdC51c2VySWQpO1xuXG4gICAgLy8gQ2hlY2sgaWYgdGhlcmUgaXMgYWxyZWFkeSBhIERNIHdpdGggdGhlc2UgcGVvcGxlIGFuZCByZXVzZSBpdCBpZiBwb3NzaWJsZS5cbiAgICBsZXQgZXhpc3RpbmdSb29tOiBPcHRpb25hbDxSb29tPjtcbiAgICBpZiAodGFyZ2V0SWRzLmxlbmd0aCA9PT0gMSkge1xuICAgICAgICBleGlzdGluZ1Jvb20gPSBmaW5kRE1Gb3JVc2VyKGNsaWVudCwgdGFyZ2V0SWRzWzBdKTtcbiAgICB9IGVsc2Uge1xuICAgICAgICBleGlzdGluZ1Jvb20gPSBETVJvb21NYXAuc2hhcmVkKCkuZ2V0RE1Sb29tRm9ySWRlbnRpZmllcnModGFyZ2V0SWRzKSA/PyB1bmRlZmluZWQ7XG4gICAgfVxuICAgIGlmIChleGlzdGluZ1Jvb20gJiYgIWlzTG9jYWxSb29tKGV4aXN0aW5nUm9vbSkpIHtcbiAgICAgICAgZGlzLmRpc3BhdGNoPFZpZXdSb29tUGF5bG9hZD4oe1xuICAgICAgICAgICAgYWN0aW9uOiBBY3Rpb24uVmlld1Jvb20sXG4gICAgICAgICAgICByb29tX2lkOiBleGlzdGluZ1Jvb20ucm9vbUlkLFxuICAgICAgICAgICAgc2hvdWxkX3BlZWs6IGZhbHNlLFxuICAgICAgICAgICAgam9pbmluZzogZmFsc2UsXG4gICAgICAgICAgICBtZXRyaWNzVHJpZ2dlcjogXCJNZXNzYWdlVXNlclwiLFxuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShleGlzdGluZ1Jvb20ucm9vbUlkKTtcbiAgICB9XG5cbiAgICBjb25zdCBjcmVhdGVSb29tT3B0aW9uczogSU9wdHMgPSB7IGlubGluZUVycm9yczogdHJ1ZSB9O1xuXG4gICAgaWYgKGF3YWl0IGRldGVybWluZUNyZWF0ZVJvb21FbmNyeXB0aW9uT3B0aW9uKGNsaWVudCwgdGFyZ2V0cykpIHtcbiAgICAgICAgY3JlYXRlUm9vbU9wdGlvbnMuZW5jcnlwdGlvbiA9IHRydWU7XG4gICAgfVxuXG4gICAgLy8gQ2hlY2sgaWYgaXQncyBhIHRyYWRpdGlvbmFsIERNIGFuZCBjcmVhdGUgdGhlIHJvb20gaWYgcmVxdWlyZWQuXG4gICAgLy8gVE9ETzogW0Nhbm9uaWNhbCBETXNdIFJlbW92ZSB0aGlzIGNoZWNrIGFuZCBpbnN0ZWFkIGp1c3QgY3JlYXRlIHRoZSBtdWx0aS1wZXJzb24gRE1cbiAgICBjb25zdCBpc1NlbGYgPSB0YXJnZXRJZHMubGVuZ3RoID09PSAxICYmIHRhcmdldElkc1swXSA9PT0gY2xpZW50LmdldFVzZXJJZCgpO1xuICAgIGlmICh0YXJnZXRJZHMubGVuZ3RoID09PSAxICYmICFpc1NlbGYpIHtcbiAgICAgICAgY3JlYXRlUm9vbU9wdGlvbnMuZG1Vc2VySWQgPSB0YXJnZXRJZHNbMF07XG4gICAgfVxuXG4gICAgaWYgKHRhcmdldElkcy5sZW5ndGggPiAxKSB7XG4gICAgICAgIGNyZWF0ZVJvb21PcHRpb25zLmNyZWF0ZU9wdHMgPSB0YXJnZXRJZHMucmVkdWNlPHtcbiAgICAgICAgICAgIGludml0ZV8zcGlkOiBJSW52aXRlM1BJRFtdO1xuICAgICAgICAgICAgaW52aXRlOiBzdHJpbmdbXTtcbiAgICAgICAgfT4oXG4gICAgICAgICAgICAocm9vbU9wdGlvbnMsIGFkZHJlc3MpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCB0eXBlID0gZ2V0QWRkcmVzc1R5cGUoYWRkcmVzcyk7XG4gICAgICAgICAgICAgICAgaWYgKHR5cGUgPT09IFwiZW1haWxcIikge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBpbnZpdGU6IElJbnZpdGUzUElEID0ge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWRfc2VydmVyOiBjbGllbnQuZ2V0SWRlbnRpdHlTZXJ2ZXJVcmwodHJ1ZSkhLFxuICAgICAgICAgICAgICAgICAgICAgICAgbWVkaXVtOiBcImVtYWlsXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICBhZGRyZXNzLFxuICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICByb29tT3B0aW9ucy5pbnZpdGVfM3BpZC5wdXNoKGludml0ZSk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmICh0eXBlID09PSBcIm14LXVzZXItaWRcIikge1xuICAgICAgICAgICAgICAgICAgICByb29tT3B0aW9ucy5pbnZpdGUucHVzaChhZGRyZXNzKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIHJvb21PcHRpb25zO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHsgaW52aXRlOiBbXSwgaW52aXRlXzNwaWQ6IFtdIH0sXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgY3JlYXRlUm9vbU9wdGlvbnMuc3Bpbm5lciA9IHNob3dTcGlubmVyO1xuICAgIHJldHVybiBjcmVhdGVSb29tKGNsaWVudCwgY3JlYXRlUm9vbU9wdGlvbnMpO1xufVxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7O0FBV0EsSUFBQUEsUUFBQSxHQUFBQyxPQUFBO0FBRUEsSUFBQUMsZUFBQSxHQUFBRCxPQUFBO0FBQ0EsSUFBQUUsVUFBQSxHQUFBQyxzQkFBQSxDQUFBSCxPQUFBO0FBQ0EsSUFBQUksWUFBQSxHQUFBSixPQUFBO0FBQ0EsSUFBQUssY0FBQSxHQUFBTCxPQUFBO0FBQ0EsSUFBQU0sV0FBQSxHQUFBSCxzQkFBQSxDQUFBSCxPQUFBO0FBQ0EsSUFBQU8sWUFBQSxHQUFBUCxPQUFBO0FBQ0EsSUFBQVEsV0FBQSxHQUFBTCxzQkFBQSxDQUFBSCxPQUFBO0FBbkJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQWVBO0FBQ0E7QUFDQTtBQUNB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