function enroll(transaction, method) {
	if (transaction.isEnrolled()) {
		console.log('You are already enrolled');
		return;
	}
	var enrollData = {};
	if (method === 'sms') {
		enrollData.phoneNumber = prompt('Phone number'); // Collect phone number
	}
	return transaction.enroll(method, enrollData, function (err, otpEnrollment) {
		if (err) {
			console.error(err);
			return;
		}
		var uri = otpEnrollment.getUri();
		if (uri) {
			showQR(uri);
		}
		var confirmData = {};
		if (method === 'otp' || method === 'sms') {
			confirmData.otpCode = prompt('Otp code'); // Collect verification otp
		}
		otpEnrollment.confirm(confirmData);
	});
}
auth0GuardianJS.start(function(err, transaction) {
	if (err) {
		console.error(err);
		return;
	}
	transaction.on('error', function(error) {
		console.error(error);
	});
	transaction.on('timeout', function() {
		console.log('Timeout');
	});
	transaction.on('enrollment-complete', function(payload) {
		if (payload.recoveryCode) {
			alert('Recovery code is ' + payload.recoveryCode);
		}
		if (payload.authRequired) {
			showAuthenticationFor(transaction, payload.enrollment);
			return;
		}
	});
	transaction.on('auth-response', function(payload) {
		if (payload.recoveryCode) {
			alert('The new recovery code is ' + payload.recoveryCode);
		}
		if (!payload.accepted) {
			alert('Authentication has been rejected');
			return;
		}
		auth0GuardianJS.formPostHelper('{{ postActionURL }}', { signature: payload.signature });
	});
	var availableEnrollmentMethods = transaction.getAvailableEnrollmentMethods();
	method = prompt('What method do you want to use, select one of '
		+ availableEnrollmentMethods.join(', '));
	enroll(transaction, method) // For sms
});