@nauth-toolkit/nestjs 0.1.18 → 0.1.22

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.
Files changed (39) hide show
  1. package/dist/auth.module.d.ts.map +1 -1
  2. package/dist/auth.module.js +29 -14
  3. package/dist/auth.module.js.map +1 -1
  4. package/dist/factories/storage-adapter.factory.d.ts.map +1 -1
  5. package/dist/factories/storage-adapter.factory.js +204 -63
  6. package/dist/factories/storage-adapter.factory.js.map +1 -1
  7. package/dist/guards/auth.guard.d.ts +3 -4
  8. package/dist/guards/auth.guard.d.ts.map +1 -1
  9. package/dist/guards/auth.guard.js +49 -60
  10. package/dist/guards/auth.guard.js.map +1 -1
  11. package/dist/guards/nauth-context.guard.d.ts +44 -0
  12. package/dist/guards/nauth-context.guard.d.ts.map +1 -0
  13. package/dist/guards/nauth-context.guard.js +140 -0
  14. package/dist/guards/nauth-context.guard.js.map +1 -0
  15. package/dist/index.d.ts +2 -1
  16. package/dist/index.d.ts.map +1 -1
  17. package/dist/index.js +5 -3
  18. package/dist/index.js.map +1 -1
  19. package/dist/interceptors/cookie-token.interceptor.d.ts +3 -7
  20. package/dist/interceptors/cookie-token.interceptor.d.ts.map +1 -1
  21. package/dist/interceptors/cookie-token.interceptor.js +25 -139
  22. package/dist/interceptors/cookie-token.interceptor.js.map +1 -1
  23. package/dist/interceptors/index.d.ts +1 -1
  24. package/dist/interceptors/index.d.ts.map +1 -1
  25. package/dist/interceptors/index.js +1 -1
  26. package/dist/interceptors/index.js.map +1 -1
  27. package/dist/interceptors/nauth-context.interceptor.d.ts +27 -0
  28. package/dist/interceptors/nauth-context.interceptor.d.ts.map +1 -0
  29. package/dist/interceptors/nauth-context.interceptor.js +64 -0
  30. package/dist/interceptors/nauth-context.interceptor.js.map +1 -0
  31. package/dist/services/token-delivery-http.service.d.ts +68 -0
  32. package/dist/services/token-delivery-http.service.d.ts.map +1 -0
  33. package/dist/services/token-delivery-http.service.js +194 -0
  34. package/dist/services/token-delivery-http.service.js.map +1 -0
  35. package/package.json +2 -2
  36. package/dist/interceptors/client-info.interceptor.d.ts +0 -50
  37. package/dist/interceptors/client-info.interceptor.d.ts.map +0 -1
  38. package/dist/interceptors/client-info.interceptor.js +0 -196
  39. package/dist/interceptors/client-info.interceptor.js.map +0 -1
@@ -0,0 +1 @@
1
+ {"version":3,"file":"token-delivery-http.service.js","sourceRoot":"","sources":["../../src/services/token-delivery-http.service.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@nauth-toolkit/nestjs",
3
- "version": "0.1.18",
3
+ "version": "0.1.22",
4
4
  "description": "NestJS adapter for nauth-toolkit - Platform-specific integrations",
5
5
  "main": "dist/index.js",
6
6
  "types": "dist/index.d.ts",
@@ -39,7 +39,7 @@
39
39
  "typeorm": "^0.3.0"
40
40
  },
41
41
  "dependencies": {
42
- "@nauth-toolkit/core": "0.1.18"
42
+ "@nauth-toolkit/core": "0.1.22"
43
43
  },
44
44
  "devDependencies": {
45
45
  "@nestjs/common": "^11.1.8",
@@ -1,50 +0,0 @@
1
- import { NestInterceptor, ExecutionContext, CallHandler } from '@nestjs/common';
2
- import { Observable } from 'rxjs';
3
- import { NAuthConfig } from '@nauth-toolkit/core';
4
- import { GeoLocationService } from '@nauth-toolkit/core/internal';
5
- /**
6
- * Client Info Interceptor
7
- *
8
- * Automatically extracts client information (IP address, user agent, device info)
9
- * from incoming HTTP requests and stores it in async local storage (CLS).
10
- *
11
- * This interceptor runs globally when configured in AuthModule, ensuring that
12
- * all authentication services have transparent access to client metadata without
13
- * needing to pass it as parameters.
14
- *
15
- * Benefits:
16
- * - Transparent IP/user agent handling (like AWS Cognito)
17
- * - Handles proxies and load balancers automatically
18
- * - No parameters needed - services read from context automatically
19
- * - Works across async boundaries
20
- * - Type-safe and consistent
21
- *
22
- * @example
23
- * // In your controller (no IP/UA parameters needed!)
24
- * @Post('login')
25
- * async login(@Body() dto: LoginDTO) {
26
- * return this.authService.login(dto); // IP extracted internally!
27
- * }
28
- *
29
- * // In AuthService (reads from context automatically)
30
- * async login(dto: LoginDTO) {
31
- * const clientInfo = this.clientInfoService.get(); // From context!
32
- * // Use clientInfo.ipAddress, clientInfo.userAgent, etc.
33
- * }
34
- */
35
- export declare class ClientInfoInterceptor implements NestInterceptor {
36
- private readonly config?;
37
- private readonly geoLocationService?;
38
- private readonly clientInfoService;
39
- constructor(config?: NAuthConfig | undefined, geoLocationService?: GeoLocationService | undefined);
40
- intercept(context: ExecutionContext, next: CallHandler): Observable<unknown>;
41
- /**
42
- * Extract and store client information in context
43
- *
44
- * @param context - Execution context
45
- * @param next - Call handler
46
- * @returns Observable
47
- */
48
- private extractAndStoreClientInfo;
49
- }
50
- //# sourceMappingURL=client-info.interceptor.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"client-info.interceptor.d.ts","sourceRoot":"","sources":["../../src/interceptors/client-info.interceptor.ts"],"names":[],"mappings":"AAAA,OAAO,EAAc,eAAe,EAAE,gBAAgB,EAAE,WAAW,EAAoB,MAAM,gBAAgB,CAAC;AAC9G,OAAO,EAAE,UAAU,EAAY,MAAM,MAAM,CAAC;AAE5C,OAAO,EAKL,WAAW,EAEZ,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EAAE,kBAAkB,EAAE,MAAM,8BAA8B,CAAC;AAElE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6BG;AACH,qBACa,qBAAsB,YAAW,eAAe;IAMzD,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC;IAExB,OAAO,CAAC,QAAQ,CAAC,kBAAkB,CAAC;IAPtC,OAAO,CAAC,QAAQ,CAAC,iBAAiB,CAA2B;gBAK1C,MAAM,CAAC,EAAE,WAAW,YAAA,EAEpB,kBAAkB,CAAC,EAAE,kBAAkB,YAAA;IAG1D,SAAS,CAAC,OAAO,EAAE,gBAAgB,EAAE,IAAI,EAAE,WAAW,GAAG,UAAU,CAAC,OAAO,CAAC;IAa5E;;;;;;OAMG;IACH,OAAO,CAAC,yBAAyB;CAkIlC"}
@@ -1,196 +0,0 @@
1
- "use strict";
2
- var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
3
- var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
4
- if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
5
- else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
6
- return c > 3 && r && Object.defineProperty(target, key, r), r;
7
- };
8
- var __metadata = (this && this.__metadata) || function (k, v) {
9
- if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
10
- };
11
- var __param = (this && this.__param) || function (paramIndex, decorator) {
12
- return function (target, key) { decorator(target, key, paramIndex); }
13
- };
14
- Object.defineProperty(exports, "__esModule", { value: true });
15
- exports.ClientInfoInterceptor = void 0;
16
- const common_1 = require("@nestjs/common");
17
- const rxjs_1 = require("rxjs");
18
- const operators_1 = require("rxjs/operators");
19
- const core_1 = require("@nauth-toolkit/core");
20
- const internal_1 = require("@nauth-toolkit/core/internal");
21
- /**
22
- * Client Info Interceptor
23
- *
24
- * Automatically extracts client information (IP address, user agent, device info)
25
- * from incoming HTTP requests and stores it in async local storage (CLS).
26
- *
27
- * This interceptor runs globally when configured in AuthModule, ensuring that
28
- * all authentication services have transparent access to client metadata without
29
- * needing to pass it as parameters.
30
- *
31
- * Benefits:
32
- * - Transparent IP/user agent handling (like AWS Cognito)
33
- * - Handles proxies and load balancers automatically
34
- * - No parameters needed - services read from context automatically
35
- * - Works across async boundaries
36
- * - Type-safe and consistent
37
- *
38
- * @example
39
- * // In your controller (no IP/UA parameters needed!)
40
- * @Post('login')
41
- * async login(@Body() dto: LoginDTO) {
42
- * return this.authService.login(dto); // IP extracted internally!
43
- * }
44
- *
45
- * // In AuthService (reads from context automatically)
46
- * async login(dto: LoginDTO) {
47
- * const clientInfo = this.clientInfoService.get(); // From context!
48
- * // Use clientInfo.ipAddress, clientInfo.userAgent, etc.
49
- * }
50
- */
51
- let ClientInfoInterceptor = class ClientInfoInterceptor {
52
- config;
53
- geoLocationService;
54
- clientInfoService = new core_1.ClientInfoService();
55
- constructor(config, geoLocationService) {
56
- this.config = config;
57
- this.geoLocationService = geoLocationService;
58
- }
59
- intercept(context, next) {
60
- // Initialize context storage for this request (platform-agnostic)
61
- return new rxjs_1.Observable((subscriber) => {
62
- core_1.ContextStorage.run(() => {
63
- this.extractAndStoreClientInfo(context, next).subscribe({
64
- next: (value) => subscriber.next(value),
65
- error: (err) => subscriber.error(err),
66
- complete: () => subscriber.complete(),
67
- });
68
- });
69
- });
70
- }
71
- /**
72
- * Extract and store client information in context
73
- *
74
- * @param context - Execution context
75
- * @param next - Call handler
76
- * @returns Observable
77
- */
78
- extractAndStoreClientInfo(context, next) {
79
- const request = context.switchToHttp().getRequest();
80
- const response = context.switchToHttp().getResponse();
81
- // Extract client information
82
- const headers = request.headers || {};
83
- const userAgent = headers['user-agent'];
84
- const userAgentString = typeof userAgent === 'string' ? userAgent : 'unknown';
85
- // Parse user agent to extract platform and browser using ClientInfoService
86
- const parsedUA = this.clientInfoService.parseUserAgent(userAgentString);
87
- // Extract device token from cookie (web) or header (mobile)
88
- // Security: Never accept device token from request body (prevent client manipulation)
89
- const deviceTokenCookieName = this.config ? (0, core_1.getDeviceTokenCookieName)(this.config) : 'nauth_device_token';
90
- const deviceTokenCookie = request.cookies?.[deviceTokenCookieName];
91
- const deviceTokenHeader = headers['x-device-token'] || headers['X-Device-Token'];
92
- const deviceToken = (typeof deviceTokenCookie === 'string' ? deviceTokenCookie : undefined) ||
93
- (typeof deviceTokenHeader === 'string' ? deviceTokenHeader : undefined) ||
94
- (deviceTokenHeader ? String(deviceTokenHeader) : undefined);
95
- // Extract sessionId and userId from token (set by AuthGuard after validation)
96
- // sessionId and sub (userId) are strings in JWT payload, convert to number for database
97
- const sessionIdFromToken = request?.token?.sessionId;
98
- const sessionIdNumber = sessionIdFromToken ? parseInt(sessionIdFromToken, 10) : undefined;
99
- const userIdFromToken = request?.token?.sub;
100
- const userIdNumber = userIdFromToken ? parseInt(userIdFromToken, 10) : undefined;
101
- const clientInfo = {
102
- //ipAddress: extractClientIp(request),
103
- /**
104
- * In development mode, assign a random known public IP address
105
- * for better testability (to trigger geolocation flows, etc.).
106
- * In production, default to 'unknown' if IP extraction fails.
107
- */
108
- ipAddress: (0, core_1.extractClientIp)(request),
109
- // process.env.NODE_ENV === 'development'
110
- // ? [
111
- // '203.97.24.118', // Invercargill, New Zealand
112
- // '194.103.82.33', // Umeå, Sweden
113
- // '80.12.134.67', // La Rochelle, France
114
- // '124.148.98.45', // Port Hedland, Australia
115
- // '200.68.114.22', // Mar del Plata, Argentina
116
- // '213.216.200.77', // Oulu, Finland
117
- // '206.248.142.91', // Timmins, Canada
118
- // '95.43.18.140', // Plovdiv, Bulgaria
119
- // '110.164.231.162', // Surat Thani, Thailand
120
- // '190.186.7.20', // Cochabamba, Bolivia
121
- // ][Math.floor(Math.random() * 10)]
122
- // : extractClientIp(request),
123
- userAgent: userAgentString,
124
- deviceToken, // Extracted from cookie or header only
125
- // Use deviceName from request body if provided, otherwise parse from user agent
126
- deviceName: request.body?.deviceName || parsedUA.deviceName || undefined,
127
- deviceType: request.body?.deviceType || parsedUA.deviceType || undefined,
128
- platform: parsedUA.platform || undefined,
129
- browser: parsedUA.browser || undefined,
130
- // Session ID from authenticated request (set by AuthGuard after token validation)
131
- sessionId: sessionIdNumber && !isNaN(sessionIdNumber) ? sessionIdNumber : undefined,
132
- // User ID from authenticated request (set by AuthGuard after token validation)
133
- userId: userIdNumber && !isNaN(userIdNumber) ? userIdNumber : undefined,
134
- // Geolocation populated below if GeoLocationService is available
135
- ipCountry: undefined,
136
- ipCity: undefined,
137
- ipLatitude: undefined,
138
- ipLongitude: undefined,
139
- };
140
- // ============================================================================
141
- // Populate Geolocation (Optional)
142
- // ============================================================================
143
- if (this.geoLocationService && clientInfo.ipAddress) {
144
- // Use RxJS operators to await geolocation lookup
145
- // CRITICAL: Use catchError BEFORE switchMap to only catch geolocation errors,
146
- // not errors from the controller (which would cause duplicate execution)
147
- return (0, rxjs_1.from)(this.geoLocationService.getIpGeolocation(clientInfo.ipAddress)).pipe((0, operators_1.catchError)(() => {
148
- // Non-blocking: Silently fail - geolocation remains undefined
149
- // Errors are already logged by GeoLocationService
150
- // Return empty geo data to continue the request
151
- return (0, rxjs_1.of)({ country: undefined, city: undefined, latitude: undefined, longitude: undefined });
152
- }), (0, operators_1.switchMap)((geo) => {
153
- // Update clientInfo with geolocation (or undefined if lookup failed)
154
- clientInfo.ipCountry = geo.country;
155
- clientInfo.ipCity = geo.city;
156
- clientInfo.ipLatitude = geo.latitude;
157
- clientInfo.ipLongitude = geo.longitude;
158
- // Store in async local storage for transparent access
159
- core_1.ContextStorage.set('CLIENT_INFO', clientInfo);
160
- // Store response object for services to access (e.g., for clearing cookies)
161
- core_1.ContextStorage.set('HTTP_RESPONSE', response);
162
- // Also attach to request object for @ClientInfo() decorator (backward compatibility)
163
- request.clientInfo = clientInfo;
164
- // Expose current session id for observability/debugging (set by AuthGuard after validation)
165
- // This is safe metadata; tokens are never exposed. If unavailable, header is omitted.
166
- const sessionId = request?.token?.sessionId;
167
- if (sessionId && typeof response.setHeader === 'function') {
168
- response.setHeader('X-Session-Id', sessionId);
169
- }
170
- return next.handle();
171
- }));
172
- }
173
- // Store in async local storage for transparent access
174
- core_1.ContextStorage.set('CLIENT_INFO', clientInfo);
175
- // Store response object for services to access (e.g., for clearing cookies)
176
- core_1.ContextStorage.set('HTTP_RESPONSE', response);
177
- // Also attach to request object for @ClientInfo() decorator (backward compatibility)
178
- request.clientInfo = clientInfo;
179
- // Expose current session id for observability/debugging (set by AuthGuard after validation)
180
- // This is safe metadata; tokens are never exposed. If unavailable, header is omitted.
181
- const sessionId = request?.token?.sessionId;
182
- if (sessionId && typeof response.setHeader === 'function') {
183
- response.setHeader('X-Session-Id', sessionId);
184
- }
185
- return next.handle();
186
- }
187
- };
188
- exports.ClientInfoInterceptor = ClientInfoInterceptor;
189
- exports.ClientInfoInterceptor = ClientInfoInterceptor = __decorate([
190
- (0, common_1.Injectable)(),
191
- __param(0, (0, common_1.Optional)()),
192
- __param(0, (0, common_1.Inject)('NAUTH_CONFIG')),
193
- __param(1, (0, common_1.Optional)()),
194
- __metadata("design:paramtypes", [Object, internal_1.GeoLocationService])
195
- ], ClientInfoInterceptor);
196
- //# sourceMappingURL=client-info.interceptor.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"client-info.interceptor.js","sourceRoot":"","sources":["../../src/interceptors/client-info.interceptor.ts"],"names":[],"mappings":"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"}