Saltar al contenido
Meeko
Escribe para buscar en las guías y en la referencia de la API. Ábrela desde cualquier página con / o Ctrl K; muévete con las flechas y entra con Intro.
Empezar

Contenidos

En esta página

SessionStore

interfaz

Almacén de sesiones. En producción SessionManager exige persistent: true, replace atómico y revokeFamily. Meeko incluye MemorySessionStore (desarrollo), RedisSessionStore y SqlSessionStore.

ts
import type { SessionStore } from "@meekojs/meeko/server";

Código fuente src/server/runtime/sessions.ts:135

Declaración #

ts
interface SessionStore<T = unknown> {
	readonly persistent?: boolean
	get(id: string): Promise<SessionRecord<T> | undefined>
	set(record: SessionRecord<T>): Promise<void>
	delete(id: string): Promise<void>
	replace?(previousId: string, record: SessionRecord<T>): Promise<boolean>
	revokeFamily?(familyId: string): Promise<void>
	subscribeRevocations?(listener: (familyId: string) => void): Unsubscribe | Promise<Unsubscribe>
	rateLimit?(key: string, windowMs: number): Promise<RateLimitHit>
	close?(): Promise<void>
}

Parámetros de tipo #

T = unknown

Datos de la aplicación en la sesión.

Ejemplo #

ts
import type { SessionRecord, SessionStore } from "@meekojs/meeko/server";

class LoggingStore<T> implements SessionStore<T> {
  readonly persistent = true;
  constructor(private readonly inner: Required<SessionStore<T>>) {}
  get(id: string) { return this.inner.get(id); }
  set(record: SessionRecord<T>) { return this.inner.set(record); }
  delete(id: string) { return this.inner.delete(id); }
  replace(previousId: string, record: SessionRecord<T>) { return this.inner.replace(previousId, record); }
  async revokeFamily(familyId: string) { console.info("revoke", familyId); await this.inner.revokeFamily(familyId); }
}

Miembros #

persistent #

propiedad sólo lectura opcional

readonly persistent?: boolean

Declara de forma explícita que los registros sobreviven a los reinicios del proceso.

get #

método

get(id: string): Promise<SessionRecord<T> | undefined>

Lee la sesión activa con ese ID, o undefined si no existe, caducó o ya no es la activa de su familia.

set #

método

set(record: SessionRecord<T>): Promise<void>

Guarda una sesión nueva.

delete #

método

delete(id: string): Promise<void>

Borra una sesión.

replace #

método opcional

replace?(previousId: string, record: SessionRecord<T>): Promise<boolean>

Sustituye de forma atómica un ID existente de la misma familia; false si ya no existe.

revokeFamily #

método opcional

revokeFamily?(familyId: string): Promise<void>

Revoca de forma atómica el ID activo de la familia, aunque el handle sea anterior a una rotación.

subscribeRevocations #

método opcional

subscribeRevocations?(listener: (familyId: string) => void): Unsubscribe | Promise<Unsubscribe>

Notifica las llamadas a revokeFamily de todas las instancias que comparten el store, para que se detengan las peticiones en curso y los sockets de esa familia. Se resuelve cuando las notificaciones ya llegan.

rateLimit #

método opcional

rateLimit?(key: string, windowMs: number): Promise<RateLimitHit>

Cuenta una petición en la ventana fija key de windowMs milisegundos y devuelve el total de la ventana y cuánto falta para la siguiente (desde 1.2). Lo usa la opción rateLimit de API y RPC; debe ser atómico entre instancias y rechazar si el almacenamiento falla, para que la petición se rechace. Sin él, los límites se cuentan en la memoria de cada instancia.

close #

método opcional

close?(): Promise<void>

Libera los recursos propios del store.

Véase también #

¿Te sirvió esta página?

Añadir un comentario

Se envía al elegir «Sí» o «No». Solo se guardan la página, tu respuesta y el comentario: ni cookies ni datos tuyos.

0 de 2000 caracteres

Editar en GitHub: packages/meeko/src/server/runtime/sessions.ts