Eventos
La plataforma emite CustomEvents del navegador sobre window. Todos los eventos usan el prefijo mindtraining: y su payload siempre está disponible en event.detail.
mindtraining:ready
Se dispara cuando: el script ha terminado de cargar y la API global MindtrainingPlatform está disponible en window.
Cuándo usarlo: es el hook recomendado para llamar a init. Escuchando este evento evitas condiciones de carrera entre la carga del script y la ejecución de tu código de inicialización.
event.detail
| Campo | Tipo | Descripción |
|---|---|---|
api | object | Referencia a window.MindtrainingPlatform |
window.addEventListener('mindtraining:ready', function (event) {
// event.detail.api === window.MindtrainingPlatform
MindtrainingPlatform.init('mindtraining', {
viewer: { loggedIn: false },
})
})¿El script ya estaba cargado? Si registras el listener después de que el script ya se haya ejecutado, el evento no volverá a dispararse. Usa este patrón de guardia:
function initializeMindtraining() {
MindtrainingPlatform.init('mindtraining', {
viewer: { loggedIn: false },
})
}
if (window.MindtrainingPlatform) {
initializeMindtraining()
} else {
window.addEventListener('mindtraining:ready', initializeMindtraining, { once: true })
}mindtraining:config
Se dispara cuando: la configuración de la plataforma se actualiza, tanto después del init() inicial como tras cualquier llamada posterior a updateConfig().
Cuándo usarlo: úsalo para reaccionar a cambios de configuración desde fuera de la plataforma, por ejemplo para sincronizar el estado de tu propia UI (como reflejar un cambio de suscripción o de login que la plataforma acaba de recibir).
event.detail
El objeto completo PlatformInitConfig normalizado en el momento del cambio.
| Campo | Tipo | Descripción |
|---|---|---|
viewer | object | Configuración actual del visor/usuario |
viewer.userId | string | null | ID del usuario activo |
viewer.loggedIn | boolean | Si el usuario está autenticado |
viewer.subscribed | boolean | Si el usuario tiene una suscripción activa |
ui | object | Configuración actual de UI |
ui.mode | 'web' | 'app' | Modo de renderizado |
ui.actions | object | Callbacks de acciones registradas |
access | object | Reglas actuales de acceso por tipo de juego |
window.addEventListener('mindtraining:config', function (event) {
const config = event.detail
console.log('Usuario autenticado:', config.viewer?.loggedIn)
console.log('Usuario suscrito:', config.viewer?.subscribed)
console.log('Reglas de acceso activas:', config.access?.games)
})Eventos de juego y navegación
Los siguientes eventos se emiten durante el juego y la navegación. Úsalos para analítica, tracking, integraciones del host y observabilidad.
mindtraining:game:loaded
Se dispara cuando: una sesión o pantalla de juego está lista para la interacción del usuario.
Cuándo usarlo: úsalo para trackear pageviews internas del juego, medir qué juegos llegan realmente a cargarse o disparar lógica del host en función del tipo de juego.
event.detail
| Campo | Tipo | Descripción |
|---|---|---|
gameType | string | Tipo de juego (por ejemplo crossword, sudoku) |
gameId | string | Identificador único del juego |
variant | string | Variante del juego (por ejemplo default, mini) |
route | string | Ruta interna |
source | string | Origen del juego (por ejemplo today, archive) |
window.addEventListener('mindtraining:game:loaded', function (event) {
Analytics.track('mindtraining_game_loaded', event.detail)
})mindtraining:game:playing
Se dispara cuando: el usuario empieza a interactuar realmente con el juego (por ejemplo, primer movimiento o primera entrada).
Cuándo usarlo: úsalo para distinguir entre un juego cargado y un juego realmente jugado, medir activación o trackear engagement.
event.detail
| Campo | Tipo | Descripción |
|---|---|---|
gameType | string | Tipo de juego |
gameId | string | Identificador único del juego |
variant | string | Variante del juego |
startedAt | string | Marca temporal ISO 8601 del inicio |
window.addEventListener('mindtraining:game:playing', function (event) {
Analytics.track('mindtraining_game_playing', event.detail)
})mindtraining:game:completed
Se dispara cuando: el usuario completa un juego correctamente.
Cuándo usarlo: úsalo para funnels completos, analítica de dificultad o ranking/gamificación del lado host.
event.detail
| Campo | Tipo | Descripción |
|---|---|---|
gameType | string | Tipo de juego |
gameId | string | Identificador único del juego |
variant | string | Variante del juego |
completedAt | string | Marca temporal ISO 8601 de fin |
durationMs | number | Duración de la sesión en milisegundos |
score | number | Puntuación final (si aplica) |
window.addEventListener('mindtraining:game:completed', function (event) {
Analytics.track('mindtraining_game_completed', event.detail)
})mindtraining:game:abandoned
Se dispara cuando: el usuario abandona una sesión de juego activa sin completarla.
Cuándo usarlo: úsalo para detectar fricción, medir abandono por juego o variante, o mejorar flujos de retención.
event.detail
| Campo | Tipo | Descripción |
|---|---|---|
gameType | string | Tipo de juego |
gameId | string | Identificador único del juego |
variant | string | Variante del juego |
durationMs | number | Tiempo invertido antes de abandonar |
progress | number | Progreso (0–1) en el momento del abandono |
window.addEventListener('mindtraining:game:abandoned', function (event) {
Analytics.track('mindtraining_game_abandoned', event.detail)
})mindtraining:game:state:saved
Se dispara cuando: el estado del juego se persiste (por ejemplo, para la funcionalidad de “continuar jugando”).
Cuándo usarlo: úsalo para trackear retención, flujos de “continuar jugando” o verificar que el estado guardado funciona correctamente.
event.detail
window.addEventListener('mindtraining:game:state:saved', function (event) {
Analytics.track('mindtraining_game_state_saved', event.detail)
})mindtraining:access:blocked
Se dispara cuando: la plataforma detecta que una superficie (juego de hoy, archivo, etc.) está bloqueada para el usuario.
Cuándo usarlo: úsalo para disparar paywalls contextuales, medir demanda no satisfecha o personalizar mensajes del host según el motivo del bloqueo.
event.detail
window.addEventListener('mindtraining:access:blocked', function (event) {
Analytics.track('mindtraining_access_blocked', event.detail)
if (event.detail.blockedReason === 'subscription_required') {
Paywall.show({ context: 'game_archive' })
}
})mindtraining:route:changed
Se dispara cuando: cambia la ruta interna de la plataforma (por ejemplo, navegación dentro de la SPA).
Cuándo usarlo: úsalo para pageviews virtuales o para sincronizar analítica con la navegación interna de la plataforma.
event.detail
window.addEventListener('mindtraining:route:changed', function (event) {
Analytics.track('mindtraining_route_changed', event.detail)
})mindtraining:pageview
Se dispara cuando: la plataforma registra una vista navegable relevante para analítica.
Cuándo usarlo: úsalo para pageview tracking en herramientas analíticas, reporting por sección y tipo de juego o atribución de navegación interna de la SPA.
event.detail