Changeset View
Changeset View
Standalone View
Standalone View
keyserver/src/responders/website-responders.js
Show All 36 Lines | |||||
import { navInfoFromURL } from 'web/url-utils'; | import { navInfoFromURL } from 'web/url-utils'; | ||||
import { fetchEntryInfos } from '../fetchers/entry-fetchers'; | import { fetchEntryInfos } from '../fetchers/entry-fetchers'; | ||||
import { fetchMessageInfos } from '../fetchers/message-fetchers'; | import { fetchMessageInfos } from '../fetchers/message-fetchers'; | ||||
import { fetchThreadInfos } from '../fetchers/thread-fetchers'; | import { fetchThreadInfos } from '../fetchers/thread-fetchers'; | ||||
import { | import { | ||||
fetchCurrentUserInfo, | fetchCurrentUserInfo, | ||||
fetchKnownUserInfos, | fetchKnownUserInfos, | ||||
fetchUserInfos, | |||||
} from '../fetchers/user-fetchers'; | } from '../fetchers/user-fetchers'; | ||||
import { setNewSession } from '../session/cookies'; | import { setNewSession } from '../session/cookies'; | ||||
import { Viewer } from '../session/viewer'; | import { Viewer } from '../session/viewer'; | ||||
import { streamJSON, waitForStream } from '../utils/json-stream'; | import { streamJSON, waitForStream } from '../utils/json-stream'; | ||||
import { | import { | ||||
getAppURLFactsFromRequestURL, | getAppURLFactsFromRequestURL, | ||||
clientPathFromRouterPath, | clientPathFromRouterPath, | ||||
} from '../utils/urls'; | } from '../utils/urls'; | ||||
▲ Show 20 Lines • Show All 87 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 All 18 Lines | const entryStorePromise = (async () => { | ||||
const { rawEntryInfos } = await entryInfoPromise; | const { rawEntryInfos } = await entryInfoPromise; | ||||
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 = await userInfoPromise; | const [knownUserInfos, navInfoUserInfos] = await Promise.all([ | ||||
return { userInfos, inconsistencyReports: [] }; | knownUserInfoPromise, | ||||
navInfoUserInfoPromise, | |||||
]); | |||||
return { | |||||
userInfos: { ...navInfoUserInfos, ...knownUserInfos }, | |||||
inconsistencyReports: [], | |||||
}; | |||||
})(); | })(); | ||||
const navInfoPromise = (async () => { | const navInfoPromise = (async () => { | ||||
const [ | const [ | ||||
{ threadInfos }, | { threadInfos }, | ||||
messageStore, | messageStore, | ||||
currentUserInfo, | currentUserInfo, | ||||
userStore, | userStore, | ||||
▲ Show 20 Lines • Show All 185 Lines • Show Last 20 Lines |