Changeset View
Changeset View
Standalone View
Standalone View
web/selectors/socket-selectors.js
Show All 18 Lines | import type { | ||||
ClientClientResponse, | ClientClientResponse, | ||||
} from 'lib/types/request-types.js'; | } from 'lib/types/request-types.js'; | ||||
import type { | import type { | ||||
SessionIdentification, | SessionIdentification, | ||||
SessionState, | SessionState, | ||||
} from 'lib/types/session-types.js'; | } from 'lib/types/session-types.js'; | ||||
import type { OneTimeKeyGenerator } from 'lib/types/socket-types.js'; | import type { OneTimeKeyGenerator } from 'lib/types/socket-types.js'; | ||||
import { initOlm } from '../olm/olm-utils.js'; | |||||
import type { AppState } from '../redux/redux-setup.js'; | import type { AppState } from '../redux/redux-setup.js'; | ||||
const openSocketSelector: (state: AppState) => () => WebSocket = createSelector( | const openSocketSelector: (state: AppState) => () => WebSocket = createSelector( | ||||
(state: AppState) => state.baseHref, | (state: AppState) => state.baseHref, | ||||
createOpenSocketFunction, | createOpenSocketFunction, | ||||
); | ); | ||||
const sessionIdentificationSelector: ( | const sessionIdentificationSelector: ( | ||||
state: AppState, | state: AppState, | ||||
) => SessionIdentification = createSelector( | ) => SessionIdentification = createSelector( | ||||
(state: AppState) => state.sessionID, | (state: AppState) => state.sessionID, | ||||
(sessionID: ?string): SessionIdentification => ({ sessionID }), | (sessionID: ?string): SessionIdentification => ({ sessionID }), | ||||
); | ); | ||||
const signedIdentityKeysBlobSelector: ( | const getSignedIdentityKeysBlobSelector: ( | ||||
state: AppState, | state: AppState, | ||||
) => ?SignedIdentityKeysBlob = createSelector( | ) => ?() => Promise<SignedIdentityKeysBlob> = createSelector( | ||||
(state: AppState) => state.cryptoStore.primaryAccount, | (state: AppState) => state.cryptoStore.primaryAccount, | ||||
(state: AppState) => state.cryptoStore.primaryIdentityKeys, | (state: AppState) => state.cryptoStore.primaryIdentityKeys, | ||||
(state: AppState) => state.cryptoStore.notificationIdentityKeys, | (state: AppState) => state.cryptoStore.notificationIdentityKeys, | ||||
( | ( | ||||
primaryAccount: ?PickledOLMAccount, | primaryAccount: ?PickledOLMAccount, | ||||
primaryIdentityKeys: ?OLMIdentityKeys, | primaryIdentityKeys: ?OLMIdentityKeys, | ||||
notificationIdentityKeys: ?OLMIdentityKeys, | notificationIdentityKeys: ?OLMIdentityKeys, | ||||
) => { | ) => { | ||||
if (!primaryAccount || !primaryIdentityKeys || !notificationIdentityKeys) { | if (!primaryAccount || !primaryIdentityKeys || !notificationIdentityKeys) { | ||||
return null; | return null; | ||||
} | } | ||||
return async () => { | |||||
await initOlm(); | |||||
const primaryOLMAccount = new olm.Account(); | const primaryOLMAccount = new olm.Account(); | ||||
primaryOLMAccount.unpickle( | primaryOLMAccount.unpickle( | ||||
primaryAccount.picklingKey, | primaryAccount.picklingKey, | ||||
primaryAccount.pickledAccount, | primaryAccount.pickledAccount, | ||||
); | ); | ||||
const identityKeysBlob: IdentityKeysBlob = { | const identityKeysBlob: IdentityKeysBlob = { | ||||
primaryIdentityPublicKeys: primaryIdentityKeys, | primaryIdentityPublicKeys: primaryIdentityKeys, | ||||
notificationIdentityPublicKeys: notificationIdentityKeys, | notificationIdentityPublicKeys: notificationIdentityKeys, | ||||
}; | }; | ||||
const payloadToBeSigned: string = JSON.stringify(identityKeysBlob); | const payloadToBeSigned: string = JSON.stringify(identityKeysBlob); | ||||
const signedIdentityKeysBlob: SignedIdentityKeysBlob = { | const signedIdentityKeysBlob: SignedIdentityKeysBlob = { | ||||
payload: payloadToBeSigned, | payload: payloadToBeSigned, | ||||
signature: primaryOLMAccount.sign(payloadToBeSigned), | signature: primaryOLMAccount.sign(payloadToBeSigned), | ||||
}; | }; | ||||
return signedIdentityKeysBlob; | return signedIdentityKeysBlob; | ||||
}, | }; | ||||
); | |||||
const getSignedIdentityKeysBlobSelector: ( | |||||
state: AppState, | |||||
) => ?() => Promise<SignedIdentityKeysBlob> = createSelector( | |||||
signedIdentityKeysBlobSelector, | |||||
(signedIdentityKeysBlob: ?SignedIdentityKeysBlob) => { | |||||
if (!signedIdentityKeysBlob) { | |||||
return null; | |||||
} | |||||
return async () => signedIdentityKeysBlob; | |||||
}, | }, | ||||
); | ); | ||||
const webGetClientResponsesSelector: ( | const webGetClientResponsesSelector: ( | ||||
state: AppState, | state: AppState, | ||||
) => ( | ) => ( | ||||
serverRequests: $ReadOnlyArray<ClientServerRequest>, | serverRequests: $ReadOnlyArray<ClientServerRequest>, | ||||
) => Promise<$ReadOnlyArray<ClientClientResponse>> = createSelector( | ) => Promise<$ReadOnlyArray<ClientClientResponse>> = createSelector( | ||||
Show All 29 Lines | ( | ||||
) => | ) => | ||||
() => | () => | ||||
sessionStateFunc(calendarActive), | sessionStateFunc(calendarActive), | ||||
); | ); | ||||
export { | export { | ||||
openSocketSelector, | openSocketSelector, | ||||
sessionIdentificationSelector, | sessionIdentificationSelector, | ||||
signedIdentityKeysBlobSelector, | getSignedIdentityKeysBlobSelector, | ||||
webGetClientResponsesSelector, | webGetClientResponsesSelector, | ||||
webSessionStateFuncSelector, | webSessionStateFuncSelector, | ||||
}; | }; |