@nauth-toolkit/core 0.1.28 → 0.1.29
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/dto/get-events-by-type.dto.d.ts.map +1 -1
- package/dist/dto/get-events-by-type.dto.js +55 -0
- package/dist/dto/get-events-by-type.dto.js.map +1 -1
- package/dist/dto/get-risk-assessment-history.dto.d.ts.map +1 -1
- package/dist/dto/get-risk-assessment-history.dto.js +35 -0
- package/dist/dto/get-risk-assessment-history.dto.js.map +1 -1
- package/dist/dto/get-suspicious-activity.dto.d.ts.map +1 -1
- package/dist/dto/get-suspicious-activity.dto.js +36 -0
- package/dist/dto/get-suspicious-activity.dto.js.map +1 -1
- package/dist/dto/get-user-auth-history.dto.d.ts.map +1 -1
- package/dist/dto/get-user-auth-history.dto.js +76 -0
- package/dist/dto/get-user-auth-history.dto.js.map +1 -1
- package/dist/dto/login.dto.d.ts.map +1 -1
- package/dist/dto/login.dto.js +15 -0
- package/dist/dto/login.dto.js.map +1 -1
- package/dist/dto/verify-mfa-code.dto.d.ts.map +1 -1
- package/dist/dto/verify-mfa-code.dto.js +15 -0
- package/dist/dto/verify-mfa-code.dto.js.map +1 -1
- package/dist/services/auth-audit.service.d.ts.map +1 -1
- package/dist/services/auth-audit.service.js +5 -0
- package/dist/services/auth-audit.service.js.map +1 -1
- package/dist/services/auth.service.d.ts.map +1 -1
- package/dist/services/auth.service.js +49 -0
- package/dist/services/auth.service.js.map +1 -1
- package/dist/services/email-verification.service.d.ts.map +1 -1
- package/dist/services/email-verification.service.js +5 -0
- package/dist/services/email-verification.service.js.map +1 -1
- package/dist/services/mfa.service.d.ts.map +1 -1
- package/dist/services/mfa.service.js +13 -0
- package/dist/services/mfa.service.js.map +1 -1
- package/dist/services/phone-verification.service.d.ts.map +1 -1
- package/dist/services/phone-verification.service.js +6 -0
- package/dist/services/phone-verification.service.js.map +1 -1
- package/dist/services/social-auth.service.d.ts.map +1 -1
- package/dist/services/social-auth.service.js +9 -0
- package/dist/services/social-auth.service.js.map +1 -1
- package/dist/utils/dto-validator.d.ts +113 -0
- package/dist/utils/dto-validator.d.ts.map +1 -0
- package/dist/utils/dto-validator.js +224 -0
- package/dist/utils/dto-validator.js.map +1 -0
- package/dist/utils/index.d.ts +1 -0
- package/dist/utils/index.d.ts.map +1 -1
- package/dist/utils/index.js +1 -0
- package/dist/utils/index.js.map +1 -1
- package/dist/utils/setup/init-services.d.ts.map +1 -1
- package/dist/utils/setup/init-services.js +43 -1
- package/dist/utils/setup/init-services.js.map +1 -1
- package/package.json +1 -1
|
@@ -0,0 +1,113 @@
|
|
|
1
|
+
import { type ValidationError } from 'class-validator';
|
|
2
|
+
/**
|
|
3
|
+
* Internal DTO validation marker used to avoid double-validation when adapters already validated inputs.
|
|
4
|
+
*
|
|
5
|
+
* @remarks
|
|
6
|
+
* We use Symbol.for so multiple copies (or different build outputs) can still share the same marker key.
|
|
7
|
+
* Framework adapters can mark DTOs as validated by setting this symbol on the DTO instance.
|
|
8
|
+
*
|
|
9
|
+
* @example
|
|
10
|
+
* ```typescript
|
|
11
|
+
* // In NestJS adapter after ValidationPipe runs:
|
|
12
|
+
* import { markDtoAsValidated } from '@nauth-toolkit/core/utils';
|
|
13
|
+
* markDtoAsValidated(dto);
|
|
14
|
+
* ```
|
|
15
|
+
*/
|
|
16
|
+
export declare const NAUTH_DTO_VALIDATED_MARKER: unique symbol;
|
|
17
|
+
/**
|
|
18
|
+
* Mark a DTO instance as already validated.
|
|
19
|
+
*
|
|
20
|
+
* This is useful for framework adapters (e.g., NestJS) that run validation via ValidationPipe
|
|
21
|
+
* and want to prevent core services from re-validating the same DTO.
|
|
22
|
+
*
|
|
23
|
+
* @param dto - DTO instance to mark as validated
|
|
24
|
+
*
|
|
25
|
+
* @example
|
|
26
|
+
* ```typescript
|
|
27
|
+
* // In NestJS controller after ValidationPipe:
|
|
28
|
+
* @Post('login')
|
|
29
|
+
* async login(@Body() dto: LoginDTO) {
|
|
30
|
+
* markDtoAsValidated(dto); // Prevent AuthService from re-validating
|
|
31
|
+
* return this.authService.login(dto);
|
|
32
|
+
* }
|
|
33
|
+
* ```
|
|
34
|
+
*/
|
|
35
|
+
export declare function markDtoAsValidated(dto: object): void;
|
|
36
|
+
/**
|
|
37
|
+
* Check if a DTO instance has been marked as validated.
|
|
38
|
+
*
|
|
39
|
+
* @param dto - DTO instance to check
|
|
40
|
+
* @returns True if the DTO has been marked as validated
|
|
41
|
+
*/
|
|
42
|
+
export declare function isDtoValidated(dto: object): boolean;
|
|
43
|
+
/**
|
|
44
|
+
* Convert class-validator errors into ValidationPipe-compatible format.
|
|
45
|
+
*
|
|
46
|
+
* Formats errors to match the structure that NestJS ValidationPipe produces,
|
|
47
|
+
* making it compatible with all framework adapters (NestJS, Express, Fastify, etc.).
|
|
48
|
+
*
|
|
49
|
+
* @param errors - Raw class-validator errors
|
|
50
|
+
* @returns Object mapping field names to arrays of constraint messages
|
|
51
|
+
* Format: { "fieldName": ["constraint message 1", "constraint message 2"] }
|
|
52
|
+
*
|
|
53
|
+
* @example
|
|
54
|
+
* ```typescript
|
|
55
|
+
* // Input: class-validator ValidationError[]
|
|
56
|
+
* // Output:
|
|
57
|
+
* {
|
|
58
|
+
* "email": ["email must be an email"],
|
|
59
|
+
* "password": [
|
|
60
|
+
* "password must be longer than or equal to 8 characters",
|
|
61
|
+
* "password must be a string"
|
|
62
|
+
* ],
|
|
63
|
+
* "deviceType": ["deviceType must be one of the following values: mobile, desktop, tablet"]
|
|
64
|
+
* }
|
|
65
|
+
* ```
|
|
66
|
+
*
|
|
67
|
+
* @internal
|
|
68
|
+
*/
|
|
69
|
+
export declare function formatDtoValidationErrors(errors: ValidationError[]): Record<string, string[]>;
|
|
70
|
+
/**
|
|
71
|
+
* Ensure an input value is transformed into a DTO instance and validated.
|
|
72
|
+
*
|
|
73
|
+
* @remarks
|
|
74
|
+
* This utility allows core services to be used safely outside frameworks that run DTO validation
|
|
75
|
+
* (e.g. direct usage in scripts/tests or consumer apps without Nest ValidationPipe).
|
|
76
|
+
*
|
|
77
|
+
* Adapters may mark DTOs as validated by calling `markDtoAsValidated()`, which prevents
|
|
78
|
+
* double-validation (useful when a ValidationPipe already ran).
|
|
79
|
+
*
|
|
80
|
+
* Security:
|
|
81
|
+
* - Unknown properties are stripped via whitelist to avoid persisting/logging untrusted payload keys.
|
|
82
|
+
* - Hard-fails on non-object values to prevent type confusion attacks.
|
|
83
|
+
*
|
|
84
|
+
* @param dtoClass - DTO class constructor
|
|
85
|
+
* @param input - Potentially plain input object (or already a DTO instance)
|
|
86
|
+
* @returns Validated DTO instance
|
|
87
|
+
* @throws {NAuthException} When validation fails
|
|
88
|
+
*
|
|
89
|
+
* @example
|
|
90
|
+
* ```typescript
|
|
91
|
+
* // In a service method:
|
|
92
|
+
* async login(input: unknown): Promise<AuthResponseDTO> {
|
|
93
|
+
* const dto = await ensureValidatedDto(LoginDTO, input);
|
|
94
|
+
* // dto is now guaranteed to be validated and transformed
|
|
95
|
+
* // ...
|
|
96
|
+
* }
|
|
97
|
+
* ```
|
|
98
|
+
*/
|
|
99
|
+
export declare function ensureValidatedDto<T extends object>(dtoClass: new () => T, input: unknown): Promise<T>;
|
|
100
|
+
/**
|
|
101
|
+
* Synchronous variant of {@link ensureValidatedDto}.
|
|
102
|
+
*
|
|
103
|
+
* @remarks
|
|
104
|
+
* Needed for sync methods that accept DTOs (e.g. `MFAService.hasProvider()`), so we can enforce
|
|
105
|
+
* runtime validation without making those APIs async (breaking change).
|
|
106
|
+
*
|
|
107
|
+
* @param dtoClass - DTO class constructor
|
|
108
|
+
* @param input - Potentially plain input object (or already a DTO instance)
|
|
109
|
+
* @returns Validated DTO instance
|
|
110
|
+
* @throws {NAuthException} When validation fails
|
|
111
|
+
*/
|
|
112
|
+
export declare function ensureValidatedDtoSync<T extends object>(dtoClass: new () => T, input: unknown): T;
|
|
113
|
+
//# sourceMappingURL=dto-validator.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dto-validator.d.ts","sourceRoot":"","sources":["../../src/utils/dto-validator.ts"],"names":[],"mappings":"AAAA,OAAO,EAA0B,KAAK,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAK/E;;;;;;;;;;;;;GAaG;AACH,eAAO,MAAM,0BAA0B,eAAoC,CAAC;AAE5E;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAgB,kBAAkB,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAOpD;AAED;;;;;GAKG;AACH,wBAAgB,cAAc,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAEnD;AAED;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AACH,wBAAgB,yBAAyB,CAAC,MAAM,EAAE,eAAe,EAAE,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,CA6B7F;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AACH,wBAAsB,kBAAkB,CAAC,CAAC,SAAS,MAAM,EAAE,QAAQ,EAAE,UAAU,CAAC,EAAE,KAAK,EAAE,OAAO,GAAG,OAAO,CAAC,CAAC,CAAC,CA6C5G;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,sBAAsB,CAAC,CAAC,SAAS,MAAM,EAAE,QAAQ,EAAE,UAAU,CAAC,EAAE,KAAK,EAAE,OAAO,GAAG,CAAC,CA+BjG"}
|
|
@@ -0,0 +1,224 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.NAUTH_DTO_VALIDATED_MARKER = void 0;
|
|
4
|
+
exports.markDtoAsValidated = markDtoAsValidated;
|
|
5
|
+
exports.isDtoValidated = isDtoValidated;
|
|
6
|
+
exports.formatDtoValidationErrors = formatDtoValidationErrors;
|
|
7
|
+
exports.ensureValidatedDto = ensureValidatedDto;
|
|
8
|
+
exports.ensureValidatedDtoSync = ensureValidatedDtoSync;
|
|
9
|
+
const class_validator_1 = require("class-validator");
|
|
10
|
+
const class_transformer_1 = require("class-transformer");
|
|
11
|
+
const nauth_exception_1 = require("../exceptions/nauth.exception");
|
|
12
|
+
const error_codes_enum_1 = require("../enums/error-codes.enum");
|
|
13
|
+
/**
|
|
14
|
+
* Internal DTO validation marker used to avoid double-validation when adapters already validated inputs.
|
|
15
|
+
*
|
|
16
|
+
* @remarks
|
|
17
|
+
* We use Symbol.for so multiple copies (or different build outputs) can still share the same marker key.
|
|
18
|
+
* Framework adapters can mark DTOs as validated by setting this symbol on the DTO instance.
|
|
19
|
+
*
|
|
20
|
+
* @example
|
|
21
|
+
* ```typescript
|
|
22
|
+
* // In NestJS adapter after ValidationPipe runs:
|
|
23
|
+
* import { markDtoAsValidated } from '@nauth-toolkit/core/utils';
|
|
24
|
+
* markDtoAsValidated(dto);
|
|
25
|
+
* ```
|
|
26
|
+
*/
|
|
27
|
+
exports.NAUTH_DTO_VALIDATED_MARKER = Symbol.for('nauth.dto.validated');
|
|
28
|
+
/**
|
|
29
|
+
* Mark a DTO instance as already validated.
|
|
30
|
+
*
|
|
31
|
+
* This is useful for framework adapters (e.g., NestJS) that run validation via ValidationPipe
|
|
32
|
+
* and want to prevent core services from re-validating the same DTO.
|
|
33
|
+
*
|
|
34
|
+
* @param dto - DTO instance to mark as validated
|
|
35
|
+
*
|
|
36
|
+
* @example
|
|
37
|
+
* ```typescript
|
|
38
|
+
* // In NestJS controller after ValidationPipe:
|
|
39
|
+
* @Post('login')
|
|
40
|
+
* async login(@Body() dto: LoginDTO) {
|
|
41
|
+
* markDtoAsValidated(dto); // Prevent AuthService from re-validating
|
|
42
|
+
* return this.authService.login(dto);
|
|
43
|
+
* }
|
|
44
|
+
* ```
|
|
45
|
+
*/
|
|
46
|
+
function markDtoAsValidated(dto) {
|
|
47
|
+
Object.defineProperty(dto, exports.NAUTH_DTO_VALIDATED_MARKER, {
|
|
48
|
+
value: true,
|
|
49
|
+
enumerable: false,
|
|
50
|
+
configurable: false,
|
|
51
|
+
writable: false,
|
|
52
|
+
});
|
|
53
|
+
}
|
|
54
|
+
/**
|
|
55
|
+
* Check if a DTO instance has been marked as validated.
|
|
56
|
+
*
|
|
57
|
+
* @param dto - DTO instance to check
|
|
58
|
+
* @returns True if the DTO has been marked as validated
|
|
59
|
+
*/
|
|
60
|
+
function isDtoValidated(dto) {
|
|
61
|
+
return dto[exports.NAUTH_DTO_VALIDATED_MARKER] === true;
|
|
62
|
+
}
|
|
63
|
+
/**
|
|
64
|
+
* Convert class-validator errors into ValidationPipe-compatible format.
|
|
65
|
+
*
|
|
66
|
+
* Formats errors to match the structure that NestJS ValidationPipe produces,
|
|
67
|
+
* making it compatible with all framework adapters (NestJS, Express, Fastify, etc.).
|
|
68
|
+
*
|
|
69
|
+
* @param errors - Raw class-validator errors
|
|
70
|
+
* @returns Object mapping field names to arrays of constraint messages
|
|
71
|
+
* Format: { "fieldName": ["constraint message 1", "constraint message 2"] }
|
|
72
|
+
*
|
|
73
|
+
* @example
|
|
74
|
+
* ```typescript
|
|
75
|
+
* // Input: class-validator ValidationError[]
|
|
76
|
+
* // Output:
|
|
77
|
+
* {
|
|
78
|
+
* "email": ["email must be an email"],
|
|
79
|
+
* "password": [
|
|
80
|
+
* "password must be longer than or equal to 8 characters",
|
|
81
|
+
* "password must be a string"
|
|
82
|
+
* ],
|
|
83
|
+
* "deviceType": ["deviceType must be one of the following values: mobile, desktop, tablet"]
|
|
84
|
+
* }
|
|
85
|
+
* ```
|
|
86
|
+
*
|
|
87
|
+
* @internal
|
|
88
|
+
*/
|
|
89
|
+
function formatDtoValidationErrors(errors) {
|
|
90
|
+
const result = {};
|
|
91
|
+
const walk = (prefix, err) => {
|
|
92
|
+
const field = prefix ? `${prefix}.${err.property}` : err.property;
|
|
93
|
+
if (err.constraints && Object.keys(err.constraints).length > 0) {
|
|
94
|
+
// Extract all constraint messages for this field
|
|
95
|
+
const messages = Object.values(err.constraints);
|
|
96
|
+
if (result[field]) {
|
|
97
|
+
// If field already has errors, append to existing array
|
|
98
|
+
result[field].push(...messages);
|
|
99
|
+
}
|
|
100
|
+
else {
|
|
101
|
+
result[field] = [...messages];
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
if (err.children && err.children.length > 0) {
|
|
105
|
+
for (const child of err.children) {
|
|
106
|
+
walk(field, child);
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
};
|
|
110
|
+
for (const error of errors) {
|
|
111
|
+
walk('', error);
|
|
112
|
+
}
|
|
113
|
+
return result;
|
|
114
|
+
}
|
|
115
|
+
/**
|
|
116
|
+
* Ensure an input value is transformed into a DTO instance and validated.
|
|
117
|
+
*
|
|
118
|
+
* @remarks
|
|
119
|
+
* This utility allows core services to be used safely outside frameworks that run DTO validation
|
|
120
|
+
* (e.g. direct usage in scripts/tests or consumer apps without Nest ValidationPipe).
|
|
121
|
+
*
|
|
122
|
+
* Adapters may mark DTOs as validated by calling `markDtoAsValidated()`, which prevents
|
|
123
|
+
* double-validation (useful when a ValidationPipe already ran).
|
|
124
|
+
*
|
|
125
|
+
* Security:
|
|
126
|
+
* - Unknown properties are stripped via whitelist to avoid persisting/logging untrusted payload keys.
|
|
127
|
+
* - Hard-fails on non-object values to prevent type confusion attacks.
|
|
128
|
+
*
|
|
129
|
+
* @param dtoClass - DTO class constructor
|
|
130
|
+
* @param input - Potentially plain input object (or already a DTO instance)
|
|
131
|
+
* @returns Validated DTO instance
|
|
132
|
+
* @throws {NAuthException} When validation fails
|
|
133
|
+
*
|
|
134
|
+
* @example
|
|
135
|
+
* ```typescript
|
|
136
|
+
* // In a service method:
|
|
137
|
+
* async login(input: unknown): Promise<AuthResponseDTO> {
|
|
138
|
+
* const dto = await ensureValidatedDto(LoginDTO, input);
|
|
139
|
+
* // dto is now guaranteed to be validated and transformed
|
|
140
|
+
* // ...
|
|
141
|
+
* }
|
|
142
|
+
* ```
|
|
143
|
+
*/
|
|
144
|
+
async function ensureValidatedDto(dtoClass, input) {
|
|
145
|
+
// ============================================================================
|
|
146
|
+
// Transform plain input into a DTO instance (ensures @Transform decorators run)
|
|
147
|
+
// ============================================================================
|
|
148
|
+
const dto = input instanceof dtoClass ? input : (0, class_transformer_1.plainToInstance)(dtoClass, input);
|
|
149
|
+
// ============================================================================
|
|
150
|
+
// Skip re-validation if an adapter already validated this DTO
|
|
151
|
+
// ============================================================================
|
|
152
|
+
if (isDtoValidated(dto)) {
|
|
153
|
+
return dto;
|
|
154
|
+
}
|
|
155
|
+
// ============================================================================
|
|
156
|
+
// Validate DTO (runtime enforcement of decorators)
|
|
157
|
+
// ============================================================================
|
|
158
|
+
const errors = await (0, class_validator_1.validate)(dto, {
|
|
159
|
+
// WHY: Remove unknown keys to prevent untrusted payload fields from leaking into persistence/logs.
|
|
160
|
+
whitelist: true,
|
|
161
|
+
// WHY: Keep backward compatibility by stripping rather than rejecting unknown keys.
|
|
162
|
+
forbidNonWhitelisted: false,
|
|
163
|
+
// WHY: Hard-fail on non-object / unknown values (e.g., passing a number or array).
|
|
164
|
+
forbidUnknownValues: true,
|
|
165
|
+
});
|
|
166
|
+
if (errors.length > 0) {
|
|
167
|
+
// ============================================================================
|
|
168
|
+
// Platform-agnostic validation error contract
|
|
169
|
+
// ============================================================================
|
|
170
|
+
// Keep `message` a string for consistent UX across clients (Angular/React/etc.),
|
|
171
|
+
// and place structured field errors under details.validationErrors.
|
|
172
|
+
//
|
|
173
|
+
// This avoids breaking consumers that assume `message` is a string while still
|
|
174
|
+
// providing ValidationPipe-like field-level detail.
|
|
175
|
+
const validationErrors = formatDtoValidationErrors(errors);
|
|
176
|
+
throw new nauth_exception_1.NAuthException(error_codes_enum_1.AuthErrorCode.VALIDATION_FAILED, 'Validation failed', {
|
|
177
|
+
validationErrors,
|
|
178
|
+
});
|
|
179
|
+
}
|
|
180
|
+
// Mark validated so downstream calls (or adapters) can skip redundant validation.
|
|
181
|
+
markDtoAsValidated(dto);
|
|
182
|
+
return dto;
|
|
183
|
+
}
|
|
184
|
+
/**
|
|
185
|
+
* Synchronous variant of {@link ensureValidatedDto}.
|
|
186
|
+
*
|
|
187
|
+
* @remarks
|
|
188
|
+
* Needed for sync methods that accept DTOs (e.g. `MFAService.hasProvider()`), so we can enforce
|
|
189
|
+
* runtime validation without making those APIs async (breaking change).
|
|
190
|
+
*
|
|
191
|
+
* @param dtoClass - DTO class constructor
|
|
192
|
+
* @param input - Potentially plain input object (or already a DTO instance)
|
|
193
|
+
* @returns Validated DTO instance
|
|
194
|
+
* @throws {NAuthException} When validation fails
|
|
195
|
+
*/
|
|
196
|
+
function ensureValidatedDtoSync(dtoClass, input) {
|
|
197
|
+
// ============================================================================
|
|
198
|
+
// Transform plain input into a DTO instance (ensures @Transform decorators run)
|
|
199
|
+
// ============================================================================
|
|
200
|
+
const dto = input instanceof dtoClass ? input : (0, class_transformer_1.plainToInstance)(dtoClass, input);
|
|
201
|
+
// ============================================================================
|
|
202
|
+
// Skip re-validation if an adapter already validated this DTO
|
|
203
|
+
// ============================================================================
|
|
204
|
+
if (isDtoValidated(dto)) {
|
|
205
|
+
return dto;
|
|
206
|
+
}
|
|
207
|
+
// ============================================================================
|
|
208
|
+
// Validate DTO (runtime enforcement of decorators)
|
|
209
|
+
// ============================================================================
|
|
210
|
+
const errors = (0, class_validator_1.validateSync)(dto, {
|
|
211
|
+
whitelist: true,
|
|
212
|
+
forbidNonWhitelisted: false,
|
|
213
|
+
forbidUnknownValues: true,
|
|
214
|
+
});
|
|
215
|
+
if (errors.length > 0) {
|
|
216
|
+
const validationErrors = formatDtoValidationErrors(errors);
|
|
217
|
+
throw new nauth_exception_1.NAuthException(error_codes_enum_1.AuthErrorCode.VALIDATION_FAILED, 'Validation failed', {
|
|
218
|
+
validationErrors,
|
|
219
|
+
});
|
|
220
|
+
}
|
|
221
|
+
markDtoAsValidated(dto);
|
|
222
|
+
return dto;
|
|
223
|
+
}
|
|
224
|
+
//# sourceMappingURL=dto-validator.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dto-validator.js","sourceRoot":"","sources":["../../src/utils/dto-validator.ts"],"names":[],"mappings":"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"}
|
package/dist/utils/index.d.ts
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/utils/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,cAAc,gBAAgB,CAAC;AAC/B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,qBAAqB,CAAC;AACpC,cAAc,mBAAmB,CAAC;AAClC,cAAc,yBAAyB,CAAC;AACxC,cAAc,sBAAsB,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/utils/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,cAAc,gBAAgB,CAAC;AAC/B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,qBAAqB,CAAC;AACpC,cAAc,mBAAmB,CAAC;AAClC,cAAc,yBAAyB,CAAC;AACxC,cAAc,sBAAsB,CAAC;AACrC,cAAc,iBAAiB,CAAC"}
|
package/dist/utils/index.js
CHANGED
|
@@ -25,5 +25,6 @@ __exportStar(require("./cookie-names.util"), exports);
|
|
|
25
25
|
__exportStar(require("./context-storage"), exports);
|
|
26
26
|
__exportStar(require("./token-delivery-policy"), exports);
|
|
27
27
|
__exportStar(require("./password-generator"), exports);
|
|
28
|
+
__exportStar(require("./dto-validator"), exports);
|
|
28
29
|
// user-agent-parser removed - functionality moved to ClientInfoService.parseUserAgent()
|
|
29
30
|
//# sourceMappingURL=index.js.map
|
package/dist/utils/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/utils/index.ts"],"names":[],"mappings":";AAAA;;GAEG;;;;;;;;;;;;;;;;AAEH,iDAA+B;AAC/B,iDAA+B;AAC/B,iDAA+B;AAC/B,iDAA+B;AAC/B,sDAAoC;AACpC,oDAAkC;AAClC,0DAAwC;AACxC,uDAAqC;AACrC,wFAAwF"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/utils/index.ts"],"names":[],"mappings":";AAAA;;GAEG;;;;;;;;;;;;;;;;AAEH,iDAA+B;AAC/B,iDAA+B;AAC/B,iDAA+B;AAC/B,iDAA+B;AAC/B,sDAAoC;AACpC,oDAAkC;AAClC,0DAAwC;AACxC,uDAAqC;AACrC,kDAAgC;AAChC,wFAAwF"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"init-services.d.ts","sourceRoot":"","sources":["../../../src/utils/setup/init-services.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AAGrC,OAAO,EACL,WAAW,EACX,WAAW,EACX,cAAc,EACd,iBAAiB,EACjB,uBAAuB,EACvB,4BAA4B,EAC5B,wBAAwB,EACxB,wBAAwB,EACxB,UAAU,EACV,WAAW,EACX,iBAAiB,EAGlB,MAAM,aAAa,CAAC;AAErB,OAAO,EACL,eAAe,EACf,UAAU,EACV,cAAc,EAEd,gBAAgB,EAAE,sCAAsC;AACxD,gBAAgB,EAChB,oBAAoB,EACpB,sBAAsB,EACtB,2BAA2B,EAC3B,0BAA0B,EAC1B,sBAAsB,EACtB,kBAAkB,EAClB,oBAAoB,EACpB,kBAAkB,EAClB,0BAA0B,EAC3B,MAAM,gBAAgB,CAAC;AACxB,OAAO,EACL,QAAQ,EACR,WAAW,EACX,gBAAgB,EAChB,qBAAqB,EACrB,iBAAiB,EACjB,oBAAoB,EACpB,aAAa,EACb,aAAa,EACb,iBAAiB,EAClB,MAAM,gBAAgB,CAAC;AAExB;;GAEG;AACH,MAAM,WAAW,aAAa;IAE5B,eAAe,EAAE,eAAe,CAAC;IACjC,UAAU,EAAE,UAAU,CAAC;IACvB,iBAAiB,EAAE,iBAAiB,CAAC;IACrC,uBAAuB,EAAE,uBAAuB,CAAC;IACjD,4BAA4B,EAAE,4BAA4B,CAAC;IAC3D,cAAc,EAAE,cAAc,CAAC;IAC/B,gBAAgB,EAAE,gBAAgB,CAAC;IACnC,wBAAwB,EAAE,wBAAwB,CAAC;IACnD,sBAAsB,EAAE,sBAAsB,CAAC;IAC/C,oBAAoB,EAAE,2BAA2B,CAAC;IAClD,0BAA0B,EAAE,0BAA0B,CAAC;IACvD,WAAW,EAAE,WAAW,CAAC;IACzB,sBAAsB,EAAE,sBAAsB,CAAC;IAC/C,iBAAiB,EAAE,iBAAiB,CAAC;IAGrC,YAAY,CAAC,EAAE,gBAAgB,CAAC;IAChC,wBAAwB,CAAC,EAAE,wBAAwB,CAAC;IACpD,oBAAoB,CAAC,EAAE,oBAAoB,CAAC;IAC5C,UAAU,CAAC,EAAE,UAAU,CAAC;IACxB,kBAAkB,CAAC,EAAE,kBAAkB,CAAC;IACxC,oBAAoB,CAAC,EAAE,oBAAoB,CAAC;IAC5C,kBAAkB,CAAC,EAAE,kBAAkB,CAAC;IACxC,0BAA0B,CAAC,EAAE,0BAA0B,CAAC;IACxD,WAAW,CAAC,EAAE,OAAO,CAAC;CACvB;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AACH,wBAAgB,YAAY,CAC1B,MAAM,EAAE,WAAW,EACnB,YAAY,EAAE;IACZ,cAAc,EAAE,UAAU,CAAC,QAAQ,CAAC,CAAC;IACrC,iBAAiB,EAAE,UAAU,CAAC,WAAW,CAAC,CAAC;IAC3C,sBAAsB,EAAE,UAAU,CAAC,gBAAgB,CAAC,CAAC;IACrD,2BAA2B,EAAE,UAAU,CAAC,qBAAqB,CAAC,CAAC;IAC/D,uBAAuB,EAAE,UAAU,CAAC,iBAAiB,CAAC,CAAC;IACvD,0BAA0B,EAAE,UAAU,CAAC,oBAAoB,CAAC,CAAC;IAC7D,mBAAmB,EAAE,UAAU,CAAC,aAAa,CAAC,CAAC;IAC/C,mBAAmB,EAAE,UAAU,CAAC,aAAa,CAAC,CAAC;IAC/C,uBAAuB,EAAE,UAAU,CAAC,iBAAiB,CAAC,GAAG,IAAI,CAAC;CAC/D,EACD,cAAc,EAAE,cAAc,EAC9B,MAAM,EAAE,WAAW,EACnB,aAAa,EAAE,OAAO,EACtB,WAAW,CAAC,EAAE,OAAO,GACpB,aAAa,
|
|
1
|
+
{"version":3,"file":"init-services.d.ts","sourceRoot":"","sources":["../../../src/utils/setup/init-services.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AAGrC,OAAO,EACL,WAAW,EACX,WAAW,EACX,cAAc,EACd,iBAAiB,EACjB,uBAAuB,EACvB,4BAA4B,EAC5B,wBAAwB,EACxB,wBAAwB,EACxB,UAAU,EACV,WAAW,EACX,iBAAiB,EAGlB,MAAM,aAAa,CAAC;AAErB,OAAO,EACL,eAAe,EACf,UAAU,EACV,cAAc,EAEd,gBAAgB,EAAE,sCAAsC;AACxD,gBAAgB,EAChB,oBAAoB,EACpB,sBAAsB,EACtB,2BAA2B,EAC3B,0BAA0B,EAC1B,sBAAsB,EACtB,kBAAkB,EAClB,oBAAoB,EACpB,kBAAkB,EAClB,0BAA0B,EAC3B,MAAM,gBAAgB,CAAC;AACxB,OAAO,EACL,QAAQ,EACR,WAAW,EACX,gBAAgB,EAChB,qBAAqB,EACrB,iBAAiB,EACjB,oBAAoB,EACpB,aAAa,EACb,aAAa,EACb,iBAAiB,EAClB,MAAM,gBAAgB,CAAC;AAExB;;GAEG;AACH,MAAM,WAAW,aAAa;IAE5B,eAAe,EAAE,eAAe,CAAC;IACjC,UAAU,EAAE,UAAU,CAAC;IACvB,iBAAiB,EAAE,iBAAiB,CAAC;IACrC,uBAAuB,EAAE,uBAAuB,CAAC;IACjD,4BAA4B,EAAE,4BAA4B,CAAC;IAC3D,cAAc,EAAE,cAAc,CAAC;IAC/B,gBAAgB,EAAE,gBAAgB,CAAC;IACnC,wBAAwB,EAAE,wBAAwB,CAAC;IACnD,sBAAsB,EAAE,sBAAsB,CAAC;IAC/C,oBAAoB,EAAE,2BAA2B,CAAC;IAClD,0BAA0B,EAAE,0BAA0B,CAAC;IACvD,WAAW,EAAE,WAAW,CAAC;IACzB,sBAAsB,EAAE,sBAAsB,CAAC;IAC/C,iBAAiB,EAAE,iBAAiB,CAAC;IAGrC,YAAY,CAAC,EAAE,gBAAgB,CAAC;IAChC,wBAAwB,CAAC,EAAE,wBAAwB,CAAC;IACpD,oBAAoB,CAAC,EAAE,oBAAoB,CAAC;IAC5C,UAAU,CAAC,EAAE,UAAU,CAAC;IACxB,kBAAkB,CAAC,EAAE,kBAAkB,CAAC;IACxC,oBAAoB,CAAC,EAAE,oBAAoB,CAAC;IAC5C,kBAAkB,CAAC,EAAE,kBAAkB,CAAC;IACxC,0BAA0B,CAAC,EAAE,0BAA0B,CAAC;IACxD,WAAW,CAAC,EAAE,OAAO,CAAC;CACvB;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AACH,wBAAgB,YAAY,CAC1B,MAAM,EAAE,WAAW,EACnB,YAAY,EAAE;IACZ,cAAc,EAAE,UAAU,CAAC,QAAQ,CAAC,CAAC;IACrC,iBAAiB,EAAE,UAAU,CAAC,WAAW,CAAC,CAAC;IAC3C,sBAAsB,EAAE,UAAU,CAAC,gBAAgB,CAAC,CAAC;IACrD,2BAA2B,EAAE,UAAU,CAAC,qBAAqB,CAAC,CAAC;IAC/D,uBAAuB,EAAE,UAAU,CAAC,iBAAiB,CAAC,CAAC;IACvD,0BAA0B,EAAE,UAAU,CAAC,oBAAoB,CAAC,CAAC;IAC7D,mBAAmB,EAAE,UAAU,CAAC,aAAa,CAAC,CAAC;IAC/C,mBAAmB,EAAE,UAAU,CAAC,aAAa,CAAC,CAAC;IAC/C,uBAAuB,EAAE,UAAU,CAAC,iBAAiB,CAAC,GAAG,IAAI,CAAC;CAC/D,EACD,cAAc,EAAE,cAAc,EAC9B,MAAM,EAAE,WAAW,EACnB,aAAa,EAAE,OAAO,EACtB,WAAW,CAAC,EAAE,OAAO,GACpB,aAAa,CAwUf"}
|
|
@@ -5,6 +5,39 @@
|
|
|
5
5
|
* Initializes all NAuth services in correct dependency order.
|
|
6
6
|
* Matches NestJS AuthModule service initialization.
|
|
7
7
|
*/
|
|
8
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
9
|
+
if (k2 === undefined) k2 = k;
|
|
10
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
11
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
12
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
13
|
+
}
|
|
14
|
+
Object.defineProperty(o, k2, desc);
|
|
15
|
+
}) : (function(o, m, k, k2) {
|
|
16
|
+
if (k2 === undefined) k2 = k;
|
|
17
|
+
o[k2] = m[k];
|
|
18
|
+
}));
|
|
19
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
20
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
21
|
+
}) : function(o, v) {
|
|
22
|
+
o["default"] = v;
|
|
23
|
+
});
|
|
24
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
25
|
+
var ownKeys = function(o) {
|
|
26
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
27
|
+
var ar = [];
|
|
28
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
29
|
+
return ar;
|
|
30
|
+
};
|
|
31
|
+
return ownKeys(o);
|
|
32
|
+
};
|
|
33
|
+
return function (mod) {
|
|
34
|
+
if (mod && mod.__esModule) return mod;
|
|
35
|
+
var result = {};
|
|
36
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
37
|
+
__setModuleDefault(result, mod);
|
|
38
|
+
return result;
|
|
39
|
+
};
|
|
40
|
+
})();
|
|
8
41
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
9
42
|
exports.initServices = initServices;
|
|
10
43
|
// Public API imports
|
|
@@ -177,7 +210,16 @@ function initServices(config, repositories, storageAdapter, logger, emailProvide
|
|
|
177
210
|
if (config.geoLocation?.maxMind) {
|
|
178
211
|
try {
|
|
179
212
|
// Try to load MaxMind module (optional peer dependency)
|
|
180
|
-
|
|
213
|
+
// IMPORTANT: initServices() is synchronous, so we provide a lazy module wrapper.
|
|
214
|
+
// This avoids require() while keeping initServices() sync.
|
|
215
|
+
const maxMindModule = {
|
|
216
|
+
Reader: {
|
|
217
|
+
open: async (dbPath) => {
|
|
218
|
+
const lib = await Promise.resolve().then(() => __importStar(require('@maxmind/geoip2-node')));
|
|
219
|
+
return await lib.Reader.open(dbPath);
|
|
220
|
+
},
|
|
221
|
+
},
|
|
222
|
+
};
|
|
181
223
|
geoLocationService = new internal_1.GeoLocationService(config, storageAdapter, maxMindModule, logger);
|
|
182
224
|
}
|
|
183
225
|
catch {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"init-services.js","sourceRoot":"","sources":["../../../src/utils/setup/init-services.ts"],"names":[],"mappings":";AAAA;;;;;GAKG
|
|
1
|
+
{"version":3,"file":"init-services.js","sourceRoot":"","sources":["../../../src/utils/setup/init-services.ts"],"names":[],"mappings":"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"}
|