{"_id":"@aperovn/cli","_rev":"7-2b9c95e2e038a1447d692e4b8462a46e","name":"@aperovn/cli","dist-tags":{"latest":"0.1.5"},"versions":{"0.1.0":{"name":"@aperovn/cli","version":"0.1.0","_id":"@aperovn/cli@0.1.0","maintainers":[{"name":"coderhanoi","email":"longlehoang2013@gmail.com"}],"bin":{"aperofunnel":"dist/index.js"},"dist":{"shasum":"e718c88f812660a1c0857d1b1b836cad3c038218","tarball":"https://registry.npmjs.org/@aperovn/cli/-/cli-0.1.0.tgz","fileCount":12,"integrity":"sha512-ZTeyykEQiLVtT5VDMMcrPjKFSBnzYBX7UT7kYbPkPdYOoAQ1gFfVLQoBpMAA93yqjO+1ofLW5+RgnRji9PHIHg==","signatures":[{"sig":"MEQCIGUL5aXouwGEPGFze8d6PPH63uChM3VOiPjwRW0szuQpAiAISo8QgXPRPs36LclaAqA2N5dS0UcID8TFrlITFAOGig==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":108685},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=18.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"}},"gitHead":"8bee94181edb4fa8bbde5571dd2d8448c364563e","scripts":{"dev":"tsup --watch","test":"bun test","build":"tsup","typecheck":"tsc --noEmit"},"_npmUser":{"name":"coderhanoi","email":"longlehoang2013@gmail.com"},"_npmVersion":"11.8.0","description":"CLI tool for deploying AperoFunnel projects","directories":{},"_nodeVersion":"24.13.1","dependencies":{"ora":"^8.1.0","tar":"^7.4.0","zod":"^3.23.0","glob":"^11.0.0","chalk":"^5.3.0","commander":"^12.1.0","node-fetch":"^3.3.2","formdata-node":"^6.0.3"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.3.0","@types/tar":"^6.1.13","typescript":"^5.6.0","@types/node":"^22.0.0"},"_npmOperationalInternal":{"tmp":"tmp/cli_0.1.0_1778062436320_0.7731361962826706","host":"s3://npm-registry-packages-npm-production"},"deprecated":"Renamed to @aperovn/funnel-cli. Please use: npm install -g @aperovn/funnel-cli"},"0.1.1":{"name":"@aperovn/cli","version":"0.1.1","_id":"@aperovn/cli@0.1.1","maintainers":[{"name":"coderhanoi","email":"longlehoang2013@gmail.com"}],"bin":{"aperofunnel":"dist/index.js"},"dist":{"shasum":"e3096f16f05465defbb5d13bc0555c54c8764c83","tarball":"https://registry.npmjs.org/@aperovn/cli/-/cli-0.1.1.tgz","fileCount":12,"integrity":"sha512-Zh949EQSROA6vL+uF0/mPXOK4NzGPurV75jmO+08lL0A85e4dhI8pZ3QjejTNs0XtcAA0hQn/LQIbPlotUPgXg==","signatures":[{"sig":"MEUCIQCtCl3RC11nq5rnIPVXsnuT2IHsx0Qsf2/AQzAZknWtagIgRKyO/LIVYJEKyC5U8HckjRco1CVNznjXMMn0fRJL8i0=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":108685},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=18.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"}},"gitHead":"8bee94181edb4fa8bbde5571dd2d8448c364563e","scripts":{"dev":"tsup --watch","test":"bun test","build":"tsup","typecheck":"tsc --noEmit"},"_npmUser":{"name":"coderhanoi","email":"longlehoang2013@gmail.com"},"_npmVersion":"11.8.0","description":"CLI tool for deploying AperoFunnel projects","directories":{},"_nodeVersion":"24.13.1","dependencies":{"ora":"^8.1.0","tar":"^7.4.0","zod":"^3.23.0","glob":"^11.0.0","chalk":"^5.3.0","commander":"^12.1.0","node-fetch":"^3.3.2","formdata-node":"^6.0.3"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.3.0","@types/tar":"^6.1.13","typescript":"^5.6.0","@types/node":"^22.0.0"},"_npmOperationalInternal":{"tmp":"tmp/cli_0.1.1_1778062489031_0.7432563071625353","host":"s3://npm-registry-packages-npm-production"},"deprecated":"Renamed to @aperovn/funnel-cli. Please use: npm install -g @aperovn/funnel-cli"},"0.1.2":{"name":"@aperovn/cli","version":"0.1.2","_id":"@aperovn/cli@0.1.2","maintainers":[{"name":"coderhanoi","email":"longlehoang2013@gmail.com"}],"bin":{"aperofunnel":"dist/index.js"},"dist":{"shasum":"fa1e8c237aef0fac42366818ceb1e61177c29d81","tarball":"https://registry.npmjs.org/@aperovn/cli/-/cli-0.1.2.tgz","fileCount":12,"integrity":"sha512-5XkABL5PcdCNBVU0ptzTLN7vZR3QtuQzzcnBOuulAdUW7XQt1+/gSAM8VybRSi8If2ACYQEaFJ97RziQmDLNuA==","signatures":[{"sig":"MEYCIQCp0CzsQdUlgygiMJp6VQRFbhkBW67lS2G4t3NQ5bFBagIhAIZHB+XxEmUALyu/GfMDzoE54u4jHG0Evv848RQo6G4y","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":108726},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=18.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"}},"gitHead":"8bee94181edb4fa8bbde5571dd2d8448c364563e","scripts":{"dev":"tsup --watch","test":"bun test","build":"tsup","prepack":"chmod +x dist/index.js","typecheck":"tsc --noEmit"},"_npmUser":{"name":"coderhanoi","email":"longlehoang2013@gmail.com"},"_npmVersion":"11.8.0","description":"CLI tool for deploying AperoFunnel projects","directories":{},"_nodeVersion":"24.13.1","dependencies":{"ora":"^8.1.0","tar":"^7.4.0","zod":"^3.23.0","glob":"^11.0.0","chalk":"^5.3.0","commander":"^12.1.0","node-fetch":"^3.3.2","formdata-node":"^6.0.3"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.3.0","@types/tar":"^6.1.13","typescript":"^5.6.0","@types/node":"^22.0.0"},"_npmOperationalInternal":{"tmp":"tmp/cli_0.1.2_1778062519582_0.23879645842691555","host":"s3://npm-registry-packages-npm-production"},"deprecated":"Renamed to @aperovn/funnel-cli. Please use: npm install -g @aperovn/funnel-cli"},"0.1.3":{"name":"@aperovn/cli","version":"0.1.3","_id":"@aperovn/cli@0.1.3","maintainers":[{"name":"coderhanoi","email":"longlehoang2013@gmail.com"}],"bin":{"aperofunnel":"bin/aperofunnel"},"dist":{"shasum":"82885e3cb068b5013100c266100925a54a9d47fe","tarball":"https://registry.npmjs.org/@aperovn/cli/-/cli-0.1.3.tgz","fileCount":13,"integrity":"sha512-2IwznLMY3fjQTRoORcCFIuJUZk9F62IotzjXg1FiSH5bwKaFc7AsvI6WP6EvFavJ5bsnBgHSgukPF70qBAsOtw==","signatures":[{"sig":"MEQCIBbRd3G82g91XSJ/rfxIA92CNRsIDq0K/1MhUixbDyLiAiBnM6fCxKy45YCeFFWHX314DmQnNXZ+dhIBBQaoX7QWiA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":108787},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=18.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"}},"gitHead":"8bee94181edb4fa8bbde5571dd2d8448c364563e","scripts":{"dev":"tsup --watch","test":"bun test","build":"tsup","prepack":"chmod +x bin/aperofunnel","typecheck":"tsc --noEmit"},"_npmUser":{"name":"coderhanoi","email":"longlehoang2013@gmail.com"},"_npmVersion":"11.8.0","description":"CLI tool for deploying AperoFunnel projects","directories":{},"_nodeVersion":"24.13.1","dependencies":{"ora":"^8.1.0","tar":"^7.4.0","zod":"^3.23.0","glob":"^11.0.0","chalk":"^5.3.0","commander":"^12.1.0","node-fetch":"^3.3.2","formdata-node":"^6.0.3"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.3.0","@types/tar":"^6.1.13","typescript":"^5.6.0","@types/node":"^22.0.0"},"_npmOperationalInternal":{"tmp":"tmp/cli_0.1.3_1778062588574_0.06083886592015042","host":"s3://npm-registry-packages-npm-production"},"deprecated":"Renamed to @aperovn/funnel-cli. Please use: npm install -g @aperovn/funnel-cli"},"0.1.4":{"name":"@aperovn/cli","version":"0.1.4","_id":"@aperovn/cli@0.1.4","maintainers":[{"name":"coderhanoi","email":"longlehoang2013@gmail.com"}],"bin":{"aperofunnel":"dist/index.js"},"dist":{"shasum":"16cc87c1d00c3812fd573ec7fda2ba66b305fc3a","tarball":"https://registry.npmjs.org/@aperovn/cli/-/cli-0.1.4.tgz","fileCount":13,"integrity":"sha512-HDLZBgOUoA0qL7/TqgIxXoYGWRuyUmDEup7PzqGDGBDJJ3owuR2udKx1TDI8ipOxbpGUtdnzBObbgOZ/4XmNPA==","signatures":[{"sig":"MEQCIBq/07Jyi/43X8COHDZ1VtxOvdur2fxMoWsrZc8+ZiwjAiByx5QhBMi3by/M8z38tEKPi7DjGw/xHnyLluHkBe9cVw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":113050},"main":"./dist/index.js","types":"./dist/index.d.ts","engines":{"node":">=18.0.0"},"exports":{".":{"types":"./dist/index.d.ts","require":"./dist/index.js"}},"gitHead":"8bee94181edb4fa8bbde5571dd2d8448c364563e","scripts":{"dev":"tsup --watch","test":"bun test","build":"tsup","prepack":"chmod +x dist/index.js","typecheck":"tsc --noEmit"},"_npmUser":{"name":"coderhanoi","email":"longlehoang2013@gmail.com"},"_npmVersion":"11.8.0","description":"CLI tool for deploying AperoFunnel projects","directories":{},"_nodeVersion":"24.13.1","dependencies":{"ora":"^8.1.0","tar":"^7.4.0","zod":"^3.23.0","glob":"^11.0.0","chalk":"^5.3.0","commander":"^12.1.0","node-fetch":"^3.3.2","formdata-node":"^6.0.3"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.3.0","@types/tar":"^6.1.13","typescript":"^5.6.0","@types/node":"^22.0.0"},"_npmOperationalInternal":{"tmp":"tmp/cli_0.1.4_1778062635207_0.48787977220705026","host":"s3://npm-registry-packages-npm-production"},"deprecated":"Renamed to @aperovn/funnel-cli. Please use: npm install -g @aperovn/funnel-cli"},"0.1.5":{"name":"@aperovn/cli","version":"0.1.5","_id":"@aperovn/cli@0.1.5","maintainers":[{"name":"coderhanoi","email":"longlehoang2013@gmail.com"}],"bin":{"aperofunnel":"dist/index.js"},"dist":{"shasum":"d2f5be306c8bf4495b6bf0768f1d62b834bc9e56","tarball":"https://registry.npmjs.org/@aperovn/cli/-/cli-0.1.5.tgz","fileCount":13,"integrity":"sha512-qftXF7raQfCZdG0cSy1DrS94OyjZYGnX9pnQjf+UNktv6KQ57PeKg+zQpPgVzDH6BZ6Gw4vfbAYeaTbpy6qHCQ==","signatures":[{"sig":"MEYCIQCVg10R2xGCEEmm6cF+GdXmcATSrqPJUd9hMzekTim92wIhAJjYjxOJRcd+MwwgfyWES/gpVjUBuL/FKAtZfhaYm7YD","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":112787},"main":"./dist/index.js","types":"./dist/index.d.ts","engines":{"node":">=18.0.0"},"exports":{".":{"types":"./dist/index.d.ts","require":"./dist/index.js"}},"gitHead":"8bee94181edb4fa8bbde5571dd2d8448c364563e","scripts":{"dev":"tsup --watch","test":"bun test","build":"tsup","prepack":"chmod +x dist/index.js","typecheck":"tsc --noEmit"},"_npmUser":{"name":"coderhanoi","email":"longlehoang2013@gmail.com"},"_npmVersion":"11.8.0","description":"CLI tool for deploying AperoFunnel projects","directories":{},"_nodeVersion":"24.13.1","dependencies":{"ora":"^8.1.0","tar":"^7.4.0","zod":"^3.23.0","glob":"^11.0.0","chalk":"^5.3.0","commander":"^12.1.0","node-fetch":"^3.3.2","formdata-node":"^6.0.3"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.3.0","@types/tar":"^6.1.13","typescript":"^5.6.0","@types/node":"^22.0.0"},"_npmOperationalInternal":{"tmp":"tmp/cli_0.1.5_1778063421808_0.17132743131717176","host":"s3://npm-registry-packages-npm-production"},"deprecated":"Renamed to @aperovn/funnel-cli. Please use: npm install -g @aperovn/funnel-cli"}},"time":{"created":"2026-05-06T10:13:56.259Z","modified":"2026-05-06T10:36:55.926Z","0.1.0":"2026-05-06T10:13:56.467Z","0.1.1":"2026-05-06T10:14:49.189Z","0.1.2":"2026-05-06T10:15:19.746Z","0.1.3":"2026-05-06T10:16:28.716Z","0.1.4":"2026-05-06T10:17:15.401Z","0.1.5":"2026-05-06T10:30:21.990Z"},"description":"CLI tool for deploying AperoFunnel projects","maintainers":[{"name":"coderhanoi","email":"longlehoang2013@gmail.com"}],"readme":"# @aperovn/cli\n\nCLI tool for deploying AperoFunnel projects.\n\n## Installation\n\n```bash\nnpm install -g @aperovn/cli\n# or\nbun install -g @aperovn/cli\n```\n\n## Commands\n\n### `aperofunnel login`\n\nAuthenticate with AperoFunnel API.\n\n```bash\naperofunnel login [--api-url <url>]\n```\n\n- Prompts for API key (starts with `af_`)\n- Validates key against API\n- Stores in `~/.aperofunnel/config.json`\n- Default API URL: `http://localhost:3001`\n\n### `aperofunnel init [name]`\n\nInitialize a new AperoFunnel project.\n\n```bash\naperofunnel init [name] [--use-npm]\n```\n\n- Creates Next.js project with `@aperovn/funnel-sdk` preconfigured\n- Sets up `aperofunnel.json` config file\n- Installs dependencies (uses bun by default, `--use-npm` to use npm)\n\n### `aperofunnel deploy`\n\nDeploy funnel to AperoFunnel platform.\n\n```bash\naperofunnel deploy [--skip-scan]\n```\n\n**Pipeline:**\n1. Read `aperofunnel.json` config\n2. Validate `@aperovn/funnel-sdk` in dependencies\n3. Check Node.js version\n4. Run security scan (npm audit or socket-cli)\n5. Build Next.js static export\n6. Check bundle budget (250KB JS / 500KB total)\n7. Create tar.gz bundle\n8. Sign manifest (SHA256 + HMAC-SHA256)\n9. Upload to API\n10. Print draft URL + version ID\n\n**Exit conditions:**\n- Critical vulnerabilities found (use `--skip-scan` to bypass, not recommended)\n- Build fails\n- Bundle budget exceeded\n\n### `aperofunnel publish <version-id>`\n\nPublish a draft version to live.\n\n```bash\naperofunnel publish <version-id>\n```\n\n### `aperofunnel rollback <version-id>`\n\nRollback to a previous version.\n\n```bash\naperofunnel rollback <version-id>\n```\n\n### `aperofunnel list`\n\nList all versions of the funnel.\n\n```bash\naperofunnel list\n```\n\nShows version ID, status (draft/live/archived), creation date, and bundle sizes.\n\n## Configuration\n\n### `aperofunnel.json`\n\nRequired in project root:\n\n```json\n{\n  \"workspaceId\": \"ws_xxx\",\n  \"funnelId\": \"fn_xxx\",\n  \"slug\": \"my-funnel\",\n  \"buildDir\": \"out\",\n  \"budget\": {\n    \"maxJsKb\": 250,\n    \"maxTotalKb\": 500\n  }\n}\n```\n\n- `workspaceId`: Workspace ID from dashboard\n- `funnelId`: Funnel ID from dashboard\n- `slug`: URL slug for the funnel\n- `buildDir`: Next.js export output directory (default: `out`)\n- `budget.maxJsKb`: Maximum JS bundle size in KB\n- `budget.maxTotalKb`: Maximum total bundle size in KB\n\n## Security\n\n- API keys stored in `~/.aperofunnel/config.json` (OS keychain integration planned)\n- Manifest signature proves scan ran on dev's machine\n- Build output (static HTML/JS/CSS) uploaded, not source code\n- Socket.dev/npm audit results uploaded for verification\n\n## Requirements\n\n- Node.js >= 18.0.0\n- Next.js project with `output: 'export'` in `next.config.js`\n- `@aperovn/funnel-sdk` in dependencies\n\n## Development\n\n```bash\n# Install dependencies\nbun install\n\n# Build\nbun run build\n\n# Type check\nbun run typecheck\n\n# Test locally (from package dir)\nnode dist/index.js --help\n```\n\n## License\n\nMIT\n","readmeFilename":"README.md"}