2021-07-28 16:15:52 +03:00
|
|
|
import initMatrix from '../client/initMatrix';
|
|
|
|
|
|
|
|
const WELL_KNOWN_URI = '/.well-known/matrix/client';
|
|
|
|
|
2021-11-06 11:45:35 +02:00
|
|
|
async function getBaseUrl(servername) {
|
|
|
|
let protocol = 'https://';
|
|
|
|
if (servername.match(/^https?:\/\//) !== null) protocol = '';
|
|
|
|
const serverDiscoveryUrl = `${protocol}${servername}${WELL_KNOWN_URI}`;
|
2021-07-28 16:15:52 +03:00
|
|
|
try {
|
2021-11-06 11:45:35 +02:00
|
|
|
const result = await (await fetch(serverDiscoveryUrl, { method: 'GET' })).json();
|
2021-07-28 16:15:52 +03:00
|
|
|
|
2021-11-06 11:45:35 +02:00
|
|
|
const baseUrl = result?.['m.homeserver']?.base_url;
|
|
|
|
if (baseUrl === undefined) throw new Error();
|
|
|
|
return baseUrl;
|
2021-07-28 16:15:52 +03:00
|
|
|
} catch (e) {
|
2021-11-06 11:45:35 +02:00
|
|
|
throw new Error(`${protocol}${servername}`);
|
2021-07-28 16:15:52 +03:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
function getUsername(userId) {
|
|
|
|
const mx = initMatrix.matrixClient;
|
|
|
|
const user = mx.getUser(userId);
|
|
|
|
if (user === null) return userId;
|
|
|
|
let username = user.displayName;
|
|
|
|
if (typeof username === 'undefined') {
|
|
|
|
username = userId;
|
|
|
|
}
|
|
|
|
return username;
|
|
|
|
}
|
|
|
|
|
2021-08-25 11:36:13 +03:00
|
|
|
function getUsernameOfRoomMember(roomMember) {
|
|
|
|
return roomMember.name || roomMember.userId;
|
|
|
|
}
|
|
|
|
|
2021-07-28 16:15:52 +03:00
|
|
|
async function isRoomAliasAvailable(alias) {
|
|
|
|
try {
|
|
|
|
const myUserId = initMatrix.matrixClient.getUserId();
|
|
|
|
const myServer = myUserId.slice(myUserId.indexOf(':') + 1);
|
|
|
|
const result = await initMatrix.matrixClient.resolveRoomAlias(alias);
|
|
|
|
const aliasIsRegisteredOnMyServer = typeof result.servers.find((server) => server === myServer) === 'string';
|
|
|
|
|
|
|
|
if (aliasIsRegisteredOnMyServer) return false;
|
|
|
|
return true;
|
|
|
|
} catch (e) {
|
|
|
|
if (e.errcode === 'M_NOT_FOUND') return true;
|
|
|
|
if (e.errcode === 'M_INVALID_PARAM') throw new Error(e);
|
|
|
|
return false;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2021-10-18 18:25:52 +03:00
|
|
|
function getPowerLabel(powerLevel) {
|
|
|
|
if (powerLevel > 9000) return 'Goku';
|
|
|
|
if (powerLevel > 100) return 'Founder';
|
|
|
|
if (powerLevel === 100) return 'Admin';
|
|
|
|
if (powerLevel >= 50) return 'Mod';
|
|
|
|
return null;
|
|
|
|
}
|
|
|
|
|
2021-12-03 15:02:10 +02:00
|
|
|
function parseReply(rawBody) {
|
|
|
|
if (rawBody?.indexOf('>') !== 0) return null;
|
|
|
|
let body = rawBody.slice(rawBody.indexOf('<') + 1);
|
|
|
|
const user = body.slice(0, body.indexOf('>'));
|
|
|
|
|
|
|
|
body = body.slice(body.indexOf('>') + 2);
|
|
|
|
const replyBody = body.slice(0, body.indexOf('\n\n'));
|
|
|
|
body = body.slice(body.indexOf('\n\n') + 2);
|
|
|
|
|
|
|
|
if (user === '') return null;
|
|
|
|
|
|
|
|
const isUserId = user.match(/^@.+:.+/);
|
|
|
|
|
|
|
|
return {
|
|
|
|
userId: isUserId ? user : null,
|
|
|
|
displayName: isUserId ? null : user,
|
|
|
|
replyBody,
|
|
|
|
body,
|
|
|
|
};
|
|
|
|
}
|
|
|
|
|
2021-07-28 16:15:52 +03:00
|
|
|
export {
|
2021-08-25 11:36:13 +03:00
|
|
|
getBaseUrl, getUsername, getUsernameOfRoomMember,
|
2021-12-03 15:02:10 +02:00
|
|
|
isRoomAliasAvailable, getPowerLabel, parseReply,
|
2021-07-28 16:15:52 +03:00
|
|
|
};
|