UNPKG

@nevis-security/nevis-mobile-authentication-sdk-react

Version:

React Native plugin for Nevis Mobile Authentication SDK. Supports only mobile.

263 lines (262 loc) 12.6 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.NativeEventListener = void 0; var _reactNative = require("react-native"); var _OutOfBandPlatformOperation = require("../cache/operation/OutOfBandPlatformOperation"); var _UserInteractionPlatformOperation = require("../cache/operation/UserInteractionPlatformOperation"); var _PlatformOperationCache = require("../cache/PlatformOperationCache"); var _AuthenticatorExtension = require("../extensions/AuthenticatorExtension"); var _OnValidCredentialsProvidedMessage = require("../model/messages/in/OnValidCredentialsProvidedMessage"); var _OperationTypeMessage = require("../model/messages/in/OperationTypeMessage"); var _PasswordChangerMessage = require("../model/messages/in/PasswordChangerMessage"); var _PasswordEnrollerMessage = require("../model/messages/in/PasswordEnrollerMessage"); var _PasswordValidationMessage = require("../model/messages/in/PasswordValidationMessage"); var _PinChangerMessage = require("../model/messages/in/PinChangerMessage"); var _PinEnrollerMessage = require("../model/messages/in/PinEnrollerMessage"); var _PinValidationMessage = require("../model/messages/in/PinValidationMessage"); var _SelectAccountMessage = require("../model/messages/in/SelectAccountMessage"); var _SelectAuthenticatorMessage = require("../model/messages/in/SelectAuthenticatorMessage"); var _VerifyUserMessage = require("../model/messages/in/VerifyUserMessage"); /** * Copyright © 2023-2024 Nevis Security AG. All rights reserved. */ var EventType = /*#__PURE__*/function (EventType) { EventType["SelectAccount"] = "selectAccount"; EventType["SelectAuthenticator"] = "selectAuthenticator"; EventType["PinEnroll"] = "pinEnroll"; EventType["PasswordEnroll"] = "passwordEnroll"; EventType["PinChange"] = "pinChange"; EventType["PasswordChange"] = "passwordChange"; EventType["PinValidateForEnrollment"] = "pinValidateForEnrollment"; EventType["PasswordValidateForEnrollment"] = "passwordValidateForEnrollment"; EventType["PinValidateForPinChange"] = "pinValidateForPinChange"; EventType["PasswordValidateForPasswordChange"] = "passwordValidateForPasswordChange"; EventType["VerifyUser"] = "verifyUser"; EventType["OnValidCredentialsProvided"] = "onValidCredentialsProvided"; EventType["OperationType"] = "operationType"; return EventType; }(EventType || {}); class NativeEventListener { _ongoingOperations = new Set(); constructor() { this._eventEmitter = new _reactNative.NativeEventEmitter(_reactNative.NativeModules.RNEventEmitter); } static getInstance() { if (!NativeEventListener.instance) { NativeEventListener.instance = new NativeEventListener(); } return NativeEventListener.instance; } start(operationId) { this._ongoingOperations.add(operationId); this.startListeningForEvents(); } stop(operationId) { this._ongoingOperations.delete(operationId); if (this._ongoingOperations.size == 0) { this.stopListeningForEvents(); } } startListeningForEvents() { this.listenToSelectAccount(); this.listenToSelectAuthenticator(); this.listenToPinEnroll(); this.listenToPasswordEnroll(); this.listenToPinChange(); this.listenToPasswordChange(); this.listenToPinValidateForEnrollment(); this.listenToPasswordValidateForEnrollment(); this.listenToPinValidateForPinChange(); this.listenToPasswordValidateForPasswordChange(); this.listenToVerifyUser(); this.listenToOnValidCredentialsProvided(); this.listenToOnOperationType(); } stopListeningForEvents() { this._selectAccount?.remove(); this._selectAccount = undefined; this._selectAuthenticator?.remove(); this._selectAuthenticator = undefined; this._pinEnroll?.remove(); this._pinEnroll = undefined; this._passwordEnroll?.remove(); this._passwordEnroll = undefined; this._pinChange?.remove(); this._pinChange = undefined; this._passwordChange?.remove(); this._passwordChange = undefined; this._pinValidateForEnrollment?.remove(); this._pinValidateForEnrollment = undefined; this._passwordValidateForEnrollment?.remove(); this._passwordValidateForEnrollment = undefined; this._pinValidateForPinChange?.remove(); this._pinValidateForPinChange = undefined; this._passwordValidateForPasswordChange?.remove(); this._passwordValidateForPasswordChange = undefined; this._verifyUser?.remove(); this._verifyUser = undefined; this._onValidCredentialsProvided?.remove(); this._onValidCredentialsProvided = undefined; this._onOperationType?.remove(); this._onOperationType = undefined; } listenToSelectAccount() { if (this._selectAccount) { return; // Already listening } this._selectAccount = this._eventEmitter.addListener(EventType.SelectAccount, data => { const message = _SelectAccountMessage.SelectAccountMessage.fromJson(data); const operation = this.getUserInteractionPlatformOperation(message.operationId, 'Operation not found during account selection.'); operation.selectAccount(message.context); }); } listenToSelectAuthenticator() { if (this._selectAuthenticator) { return; // Already listening } this._selectAuthenticator = this._eventEmitter.addListener(EventType.SelectAuthenticator, data => { const message = _SelectAuthenticatorMessage.SelectAuthenticatorMessage.fromJson(data); const operation = this.getUserInteractionPlatformOperation(message.operationId, 'Operation not found during authenticator selection.'); operation.selectAuthenticator(message.context); }); } listenToPinEnroll() { if (this._pinEnroll) { return; // Already listening } this._pinEnroll = this._eventEmitter.addListener(EventType.PinEnroll, data => { const message = _PinEnrollerMessage.PinEnrollerMessage.fromJson(data); const operation = this.getUserInteractionPlatformOperation(message.operationId, 'Operation not found during PIN enrollment.'); operation.enrollPin(message.context); }); } listenToPasswordEnroll() { if (this._passwordEnroll) { return; // Already listening } this._passwordEnroll = this._eventEmitter.addListener(EventType.PasswordEnroll, data => { const message = _PasswordEnrollerMessage.PasswordEnrollerMessage.fromJson(data); const operation = this.getUserInteractionPlatformOperation(message.operationId, 'Operation not found during password enrollment.'); operation.enrollPassword(message.context); }); } listenToPinChange() { if (this._pinChange) { return; // Already listening } this._pinChange = this._eventEmitter.addListener(EventType.PinChange, data => { const message = _PinChangerMessage.PinChangerMessage.fromJson(data); const operation = this.getUserInteractionPlatformOperation(message.operationId, 'Operation not found during PIN change.'); operation.changePin(message.context); }); } listenToPasswordChange() { if (this._passwordChange) { return; // Already listening } this._passwordChange = this._eventEmitter.addListener(EventType.PasswordChange, data => { const message = _PasswordChangerMessage.PasswordChangerMessage.fromJson(data); const operation = this.getUserInteractionPlatformOperation(message.operationId, 'Operation not found during password change.'); operation.changePassword(message.context); }); } listenToPinValidateForEnrollment() { if (this._pinValidateForEnrollment) { return; // Already listening } this._pinValidateForEnrollment = this._eventEmitter.addListener(EventType.PinValidateForEnrollment, data => { const message = _PinValidationMessage.PinValidationMessage.fromJson(data); const operation = this.getUserInteractionPlatformOperation(message.operationId, 'Operation not found during PIN validation for enrollment.'); operation.validatePinForEnrollment(message.pin); }); } listenToPasswordValidateForEnrollment() { if (this._passwordValidateForEnrollment) { return; // Already listening } this._passwordValidateForEnrollment = this._eventEmitter.addListener(EventType.PasswordValidateForEnrollment, data => { const message = _PasswordValidationMessage.PasswordValidationMessage.fromJson(data); const operation = this.getUserInteractionPlatformOperation(message.operationId, 'Operation not found during password validation for enrollment.'); operation.validatePasswordForEnrollment(message.password); }); } listenToPinValidateForPinChange() { if (this._pinValidateForPinChange) { return; // Already listening } this._pinValidateForPinChange = this._eventEmitter.addListener(EventType.PinValidateForPinChange, data => { const message = _PinValidationMessage.PinValidationMessage.fromJson(data); const operation = this.getUserInteractionPlatformOperation(message.operationId, 'Operation not found during PIN validation for PIN change.'); operation.validatePinForPinChange(message.pin); }); } listenToPasswordValidateForPasswordChange() { if (this._passwordValidateForPasswordChange) { return; // Already listening } this._passwordValidateForPasswordChange = this._eventEmitter.addListener(EventType.PasswordValidateForPasswordChange, data => { const message = _PasswordValidationMessage.PasswordValidationMessage.fromJson(data); const operation = this.getUserInteractionPlatformOperation(message.operationId, 'Operation not found during password validation for password change.'); operation.validatePasswordForPasswordChange(message.password); }); } listenToVerifyUser() { if (this._verifyUser) { return; // Already listening } this._verifyUser = this._eventEmitter.addListener(EventType.VerifyUser, data => { const message = _VerifyUserMessage.VerifyUserMessage.fromJson(data); const operation = this.getUserInteractionPlatformOperation(message.operationId, 'Operation not found during user verification.'); const handler = _AuthenticatorExtension.AuthenticatorExtension.handlerByAuthenticator(message.context.authenticator.aaid, message.operationId); operation.userVerificationHandler = handler; _PlatformOperationCache.PlatformOperationCache.getInstance().update(operation); (async () => { await operation.verifyUser(message.context, handler); })(); }); } listenToOnValidCredentialsProvided() { // listenToOnValidCredentialsProvided is only supported on an Android platform if (_reactNative.Platform.OS !== 'android') { return; } if (this._onValidCredentialsProvided) { return; // Already listening } this._onValidCredentialsProvided = this._eventEmitter.addListener(EventType.OnValidCredentialsProvided, data => { const message = _OnValidCredentialsProvidedMessage.OnValidCredentialsProvidedMessage.fromJson(data); const operation = this.getUserInteractionPlatformOperation(message.operationId, 'Operation not found during providing valid credentials.'); operation.userVerificationHandler = undefined; _PlatformOperationCache.PlatformOperationCache.getInstance().update(operation); operation.onValidCredentialsProvided(message.authenticator); }); } listenToOnOperationType() { if (this._onOperationType) { return; // Already listening } this._onOperationType = this._eventEmitter.addListener(EventType.OperationType, data => { const message = _OperationTypeMessage.OperationTypeMessage.fromJson(data); const operation = this.getOutOfBandPlatformOperation(message.operationId, 'Operation not found during Out-of-Band operation selection.'); operation.updateOperationType(message.operationType); }); } getUserInteractionPlatformOperation(operationId, errorMessage) { const operation = _PlatformOperationCache.PlatformOperationCache.getInstance().read(operationId); if (operation instanceof _UserInteractionPlatformOperation.UserInteractionPlatformOperation) { return operation; } throw new Error(errorMessage); } getOutOfBandPlatformOperation(operationId, errorMessage) { const operation = _PlatformOperationCache.PlatformOperationCache.getInstance().read(operationId); if (operation instanceof _OutOfBandPlatformOperation.OutOfBandPlatformOperation) { return operation; } throw new Error(errorMessage); } } exports.NativeEventListener = NativeEventListener; //# sourceMappingURL=NativeEventListener.js.map