diff --git a/native/utils/crypto-utils.js b/native/utils/crypto-utils.js new file mode 100644 --- /dev/null +++ b/native/utils/crypto-utils.js @@ -0,0 +1,47 @@ +// @flow + +import * as React from 'react'; + +import { + getOlmSessionInitializationData, + getOlmSessionInitializationDataActionTypes, +} from 'lib/actions/user-actions.js'; +import { + useServerCall, + useDispatchActionPromise, +} from 'lib/utils/action-utils.js'; + +import { commCoreModule } from '../native-modules.js'; + +function useInitialNotificationsEncryptedMessage(): () => Promise { + const callGetOlmSessionInitializationData = useServerCall( + getOlmSessionInitializationData, + ); + const dispatchActionPromise = useDispatchActionPromise(); + + return React.useCallback(async () => { + const olmSessionDataPromise = callGetOlmSessionInitializationData(); + + dispatchActionPromise( + getOlmSessionInitializationDataActionTypes, + olmSessionDataPromise, + ); + + const { signedIdentityKeysBlob, notifInitializationInfo } = + await olmSessionDataPromise; + + const { notificationIdentityPublicKeys } = JSON.parse( + signedIdentityKeysBlob.payload, + ); + + const { prekey, prekeySignature, oneTimeKey } = notifInitializationInfo; + return await commCoreModule.initializeNotificationsSession( + JSON.stringify(notificationIdentityPublicKeys), + prekey, + prekeySignature, + oneTimeKey, + ); + }, [callGetOlmSessionInitializationData, dispatchActionPromise]); +} + +export { useInitialNotificationsEncryptedMessage };