> ## Documentation Index
> Fetch the complete documentation index at: https://translations.mintlify.site/llms.txt
> Use this file to discover all available pages before exploring further.

> Describe cómo instalar, configurar las opciones y usar los SDK de Guardian.

# Instalar el SDK de Guardian

El SDK de Guardian ofrece un cliente sin interfaz de usuario para Guardian.

`npm install auth0-guardian-js`

<div id="source-files">
  ## Archivos de origen
</div>

* [Versión completa del SDK](https://cdn.auth0.com/js/guardian-js/1.3/guardian-js.js)
* [Versión minimizada del SDK](https://cdn.auth0.com/js/guardian-js/1.3/guardian-js.min.js)
* [API completa de Guardian](https://github.com/auth0/auth0-guardian.js#full-api)

<div id="configure-guardian">
  ## Configurar Guardian
</div>

```javascript lines theme={null}
var auth0GuardianJS = require('auth0-guardian-js')({
	// Para Tenants de EE. UU.: https://{name}.guardian.auth0.com
 	// Para Tenants de AU: https://{name}.guardian.au.auth0.com
 	// Para Tenants de EU: https://{name}.guardian.eu.auth0.com
  // Para Tenants de JP: https://{name}.guardian.jp.auth0.com
	serviceUrl: "https://{{ userData.tenant }}.guardian.auth0.com",
	requestToken: "{{ requestToken }}", // o ticket: "{{ ticket }}" - ver más abajo

	issuer: {
		// El nombre del emisor que se muestra en las apps de generación de OTP
		label: "{{ userData.tenantFriendlyName }}",
		name: "{{ userData.tenant }}",
	},

	// La etiqueta de cuenta que se muestra en las apps de generación de OTP
	accountLabel: "{{ userData.friendlyUserId }}",

	// Opcional, solo para fines de depuración,
	// ID que permite asociar un grupo de solicitudes
	// como pertenecientes a la misma "transacción" (en sentido amplio)
	globalTrackingId: "{{ globalTrackingId }}"
});
```

El uso de `requestToken` o `ticket` depende del método de autenticación. `ticket` corresponde a un [ticket de inscripción](/es/docs/secure/multi-factor-authentication/multi-factor-authentication-developer-resources/create-custom-enrollment-tickets) generado previamente.

<div id="use-a-custom-domain">
  ### Usa un dominio personalizado
</div>

Si tienes un <Tooltip tip="Dominio personalizado: dominio de terceros con un nombre específico o de marca." cta="Ver glosario" href="/es/docs/glossary?term=custom+domain">dominio personalizado</Tooltip> configurado para tu Tenant de Auth0, deberás actualizar la propiedad `serviceUrl` para que apunte al endpoint de Guardian:

```javascript lines theme={null}
var auth0GuardianJS = require('auth0-guardian-js')({
    // Para dominios personalizados
    serviceUrl: "https://{yourCustomDomain}/guardian/",
    ...
});
```

<div id="enroll-devices">
  ## Inscribir dispositivos
</div>

La inscripción de dispositivos consta de los siguientes pasos:

1. Inicie la transacción.
2. (opcional) Compruebe si el usuario ya está inscrito. No es posible inscribirse dos veces.
3. Envíe la información necesaria para la inscripción.
4. Confirme la inscripción.
5. Muestre el código de recuperación.

Algunos pasos pueden omitirse según el método. Proporcionamos la misma interfaz para todos los métodos para que pueda escribir código de forma uniforme. Algunos métodos completan la autenticación, mientras que otros requieren un paso adicional de autenticación. Puede determinarlo escuchando el evento `enrollment-complete`.

```javascript lines expandable theme={null}
function enroll(transaction, method) {
	if (transaction.isEnrolled()) {
		console.log('You are already enrolled');
		return;
	}

	var enrollData = {};

	if (method === 'sms') {
		enrollData.phoneNumber = prompt('Phone number'); // Recopilar número de teléfono
	}

	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
});
```

<div id="authenticate">
  ## Autenticar
</div>

Para autenticarte con un método, debes seguir estos pasos:

1. Inicia la transacción.
2. (opcional) Comprueba si el usuario ya está inscrito. Para autenticarse, debe estar inscrito.
3. Solicita la autenticación (la notificación push o el SMS). Esta solicitud no tiene efecto para OTP.
4. Verifica el OTP (`.verify` no tiene efecto para push).

Algunos pasos pueden omitirse según el método; proporcionamos la misma interfaz para todos los métodos para que puedas escribir código uniforme. Después de verificar el factor o de aceptar la notificación push, recibirás un evento `auth-response` con el payload que debes enviar al servidor; puedes usar `auth0GuardianJS.formPostHelper('{{ postActionURL }}', payload)` para reenviar el mensaje al servidor.

También puedes recibir `auth-rejected` si se recibió la notificación push.

```javascript lines expandable theme={null}
function authenticate(method) {
	auth0GuardianJS.start(function (err, transaction) {
		if (err) {
			console.error(err);
			return;
		}

		if (!transaction.isEnrolled()) {
			console.log('You are not enrolled');
			return;
		}

		transaction.on('error', function(error) {
			console.error(error);
		});

		transaction.on('timeout', function() {
			console.log('Timeout');
		});

		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 enrollment = transaction.getEnrollments()[0];

		if (enrollment.getAvailableAuthenticatorTypes().length === 0) {
			alert('Somethings went wrong, seems that there is no authenticators');
			return;
		}

		transaction.requestAuth(enrollment, { method: method } function(err, auth) {
			if (err) {
				console.error(err);
				return;
			}

			var data = {};
			if (method === 'sms' || method === 'otp') {
				data.otpCode = prompt('Otp code');
			} else if (method === 'recovery-code') {
				data.recoveryCode = prompt('Recovery code');
			}

			return auth.verify(data);
		});
	});
}
```

<div id="learn-more">
  ## Más información
</div>

* [Referencia de los códigos de error de Guardian](/es/docs/secure/multi-factor-authentication/multi-factor-authentication-developer-resources/guardian-error-code-reference)
