@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
JavaScript
"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