{"_id":"@adwait12345/telemetry-express","_rev":"4-385b3db686a287c6ea2b09601bae28a8","name":"@adwait12345/telemetry-express","dist-tags":{"latest":"0.1.3"},"versions":{"0.1.0":{"name":"@adwait12345/telemetry-express","version":"0.1.0","_id":"@adwait12345/telemetry-express@0.1.0","maintainers":[{"name":"adwait12345","email":"advtbokde@gmail.com"}],"dist":{"shasum":"bd15fda38c0387845c6aa6bcc946f5ccd475e009","tarball":"https://registry.npmjs.org/@adwait12345/telemetry-express/-/telemetry-express-0.1.0.tgz","fileCount":7,"integrity":"sha512-4BdXshYw52WS72NHlD+NfUwCVbUBxK5EQ64qf1+1lIteiwtUVwf4kYarqNVSscRCrGOXbRsTiFcbNP+1jQqyTA==","signatures":[{"sig":"MEQCIG4VXWtbQpaqsZZre1UCLOPcTRm7iXp2xCul4SV+07HkAiAAqsHUHs/XghzVv7+6owPyF7dFVkIRfxP6o9W/4Fkc6Q==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":9638},"main":"./dist/index.js","_from":"file:adwait12345-telemetry-express-0.1.0.tgz","types":"./dist/index.d.ts","module":"./dist/index.mjs","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.mjs","require":"./dist/index.js"}},"scripts":{"dev":"tsup src/index.ts --format esm,cjs --dts --watch","build":"tsup src/index.ts --format esm,cjs --dts --clean","clean":"rm -rf dist","typecheck":"tsc --noEmit"},"_npmUser":{"name":"adwait12345","email":"advtbokde@gmail.com"},"_resolved":"/private/var/folders/n5/qzpv7qs52kz9rd1ks63nybvc0000gn/T/b5fa3ca087ca0f22fec170dfa7ef8402/adwait12345-telemetry-express-0.1.0.tgz","_integrity":"sha512-4BdXshYw52WS72NHlD+NfUwCVbUBxK5EQ64qf1+1lIteiwtUVwf4kYarqNVSscRCrGOXbRsTiFcbNP+1jQqyTA==","_npmVersion":"10.9.3","description":"Express middleware for Telemetry SDK - track AI bots and crawlers","directories":{},"_nodeVersion":"22.18.0","dependencies":{"@adwait12345/telemetry-core":"0.1.0"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.0.0","express":"^4.18.2","typescript":"^5.4.0","@types/express":"^4.17.21"},"peerDependencies":{"express":">=4.0.0"},"_npmOperationalInternal":{"tmp":"tmp/telemetry-express_0.1.0_1772737499780_0.7675848603526236","host":"s3://npm-registry-packages-npm-production"}},"0.1.1":{"name":"@adwait12345/telemetry-express","version":"0.1.1","_id":"@adwait12345/telemetry-express@0.1.1","maintainers":[{"name":"adwait12345","email":"advtbokde@gmail.com"}],"dist":{"shasum":"62b2f559edbb57046d2a2aa7ef4f37d689a2b8a6","tarball":"https://registry.npmjs.org/@adwait12345/telemetry-express/-/telemetry-express-0.1.1.tgz","fileCount":7,"integrity":"sha512-ghSx11OxAysOLNwcOZBdbZR65kIPfkWdg87lcp+UMUoe1QrSS53pDMdV7s48mHtjNfcqra69kgQHvs/VUDtVYg==","signatures":[{"sig":"MEUCIQC3J69d0w7jMiUQIOOPFEs9QunBLrnb6rUCirEq8boA+AIgAowzSX2ZYDbI4ksj9I2lCvZsYmg167/oTBPxgqNSuus=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":9712},"main":"./dist/index.js","_from":"file:adwait12345-telemetry-express-0.1.1.tgz","types":"./dist/index.d.ts","module":"./dist/index.mjs","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.mjs","require":"./dist/index.js"}},"scripts":{"dev":"tsup src/index.ts --format esm,cjs --dts --watch","build":"tsup src/index.ts --format esm,cjs --dts --clean","clean":"rm -rf dist","typecheck":"tsc --noEmit"},"_npmUser":{"name":"adwait12345","email":"advtbokde@gmail.com"},"_resolved":"/private/var/folders/n5/qzpv7qs52kz9rd1ks63nybvc0000gn/T/f5015d3372b2ee9626ecce31a4611513/adwait12345-telemetry-express-0.1.1.tgz","_integrity":"sha512-ghSx11OxAysOLNwcOZBdbZR65kIPfkWdg87lcp+UMUoe1QrSS53pDMdV7s48mHtjNfcqra69kgQHvs/VUDtVYg==","_npmVersion":"10.9.3","description":"Express middleware for Telemetry SDK - track AI bots and crawlers","directories":{},"_nodeVersion":"22.18.0","dependencies":{"@adwait12345/telemetry-core":">=0.1.0"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.0.0","express":"^4.18.2","typescript":"^5.4.0","@types/express":"^4.17.21"},"peerDependencies":{"express":">=4.0.0"},"_npmOperationalInternal":{"tmp":"tmp/telemetry-express_0.1.1_1772789715642_0.19979928418178705","host":"s3://npm-registry-packages-npm-production"}},"0.1.2":{"name":"@adwait12345/telemetry-express","version":"0.1.2","_id":"@adwait12345/telemetry-express@0.1.2","maintainers":[{"name":"adwait12345","email":"advtbokde@gmail.com"}],"dist":{"shasum":"de2f3f8bb3e47c19d869a98ba48905d2913643b5","tarball":"https://registry.npmjs.org/@adwait12345/telemetry-express/-/telemetry-express-0.1.2.tgz","fileCount":6,"integrity":"sha512-h0VzCNET68MnBE2E+tiWeSY7P5wKYA89n6azFlDzuqW4+5FObb8NXWyXl9VFD509JCcEqrtpKjWUaTBG5nGqIA==","signatures":[{"sig":"MEUCIAoAeEX2ERs1a56cBiz9nz7E0jxewMIz97i/TUBQ05hAAiEAyhpu4FgJUa4Wy+2WZ09MGUOHx9bsCpdsU5cTHgsPpKo=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":10651},"main":"./dist/index.js","_from":"file:adwait12345-telemetry-express-0.1.2.tgz","types":"./dist/index.d.ts","module":"./dist/index.mjs","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.mjs","require":"./dist/index.js"}},"scripts":{"dev":"tsup src/index.ts --format esm,cjs --dts --watch","build":"tsup src/index.ts --format esm,cjs --dts --clean","clean":"rm -rf dist","typecheck":"tsc --noEmit"},"_npmUser":{"name":"adwait12345","email":"advtbokde@gmail.com"},"_resolved":"/private/var/folders/n5/qzpv7qs52kz9rd1ks63nybvc0000gn/T/2cbd8b64af29befbf508cd8a088ccd36/adwait12345-telemetry-express-0.1.2.tgz","_integrity":"sha512-h0VzCNET68MnBE2E+tiWeSY7P5wKYA89n6azFlDzuqW4+5FObb8NXWyXl9VFD509JCcEqrtpKjWUaTBG5nGqIA==","_npmVersion":"10.9.3","description":"Express middleware for Telemetry SDK - track AI bots and crawlers","directories":{},"_nodeVersion":"22.18.0","dependencies":{"@adwait12345/telemetry-core":">=0.1.0"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.0.0","express":"^4.18.2","typescript":"^5.4.0","@types/express":"^4.17.21"},"peerDependencies":{"express":">=4.0.0"},"_npmOperationalInternal":{"tmp":"tmp/telemetry-express_0.1.2_1772827790492_0.20967660935367083","host":"s3://npm-registry-packages-npm-production"}},"0.1.3":{"name":"@adwait12345/telemetry-express","version":"0.1.3","description":"Express middleware for Telemetry SDK - track AI bots and crawlers","main":"./dist/index.js","module":"./dist/index.mjs","types":"./dist/index.d.ts","exports":{".":{"import":"./dist/index.mjs","require":"./dist/index.js","types":"./dist/index.d.ts"}},"scripts":{"build":"tsup src/index.ts --format esm,cjs --dts --clean","dev":"tsup src/index.ts --format esm,cjs --dts --watch","typecheck":"tsc --noEmit","clean":"rm -rf dist"},"dependencies":{"@adwait12345/telemetry-core":"^0.1.5"},"devDependencies":{"@types/express":"^4.17.21","express":"^4.18.2","tsup":"^8.0.0","typescript":"^5.4.0"},"peerDependencies":{"express":">=4.0.0"},"_id":"@adwait12345/telemetry-express@0.1.3","gitHead":"602eb8a9300311669ba6cd7653dbc4ff3aa662fe","_nodeVersion":"22.18.0","_npmVersion":"10.9.3","dist":{"integrity":"sha512-gbpfPgLS/Wuhl+gErrab1wSMBqEu+88mXjmKX3RAufrhhj1T7ohtGBsbsFKrSggE5luOzfN+Atbb7J4jHUT5ng==","shasum":"505832bf2ac7882748f9d8d90dd1110ee14154de","tarball":"https://registry.npmjs.org/@adwait12345/telemetry-express/-/telemetry-express-0.1.3.tgz","fileCount":6,"unpackedSize":10620,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIE7j3+cgZPjmbhPN0mhD2gp9tpsGlweF/tS0Qyko+g9qAiEAm4LmPJq3Q/i5hMyAUwFvC+0LQJQKDTIZEWSkxenwCh8="}]},"_npmUser":{"name":"adwait12345","email":"advtbokde@gmail.com"},"directories":{},"maintainers":[{"name":"adwait12345","email":"advtbokde@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/telemetry-express_0.1.3_1773139591016_0.7933883317996082"},"_hasShrinkwrap":false}},"time":{"created":"2026-03-05T19:04:59.688Z","modified":"2026-03-10T10:46:31.321Z","0.1.0":"2026-03-05T19:04:59.931Z","0.1.1":"2026-03-06T09:35:15.781Z","0.1.2":"2026-03-06T20:09:50.673Z","0.1.3":"2026-03-10T10:46:31.188Z"},"description":"Express middleware for Telemetry SDK - track AI bots and crawlers","maintainers":[{"name":"adwait12345","email":"advtbokde@gmail.com"}],"readme":"# `@adwait12345/telemetry-express`\n\nExpress middleware adapter for the Telemetry SDK. Detects bots and crawlers on every incoming request and sends tracking payloads to the Telemetry API.\n\n---\n\n## Requirements\n\n- Express **4.x or later**\n- Node.js **18+** (uses native `fetch`)\n- A Telemetry account with a **Project ID** and **Server Secret**\n\n---\n\n## Installation\n\n```bash\nnpm install @adwait12345/telemetry-express @adwait12345/telemetry-core\n# or\npnpm add @adwait12345/telemetry-express @adwait12345/telemetry-core\n```\n\n---\n\n## Setup\n\n```typescript\nimport express from \"express\";\nimport { telemetryMiddleware } from \"@adwait12345/telemetry-express\";\n\nconst app = express();\n\napp.use(\n  telemetryMiddleware({\n    projectId: process.env.TELEMETRY_PROJECT_ID!,\n    apiUrl: process.env.TELEMETRY_API_URL,\n    serverSecret: process.env.TELEMETRY_SERVER_SECRET!,\n    debug: false,\n  })\n);\n\napp.get(\"/\", (req, res) => {\n  res.send(\"Hello world\");\n});\n\napp.listen(3000);\n```\n\n```bash\n# .env\nTELEMETRY_PROJECT_ID=your-project-id\nTELEMETRY_API_URL=https://telemetry-uqd3.onrender.com\nTELEMETRY_SERVER_SECRET=sk_...\n```\n\n---\n\n## How it works\n\n1. The middleware runs synchronously on every request\n2. The request is normalized (UA, IP, headers, HTTP version) and passed to `detectBot()`\n3. Express exposes the real `httpVersion` from the raw request — this improves detection accuracy (HTTP/1.0 is flagged as a bot signal)\n4. If a bot is detected (or `trackAll: true`), a fire-and-forget send is triggered\n5. `next()` is called immediately — the send **does not block** the response\n\n---\n\n## Configuration options\n\n| Option | Type | Default | Description |\n|--------|------|---------|-------------|\n| `projectId` | `string` | **required** | Your Telemetry project ID |\n| `serverSecret` | `string` | **required** | Your server secret key for API auth |\n| `apiUrl` | `string` | hosted service | Override the API endpoint |\n| `trackAll` | `boolean` | `false` | Track all requests, not just bots |\n| `trackSearchBots` | `boolean` | `true` | Include Googlebot, Bingbot etc. |\n| `ignorePaths` | `(string \\| RegExp)[]` | — | Paths to skip entirely |\n| `customBots` | `Array<{name, pattern, category?}>` | — | Add custom bot definitions |\n| `debug` | `boolean` | `false` | Log detection results to the console |\n| `authorizationHeader` | `string` | — | Fully custom `Authorization` header value |\n| `headers` | `Record<string, string>` | — | Extra headers on every telemetry request |\n\n---\n\n## Examples\n\n### Skip health check and static routes\n\n```typescript\napp.use(\n  telemetryMiddleware({\n    projectId: \"...\",\n    serverSecret: \"sk_...\",\n    ignorePaths: [\"/health\", \"/ping\", /^\\/static\\//],\n  })\n);\n```\n\n### Track all visitors\n\n```typescript\napp.use(\n  telemetryMiddleware({\n    projectId: \"...\",\n    serverSecret: \"sk_...\",\n    trackAll: true,\n  })\n);\n```\n\n### Add custom bot definitions\n\n```typescript\napp.use(\n  telemetryMiddleware({\n    projectId: \"...\",\n    serverSecret: \"sk_...\",\n    customBots: [\n      { name: \"MyInternalCrawler\", pattern: /my-crawler\\/\\d+/i, category: \"scraper\" },\n    ],\n  })\n);\n```\n\n---\n\n## What gets tracked\n\n| Field | Description |\n|-------|-------------|\n| `projectId` | Your project ID |\n| `path` | Request path (from `req.originalUrl`) |\n| `method` | HTTP method |\n| `userAgent` | Full user-agent string |\n| `ip` | Client IP (from `req.ip` or `x-forwarded-for`) |\n| `isBot` | `true` / `false` |\n| `botName` | Named bot e.g. `\"GPTBot\"`, or `null` |\n| `botCategory` | e.g. `\"ai-crawler\"`, `\"search\"`, `\"scraper\"` |\n| `confidence` | `\"certain\"` / `\"high\"` / `\"medium\"` / `\"low\"` |\n| `detectionMethod` | `\"ua-match\"` / `\"header-anomaly\"` / `\"http10\"` / `\"automation-header\"` |\n| `referrer` | Referrer header |\n| `timestamp` | ISO 8601 UTC |\n","readmeFilename":"README.md"}