@vynelix/nestjs-multi-auth 0.0.2 → 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +95 -21
- package/bin/cli.js +8 -8
- package/dist/auth/guards/optional-auth.guard.js +1 -1
- package/dist/auth/guards/optional-auth.guard.js.map +1 -1
- package/dist/auth/strategies/local-auth.strategy.js +1 -1
- package/dist/auth/strategies/local-auth.strategy.js.map +1 -1
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/package.json +23 -5
package/README.md
CHANGED
|
@@ -21,6 +21,7 @@ A flexible, decoupled, and production-ready authentication library for NestJS ap
|
|
|
21
21
|
- **Token Rotation**: Built-in `/refresh` and `/logout` endpoints with automatic token rotation.
|
|
22
22
|
- **Session Tracking**: Tracks IP and User Agent for basic session security.
|
|
23
23
|
- **Built-in Rate Limiting**: Configurable throttling on all auth endpoints via `@nestjs/throttler`.
|
|
24
|
+
- **Event-Driven Hooks**: Decoupled, reactive workflows using `@nestjs/event-emitter` (Optional).
|
|
24
25
|
- **Account Management**: Built-in endpoints for viewing and deleting auth methods or entire accounts.
|
|
25
26
|
- **Production Ready**: 10/10 code quality rating with standardized security patterns (e.g., Node.js built-in `crypto` for secure UUID generation).
|
|
26
27
|
|
|
@@ -56,6 +57,12 @@ Ensure you have the required peer dependencies installed in your NestJS project:
|
|
|
56
57
|
npm install @nestjs/passport @nestjs/jwt passport passport-jwt class-validator bcrypt typeorm
|
|
57
58
|
```
|
|
58
59
|
|
|
60
|
+
#### Optional Dependencies
|
|
61
|
+
If you want to use the local event system:
|
|
62
|
+
```bash
|
|
63
|
+
npm install @nestjs/event-emitter
|
|
64
|
+
```
|
|
65
|
+
|
|
59
66
|
---
|
|
60
67
|
|
|
61
68
|
## Quick Start
|
|
@@ -538,18 +545,18 @@ The library automatically mounts the following endpoints under the `/auth` prefi
|
|
|
538
545
|
|
|
539
546
|
| Method | Endpoint | Auth Required | Payload | Description |
|
|
540
547
|
|--------|----------|:---:|:---|-------------|
|
|
541
|
-
| `POST` | `/auth/signup` |
|
|
542
|
-
| `POST` | `/auth/signin` |
|
|
543
|
-
| `POST` | `/auth/verify` |
|
|
544
|
-
| `POST` | `/auth/resend-verification` |
|
|
545
|
-
| `POST` | `/auth/forgot-password` |
|
|
546
|
-
| `POST` | `/auth/reset-password` |
|
|
548
|
+
| `POST` | `/auth/signup` | - | `SignupDto` | Register a new identity. |
|
|
549
|
+
| `POST` | `/auth/signin` | - | `LoginDto` | Authenticate and receive tokens. |
|
|
550
|
+
| `POST` | `/auth/verify` | - | `VerifyDto` | Submit an OTP to complete verification. |
|
|
551
|
+
| `POST` | `/auth/resend-verification` | - | `ResendVerificationDto` | Resend the OTP code. |
|
|
552
|
+
| `POST` | `/auth/forgot-password` | - | `ForgotPasswordDto` | Request a password reset OTP via email/phone/username. |
|
|
553
|
+
| `POST` | `/auth/reset-password` | - | `ResetPasswordDto` | Reset password using the OTP code. |
|
|
547
554
|
| `PATCH` | `/auth/password` | ✅ | `UpdatePasswordDto` | Update password for the current authenticated session. |
|
|
548
|
-
| `POST` | `/auth/secure-account?uid=` |
|
|
549
|
-
| `POST` | `/auth/magic-link` |
|
|
550
|
-
| `GET` | `/auth/magic-callback?token=` |
|
|
551
|
-
| `POST` | `/auth/refresh` |
|
|
552
|
-
| `POST` | `/auth/logout` |
|
|
555
|
+
| `POST` | `/auth/secure-account?uid=` | - | `SecureAccountDto` | Lock account via a one-click security email link. |
|
|
556
|
+
| `POST` | `/auth/magic-link` | - | `MagicLinkRequestDto` | Request a magic login link for an email address. |
|
|
557
|
+
| `GET` | `/auth/magic-callback?token=` | - | — | Verify the magic link token and issue session tokens. |
|
|
558
|
+
| `POST` | `/auth/refresh` | - | `RefreshTokenDto` | Rotate the access token using a refresh token. |
|
|
559
|
+
| `POST` | `/auth/logout` | - | `RefreshTokenDto` | Invalidate the current session. |
|
|
553
560
|
| `POST` | `/auth/link` | ✅ | `SignupDto` | Link a new auth method to the current account. |
|
|
554
561
|
| `POST` | `/auth/mfa/enroll` | ✅ | `EnrollMfaDto` | Begin TOTP MFA enrollment. |
|
|
555
562
|
| `POST` | `/auth/mfa/activate` | ✅ | `ActivateMfaDto` | Confirm TOTP setup with a live code. |
|
|
@@ -571,12 +578,12 @@ Used for both registration (`/auth/signup`) and authentication (`/auth/signin`).
|
|
|
571
578
|
| Field | Type | Required | Description |
|
|
572
579
|
|---|---|---|---|
|
|
573
580
|
| `method` | `AuthStrategy` | ✅ | The authentication strategy (e.g., `EMAIL`, `PHONE`, `GOOGLE`). |
|
|
574
|
-
| `provider` | `OAuthProviderType` |
|
|
575
|
-
| `email` | `string` |
|
|
576
|
-
| `phone` | `string` |
|
|
577
|
-
| `username` | `string` |
|
|
578
|
-
| `password` | `string` |
|
|
579
|
-
| `token` | `string` |
|
|
581
|
+
| `provider` | `OAuthProviderType` | - | Required if `method` is `OAUTH` or a social strategy. |
|
|
582
|
+
| `email` | `string` | - | Required if `method` is `EMAIL`. |
|
|
583
|
+
| `phone` | `string` | - | Required if `method` is `PHONE`. |
|
|
584
|
+
| `username` | `string` | - | Required if `method` is `USERNAME`. |
|
|
585
|
+
| `password` | `string` | - | User's password (min 6 chars). |
|
|
586
|
+
| `token` | `string` | - | OAuth token or verification token for automated flows. |
|
|
580
587
|
|
|
581
588
|
### `VerifyDto`
|
|
582
589
|
Used to verify an identity with a one-time code (`/auth/verify`).
|
|
@@ -598,9 +605,9 @@ Used to initiate a password reset (`/auth/forgot-password`).
|
|
|
598
605
|
|
|
599
606
|
| Field | Type | Required | Description |
|
|
600
607
|
|---|---|---|---|
|
|
601
|
-
| `email` | `string` |
|
|
602
|
-
| `phone` | `string` |
|
|
603
|
-
| `username` | `string` |
|
|
608
|
+
| `email` | `string` | - | Email address of the account. |
|
|
609
|
+
| `phone` | `string` | - | Phone number of the account. |
|
|
610
|
+
| `username` | `string` | - | Username of the account. |
|
|
604
611
|
|
|
605
612
|
> At least one of `email`, `phone`, or `username` must be provided.
|
|
606
613
|
|
|
@@ -640,7 +647,7 @@ Used to rotate tokens or logout (`/auth/refresh`, `/auth/logout`).
|
|
|
640
647
|
|
|
641
648
|
| Field | Type | Required | Description |
|
|
642
649
|
|---|---|---|---|
|
|
643
|
-
| `refreshToken` | `string` |
|
|
650
|
+
| `refreshToken` | `string` | - | The refresh token. Required if not using HTTP-only cookies. |
|
|
644
651
|
|
|
645
652
|
### `EnrollMfaDto`
|
|
646
653
|
Used to start MFA enrollment (`/auth/mfa/enroll`).
|
|
@@ -696,6 +703,73 @@ How tokens are delivered to and sent from the client.
|
|
|
696
703
|
|
|
697
704
|
---
|
|
698
705
|
|
|
706
|
+
## Event Hooks
|
|
707
|
+
|
|
708
|
+
The library emits events for all major authentication actions using `@nestjs/event-emitter`. This allows you to build decoupled, reactive logic such as:
|
|
709
|
+
- Sending a welcome email after signup.
|
|
710
|
+
- Logging login attempts.
|
|
711
|
+
- Invalidating external caches on logout.
|
|
712
|
+
|
|
713
|
+
### 1. Enable Events
|
|
714
|
+
First, ensure you have `@nestjs/event-emitter` installed and registered in your root `AppModule`:
|
|
715
|
+
|
|
716
|
+
```typescript
|
|
717
|
+
import { EventEmitterModule } from '@nestjs/event-emitter';
|
|
718
|
+
|
|
719
|
+
@Module({
|
|
720
|
+
imports: [
|
|
721
|
+
EventEmitterModule.forRoot(),
|
|
722
|
+
AuthModule.register({ ... }),
|
|
723
|
+
],
|
|
724
|
+
})
|
|
725
|
+
export class AppModule {}
|
|
726
|
+
```
|
|
727
|
+
|
|
728
|
+
### 2. Listen for Events
|
|
729
|
+
Use the `@OnEvent()` decorator with the `AuthEvents` enum to handle specific actions:
|
|
730
|
+
|
|
731
|
+
```typescript
|
|
732
|
+
import { OnEvent } from '@nestjs/event-emitter';
|
|
733
|
+
import { AuthEvents } from 'nestjs-multi-auth';
|
|
734
|
+
|
|
735
|
+
@Injectable()
|
|
736
|
+
export class NotificationService {
|
|
737
|
+
@OnEvent(AuthEvents.SIGNUP)
|
|
738
|
+
async handleUserSignup(payload: any) {
|
|
739
|
+
// payload = { uid, method, email/phone/username }
|
|
740
|
+
console.log(`User ${payload.uid} signed up via ${payload.method}`);
|
|
741
|
+
}
|
|
742
|
+
|
|
743
|
+
@OnEvent(AuthEvents.LOGIN)
|
|
744
|
+
async handleUserLogin(payload: any) {
|
|
745
|
+
// payload = { uid, sessionId, method }
|
|
746
|
+
console.log(`User ${payload.uid} logged in!`);
|
|
747
|
+
}
|
|
748
|
+
}
|
|
749
|
+
```
|
|
750
|
+
|
|
751
|
+
### Available Events
|
|
752
|
+
|
|
753
|
+
| Event | Payload | Triggered When |
|
|
754
|
+
|-------|---------|----------------|
|
|
755
|
+
| `auth.signup` | `{ uid, method, ...identifier }` | A new account is successfully created. |
|
|
756
|
+
| `auth.login` | `{ uid, sessionId, method }` | A user successfully authenticates. |
|
|
757
|
+
| `auth.logout` | `{ uid, sessionId }` | A session is invalidated. |
|
|
758
|
+
| `auth.verify.request` | `{ uid, type, to }` | A verification code is sent. |
|
|
759
|
+
| `auth.verify.success` | `{ uid }` | A code is successfully confirmed. |
|
|
760
|
+
| `auth.mfa.enroll` | `{ uid, type }` | MFA enrollment begins. |
|
|
761
|
+
| `auth.mfa.activate` | `{ uid, type }` | MFA is fully enabled. |
|
|
762
|
+
| `auth.password.forgot` | `{ uid }` | Password reset is requested. |
|
|
763
|
+
| `auth.password.reset` | `{ uid }` | Password is changed via OTP. |
|
|
764
|
+
| `auth.password.update` | `{ uid }` | Password is changed via PATCH. |
|
|
765
|
+
| `auth.account.secure` | `{ uid }` | Account is locked via security link. |
|
|
766
|
+
| `auth.account.delete` | `{ uid }` | Entire account is deleted. |
|
|
767
|
+
|
|
768
|
+
> [!TIP]
|
|
769
|
+
> The event system is completely optional. If you don't register `EventEmitterModule`, the library will skip event emission without throwing errors.
|
|
770
|
+
|
|
771
|
+
---
|
|
772
|
+
|
|
699
773
|
## Configuration Reference
|
|
700
774
|
|
|
701
775
|
All options for `AuthModule.register()` / `AuthModule.forRootAsync()`:
|
package/bin/cli.js
CHANGED
|
@@ -12,7 +12,7 @@ program
|
|
|
12
12
|
.version('1.0.0');
|
|
13
13
|
|
|
14
14
|
|
|
15
|
-
//
|
|
15
|
+
// Resolve DataSource path
|
|
16
16
|
function resolveDataSource() {
|
|
17
17
|
const cwd = process.cwd();
|
|
18
18
|
|
|
@@ -37,7 +37,7 @@ function resolveDataSource() {
|
|
|
37
37
|
}
|
|
38
38
|
|
|
39
39
|
|
|
40
|
-
//
|
|
40
|
+
// Extract or create DataSource
|
|
41
41
|
function extractDataSource(exported) {
|
|
42
42
|
const { DataSource } = require('typeorm');
|
|
43
43
|
|
|
@@ -45,7 +45,7 @@ function extractDataSource(exported) {
|
|
|
45
45
|
throw new Error('No exports found in data-source file');
|
|
46
46
|
}
|
|
47
47
|
|
|
48
|
-
//
|
|
48
|
+
// Already a DataSource instance
|
|
49
49
|
if (exported.AppDataSource instanceof DataSource) {
|
|
50
50
|
return exported.AppDataSource;
|
|
51
51
|
}
|
|
@@ -58,7 +58,7 @@ function extractDataSource(exported) {
|
|
|
58
58
|
return exported.default;
|
|
59
59
|
}
|
|
60
60
|
|
|
61
|
-
//
|
|
61
|
+
// Config object → wrap it
|
|
62
62
|
const config =
|
|
63
63
|
exported.default ||
|
|
64
64
|
exported.databaseConfig ||
|
|
@@ -68,7 +68,7 @@ function extractDataSource(exported) {
|
|
|
68
68
|
}
|
|
69
69
|
|
|
70
70
|
|
|
71
|
-
//
|
|
71
|
+
// Load DataSource (TS + JS support)
|
|
72
72
|
async function loadDataSource() {
|
|
73
73
|
const dataSourcePath = resolveDataSource();
|
|
74
74
|
|
|
@@ -90,7 +90,7 @@ async function loadDataSource() {
|
|
|
90
90
|
}
|
|
91
91
|
|
|
92
92
|
|
|
93
|
-
//
|
|
93
|
+
// Shared runner
|
|
94
94
|
async function runWithDataSource(fn) {
|
|
95
95
|
const dataSource = await loadDataSource();
|
|
96
96
|
|
|
@@ -104,7 +104,7 @@ async function runWithDataSource(fn) {
|
|
|
104
104
|
}
|
|
105
105
|
|
|
106
106
|
|
|
107
|
-
//
|
|
107
|
+
// MIGRATE COMMAND
|
|
108
108
|
program
|
|
109
109
|
.command('migrate')
|
|
110
110
|
.description('Run auth migrations')
|
|
@@ -126,7 +126,7 @@ program
|
|
|
126
126
|
});
|
|
127
127
|
|
|
128
128
|
|
|
129
|
-
//
|
|
129
|
+
// DOCTOR COMMAND
|
|
130
130
|
program
|
|
131
131
|
.command('doctor')
|
|
132
132
|
.description('Check auth schema status')
|
|
@@ -22,7 +22,7 @@ let OptionalAuthGuard = OptionalAuthGuard_1 = class OptionalAuthGuard extends (0
|
|
|
22
22
|
this.logger.debug(`Authorization header: ${authHeader || 'none'}`);
|
|
23
23
|
if (!authHeader) {
|
|
24
24
|
this.logger.debug('No authorization header, skipping JWT check');
|
|
25
|
-
req.user = null; //
|
|
25
|
+
req.user = null; // set anonymous user
|
|
26
26
|
return true;
|
|
27
27
|
}
|
|
28
28
|
// fallback to normal AuthGuard behavior
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"optional-auth.guard.js","sourceRoot":"","sources":["../../../src/auth/guards/optional-auth.guard.ts"],"names":[],"mappings":";;;;;;;;;;AAAA,kCAAkC;AAClC,2CAAsE;AACtE,+CAA6C;AAGtC,IAAM,iBAAiB,yBAAvB,MAAM,iBAAkB,SAAQ,IAAA,oBAAS,EAAC,KAAK,CAAC;IAAhD;;QACY,WAAM,GAAG,IAAI,eAAM,CAAC,mBAAiB,CAAC,IAAI,CAAC,CAAC;IA4B/D,CAAC;IA1BC,KAAK,CAAC,WAAW,CAAC,OAAyB;QACzC,MAAM,GAAG,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC,UAAU,EAAE,CAAC;QAChD,MAAM,UAAU,GAAG,GAAG,CAAC,OAAO,CAAC,eAAe,CAAC,CAAC;QAEhD,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,yBAAyB,UAAU,IAAI,MAAM,EAAE,CAAC,CAAC;QAEnE,IAAI,CAAC,UAAU,EAAE,CAAC;YAChB,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,6CAA6C,CAAC,CAAC;YACjE,GAAG,CAAC,IAAI,GAAG,IAAI,CAAC,CAAC,
|
|
1
|
+
{"version":3,"file":"optional-auth.guard.js","sourceRoot":"","sources":["../../../src/auth/guards/optional-auth.guard.ts"],"names":[],"mappings":";;;;;;;;;;AAAA,kCAAkC;AAClC,2CAAsE;AACtE,+CAA6C;AAGtC,IAAM,iBAAiB,yBAAvB,MAAM,iBAAkB,SAAQ,IAAA,oBAAS,EAAC,KAAK,CAAC;IAAhD;;QACY,WAAM,GAAG,IAAI,eAAM,CAAC,mBAAiB,CAAC,IAAI,CAAC,CAAC;IA4B/D,CAAC;IA1BC,KAAK,CAAC,WAAW,CAAC,OAAyB;QACzC,MAAM,GAAG,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC,UAAU,EAAE,CAAC;QAChD,MAAM,UAAU,GAAG,GAAG,CAAC,OAAO,CAAC,eAAe,CAAC,CAAC;QAEhD,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,yBAAyB,UAAU,IAAI,MAAM,EAAE,CAAC,CAAC;QAEnE,IAAI,CAAC,UAAU,EAAE,CAAC;YAChB,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,6CAA6C,CAAC,CAAC;YACjE,GAAG,CAAC,IAAI,GAAG,IAAI,CAAC,CAAC,qBAAqB;YACtC,OAAO,IAAI,CAAC;QACd,CAAC;QAED,wCAAwC;QACxC,OAAO,CAAC,MAAM,KAAK,CAAC,WAAW,CAAC,OAAO,CAAC,CAAY,CAAC;IACvD,CAAC;IAED,aAAa,CAAC,GAAQ,EAAE,IAAS,EAAE,IAAS;QAC1C,IAAI,GAAG,EAAE,CAAC;YACR,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,cAAc,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC;QAChD,CAAC;QACD,IAAI,IAAI,EAAE,CAAC;YACT,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,aAAa,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACzD,CAAC;QAED,OAAO,IAAI,IAAI,IAAI,CAAC;IACtB,CAAC;CACF,CAAA;AA7BY,8CAAiB;4BAAjB,iBAAiB;IAD7B,IAAA,mBAAU,GAAE;GACA,iBAAiB,CA6B7B"}
|
|
@@ -95,7 +95,7 @@ let LocalAuthStrategy = LocalAuthStrategy_1 = class LocalAuthStrategy {
|
|
|
95
95
|
return this.dataSource.transaction(async (manager) => {
|
|
96
96
|
const authIdentifierRepo = manager.getRepository(auth_identify_entity_1.AuthIdentifier);
|
|
97
97
|
const authRepo = manager.getRepository(auth_entity_1.Auth);
|
|
98
|
-
// 3.
|
|
98
|
+
// 3. Check uniqueness
|
|
99
99
|
const existing = await authIdentifierRepo.findOne({
|
|
100
100
|
where: { value: (0, typeorm_1.In)(identifiersToCheck) },
|
|
101
101
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"local-auth.strategy.js","sourceRoot":"","sources":["../../../src/auth/strategies/local-auth.strategy.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"local-auth.strategy.js","sourceRoot":"","sources":["../../../src/auth/strategies/local-auth.strategy.ts"],"names":[],"mappings":"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"}
|