84 lines
2.1 KiB
JavaScript
84 lines
2.1 KiB
JavaScript
'use strict';
|
|
|
|
const assert = require('assert');
|
|
|
|
const urlJoin = require('url-join');
|
|
const { fetchEndpointAsJson } = require('../fetch-endpoint');
|
|
const { traceFunction } = require('../../tracing/trace-utilities');
|
|
|
|
const config = require('../config');
|
|
const matrixServerUrl = config.get('matrixServerUrl');
|
|
assert(matrixServerUrl);
|
|
|
|
async function fetchRoomData(accessToken, roomId) {
|
|
assert(accessToken);
|
|
assert(roomId);
|
|
|
|
const stateNameEndpoint = urlJoin(
|
|
matrixServerUrl,
|
|
`_matrix/client/r0/rooms/${roomId}/state/m.room.name`
|
|
);
|
|
const stateAvatarEndpoint = urlJoin(
|
|
matrixServerUrl,
|
|
`_matrix/client/r0/rooms/${roomId}/state/m.room.avatar`
|
|
);
|
|
const stateHistoryVisibilityEndpoint = urlJoin(
|
|
matrixServerUrl,
|
|
`_matrix/client/r0/rooms/${roomId}/state/m.room.history_visibility`
|
|
);
|
|
const stateJoinRulesEndpoint = urlJoin(
|
|
matrixServerUrl,
|
|
`_matrix/client/r0/rooms/${roomId}/state/m.room.join_rules`
|
|
);
|
|
|
|
const [
|
|
stateNameResDataOutcome,
|
|
stateAvatarResDataOutcome,
|
|
stateHistoryVisibilityResDataOutcome,
|
|
stateJoinRulesResDataOutcome,
|
|
] = await Promise.allSettled([
|
|
fetchEndpointAsJson(stateNameEndpoint, {
|
|
accessToken,
|
|
}),
|
|
fetchEndpointAsJson(stateAvatarEndpoint, {
|
|
accessToken,
|
|
}),
|
|
fetchEndpointAsJson(stateHistoryVisibilityEndpoint, {
|
|
accessToken,
|
|
}),
|
|
fetchEndpointAsJson(stateJoinRulesEndpoint, {
|
|
accessToken,
|
|
}),
|
|
]);
|
|
|
|
let name;
|
|
if (stateNameResDataOutcome.reason === undefined) {
|
|
name = stateNameResDataOutcome.value.name;
|
|
}
|
|
|
|
let avatarUrl;
|
|
if (stateAvatarResDataOutcome.reason === undefined) {
|
|
avatarUrl = stateAvatarResDataOutcome.value.url;
|
|
}
|
|
|
|
let historyVisibility;
|
|
if (stateHistoryVisibilityResDataOutcome.reason === undefined) {
|
|
historyVisibility = stateHistoryVisibilityResDataOutcome.value.history_visibility;
|
|
}
|
|
|
|
let joinRule;
|
|
if (stateJoinRulesResDataOutcome.reason === undefined) {
|
|
joinRule = stateJoinRulesResDataOutcome.value.join_rule;
|
|
}
|
|
|
|
return {
|
|
id: roomId,
|
|
name,
|
|
avatarUrl,
|
|
historyVisibility,
|
|
joinRule,
|
|
};
|
|
}
|
|
|
|
module.exports = traceFunction(fetchRoomData);
|