Changeset View
Changeset View
Standalone View
Standalone View
keyserver/src/responders/website-responders.js
Show All 33 Lines | |||||
import { fetchEntryInfos } from '../fetchers/entry-fetchers.js'; | import { fetchEntryInfos } from '../fetchers/entry-fetchers.js'; | ||||
import { fetchMessageInfos } from '../fetchers/message-fetchers.js'; | import { fetchMessageInfos } from '../fetchers/message-fetchers.js'; | ||||
import { hasAnyNotAcknowledgedPolicies } from '../fetchers/policy-acknowledgment-fetchers.js'; | import { hasAnyNotAcknowledgedPolicies } from '../fetchers/policy-acknowledgment-fetchers.js'; | ||||
import { fetchThreadInfos } from '../fetchers/thread-fetchers.js'; | import { fetchThreadInfos } from '../fetchers/thread-fetchers.js'; | ||||
import { | import { | ||||
fetchCurrentUserInfo, | fetchCurrentUserInfo, | ||||
fetchKnownUserInfos, | fetchKnownUserInfos, | ||||
fetchUserInfos, | |||||
} from '../fetchers/user-fetchers.js'; | } from '../fetchers/user-fetchers.js'; | ||||
import { setNewSession } from '../session/cookies.js'; | import { setNewSession } from '../session/cookies.js'; | ||||
import { Viewer } from '../session/viewer.js'; | import { Viewer } from '../session/viewer.js'; | ||||
import { streamJSON, waitForStream } from '../utils/json-stream.js'; | import { streamJSON, waitForStream } from '../utils/json-stream.js'; | ||||
import { getAppURLFactsFromRequestURL } from '../utils/urls.js'; | import { getAppURLFactsFromRequestURL } from '../utils/urls.js'; | ||||
const { renderToNodeStream } = ReactDOMServer; | const { renderToNodeStream } = ReactDOMServer; | ||||
▲ Show 20 Lines • Show All 88 Lines • ▼ Show 20 Lines | ): Promise<void> { | ||||
try { | try { | ||||
initialNavInfo = navInfoFromURL(req.url, { | initialNavInfo = navInfoFromURL(req.url, { | ||||
now: currentDateInTimeZone(viewer.timeZone), | now: currentDateInTimeZone(viewer.timeZone), | ||||
}); | }); | ||||
} catch (e) { | } catch (e) { | ||||
throw new ServerError(e.message); | throw new ServerError(e.message); | ||||
} | } | ||||
let navInfoUserInfoPromise; | |||||
if ( | |||||
viewer.loggedIn && | |||||
initialNavInfo.tab === 'chat' && | |||||
initialNavInfo.chatMode === 'create' && | |||||
initialNavInfo.selectedUserList && | |||||
initialNavInfo.selectedUserList.length > 0 | |||||
) { | |||||
const userIDs = initialNavInfo.selectedUserList; | |||||
navInfoUserInfoPromise = (async () => { | |||||
const userInfos = {}; | |||||
const fetchedUserInfos = await fetchUserInfos(userIDs); | |||||
for (const userID in fetchedUserInfos) { | |||||
const userInfo = fetchedUserInfos[userID]; | |||||
if (userInfo.username) { | |||||
userInfos[userID] = userInfo; | |||||
} | |||||
} | |||||
return userInfos; | |||||
})(); | |||||
} | |||||
const calendarQuery = { | const calendarQuery = { | ||||
startDate: initialNavInfo.startDate, | startDate: initialNavInfo.startDate, | ||||
endDate: initialNavInfo.endDate, | endDate: initialNavInfo.endDate, | ||||
filters: defaultCalendarFilters, | filters: defaultCalendarFilters, | ||||
}; | }; | ||||
const messageSelectionCriteria = { joinedThreads: true }; | const messageSelectionCriteria = { joinedThreads: true }; | ||||
const initialTime = Date.now(); | const initialTime = Date.now(); | ||||
const assetInfoPromise = getAssetInfo(); | const assetInfoPromise = getAssetInfo(); | ||||
const threadInfoPromise = fetchThreadInfos(viewer); | const threadInfoPromise = fetchThreadInfos(viewer); | ||||
const messageInfoPromise = fetchMessageInfos( | const messageInfoPromise = fetchMessageInfos( | ||||
viewer, | viewer, | ||||
messageSelectionCriteria, | messageSelectionCriteria, | ||||
defaultNumberPerThread, | defaultNumberPerThread, | ||||
); | ); | ||||
const entryInfoPromise = fetchEntryInfos(viewer, [calendarQuery]); | const entryInfoPromise = fetchEntryInfos(viewer, [calendarQuery]); | ||||
const currentUserInfoPromise = fetchCurrentUserInfo(viewer); | const currentUserInfoPromise = fetchCurrentUserInfo(viewer); | ||||
const userInfoPromise = fetchKnownUserInfos(viewer); | const knownUserInfoPromise = fetchKnownUserInfos(viewer); | ||||
const sessionIDPromise = (async () => { | const sessionIDPromise = (async () => { | ||||
if (viewer.loggedIn) { | if (viewer.loggedIn) { | ||||
await setNewSession(viewer, calendarQuery, initialTime); | await setNewSession(viewer, calendarQuery, initialTime); | ||||
} | } | ||||
return viewer.sessionID; | return viewer.sessionID; | ||||
})(); | })(); | ||||
▲ Show 20 Lines • Show All 44 Lines • ▼ Show 20 Lines | const entryStorePromise = (async () => { | ||||
} | } | ||||
return { | return { | ||||
entryInfos: _keyBy('id')(rawEntryInfos), | entryInfos: _keyBy('id')(rawEntryInfos), | ||||
daysToEntries: daysToEntriesFromEntryInfos(rawEntryInfos), | daysToEntries: daysToEntriesFromEntryInfos(rawEntryInfos), | ||||
lastUserInteractionCalendar: initialTime, | lastUserInteractionCalendar: initialTime, | ||||
}; | }; | ||||
})(); | })(); | ||||
const userStorePromise = (async () => { | const userStorePromise = (async () => { | ||||
const [userInfos, hasNotAcknowledgedPolicies] = await Promise.all([ | const [knownUserInfos, hasNotAcknowledgedPolicies, navInfoUserInfos] = | ||||
userInfoPromise, | await Promise.all([ | ||||
knownUserInfoPromise, | |||||
hasNotAcknowledgedPoliciesPromise, | hasNotAcknowledgedPoliciesPromise, | ||||
navInfoUserInfoPromise, | |||||
]); | ]); | ||||
return { | return { | ||||
userInfos: hasNotAcknowledgedPolicies ? {} : userInfos, | userInfos: hasNotAcknowledgedPolicies | ||||
? {} | |||||
: { ...navInfoUserInfos, ...knownUserInfos }, | |||||
inconsistencyReports: [], | inconsistencyReports: [], | ||||
}; | }; | ||||
})(); | })(); | ||||
const navInfoPromise = (async () => { | const navInfoPromise = (async () => { | ||||
const [{ threadInfos }, messageStore, currentUserInfo, userStore] = | const [{ threadInfos }, messageStore, currentUserInfo, userStore] = | ||||
await Promise.all([ | await Promise.all([ | ||||
threadInfoPromise, | threadInfoPromise, | ||||
▲ Show 20 Lines • Show All 173 Lines • Show Last 20 Lines |