# cpfgen CLI para gerar CPFs válidos em Go, mais uma extensão de navegador que gera CPF e CNPJ pelo menu de contexto de qualquer campo de texto. ## Instalação ```sh make build ``` ## Rodar os testes ```sh make test ``` ## Uso ```sh ./bin/cpfgen # 487.197.991-10 ./bin/cpfgen -num # 48719799110 ``` ## Extensão de navegador Em `extension/`. Clique com o botão direito em qualquer `input`, `textarea` ou campo `contenteditable` e escolha **Gerar CPF** ou **Gerar CNPJ** — o valor é inserido direto no campo, na posição do cursor. Cada menu oferece formatado e só números; o CNPJ inclui também as duas variantes alfanuméricas (formato novo). A extensão **não** chama os binários Go: extensões rodam num sandbox sem acesso a processos do sistema, e fazer isso exigiria um host de native messaging registrado no sistema operacional. Como os algoritmos são curtos e puros, eles foram portados para JS em `extension/generator.js`, a partir de `main.go` (CPF) e de `cnpj_generator/cnpj/generate.go` (CNPJ). `make ext-test` compara as duas implementações para garantir que não divirjam. Não pede permissão de rede nem de acesso a sites, não coleta nada e funciona offline. **Somente desktop.** O Firefox para Android não implementa a API `menus` — pela [documentação da Mozilla](https://extensionworkshop.com/documentation/develop/differences-between-desktop-and-android-extensions/), *"`menus`, which means you cannot add options to context menus"*. Como a extensão é inteiramente baseada no menu de contexto, ela não tem como funcionar lá. Por isso o manifesto não declara `gecko_android`. ### Instalar no Firefox Temporário (some ao fechar o navegador): 1. Abra `about:debugging#/runtime/this-firefox` 2. **Carregar extensão temporária…** 3. Escolha `extension/manifest.json` Permanente: o Firefox só instala extensões assinadas. Rode `make ext-build` e envie `web-ext-artifacts/cpfgen-1.0.0.zip` para [addons.mozilla.org](https://addons.mozilla.org/developers/) — dá para publicar como *unlisted* e receber um `.xpi` assinado só seu, sem listar na loja. Para desenvolver, `make ext-run` abre um Firefox já com a extensão carregada e recarrega a cada alteração. ### Instalar no Brave 1. Abra `brave://extensions` 2. Ligue o **Modo do desenvolvedor** (canto superior direito) 3. **Carregar sem compactação** e escolha a pasta `extension/` Isso persiste entre reinicializações. O Brave mostra um aviso sobre extensões em modo desenvolvedor a cada início — é esperado. O mesmo procedimento vale para Chrome, Chromium e Edge. ### Testes da extensão ```sh make ext-test # porte JS vs. binários Go + extensão real no Firefox e no Brave make ext-lint # validação oficial da Mozilla (web-ext lint) make ext-build # gera o .zip para publicação ``` `make ext-test` roda três coisas: - `test_generator.mjs` — gera centenas de amostras pelo JS e pelos binários Go e revalida todos os dígitos verificadores com uma implementação independente; - `test_extension.py` — sobe um Firefox headless, instala a extensão de verdade, confere que os 8 itens de menu foram criados e que a inserção funciona em `input`, `textarea` e `contenteditable`; - `test_chromium.py` — carrega a extensão no Brave headless e confere que o service worker MV3 sobe e registra os mesmos 8 itens. Precisa de `node`, `python3`, `firefox` e `brave` (os dois navegadores e os binários Go são pulados com aviso se não estiverem presentes).