> ## Documentation Index
> Fetch the complete documentation index at: https://camarauth-docs.camarai.es/llms.txt
> Use this file to discover all available pages before exploring further.

# PinData

> Estructura de datos para un PIN de autenticación

# PinData

Representa un PIN de autenticación en el sistema.

## Propiedades

### id

Identificador único del PIN.

<ParamField path="id" type="string">
  ID único generado automáticamente
</ParamField>

```typescript theme={null}
id: "a1b2c3d4e5f6g7";
```

### pin

El código PIN en texto plano.

<ParamField path="pin" type="string">
  PIN de autenticación
</ParamField>

```typescript theme={null}
pin: "ABC123";
```

### emojiString

El PIN codificado en emojis.

<ParamField path="emojiString" type="string">
  PIN representado como string de emojis
</ParamField>

```typescript theme={null}
emojiString: "🔐🔑🔒🔓";
```

### status

Estado actual del PIN.

<ParamField path="status" type="'pending' | 'verified'">
  Estado del PIN
</ParamField>

```typescript theme={null}
status: "pending"; // Esperando verificación
status: "verified"; // Verificado exitosamente
```

### userId

ID del usuario asociado (asignado después de la verificación).

<ParamField path="userId" type="string | undefined">
  ID del usuario que verificó el PIN
</ParamField>

### phoneNumber

Número de teléfono que verificó el PIN.

<ParamField path="phoneNumber" type="string | undefined">
  Teléfono del usuario en formato internacional
</ParamField>

```typescript theme={null}
phoneNumber: "+1234567890";
```

### socketId

ID del socket de Socket.IO que registró el PIN.

<ParamField path="socketId" type="string | undefined">
  ID del socket del cliente
</ParamField>

### expiresAt

Timestamp de expiración (milisegundos desde epoch).

<ParamField path="expiresAt" type="number">
  Momento en que expira el PIN
</ParamField>

```typescript theme={null}
expiresAt: 1704067200000;
```

### createdAt

Timestamp de creación (milisegundos desde epoch).

<ParamField path="createdAt" type="number">
  Momento en que se creó el PIN
</ParamField>

### userData

Datos del usuario (asignado después de la verificación).

<ParamField path="userData" type="any">
  Información completa del usuario
</ParamField>

```typescript theme={null}
userData: {
  id: "user_123",
  name: "Juan",
  surname: "Pérez",
  phone: "+1234567890",
  roles: ["user"]
}
```

### accessToken

Token JWT de acceso (asignado después de la verificación).

<ParamField path="accessToken" type="string | undefined">
  Token JWT para acceder a recursos protegidos
</ParamField>

### refreshToken

Token JWT de refresco (asignado después de la verificación).

<ParamField path="refreshToken" type="string | undefined">
  Token para obtener nuevos access tokens
</ParamField>

## Ciclo de vida de un PIN

```
1. CREACIÓN
   id, pin, emojiString, status='pending', expiresAt, createdAt

2. VERIFICACIÓN
   + userId, phoneNumber, userData
   + accessToken, refreshToken
   status='verified'

3. EXPIRACIÓN / LIMPIEZA
   El PIN se elimina del Map después de 5 segundos de verificación
   o cuando expira el tiempo
```

## Ejemplo de uso

```typescript theme={null}
import { CamarauthBackend } from "@camarauth/sdk/server";

const backend = new CamarauthBackend({
  /* config */
});

// Obtener PINs activos
const pins = backend.getPins();

for (const [pin, data] of pins) {
  console.log({
    pin: data.pin,
    status: data.status,
    expiresIn: data.expiresAt - Date.now(),
    phoneNumber: data.phoneNumber || "N/A",
  });
}
```

## Véase también

* [BackendConfig interface](/backend/interfaces/backend-config)
* [CamarauthBackend class](/backend/classes/camarauth-backend)
