{"_id":"@3d-outlet/passport","name":"@3d-outlet/passport","dist-tags":{"latest":"1.0.0"},"versions":{"1.0.0":{"name":"@3d-outlet/passport","version":"1.0.0","description":"Lightweight Face3D authentication library","main":"./dist/index.js","types":"./dist/index.d.ts","publishConfig":{"access":"public"},"scripts":{"build":"tsc -p tsconfig.build.json","format":"prettier --write \"lib/**/*.ts\""},"keywords":[],"author":"","license":"ISC","type":"commonjs","devDependencies":{"@3d-outlet/core":"^1.0.2","@types/node":"^24.10.1","prettier":"^3.7.3","typescript":"^5.9.3"},"dependencies":{"@nestjs/common":"^11.1.9","@nestjs/core":"^11.1.9","reflect-metadata":"^0.2.2","txjs":"^0.1.1"},"_id":"@3d-outlet/passport@1.0.0","gitHead":"ecc86511c10a4cd93ea8dc85c411c3c350b3fa9a","_nodeVersion":"20.19.6","_npmVersion":"10.8.2","dist":{"integrity":"sha512-K33artWAGQySqR1jEu99gxD7J1bs16G0bjZbX7ZKod5Hh8uUOfgaA3bhE0cWqsT2kx+StbNfMY/AgfJOKfnqVQ==","shasum":"cb8e4af95873d5644d3f5b6ea47e1bd3299b8dee","tarball":"https://registry.npmjs.org/@3d-outlet/passport/-/passport-1.0.0.tgz","fileCount":28,"unpackedSize":18311,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCICNc3QX9+ufe+HbjWle5FobmMszkQxdcR819kBJi7OsrAiEAnjZBJJr0TAIYX+msQ+DhKZnQeLYWFYXOp8G0xv4hrQY="}]},"_npmUser":{"name":"kitty_ilnazik","email":"ilnazm1ngaleev@yandex.com"},"directories":{},"maintainers":[{"name":"kitty_ilnazik","email":"ilnazm1ngaleev@yandex.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/passport_1.0.0_1767962100273_0.7626036536725072"},"_hasShrinkwrap":false}},"time":{"created":"2026-01-09T12:35:00.206Z","1.0.0":"2026-01-09T12:35:00.405Z","modified":"2026-01-09T12:35:00.973Z"},"maintainers":[{"name":"kitty_ilnazik","email":"ilnazm1ngaleev@yandex.com"}],"description":"Lightweight Face3D authentication library","keywords":[],"license":"ISC","readme":"<div align=\"center\">\n\n# 🔑 @3d-outlet/passport\n\n**Token-based Authentication Module for 3D OUTLET Microservices**\n\n[![npm version](https://img.shields.io/npm/v/@3d-outlet/passport?style=for-the-badge)](https://www.npmjs.com/package/@3d-outlet/passport)\n[![License: ISC](https://img.shields.io/badge/License-ISC-blue.svg?style=for-the-badge)](https://opensource.org/licenses/ISC)\n\n</div>\n\n---\n\n## ✨ Features\n\n- 🛡️ **Secure Token Generation** - Creates HMAC-based tokens considering `userId`, `issuedAt`, and `expiresAt`.\n- 🔑 **Reliable Token Verification** - Authenticates and validates token expiration using constant-time comparison.\n- 🚀 **NestJS Integration** - Easy integration into NestJS applications using `PassportModule`.\n- 🔄 **Flexible Configuration** - Supports synchronous and asynchronous module configuration.\n- 🔐 **Encoding and Decoding** - Built-in utilities for Base64 URL encoding/decoding and cryptographic operations.\n\n---\n\n## 📦 Installation\n\n```bash\nnpm install @3d-outlet/passport\n# or\npnpm add @3d-outlet/passport\n# or\nyarn add @3d-outlet/passport\n# or\nbun add @3d-outlet/passport\n```\n\n---\n\n## 🚀 Quick Start\n\n### Module Registration\n\n#### Synchronous Registration\n\n```typescript\nimport { Module } from '@nestjs/common'\nimport { PassportModule } from '@3d-outlet/passport'\n\n@Module({\n  imports: [\n    PassportModule.register({\n      secretKey: 'YOUR_VERY_SECRET_KEY', // Replace with your secret key\n    }),\n  ],\n})\nexport class AppModule {}\n```\n\n#### Asynchronous Registration\n\n```typescript\nimport { Module } from '@nestjs/common'\nimport { PassportModule } from '@3d-outlet/passport'\nimport { ConfigModule, ConfigService } from '@nestjs/config'\n\n@Module({\n  imports: [\n    PassportModule.registerAsync({\n      imports: [ConfigModule],\n      useFactory: async (configService: ConfigService) => ({\n        secretKey: configService.get<string>('PASSPORT_SECRET_KEY'),\n      }),\n      inject: [ConfigService],\n    }),\n  ],\n})\nexport class AppModule {}\n```\n\n### Using `PassportService`\n\n```typescript\nimport { Injectable } from '@nestjs/common'\nimport { PassportService } from '@3d-outlet/passport'\n\n@Injectable()\nexport class AuthService {\n  constructor(private readonly passportService: PassportService) {}\n\n  async login(userId: string) {\n    const ttl = 3600 // Token expiration in seconds (1 hour)\n    const token = this.passportService.generate(userId, ttl)\n    return { token }\n  }\n\n  async verifyToken(token: string) {\n    const result = this.passportService.verify(token)\n    if (!result.valid) {\n      console.error('Invalid token:', result.reason)\n      return null\n    }\n    console.log('User:', result.userId)\n    return result.userId\n  }\n}\n```\n\n---\n\n## 📁 Project Structure\n\n```\npassport/\n├── lib/                      # TypeScript source files\n│   ├── constants/            # Passport module constants\n│   ├── interfaces/           # Interfaces for module options and tokens\n│   ├── utils/                # Utility functions (Base64, Crypto)\n│   ├── passport.module.ts    # Main NestJS Passport module\n│   ├── passport.providers.ts # Module configuration providers\n│   └── passport.service.ts   # Service for token generation and verification\n└── dist/                     # Compiled JavaScript (after build)\n```\n\n---\n\n## 🛠️ Development\n\n### Prerequisites\n\n- **Node.js**: >= 16.0.0\n- **TypeScript**: ^5.9.3\n\n### Building the Package\n\n```bash\n# Install dependencies\nnpm install\n# или\npnpm install\n# или\nbun install\n\n# Build TypeScript\nnpm run build\n```\n\n---\n\n## 📝 License\n\nISC © [TeaCoder](mailto:admin@teacoder.ru) & [Ilnaz Mingaleev](mailto:development@teamkaif.com)\n\n---\n\n## 👨‍💻 Authors\n\n**TeaCoder (Vadim)**\n\n- Email: [admin@teacoder.ru](mailto:admin@teacoder.ru)\n\n**Ilnaz Mingaleev**\n\n- Email: [development@teamkaif.com](mailto:development@teamkaif.com)\n\n---\n\n<div align=\"center\">\n\n**Made with ❤️ for the 3D OUTLET project (private repo)**  \nInternal use only.\n\n</div>\n","readmeFilename":"README.md","_rev":"1-5efcde793199b7c8375ebb1ba98b9bdf"}