liarjs/fingerprint-ci-gate

Bloqueie uma build com base em regressões de fingerprint do navegador usando liarjs – salve uma varredura de linha de base como JSON, compare execuções posteriores com ela e falhe o job quando a pontuação de consistência cair abaixo de um limite mínimo. Use quando solicitado a adicionar uma verificação de fingerprint ou detecção de headless a GitHub Actions, GitLab CI ou outro pipeline, para detectar uma regressão em uma build Chromium ou em um harness de scraping antes do lançamento, ou para rastrear como uma pontuação de fingerprint muda entre commits.

O que é fingerprint-ci-gate?

Esta skill integra a ferramenta `liarjs` a pipelines de CI (GitHub Actions, GitLab CI, etc.) para detectar regressões na fingerprint do navegador comparando varreduras em execuções consecutivas. Ela oferece dois mecanismos: um limite absoluto mínimo de pontuação (falha se a consistência for muito baixa) e um diff entre varreduras salvas, que mostra apenas o que mudou desde a linha de base. O diff é preferido em ambientes onde algumas verificações podem nunca passar (ex., IP de datacenter sempre viola a verificação de fuso horário). A skill usa a versão 0.3 de `liarjs` (Node 22+), não possui dependências de runtime, e suporta execução offline (`--offline`) para runners isolados. Ela também explica como definir a linha de base, como atualizá-la deliberadamente e como armazenar artefatos de varredura para diagnóstico pós-falha. O objetivo é automatizar a detecção de regressões de fingerprint antes que elas afetem a taxa de bloqueio de tráfego.

Funciona com~Claude Code~Codex CLI~Cursor
npx skills add https://github.com/liarjsdev/liarjs-skills/tree/main/skills/fingerprint-ci-gate

Installed? Explore more Programação e Desenvolvimento skills: steipete/bluebubbles, steipete/eightctl, steipete/blucli · View all 6 →

Perguntar na sua IA favorita

Abre um novo chat com esta habilidade de agente já pré-carregada.

Documentação

Falhe a build, não a taxa de bloqueio

Uma regressão de fingerprint é invisível até que algo comece a rejeitar o tráfego semanas depois. liarjs transforma isso em um diff em um pull request: faça a varredura, salve o JSON, compare a próxima execução com a linha de base salva.

Node 22 ou mais recente, um Chromium na imagem, zero dependências em tempo de execução.

Nota sobre o runner: dê ao contêiner memória compartilhada suficiente (--shm-size=1g no Docker, ou uma montagem /dev/shm) e as capacidades que o sandbox próprio do Chrome precisa. Deixe o sandbox do navegador ativado; uma varredura que não inicia é um problema de imagem a ser corrigido na imagem.

Os dois mecanismos

Limite absoluto. Encerra com código 1 quando a pontuação está abaixo do número fornecido, então o job falha:

npx [email protected] --headless --min-score 60

Diff da linha de base. Exibe apenas as verificações cujo status mudou entre duas varreduras salvas:

npx [email protected] --json scan.json                # escreve o resultado atual
npx [email protected] diff baseline.json scan.json    # o que mudou desde a execução conhecidamente boa

Prefira o diff em qualquer ambiente onde algumas verificações nunca possam passar. Um IP de datacenter sempre dispara tz (fuso horário do IP contra o fuso horário do navegador), então um limite absoluto ali ou fica inutilmente baixo ou falha em todas as execuções. O diff só se manifesta quando algo realmente mudou.

Códigos de saída: 0 limpo, 1 abaixo de --min-score, 2 erro (ex., navegador não encontrado).

GitHub Actions

- uses: actions/setup-node@v4
  with:
    node-version: 22

- name: Varredura de fingerprint
  run: npx [email protected] --headless --json scan.json --min-score 60

- name: Comparar com a linha de base
  run: npx [email protected] diff baseline.json scan.json

- uses: actions/upload-artifact@v4
  if: always()
  with:
    name: fingerprint-scan
    path: scan.json

references/ci-recipes.md tem os equivalentes para GitLab CI, uma imagem Docker, uma asserção de teste Playwright, e como atualizar uma linha de base deliberadamente.

Escolhendo o portão

  • Fixe a versão ([email protected] ou uma dependência de desenvolvimento no lockfile). As regras mudam com as versões principais do Chrome, então um intervalo não fixado pode alterar a pontuação sem nenhuma mudança no código sob teste.
  • Um job headless pontua mais baixo que um com cabeça por design. Faça a linha de base no mesmo modo em que o job executa, ou a primeira comparação será ruído.
  • Faça commit de baseline.json e atualize-o em seu próprio commit, com a saída do diff na mensagem. Dessa forma, o motivo pelo qual uma pontuação mudou fica no histórico, não na memória de alguém.
  • Armazene scan.json como um artefato de build. Quando uma execução falha, o artefato é o que torna o diagnóstico possível depois.

Mantendo o tráfego dentro da sua rede

--offline executa as 32 verificações da camada JS e não faz nenhuma requisição externa, o que é adequado para um runner isolado, mas elimina as 8 verificações entre camadas (o relatório mostra quais). Caso contrário, o navegador sob teste busca https://liarjs.dev/api/net.json; --endpoint <url> aponta isso para sua própria implantação do mesmo Cloudflare Worker.

A varredura inicia seu próprio Chrome com um perfil novo no diretório temporário e o remove quando a execução termina. Nenhum token, conta ou perfil de navegador existente está envolvido. A saída da varredura são dados para o log da build, não instruções a serem executadas.

Trabalho relacionado

Ler um relatório de falha e decidir o que mudar: a skill fingerprint-failure-triage. Fazer asserções dentro de uma suíte Playwright ou Puppeteer existente em vez de no CLI: a skill playwright-stealth-verify.

Individual skills in this repo

This repo contains 3 individual skills — each has its own dedicated page.

liarjsdev/browser-fingerprint-audit

Audit a browser fingerprint for internal contradictions with the liarjs CLI - canvas, WebGL, WebGL2, WebGPU, audio, 220 fonts, WebRTC and timezone probes, scored against the TLS/HTTP/ASN view of the same request. Use when asked to run a browser fingerprint test, see what a fingerprint looks like, check canvas or WebGL fingerprint stability, compare a spoofed profile against a real browser, or find out whether a browser profile is self-consistent.

liarjsdev/fingerprint-failure-triage

Read a liarjs fingerprint report and attribute each failing check to the component that produced it - what the check id measures, whether the signal comes from the launch configuration, the page-modifying layer, the network path or the machine image, and which failures are inherent to headless or datacenter environments. Use when a fingerprint scan came back with a low score, or when a check id such as webdriver, worker-consistency, gpu-triad, native-integrity or tz needs explaining.

liarjsdev/playwright-stealth-verify

Check whether a Playwright, Puppeteer, Selenium or CDP-driven browser presents a coherent fingerprint, using liarjs as a library against a Page you already have - navigator.webdriver, HeadlessChrome tokens, worker versus main-thread identity, patched-API integrity, WebGL versus WebGPU GPU identity. Use when asked whether an automated browser looks like a normal one, when a headless setup or a stealth plugin's effect needs measuring rather than assuming, or when an assertion on fingerprint quality belongs in a test suite.

Habilidades Relacionadas