@nevis-security/nevis-mobile-authentication-sdk-react
Version:
React Native plugin for Nevis Mobile Authentication SDK. Supports only mobile.
91 lines (82 loc) • 2.96 kB
text/typescript
/**
* Copyright © 2023 Nevis Security AG. All rights reserved.
*/
import uuid from 'react-native-uuid';
import type { Configuration } from './Configuration';
import { InitializationError } from './error/initialization/InitializationError';
import { InitializationErrorConverter } from './error/initialization/InitializationErrorConverter';
import {
type MobileAuthenticationClient,
MobileAuthenticationClientImpl,
} from './MobileAuthenticationClient';
import NevisMobileAuthenticationSdkReact from './MobileAuthenticationSdk';
import { InitClientMessage } from './model/messages/out/InitClientMessage';
/**
* The class that creates and initializes asynchronously an instance of {@link MobileAuthenticationClient}.
*/
export class MobileAuthenticationClientInitializer {
private _configuration?: Configuration;
private _onSuccess?: (client: MobileAuthenticationClient) => void;
private _onError?: (error: InitializationError) => void;
/**
* Sets the configuration of the {@link MobileAuthenticationClient}.
*
* **IMPORTANT** \
* Providing the configuration is required.
*
* @param configuration the {@link MobileAuthenticationClient} configuration.
* @returns an initializer
*/
configuration(configuration: Configuration) {
this._configuration = configuration;
return this;
}
/**
* The method invoked when the {@link MobileAuthenticationClient} could be successfully built after
* invoking {@link execute}.
*
* **IMPORTANT** \
* Providing the callback handling the {@link MobileAuthenticationClient} is required.
*
* @param onSuccess the callback handling the {@link MobileAuthenticationClient}.
* @returns an initializer.
*/
onSuccess(onSuccess: (client: MobileAuthenticationClient) => void) {
this._onSuccess = onSuccess;
return this;
}
/**
* The method invoked when an error occurs after invoking {@link execute}.
*
* **IMPORTANT** \
* Providing the callback handling the error is required.
*
* @param onError the callback handling the error.
* @returns an initializer.
*/
onError(onError: (error: InitializationError) => void) {
this._onError = onError;
return this;
}
/**
* Starts the creation of an instance of the {@link MobileAuthenticationClient}. If an error
* occurs, it is provided through {@link onError}, if the {@link MobileAuthenticationClient}
* can be successfully built and initialized, it is provided through {@link onSuccess}.
*/
async execute(): Promise<void> {
const message = new InitClientMessage(
uuid.v4() as string,
this._onSuccess !== undefined,
this._onError !== undefined,
this._configuration
);
return NevisMobileAuthenticationSdkReact.initClient(message)
.then(() => {
this._onSuccess?.(new MobileAuthenticationClientImpl());
})
.catch((error: Error) => {
const initializationError = new InitializationErrorConverter(error).convert();
this._onError?.(initializationError);
});
}
}