@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.
- package/dist/auth.module.d.ts.map +1 -1
- package/dist/auth.module.js +29 -14
- package/dist/auth.module.js.map +1 -1
- package/dist/factories/storage-adapter.factory.d.ts.map +1 -1
- package/dist/factories/storage-adapter.factory.js +204 -63
- package/dist/factories/storage-adapter.factory.js.map +1 -1
- package/dist/guards/auth.guard.d.ts +3 -4
- package/dist/guards/auth.guard.d.ts.map +1 -1
- package/dist/guards/auth.guard.js +49 -60
- package/dist/guards/auth.guard.js.map +1 -1
- package/dist/guards/nauth-context.guard.d.ts +44 -0
- package/dist/guards/nauth-context.guard.d.ts.map +1 -0
- package/dist/guards/nauth-context.guard.js +140 -0
- package/dist/guards/nauth-context.guard.js.map +1 -0
- package/dist/index.d.ts +2 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +5 -3
- package/dist/index.js.map +1 -1
- package/dist/interceptors/cookie-token.interceptor.d.ts +3 -7
- package/dist/interceptors/cookie-token.interceptor.d.ts.map +1 -1
- package/dist/interceptors/cookie-token.interceptor.js +25 -139
- package/dist/interceptors/cookie-token.interceptor.js.map +1 -1
- package/dist/interceptors/index.d.ts +1 -1
- package/dist/interceptors/index.d.ts.map +1 -1
- package/dist/interceptors/index.js +1 -1
- package/dist/interceptors/index.js.map +1 -1
- package/dist/interceptors/nauth-context.interceptor.d.ts +27 -0
- package/dist/interceptors/nauth-context.interceptor.d.ts.map +1 -0
- package/dist/interceptors/nauth-context.interceptor.js +64 -0
- package/dist/interceptors/nauth-context.interceptor.js.map +1 -0
- package/dist/services/token-delivery-http.service.d.ts +68 -0
- package/dist/services/token-delivery-http.service.d.ts.map +1 -0
- package/dist/services/token-delivery-http.service.js +194 -0
- package/dist/services/token-delivery-http.service.js.map +1 -0
- package/package.json +2 -2
- package/dist/interceptors/client-info.interceptor.d.ts +0 -50
- package/dist/interceptors/client-info.interceptor.d.ts.map +0 -1
- package/dist/interceptors/client-info.interceptor.js +0 -196
- 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.
|
|
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.
|
|
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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"}
|