{"_id":"@candourits/be-timezone-converter","_rev":"8-4bbbd682678700ecec1b37eb435982d9","name":"@candourits/be-timezone-converter","dist-tags":{"latest":"1.0.7"},"versions":{"1.0.0":{"name":"@candourits/be-timezone-converter","version":"1.0.0","keywords":["candour","converter","timezone","middleware"],"author":{"name":"CaptainLeon445"},"license":"MIT","_id":"@candourits/be-timezone-converter@1.0.0","maintainers":[{"name":"captainleon","email":"onichristopherife@gmail.com"}],"homepage":"https://github.com/yourusername/express-timezone-converter#readme","bugs":{"url":"https://github.com/yourusername/express-timezone-converter/issues"},"dist":{"shasum":"98a6ea11cd349eaa0ba8c5f00921fe220b31be00","tarball":"https://registry.npmjs.org/@candourits/be-timezone-converter/-/be-timezone-converter-1.0.0.tgz","fileCount":12,"integrity":"sha512-gRvs3VYVGqSTy5UriwsE7U52fMaDkBhvHak2/Kid74l6yxYsW4ohjXavhmaWZFNeJhF0RG31HnQOMnBXBRHLPQ==","signatures":[{"sig":"MEUCIQDtAAYLxs2icVr0zmR77IgE9S0rvNcbQ5nnvnMvy6WMUgIgExJmQCaKYcNf2bmTjfRgExHU91l521BO2uWmngye4sE=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":20380},"main":"src/index.ts","types":"dist/index.d.ts","scripts":{"build":"tsc -p .","prepublishOnly":"npm run build"},"_npmUser":{"name":"captainleon","email":"onichristopherife@gmail.com"},"repository":{"url":"git+https://github.com/yourusername/express-timezone-converter.git","type":"git"},"_npmVersion":"10.8.2","description":"candour backend middleware for automatic timezone conversion","directories":{},"_nodeVersion":"20.18.2","dependencies":{"express":"^5.1.0","geoip-lite":"^1.4.10","moment-timezone":"^0.5.48"},"_hasShrinkwrap":false,"devDependencies":{"typescript":"^4.4.4","@types/express":"^5.0.1","@types/geoip-lite":"^1.4.4"},"peerDependencies":{"express":"^5.1.0"},"_npmOperationalInternal":{"tmp":"tmp/be-timezone-converter_1.0.0_1743929903900_0.8625634736147092","host":"s3://npm-registry-packages-npm-production"}},"1.0.1":{"name":"@candourits/be-timezone-converter","version":"1.0.1","keywords":["candour","converter","timezone","middleware"],"author":{"name":"CaptainLeon445"},"license":"MIT","_id":"@candourits/be-timezone-converter@1.0.1","maintainers":[{"name":"captainleon","email":"onichristopherife@gmail.com"}],"homepage":"https://github.com/yourusername/express-timezone-converter#readme","bugs":{"url":"https://github.com/yourusername/express-timezone-converter/issues"},"dist":{"shasum":"57030434b7ae1d68fa4524d62584f43447c94de2","tarball":"https://registry.npmjs.org/@candourits/be-timezone-converter/-/be-timezone-converter-1.0.1.tgz","fileCount":12,"integrity":"sha512-mwLArpj3U8bOELou6Y8U1xSOQ2z2o481+YcSixk8iJVFMDkxS+wJsNP2Zsuwzm92Iu1udyblRgUY6OHnqGkQaA==","signatures":[{"sig":"MEQCID8/DkqZitNyVj5iOPUjCwoBWvPcd/XIPVkKGOyVQy58AiAWwyBQ+WR7Pj2oZwC5JzNF0S8V/o+3mYeioxxk5ZTrew==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":20403},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","scripts":{"build":"tsc -p .","prepublishOnly":"npm run build"},"_npmUser":{"name":"captainleon","email":"onichristopherife@gmail.com"},"repository":{"url":"git+https://github.com/yourusername/express-timezone-converter.git","type":"git"},"_npmVersion":"10.8.2","description":"candour backend middleware for automatic timezone conversion","directories":{},"_nodeVersion":"20.18.2","dependencies":{"express":"^5.1.0","geoip-lite":"^1.4.10","moment-timezone":"^0.5.48"},"_hasShrinkwrap":false,"devDependencies":{"typescript":"^4.4.4","@types/express":"^5.0.1","@types/geoip-lite":"^1.4.4"},"peerDependencies":{"express":"^5.1.0"},"_npmOperationalInternal":{"tmp":"tmp/be-timezone-converter_1.0.1_1743930710906_0.41885849146065923","host":"s3://npm-registry-packages-npm-production"}},"1.0.2":{"name":"@candourits/be-timezone-converter","version":"1.0.2","keywords":["candour","converter","timezone","middleware"],"author":{"name":"CaptainLeon445"},"license":"MIT","_id":"@candourits/be-timezone-converter@1.0.2","maintainers":[{"name":"captainleon","email":"onichristopherife@gmail.com"}],"homepage":"https://github.com/yourusername/express-timezone-converter#readme","bugs":{"url":"https://github.com/yourusername/express-timezone-converter/issues"},"dist":{"shasum":"0eeab631ca00e377d523af4267cc90b28f20e8d7","tarball":"https://registry.npmjs.org/@candourits/be-timezone-converter/-/be-timezone-converter-1.0.2.tgz","fileCount":15,"integrity":"sha512-HvVWy7KqVIKeCYzsyfwbA5ulhYwWudelNFffob88xIpV/glKJZ2ysRiJxpTCsbmscyD3HcabTy84gLGARudDCQ==","signatures":[{"sig":"MEYCIQDZQsbog9M1rt+r+/Goj/D9cS33MB4nJBnRDji8RVr6TwIhAJtyL1DZJ8cm/ZOn9H+WZa2ED1ppmFoyMVhexAICTaHc","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":24193},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","scripts":{"build":"tsc -p .","prepublishOnly":"npm run build"},"_npmUser":{"name":"captainleon","email":"onichristopherife@gmail.com"},"repository":{"url":"git+https://github.com/yourusername/express-timezone-converter.git","type":"git"},"_npmVersion":"10.8.2","description":"candour backend middleware for automatic timezone conversion","directories":{},"_nodeVersion":"20.18.2","dependencies":{"express":"^5.1.0","geoip-lite":"^1.4.10","moment-timezone":"^0.5.48"},"_hasShrinkwrap":false,"devDependencies":{"typescript":"^4.4.4","@types/express":"^5.0.1","@types/geoip-lite":"^1.4.4"},"peerDependencies":{"express":"^5.1.0"},"_npmOperationalInternal":{"tmp":"tmp/be-timezone-converter_1.0.2_1743931458284_0.5369057154844514","host":"s3://npm-registry-packages-npm-production"}},"1.0.3":{"name":"@candourits/be-timezone-converter","version":"1.0.3","keywords":["candour","converter","timezone","middleware"],"author":{"name":"CaptainLeon445"},"license":"MIT","_id":"@candourits/be-timezone-converter@1.0.3","maintainers":[{"name":"captainleon","email":"onichristopherife@gmail.com"}],"homepage":"https://github.com/yourusername/express-timezone-converter#readme","bugs":{"url":"https://github.com/yourusername/express-timezone-converter/issues"},"dist":{"shasum":"e857abc808f89ff6a5059f281105d0ae4012fbda","tarball":"https://registry.npmjs.org/@candourits/be-timezone-converter/-/be-timezone-converter-1.0.3.tgz","fileCount":14,"integrity":"sha512-ZmvmAEc5iMuGMPmQrqEdRoaE/ecefezfyef9/usx/sR+yvJXYEuAwW9lBkqRB2Oq77MvCiXFdu+Jq3Ke4k+F7Q==","signatures":[{"sig":"MEYCIQD0rj1dImg6rjTSO+AZ0SA/k5akd7xz2o5x9r4K2BVhqQIhAKcEoU+ee+TJyFNatSmVt8GVJP732ZAlET96wv8GvjA2","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":24069},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","scripts":{"build":"tsc -p .","prepublishOnly":"npm run build"},"_npmUser":{"name":"captainleon","email":"onichristopherife@gmail.com"},"repository":{"url":"git+https://github.com/yourusername/express-timezone-converter.git","type":"git"},"_npmVersion":"10.8.2","description":"candour backend middleware for automatic timezone conversion","directories":{},"_nodeVersion":"20.18.2","dependencies":{"express":"^5.1.0","geoip-lite":"^1.4.10","moment-timezone":"^0.5.48"},"_hasShrinkwrap":false,"devDependencies":{"typescript":"^4.4.4","@types/express":"^5.0.1","@types/geoip-lite":"^1.4.4"},"peerDependencies":{"express":"^5.1.0"},"_npmOperationalInternal":{"tmp":"tmp/be-timezone-converter_1.0.3_1743932420156_0.2956339558270604","host":"s3://npm-registry-packages-npm-production"}},"1.0.4":{"name":"@candourits/be-timezone-converter","version":"1.0.4","keywords":["candour","converter","timezone","middleware"],"author":{"name":"CaptainLeon445"},"license":"MIT","_id":"@candourits/be-timezone-converter@1.0.4","maintainers":[{"name":"captainleon","email":"onichristopherife@gmail.com"}],"homepage":"https://github.com/yourusername/express-timezone-converter#readme","bugs":{"url":"https://github.com/yourusername/express-timezone-converter/issues"},"dist":{"shasum":"7a2cad2459ed069f217b7b04dc1fd13631ac9001","tarball":"https://registry.npmjs.org/@candourits/be-timezone-converter/-/be-timezone-converter-1.0.4.tgz","fileCount":14,"integrity":"sha512-o1gWPvAbtAnY8oZ3GoJ5rjbc8h9LrVbd3pHSbwHbo8BNyujVE6gO5Z+bnvRml7QcLKLYphSvP9jx7g1jSdYKOg==","signatures":[{"sig":"MEUCIGYEz2Dr+y7xDaRTNC1zgPf9M/8+3vR/mkyJyUiuK55zAiEAwFqywMrMr557MI4Oay/PzJrtGFoBzPQ7vkEEAxBZIUM=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":25138},"main":"dist/index.js","types":"dist/index.d.ts","scripts":{"build":"tsc -p .","prepublishOnly":"npm run build"},"_npmUser":{"name":"captainleon","email":"onichristopherife@gmail.com"},"repository":{"url":"git+https://github.com/yourusername/express-timezone-converter.git","type":"git"},"_npmVersion":"10.8.2","description":"candour backend middleware for automatic timezone conversion","directories":{},"_nodeVersion":"20.18.2","dependencies":{"express":"^5.1.0","geoip-lite":"^1.4.10","moment-timezone":"^0.5.48"},"_hasShrinkwrap":false,"devDependencies":{"typescript":"^4.4.4","@types/express":"^5.0.1","@types/geoip-lite":"^1.4.4"},"peerDependencies":{"express":"^5.1.0"},"_npmOperationalInternal":{"tmp":"tmp/be-timezone-converter_1.0.4_1743933156218_0.7132927849113724","host":"s3://npm-registry-packages-npm-production"}},"1.0.5":{"name":"@candourits/be-timezone-converter","version":"1.0.5","keywords":["candour","converter","timezone","middleware"],"author":{"name":"CaptainLeon445"},"license":"MIT","_id":"@candourits/be-timezone-converter@1.0.5","maintainers":[{"name":"captainleon","email":"onichristopherife@gmail.com"}],"homepage":"https://github.com/yourusername/express-timezone-converter#readme","bugs":{"url":"https://github.com/yourusername/express-timezone-converter/issues"},"dist":{"shasum":"9c1d85286c15695129c04e7c2918ffac6e1a1ee5","tarball":"https://registry.npmjs.org/@candourits/be-timezone-converter/-/be-timezone-converter-1.0.5.tgz","fileCount":27,"integrity":"sha512-Ayv//6OA00jyKKik2F3IW22TtabWjXtkXYHE8k4SGBHst9IPinNQ5VibgJNLjHJQ1GNxsr/ehyCSLYsYBMIgWg==","signatures":[{"sig":"MEUCIQDyrrhWMbhFW49b/lQbPCAJjhPJkr8v6jhAI6Bk05HbwAIgB6NXMJD8TY48G1ClLHQpC1i5H1krulC5uA/YTbqhGh0=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":42298},"main":"dist/cjs/index.js","type":"module","types":"dist/esm/index.d.ts","exports":{".":{"import":"./dist/esm/index.js","require":"./dist/cjs/index.js"}},"scripts":{"build":"tsc -p . && tsc -p tsconfig.cjs.json","prepublishOnly":"npm run build"},"_npmUser":{"name":"captainleon","email":"onichristopherife@gmail.com"},"repository":{"url":"git+https://github.com/yourusername/express-timezone-converter.git","type":"git"},"_npmVersion":"10.8.2","description":"candour backend middleware for automatic timezone conversion","directories":{},"_nodeVersion":"20.18.2","dependencies":{"express":"^5.1.0","geoip-lite":"^1.4.10","moment-timezone":"^0.5.48"},"_hasShrinkwrap":false,"devDependencies":{"typescript":"^4.4.4","@types/express":"^5.0.1","@types/geoip-lite":"^1.4.4"},"peerDependencies":{"express":"^5.1.0"},"_npmOperationalInternal":{"tmp":"tmp/be-timezone-converter_1.0.5_1743933771735_0.5228326906920298","host":"s3://npm-registry-packages-npm-production"}},"1.0.6":{"name":"@candourits/be-timezone-converter","version":"1.0.6","keywords":["candour","converter","timezone","middleware"],"author":{"name":"CaptainLeon445"},"license":"MIT","_id":"@candourits/be-timezone-converter@1.0.6","maintainers":[{"name":"captainleon","email":"onichristopherife@gmail.com"}],"homepage":"https://github.com/yourusername/express-timezone-converter#readme","bugs":{"url":"https://github.com/yourusername/express-timezone-converter/issues"},"dist":{"shasum":"1b9e8aa02a8f6863745bc46c0a750a4c9398fb72","tarball":"https://registry.npmjs.org/@candourits/be-timezone-converter/-/be-timezone-converter-1.0.6.tgz","fileCount":27,"integrity":"sha512-UIvwiR1VFiWHGKTqqPB3lolIp1kBu8NRg7A/7XDLLj/1rDT3bTR0ji8jqqXbt6RZo+gU/mZEDB37XE//3WC08g==","signatures":[{"sig":"MEUCIQDXTyumCM5ZXon7DSk4gZ5WP5W7UZNdk475V8/48TPsWQIgfByGqi1ZXby/XX251ZwQKklSSey2wEU8gATGwnIieFU=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":42848},"main":"dist/cjs/index.js","types":"dist/esm/index.d.ts","exports":{"import":"./dist/esm/index.js","require":"./dist/cjs/index.js"},"scripts":{"build":"tsc -p . && tsc -p tsconfig.cjs.json","prepublishOnly":"npm run build"},"_npmUser":{"name":"captainleon","email":"onichristopherife@gmail.com"},"repository":{"url":"git+https://github.com/yourusername/express-timezone-converter.git","type":"git"},"_npmVersion":"10.8.2","description":"candour backend middleware for automatic timezone conversion","directories":{},"_nodeVersion":"20.18.2","dependencies":{"express":"^5.1.0","geoip-lite":"^1.4.10","moment-timezone":"^0.5.48"},"_hasShrinkwrap":false,"devDependencies":{"typescript":"^4.4.4","@types/express":"^5.0.1","@types/geoip-lite":"^1.4.4"},"peerDependencies":{"express":"^5.1.0"},"_npmOperationalInternal":{"tmp":"tmp/be-timezone-converter_1.0.6_1743935098785_0.030986363047725174","host":"s3://npm-registry-packages-npm-production"}},"1.0.7":{"name":"@candourits/be-timezone-converter","version":"1.0.7","description":"candour backend middleware for automatic timezone conversion","main":"dist/cjs/index.js","exports":{"import":"./dist/esm/index.js","require":"./dist/cjs/index.js"},"types":"dist/esm/index.d.ts","scripts":{"build":"tsc -p . && tsc -p tsconfig.cjs.json","prepublishOnly":"npm run build"},"keywords":["candour","converter","timezone","middleware"],"author":{"name":"CaptainLeon445"},"license":"MIT","repository":{"type":"git","url":"git+https://github.com/yourusername/express-timezone-converter.git"},"dependencies":{"express":"^5.1.0","geoip-lite":"^1.4.10","moment-timezone":"^0.5.48"},"peerDependencies":{"express":"^5.1.0"},"devDependencies":{"@types/express":"^5.0.1","@types/geoip-lite":"^1.4.4","typescript":"^4.4.4"},"_id":"@candourits/be-timezone-converter@1.0.7","bugs":{"url":"https://github.com/yourusername/express-timezone-converter/issues"},"homepage":"https://github.com/yourusername/express-timezone-converter#readme","_nodeVersion":"20.18.2","_npmVersion":"10.8.2","dist":{"integrity":"sha512-K65c7hmPrMqG+HGrsgh5Fkp5MsCmmcd+bkn7aCIsr4rHJEwAJ+SkCID6MI06aPHtq+W/CxAoXrjDDbtWyrgZHA==","shasum":"1698ab85ecd5fd4b6fb9cb44079fd5dec2fc48a5","tarball":"https://registry.npmjs.org/@candourits/be-timezone-converter/-/be-timezone-converter-1.0.7.tgz","fileCount":23,"unpackedSize":35966,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCID0Pkaam01UBX4EmB92MaC4JF74INxU7Q1KxfXWFzUr7AiEAy5+x8tLjzuN6QYhQLaOHJnOWI7YX932eBDcwHYSuE9g="}]},"_npmUser":{"name":"captainleon","email":"onichristopherife@gmail.com"},"directories":{},"maintainers":[{"name":"captainleon","email":"onichristopherife@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/be-timezone-converter_1.0.7_1743935947602_0.8410635052962772"},"_hasShrinkwrap":false}},"time":{"created":"2025-04-06T08:58:23.829Z","modified":"2025-04-06T10:39:08.032Z","1.0.0":"2025-04-06T08:58:24.077Z","1.0.1":"2025-04-06T09:11:51.123Z","1.0.2":"2025-04-06T09:24:18.481Z","1.0.3":"2025-04-06T09:40:20.341Z","1.0.4":"2025-04-06T09:52:36.399Z","1.0.5":"2025-04-06T10:02:51.910Z","1.0.6":"2025-04-06T10:24:58.973Z","1.0.7":"2025-04-06T10:39:07.847Z"},"bugs":{"url":"https://github.com/yourusername/express-timezone-converter/issues"},"author":{"name":"CaptainLeon445"},"license":"MIT","homepage":"https://github.com/yourusername/express-timezone-converter#readme","keywords":["candour","converter","timezone","middleware"],"repository":{"type":"git","url":"git+https://github.com/yourusername/express-timezone-converter.git"},"description":"candour backend middleware for automatic timezone conversion","maintainers":[{"name":"captainleon","email":"onichristopherife@gmail.com"}],"readme":"# Candour Backend Timezone Converter\n\nA TypeScript library for automatically converting UTC dates to user timezones in Express API responses.\n\n## Features\n\n- ✅ Automatic conversion of dates in API responses to user's timezone\n- ✅ Preserves Express response chainability (`res.status().json()`)\n- ✅ Type-safe with TypeScript support\n- ✅ Configurable date detection and field skipping\n- ✅ Works with any database ORM (Sequelize, TypeORM, etc.)\n- ✅ Zero changes needed in your controllers or models\n- ✅ Lightweight, with minimal dependencies\n\n## Installation\n\n```bash\nnpm install @candour/be-timezone-converter\n```\n\n## Quick Start\n\n```typescript\nimport express from 'express';\nimport { createTimezoneConverter } from '@candour/be-timezone-converter';\n\nconst app = express();\nconst { timezoneMiddleware, responseTransformerMiddleware } = createTimezoneConverter();\n\n// Apply middleware\napp.use(timezoneMiddleware);\napp.use(responseTransformerMiddleware);\n\n// Your routes\napp.get('/api/data', (req, res) => {\n  const data = [\n    { id: 1, name: 'Item 1', createdAt: new Date() }\n  ];\n  \n  // Dates will be automatically converted to user's timezone\n  res.status(200).json(data);\n});\n\napp.listen(3000);\n```\n\n## How It Works\n\n1. The `timezoneMiddleware` extracts the user's timezone from:\n   - Query parameter: `?timezone=America/New_York`\n   - Request header: `x-timezone: America/New_York`\n\n2. The `responseTransformerMiddleware` automatically converts all UTC dates in your response to the user's timezone.\n\n3. All database operations continue to use UTC timestamps for consistency.\n\n## Configuration Options\n\n```typescript\nconst timezoneConverter = createTimezoneConverter({\n  // Default timezone if none specified (default: 'UTC')\n  defaultTimezone: 'America/New_York',\n  \n  // Custom header name (default: 'x-timezone')\n  timezoneHeader: 'x-user-timezone',\n\n  // Custom query parameter name (default: 'timezone')\n  timezoneParam: 'tz',\n  \n  // Fields to skip during conversion\n  skipFields: [\n    'metadata',           // Skip the entire metadata object\n    'config.*',           // Skip all properties inside config\n    'rawTimestamps'       // Skip specific field\n  ],\n\n  // overrides other options and automatically detect user timezone based on the ip address and default to UTC if timezone is not found\n  detectTimezone:true,\n  \n  // Custom function to determine if a value is a date\n  dateDetector: (value) => {\n    // Your custom detection logic\n    return value instanceof Date || \n           (typeof value === 'string' && /^\\d{4}-\\d{2}-\\d{2}/.test(value));\n  }\n});\n```\n\n## Manual Conversion\n\nFor cases where you need to manually convert dates:\n\n```typescript\nconst { convertDate, transformData } = createTimezoneConverter();\n\n// Convert a single date\napp.get('/api/time', (req, res) => {\n  const now = new Date();\n  const localTime = convertDate(now, req.userTimezone);\n  \n  res.json({ localTime });\n});\n\n// Transform a complex object\napp.get('/api/custom', (req, res) => {\n  const data = {\n    user: {\n      registeredAt: new Date(),\n      lastLogin: new Date()\n    }\n  };\n  \n  const transformed = transformData(data, req.userTimezone);\n  res.json(transformed);\n});\n```\n\n## TypeScript Support\n\nThe library includes type definitions and extends Express's `Request` interface:\n\n```typescript\nimport { Request, Response } from 'express';\n\napp.get('/api/example', (req: Request, res: Response) => {\n  // req.userTimezone is available and typed\n  console.log(req.userTimezone); // e.g., 'America/New_York'\n});\n```\n\n## License\n\nMIT","readmeFilename":"README.md"}