Skip to content

Eventos

A plataforma emite CustomEvents do navegador em window. Todos os eventos usam o prefixo mindtraining: e o payload está sempre disponível em event.detail.


mindtraining:ready

Disparado quando: o script terminou de carregar e a API global MindtrainingPlatform está disponível em window.

Quando usar: este é o hook recomendado para chamar init. Ao escutar esse evento, você evita condições de corrida entre o carregamento do script e a execução do seu código de inicialização.

event.detail

CampoTipoDescrição
apiobjectReferência a window.MindtrainingPlatform
js
window.addEventListener('mindtraining:ready', function (event) {
  // event.detail.api === window.MindtrainingPlatform
  MindtrainingPlatform.init('mindtraining', {
    viewer: { loggedIn: false },
  })
})

O script já carregou? Se o listener for registrado depois que o script já tiver sido executado, o evento não será disparado novamente. Use este padrão de guarda:

js
function initializeMindtraining() {
  MindtrainingPlatform.init('mindtraining', {
    viewer: { loggedIn: false },
  })
}

if (window.MindtrainingPlatform) {
  initializeMindtraining()
} else {
  window.addEventListener('mindtraining:ready', initializeMindtraining, { once: true })
}

mindtraining:config

Disparado quando: a configuração da plataforma é atualizada, tanto após a chamada inicial de init() quanto após qualquer updateConfig() subsequente.

Quando usar: use este evento para reagir a mudanças de configuração feitas fora da plataforma, por exemplo para sincronizar o estado da sua própria UI.

event.detail

O objeto PlatformInitConfig normalizado completo no momento da mudança.

CampoTipoDescrição
viewerobjectConfigurações atuais do visualizador/usuário
viewer.userIdstring | nullID do usuário ativo
viewer.loggedInbooleanSe o usuário está autenticado
viewer.subscribedbooleanSe o usuário tem uma assinatura ativa
uiobjectConfigurações atuais de UI
ui.mode'web' | 'app'Modo de renderização
ui.actionsobjectCallbacks de ações registradas
accessobjectRegras atuais de acesso por tipo de jogo
js
window.addEventListener('mindtraining:config', function (event) {
  const config = event.detail

  console.log('Usuário autenticado:', config.viewer?.loggedIn)
  console.log('Usuário assinante:', config.viewer?.subscribed)
  console.log('Regras de acesso ativas:', config.access?.games)
})

Eventos de jogo e navegação

Os eventos a seguir são emitidos durante a jogabilidade e a navegação. Use-os para analytics, tracking, integrações do host e observabilidade.


mindtraining:game:loaded

Disparado quando: uma sessão ou tela de jogo está pronta para interação.

Quando usar: use este evento para acompanhar pageviews internas do jogo, medir quais jogos realmente carregam ou acionar lógica do host com base no tipo de jogo.

event.detail

CampoTipoDescrição
gameTypestringTipo de jogo (ex. crossword, sudoku)
gameIdstringIdentificador único do jogo
variantstringVariante do jogo (ex. default, mini)
routestringRota interna
sourcestringOrigem do jogo (ex. today, archive)
js
window.addEventListener('mindtraining:game:loaded', function (event) {
  Analytics.track('mindtraining_game_loaded', event.detail)
})

mindtraining:game:playing

Disparado quando: o usuário começa a interagir de verdade com o jogo (por exemplo, primeiro movimento ou primeira entrada).

Quando usar: use este evento para diferenciar um jogo carregado de um jogo realmente jogado, medir ativação ou acompanhar engajamento.

event.detail

CampoTipoDescrição
gameTypestringTipo de jogo
gameIdstringIdentificador único do jogo
variantstringVariante do jogo
startedAtstringTimestamp ISO 8601 do início
js
window.addEventListener('mindtraining:game:playing', function (event) {
  Analytics.track('mindtraining_game_playing', event.detail)
})

mindtraining:game:completed

Disparado quando: o usuário conclui um jogo com sucesso.

Quando usar: use este evento para funis completos, analytics de dificuldade ou ranking/gamificação do lado host.

event.detail

CampoTipoDescrição
gameTypestringTipo de jogo
gameIdstringIdentificador único do jogo
variantstringVariante do jogo
completedAtstringTimestamp ISO 8601 de término
durationMsnumberDuração da sessão em milissegundos
scorenumberPontuação final (quando aplicável)
js
window.addEventListener('mindtraining:game:completed', function (event) {
  Analytics.track('mindtraining_game_completed', event.detail)
})

mindtraining:game:abandoned

Disparado quando: o usuário abandona uma sessão de jogo depois de começar a jogar e antes de concluir.

Quando usar: use este evento para detectar atrito, medir abandono por jogo ou variante, ou melhorar fluxos de retenção.

event.detail

CampoTipoDescrição
gameTypestringTipo de jogo
gameIdstringIdentificador único do jogo
variantstringVariante do jogo
durationMsnumberTempo gasto antes do abandono
progressnumberProgresso (0–1) no momento do abandono
js
window.addEventListener('mindtraining:game:abandoned', function (event) {
  Analytics.track('mindtraining_game_abandoned', event.detail)
})

mindtraining:game:state:saved

Disparado quando: o estado do jogo é persistido (por exemplo, para a funcionalidade de “continuar jogando”).

Quando usar: use este evento para acompanhar retenção, fluxos de continuação ou verificar se o estado salvo está funcionando.

event.detail

js
window.addEventListener('mindtraining:game:state:saved', function (event) {
  Analytics.track('mindtraining_game_state_saved', event.detail)
})

mindtraining:access:blocked

Disparado quando: a plataforma detecta que uma superfície (jogo de hoje, arquivo etc.) está bloqueada para o usuário.

Quando usar: use este evento para acionar paywalls contextuais, medir demanda não atendida ou personalizar mensagens do host com base no motivo do bloqueio.

event.detail

js
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

Disparado quando: a rota interna da plataforma muda (por exemplo, navegação dentro da SPA).

Quando usar: use este evento para pageviews virtuais ou para sincronizar analytics com a navegação interna da plataforma.

event.detail

js
window.addEventListener('mindtraining:route:changed', function (event) {
  Analytics.track('mindtraining_route_changed', event.detail)
})

mindtraining:pageview

Disparado quando: a plataforma registra uma visualização navegável relevante para analytics.

Quando usar: use este evento para pageview tracking, relatórios por seção e tipo de jogo ou atribuição da navegação interna da SPA.

event.detail

CampoTipoDescrição
pathnamestringRota atual
titlestringTítulo da página
gameTypestringTipo de jogo, se aplicável
gameIdstringIdentificador do jogo, se aplicável
variantstringVariante do jogo, se aplicável
sourcestringOrigem da visualização (por exemplo, today, archive)
js
window.addEventListener('mindtraining:pageview', function (event) {
  Analytics.track('mindtraining_pageview', event.detail)
})

mindtraining:user:action

Disparado quando: o usuário realiza uma interação importante (por exemplo, clica no arquivo ou seleciona um jogo).

Quando usar: use este evento para acompanhar cliques relevantes, executar experimentos ou instrumentar a UI sem conectar cada botão a partir do host.

event.detail

CampoTipoDescrição
actionstringIdentificador da ação (por exemplo, click_archive)
locationstringLocalização na UI (por exemplo, home_header)
gameTypestringTipo de jogo, se aplicável
variantstringVariante do jogo, se aplicável
indexnumberPosição zero-based do bloco/item de jogo clicado na lista renderizada, se aplicável
urlstringURL externo selecionado na navegação, se aplicável

Valores atuais de action:

ValorSignificado
click_playO usuário clica em uma CTA para jogar ou abrir um jogo
click_archiveO usuário clica em uma CTA de arquivo ou histórico
click_startO usuário inicia um jogo pela tela intermediária
click_backO usuário clica em uma CTA de voltar ou navegação
click_navO usuário clica em um link de navegação externo

Valores atuais de location:

ValorSuperfície
home_block_gameCard ou bloco de jogo na home
home_block_dynamic_gamesBloco dinâmico de jogos na home
historical_game_blockBloco de jogos históricos ou recentes
intermediate_game_screenTela intermediária exibida antes de entrar em um jogo
game_navigationCabeçalho de navegação dentro do jogo
site_navMenu de navegação do site
game_navigation_menuMenu de navegação dentro do jogo
js
window.addEventListener('mindtraining:user:action', function (event) {
  Analytics.track('mindtraining_user_action', event.detail)
})

mindtraining:share:requested

Disparado quando: o usuário tenta compartilhar conteúdo da plataforma.

Quando usar: use este evento para analytics de intenção de compartilhamento ou para conectar com o fluxo nativo de compartilhamento do host.

event.detail

CampoTipoDescrição
gameTypestringTipo de jogo
gameIdstringIdentificador do jogo
urlstringURL para compartilhar
titlestringTítulo para compartilhar
js
window.addEventListener('mindtraining:share:requested', function (event) {
  Analytics.track('mindtraining_share_requested', event.detail)
})

mindtraining:error

Disparado quando: ocorre um erro de fluxo, carregamento ou interação relevante para o host.

Quando usar: use este evento para observabilidade, alertas ou UI de fallback no host.

event.detail

CampoTipoDescrição
scopestringEscopo do erro (por exemplo, game-load)
codestringCódigo do erro (por exemplo, GAME_DATA_FETCH_FAILED)
messagestringMensagem legível
recoverablebooleanSe o usuário pode se recuperar do erro
js
window.addEventListener('mindtraining:error', function (event) {
  Analytics.track('mindtraining_error', event.detail)
  if (!event.detail.recoverable) {
    ErrorUI.show(event.detail)
  }
})

Eventos recomendados para analytics

Uma abordagem prática para analytics do host é escutar:

  1. mindtraining:ready - para saber quando é seguro inicializar
  2. mindtraining:config - para acompanhar mudanças de configuração
  3. mindtraining:game:loaded - para medir carregamentos de jogos
  4. mindtraining:pageview - para acompanhar pageviews
  5. mindtraining:game:playing - para medir ativação
  6. mindtraining:game:completed - para medir conclusões
  7. mindtraining:access:blocked - para medir demanda bloqueada
  8. mindtraining:error - para monitorar erros
js
window.addEventListener('mindtraining:game:loaded', function (event) {
  Analytics.track('mindtraining_game_loaded', event.detail)
})
window.addEventListener('mindtraining:game:playing', function (event) {
  Analytics.track('mindtraining_game_playing', event.detail)
})
window.addEventListener('mindtraining:pageview', function (event) {
  Analytics.track('mindtraining_pageview', event.detail)
})
window.addEventListener('mindtraining:access:blocked', function (event) {
  Analytics.track('mindtraining_access_blocked', event.detail)
})

Client integration documentation maintained in-repo.