{"_id":"@brabos-ai/fnd-cli","_rev":"10-3e0fa6a100e4fdd28105313717c838e3","name":"@brabos-ai/fnd-cli","dist-tags":{"latest":"1.6.1"},"versions":{"1.1.1":{"name":"@brabos-ai/fnd-cli","version":"1.1.1","_id":"@brabos-ai/fnd-cli@1.1.1","maintainers":[{"name":"brabos.ai","email":"xmaiconx@gmail.com"}],"bin":{"fnd":"dist/index.js"},"dist":{"shasum":"dcbb5c2aba0e234f8e7ce5b2930209f299a2d967","tarball":"https://registry.npmjs.org/@brabos-ai/fnd-cli/-/fnd-cli-1.1.1.tgz","fileCount":88,"integrity":"sha512-nOFOCdQw8+hbCfePYqSIepJh2obUtqg6H+ebgW9BIdnVQd6/R4zYC4/3jyG8lvtoZw//yPpB3IZnPpMf2VN03Q==","signatures":[{"sig":"MEYCIQCjYF5CiVdUrQDj8tgZgNwaY+ZA4NTKD5oI7/dSfDzlwgIhAJ0tLZHxIQqc+lmISobC/hz+ywwEz9Na3P59D+Z/dDk9","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":179667},"main":"dist/index.js","types":"./dist/index.d.ts","gitHead":"36815f8484243c8ade56055f78552fc064ae4803","scripts":{"dev":"tsc --watch","build":"tsc","clean":"rimraf dist","typecheck":"tsc --noEmit"},"_npmUser":{"name":"brabos.ai","email":"xmaiconx@gmail.com"},"_npmVersion":"11.6.2","description":"CLI para download e atualização de templates FND","directories":{},"_nodeVersion":"24.11.0","dependencies":{"axios":"^1.6.2","chalk":"^4.1.2","adm-zip":"^0.5.10","inquirer":"^8.2.5","commander":"^11.1.0","simple-git":"^3.21.0"},"_hasShrinkwrap":false,"devDependencies":{"rimraf":"^5.0.0","typescript":"^5.0.0","@types/node":"^20.10.0","@types/adm-zip":"^0.5.5","@types/inquirer":"^8.2.10"},"_npmOperationalInternal":{"tmp":"tmp/fnd-cli_1.1.1_1768797499214_0.8441205384200923","host":"s3://npm-registry-packages-npm-production"}},"1.1.2":{"name":"@brabos-ai/fnd-cli","version":"1.1.2","_id":"@brabos-ai/fnd-cli@1.1.2","maintainers":[{"name":"brabos.ai","email":"xmaiconx@gmail.com"}],"bin":{"fnd":"dist/index.js"},"dist":{"shasum":"2255c01b27618edabeb8025cc1a2913070bfd4d1","tarball":"https://registry.npmjs.org/@brabos-ai/fnd-cli/-/fnd-cli-1.1.2.tgz","fileCount":88,"integrity":"sha512-wZ9GE3m7GPkb3bdmsDmuqNgKyls3LZuWK/amhlo9oSUFlGTKxn+DEe1vzBdT3YOeq1k54hNCzK+UsZVGLTiWTg==","signatures":[{"sig":"MEQCIAFD9pTPiSMMYsCz6koncL6DBdqFtOpbcITMMrMXsEUHAiBvgkPhg7P+qN6Qbu/6OGz6sTzm0wtYDHFt+OdstrK4aA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":179667},"main":"dist/index.js","types":"./dist/index.d.ts","gitHead":"e3acb879228a28380bbece61434f8b1cbc18cb1a","scripts":{"dev":"tsc --watch","build":"tsc","clean":"rimraf dist","typecheck":"tsc --noEmit"},"_npmUser":{"name":"brabos.ai","email":"xmaiconx@gmail.com"},"_npmVersion":"11.6.2","description":"CLI para download e atualização de templates FND","directories":{},"_nodeVersion":"24.11.0","dependencies":{"axios":"^1.6.2","chalk":"^4.1.2","adm-zip":"^0.5.10","inquirer":"^8.2.5","commander":"^11.1.0","simple-git":"^3.21.0"},"_hasShrinkwrap":false,"devDependencies":{"rimraf":"^5.0.0","typescript":"^5.0.0","@types/node":"^20.10.0","@types/adm-zip":"^0.5.5","@types/inquirer":"^8.2.10"},"_npmOperationalInternal":{"tmp":"tmp/fnd-cli_1.1.2_1768802924127_0.6793433935704793","host":"s3://npm-registry-packages-npm-production"}},"1.2.0":{"name":"@brabos-ai/fnd-cli","version":"1.2.0","_id":"@brabos-ai/fnd-cli@1.2.0","maintainers":[{"name":"brabos.ai","email":"xmaiconx@gmail.com"}],"bin":{"fnd":"dist/index.js"},"dist":{"shasum":"ad5bdad2462a49bed632a4a497dec696e410c061","tarball":"https://registry.npmjs.org/@brabos-ai/fnd-cli/-/fnd-cli-1.2.0.tgz","fileCount":88,"integrity":"sha512-JzxvudwNEe3iTeWUzFI05lmVnSFxFArqqt4/TOZpNiZlgXMez9yqwK5MrzrkJCN+M1MGGPyk7NTLT42P/AYSfg==","signatures":[{"sig":"MEYCIQDEkEVe1EPTAOo4qIeZ25QcleqOfCNnhdvuFlHl4x6JtgIhAKvEbLwLQdiMjEKpuaKBk2rtd9c3Hij6ohUaK7goJC+h","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":179667},"main":"dist/index.js","types":"./dist/index.d.ts","gitHead":"ee22170e67a0dd262f722895fe508195aa23e5f0","scripts":{"dev":"tsc --watch","build":"tsc","clean":"rimraf dist","typecheck":"tsc --noEmit"},"_npmUser":{"name":"brabos.ai","email":"xmaiconx@gmail.com"},"_npmVersion":"11.6.2","description":"CLI para download e atualização de templates FND","directories":{},"_nodeVersion":"24.11.0","dependencies":{"axios":"^1.6.2","chalk":"^4.1.2","adm-zip":"^0.5.10","inquirer":"^8.2.5","commander":"^11.1.0","simple-git":"^3.21.0"},"_hasShrinkwrap":false,"devDependencies":{"rimraf":"^5.0.0","typescript":"^5.0.0","@types/node":"^20.10.0","@types/adm-zip":"^0.5.5","@types/inquirer":"^8.2.10"},"_npmOperationalInternal":{"tmp":"tmp/fnd-cli_1.2.0_1769055816192_0.524377333044695","host":"s3://npm-registry-packages-npm-production"}},"1.3.0":{"name":"@brabos-ai/fnd-cli","version":"1.3.0","_id":"@brabos-ai/fnd-cli@1.3.0","maintainers":[{"name":"brabos.ai","email":"xmaiconx@gmail.com"}],"bin":{"fnd":"dist/index.js"},"dist":{"shasum":"91b2385aa8f1613e226fba142734f3d785c076e9","tarball":"https://registry.npmjs.org/@brabos-ai/fnd-cli/-/fnd-cli-1.3.0.tgz","fileCount":93,"integrity":"sha512-xUi7B6oHYSNDCGwCkSxYmJlzNiWEDM19GNkodfora18zIPzFaDLoTrctOSygkXPwdS3lA0Qj9L7yQc+0GlV4+A==","signatures":[{"sig":"MEUCIFenz7UOiRV1g3K8C78Yl4pF4umqZ27j9dzq++4q9cTMAiEA3MDf1TDr3sL11AXB/+z9T+myZd7r+eZJXsEGrWkRlQA=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":199207},"main":"dist/index.js","types":"./dist/index.d.ts","gitHead":"58b2b31d9ecf63325a7d496f8e119534349fb5b0","scripts":{"dev":"tsc --watch","build":"tsc","clean":"rimraf dist","typecheck":"tsc --noEmit"},"_npmUser":{"name":"brabos.ai","email":"xmaiconx@gmail.com"},"_npmVersion":"11.6.2","description":"CLI para download e atualização de templates FND","directories":{},"_nodeVersion":"24.11.0","dependencies":{"axios":"^1.6.2","chalk":"^4.1.2","adm-zip":"^0.5.10","inquirer":"^8.2.5","commander":"^11.1.0","simple-git":"^3.21.0"},"_hasShrinkwrap":false,"devDependencies":{"rimraf":"^5.0.0","typescript":"^5.0.0","@types/node":"^20.10.0","@types/adm-zip":"^0.5.5","@types/inquirer":"^8.2.10"},"_npmOperationalInternal":{"tmp":"tmp/fnd-cli_1.3.0_1769096512793_0.7310092707986993","host":"s3://npm-registry-packages-npm-production"}},"1.4.0":{"name":"@brabos-ai/fnd-cli","version":"1.4.0","_id":"@brabos-ai/fnd-cli@1.4.0","maintainers":[{"name":"brabos.ai","email":"xmaiconx@gmail.com"}],"bin":{"fnd":"dist/index.js"},"dist":{"shasum":"7e9a9e1696c95345c9882608c50757276d4eacc1","tarball":"https://registry.npmjs.org/@brabos-ai/fnd-cli/-/fnd-cli-1.4.0.tgz","fileCount":93,"integrity":"sha512-XKmB8Mq9LTenWAXTJrNdi0m+DgbfpU6gF2GMNBd5jfYeMugjyYBziG8WtLbZ/z2qwgRwOIc+wvdot0yQLUC0vg==","signatures":[{"sig":"MEYCIQCLpXej4pJ7JeNgBnRGiXOQ5mRHHshfxvOv0K1OgRdNxwIhAKXH2R0zdjATSITC2lqzM6jzQg9wtG5JAaEd9p5hjakB","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":203076},"main":"dist/index.js","types":"./dist/index.d.ts","gitHead":"1210d5a89cab9a5c24a2d1062524af76a3060ce6","scripts":{"dev":"tsc --watch","build":"tsc","clean":"rimraf dist","typecheck":"tsc --noEmit"},"_npmUser":{"name":"brabos.ai","email":"xmaiconx@gmail.com"},"_npmVersion":"11.6.2","description":"CLI para download e atualização de templates FND","directories":{},"_nodeVersion":"24.11.0","dependencies":{"axios":"^1.6.2","chalk":"^4.1.2","adm-zip":"^0.5.10","inquirer":"^8.2.5","commander":"^11.1.0","simple-git":"^3.21.0","@fnd/shared":"*"},"_hasShrinkwrap":false,"devDependencies":{"rimraf":"^5.0.0","typescript":"^5.0.0","@types/node":"^20.10.0","@types/adm-zip":"^0.5.5","@types/inquirer":"^8.2.10"},"_npmOperationalInternal":{"tmp":"tmp/fnd-cli_1.4.0_1769849219079_0.06669342683487356","host":"s3://npm-registry-packages-npm-production"}},"1.4.1":{"name":"@brabos-ai/fnd-cli","version":"1.4.1","_id":"@brabos-ai/fnd-cli@1.4.1","maintainers":[{"name":"brabos.ai","email":"xmaiconx@gmail.com"}],"bin":{"fnd":"dist/index.js"},"dist":{"shasum":"ede9da753205945064c87ba0f0ed535c65a88347","tarball":"https://registry.npmjs.org/@brabos-ai/fnd-cli/-/fnd-cli-1.4.1.tgz","fileCount":111,"integrity":"sha512-XpaBxaSx0VJAkhU0g+of7Qby8oYgt1C+k4+zewWAuU3zO1TlMslokk5l7Gi4Dfv9qdgKnxrnc3qbqOJGpMKVSg==","signatures":[{"sig":"MEQCICg5yJvk2P9Mm6X3XgYCFhYWjUMl0oBBM3iFQTk3+A9MAiBQwl0/2PSGgLE5cJJcLJo7HQjwMNLN614DJ36gj4968Q==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":226392},"main":"dist/index.js","types":"./dist/index.d.ts","gitHead":"2d680595c58e45e555aa414e2f72bce6f0964888","scripts":{"dev":"tsc --watch","build":"tsc","clean":"rimraf dist","typecheck":"tsc --noEmit"},"_npmUser":{"name":"brabos.ai","email":"xmaiconx@gmail.com"},"_npmVersion":"11.6.2","description":"CLI para download e atualização de templates FND","directories":{},"_nodeVersion":"24.11.0","dependencies":{"axios":"^1.6.2","chalk":"^4.1.2","adm-zip":"^0.5.10","inquirer":"^8.2.5","commander":"^11.1.0","simple-git":"^3.21.0"},"_hasShrinkwrap":false,"devDependencies":{"rimraf":"^5.0.0","typescript":"^5.0.0","@types/node":"^20.10.0","@types/adm-zip":"^0.5.5","@types/inquirer":"^8.2.10"},"_npmOperationalInternal":{"tmp":"tmp/fnd-cli_1.4.1_1770345113813_0.7420368684553853","host":"s3://npm-registry-packages-npm-production"}},"1.4.2":{"name":"@brabos-ai/fnd-cli","version":"1.4.2","_id":"@brabos-ai/fnd-cli@1.4.2","maintainers":[{"name":"brabos.ai","email":"xmaiconx@gmail.com"}],"bin":{"fnd":"dist/index.js"},"dist":{"shasum":"02027ad8eaa2170a32b6717f487c61504d22e4bb","tarball":"https://registry.npmjs.org/@brabos-ai/fnd-cli/-/fnd-cli-1.4.2.tgz","fileCount":111,"integrity":"sha512-tCZQXyrRNN+as63DQbVngmt6KmOUqmeccAWS9csMJzM6QzVxN7R6NLM6hUr1URvPmB1WHKiMxpG6X30Mtm1VXQ==","signatures":[{"sig":"MEUCIQDsLWcWFuB8QBjEeYdIjqouUk2/W/lLTIqrm0hBh1uTPQIgetEIV2heIrmTmq1KU4EshjWG87e4PIgxDm6uIotzQ/s=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":226886},"main":"dist/index.js","types":"./dist/index.d.ts","gitHead":"ea8ebc25fa53eb3cc553eb6fdcdeba3b725cb615","scripts":{"dev":"tsc --watch","build":"tsc","clean":"rimraf dist","typecheck":"tsc --noEmit"},"_npmUser":{"name":"brabos.ai","email":"xmaiconx@gmail.com"},"_npmVersion":"11.6.2","description":"CLI para download e atualização de templates FND","directories":{},"_nodeVersion":"24.11.0","dependencies":{"axios":"^1.6.2","chalk":"^4.1.2","adm-zip":"^0.5.10","inquirer":"^8.2.5","commander":"^11.1.0","simple-git":"^3.21.0"},"_hasShrinkwrap":false,"devDependencies":{"rimraf":"^5.0.0","typescript":"^5.0.0","@types/node":"^20.10.0","@types/adm-zip":"^0.5.5","@types/inquirer":"^8.2.10"},"_npmOperationalInternal":{"tmp":"tmp/fnd-cli_1.4.2_1770347737919_0.8735991404925647","host":"s3://npm-registry-packages-npm-production"}},"1.5.0":{"name":"@brabos-ai/fnd-cli","version":"1.5.0","_id":"@brabos-ai/fnd-cli@1.5.0","maintainers":[{"name":"brabos.ai","email":"xmaiconx@gmail.com"}],"bin":{"fnd":"dist/index.js"},"dist":{"shasum":"92f7d8abf557e21c8c64285e09f1acbede221b1b","tarball":"https://registry.npmjs.org/@brabos-ai/fnd-cli/-/fnd-cli-1.5.0.tgz","fileCount":121,"integrity":"sha512-LFPKxfPFDHQLjP4H7rZi2rxj7oHS4EU2+yA0k+sDeV4nezWQzUe6IdIA0zlPMtVgYEN9BlPZK274GgKr/qv5Kw==","signatures":[{"sig":"MEUCIQCRWsUT7ye0iIiCDxHFndCkpuWJ85FWykx/2xzUyy7HpAIgcPbcGxZAzpuFvkVeDPK7W07ZT2EEgZRDLWmUjzp0SIo=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":270989},"main":"dist/index.js","types":"./dist/index.d.ts","gitHead":"feecd6311a3cd03fb13894b982da395ebac0af2a","scripts":{"dev":"tsc --watch","build":"tsc","clean":"rimraf dist","typecheck":"tsc --noEmit"},"_npmUser":{"name":"brabos.ai","email":"xmaiconx@gmail.com"},"_npmVersion":"11.6.2","description":"CLI para download e atualização de templates FND","directories":{},"_nodeVersion":"24.11.0","dependencies":{"axios":"^1.6.2","chalk":"^4.1.2","adm-zip":"^0.5.10","inquirer":"^8.2.5","commander":"^11.1.0","simple-git":"^3.21.0"},"_hasShrinkwrap":false,"devDependencies":{"rimraf":"^5.0.0","typescript":"^5.0.0","@types/node":"^20.10.0","@types/adm-zip":"^0.5.5","@types/inquirer":"^8.2.10"},"_npmOperationalInternal":{"tmp":"tmp/fnd-cli_1.5.0_1770572540833_0.010996908955090312","host":"s3://npm-registry-packages-npm-production"}},"1.6.0":{"name":"@brabos-ai/fnd-cli","version":"1.6.0","_id":"@brabos-ai/fnd-cli@1.6.0","maintainers":[{"name":"brabos.ai","email":"xmaiconx@gmail.com"}],"bin":{"fnd":"dist/index.js"},"dist":{"shasum":"83c669a70a2ffb3356bbd164d01da82785858d02","tarball":"https://registry.npmjs.org/@brabos-ai/fnd-cli/-/fnd-cli-1.6.0.tgz","fileCount":121,"integrity":"sha512-HCbq3HIVgEmMy8Jtq2wNnDsk3/FfD2HcjTvVuOZ32EvGAp6met2WMID2Dzfy8ZYia87ifJlgX6SOISJBK2BBPw==","signatures":[{"sig":"MEYCIQCECpuAdayAMG2HAioz8t4igpkgSj9OI39V4/geDJg7lQIhAN03pjtaugt3a0OvgIm0nSBLrxgiovImkWqf3Md8UcRR","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":279993},"main":"dist/index.js","types":"./dist/index.d.ts","gitHead":"772514715f1037393c201fff1ba51385c67cf8f0","scripts":{"dev":"tsc --watch","build":"tsc","clean":"rimraf dist","typecheck":"tsc --noEmit"},"_npmUser":{"name":"brabos.ai","email":"xmaiconx@gmail.com"},"_npmVersion":"11.6.2","description":"CLI para download e atualização de templates FND","directories":{},"_nodeVersion":"24.11.0","dependencies":{"axios":"^1.6.2","chalk":"^4.1.2","adm-zip":"^0.5.10","inquirer":"^8.2.5","commander":"^11.1.0","simple-git":"^3.21.0"},"_hasShrinkwrap":false,"devDependencies":{"rimraf":"^5.0.0","typescript":"^5.0.0","@types/node":"^20.10.0","@types/adm-zip":"^0.5.5","@types/inquirer":"^8.2.10"},"_npmOperationalInternal":{"tmp":"tmp/fnd-cli_1.6.0_1771167615312_0.026762575722190984","host":"s3://npm-registry-packages-npm-production"}},"1.6.1":{"name":"@brabos-ai/fnd-cli","version":"1.6.1","description":"CLI para download e atualização de templates FND","main":"dist/index.js","bin":{"fnd":"dist/index.js"},"scripts":{"build":"tsc","dev":"tsc --watch","clean":"rimraf dist","typecheck":"tsc --noEmit"},"dependencies":{"adm-zip":"^0.5.10","axios":"^1.6.2","chalk":"^4.1.2","commander":"^11.1.0","inquirer":"^8.2.5","simple-git":"^3.21.0"},"devDependencies":{"@types/adm-zip":"^0.5.5","@types/inquirer":"^8.2.10","@types/node":"^20.10.0","rimraf":"^5.0.0","typescript":"^5.0.0"},"gitHead":"9af8a32c8295b1682d0491ca484af54517e56170","types":"./dist/index.d.ts","_id":"@brabos-ai/fnd-cli@1.6.1","_nodeVersion":"24.11.0","_npmVersion":"11.6.2","dist":{"integrity":"sha512-wUsOvWinwXcoteu7a6VWG6+1rXnY8lXlDykXi22lMT531pBwfnwlSO3VjmaZCeAvMiGLkc5jR8peoQpktYTevg==","shasum":"821ff33f479295faa52ade4c049426396a7a4151","tarball":"https://registry.npmjs.org/@brabos-ai/fnd-cli/-/fnd-cli-1.6.1.tgz","fileCount":121,"unpackedSize":280402,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEQCIG4W0FL0I5A8bknUL8QnifGnuQZ7xUYW7hDwrOOmpnjfAiBBGHXb3B3pyKki3AmAoQInm8mhgyx4M1Bl/+JVXjdnog=="}]},"_npmUser":{"name":"brabos.ai","email":"xmaiconx@gmail.com"},"directories":{},"maintainers":[{"name":"brabos.ai","email":"xmaiconx@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/fnd-cli_1.6.1_1771866250727_0.07173624218791996"},"_hasShrinkwrap":false}},"time":{"created":"2026-01-19T04:38:19.105Z","modified":"2026-02-23T17:04:11.000Z","1.1.1":"2026-01-19T04:38:19.384Z","1.1.2":"2026-01-19T06:08:44.259Z","1.2.0":"2026-01-22T04:23:36.343Z","1.3.0":"2026-01-22T15:41:52.960Z","1.4.0":"2026-01-31T08:46:59.278Z","1.4.1":"2026-02-06T02:31:53.979Z","1.4.2":"2026-02-06T03:15:38.059Z","1.5.0":"2026-02-08T17:42:20.999Z","1.6.0":"2026-02-15T15:00:15.469Z","1.6.1":"2026-02-23T17:04:10.862Z"},"description":"CLI para download e atualização de templates FND","maintainers":[{"name":"brabos.ai","email":"xmaiconx@gmail.com"}],"readme":"# FND CLI\r\n\r\nCLI para gerenciamento de templates FND com autenticação por device fingerprint.\r\n\r\n## Instalação\r\n\r\n```bash\r\nnpm install -g @brabos-ai/fnd-cli\r\n```\r\n\r\n## Comandos\r\n\r\n### `fnd login`\r\n\r\nAutentica no sistema FND usando OTP (One-Time Password).\r\n\r\n**Funcionamento:**\r\n1. Coleta fingerprint do dispositivo (hostname, username, MAC address, hardware ID)\r\n2. Hash do fingerprint localmente (SHA256)\r\n3. Envia OTP para o email cadastrado\r\n4. Valida OTP e recebe token JWT\r\n5. Armazena token e fingerprint em `~/.fnd/config.json`\r\n\r\n**Exemplo:**\r\n```bash\r\n$ fnd login\r\n🔐 FND CLI - Autenticação\r\n\r\nColetando informações do dispositivo...\r\nDispositivo identificado:\r\n  Hostname: DESKTOP-ABC123\r\n  Usuário: joao\r\n  Fingerprint: a1b2c3d4e5f6g7h8...\r\n\r\nEmail cadastrado: joao@example.com\r\n✓ Código enviado para seu email!\r\n\r\nDigite o código OTP recebido: 123456\r\n\r\n✓ Autenticação realizada com sucesso!\r\nDispositivo: DESKTOP-ABC123\r\nVálido até: 18/12/2025 10:30:00\r\n```\r\n\r\n### `fnd checkout <type>`\r\n\r\nBaixa um template FND para o diretório atual.\r\n\r\n**Argumentos:**\r\n- `<type>`: Tipo do template (ex: `easyflow`)\r\n\r\n**Opções:**\r\n- `-v, --version <version>`: Versão específica (padrão: `latest`)\r\n\r\n**Exemplo:**\r\n```bash\r\n$ fnd checkout easyflow\r\n📥 FND CLI - Baixar Template\r\n\r\nTemplate: easyflow\r\nVersão: latest\r\n\r\nBaixando template...\r\nVersão disponível: v1.2.0\r\nExtraindo arquivos...\r\n\r\n✓ Template easyflow v1.2.0 baixado com sucesso!\r\n\r\nArquivos extraídos: 42\r\n\r\nPróximos passos:\r\n  1. Revise os arquivos do template\r\n  2. Configure suas variáveis de ambiente\r\n  3. Execute: npm install\r\n  4. Para atualizar futuramente: fnd update\r\n```\r\n\r\n### `fnd update`\r\n\r\nAtualiza o template para a versão mais recente.\r\n\r\n**Pré-requisitos:**\r\n- Estar em um diretório com template FND (arquivo `.fnd-version` presente)\r\n- Ter um repositório Git inicializado\r\n\r\n**Funcionamento:**\r\n1. Valida autenticação e fingerprint\r\n2. Busca versão atual do arquivo `.fnd-version`\r\n3. Baixa manifest mais recente do backend\r\n4. Compara com manifest local (ou gera a partir dos arquivos)\r\n5. Cria branch `update/v-X-Y-Z`\r\n6. Aplica mudanças (adiciona/remove/atualiza arquivos)\r\n7. Cria commit estruturado\r\n\r\n**Exemplo:**\r\n```bash\r\n$ fnd update\r\n📦 FND CLI - Atualizar Template\r\n\r\nTemplate atual: easyflow v1.2.0\r\nVerificando atualizações...\r\n\r\nNova versão disponível: v1.3.0\r\n\r\nMudanças detectadas:\r\n  + 3 arquivo(s) adicionado(s)\r\n  - 1 arquivo(s) removido(s)\r\n  ~ 5 arquivo(s) atualizado(s)\r\n\r\nCriando branch: update/v-1-3-0...\r\nBaixando arquivos atualizados...\r\n  + docs/new-feature.md\r\n  + src/utils/helper.ts\r\n  + tests/helper.test.ts\r\n  - deprecated/old-file.ts\r\n  ~ src/index.ts\r\n  ~ package.json\r\n  ~ README.md\r\n  ~ apps/backend/src/main.ts\r\n  ~ apps/frontend/src/App.tsx\r\n\r\nCriando commit...\r\n\r\n✓ Template atualizado para v1.3.0!\r\nBranch: update/v-1-3-0\r\n\r\nRevisione as mudanças e faça merge quando estiver pronto.\r\n```\r\n\r\n## Arquivos de Configuração\r\n\r\n### `~/.fnd/config.json`\r\n\r\nArmazena credenciais de autenticação:\r\n\r\n```json\r\n{\r\n  \"token\": \"eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...\",\r\n  \"deviceFingerprint\": \"a1b2c3d4e5f6g7h8i9j0k1l2m3n4o5p6...\",\r\n  \"email\": \"joao@example.com\"\r\n}\r\n```\r\n\r\n### `.fnd-version`\r\n\r\nArmazena informações da versão do template no projeto:\r\n\r\n```json\r\n{\r\n  \"templateType\": \"easyflow\",\r\n  \"version\": \"1.2.0\",\r\n  \"downloadedAt\": \"2025-12-18T10:30:00.000Z\"\r\n}\r\n```\r\n\r\n### `.fnd-manifest.json`\r\n\r\nArmazena manifest dos arquivos do template:\r\n\r\n```json\r\n{\r\n  \"version\": \"1.2.0\",\r\n  \"files\": [\r\n    {\r\n      \"path\": \"docs/plan.md\",\r\n      \"hash\": \"abc123...\",\r\n      \"size\": 1024\r\n    }\r\n  ]\r\n}\r\n```\r\n\r\n## Segurança\r\n\r\n### Device Fingerprint\r\n\r\nO CLI coleta as seguintes informações para criar o fingerprint do dispositivo:\r\n\r\n- **Hostname**: Nome do computador\r\n- **Username**: Nome do usuário do sistema\r\n- **MAC Address**: Endereço MAC da primeira interface de rede não-interna\r\n- **Hardware ID**:\r\n  - Windows: Serial da placa-mãe (via WMIC)\r\n  - macOS: Hardware UUID (via system_profiler)\r\n  - Linux: Machine ID (/etc/machine-id)\r\n\r\nO fingerprint é hasheado localmente usando SHA256 antes de ser enviado ao servidor.\r\n\r\n### Autenticação\r\n\r\n- Token JWT armazenado localmente em `~/.fnd/config.json`\r\n- Token inclui claim do device fingerprint\r\n- Validação do fingerprint em cada requisição\r\n- OTP enviado por email com validade de 10 minutos\r\n\r\n### Rate Limiting\r\n\r\nO backend implementa rate limiting para prevenir abuso:\r\n\r\n- **Logins**: 5 tentativas por hora\r\n- **Downloads**: 10 por dia\r\n- **IPs únicos**: Máximo 3 dispositivos por dia\r\n\r\nMensagens de erro informam o tempo de espera necessário.\r\n\r\n## Tratamento de Erros\r\n\r\n| Código | Mensagem | Ação |\r\n|--------|----------|------|\r\n| 401 | \"Sessão inválida. Execute `fnd login` novamente.\" | Fazer login novamente |\r\n| 404 | \"Template/Email não encontrado.\" | Verificar tipo do template ou email |\r\n| 429 | \"Limite excedido. Tente novamente em X minutos.\" | Aguardar tempo indicado |\r\n| Network | \"Erro de conexão. Verifique sua internet.\" | Verificar conexão |\r\n\r\n## Variáveis de Ambiente\r\n\r\n- `FND_API_URL`: URL do backend (padrão: `http://localhost:3000`)\r\n\r\n## Desenvolvimento\r\n\r\n```bash\r\n# Instalar dependências\r\nnpm install\r\n\r\n# Build\r\nnpm run build\r\n\r\n# Watch mode\r\nnpm run dev\r\n\r\n# Type checking\r\nnpm run typecheck\r\n\r\n# Clean\r\nnpm run clean\r\n```\r\n\r\n## Dependências\r\n\r\n- `commander`: Framework CLI\r\n- `axios`: Cliente HTTP\r\n- `chalk`: Output colorido\r\n- `inquirer`: Prompts interativos\r\n- `adm-zip`: Extração de arquivos ZIP\r\n- `simple-git`: Operações Git\r\n- `crypto` (built-in): Hashing SHA256\r\n- `os` (built-in): Informações do sistema\r\n","readmeFilename":"README.md"}