{"_id":"@aepstore-dev/passport","_rev":"7-89d9d5333822dc718434b46857110ec8","name":"@aepstore-dev/passport","dist-tags":{"latest":"1.3.0"},"versions":{"1.0.0":{"name":"@aepstore-dev/passport","version":"1.0.0","keywords":[],"author":{"name":"torroixq","email":"cato.ixq@gmail.com"},"license":"ISC","_id":"@aepstore-dev/passport@1.0.0","maintainers":[{"name":"torroixq","email":"cato.ixq@gmail.com"}],"dist":{"shasum":"de6b9f3c21c51631426b5d588d58034f07f89fde","tarball":"https://registry.npmjs.org/@aepstore-dev/passport/-/passport-1.0.0.tgz","fileCount":27,"integrity":"sha512-P/VDbtQo0OOrDafcsEfs8MfIlFslp0HJ3fuT4meBy7t2jOPBVZg7MK3oMvkfqUx6X4T/hrmdHx8ZAbyVJ3Qhqg==","signatures":[{"sig":"MEYCIQD68x6jCVuspmfcz5JPnSxaifEdua9E5NzpLv0J6uB0YAIhAIDloXnZKb6xIsVtAD9MM+WNo13DGum7gTliWBMekhSA","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":14375},"main":"./dist/index.js","type":"commonjs","types":"./dist/index.d.ts","gitHead":"92b889b008c0644648933e31d2124f7fe5ebbbee","scripts":{"build":"tsc -p tsconfig.build.json","format":"prettier --write \"lib/**/*.ts\""},"_npmUser":{"name":"torroixq","email":"cato.ixq@gmail.com"},"_npmVersion":"10.8.2","description":"Lightweight aepstore authentication library","directories":{},"_nodeVersion":"20.19.6","dependencies":{"txjs":"^0.1.1","@nestjs/core":"^11.1.11","@nestjs/common":"^11.1.11","reflect-metadata":"^0.2.2"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"prettier":"^3.7.4","typescript":"^5.9.3","@types/node":"^25.0.3","@aepstore-dev/core":"^1.0.3"},"_npmOperationalInternal":{"tmp":"tmp/passport_1.0.0_1767749718319_0.07918916991654146","host":"s3://npm-registry-packages-npm-production"}},"1.0.1":{"name":"@aepstore-dev/passport","version":"1.0.1","keywords":[],"author":{"name":"torroixq","email":"cato.ixq@gmail.com"},"license":"ISC","_id":"@aepstore-dev/passport@1.0.1","maintainers":[{"name":"torroixq","email":"cato.ixq@gmail.com"}],"dist":{"shasum":"d9c97293a5e0429124536378a74d9bfa8b3c8397","tarball":"https://registry.npmjs.org/@aepstore-dev/passport/-/passport-1.0.1.tgz","fileCount":29,"integrity":"sha512-IkwR+m9ozj8RsGo/BgmU4UbXciq10rdu2israbVcxEbgcurGJOwzuCcofkQq9UhKYhrzjw88BGDNlvutnbOwig==","signatures":[{"sig":"MEYCIQDZdumteP1oioan8P1vzmRo2MibLco99rlkql5f89jEuQIhAIbyj+ngfaUQqSTRJxZGwwqNb8KoWuLrlPtzIGhvWF5h","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":22400},"main":"./dist/index.js","type":"commonjs","types":"./dist/index.d.ts","gitHead":"0585ae27a2dde6ae851d74871c953aaa5cf718cd","scripts":{"build":"tsc -p tsconfig.build.json","format":"prettier --write \"lib/**/*.ts\""},"_npmUser":{"name":"torroixq","email":"cato.ixq@gmail.com"},"_npmVersion":"10.8.2","description":"Lightweight aepstore authentication library","directories":{},"_nodeVersion":"20.19.6","dependencies":{"txjs":"^0.1.1","@nestjs/core":"^11.1.11","@nestjs/common":"^11.1.11","reflect-metadata":"^0.2.2"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"prettier":"^3.7.4","typescript":"^5.9.3","@types/node":"^25.0.3","@aepstore-dev/core":"^1.0.3"},"_npmOperationalInternal":{"tmp":"tmp/passport_1.0.1_1767750515179_0.7073129108145615","host":"s3://npm-registry-packages-npm-production"}},"1.1.0":{"name":"@aepstore-dev/passport","version":"1.1.0","keywords":[],"author":{"name":"torroixq","email":"cato.ixq@gmail.com"},"license":"ISC","_id":"@aepstore-dev/passport@1.1.0","maintainers":[{"name":"torroixq","email":"cato.ixq@gmail.com"}],"dist":{"shasum":"9fa198fea7def7a716171a4fde8d00f48f9a407a","tarball":"https://registry.npmjs.org/@aepstore-dev/passport/-/passport-1.1.0.tgz","fileCount":41,"integrity":"sha512-V+jzstXL6PUAWRtfXPdQt6oHwmKRp+Lzul2vBM6pIDBkIbc3cFKySThUdFNi1kxG7KqB4ICYTJXs1ZaPJiRpOg==","signatures":[{"sig":"MEUCIQDoOy13Nd0RK9WdYmrSfU9dqW2OPW52KrIiyGpVbGYOeAIgRRRYu0Ho8xs4fMPZmaEyhTWBEmrPZ0IMAkd+BIZF3eE=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":32781},"main":"./dist/index.js","type":"commonjs","types":"./dist/index.d.ts","gitHead":"feef3bcc3c0d42be86791681525b3a3eac851466","scripts":{"build":"tsc -p tsconfig.build.json","format":"prettier --write \"lib/**/*.ts\""},"_npmUser":{"name":"torroixq","email":"cato.ixq@gmail.com"},"_npmVersion":"11.11.0","description":"Lightweight aepstore authentication library — HMAC tokens, guards, decorators","directories":{},"_nodeVersion":"25.8.0","dependencies":{"@aepstore-dev/common":"^1.1.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"prettier":"^3.7.4","typescript":"^5.9.3","@types/node":"^25.0.3","@nestjs/core":"^11.1.11","@nestjs/common":"^11.1.11","@types/express":"^5.0.0","reflect-metadata":"^0.2.2","@aepstore-dev/core":"^1.0.3","@nestjs/microservices":"^11.1.11"},"peerDependencies":{"@nestjs/core":"^11.1.11","@nestjs/common":"^11.1.11","reflect-metadata":"^0.2.2","@nestjs/microservices":"^11.1.11"},"_npmOperationalInternal":{"tmp":"tmp/passport_1.1.0_1779973033059_0.584907441475587","host":"s3://npm-registry-packages-npm-production"}},"1.2.0":{"name":"@aepstore-dev/passport","version":"1.2.0","keywords":[],"author":{"name":"torroixq","email":"cato.ixq@gmail.com"},"license":"ISC","_id":"@aepstore-dev/passport@1.2.0","maintainers":[{"name":"torroixq","email":"cato.ixq@gmail.com"}],"dist":{"shasum":"6a9eb8427a7a48d575cd2c559486518ef55f5c49","tarball":"https://registry.npmjs.org/@aepstore-dev/passport/-/passport-1.2.0.tgz","fileCount":41,"integrity":"sha512-VBXUZvbVslH0VXVfBW+1aXiIvOLVhbq4hmAusrT2Mkjd1iPNWBD50fnXVHTIXyPeADAyys++gwp1RMBSc7jZBw==","signatures":[{"sig":"MEUCIHHZqVVeLZHiSTf5vlqBdzGkzISTkcteUZ3gs7XFvlOGAiEA1gY6minAqnHcuHqsuDmq8iLqEGyF0ZIK4SRn20YLTIQ=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":33997},"main":"./dist/index.js","type":"commonjs","types":"./dist/index.d.ts","gitHead":"a738bd8971e591d7bac982e1d7c297df54fdc783","scripts":{"build":"tsc -p tsconfig.build.json","format":"prettier --write \"lib/**/*.ts\""},"_npmUser":{"name":"torroixq","email":"cato.ixq@gmail.com"},"_npmVersion":"11.11.0","description":"Lightweight aepstore authentication library — HMAC tokens, guards, decorators","directories":{},"_nodeVersion":"25.8.0","dependencies":{"@aepstore-dev/common":"^1.1.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"prettier":"^3.7.4","typescript":"^5.9.3","@types/node":"^25.0.3","@nestjs/core":"^11.1.11","@nestjs/common":"^11.1.11","@types/express":"^5.0.0","reflect-metadata":"^0.2.2","@aepstore-dev/core":"^1.0.3","@nestjs/microservices":"^11.1.11"},"peerDependencies":{"@nestjs/core":"^11.1.11","@nestjs/common":"^11.1.11","reflect-metadata":"^0.2.2","@nestjs/microservices":"^11.1.11"},"_npmOperationalInternal":{"tmp":"tmp/passport_1.2.0_1780314349478_0.4774960994413162","host":"s3://npm-registry-packages-npm-production"}},"1.2.1":{"name":"@aepstore-dev/passport","version":"1.2.1","keywords":[],"author":{"name":"torroixq","email":"cato.ixq@gmail.com"},"license":"ISC","_id":"@aepstore-dev/passport@1.2.1","maintainers":[{"name":"torroixq","email":"cato.ixq@gmail.com"}],"dist":{"shasum":"c441c67a8850f01373eeb0878a8efd4a8d112c45","tarball":"https://registry.npmjs.org/@aepstore-dev/passport/-/passport-1.2.1.tgz","fileCount":41,"integrity":"sha512-2I31yBK43N0vbwSolMF3bU2G46QQfphav9EBRzfMlb/eVn8/yv0DCo5TjNO7Vq5ZJEdI5u1hH+CaEllZdO9spg==","signatures":[{"sig":"MEUCIQCea3ZcDCdnS9loLGV8IxeiE8CPXIF1I87EJRQUKDOpRgIgWfUkmdJDsh1FRbZDNqc44JvJV0xO59G4IiVhwq4bQSg=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":33835},"main":"./dist/index.js","type":"commonjs","types":"./dist/index.d.ts","gitHead":"f4b33c909f7a3fdb5edacc2fddd444ef6d0363a5","scripts":{"build":"tsc -p tsconfig.build.json","format":"prettier --write \"lib/**/*.ts\""},"_npmUser":{"name":"torroixq","email":"cato.ixq@gmail.com"},"_npmVersion":"10.9.7","description":"Lightweight aepstore authentication library — HMAC tokens, guards, decorators","directories":{},"_nodeVersion":"22.22.2","dependencies":{"@aepstore-dev/common":"^1.1.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"prettier":"^3.7.4","typescript":"^5.9.3","@types/node":"^25.0.3","@nestjs/core":"^11.1.11","@nestjs/common":"^11.1.11","@types/express":"^5.0.0","reflect-metadata":"^0.2.2","@aepstore-dev/core":"^1.0.3","@nestjs/microservices":"^11.1.11"},"peerDependencies":{"@nestjs/core":"^11.1.11","@nestjs/common":"^11.1.11","reflect-metadata":"^0.2.2","@nestjs/microservices":"^11.1.11"},"_npmOperationalInternal":{"tmp":"tmp/passport_1.2.1_1781730331357_0.1954281317492097","host":"s3://npm-registry-packages-npm-production"}},"1.2.2":{"name":"@aepstore-dev/passport","version":"1.2.2","keywords":[],"author":{"name":"torroixq","email":"cato.ixq@gmail.com"},"license":"ISC","_id":"@aepstore-dev/passport@1.2.2","maintainers":[{"name":"torroixq","email":"cato.ixq@gmail.com"}],"dist":{"shasum":"4a49d592aef909ff649cc0802b9957c47e69abf6","tarball":"https://registry.npmjs.org/@aepstore-dev/passport/-/passport-1.2.2.tgz","fileCount":41,"integrity":"sha512-xEOpGoSekACm4AECx2SYFP9V++gPqsrz4hP5eOxNhKmq41pPSiwXBB425lSiuxCmmAB/5eSkoBIg9+284Y9y6Q==","signatures":[{"sig":"MEQCIDL8xYSC3wDoiF+TltnrGsQajmL+5An//MOndCipSjpAAiBLFbqIsjOW6tklJibVmtb7aLkHM2gdWw/ar3o73Vx35Q==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":33973},"main":"./dist/index.js","type":"commonjs","types":"./dist/index.d.ts","gitHead":"108f37c9a99ad7e72e471d9d535816f6b3f33b2a","scripts":{"build":"tsc -p tsconfig.build.json","format":"prettier --write \"lib/**/*.ts\""},"_npmUser":{"name":"torroixq","email":"cato.ixq@gmail.com"},"_npmVersion":"10.9.7","description":"Lightweight aepstore authentication library — HMAC tokens, guards, decorators","directories":{},"_nodeVersion":"22.22.2","dependencies":{"@aepstore-dev/common":"^1.1.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"prettier":"^3.7.4","typescript":"^5.9.3","@types/node":"^25.0.3","@nestjs/core":"^11.1.11","@nestjs/common":"^11.1.11","@types/express":"^5.0.0","reflect-metadata":"^0.2.2","@aepstore-dev/core":"^1.0.3","@nestjs/microservices":"^11.1.11"},"peerDependencies":{"@nestjs/core":"^11.1.11","@nestjs/common":"^11.1.11","reflect-metadata":"^0.2.2","@nestjs/microservices":"^11.1.11"},"_npmOperationalInternal":{"tmp":"tmp/passport_1.2.2_1781742052397_0.1350928565419569","host":"s3://npm-registry-packages-npm-production"}},"1.3.0":{"name":"@aepstore-dev/passport","version":"1.3.0","description":"Lightweight aepstore authentication library — HMAC tokens, guards, decorators","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":{"name":"torroixq","email":"cato.ixq@gmail.com"},"license":"ISC","type":"commonjs","devDependencies":{"@aepstore-dev/core":"^1.0.3","@nestjs/common":"^11.1.11","@nestjs/core":"^11.1.11","@nestjs/microservices":"^11.1.11","@types/express":"^5.0.0","@types/node":"^25.0.3","prettier":"^3.7.4","reflect-metadata":"^0.2.2","typescript":"^5.9.3"},"dependencies":{"@aepstore-dev/common":"^1.1.0"},"peerDependencies":{"@nestjs/common":"^11.1.11","@nestjs/core":"^11.1.11","@nestjs/microservices":"^11.1.11","reflect-metadata":"^0.2.2"},"_id":"@aepstore-dev/passport@1.3.0","gitHead":"108f37c9a99ad7e72e471d9d535816f6b3f33b2a","_nodeVersion":"22.22.2","_npmVersion":"10.9.7","dist":{"integrity":"sha512-8/lwrqPQWGErmKoS53kK/89lrB0oCAuAB64iO0gdSl3Vfw8aJzB3+MY8I/mb1xPVqtmiaH7M239qJ2QRh67nHA==","shasum":"7b518097a19b08e9c4a5afbb7c314f33ad202e2b","tarball":"https://registry.npmjs.org/@aepstore-dev/passport/-/passport-1.3.0.tgz","fileCount":43,"unpackedSize":37145,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCICDWMvitwCbHSQ4HVh0PDwHx/jfs77fkaAfak2mDj1LUAiEAx2wSd7l4px/JHGE6fkNV0hpxMyI299FwCSY9CL8IfOk="}]},"_npmUser":{"name":"torroixq","email":"cato.ixq@gmail.com"},"directories":{},"maintainers":[{"name":"torroixq","email":"cato.ixq@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/passport_1.3.0_1782309758292_0.6896093875442273"},"_hasShrinkwrap":false}},"time":{"created":"2026-01-07T01:35:18.223Z","modified":"2026-06-24T14:02:38.623Z","1.0.0":"2026-01-07T01:35:18.461Z","1.0.1":"2026-01-07T01:48:35.322Z","1.1.0":"2026-05-28T12:57:13.248Z","1.2.0":"2026-06-01T11:45:49.627Z","1.2.1":"2026-06-17T21:05:31.555Z","1.2.2":"2026-06-18T00:20:52.561Z","1.3.0":"2026-06-24T14:02:38.470Z"},"author":{"name":"torroixq","email":"cato.ixq@gmail.com"},"license":"ISC","keywords":[],"description":"Lightweight aepstore authentication library — HMAC tokens, guards, decorators","maintainers":[{"name":"torroixq","email":"cato.ixq@gmail.com"}],"readme":"# @aepstore-dev/passport\n\n[English Version](./README.md)\n\nЛегковесная библиотека аутентификации для экосистемы aepstore. Предоставляет NestJS модуль для генерации и валидации защищенных токенов с использованием HMAC подписи.\n\n## Установка\n\n```bash\nyarn add @aepstore-dev/passport\n```\n\n## Подключение\n\nИмпортируйте `PassportModule` в ваш корневой модуль приложения. Модуль является глобальным (`@Global()`), поэтому его достаточно подключить один раз в корневом модуле (`AppModule`).\n\n### Синхронная конфигурация\n\n```typescript\nimport { PassportModule } from '@aepstore-dev/passport'\nimport { Module } from '@nestjs/common'\n\n@Module({\n\timports: [\n\t\tPassportModule.register({\n\t\t\tsecretKey: 'your-secret-key-here'\n\t\t})\n\t]\n})\nexport class AppModule {}\n```\n\n### Асинхронная конфигурация\n\nОбычно используется для получения секретного ключа из переменных окружения (например, через `ConfigService`).\n\n```typescript\nimport { PassportModule } from '@aepstore-dev/passport'\nimport { Module } from '@nestjs/common'\nimport { ConfigModule, ConfigService } from '@nestjs/config'\n\n@Module({\n\timports: [\n\t\tConfigModule.forRoot(),\n\t\tPassportModule.registerAsync({\n\t\t\timports: [ConfigModule],\n\t\t\tinject: [ConfigService],\n\t\t\tuseFactory: (configService: ConfigService) => ({\n\t\t\t\tsecretKey: configService.getOrThrow<string>(\n\t\t\t\t\t'PASSPORT_SECRET_KEY'\n\t\t\t\t)\n\t\t\t})\n\t\t})\n\t]\n})\nexport class AppModule {}\n```\n\n## Использование\n\nВнедрите `PassportService` в ваши сервисы для работы с токенами.\n\n```typescript\nimport { PassportService } from '@aepstore-dev/passport'\nimport { Injectable, UnauthorizedException } from '@nestjs/common'\n\n@Injectable()\nexport class AuthService {\n\tconstructor(private readonly passportService: PassportService) {}\n\n\tasync signIn(user: { id: string }) {\n\t\t// Генерация токена для пользователя\n\t\t// ttl (Time To Live) указывается в секундах. Например, 3600 = 1 час.\n\t\tconst token = this.passportService.generate(user.id, 3600)\n\t\treturn { accessToken: token }\n\t}\n\n\tasync validateToken(token: string) {\n\t\t// Проверка токена\n\t\tconst result = this.passportService.verify(token)\n\n\t\tif (!result.valid) {\n\t\t\t// result.reason содержит причину ошибки: 'Invalid token format', 'Invalid signature', 'Token expired' и т.д.\n\t\t\tthrow new UnauthorizedException(`Invalid token: ${result.reason}`)\n\t\t}\n\n\t\t// Если токен валиден, result.userId будет содержать ID пользователя\n\t\treturn { userId: result.userId }\n\t}\n}\n```\n\n## API\n\n### PassportModule\n\nМетоды для регистрации модуля:\n\n- `static register(options: PassportOptions): DynamicModule`\n- `static registerAsync(options: PassportAsyncOptions): DynamicModule`\n\n### PassportOptions\n\nИнтерфейс конфигурации модуля.\n\n| Свойство    | Тип      | Описание                                |\n| ----------- | -------- | --------------------------------------- |\n| `secretKey` | `string` | Секретный ключ для HMAC-SHA256 подписи. |\n\n### PassportService\n\nОсновной сервис для работы с токенами.\n\n#### `generate(userId: string, ttl: number): string`\n\nСоздает новый подписанный токен.\n\n- **userId**: Строка идентификатора пользователя (будет закодирована в токене).\n- **ttl**: Время жизни токена в секундах.\n\nВозвращает строковый токен в формате: `userPart.iatPart.expPart.signature`.\n\n#### `verify(token: string)`\n\nПроверяет подпись и срок действия токена.\n\nВозвращает объект результата:\n\n- В случае успеха: `{ valid: true, userId: string }`\n- В случае ошибки: `{ valid: false, reason: string }`\n\nВозможные причины ошибок (`reason`):\n\n- `Invalid token format`\n- `Invalid signature`\n- `Token expired`\n- `Error` (внутренняя ошибка парсинга)\n","readmeFilename":"README.ru.md"}