@anura-gate/watcher-gmail
v0.4.0
Published
GATE Watcher — Self-hosted Gmail monitor. Credentials never leave your machine.
Maintainers
Readme
GATE Watcher — Gmail
Self-hosted daemon that monitors your Gmail inbox via IMAP and pushes mail events to GATE cloud for security processing. Your email credentials never leave your machine.
How it works
Your Machine (Watcher) GATE Cloud
┌─────────────────────┐ ┌──────────────────┐
│ Gmail IMAP session │───────>│ Security pipeline │
│ (credentials HERE) │<───────│ (redact, policy, │
│ │ poll │ audit, forward) │
└─────────────────────┘ └──────────────────┘Quick Start (CLI)
cd gate-watcher-gmail
npm install
# Create .env (or pass env vars directly)
cp .env.example .env
# Fill in GATE_KEY, GATE_INTEGRATION_ID, GMAIL_EMAIL, GMAIL_APP_PASSWORD
npm startEmbed in Your App (SDK)
npm install @anura-gate/watcher-gmailconst { GateGmailWatcher } = require("@anura-gate/watcher-gmail");
const watcher = new GateGmailWatcher({
gateKey: "gk-xxx",
integrationId: "int_xxx",
email: "[email protected]",
appPassword: "xxxx xxxx xxxx xxxx",
});
watcher.on("ready", (email) => {
console.log(`Gmail connected: ${email}`);
});
// Every new email after GATE security processing
watcher.on("mail", (event, result) => {
console.log(`From: ${event.from}, Subject: ${event.subject}`);
console.log(`Security actions: ${result.securityActions}`);
console.log(`Blocked: ${result.blocked}`);
});
watcher.on("action_result", ({ action, success, error }) => {
console.log(`${action}: ${success ? "done" : error}`);
});
await watcher.start();
// Later...
await watcher.stop();SDK Events
| Event | Args | Description |
|---|---|---|
| ready | (email) | Connected to Gmail IMAP |
| mail | (event, result) | New email processed by GATE |
| action | (action) | Outbound action received from GATE queue |
| action_result | ({ actionId, action, success, result, error }) | Outbound action completed |
| gate_error | ({ path, status, error }) | GATE API call failed |
| limit_reached | (type) | Plan limit hit |
| disconnected | (reason) | IMAP disconnected |
| stopped | — | Watcher fully shut down |
SDK Options
| Option | Required | Default | Description |
|---|---|---|---|
| gateKey | Yes | — | Virtual key (gk-xxx) |
| integrationId | Yes | — | Integration ID (int_xxx) |
| email | Yes | — | Gmail address |
| appPassword | Yes | — | Google App Password (16-char) |
| gateUrl | No | "https://anuragate.com" | GATE cloud URL |
| host | No | "imap.gmail.com" | IMAP host |
| port | No | 993 | IMAP port |
| pollInterval | No | 30000 | ms between mail polls |
| heartbeatInterval | No | 30000 | ms between heartbeats |
| sessionId | No | — | Session ID for multi-tenant use |
| sessionLabel | No | — | Human-readable session label |
| sessionMetadata | No | {} | Arbitrary metadata for the session |
Setup
- Enable 2-Step Verification on your Google account
- Go to myaccount.google.com/apppasswords
- Generate an App Password for "Mail" → copy the 16-character code
- Go to GATE Dashboard → Integrations → Add Integration
- Select Gmail, copy the Integration ID
- Copy your Virtual Key from the Keys page
- Set the env vars and run
Environment Variables
| Variable | Required | Description |
|---|---|---|
| GATE_KEY | Yes | Your GATE virtual key |
| GATE_INTEGRATION_ID | Yes | Integration ID from the dashboard |
| GMAIL_EMAIL | Yes | Your Gmail address |
| GMAIL_APP_PASSWORD | Yes | 16-character Google App Password |
| GATE_URL | No | Custom GATE cloud URL |
| WEB_PORT | No | Port for the dev dashboard (CLI only) |
Security model
- Gmail App Password stored in
.envon YOUR machine - GATE cloud never sees or stores your credentials
- All email content passes through GATE's security pipeline
- Billing, limits, and security enforced server-side
