{"_id":"fivem-tool-helper-v2","_rev":"9-36342351b2e113fa6f5a1b9647ea3ce5","name":"fivem-tool-helper-v2","dist-tags":{"latest":"1.1.11"},"versions":{"1.1.3":{"name":"fivem-tool-helper-v2","version":"1.1.3","keywords":["fivem","gta5","ragemp","helper","typescript"],"license":"MIT","_id":"fivem-tool-helper-v2@1.1.3","maintainers":[{"name":"sippinsinn6r","email":"boss@richnigga.us"}],"dist":{"shasum":"c7e871f6d19fa4048c5a33e783af36f05b9ad3ff","tarball":"https://registry.npmjs.org/fivem-tool-helper-v2/-/fivem-tool-helper-v2-1.1.3.tgz","fileCount":70,"integrity":"sha512-X39zK3yGQ7Ly9r5ft2d/QZh1Snbc9fphdQFfTdfMvEb3mermO+Xt5LprhA9zjQR8fyfSkd6KAtX3zkUa/JUD3g==","signatures":[{"sig":"MEUCIQDwqv0Ke6Ja2ogNeMjN/dnps6ftYg98kZaNxB2aaemTfAIgP8lDHZ8LJ8kCVzzs3en/91rOuuEijAN4/5kNQ1h96ak=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":134229},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"}},"scripts":{"dev":"tsx watch src/index.ts","build":"tsc","postinstall":"node util.js","prepublishOnly":"npm run build"},"_npmUser":{"name":"sippinsinn6r","email":"boss@richnigga.us"},"_npmVersion":"10.9.4","description":"FiveM Tool Helper - utility library for FiveM server/client development","directories":{},"_nodeVersion":"22.21.1","_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.19.2","typescript":"^5.6.3","@types/node":"^22.9.0"},"_npmOperationalInternal":{"tmp":"tmp/fivem-tool-helper-v2_1.1.3_1775666517754_0.29365323569035073","host":"s3://npm-registry-packages-npm-production"}},"1.1.4":{"name":"fivem-tool-helper-v2","version":"1.1.4","keywords":["fivem","gta5","ragemp","helper","typescript"],"license":"MIT","_id":"fivem-tool-helper-v2@1.1.4","maintainers":[{"name":"sippinsinn6r","email":"boss@richnigga.us"}],"dist":{"shasum":"0716ba641e3f9ab16c7fe8eeb9388c7016f6ea8e","tarball":"https://registry.npmjs.org/fivem-tool-helper-v2/-/fivem-tool-helper-v2-1.1.4.tgz","fileCount":70,"integrity":"sha512-IUszUvYb/0mobK4HRNE/nlidNQiaeO6Vt/Wn6le1SwA9KoU58+2Y8hVbz9CA2ZPEOeHK5Zc6AxDq4WJ8daMqMA==","signatures":[{"sig":"MEQCIC39HDwh6Ja1VFpymF0AAUlMVp8hdOB4m4fIgyrtzvvuAiAc2/X4sQR/fLMwnfFCRpmvnxf3zNimuYVeud7s+GPzPA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":134229},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"}},"scripts":{"dev":"tsx watch src/index.ts","build":"tsc","postinstall":"node util.js","prepublishOnly":"npm run build"},"_npmUser":{"name":"sippinsinn6r","email":"boss@richnigga.us"},"_npmVersion":"10.9.4","description":"FiveM Tool Helper - utility library for FiveM server/client development","directories":{},"_nodeVersion":"22.21.1","_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.19.2","typescript":"^5.6.3","@types/node":"^22.9.0"},"_npmOperationalInternal":{"tmp":"tmp/fivem-tool-helper-v2_1.1.4_1775667271326_0.008455309979947367","host":"s3://npm-registry-packages-npm-production"}},"1.1.5":{"name":"fivem-tool-helper-v2","version":"1.1.5","keywords":["fivem","gta5","ragemp","helper","typescript"],"license":"MIT","_id":"fivem-tool-helper-v2@1.1.5","maintainers":[{"name":"sippinsinn6r","email":"boss@richnigga.us"}],"dist":{"shasum":"d3d241fad59862daba9e6db8f383176467b03043","tarball":"https://registry.npmjs.org/fivem-tool-helper-v2/-/fivem-tool-helper-v2-1.1.5.tgz","fileCount":70,"integrity":"sha512-Ia8KaMEkAuWUtDLtgfrztXINc0QRpTRFC7oLvTY3XV+bXNyd4dDzPqEQXs5ZFYkb/H6WOJH79SJGhSj9nc5PjQ==","signatures":[{"sig":"MEQCIBuUo3IhjuYdcQAveus+tMUWrw75RtV7z85OBiQiijugAiBgA51VhaBhTjrmmZQVizzp8wUm5ig92JE6mqHZteai8w==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":134235},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"}},"scripts":{"dev":"tsx watch src/index.ts","build":"tsc","postinstall":"node utils/util.js","prepublishOnly":"npm run build"},"_npmUser":{"name":"sippinsinn6r","email":"boss@richnigga.us"},"_npmVersion":"10.9.4","description":"FiveM Tool Helper - utility library for FiveM server/client development","directories":{},"_nodeVersion":"22.21.1","_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.19.2","typescript":"^5.6.3","@types/node":"^22.9.0"},"_npmOperationalInternal":{"tmp":"tmp/fivem-tool-helper-v2_1.1.5_1775667334958_0.16020513142303106","host":"s3://npm-registry-packages-npm-production"}},"1.1.6":{"name":"fivem-tool-helper-v2","version":"1.1.6","keywords":["fivem","gta5","ragemp","helper","typescript"],"license":"MIT","_id":"fivem-tool-helper-v2@1.1.6","maintainers":[{"name":"sippinsinn6r","email":"boss@richnigga.us"}],"dist":{"shasum":"5b460898534218439b900a40a54ef4b0cfb1665d","tarball":"https://registry.npmjs.org/fivem-tool-helper-v2/-/fivem-tool-helper-v2-1.1.6.tgz","fileCount":70,"integrity":"sha512-yZ+cw5pChSXjVMeJASVxtCPst2dbQnus1ARIktEPaYDjpE4Cidaih3Ii08Kl1Iqb3soxgT+R7KXsEhSp6Nwyxg==","signatures":[{"sig":"MEUCIQD99vnU9lltYdUvrcyvdtI3F/X6aOOfCv15boLoMpKysQIgUbjea9dv/Q3+DqoBNqn5JBntZY1af+feX1AoM4dwMsE=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":134235},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"}},"scripts":{"dev":"tsx watch src/index.ts","build":"tsc","postinstall":"node utils/util.js","prepublishOnly":"npm run build"},"_npmUser":{"name":"sippinsinn6r","email":"boss@richnigga.us"},"_npmVersion":"10.9.4","description":"FiveM Tool Helper - utility library for FiveM server/client development","directories":{},"_nodeVersion":"22.21.1","_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.19.2","typescript":"^5.6.3","@types/node":"^22.9.0"},"_npmOperationalInternal":{"tmp":"tmp/fivem-tool-helper-v2_1.1.6_1775667375225_0.0867000821687467","host":"s3://npm-registry-packages-npm-production"}},"1.1.7":{"name":"fivem-tool-helper-v2","version":"1.1.7","keywords":["fivem","gta5","ragemp","helper","typescript"],"license":"MIT","_id":"fivem-tool-helper-v2@1.1.7","maintainers":[{"name":"sippinsinn6r","email":"boss@richnigga.us"}],"dist":{"shasum":"09ea56e180f91eff472fa4ea8dbc7ad3b3d30cce","tarball":"https://registry.npmjs.org/fivem-tool-helper-v2/-/fivem-tool-helper-v2-1.1.7.tgz","fileCount":70,"integrity":"sha512-OA1v9d7p+IjMlTLea+5KndsF8onxnD9f//GnrpJMy6l1LieVJg7pLuKtppdY3e480cH77ZsQlPLbSUJaeYaqwA==","signatures":[{"sig":"MEUCIQDlwAbkkzZx87AmTIPMPx9P8ESHKAk1Z1+5tccpRl17bwIgCLazLdhttPi57tB1Br7CRJMArtbYQhnmHx3kCjLWBqo=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":134240},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"}},"scripts":{"dev":"tsx watch src/index.ts","build":"tsc","postinstall":"node dist/utils/util.js","prepublishOnly":"npm run build"},"_npmUser":{"name":"sippinsinn6r","email":"boss@richnigga.us"},"_npmVersion":"10.9.4","description":"FiveM Tool Helper - utility library for FiveM server/client development","directories":{},"_nodeVersion":"22.21.1","_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.19.2","typescript":"^5.6.3","@types/node":"^22.9.0"},"_npmOperationalInternal":{"tmp":"tmp/fivem-tool-helper-v2_1.1.7_1775667697202_0.2523394839562281","host":"s3://npm-registry-packages-npm-production"}},"1.1.8":{"name":"fivem-tool-helper-v2","version":"1.1.8","keywords":["fivem","gta5","ragemp","helper","typescript"],"license":"MIT","_id":"fivem-tool-helper-v2@1.1.8","maintainers":[{"name":"sippinsinn6r","email":"boss@richnigga.us"}],"dist":{"shasum":"a63236d74ea398df59e96f2333c3ad443b6944ea","tarball":"https://registry.npmjs.org/fivem-tool-helper-v2/-/fivem-tool-helper-v2-1.1.8.tgz","fileCount":70,"integrity":"sha512-xNxNBa2g1v7LeHHZdGNHHRAb1elQRA/vzEn+cXaDGq5bEL7Tj13hDhpnXCyfTSDHDgTPXLtKKLcWBpJtFUCnQA==","signatures":[{"sig":"MEYCIQDFKoi9XIyOuCmkGQaSGcUi5JuWSYvQiK6uZyxl3d4lQAIhAM3T1Z0rTM+NcSIkJM01v4UQeUBPD8hXijwwMOC3Jj6z","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":134229},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"}},"scripts":{"dev":"tsx watch src/index.ts","build":"tsc","postinstall":"node util.js","prepublishOnly":"npm run build"},"_npmUser":{"name":"sippinsinn6r","email":"boss@richnigga.us"},"_npmVersion":"10.9.4","description":"FiveM Tool Helper - utility library for FiveM server/client development","directories":{},"_nodeVersion":"22.21.1","_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.19.2","typescript":"^5.6.3","@types/node":"^22.9.0"},"_npmOperationalInternal":{"tmp":"tmp/fivem-tool-helper-v2_1.1.8_1775667942777_0.04274753740997528","host":"s3://npm-registry-packages-npm-production"}},"1.1.9":{"name":"fivem-tool-helper-v2","version":"1.1.9","keywords":["fivem","gta5","ragemp","helper","typescript"],"license":"MIT","_id":"fivem-tool-helper-v2@1.1.9","maintainers":[{"name":"sippinsinn6r","email":"boss@richnigga.us"}],"dist":{"shasum":"fecda541275583c2d9d53a88fd1cb851387f93ea","tarball":"https://registry.npmjs.org/fivem-tool-helper-v2/-/fivem-tool-helper-v2-1.1.9.tgz","fileCount":74,"integrity":"sha512-kMruyYdSgXY7rKfW/bsYfnMcDRLMRpcLBdvUxR+kbw/qfarigzQ7jxsvVI3tgLQO39EhvfhXuubp2mO//WSbPQ==","signatures":[{"sig":"MEUCIQC98z2zQNOzgM2ox3kaB8o5UXOYTdip3mXWP2Bs7gs0nQIgZ1/OUoge+1sjCLSfgO9ECGJrjoeYAvqCGmn+ea2OR3s=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":156053},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"}},"scripts":{"dev":"tsx watch src/index.ts","build":"tsc","postinstall":"node dist/util.js","prepublishOnly":"npm run build"},"_npmUser":{"name":"sippinsinn6r","email":"boss@richnigga.us"},"_npmVersion":"10.9.4","description":"FiveM Tool Helper - utility library for FiveM server/client development","directories":{},"_nodeVersion":"22.21.1","_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.19.2","typescript":"^5.6.3","@types/node":"^22.9.0"},"_npmOperationalInternal":{"tmp":"tmp/fivem-tool-helper-v2_1.1.9_1775669048688_0.29138969304109197","host":"s3://npm-registry-packages-npm-production"}},"1.1.10":{"name":"fivem-tool-helper-v2","version":"1.1.10","keywords":["fivem","gta5","ragemp","helper","typescript"],"license":"MIT","_id":"fivem-tool-helper-v2@1.1.10","maintainers":[{"name":"sippinsinn6r","email":"boss@richnigga.us"}],"dist":{"shasum":"3c5f290122aa694caf4c3c36b949aa2344ad6ac4","tarball":"https://registry.npmjs.org/fivem-tool-helper-v2/-/fivem-tool-helper-v2-1.1.10.tgz","fileCount":78,"integrity":"sha512-3Tull6yeshhShoPmCHH/Aq4wTAMLf5iB04N+Y3SmReKsnDqzQMk1ML3kWYpc6xRimYh34hYB2eAWWjBNa8H3Ew==","signatures":[{"sig":"MEQCIC2hxgeRAlU2iZ/Ikn5daD985NZffJM49/LtbUBQnZapAiBhClOuO3S2DHqn7l8RrvDbkwSkb0JjNjkh8MzavLvP5Q==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":178060},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"}},"scripts":{"dev":"tsx watch src/index.ts","build":"tsc","postinstall":"node dist/util.cjs","prepublishOnly":"npm run build"},"_npmUser":{"name":"sippinsinn6r","email":"boss@richnigga.us"},"_npmVersion":"10.9.4","description":"FiveM Tool Helper - utility library for FiveM server/client development","directories":{},"_nodeVersion":"22.21.1","_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.19.2","typescript":"^5.6.3","@types/node":"^22.9.0"},"_npmOperationalInternal":{"tmp":"tmp/fivem-tool-helper-v2_1.1.10_1775669171241_0.34056607952822304","host":"s3://npm-registry-packages-npm-production"}},"1.1.11":{"name":"fivem-tool-helper-v2","version":"1.1.11","description":"FiveM Tool Helper - utility library for FiveM server/client development","type":"module","main":"./dist/index.js","module":"./dist/index.js","types":"./dist/index.d.ts","exports":{".":{"import":"./dist/index.js","types":"./dist/index.d.ts"}},"keywords":["fivem","gta5","ragemp","helper","typescript"],"license":"MIT","scripts":{"build":"tsc","dev":"tsx watch src/index.ts","prepublishOnly":"npm run build","postinstall":"node dist/util.cjs"},"devDependencies":{"@types/node":"^22.9.0","tsx":"^4.19.2","typescript":"^5.6.3"},"_id":"fivem-tool-helper-v2@1.1.11","_nodeVersion":"22.21.1","_npmVersion":"10.9.4","dist":{"integrity":"sha512-RKyvIW7mRf4h1S06YeTixGQnOeKCayL9JatwtZZeiudSoqgkGkyqFJAmY26jHWvGNm796D01e6LbZFsP9Czeew==","shasum":"45624da76f05336f7995ffdf0b7b4c53337e9dad","tarball":"https://registry.npmjs.org/fivem-tool-helper-v2/-/fivem-tool-helper-v2-1.1.11.tgz","fileCount":78,"unpackedSize":178060,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIQDmX03KMVqrtH5muFCeeg4OROse2Yy1j7fTL9oK0RueFAIgeUsjllHCHcJCCpZZ1+whdsWzNC8M3KvxgZWLAMitBTc="}]},"_npmUser":{"name":"sippinsinn6r","email":"boss@richnigga.us"},"directories":{},"maintainers":[{"name":"sippinsinn6r","email":"boss@richnigga.us"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/fivem-tool-helper-v2_1.1.11_1775669322801_0.6578806787127753"},"_hasShrinkwrap":false}},"time":{"created":"2026-04-08T16:41:57.594Z","modified":"2026-04-08T17:28:43.022Z","1.1.3":"2026-04-08T16:41:57.898Z","1.1.4":"2026-04-08T16:54:31.475Z","1.1.5":"2026-04-08T16:55:35.126Z","1.1.6":"2026-04-08T16:56:15.425Z","1.1.7":"2026-04-08T17:01:37.408Z","1.1.8":"2026-04-08T17:05:42.940Z","1.1.9":"2026-04-08T17:24:08.881Z","1.1.10":"2026-04-08T17:26:11.385Z","1.1.11":"2026-04-08T17:28:42.930Z"},"license":"MIT","keywords":["fivem","gta5","ragemp","helper","typescript"],"description":"FiveM Tool Helper - utility library for FiveM server/client development","maintainers":[{"name":"sippinsinn6r","email":"boss@richnigga.us"}],"readme":"<div align=\"center\">\r\n\r\n# ⚡ fivem-tool-helper\r\n\r\n**Live server watchdog dashboard & utility toolkit for FiveM**\r\n\r\n[![npm](https://img.shields.io/npm/v/fivem-tool-helper?color=cb3837&label=npm)](https://www.npmjs.com/package/fivem-tool-helper)\r\n[![license](https://img.shields.io/npm/l/fivem-tool-helper?color=blue)](./LICENSE)\r\n[![node](https://img.shields.io/badge/node-%3E%3D18-brightgreen)](https://nodejs.org)\r\n[![types](https://img.shields.io/badge/types-included-blue)](./dist/index.d.ts)\r\n\r\n</div>\r\n\r\n---\r\n\r\n## 📦 Install\r\n\r\n```bash\r\nnpm i fivem-tool-helper\r\n```\r\n\r\n> **Requires Node.js 18+** (uses native `fetch`)\r\n\r\n---\r\n\r\n## 🚀 Quick Start\r\n\r\n### Get server info (one-shot)\r\n\r\n```js\r\nimport { GetServerInfo } from 'fivem-tool-helper';\r\n\r\nconst info = await GetServerInfo('https://cfx.re/join/NsguR');\r\n\r\nconsole.log(info.hostname);           // \"My Awesome RP Server\"\r\nconsole.log(info.clients);            // 42\r\nconsole.log(info.maxClients);         // 128\r\nconsole.log(info.players.length);     // 42\r\nconsole.log(info.resources.length);   // 156\r\nconsole.log(info.ping.icmp);          // 45  (ms)\r\nconsole.log(info.ping.tcp);           // 32  (ms)\r\nconsole.log(info.ping.http);          // 68  (ms)\r\n```\r\n\r\n### Launch the live dashboard\r\n\r\n```js\r\nimport { startDashboard } from 'fivem-tool-helper';\r\n\r\nstartDashboard('https://cfx.re/join/NsguR', {\r\n  refreshInterval: 5000,   // ms between refreshes (default: 5000)\r\n  showResources: true,     // show resource list (default: true)\r\n  showPlayers: true,       // show player table (default: true)\r\n  maxPlayerRows: 25,       // max players shown (default: 20)\r\n});\r\n```\r\n\r\nPress **Ctrl+C** to stop — cursor is restored automatically.\r\n\r\n---\r\n\r\n## 🖥️ Dashboard Preview\r\n\r\n```\r\n╔══════════════════════════════════════════════════════════════╗\r\n║  ⚡ SERVER WATCHDOG              Last update: 15:30:45      ║\r\n╠══════════════════════════════════════════════════════════════╣\r\n║  Server: My Awesome RP Server                               ║\r\n║  IP: 185.123.45.67:30120  │  Game: FiveM  │  Map: skater   ║\r\n╠══════════════════════════════════════════════════════════════╣\r\n║  Players [████████████░░░░░░░░░░] 42/128                    ║\r\n║  ICMP: 45ms  │  TCP: 32ms  │  HTTP: 68ms                   ║\r\n╠══════════════════════════════════════════════════════════════╣\r\n║  ▸ Resources (156)                                          ║\r\n║  hardcap │ esx_legacy │ es_extended │ gcphone │ ...         ║\r\n╠══════════════════════════════════════════════════════════════╣\r\n║  ▸ Players Online (42)                                      ║\r\n║    1 │ PlayerOne           │  45ms                          ║\r\n║    2 │ PlayerTwo           │ 185ms                          ║\r\n║    3 │ PlayerThree         │ 350ms                          ║\r\n╠══════════════════════════════════════════════════════════════╣\r\n║  Refresh: 5s  │  Resources: 156  │  Ctrl+C to exit         ║\r\n╚══════════════════════════════════════════════════════════════╝\r\n```\r\n\r\n### Color scheme\r\n\r\n| Element | Color | Rule |\r\n|---------|-------|------|\r\n| Player bar | 🟢 → 🟡 → 🔴 | Green when empty → red when full (gradient) |\r\n| Ping ≤ 50 ms | 🟢 Green | Low latency |\r\n| Ping 50–150 ms | 🟢→🟡 | Smooth gradient |\r\n| Ping 150–300 ms | 🟡→🔴 | Yellow to red |\r\n| Ping > 300 ms | 🔴 Red | High latency |\r\n| No response | ⚫ Dark gray | Server unreachable |\r\n| Server title | 🔵→🟣 | Cyan to magenta gradient |\r\n\r\n---\r\n\r\n## 📖 API Reference\r\n\r\n### `GetServerInfo(cfxJoinUrl)`\r\n\r\nResolves a `cfx.re/join/{code}` URL to the real server IP, then fetches `/dynamic.json`, `/info.json`, `/players.json` and measures ICMP / TCP / HTTP ping — all in parallel.\r\n\r\n```ts\r\nfunction GetServerInfo(cfxJoinUrl: string): Promise<ServerInfo>\r\n```\r\n\r\n**Returns `ServerInfo`:**\r\n\r\n```ts\r\ninterface ServerInfo {\r\n  hostname: string;        // Server display name\r\n  ip: string;              // Resolved IP address\r\n  port: number;            // Server port\r\n  gametype: string;        // Game type (e.g. \"FiveM\")\r\n  mapname: string;         // Current map\r\n  clients: number;         // Current player count\r\n  maxClients: number;      // Max player slots\r\n  resources: string[];     // List of started resources\r\n  players: PlayerInfo[];   // Player list (id, name, ping)\r\n  vars: Record<string, string>;  // Server convars\r\n  icon?: string;           // Base64 PNG server icon\r\n  ping: PingResult;        // { icmp, tcp, http } in ms\r\n  online: boolean;         // Whether server responded\r\n  lastUpdate: Date;        // Timestamp of this fetch\r\n}\r\n\r\ninterface PlayerInfo {\r\n  id: number;\r\n  name: string;\r\n  ping: number;\r\n  endpoint?: string;       // IP:port (if public)\r\n  identifiers?: string[];  // Steam/license IDs (if public)\r\n}\r\n\r\ninterface PingResult {\r\n  icmp: number | null;     // System ping (spawns `ping`)\r\n  tcp: number | null;      // Raw TCP socket connect time\r\n  http: number | null;     // HTTP round-trip to /dynamic.json\r\n}\r\n```\r\n\r\n---\r\n\r\n### `startDashboard(cfxJoinUrl, options?)`\r\n\r\nStarts the live watchdog console with auto-refresh.\r\n\r\n```ts\r\nfunction startDashboard(cfxJoinUrl: string, options?: DashboardOptions): void\r\n```\r\n\r\n**Options:**\r\n\r\n| Option | Type | Default | Description |\r\n|--------|------|---------|-------------|\r\n| `refreshInterval` | `number` | `5000` | Milliseconds between data refreshes |\r\n| `showResources` | `boolean` | `true` | Show the resource list section |\r\n| `showPlayers` | `boolean` | `true` | Show the player table section |\r\n| `maxPlayerRows` | `number` | `20` | Maximum player rows to display |\r\n\r\n### `stopDashboard()`\r\n\r\nStops the dashboard loop and restores the terminal cursor.\r\n\r\n```ts\r\nfunction stopDashboard(): void\r\n```\r\n\r\n---\r\n\r\n### Low-level exports\r\n\r\nFor advanced usage you can import individual pieces:\r\n\r\n```js\r\nimport {\r\n  // Server resolution\r\n  resolveServerAddress,    // cfx.re/join URL → { ip, port }\r\n  extractJoinCode,         // URL → join code string\r\n\r\n  // Ping utilities\r\n  pingICMP,                // (host) → ms | null\r\n  pingTCP,                 // (host, port) → ms | null\r\n  pingHTTP,                // (url) → ms | null\r\n\r\n  // Renderer (build your own UI)\r\n  renderDashboard,         // (ServerInfo, options, termWidth) → string frame\r\n\r\n  // General utilities\r\n  formatMoney,             // (1500) → \"$1,500.00\"\r\n  clamp,                   // (120, 0, 100) → 100\r\n} from 'fivem-tool-helper';\r\n```\r\n\r\n---\r\n\r\n## 🔧 How it works\r\n\r\n```\r\ncfx.re/join/{code}\r\n      │\r\n      ▼\r\n FiveM API  ──→  resolve real IP:port\r\n      │\r\n      ▼\r\n ┌────────────────────────────────┐\r\n │  Parallel fetch:               │\r\n │  • /dynamic.json  (status)     │\r\n │  • /info.json     (resources)  │\r\n │  • /players.json  (players)    │\r\n │  • ICMP ping                   │\r\n │  • TCP ping                    │\r\n │  • HTTP ping                   │\r\n └────────────────────────────────┘\r\n      │\r\n      ▼\r\n Merge into ServerInfo\r\n      │\r\n      ▼\r\n Render → single stdout.write()  (flicker-free)\r\n      │\r\n      ▼\r\n Wait refreshInterval → repeat\r\n```\r\n\r\n- **No screen clearing** — uses ANSI cursor repositioning (`\\x1b[H`) + per-line clear (`\\x1b[K`) for flicker-free updates\r\n- **24-bit true color** — RGB gradients via `\\x1b[38;2;R;G;Bm` escape sequences\r\n- **Zero dependencies** — only Node.js built-ins (`net`, `child_process`, native `fetch`)\r\n\r\n---\r\n\r\n## 📋 Requirements\r\n\r\n- **Node.js ≥ 18** (for native `fetch` and `AbortSignal.timeout`)\r\n- **Terminal with true color support** (Windows Terminal, iTerm2, most modern terminals)\r\n- **Network access** to `servers-frontend.fivem.net` and the target FiveM server\r\n\r\n---\r\n\r\n## 🛠️ Development\r\n\r\n```bash\r\ngit clone <repo-url>\r\ncd fivem-helper\r\nnpm install\r\nnpm run build          # Compile TypeScript → dist/\r\nnpm run dev            # Watch mode (tsx)\r\n```\r\n\r\n## 📄 License\r\n\r\nMIT\r\n","readmeFilename":"README.md"}