v2.0

Arquitetura da Plataforma

Como as quatro camadas da browserMate se dividem responsabilidades, como a execução de um processo atravessa cada uma delas, e como autenticação e persistência funcionam por trás da simplicidade de uso, sem entrar em detalhes internos de implementação.

Camadas da Arquitetura

A plataforma browserMate é dividida em quatro serviços independentes, cada um com uma responsabilidade única e uma superfície de confiança diferente. Essa separação existe para que nenhum componente precise confiar mais do que o estritamente necessário em nenhum outro, inclusive nos componentes que rodam fora do perímetro da browserMate, dentro do ambiente do próprio cliente.

É o mesmo princípio de least privilege que rege bancos, provedores de nuvem e qualquer arquitetura pensada para operar credenciais reais de sistemas de terceiros em escala. Não só automatizar cliques.

As quatro camadas da plataforma

Quem interage
👤
Usuários da empresa
Login via SSO, monta e monitora processos
🔗
Sistemas de terceiros
Integrações via API externa
↓autenticação e comandos

Camada de Interface
🖥️
UI
Agent Builder, Control Room, Dashboards, Admin
🌐
API Externa (/v1)
Superfície REST para integração de terceiros
↓dispara e acompanha execuções

Camada de Execução
🤖
Runtime
Um ou mais ambientes, na nuvem ou dentro da infraestrutura do cliente, executando navegador, código, OCR e conectores
↕token de execução de curta duração · pede autorização a cada operação sensível


Camada de Broker & Segurança
🛡️
Router
Único ponto com credenciais privilegiadas: autoriza, decifra segredos, grava evidências, encaminha logs
↓operações administradas em nome de quem pediu

Google Cloud
🪪
Firebase Auth
Identidade
🗄️
Firebase RTDB
Dados operacionais
🔐
Cloud KMS
Chave-mestra de segredos
🇧🇷 São Paulo
📊
BigQuery + Cloud Logging
Analytics e auditoria
🇧🇷 São Paulo
🖼️
Cloud Storage
Evidências de execução
Quem acessa Interface Execução Broker Infraestrutura Google Cloud

Cada camada tem um papel e um limite claro do que nunca faz:

CamadaOnde rodaResponsabilidade centralNunca faz
UI Infraestrutura controlada pela browserMate Autoria visual de processos, monitoramento, administração de conta e dashboards Não guarda a chave-mestra que decifra os segredos dos clientes
Runtime Ambiente cadastrado pelo cliente. Nuvem ou infraestrutura própria Executa cada etapa do processo: navegação, extração, código customizado, conectores, OCR Nunca carrega uma credencial capaz de acessar dados de outro cliente
Router Infraestrutura controlada pela browserMate Autoriza cada operação sensível, decifra segredos sob demanda, centraliza observabilidade Não aceita identidade declarada pelo chamador. Resolve sempre por conta própria
API Externa (/v1) Serviço isolado, infraestrutura própria Superfície de integração REST para sistemas de terceiros Não atende nenhuma rota com apenas uma das duas credenciais exigidas

O caminho de uma execução

O mesmo desenho de caixas acima descreve, na prática, o que acontece do clique em "Executar" até o resultado aparecer na tela:

  1. Autoria. O processo é desenhado no Agent Builder e fica salvo isolado por tenant. Nenhum outro cliente enxerga essa estrutura.
  2. Disparo. Uma execução começa manualmente, por agendamento ou por uma chamada da API Externa.
  3. Captura do job. O Runtime do ambiente designado pega a execução da fila e se autentica com um token de curta duração, emitido especificamente para aquele job.
  4. Autorização. Antes de tocar qualquer dado, o Runtime pede ao Router a confirmação de que pode operar sobre aquele processo. A decisão de "quem pode o quê" nunca é tomada pelo próprio Runtime.
  5. Segredos sob demanda. Sempre que uma etapa precisa de uma senha do Cofre ou da credencial de um conector, o Runtime pede ao Router, que decifra via KMS e devolve só o valor necessário, nunca a chave.
  6. Evidências e logs. Screenshots e PDFs de evidência sobem por um upload administrado pelo Router; cada etapa gera um log estruturado que alimenta a Trilha de Auditoria e os Dashboards analíticos.
  7. Acompanhamento. Status, pausas e o resultado final chegam em tempo real ao Control Room, por um canal protegido por regra de acesso por tenant.

Topologia de Comunicação

O desenho das camadas mostra responsabilidade: quem pode fazer o quê. Este mostra fiação: protocolo, porta e quem autentica cada salto, exatamente o que o time de TI do cliente costuma pedir antes de liberar firewall/proxy para colocar um Ambiente Runtime em produção atrás de uma rede restritiva.

Quem inicia
👤
Navegador do usuário
🔗
Sistema de terceiros
↓HTTPS · porta 443
app.browsermate.io
↓HTTPS · porta 8443
api.browsermate.io · Bearer bm_live_ + X-Process-Key
Camada de Interface
🖥️
UI
🌐
API Externa (/v1)
↓HTTPS · porta 9443 · router.browsermate.io
header x-internal-secret · dispara job (/jobs/input) e sincroniza agendamento
🛡️
Router
↕HTTPS · porta 9443 · router.browsermate.io
Authorization: Bearer <ID token Firebase> · ativação, autorização de job, segredos sob demanda, evidência, log e execução
Camada de Execução
🤖
Runtime
↓gRPC/HTTPS · porta 443 · *.googleapis.com (cloudkms · logging · bigquery · storage)
credenciais de service account, só o Router as possui
Google Cloud
🔐
Cloud KMS
📊
Cloud Logging
📈
BigQuery
🖼️
Cloud Storage
↓SMTP com STARTTLS · porta 587 · smtp-relay.brevo.com
✉️
Brevo (SMTP)
E-mails do sistema: convite, alerta, cobrança
Dois canais que não passam pelo Router
  • Runtime ↔ Firebase Realtime Database: WSS (WebSocket sobre TLS), porta 443, domínio *.firebaseio.com da Google. O runtime se autentica com o ID token trocado a partir do custom token que o Router emitiu na ativação, mas a partir daí fala direto com o Firebase, sem o Router no meio. É por essa conexão que ele enxerga um job novo em tempo real (child_added na fila) e grava o status RUNNING. Precisa estar liberada à parte do domínio do Router, é a causa mais comum de "roda sem erro, mas nunca aparece online" (veja Erros comuns de ativação e conexão).
  • Runtime ↔ UI (socket.io): WSS, porta 443, mesmo domínio app.browsermate.io da UI, autenticado por um handshake próprio ({ role: "runtime", token }), não pela sessão do navegador. Ativo só durante um Debug ao vivo (tela e log em tempo real) e durante o gravador do Copilot, não durante execução normal em produção.
ConexãoProtocoloHost : PortaAutenticaçãoFinalidade
Navegador → UI HTTPS (TLS) app.browsermate.io:443 Login federado (Google/Microsoft/e-mail) direto no provedor, depois cookie de sessão httpOnly Autoria de processos, monitoramento, todas as telas autenticadas
Navegador ↔ UI (Agent Builder) WSS app.browsermate.io:443 Sessão de servidor compartilhada + posse do instanceID Debug ao vivo, comandos de pausar/retomar, gravador
Sistema de terceiros → API Externa HTTPS (TLS) api.browsermate.io:8443 Authorization: Bearer bm_live_... + X-Process-Key Disparar execução, consultar status, cadastrar webhook
UI / API Externa → Router HTTPS (TLS) router.browsermate.io:9443 Header x-internal-secret compartilhado /jobs/input (dispara job) e /internal/schedule-changed (sincroniza cron)
Runtime → Router HTTPS (TLS) router.browsermate.io:9443 /runtime/activate: o próprio key_activation + user_token no corpo é o segredo apresentado. Demais rotas: Authorization: Bearer <ID token> Ativação, /runtime/job/resolve, segredos sob demanda (vault, conector, token Google), evidência, log, execução, e-mail, OCR
Runtime → Firebase Auth HTTPS domínios de autenticação da Google, porta 443 Custom token emitido pelo Router Troca o custom token por um ID token de curta duração
Runtime ↔ Firebase RTDB WSS *.firebaseio.com:443 ID token do client SDK, restrito pelas Security Rules do próprio tenant Escuta a fila de jobs em tempo real, grava status RUNNING
Runtime ↔ UI (socket.io) WSS app.browsermate.io:443 Handshake { role: "runtime", token } Repassa comandos de Debug e eventos do gravador ao worker
Router → Cloud KMS gRPC/HTTPS cloudkms.googleapis.com:443 Service account do Router Decifra/cifra segredos do Cofre e de conectores. Chave em São Paulo
Router → Cloud Logging gRPC/HTTPS logging.googleapis.com:443 Service account do Router Grava em lote cada linha de log estruturado por etapa
Router → BigQuery (escrita) gRPC/HTTPS bigquery.googleapis.com:443 Service account do Router Insere 1 registro por execução concluída (streaming insert), região São Paulo
Router → Cloud Storage HTTPS storage.googleapis.com:443 Service account do Router Upload e exclusão de evidências (screenshots, PDFs)
Router → SMTP SMTP com STARTTLS smtp-relay.brevo.com:587 Usuário/senha SMTP (Brevo) E-mails do sistema: convite, alerta, cobrança
UI → BigQuery (leitura) gRPC/HTTPS bigquery.googleapis.com:443 Service account própria da UI, independente da do Router Consultas do Analytics e do God Mode
UI → Cloud KMS gRPC/HTTPS cloudkms.googleapis.com:443 Service account própria da UI Cifra/decifra ao editar uma credencial do Cofre pela tela. A chave em si nunca sai do KMS
Toda conexão parte de dentro para fora Nenhum hop desta tabela é iniciado pelo lado da plataforma contra a máquina do cliente. O Runtime sempre disca para o Router e para o Firebase, nunca o contrário, então não existe porta de entrada para abrir na rede do cliente, só saída (ver Pré-requisitos técnicos para a lista consolidada de domínios que o time de TI precisa liberar).

O Router e os serviços do Google Cloud

O Router é a cintura da plataforma: o único componente que efetivamente mantém as credenciais mais privilegiadas de acesso à infraestrutura Google Cloud. Nem a UI nem o Runtime precisam, ou conseguem, tocar diretamente nessas credenciais para realizar uma operação sensível.

Por que isolar isso num serviço à parte Se cada camada tivesse suas próprias credenciais para KMS, BigQuery e Firebase Admin, uma falha de segurança em qualquer uma delas exporia o mesmo raio de dano que uma falha no Router. Concentrando o acesso privilegiado num único serviço interno, pequeno e com uma responsabilidade bem definida, o resto da plataforma, inclusive o Runtime, que roda fora do perímetro da browserMate, opera só com credenciais de escopo mínimo e vida curta.

Autenticação e identidade

O login de usuários é inteiramente resolvido pelo Firebase Authentication. Google, Microsoft ou e-mail/senha, sempre do navegador direto para o provedor, sem que a senha passe pelo backend da browserMate. O que a plataforma faz é reconhecer, depois disso, a mesma identidade em todas as camadas:

Persistência: onde cada dado mora

Cada tipo de dado vive no serviço mais adequado à sua natureza. Não existe um único banco fazendo tudo:

DadoOnde vivePor quê
Processos, etapas, usuários, compartilhamentos, filas de execução Firebase Realtime Database, isolado por tenant Precisa de leitura/escrita em tempo real e de regra de acesso nativa por usuário
Segredos. Cofre e credenciais de conectores Firebase, mas sempre cifrados via Cloud KMS. Chave-mestra na região São Paulo (BR) O dado em repouso é inútil sem acesso à chave-mestra, que nunca sai do Router nem do território nacional
Histórico de execuções e logs de produção BigQuery + Cloud Logging, região São Paulo (BR) Alto volume, consulta analítica e retenção de longo prazo sem pesar no banco operacional
Valores marcados como Dado sensível e parâmetros Secretos Só na memória da execução. Nos logs aparecem como «•••», e na fila de execução esperam cifrados no KMS O que não precisa ser lembrado depois da execução não é gravado
Evidências de execução. Telas, PDFs Cloud Storage Arquivo binário, não é um registro de banco de dados
Dados no Brasil O histórico analítico de execuções e a chave-mestra que protege todo segredo guardado no Cofre rodam fisicamente na região São Paulo (southamerica-east1) do Google Cloud. Isso reduz latência para operações no fuso brasileiro e é um ponto concreto em qualquer conversa sobre conformidade com a LGPD a respeito de onde os dados são processados. Detalhes do dado pessoal nos processos e da LGPD: Dado sensível e a LGPD.

Infraestrutura: as garantias que já vêm de fábrica

A browserMate não constrói segurança sobre uma infraestrutura genérica. Constrói sobre o Google Cloud, que já chega com um conjunto de garantias independentemente auditadas. A plataforma herda essas garantias e adiciona a própria camada por cima (KMS aplicado aos segredos, autorização resolvida pelo Router, trilha de auditoria completa):

Segurança em profundidade

Cada camada aplica sua própria proteção. Nenhuma depende só da anterior ter feito certo:

Isolamento multi-tenant em cada camada

"Multi-tenant" não é uma propriedade de um único banco de dados com uma coluna de empresa. É uma garantia que cada camada revalida por conta própria:

O resultado prático: mesmo se uma única camada tivesse uma falha de autorização, as demais ainda barrariam o acesso indevido. Não existe um ponto único cuja falha expõe todos os tenants de uma vez.

Por que essa arquitetura importa

Automação de verdade lida com credenciais reais, como logins de sistemas internos, senhas de portais e chaves de API de terceiros, e executa ações que têm consequência real no negócio do cliente. Uma plataforma que trata isso como só mais um campo de formulário não escala além do primeiro incidente.

A separação em quatro camadas independentes é o que permite à browserMate rodar a execução dentro do ambiente do próprio cliente, seja nuvem ou infraestrutura própria, sem nunca entregar a esse ambiente uma credencial capaz de ler dados de outro tenant. É o que permite trocar, escalar ou reforçar qualquer camada isoladamente, sem redesenhar as demais. E é o que transforma "segurança" de um adjetivo de marketing em uma propriedade verificável do desenho: cada camada sabe exatamente o que pode fazer, e o resto da plataforma foi construído para que ela nunca precise de mais do que isso.

Some a isso uma infraestrutura Google Cloud com certificações auditadas por terceiros e dados analíticos e de criptografia processados em território brasileiro, e o resultado é uma base técnica que aguenta a pergunta mais dura que um CIO/CTO pode fazer sobre uma plataforma de automação: "se isso vazar, o que exatamente um invasor consegue fazer com o que pegou?", e ter, camada por camada, é uma resposta específica e eficiente.