diff --git a/keyserver/src/keyserver.js b/keyserver/src/keyserver.js --- a/keyserver/src/keyserver.js +++ b/keyserver/src/keyserver.js @@ -1,5 +1,6 @@ // @flow +import olm from '@matrix-org/olm'; import cluster from 'cluster'; import cookieParser from 'cookie-parser'; import express from 'express'; @@ -38,6 +39,7 @@ } from './utils/urls.js'; (async () => { + await olm.init(); await prefetchAllURLFacts(); const squadCalBaseRoutePath = getSquadCalURLFacts()?.baseRoutePath; diff --git a/keyserver/src/responders/user-responders.js b/keyserver/src/responders/user-responders.js --- a/keyserver/src/responders/user-responders.js +++ b/keyserver/src/responders/user-responders.js @@ -1,6 +1,5 @@ // @flow -import olm from '@matrix-org/olm'; import invariant from 'invariant'; import { ErrorTypes, SiweMessage } from 'siwe'; import t from 'tcomb'; @@ -94,6 +93,8 @@ } from '../updaters/account-updaters.js'; import { userSubscriptionUpdater } from '../updaters/user-subscription-updaters.js'; import { viewerAcknowledgmentUpdater } from '../updaters/viewer-acknowledgment-updater.js'; +import { getOLMUtility } from '../utils/olm-utils.js'; +import type { OLMUtility } from '../utils/olm-utils.js'; import { validateInput } from '../utils/validation-utils.js'; const subscriptionUpdateRequestInputValidator = tShape({ @@ -342,8 +343,7 @@ signedIdentityKeysBlob.payload, ); - await olm.init(); - const olmUtil = new olm.Utility(); + const olmUtil: OLMUtility = getOLMUtility(); try { olmUtil.ed25519_verify( identityKeys.primaryIdentityPublicKeys.ed25519, diff --git a/keyserver/src/utils/olm-utils.js b/keyserver/src/utils/olm-utils.js --- a/keyserver/src/utils/olm-utils.js +++ b/keyserver/src/utils/olm-utils.js @@ -1,5 +1,6 @@ // @flow +import olm from '@matrix-org/olm'; import invariant from 'invariant'; import { importJSON } from './import-json.js'; @@ -25,4 +26,13 @@ ) => void, }; -export { getOlmConfig }; +let cachedOLMUtility: OLMUtility; +function getOLMUtility(): OLMUtility { + if (cachedOLMUtility) { + return cachedOLMUtility; + } + cachedOLMUtility = new olm.Utility(); + return cachedOLMUtility; +} + +export { getOlmConfig, getOLMUtility };