{"_id":"@anura-gate/watcher","_rev":"6-3ba71e2d4362ca8f9966294511d888a9","name":"@anura-gate/watcher","dist-tags":{"latest":"0.2.3"},"versions":{"0.1.0":{"name":"@anura-gate/watcher","version":"0.1.0","keywords":["gate","watcher","whatsapp","messaging","self-hosted"],"license":"MIT","_id":"@anura-gate/watcher@0.1.0","maintainers":[{"name":"anuragate","email":"ahmadajmal1514@gmail.com"}],"bin":{"gate-watcher":"cli.js"},"dist":{"shasum":"e595121ed7a407519e86a76f47047a59505d56ba","tarball":"https://registry.npmjs.org/@anura-gate/watcher/-/watcher-0.1.0.tgz","fileCount":10,"integrity":"sha512-PvhU+TZxsc+ZxsFcrX94ESMpW0ZthRUlgzLw7/9X8bFT3fqNYLDA2Y+Ll5n0IaTxKMfIJT7vVFJwbQlfa3qOyw==","signatures":[{"sig":"MEQCIDvS28EX31eVIFqsSNVqA3fItML69Xk2n2y4E79EnJFXAiAOC1KjEz9oex9I0eEL0xy+6HfVqqXvxQiFCcAOZFD9tg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":91349},"main":"index.js","engines":{"node":">=18"},"gitHead":"3585da043003b49102abb5eef621d3b606106193","scripts":{"dev":"node cli.js","start":"node cli.js"},"_npmUser":{"name":"anuragate","email":"ahmadajmal1514@gmail.com"},"_npmVersion":"10.9.2","description":"GATE Watcher — Self-hosted daemon for WhatsApp Web integration. Credentials never leave your machine.","directories":{},"_nodeVersion":"22.14.0","dependencies":{"dotenv":"^17.3.1","qrcode":"^1.5.4","qrcode-terminal":"^0.12.0","whatsapp-web.js":"^1.26.1"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/watcher_0.1.0_1771499601322_0.14746018247170745","host":"s3://npm-registry-packages-npm-production"},"deprecated":"Renamed to @anura-gate/watcher-whatsapp. Run: npm install @anura-gate/watcher-whatsapp"},"0.2.0":{"name":"@anura-gate/watcher","version":"0.2.0","keywords":["gate","watcher","whatsapp","messaging","self-hosted"],"license":"MIT","_id":"@anura-gate/watcher@0.2.0","maintainers":[{"name":"anuragate","email":"ahmadajmal1514@gmail.com"}],"bin":{"gate-watcher":"cli.js"},"dist":{"shasum":"534b0fa6b24c18f50ff09aec568afe92785165eb","tarball":"https://registry.npmjs.org/@anura-gate/watcher/-/watcher-0.2.0.tgz","fileCount":10,"integrity":"sha512-2o3yk/tpwC7UXTBOK4fGzDfy25tAp79Hugtk9tkybFKeEVXZnfyuwlUogs2Vcv5ITw4LID1t1O50u1v5p++0ww==","signatures":[{"sig":"MEUCIH5aekNK1Q6KOFjBdy0qMIOv6UgGNH5GIBToOIICabhkAiEA4MzpMvHSC72fJK+CSpTwdMSN9dtzOrhrCGsUm5xnGsU=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":95946},"main":"index.js","engines":{"node":">=18"},"gitHead":"af9e7c5a3b9a73f9af6411ef472c562295793a16","scripts":{"dev":"node cli.js","start":"node cli.js"},"_npmUser":{"name":"anuragate","email":"ahmadajmal1514@gmail.com"},"_npmVersion":"10.9.2","description":"GATE Watcher — Self-hosted daemon for WhatsApp Web integration. Credentials never leave your machine.","directories":{},"_nodeVersion":"22.14.0","dependencies":{"dotenv":"^17.3.1","qrcode":"^1.5.4","qrcode-terminal":"^0.12.0","whatsapp-web.js":"^1.26.1"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/watcher_0.2.0_1771515643990_0.2595707634403879","host":"s3://npm-registry-packages-npm-production"},"deprecated":"Renamed to @anura-gate/watcher-whatsapp. Run: npm install @anura-gate/watcher-whatsapp"},"0.2.1":{"name":"@anura-gate/watcher","version":"0.2.1","keywords":["gate","watcher","whatsapp","messaging","self-hosted"],"license":"MIT","_id":"@anura-gate/watcher@0.2.1","maintainers":[{"name":"anuragate","email":"ahmadajmal1514@gmail.com"}],"bin":{"gate-watcher":"cli.js"},"dist":{"shasum":"459d566886c305367842d1ff52e6ae9047e0b6b3","tarball":"https://registry.npmjs.org/@anura-gate/watcher/-/watcher-0.2.1.tgz","fileCount":10,"integrity":"sha512-6uuIifXWf5D8ABPWjKRZAFVJbdMrgQfzSo3m1sOAtDJ25D0F0wNK9fAP4//s2ATTM8mV749oP9u5+7SwCnmssw==","signatures":[{"sig":"MEYCIQC0sSilG8GJsN7z7YYtB3JNLS/qNKtjPg9y7TXnBvRXggIhANO9fEk5wHmL5VypQnK+X7LnU8TFHL8LBh9xcXh7RGZ5","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":104551},"main":"index.js","engines":{"node":">=18"},"gitHead":"6b5d609a5499b0df28fa8b2cce5ebfbfd3ee93e9","scripts":{"dev":"node cli.js","start":"node cli.js"},"_npmUser":{"name":"anuragate","email":"ahmadajmal1514@gmail.com"},"_npmVersion":"10.9.2","description":"GATE Watcher — Self-hosted daemon for WhatsApp Web integration. Credentials never leave your machine.","directories":{},"_nodeVersion":"22.14.0","dependencies":{"dotenv":"^17.3.1","qrcode":"^1.5.4","qrcode-terminal":"^0.12.0","whatsapp-web.js":"^1.26.1"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/watcher_0.2.1_1771570732992_0.3449142748050251","host":"s3://npm-registry-packages-npm-production"},"deprecated":"Renamed to @anura-gate/watcher-whatsapp. Run: npm install @anura-gate/watcher-whatsapp"},"0.2.2":{"name":"@anura-gate/watcher","version":"0.2.2","keywords":["gate","watcher","whatsapp","messaging","self-hosted"],"license":"MIT","_id":"@anura-gate/watcher@0.2.2","maintainers":[{"name":"anuragate","email":"ahmadajmal1514@gmail.com"}],"bin":{"gate-watcher":"cli.js"},"dist":{"shasum":"3a2b95bcb5029b30625b1c8c17beb40f90cd316e","tarball":"https://registry.npmjs.org/@anura-gate/watcher/-/watcher-0.2.2.tgz","fileCount":10,"integrity":"sha512-nGwGCQpKL7uMXPEbSo7cCAAD7hBKxKHzZIi68WQg/QP7Z5DBbCCZoXwS14Muu8W5GLhOL5KM4zFV58ijJKGnXQ==","signatures":[{"sig":"MEQCIDnWhmUPxbXAjtDeQzWLnTY8M2amDZAZazLJKfRBIfUwAiBU0SZXLv9wLoP3uFyM1IKXGOoGRi6fRj/TMHnnh33H4A==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":110672},"main":"index.js","engines":{"node":">=18"},"gitHead":"afd911c5d3bf2e2e674b9e30d3e1dc9787456504","scripts":{"dev":"node cli.js","start":"node cli.js"},"_npmUser":{"name":"anuragate","email":"ahmadajmal1514@gmail.com"},"_npmVersion":"10.9.2","description":"GATE Watcher — Self-hosted daemon for WhatsApp Web integration. Credentials never leave your machine.","directories":{},"_nodeVersion":"22.14.0","dependencies":{"dotenv":"^17.3.1","qrcode":"^1.5.4","qrcode-terminal":"^0.12.0","whatsapp-web.js":"^1.26.1"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/watcher_0.2.2_1771600401511_0.745241023266636","host":"s3://npm-registry-packages-npm-production"},"deprecated":"Renamed to @anura-gate/watcher-whatsapp. Run: npm install @anura-gate/watcher-whatsapp"},"0.2.3":{"name":"@anura-gate/watcher","version":"0.2.3","keywords":["gate","watcher","whatsapp","messaging","self-hosted"],"license":"MIT","_id":"@anura-gate/watcher@0.2.3","maintainers":[{"name":"anuragate","email":"ahmadajmal1514@gmail.com"}],"bin":{"gate-watcher":"cli.js"},"dist":{"shasum":"0e9893af4f41014757cb72de5e6833ed71a43761","tarball":"https://registry.npmjs.org/@anura-gate/watcher/-/watcher-0.2.3.tgz","fileCount":10,"integrity":"sha512-zyxvOCYDgcc7ZAnNSlqe73jj/0kdeLlBgp1PECT4nzHWfQ3APs3slETf1wzzI9BAGtAohbnfqlSrKPI++NM4vg==","signatures":[{"sig":"MEUCIGktihGwwRamkBYrtl/HlgMuy3zCv+FTYOxx0CvqFs60AiEA5hRV1282p63MaEZKLv5W0p7MviL420B3nERVLLWXa1s=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":111003},"main":"index.js","engines":{"node":">=18"},"gitHead":"1aaf6081c08b475ede6d106e3dcfe55e0ee28dd0","scripts":{"dev":"node cli.js","start":"node cli.js"},"_npmUser":{"name":"anuragate","email":"ahmadajmal1514@gmail.com"},"_npmVersion":"10.9.2","description":"GATE Watcher — Self-hosted daemon for WhatsApp Web integration. Credentials never leave your machine.","directories":{},"_nodeVersion":"22.14.0","dependencies":{"dotenv":"^17.3.1","qrcode":"^1.5.4","qrcode-terminal":"^0.12.0","whatsapp-web.js":"^1.26.1"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/watcher_0.2.3_1771940168536_0.4647679731727292","host":"s3://npm-registry-packages-npm-production"},"deprecated":"Renamed to @anura-gate/watcher-whatsapp. Run: npm install @anura-gate/watcher-whatsapp"}},"time":{"created":"2026-02-19T11:13:21.264Z","modified":"2026-02-27T14:36:40.108Z","0.1.0":"2026-02-19T11:13:21.493Z","0.2.0":"2026-02-19T15:40:44.149Z","0.2.1":"2026-02-20T06:58:53.131Z","0.2.2":"2026-02-20T15:13:21.658Z","0.2.3":"2026-02-24T13:36:08.696Z"},"license":"MIT","keywords":["gate","watcher","whatsapp","messaging","self-hosted"],"description":"GATE Watcher — Self-hosted daemon for WhatsApp Web integration. Credentials never leave your machine.","maintainers":[{"name":"anuragate","email":"ahmadajmal1514@gmail.com"}],"readme":"# GATE Watcher — WhatsApp Web\n\nSelf-hosted daemon that connects to WhatsApp Web and pushes all message events to GATE cloud for security processing. **Your WhatsApp session tokens never leave your machine.**\n\n## How it works\n\n```\nYour Machine (Watcher)              GATE Cloud\n┌─────────────────────┐        ┌──────────────────┐\n│ WhatsApp Web session │───────>│ Security pipeline │\n│ (tokens stay HERE)   │<───────│ (redact, policy,  │\n│                      │ poll   │  audit, forward)  │\n└─────────────────────┘        └──────────────────┘\n```\n\n## Quick Start (CLI)\n\nThe fastest way — runs standalone with QR in your terminal.\n\n```bash\ncd watcher\nnpm install\n\n# Create .env (or pass env vars directly)\ncp .env.example .env\n# Fill in GATE_URL, GATE_KEY, GATE_INTEGRATION_ID\n\nnpm start\n```\n\nScan the QR code with your phone. Done.\n\n## Embed in Your App (SDK)\n\nFor production use — import the class, handle the QR however you want.\n\n```bash\nnpm install @gate/watcher\n```\n\n```js\nconst { GateWatcher } = require(\"@gate/watcher\");\n\nconst watcher = new GateWatcher({\n  gateUrl: \"https://your-gate.vercel.app\",\n  gateKey: \"gk-xxx\",\n  integrationId: \"int_xxx\",\n});\n\n// Render QR however you want — web page, API response, email, etc.\nwatcher.on(\"qr\", (qr) => {\n  // Example: send to frontend via WebSocket\n  io.emit(\"whatsapp-qr\", qr);\n});\n\nwatcher.on(\"ready\", () => {\n  console.log(\"WhatsApp connected!\");\n});\n\n// Every incoming message after GATE security processing\nwatcher.on(\"message\", (msg, result) => {\n  console.log(`From: ${msg.from}, Text: ${msg.body}`);\n  console.log(`Security actions: ${result.securityActions}`);\n  console.log(`Blocked: ${result.blocked}`);\n});\n\n// Outbound actions executed by the watcher\nwatcher.on(\"action_result\", ({ action, success, error }) => {\n  console.log(`${action}: ${success ? \"done\" : error}`);\n});\n\nawait watcher.start();\n\n// Later...\nawait watcher.stop();\n```\n\n### SDK Events\n\n| Event | Args | Description |\n|---|---|---|\n| `qr` | `(qrString)` | QR code string — render it however you want |\n| `authenticated` | — | WhatsApp session authenticated |\n| `ready` | — | Client ready, heartbeat + polling started |\n| `message` | `(msg, result)` | Incoming message processed by GATE |\n| `message_sent` | `(msg, result)` | Outgoing message processed by GATE |\n| `action` | `(action)` | Outbound action received from queue |\n| `action_result` | `({ actionId, action, success, result, error })` | Outbound action completed |\n| `gate_error` | `({ path, status, error })` | GATE API call failed |\n| `limit_reached` | `(type)` | Plan limit hit (e.g. \"watcher_agents\") |\n| `disconnected` | `(reason)` | WhatsApp disconnected |\n| `stopped` | — | Watcher fully shut down |\n\n### SDK Options\n\n| Option | Required | Default | Description |\n|---|---|---|---|\n| `gateUrl` | Yes | — | GATE cloud URL |\n| `gateKey` | Yes | — | Virtual key (`gk-xxx`) |\n| `integrationId` | Yes | — | Integration ID (`int_xxx`) |\n| `authDir` | No | `./.wwebjs_auth` | Path to store WhatsApp session |\n| `heartbeatInterval` | No | `30000` | ms between heartbeats |\n| `pollInterval` | No | `3000` | ms between outbound polls |\n| `puppeteer` | No | `{ headless: true }` | Puppeteer launch options |\n\n### Advanced: Access whatsapp-web.js directly\n\n```js\nconst client = watcher.getWhatsAppClient();\nconst chats = await client.getChats();\n```\n\n## Setup\n\n1. Go to **GATE Dashboard → Integrations → Add Integration**\n2. Select **WhatsApp Web**, copy the **Integration ID**\n3. Copy your **Virtual Key** from the **Keys** page\n4. Set the three env vars and run\n\n## Security model\n\n- WhatsApp session tokens stored in `.wwebjs_auth/` on YOUR machine\n- GATE cloud never sees or stores your credentials\n- All message content passes through GATE's security pipeline\n- Billing, limits, and security enforced server-side\n","readmeFilename":"README.md"}