cellarvinhostechteam/novo-app-cellar
feat/tab-pop-to-top · 22 de setembro de 2026 às 13:11 · gpt-5.6-sol
A análise estática dos 24 arquivos identificou riscos relevantes de segurança, distribuição e disponibilidade. Os principais problemas são tráfego inseguro habilitado nas builds, credencial de autenticação transmitida na URL, publicação no canal de produção controlada apenas pela mensagem de commit, configuração de push de desenvolvimento aplicada à produção e possibilidade de splash infinito quando as fontes falham. Também há scripts de migração defeituosos, requisições desnecessárias e ausência de automação de testes no package.json.
Builds permitem tráfego HTTP e desabilitam proteções de transporte
securityapp.config.js:16O iOS configura NSAllowsArbitraryLoads: true, inclusive dentro de infoPlist, e o Android configura usesCleartextTraffic: true. Essas opções são aplicadas globalmente, sem separação por ambiente ou perfil de build.
Token de autenticação e e-mail são enviados na query string da WebView
securitysrc/components/home/ClubeWelcome.tsxA navegação constrói `https://socio.cellarvinhos.com/loginWebview?email=${userEmail}&tokenVtex=${authCookie?.Value}`. Tokens em query strings podem aparecer em logs, histórico, telemetria, ferramentas de observabilidade e cabeçalhos Referer. Os valores também não passam por encodeURIComponent; quando authCookie estiver ausente, a URL conterá tokenVtex=undefined.
Push na branch development pode publicar diretamente no canal production
reliability.eas/workflows/publish-development-updates.yml:16O job dev_update_production é executado em pushes para development quando a mensagem do head commit contém simultaneamente `update` e `production`. Não existe aprovação, tag, branch de release ou validação adicional no workflow apresentado.
Configuração de push de desenvolvimento é usada também em builds de produção
reliabilityapp.config.jsA configuração é incondicional: o entitlement `aps-environment` está como `development` e o onesignal-expo-plugin recebe `mode: "development"`. O eas.json possui perfil production, mas app.config.js não altera esses valores conforme o perfil.
Falha no carregamento de fontes mantém o aplicativo indefinidamente no splash
reliabilityApp.tsxO retorno `useFonts` é desestruturado apenas como `[fontsLoaded]`. Enquanto fontsLoaded for false, o componente sempre retorna AnimatedSplash. O erro fornecido pelo hook não é tratado, portanto qualquer falha permanente de fonte impede que a árvore principal seja renderizada.
Script de substituição não adiciona o import de AppScrollView
bugreplace_scrollviews.js:33Antes da condição de import, o script substitui `<ScrollView` por `<AppScrollView`. Em seguida verifica `if (!content.includes('AppScrollView'))`, que sempre será falso para qualquer arquivo efetivamente substituído. Assim, o arquivo pode passar a usar AppScrollView sem importá-lo.
Erro no AsyncStorage impede o fechamento do modal
reliabilitysrc/components/home/SelecaoCupons/HowToUseCouponsModal.tsxhandleClose aguarda AsyncStorage.setItem ou removeItem antes de chamar onClose, sem try/finally. Se a operação de armazenamento rejeitar, onClose não é executado. loadPref também não trata rejeições.
Consulta da vitrine é executada mesmo quando o componente não será exibido
performancesrc/components/home/MinhaVitrine.tsx:17useAdegaProductsQuery(skus) é chamado antes da condição que retorna null para usuários fora do clube ou sem cluster. Além disso, skus recebe uma lista padrão, portanto usuários inelegíveis ainda podem iniciar a consulta desses produtos.
Builds de produção reutilizam buildNumber e versionCode fixos
reliabilityeas.jsonO perfil production possui `autoIncrement: false`, enquanto app.config.js fixa iOS buildNumber e Android versionCode em 70. Builds sucessivas geradas sem alteração manual reutilizarão os mesmos identificadores, que não podem ser submetidos novamente às lojas após uso.
Não há comando nem infraestrutura de testes automatizados declarados
testingpackage.json:5A seção scripts não contém `test`, e as dependências apresentadas não incluem runner de testes. Fluxos críticos modificados ou configurados nestes arquivos, como deep links, splash, atualizações OTA, modal persistente e scripts de transformação, ficam sem proteção automatizada visível.
Logs verbosos do OneSignal permanecem habilitados em produção
securityApp.tsx`OneSignal.Debug.setLogLevel(LogLevel.Verbose)` é executado incondicionalmente no carregamento do módulo, sem verificação de __DEV__ ou perfil de build.