@nauth-toolkit/core 0.1.18 → 0.1.21
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/adapters/storage.factory.d.ts.map +1 -1
- package/dist/adapters/storage.factory.js +250 -18
- package/dist/adapters/storage.factory.js.map +1 -1
- package/dist/bootstrap.d.ts.map +1 -1
- package/dist/bootstrap.js +2 -1
- package/dist/bootstrap.js.map +1 -1
- package/dist/dto/admin-signup.dto.d.ts +196 -0
- package/dist/dto/admin-signup.dto.d.ts.map +1 -0
- package/dist/dto/admin-signup.dto.js +317 -0
- package/dist/dto/admin-signup.dto.js.map +1 -0
- package/dist/dto/index.d.ts +1 -0
- package/dist/dto/index.d.ts.map +1 -1
- package/dist/dto/index.js +1 -0
- package/dist/dto/index.js.map +1 -1
- package/dist/handlers/csrf.handler.d.ts.map +1 -1
- package/dist/handlers/csrf.handler.js +7 -2
- package/dist/handlers/csrf.handler.js.map +1 -1
- package/dist/handlers/social-redirect.handler.d.ts +126 -0
- package/dist/handlers/social-redirect.handler.d.ts.map +1 -0
- package/dist/handlers/social-redirect.handler.js +346 -0
- package/dist/handlers/social-redirect.handler.js.map +1 -0
- package/dist/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +4 -0
- package/dist/index.js.map +1 -1
- package/dist/interfaces/config.interface.d.ts +43 -0
- package/dist/interfaces/config.interface.d.ts.map +1 -1
- package/dist/interfaces/index.d.ts +1 -0
- package/dist/interfaces/index.d.ts.map +1 -1
- package/dist/interfaces/index.js +1 -0
- package/dist/interfaces/index.js.map +1 -1
- package/dist/interfaces/social-auth-state-store.interface.d.ts +100 -0
- package/dist/interfaces/social-auth-state-store.interface.d.ts.map +1 -0
- package/dist/interfaces/social-auth-state-store.interface.js +3 -0
- package/dist/interfaces/social-auth-state-store.interface.js.map +1 -0
- package/dist/interfaces/storage-adapter.interface.d.ts +2 -2
- package/dist/interfaces/storage-adapter.interface.d.ts.map +1 -1
- package/dist/internal.d.ts +5 -0
- package/dist/internal.d.ts.map +1 -1
- package/dist/internal.js +7 -1
- package/dist/internal.js.map +1 -1
- package/dist/schemas/auth-config.schema.d.ts +107 -28
- package/dist/schemas/auth-config.schema.d.ts.map +1 -1
- package/dist/schemas/auth-config.schema.js +20 -1
- package/dist/schemas/auth-config.schema.js.map +1 -1
- package/dist/services/auth.service.d.ts +39 -0
- package/dist/services/auth.service.d.ts.map +1 -1
- package/dist/services/auth.service.js +221 -9
- package/dist/services/auth.service.js.map +1 -1
- package/dist/services/social-auth-base.service.d.ts +5 -10
- package/dist/services/social-auth-base.service.d.ts.map +1 -1
- package/dist/services/social-auth-base.service.js +11 -59
- package/dist/services/social-auth-base.service.js.map +1 -1
- package/dist/services/social-auth-state-store.service.d.ts +58 -0
- package/dist/services/social-auth-state-store.service.d.ts.map +1 -0
- package/dist/services/social-auth-state-store.service.js +261 -0
- package/dist/services/social-auth-state-store.service.js.map +1 -0
- package/dist/storage/account-lockout-storage.service.d.ts +2 -2
- package/dist/storage/account-lockout-storage.service.d.ts.map +1 -1
- package/dist/storage/account-lockout-storage.service.js +2 -2
- package/dist/storage/account-lockout-storage.service.js.map +1 -1
- 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/password-generator.d.ts +29 -0
- package/dist/utils/password-generator.d.ts.map +1 -0
- package/dist/utils/password-generator.js +98 -0
- package/dist/utils/password-generator.js.map +1 -0
- package/dist/utils/setup/init-social.d.ts +2 -5
- package/dist/utils/setup/init-social.d.ts.map +1 -1
- package/dist/utils/setup/init-social.js.map +1 -1
- package/package.json +1 -1
|
@@ -0,0 +1,98 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
+
var ownKeys = function(o) {
|
|
20
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
+
var ar = [];
|
|
22
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
+
return ar;
|
|
24
|
+
};
|
|
25
|
+
return ownKeys(o);
|
|
26
|
+
};
|
|
27
|
+
return function (mod) {
|
|
28
|
+
if (mod && mod.__esModule) return mod;
|
|
29
|
+
var result = {};
|
|
30
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
+
__setModuleDefault(result, mod);
|
|
32
|
+
return result;
|
|
33
|
+
};
|
|
34
|
+
})();
|
|
35
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
|
+
exports.generateSecurePassword = generateSecurePassword;
|
|
37
|
+
const crypto = __importStar(require("crypto"));
|
|
38
|
+
/**
|
|
39
|
+
* Generate a cryptographically secure random password
|
|
40
|
+
*
|
|
41
|
+
* Creates a password with:
|
|
42
|
+
* - Mixed case letters (a-z, A-Z)
|
|
43
|
+
* - Numbers (0-9)
|
|
44
|
+
* - Special characters (!@#$%^&*)
|
|
45
|
+
* - No ambiguous characters (0, O, l, 1, I) to prevent confusion
|
|
46
|
+
*
|
|
47
|
+
* The password is generated using cryptographically secure random number generation
|
|
48
|
+
* (crypto.randomBytes) to ensure unpredictability.
|
|
49
|
+
*
|
|
50
|
+
* @param length - Password length (default: 16)
|
|
51
|
+
* @returns Secure random password string
|
|
52
|
+
*
|
|
53
|
+
* @example
|
|
54
|
+
* ```typescript
|
|
55
|
+
* // Generate 16-character password (default)
|
|
56
|
+
* const password = generateSecurePassword();
|
|
57
|
+
* // Example output: "Kx9#mP2$vN7@qR4!"
|
|
58
|
+
*
|
|
59
|
+
* // Generate 20-character password
|
|
60
|
+
* const longPassword = generateSecurePassword(20);
|
|
61
|
+
* ```
|
|
62
|
+
*
|
|
63
|
+
* @throws {Error} If length is less than 8 or greater than 128
|
|
64
|
+
*/
|
|
65
|
+
function generateSecurePassword(length = 16) {
|
|
66
|
+
if (length < 8) {
|
|
67
|
+
throw new Error('Password length must be at least 8 characters');
|
|
68
|
+
}
|
|
69
|
+
if (length > 128) {
|
|
70
|
+
throw new Error('Password length must not exceed 128 characters');
|
|
71
|
+
}
|
|
72
|
+
// Character sets (excluding ambiguous characters)
|
|
73
|
+
const lowercase = 'abcdefghjkmnpqrstuvwxyz'; // Excludes: i, l, o
|
|
74
|
+
const uppercase = 'ABCDEFGHJKMNPQRSTUVWXYZ'; // Excludes: I, L, O
|
|
75
|
+
const numbers = '23456789'; // Excludes: 0, 1
|
|
76
|
+
const special = '!@#$%^&*';
|
|
77
|
+
// Combine all character sets
|
|
78
|
+
const allChars = lowercase + uppercase + numbers + special;
|
|
79
|
+
// Ensure at least one character from each set
|
|
80
|
+
let password = '';
|
|
81
|
+
password += lowercase[crypto.randomInt(lowercase.length)];
|
|
82
|
+
password += uppercase[crypto.randomInt(uppercase.length)];
|
|
83
|
+
password += numbers[crypto.randomInt(numbers.length)];
|
|
84
|
+
password += special[crypto.randomInt(special.length)];
|
|
85
|
+
// Fill the rest with random characters from all sets
|
|
86
|
+
const remainingLength = length - password.length;
|
|
87
|
+
for (let i = 0; i < remainingLength; i++) {
|
|
88
|
+
password += allChars[crypto.randomInt(allChars.length)];
|
|
89
|
+
}
|
|
90
|
+
// Shuffle the password to avoid predictable pattern (first 4 chars are guaranteed)
|
|
91
|
+
const passwordArray = password.split('');
|
|
92
|
+
for (let i = passwordArray.length - 1; i > 0; i--) {
|
|
93
|
+
const j = crypto.randomInt(i + 1);
|
|
94
|
+
[passwordArray[i], passwordArray[j]] = [passwordArray[j], passwordArray[i]];
|
|
95
|
+
}
|
|
96
|
+
return passwordArray.join('');
|
|
97
|
+
}
|
|
98
|
+
//# sourceMappingURL=password-generator.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"password-generator.js","sourceRoot":"","sources":["../../src/utils/password-generator.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA6BA,wDAsCC;AAnED,+CAAiC;AAEjC;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AACH,SAAgB,sBAAsB,CAAC,SAAiB,EAAE;IACxD,IAAI,MAAM,GAAG,CAAC,EAAE,CAAC;QACf,MAAM,IAAI,KAAK,CAAC,+CAA+C,CAAC,CAAC;IACnE,CAAC;IACD,IAAI,MAAM,GAAG,GAAG,EAAE,CAAC;QACjB,MAAM,IAAI,KAAK,CAAC,gDAAgD,CAAC,CAAC;IACpE,CAAC;IAED,kDAAkD;IAClD,MAAM,SAAS,GAAG,yBAAyB,CAAC,CAAC,oBAAoB;IACjE,MAAM,SAAS,GAAG,yBAAyB,CAAC,CAAC,oBAAoB;IACjE,MAAM,OAAO,GAAG,UAAU,CAAC,CAAC,iBAAiB;IAC7C,MAAM,OAAO,GAAG,UAAU,CAAC;IAE3B,6BAA6B;IAC7B,MAAM,QAAQ,GAAG,SAAS,GAAG,SAAS,GAAG,OAAO,GAAG,OAAO,CAAC;IAE3D,8CAA8C;IAC9C,IAAI,QAAQ,GAAG,EAAE,CAAC;IAClB,QAAQ,IAAI,SAAS,CAAC,MAAM,CAAC,SAAS,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC;IAC1D,QAAQ,IAAI,SAAS,CAAC,MAAM,CAAC,SAAS,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC;IAC1D,QAAQ,IAAI,OAAO,CAAC,MAAM,CAAC,SAAS,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC;IACtD,QAAQ,IAAI,OAAO,CAAC,MAAM,CAAC,SAAS,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC;IAEtD,qDAAqD;IACrD,MAAM,eAAe,GAAG,MAAM,GAAG,QAAQ,CAAC,MAAM,CAAC;IACjD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,eAAe,EAAE,CAAC,EAAE,EAAE,CAAC;QACzC,QAAQ,IAAI,QAAQ,CAAC,MAAM,CAAC,SAAS,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC;IAC1D,CAAC;IAED,mFAAmF;IACnF,MAAM,aAAa,GAAG,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;IACzC,KAAK,IAAI,CAAC,GAAG,aAAa,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;QAClD,MAAM,CAAC,GAAG,MAAM,CAAC,SAAS,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;QAClC,CAAC,aAAa,CAAC,CAAC,CAAC,EAAE,aAAa,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC,CAAC,EAAE,aAAa,CAAC,CAAC,CAAC,CAAC,CAAC;IAC9E,CAAC;IAED,OAAO,aAAa,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;AAChC,CAAC"}
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
*
|
|
4
4
|
* Dynamically loads and initializes social auth providers based on configuration.
|
|
5
5
|
*/
|
|
6
|
-
import { NAuthConfig, NAuthLogger, SocialAuthService, AuthService, ClientInfoService, AuthAuditService, PhoneVerificationService, BaseUser } from '../../index';
|
|
6
|
+
import { NAuthConfig, NAuthLogger, SocialAuthService, AuthService, ClientInfoService, AuthAuditService, PhoneVerificationService, BaseUser, ISocialAuthStateStore } from '../../index';
|
|
7
7
|
import { JwtService, SessionService, AuthChallengeHelperService, SocialProviderRegistry, TrustedDeviceService } from '../../internal';
|
|
8
8
|
import { Repository } from 'typeorm';
|
|
9
9
|
import { ISocialAuthProviderService } from '../../interfaces/social-auth-provider.interface';
|
|
@@ -34,8 +34,5 @@ export interface NAuthSocialProviders {
|
|
|
34
34
|
* @param trustedDeviceService - Trusted device service (optional)
|
|
35
35
|
* @returns Object containing initialized social providers
|
|
36
36
|
*/
|
|
37
|
-
export declare function initSocialAuth(config: NAuthConfig, providerRegistry: SocialProviderRegistry, authService: AuthService, socialAuthService: SocialAuthService, jwtService: JwtService, sessionService: SessionService, challengeHelper: AuthChallengeHelperService, clientInfoService: ClientInfoService, logger: NAuthLogger, socialAuthStateStore:
|
|
38
|
-
timestamp: number;
|
|
39
|
-
provider: string;
|
|
40
|
-
}>, userRepository: Repository<BaseUser>, phoneVerificationService?: PhoneVerificationService, auditService?: AuthAuditService, trustedDeviceService?: TrustedDeviceService): Promise<NAuthSocialProviders>;
|
|
37
|
+
export declare function initSocialAuth(config: NAuthConfig, providerRegistry: SocialProviderRegistry, authService: AuthService, socialAuthService: SocialAuthService, jwtService: JwtService, sessionService: SessionService, challengeHelper: AuthChallengeHelperService, clientInfoService: ClientInfoService, logger: NAuthLogger, socialAuthStateStore: ISocialAuthStateStore, userRepository: Repository<BaseUser>, phoneVerificationService?: PhoneVerificationService, auditService?: AuthAuditService, trustedDeviceService?: TrustedDeviceService): Promise<NAuthSocialProviders>;
|
|
41
38
|
//# sourceMappingURL=init-social.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"init-social.d.ts","sourceRoot":"","sources":["../../../src/utils/setup/init-social.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,EACL,WAAW,EACX,WAAW,EACX,iBAAiB,EACjB,WAAW,EACX,iBAAiB,EACjB,gBAAgB,EAChB,wBAAwB,EACxB,QAAQ,
|
|
1
|
+
{"version":3,"file":"init-social.d.ts","sourceRoot":"","sources":["../../../src/utils/setup/init-social.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,EACL,WAAW,EACX,WAAW,EACX,iBAAiB,EACjB,WAAW,EACX,iBAAiB,EACjB,gBAAgB,EAChB,wBAAwB,EACxB,QAAQ,EACR,qBAAqB,EACtB,MAAM,aAAa,CAAC;AAErB,OAAO,EACL,UAAU,EACV,cAAc,EACd,0BAA0B,EAC1B,sBAAsB,EACtB,oBAAoB,EACrB,MAAM,gBAAgB,CAAC;AACxB,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AACrC,OAAO,EAAE,0BAA0B,EAAE,MAAM,iDAAiD,CAAC;AAG7F,MAAM,WAAW,oBAAoB;IACnC,UAAU,CAAC,EAAE,0BAA0B,CAAC;IACxC,SAAS,CAAC,EAAE,0BAA0B,CAAC;IACvC,YAAY,CAAC,EAAE,0BAA0B,CAAC;CAC3C;AAiBD;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,wBAAsB,cAAc,CAClC,MAAM,EAAE,WAAW,EACnB,gBAAgB,EAAE,sBAAsB,EACxC,WAAW,EAAE,WAAW,EACxB,iBAAiB,EAAE,iBAAiB,EACpC,UAAU,EAAE,UAAU,EACtB,cAAc,EAAE,cAAc,EAC9B,eAAe,EAAE,0BAA0B,EAC3C,iBAAiB,EAAE,iBAAiB,EACpC,MAAM,EAAE,WAAW,EACnB,oBAAoB,EAAE,qBAAqB,EAC3C,cAAc,EAAE,UAAU,CAAC,QAAQ,CAAC,EACpC,wBAAwB,CAAC,EAAE,wBAAwB,EACnD,YAAY,CAAC,EAAE,gBAAgB,EAC/B,oBAAoB,CAAC,EAAE,oBAAoB,GAC1C,OAAO,CAAC,oBAAoB,CAAC,CA0J/B"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"init-social.js","sourceRoot":"","sources":["../../../src/utils/setup/init-social.ts"],"names":[],"mappings":";AAAA;;;;GAIG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
|
1
|
+
{"version":3,"file":"init-social.js","sourceRoot":"","sources":["../../../src/utils/setup/init-social.ts"],"names":[],"mappings":"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"}
|