A continuación te presento un ejemplo completo del flujo de autenticación usando tokens de acceso (access tokens) y tokens de actualización (refresh tokens):
Cliente → Servidor:
POST /auth/login
{
| type Prettify<T> = { | |
| [K in keyof T]: T[K] | |
| } & {}; | |
| type ToDiscoUnion<T extends Record<string, object>> = { | |
| [K in keyof T]: Prettify<{ type: K } && T[K]> | |
| }[keyof T] | |
| type State = ToDiscoUnion<{ | |
| loading: {}, |
| // Force type expansion so they are displayed flat and readable in the editor. | |
| export type Prettify<T> = { | |
| [K in keyof T]: T[K] | |
| } & {}; |
| /** | |
| * Utility to perform fuzzy search in an array of objects, ignoring accents, case, and word order. | |
| */ | |
| /** | |
| * Normalize a string by removing accents and converting to lowercase. | |
| * @param str Input string. | |
| * @returns Normalized string. | |
| */ | |
| function normalizeString(str: string): string { |
El Prototype Pattern (Patrón de Prototipo) es un patrón de diseño creacional que permite crear nuevos objetos copiando o clonando un objeto existente (el prototipo), en lugar de crear nuevos objetos desde cero. Este patrón es útil cuando la creación de un objeto es costosa en términos de recursos o tiempo, y ya tienes un objeto similar que puedes clonar.
A continuación, te muestro un ejemplo práctico del Prototype Pattern usando TypeScript. En este caso, vamos a crear un sistema de gestión de usuarios donde los usuarios pueden ser clonados para crear nuevos usuarios con propiedades similares.
El Builder Pattern (Patrón de Construcción) es un patrón de diseño creacional que permite construir objetos complejos paso a paso. Este patrón es útil cuando un objeto tiene muchas configuraciones opcionales o parámetros, y quieres evitar constructores con muchos parámetros o múltiples constructores sobrecargados.
A continuación, te muestro un ejemplo práctico del Builder Pattern usando TypeScript. En este caso, vamos a construir un objeto Pizza con varias configuraciones opcionales (tamaño, queso, pepperoni, champiñones, etc.).
El Strategy Pattern (Patrón de Estrategia) es un patrón de diseño de comportamiento que te permite definir una familia de algoritmos, encapsular cada uno de ellos y hacerlos intercambiables. Esto permite que el algoritmo varíe independientemente de los clientes que lo utilizan.
A continuación, te muestro un ejemplo práctico del Strategy Pattern usando TypeScript. En este caso, vamos a implementar un sistema de pago donde diferentes estrategias de pago (tarjeta de crédito, PayPal y criptomonedas) pueden ser intercambiables.
| type Resolve<T> = (value: T) => void; | |
| type Reject = (reason?: any) => void; | |
| export const promiseResolver = <T>() => { | |
| let resolve: Resolve<T> = () => {}; | |
| let reject: Reject = () => {}; | |
| const promise = new Promise<T>((res, rej) => { | |
| resolve = res; | |
| reject = rej; | |
| }); |