Pular para o conteúdo principal

8 publicações com a etiqueta "esportes"

Ver todas as etiquetas

Changelog - 05/07/2026

Semana de 29/06 a 05/07, na branch main-7k do front-web-base. Semana mais leve em volume (47 commits filtrados), mas com duas decisões estruturais de tracking.

Semana 29/06–05/07 — anaLayer: uma segunda camada de tagueamento GA4, paralela à existente

  • Fundação da camada (1fceb0672): implementa o tagueamento GA4 do guia Ana Gaming num container GTM secundário próprio, com dataLayer isolado chamado anaLayer, rodando em paralelo e independente da stack de analytics atual (dataLayer/registry + Meta, Kwai e os demais). A config é brand-gated com default null, então a invariante é que nenhuma brand dispara sem container declarado. Inclui registry tipado dos 32 eventos, helper pushAnaLayerEvent, campos padrão (user_id, user_id_hash como SHA-256 do CPF, platform, profile_type, event_timestamp), event_id determinístico, AnaLayerProvider/useAnaLayer e um AnaLayerInitializer espelhando o Consent Mode v2 do initGTM. 21 testes.
  • Wiring de 22 eventos no mesmo commit — page_view, login, sign_up, modal_viewed, begin_checkout, add_payment_info, deposit_pix_generated/copied, purchase, deposit_pix_expired, withdrawal_started/requested, kyc_started/completed, form_error, view_item_list, select_item, view_promotion/select_promotion, select_content e search — disparados em paralelo aos eventos legados, lendo IDs reais das APIs. Bloqueados de propósito, com scaffold e TODO: game_opened e game_session_ended (aguardando game_session_id no StartGameResponse do core), além de refund, o ciclo de saque pós-requested, aprovação/rejeição de KYC e cashback, que são observados no backend e ficam registry-only. Nada é disparado com dado sintético.
  • Alvo trocado de 7k pra vera e depois configurado por brandfba166367 reaponta a camada pra vera em vez do 7k; b621f558e faz o useAnaLayer degradar pra no-op fora do provider; e 4bf4ebabd adiciona a flag enabled à AnaLayerConfig, criando o estado "configurado mas desabilitado": o gate passa a exigir enabled === true e containerId. Resultado no fim da semana: vera-bet-br é a única com enabled: true; 7k-bet-br e cassino-bet-br ficam com container declarado e enabled: false. Os IDs de container vivem só nos overrides de cada brand.

Changelog - 28/06/2026

Semana de 22/06 a 28/06, na branch main-7k do front-web-base.

  • O baseline de boot do Google Consent Mode v2 foi invertido pra granted (16bf59fee). Isto reverte o comportamento descrito no changelog de 23/04/2026. A política antiga emitia gtag('consent','default', { ...tudo denied, wait_for_update: 500 }) e só depois, se houvesse cookie salvo, aplicava um update. A nova emite gtag('consent','default', { ...tudo granted }) sempre, sem wait_for_update. O único caminho que ainda rebaixa sinais é cookieConsentCosmeticOnly === false e cookie salvo indicando rejeição total, caso em que o initGTM dispara um update imediato pra denied. Matriz implementada: cosmético truegranted (qualquer cookie ignorado); cosmético false sem cookie ou com aceite → granted; cosmético false com rejeição total → default granted + update imediato pra denied. Arquivos: app/utils/metrics/consent.ts (injectConsentDefaults com opts.applyDenied) e app/utils/metrics/gtm.ts (decide applyDenied = !cosmetic && userRejectedAll), com 4 casos de teste. A justificativa registrada no commit é paridade com o app Nuxt legado, que nunca gateava tracking, e a eliminação da janela cega de 500ms do wait_for_update, apontada como causa suspeita da queda de performance em Google Ads e Meta Ads após a migração.
  • cookieConsentCosmeticOnly passa a ter default true no base (be0518d91). Antes o default global era false, então brand que não declarasse a flag honrava a rejeição do usuário. As 7 brands que já declaravam true seguem idênticas; as 8 que herdavam false (casateste-com, donald-bet-br, pb-bet, ph-state77-com, pt-state77-com, rj-bet, state77-com, x2b-bet) passaram a declarar false explicitamente no próprio override — comportamento preservado bit a bit, com o ganho de que cada override é agora a fonte autoritativa da política de consent daquela brand, sem depender do default do base.
  • Nota de revisão pendente: as duas mudanças acima descrevem o que o código faz hoje. A política resultante — consent concedido por padrão, tratamento cosmético como default e ausência de botão de rejeição total no banner — ainda depende de confirmação do responsável por LGPD antes de ser publicada como política oficial. Registrado aqui como fato técnico, não como posição de conformidade.
  • Eco do gtag duplicando eventos do dataLayer corrigido em ea9b09a68.

Changelog - 14/06/2026

Semana 08–14/06 — Novo sportsbook nativo: rogue

  • Quarto provider de sportsbook, e o primeiro renderizado in-app4c37f8967 integra o rogue: um sportsbook React nativo entregue pelo SDK @cactus-agents/sports-rogue, montado dentro da própria aplicação em Shadow DOM e consumindo a Rogue API da First. Diferente de First, Altenar e Betby, que são iframes, aqui o sportsbook é componente. O SportsRogue.tsx monta o SDK via createSportsbook, registra callbacks de auth / login / depósito / share, sincroniza histórico (pushState + popstateinstance.navigate), restaura share links via ?betslip= e aplica offsets de layout por useSdkChromeOffsets.
  • Rotas server-side e segredo que não chega ao browser — o commit adiciona rogue-anonymous e rogue-login (token) mais rogue-proxy/*, um proxy same-origin pro domínio do provider com streaming de SSE, resolvendo CORS sem expor nada ao client. A chave de API é server-to-server: entra via extraHeaders do api-client e é injetada nos endpoints de token a partir de secret, nunca chegando ao browser. O app/config/sports/provider.ts ganha FORCE_SPORTBOOK (resolveForceSportbook / applyForceSportbook) pra ativar o provider por ambiente sem mexer no main estático da marca. O módulo é autocontido: escudos e assets vêm do CDN default do SDK, sem plugin de cópia no host.
  • Suporte no core, sem vazar tipos do SDK170ca69 declara "rogue" como SportsProvider reconhecido em @cactus-agents/sports, adiciona RogueProviderConfig (tema / scheme / estilo de odds / cores, mais passthrough), roguePath opcional em SportsSidebarItemBase e o caso correspondente em resolveMenuItemPath. Em @cactus-agents/api-client entra extraHeaders opcional em CactusServerClientOptions, mesclado nas requisições de saída, permitindo injetar segredos server-to-server sem forkar o client. Tudo aditivo: comportamento default inalterado. A config do rogue usa superfície comum tipada mais passthrough justamente pra que o SDK siga como fonte de verdade dos próprios tipos.
  • @cactus-agents/sports-rogue não vive no front-cactus-core — vale registrar explicitamente: o pacote é uma dependência @cactus-agents/* real do front-web-base, mas não está em front-cactus-core/packages/; é publicado de outro lugar. Hoje o PROVIDERS do base declara quatro providers: ["first", "altenar", "betby", "rogue"].
  • Auth do SDK reconciliada depois do init503560f37. O SDK ficava preso em anônimo mesmo com o usuário logado: o efeito de isAuthenticated chamava instance.setAuthenticated() antes de a instância existir (durante o import dinâmico do SDK), virava no-op, e como isAuthenticated não mudava de novo nunca havia nova tentativa — só rogue-anonymous era chamado, nunca rogue-login. O fix guarda o isAuthenticated num ref e, depois do await instance.init(), chama setAuthenticated(isAuthRef.current) pra reconciliar qualquer flip ocorrido na janela de import/init.
  • Trem de bumps do SDK na mesma semanafdada3743 (^0.4.0, criador de apostas), 570d71af2 (^0.5.0), a78417352 (^0.6.0), c95dc81f8 (^0.7.0) e 9721f814f (^0.8.0). O 0.3.0 trouxe auth lazy, dedup do token de SSE de 4+ chamadas pra 1 e retry na sidebar de esportes. O pacote segue evoluindo rápido — hoje o base está em ^0.29.2.

Changelog - 17/05/2026

Semana 11–17/05 — Álbum de figurinhas entra no base

  • Módulo album portado do harness pro host86435c4a9 traz o drop-in modules/album do repositório do sticker-book pra app/components/album/ (59 arquivos: Album.tsx, AlbumModal.tsx, páginas Missions / CheckIn / Stickers / Terms / PackOpener, context, hooks, reducer, types e utils) já cabeado na infraestrutura do base — rota gamification.album/vip/album registrada em todos os paths.ts de override, loader com auth gate e AlbumBootstrap. biome.json passa a excluir app/components/album/**, porque é código de módulo terceiro. Branch feat/album-integration.
  • Camada de proxy e serviço server-side — cinco rotas novas em app/routes/api/album/ (open-pack, open-all-packs, checkin, claim-prize, claim-featured) e o serviço app/services/album.cache.server.ts, que dispara um burst paralelo de 5 endpoints do BFF do álbum (stickers, packs, dias de check-in, featured, missions) chaveado na env ALBUM_API_URL e retorna null quando a env não está configurada — feature simplesmente não aparece em vez de quebrar a rota.
  • Overrides de tema por marca — 7k (navy + amarelo), cassino (azul + ciano) e vera (verde + lima) ganham config própria; o default em app/config/gamification/album.ts fica num slate escuro neutro.
  • Dois fixes de integração no mesmo dia24d73ebe1 remove um import circular introduzido nos overrides de marca e c2db1cd2b move a rota pra fora do layout VIP, porque a página não deve depender de gamificationConfig.modules pra existir.

Changelog - 04/05/2026

Jornada FTD — Refatoração Completa e Novas Brands

  • D0 e D1 desacoplados — antes, ativar o template vera-legacy do D0 (cashback) ligava implicitamente o modal de anúncio do D1 (check-in). Agora cada brand habilita as três etapas independentemente: ftdCashback.enabled, ftdCheckin.enabled e a flag nova ftdCheckin.announcement.enabled. Quatro combinações possíveis — só D0, só D1, ambos ou nenhum.
  • Copy e assets configuráveis por brand no template vera-legacyFtdCashbackConfig ganhou copy.{firstBonusToastTitle,cashbackModalTitle,cashbackModalDescriptionHtml,cashbackModalCtaText} + templateAssets.{firstBonusToastImage,cashbackModalImage}. FtdCheckinConfig ganhou announcement.copy.{title,descriptionHtml,ctaText} + templateAssets.image. Todos opcionais — fallback é o copy PT-BR + CDN da Vera (zero regressão).
  • 16 tokens de tema novos para o template e o toastftd-offer.template-{shell-bg,title-text,title-shadow,image-bg-from,image-bg-to,highlight-bg,highlight-border,highlight-text,cta-bg,cta-text} e ftd-offer.toast-{bg-from,bg-to,border,icon-bg-from,icon-bg-to,icon-border}. FtdOfferModalTemplate e FtdOfferInGameToast agora leem essas cores via CSS custom properties inline (Tailwind JIT não consegue gerar classes a partir de tokens dinâmicos).
  • 7k-bet-br ativa a jornada completa — D0 cashback, D1 check-in (com modal de anúncio "Garanta sua diversão!") e oferta-relâmpago pré-FTD, todos via template unificado. Quatro assets brand-specific da CDN do 7k substituem os fallbacks da Vera (toast, modal cashback, anúncio D1 e modal de oferta).
  • cassino-bet-br ativa a jornada completa — paleta + assets próprios, brand_id: 2 no Dark Verifier/Freedom (paridade com useFtdCashback.ts:52 do legado), kill-switches feFtdD0Cassino / feFtdD1Cassino, tabela bonusTiers de 35 níveis portada verbatim do legado (R$ 5 → R$ 3000+, cap em R$ 800), autoDepositModal abre o drawer de depósito automaticamente no login quando saldo ≤ R$ 0,10. Inclui lista de jogos elegíveis em cashback/eligible-games.ts.
  • cl-bet7k-com ativa D0 + D1 com identidade chilenabrandId: 4, kill-switch feFtdD07KCl (compartilhado D0/D1), tabela bonusTiers de 11 níveis em CLP (CLP 850 → CLP 510 000, cap CLP 136 000), 6995 IDs elegíveis portados 1:1 do legado, copy em espanhol chileno ("¡Sigue jugando para ganar un cashback!"). Moeda renderiza sem decimais ($50.000) via useFormatMoney() + CountryConfig.displayDecimalDigits. D1 começa desabilitado no primeiro rollout.
  • STT 2 (saldo bônus) com kill-switch remotosaldoBonus.featureFlags?: { legacy?, configcat? } permite desligar a STT 2 instantaneamente via ConfigCat ou FF legado sem deploy. O hook useFtdCashbackFlow computa saldoBonusRemoteKillSwitchPass (closed-by-default enquanto a API está em voo, mesma semântica do D0/D1). Cassino declara feFtdSaldoBonus + feFtdSaldoBonusCassino.

Changelog - 31/03/2026

Banners e Stories

  • Novos componentes de Stories implementados — StoriesCircles, StoriesModal, StoriesOnlyButton e StoriesWithModal para exibição interativa de banners
  • Autoplay adicionado ao HomeBannerCarousel com remoção do skeleton loading
  • Controle de visibilidade por linha (visibility control) adicionado ao sistema de home rows com classes responsivas
  • Correções de estabilidade no StoriesModal: safeClose para fechamento seguro com overlay invisível, reset de progresso e timing corretos, ajuste de padding e role de acessibilidade
  • Widgets configuráveis: HomeBannerCarousel, TournamentsSection e demais widgets agora aceitam title, icon e i18nKey como props para maior flexibilidade

Changelog - 17/03/2026

Conta do Usuário

  • Adicionadas seções de métodos de pagamento por país: Pix (Brasil), CLABE (México) e conta bancária chilena, diretamente na página de conta do usuário
  • Menu de conta agora é dinâmico e filtra itens por país e marca, eliminando entradas irrelevantes para cada mercado
  • Seção de contratos melhorada com aviso de pendências e fluxo de aceite
  • Formulário de documentos e data de nascimento adicionado com suporte a múltiplos países

Histórico de Login

  • Nova página de histórico de acesso com detecção de tipo de dispositivo e exibição de localização
  • Integrada transformação de dados via SDK: conversão de snake_case para camelCase e normalização de datas para ISO 8601
  • Adicionado proxy server-side com suporte a paginação

Proteção e Jogo Responsável

  • Página de IRPF agora é protegida por flag de país: redireciona para conta quando o país não suporta declaração de imposto de renda
  • Seção de limites e auto-exclusão refatorada para usar helpers do SDK (parseLimitPeriod, hoursToIsoDuration)
  • Constantes de opções de timeout e auto-exclusão agora vêm direto do SDK, reduzindo duplicidade de lógica

Contas Sociais e Segurança

  • Seção de contas sociais melhorada com estados de carregamento e erro
  • Fluxo de desconexão de conta social agora exige confirmação antes de prosseguir

Registro de Rotas (Route Registry)

  • Implementado sistema centralizado de registro de rotas com tipos, mapa de caminhos e helpers (routeHref, gameHref, sportPath, routePattern, isRouteActive)
  • Todos os componentes, configs de header, menu, sidebar, navegação e gamificação migrados para usar os novos helpers
  • Suporte a override de rotas por marca: exemplo com state77 usando caminhos customizados (/casino, /deportes, /gamificacion, /jugador)
  • Documentação adicionada no CLAUDE.md com guia de uso do Route Registry

Changelog - 10/03/2026

Sports (Módulo de Esportes)

  • Criado SDK @cactus-agents/sports no front-cactus-core, com suporte aos provedores First, Altenar e Betby — inclui tipos, navegação, carregamento dinâmico de SDK e testes unitários
  • Integração do módulo de esportes no front-web-base: novas rotas /sports, componentes SportsAltenar, SportsBetby e SportsIframeFirst, configurações de sidebar e APIs de launch/token para cada provedor
  • Migrado o pacote @cactus-agents/sports de link local para versão publicada no registry