@ackplus/nest-auth 0.0.23
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 +226 -0
- package/package.json +51 -0
- package/src/index.d.ts +11 -0
- package/src/index.js +15 -0
- package/src/index.js.map +1 -0
- package/src/lib/auth.constants.d.ts +17 -0
- package/src/lib/auth.constants.js +21 -0
- package/src/lib/auth.constants.js.map +1 -0
- package/src/lib/controllers/auth.controller.d.ts +26 -0
- package/src/lib/controllers/auth.controller.js +214 -0
- package/src/lib/controllers/auth.controller.js.map +1 -0
- package/src/lib/controllers/mfa.controller.d.ts +23 -0
- package/src/lib/controllers/mfa.controller.js +132 -0
- package/src/lib/controllers/mfa.controller.js.map +1 -0
- package/src/lib/decorators/skip-mfa.decorator.d.ts +2 -0
- package/src/lib/decorators/skip-mfa.decorator.js +8 -0
- package/src/lib/decorators/skip-mfa.decorator.js.map +1 -0
- package/src/lib/dto/index.d.ts +12 -0
- package/src/lib/dto/index.js +16 -0
- package/src/lib/dto/index.js.map +1 -0
- package/src/lib/dto/requests/forgot-password.request.dto.d.ts +5 -0
- package/src/lib/dto/requests/forgot-password.request.dto.js +30 -0
- package/src/lib/dto/requests/forgot-password.request.dto.js.map +1 -0
- package/src/lib/dto/requests/login.request.dto.d.ts +6 -0
- package/src/lib/dto/requests/login.request.dto.js +34 -0
- package/src/lib/dto/requests/login.request.dto.js.map +1 -0
- package/src/lib/dto/requests/refresh-token.request.dto.d.ts +3 -0
- package/src/lib/dto/requests/refresh-token.request.dto.js +15 -0
- package/src/lib/dto/requests/refresh-token.request.dto.js.map +1 -0
- package/src/lib/dto/requests/reset-password.request.dto.d.ts +7 -0
- package/src/lib/dto/requests/reset-password.request.dto.js +42 -0
- package/src/lib/dto/requests/reset-password.request.dto.js.map +1 -0
- package/src/lib/dto/requests/send-mfa-code.request.dto.d.ts +4 -0
- package/src/lib/dto/requests/send-mfa-code.request.dto.js +16 -0
- package/src/lib/dto/requests/send-mfa-code.request.dto.js.map +1 -0
- package/src/lib/dto/requests/signup.request.dto.d.ts +6 -0
- package/src/lib/dto/requests/signup.request.dto.js +37 -0
- package/src/lib/dto/requests/signup.request.dto.js.map +1 -0
- package/src/lib/dto/requests/social-login.request.dto.d.ts +3 -0
- package/src/lib/dto/requests/social-login.request.dto.js +16 -0
- package/src/lib/dto/requests/social-login.request.dto.js.map +1 -0
- package/src/lib/dto/requests/update-user.dto.d.ts +5 -0
- package/src/lib/dto/requests/update-user.dto.js +24 -0
- package/src/lib/dto/requests/update-user.dto.js.map +1 -0
- package/src/lib/dto/requests/verify-2fa.request.dto.d.ts +5 -0
- package/src/lib/dto/requests/verify-2fa.request.dto.js +21 -0
- package/src/lib/dto/requests/verify-2fa.request.dto.js.map +1 -0
- package/src/lib/dto/requests/verify-totp-setup.request.dto.d.ts +4 -0
- package/src/lib/dto/requests/verify-totp-setup.request.dto.js +20 -0
- package/src/lib/dto/requests/verify-totp-setup.request.dto.js.map +1 -0
- package/src/lib/dto/responses/auth.response.dto.d.ts +16 -0
- package/src/lib/dto/responses/auth.response.dto.js +55 -0
- package/src/lib/dto/responses/auth.response.dto.js.map +1 -0
- package/src/lib/dto/responses/device-info.response.dto.d.ts +6 -0
- package/src/lib/dto/responses/device-info.response.dto.js +25 -0
- package/src/lib/dto/responses/device-info.response.dto.js.map +1 -0
- package/src/lib/dto/responses/message.response.dto.d.ts +3 -0
- package/src/lib/dto/responses/message.response.dto.js +13 -0
- package/src/lib/dto/responses/message.response.dto.js.map +1 -0
- package/src/lib/entities/auth-identity.entity.d.ts +11 -0
- package/src/lib/entities/auth-identity.entity.js +47 -0
- package/src/lib/entities/auth-identity.entity.js.map +1 -0
- package/src/lib/entities/index.d.ts +10 -0
- package/src/lib/entities/index.js +26 -0
- package/src/lib/entities/index.js.map +1 -0
- package/src/lib/entities/mfa-secret.entity.d.ts +12 -0
- package/src/lib/entities/mfa-secret.entity.js +51 -0
- package/src/lib/entities/mfa-secret.entity.js.map +1 -0
- package/src/lib/entities/otp.entity.d.ts +16 -0
- package/src/lib/entities/otp.entity.js +52 -0
- package/src/lib/entities/otp.entity.js.map +1 -0
- package/src/lib/entities/permission.entity.d.ts +9 -0
- package/src/lib/entities/permission.entity.js +37 -0
- package/src/lib/entities/permission.entity.js.map +1 -0
- package/src/lib/entities/role-permission.entity.d.ts +8 -0
- package/src/lib/entities/role-permission.entity.js +30 -0
- package/src/lib/entities/role-permission.entity.js.map +1 -0
- package/src/lib/entities/role.entity.d.ts +11 -0
- package/src/lib/entities/role.entity.js +42 -0
- package/src/lib/entities/role.entity.js.map +1 -0
- package/src/lib/entities/session.entity.d.ts +16 -0
- package/src/lib/entities/session.entity.js +63 -0
- package/src/lib/entities/session.entity.js.map +1 -0
- package/src/lib/entities/tenant.entity.d.ts +10 -0
- package/src/lib/entities/tenant.entity.js +41 -0
- package/src/lib/entities/tenant.entity.js.map +1 -0
- package/src/lib/entities/user-role.entity.d.ts +13 -0
- package/src/lib/entities/user-role.entity.js +47 -0
- package/src/lib/entities/user-role.entity.js.map +1 -0
- package/src/lib/entities/user.entity.d.ts +38 -0
- package/src/lib/entities/user.entity.js +155 -0
- package/src/lib/entities/user.entity.js.map +1 -0
- package/src/lib/guards/auth.guard.d.ts +18 -0
- package/src/lib/guards/auth.guard.js +106 -0
- package/src/lib/guards/auth.guard.js.map +1 -0
- package/src/lib/interceptors/token.interceptor.d.ts +10 -0
- package/src/lib/interceptors/token.interceptor.js +41 -0
- package/src/lib/interceptors/token.interceptor.js.map +1 -0
- package/src/lib/interfaces/auth-module-options.interface.d.ts +51 -0
- package/src/lib/interfaces/auth-module-options.interface.js +3 -0
- package/src/lib/interfaces/auth-module-options.interface.js.map +1 -0
- package/src/lib/interfaces/mfa-options.interface.d.ts +25 -0
- package/src/lib/interfaces/mfa-options.interface.js +10 -0
- package/src/lib/interfaces/mfa-options.interface.js.map +1 -0
- package/src/lib/interfaces/session-options.interface.d.ts +12 -0
- package/src/lib/interfaces/session-options.interface.js +9 -0
- package/src/lib/interfaces/session-options.interface.js.map +1 -0
- package/src/lib/interfaces/token-payload.interface.d.ts +39 -0
- package/src/lib/interfaces/token-payload.interface.js +3 -0
- package/src/lib/interfaces/token-payload.interface.js.map +1 -0
- package/src/lib/migrations/1746242659133-migration.d.ts +6 -0
- package/src/lib/migrations/1746242659133-migration.js +66 -0
- package/src/lib/migrations/1746242659133-migration.js.map +1 -0
- package/src/lib/migrations/1746244352713-migration.d.ts +6 -0
- package/src/lib/migrations/1746244352713-migration.js +16 -0
- package/src/lib/migrations/1746244352713-migration.js.map +1 -0
- package/src/lib/nest-auth.module.d.ts +13 -0
- package/src/lib/nest-auth.module.js +247 -0
- package/src/lib/nest-auth.module.js.map +1 -0
- package/src/lib/providers/apple-auth.provider.d.ts +23 -0
- package/src/lib/providers/apple-auth.provider.js +61 -0
- package/src/lib/providers/apple-auth.provider.js.map +1 -0
- package/src/lib/providers/base-auth.provider.d.ts +24 -0
- package/src/lib/providers/base-auth.provider.js +54 -0
- package/src/lib/providers/base-auth.provider.js.map +1 -0
- package/src/lib/providers/email-auth.provider.d.ts +21 -0
- package/src/lib/providers/email-auth.provider.js +45 -0
- package/src/lib/providers/email-auth.provider.js.map +1 -0
- package/src/lib/providers/facebook-auth.provider.d.ts +23 -0
- package/src/lib/providers/facebook-auth.provider.js +61 -0
- package/src/lib/providers/facebook-auth.provider.js.map +1 -0
- package/src/lib/providers/google-auth.provider.d.ts +26 -0
- package/src/lib/providers/google-auth.provider.js +63 -0
- package/src/lib/providers/google-auth.provider.js.map +1 -0
- package/src/lib/providers/index.d.ts +7 -0
- package/src/lib/providers/index.js +16 -0
- package/src/lib/providers/index.js.map +1 -0
- package/src/lib/providers/jwt-auth.provider.d.ts +38 -0
- package/src/lib/providers/jwt-auth.provider.js +54 -0
- package/src/lib/providers/jwt-auth.provider.js.map +1 -0
- package/src/lib/providers/phone-auth.provider.d.ts +22 -0
- package/src/lib/providers/phone-auth.provider.js +48 -0
- package/src/lib/providers/phone-auth.provider.js.map +1 -0
- package/src/lib/request-context/request-context.d.ts +22 -0
- package/src/lib/request-context/request-context.js +108 -0
- package/src/lib/request-context/request-context.js.map +1 -0
- package/src/lib/request-context/request-context.middleware.d.ts +4 -0
- package/src/lib/request-context/request-context.middleware.js +16 -0
- package/src/lib/request-context/request-context.middleware.js.map +1 -0
- package/src/lib/services/auth-migration-service.d.ts +22 -0
- package/src/lib/services/auth-migration-service.js +125 -0
- package/src/lib/services/auth-migration-service.js.map +1 -0
- package/src/lib/services/auth-provider-registry.service.d.ts +25 -0
- package/src/lib/services/auth-provider-registry.service.js +72 -0
- package/src/lib/services/auth-provider-registry.service.js.map +1 -0
- package/src/lib/services/auth.service.d.ts +45 -0
- package/src/lib/services/auth.service.js +344 -0
- package/src/lib/services/auth.service.js.map +1 -0
- package/src/lib/services/cookie.service.d.ts +10 -0
- package/src/lib/services/cookie.service.js +43 -0
- package/src/lib/services/cookie.service.js.map +1 -0
- package/src/lib/services/jwt.service.d.ts +15 -0
- package/src/lib/services/jwt.service.js +93 -0
- package/src/lib/services/jwt.service.js.map +1 -0
- package/src/lib/services/mfa.service.d.ts +40 -0
- package/src/lib/services/mfa.service.js +254 -0
- package/src/lib/services/mfa.service.js.map +1 -0
- package/src/lib/services/session/base-session.service.d.ts +23 -0
- package/src/lib/services/session/base-session.service.js +64 -0
- package/src/lib/services/session/base-session.service.js.map +1 -0
- package/src/lib/services/session/database-session.service.d.ts +19 -0
- package/src/lib/services/session/database-session.service.js +55 -0
- package/src/lib/services/session/database-session.service.js.map +1 -0
- package/src/lib/services/session/redis-session.service.d.ts +22 -0
- package/src/lib/services/session/redis-session.service.js +120 -0
- package/src/lib/services/session/redis-session.service.js.map +1 -0
- package/src/lib/utils/database.utils.d.ts +2 -0
- package/src/lib/utils/database.utils.js +8 -0
- package/src/lib/utils/database.utils.js.map +1 -0
- package/src/lib/utils/otp.d.ts +1 -0
- package/src/lib/utils/otp.js +7 -0
- package/src/lib/utils/otp.js.map +1 -0
- package/src/typeorm.config.d.ts +2 -0
- package/src/typeorm.config.js +18 -0
- package/src/typeorm.config.js.map +1 -0
- package/tsconfig.tsbuildinfo +1 -0
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.EmailAuthProvider = void 0;
|
|
4
|
+
const tslib_1 = require("tslib");
|
|
5
|
+
const common_1 = require("@nestjs/common");
|
|
6
|
+
const typeorm_1 = require("@nestjs/typeorm");
|
|
7
|
+
const typeorm_2 = require("typeorm");
|
|
8
|
+
const user_entity_1 = require("../entities/user.entity");
|
|
9
|
+
const base_auth_provider_1 = require("./base-auth.provider");
|
|
10
|
+
const auth_identity_entity_1 = require("../entities/auth-identity.entity");
|
|
11
|
+
const auth_constants_1 = require("../auth.constants");
|
|
12
|
+
let EmailAuthProvider = class EmailAuthProvider extends base_auth_provider_1.BaseAuthProvider {
|
|
13
|
+
constructor(userRepository, authIdentityRepository, options) {
|
|
14
|
+
super(userRepository, authIdentityRepository);
|
|
15
|
+
this.userRepository = userRepository;
|
|
16
|
+
this.authIdentityRepository = authIdentityRepository;
|
|
17
|
+
this.options = options;
|
|
18
|
+
this.providerId = auth_constants_1.EMAIL_AUTH_PROVIDER;
|
|
19
|
+
this.enabled = this.options.emailAuth?.enabled;
|
|
20
|
+
}
|
|
21
|
+
async validate(credentials) {
|
|
22
|
+
const identity = await this.findIdentity(credentials.email);
|
|
23
|
+
if (!identity?.user || !(await identity.user.validatePassword(credentials.password))) {
|
|
24
|
+
throw new common_1.UnauthorizedException('Invalid credentials');
|
|
25
|
+
}
|
|
26
|
+
return {
|
|
27
|
+
userId: identity.user?.email,
|
|
28
|
+
email: identity.user?.email || '',
|
|
29
|
+
metadata: identity.user,
|
|
30
|
+
};
|
|
31
|
+
}
|
|
32
|
+
getRequiredFields() {
|
|
33
|
+
return ['email', 'password'];
|
|
34
|
+
}
|
|
35
|
+
};
|
|
36
|
+
exports.EmailAuthProvider = EmailAuthProvider;
|
|
37
|
+
exports.EmailAuthProvider = EmailAuthProvider = tslib_1.__decorate([
|
|
38
|
+
(0, common_1.Injectable)(),
|
|
39
|
+
tslib_1.__param(0, (0, typeorm_1.InjectRepository)(user_entity_1.User)),
|
|
40
|
+
tslib_1.__param(1, (0, typeorm_1.InjectRepository)(auth_identity_entity_1.AuthIdentity)),
|
|
41
|
+
tslib_1.__param(2, (0, common_1.Inject)(auth_constants_1.AUTH_MODULE_OPTIONS)),
|
|
42
|
+
tslib_1.__metadata("design:paramtypes", [typeorm_2.Repository,
|
|
43
|
+
typeorm_2.Repository, Object])
|
|
44
|
+
], EmailAuthProvider);
|
|
45
|
+
//# sourceMappingURL=email-auth.provider.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"email-auth.provider.js","sourceRoot":"","sources":["../../../../../../packages/nest-auth/src/lib/providers/email-auth.provider.ts"],"names":[],"mappings":";;;;AAAA,2CAA2E;AAC3E,6CAAmD;AACnD,qCAAqC;AACrC,yDAA+C;AAC/C,6DAAwD;AACxD,2EAAgE;AAChE,sDAA6E;AAGtE,IAAM,iBAAiB,GAAvB,MAAM,iBAAkB,SAAQ,qCAAgB;IAGnD,YAEI,cAAkD,EAGlD,sBAAkE,EAGlE,OAAkC;QAElC,KAAK,CAAC,cAAc,EAAE,sBAAsB,CAAC,CAAC;QAR5B,mBAAc,GAAd,cAAc,CAAkB;QAGhC,2BAAsB,GAAtB,sBAAsB,CAA0B;QAG1D,YAAO,GAAP,OAAO,CAAmB;QAVtC,eAAU,GAAG,oCAAmB,CAAC;QAc7B,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,OAAO,CAAC;IACnD,CAAC;IAED,KAAK,CAAC,QAAQ,CAAC,WAAkD;QAE7D,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,YAAY,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;QAE5D,IAAI,CAAC,QAAQ,EAAE,IAAI,IAAI,CAAC,CAAC,MAAM,QAAQ,CAAC,IAAI,CAAC,gBAAgB,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC;YACnF,MAAM,IAAI,8BAAqB,CAAC,qBAAqB,CAAC,CAAC;QAC3D,CAAC;QAED,OAAO;YACH,MAAM,EAAE,QAAQ,CAAC,IAAI,EAAE,KAAK;YAC5B,KAAK,EAAE,QAAQ,CAAC,IAAI,EAAE,KAAK,IAAI,EAAE;YACjC,QAAQ,EAAE,QAAQ,CAAC,IAAI;SAC1B,CAAC;IACN,CAAC;IAGD,iBAAiB;QACb,OAAO,CAAC,OAAO,EAAE,UAAU,CAAC,CAAC;IACjC,CAAC;CACJ,CAAA;AArCY,8CAAiB;4BAAjB,iBAAiB;IAD7B,IAAA,mBAAU,GAAE;IAKJ,mBAAA,IAAA,0BAAgB,EAAC,kBAAI,CAAC,CAAA;IAGtB,mBAAA,IAAA,0BAAgB,EAAC,mCAAY,CAAC,CAAA;IAG9B,mBAAA,IAAA,eAAM,EAAC,oCAAmB,CAAC,CAAA;6CALM,oBAAU;QAGF,oBAAU;GAR/C,iBAAiB,CAqC7B"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import { BaseAuthProvider } from './base-auth.provider';
|
|
2
|
+
import { User } from '../entities/user.entity';
|
|
3
|
+
import { AuthIdentity } from '../entities/auth-identity.entity';
|
|
4
|
+
import { Repository } from 'typeorm';
|
|
5
|
+
import { AuthModuleOptions } from '../interfaces/auth-module-options.interface';
|
|
6
|
+
export declare class FacebookAuthProvider extends BaseAuthProvider {
|
|
7
|
+
readonly userRepository: Repository<User>;
|
|
8
|
+
readonly authIdentityRepository: Repository<AuthIdentity>;
|
|
9
|
+
private options;
|
|
10
|
+
providerId: string;
|
|
11
|
+
constructor(userRepository: Repository<User>, authIdentityRepository: Repository<AuthIdentity>, options: AuthModuleOptions);
|
|
12
|
+
validate(credentials: {
|
|
13
|
+
accessToken: string;
|
|
14
|
+
}): Promise<{
|
|
15
|
+
userId: any;
|
|
16
|
+
email: any;
|
|
17
|
+
metadata: {
|
|
18
|
+
name: any;
|
|
19
|
+
picture: any;
|
|
20
|
+
};
|
|
21
|
+
}>;
|
|
22
|
+
getRequiredFields(): string[];
|
|
23
|
+
}
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.FacebookAuthProvider = void 0;
|
|
4
|
+
const tslib_1 = require("tslib");
|
|
5
|
+
const fb_1 = tslib_1.__importDefault(require("fb"));
|
|
6
|
+
const base_auth_provider_1 = require("./base-auth.provider");
|
|
7
|
+
const common_1 = require("@nestjs/common");
|
|
8
|
+
const typeorm_1 = require("@nestjs/typeorm");
|
|
9
|
+
const user_entity_1 = require("../entities/user.entity");
|
|
10
|
+
const auth_identity_entity_1 = require("../entities/auth-identity.entity");
|
|
11
|
+
const typeorm_2 = require("typeorm");
|
|
12
|
+
const auth_constants_1 = require("../auth.constants");
|
|
13
|
+
let FacebookAuthProvider = class FacebookAuthProvider extends base_auth_provider_1.BaseAuthProvider {
|
|
14
|
+
constructor(userRepository, authIdentityRepository, options) {
|
|
15
|
+
super(userRepository, authIdentityRepository);
|
|
16
|
+
this.userRepository = userRepository;
|
|
17
|
+
this.authIdentityRepository = authIdentityRepository;
|
|
18
|
+
this.options = options;
|
|
19
|
+
this.providerId = auth_constants_1.FACEBOOK_AUTH_PROVIDER;
|
|
20
|
+
const facebookConfig = this.options.facebook;
|
|
21
|
+
this.enabled = Boolean(facebookConfig);
|
|
22
|
+
if (this.enabled) {
|
|
23
|
+
fb_1.default.options({
|
|
24
|
+
appId: facebookConfig.appId,
|
|
25
|
+
appSecret: facebookConfig.appSecret,
|
|
26
|
+
});
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
async validate(credentials) {
|
|
30
|
+
try {
|
|
31
|
+
const response = await fb_1.default.api('me', {
|
|
32
|
+
fields: ['id', 'email', 'name', 'picture'],
|
|
33
|
+
access_token: credentials.accessToken,
|
|
34
|
+
});
|
|
35
|
+
return {
|
|
36
|
+
userId: response.id,
|
|
37
|
+
email: response.email || '',
|
|
38
|
+
metadata: {
|
|
39
|
+
name: response.name,
|
|
40
|
+
picture: response.picture?.data?.url,
|
|
41
|
+
},
|
|
42
|
+
};
|
|
43
|
+
}
|
|
44
|
+
catch (error) {
|
|
45
|
+
throw new common_1.UnauthorizedException('Invalid Facebook token');
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
getRequiredFields() {
|
|
49
|
+
return ['accessToken'];
|
|
50
|
+
}
|
|
51
|
+
};
|
|
52
|
+
exports.FacebookAuthProvider = FacebookAuthProvider;
|
|
53
|
+
exports.FacebookAuthProvider = FacebookAuthProvider = tslib_1.__decorate([
|
|
54
|
+
(0, common_1.Injectable)(),
|
|
55
|
+
tslib_1.__param(0, (0, typeorm_1.InjectRepository)(user_entity_1.User)),
|
|
56
|
+
tslib_1.__param(1, (0, typeorm_1.InjectRepository)(auth_identity_entity_1.AuthIdentity)),
|
|
57
|
+
tslib_1.__param(2, (0, common_1.Inject)(auth_constants_1.AUTH_MODULE_OPTIONS)),
|
|
58
|
+
tslib_1.__metadata("design:paramtypes", [typeorm_2.Repository,
|
|
59
|
+
typeorm_2.Repository, Object])
|
|
60
|
+
], FacebookAuthProvider);
|
|
61
|
+
//# sourceMappingURL=facebook-auth.provider.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"facebook-auth.provider.js","sourceRoot":"","sources":["../../../../../../packages/nest-auth/src/lib/providers/facebook-auth.provider.ts"],"names":[],"mappings":";;;;AAAA,oDAA0B;AAC1B,6DAAwD;AACxD,2CAA2E;AAC3E,6CAAmD;AACnD,yDAA+C;AAC/C,2EAAgE;AAChE,qCAAqC;AACrC,sDAAgF;AAIzE,IAAM,oBAAoB,GAA1B,MAAM,oBAAqB,SAAQ,qCAAgB;IAGtD,YAEI,cAAkD,EAGlD,sBAAkE,EAGlE,OAAkC;QAElC,KAAK,CAAC,cAAc,EAAE,sBAAsB,CAAC,CAAC;QAR5B,mBAAc,GAAd,cAAc,CAAkB;QAGhC,2BAAsB,GAAtB,sBAAsB,CAA0B;QAG1D,YAAO,GAAP,OAAO,CAAmB;QAVtC,eAAU,GAAG,uCAAsB,CAAC;QAchC,MAAM,cAAc,GAAG,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC;QAC7C,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC,cAAc,CAAC,CAAC;QAEvC,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;YACf,YAAQ,CAAC,OAAO,CAAC;gBACb,KAAK,EAAE,cAAc,CAAC,KAAK;gBAC3B,SAAS,EAAE,cAAc,CAAC,SAAS;aACtC,CAAC,CAAC;QACP,CAAC;IACL,CAAC;IAED,KAAK,CAAC,QAAQ,CAAC,WAAoC;QAC/C,IAAI,CAAC;YACD,MAAM,QAAQ,GAAG,MAAM,YAAQ,CAAC,GAAG,CAAC,IAAI,EAAE;gBACtC,MAAM,EAAE,CAAC,IAAI,EAAE,OAAO,EAAE,MAAM,EAAE,SAAS,CAAC;gBAC1C,YAAY,EAAE,WAAW,CAAC,WAAW;aACxC,CAAC,CAAC;YAEH,OAAO;gBACH,MAAM,EAAE,QAAQ,CAAC,EAAE;gBACnB,KAAK,EAAE,QAAQ,CAAC,KAAK,IAAI,EAAE;gBAC3B,QAAQ,EAAE;oBACN,IAAI,EAAE,QAAQ,CAAC,IAAI;oBACnB,OAAO,EAAE,QAAQ,CAAC,OAAO,EAAE,IAAI,EAAE,GAAG;iBACvC;aACJ,CAAC;QACN,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACb,MAAM,IAAI,8BAAqB,CAAC,wBAAwB,CAAC,CAAC;QAC9D,CAAC;IACL,CAAC;IAED,iBAAiB;QACb,OAAO,CAAC,aAAa,CAAC,CAAC;IAC3B,CAAC;CACJ,CAAA;AAjDY,oDAAoB;+BAApB,oBAAoB;IADhC,IAAA,mBAAU,GAAE;IAKJ,mBAAA,IAAA,0BAAgB,EAAC,kBAAI,CAAC,CAAA;IAGtB,mBAAA,IAAA,0BAAgB,EAAC,mCAAY,CAAC,CAAA;IAG9B,mBAAA,IAAA,eAAM,EAAC,oCAAmB,CAAC,CAAA;6CALM,oBAAU;QAGF,oBAAU;GAR/C,oBAAoB,CAiDhC"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import { User } from '../entities/user.entity';
|
|
2
|
+
import { BaseAuthProvider } from './base-auth.provider';
|
|
3
|
+
import { AuthModuleOptions } from '../interfaces/auth-module-options.interface';
|
|
4
|
+
import { AuthIdentity } from '../entities/auth-identity.entity';
|
|
5
|
+
import { Repository } from 'typeorm';
|
|
6
|
+
export declare class GoogleAuthProvider extends BaseAuthProvider {
|
|
7
|
+
readonly userRepository: Repository<User>;
|
|
8
|
+
readonly authIdentityRepository: Repository<AuthIdentity>;
|
|
9
|
+
private options;
|
|
10
|
+
providerId: string;
|
|
11
|
+
private client;
|
|
12
|
+
private googleConfig;
|
|
13
|
+
constructor(userRepository: Repository<User>, authIdentityRepository: Repository<AuthIdentity>, options: AuthModuleOptions);
|
|
14
|
+
validate(credentials: {
|
|
15
|
+
accessToken: string;
|
|
16
|
+
}): Promise<{
|
|
17
|
+
userId: string;
|
|
18
|
+
email: string;
|
|
19
|
+
metadata: {
|
|
20
|
+
name: string;
|
|
21
|
+
picture: string;
|
|
22
|
+
locale: string;
|
|
23
|
+
};
|
|
24
|
+
}>;
|
|
25
|
+
getRequiredFields(): string[];
|
|
26
|
+
}
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.GoogleAuthProvider = void 0;
|
|
4
|
+
const tslib_1 = require("tslib");
|
|
5
|
+
const user_entity_1 = require("../entities/user.entity");
|
|
6
|
+
const google_auth_library_1 = require("google-auth-library");
|
|
7
|
+
const common_1 = require("@nestjs/common");
|
|
8
|
+
const base_auth_provider_1 = require("./base-auth.provider");
|
|
9
|
+
const auth_constants_1 = require("../auth.constants");
|
|
10
|
+
const typeorm_1 = require("@nestjs/typeorm");
|
|
11
|
+
const auth_identity_entity_1 = require("../entities/auth-identity.entity");
|
|
12
|
+
const typeorm_2 = require("typeorm");
|
|
13
|
+
let GoogleAuthProvider = class GoogleAuthProvider extends base_auth_provider_1.BaseAuthProvider {
|
|
14
|
+
constructor(userRepository, authIdentityRepository, options) {
|
|
15
|
+
super(userRepository, authIdentityRepository);
|
|
16
|
+
this.userRepository = userRepository;
|
|
17
|
+
this.authIdentityRepository = authIdentityRepository;
|
|
18
|
+
this.options = options;
|
|
19
|
+
this.providerId = auth_constants_1.GOOGLE_AUTH_PROVIDER;
|
|
20
|
+
this.googleConfig = this.options.google;
|
|
21
|
+
this.enabled = Boolean(this.googleConfig);
|
|
22
|
+
if (this.enabled) {
|
|
23
|
+
this.client = new google_auth_library_1.OAuth2Client(this.googleConfig.clientId, this.googleConfig.clientSecret);
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
async validate(credentials) {
|
|
27
|
+
try {
|
|
28
|
+
const ticket = await this.client.verifyIdToken({
|
|
29
|
+
idToken: credentials.accessToken,
|
|
30
|
+
audience: this.googleConfig.clientId,
|
|
31
|
+
});
|
|
32
|
+
const payload = ticket.getPayload();
|
|
33
|
+
if (!payload) {
|
|
34
|
+
throw new common_1.UnauthorizedException('Invalid Google token');
|
|
35
|
+
}
|
|
36
|
+
return {
|
|
37
|
+
userId: payload.sub,
|
|
38
|
+
email: payload.email || '',
|
|
39
|
+
metadata: {
|
|
40
|
+
name: payload.name,
|
|
41
|
+
picture: payload.picture,
|
|
42
|
+
locale: payload.locale,
|
|
43
|
+
},
|
|
44
|
+
};
|
|
45
|
+
}
|
|
46
|
+
catch (error) {
|
|
47
|
+
throw new common_1.UnauthorizedException('Invalid Google token');
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
getRequiredFields() {
|
|
51
|
+
return ['accessToken'];
|
|
52
|
+
}
|
|
53
|
+
};
|
|
54
|
+
exports.GoogleAuthProvider = GoogleAuthProvider;
|
|
55
|
+
exports.GoogleAuthProvider = GoogleAuthProvider = tslib_1.__decorate([
|
|
56
|
+
(0, common_1.Injectable)(),
|
|
57
|
+
tslib_1.__param(0, (0, typeorm_1.InjectRepository)(user_entity_1.User)),
|
|
58
|
+
tslib_1.__param(1, (0, typeorm_1.InjectRepository)(auth_identity_entity_1.AuthIdentity)),
|
|
59
|
+
tslib_1.__param(2, (0, common_1.Inject)(auth_constants_1.AUTH_MODULE_OPTIONS)),
|
|
60
|
+
tslib_1.__metadata("design:paramtypes", [typeorm_2.Repository,
|
|
61
|
+
typeorm_2.Repository, Object])
|
|
62
|
+
], GoogleAuthProvider);
|
|
63
|
+
//# sourceMappingURL=google-auth.provider.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"google-auth.provider.js","sourceRoot":"","sources":["../../../../../../packages/nest-auth/src/lib/providers/google-auth.provider.ts"],"names":[],"mappings":";;;;AAAA,yDAA+C;AAC/C,6DAAmD;AACnD,2CAA2E;AAC3E,6DAAwD;AAExD,sDAA8E;AAC9E,6CAAmD;AACnD,2EAAgE;AAChE,qCAAqC;AAG9B,IAAM,kBAAkB,GAAxB,MAAM,kBAAmB,SAAQ,qCAAgB;IAKpD,YAEI,cAAkD,EAGlD,sBAAkE,EAGlE,OAAkC;QAElC,KAAK,CAAC,cAAc,EAAE,sBAAsB,CAAC,CAAC;QAR5B,mBAAc,GAAd,cAAc,CAAkB;QAGhC,2BAAsB,GAAtB,sBAAsB,CAA0B;QAG1D,YAAO,GAAP,OAAO,CAAmB;QAZtC,eAAU,GAAG,qCAAoB,CAAC;QAgB9B,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC;QACxC,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;QAC1C,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;YACf,IAAI,CAAC,MAAM,GAAG,IAAI,kCAAY,CAAC,IAAI,CAAC,YAAY,CAAC,QAAQ,EAAE,IAAI,CAAC,YAAY,CAAC,YAAY,CAAC,CAAC;QAC/F,CAAC;IACL,CAAC;IAGD,KAAK,CAAC,QAAQ,CAAC,WAAoC;QAC/C,IAAI,CAAC;YACD,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC;gBAC3C,OAAO,EAAE,WAAW,CAAC,WAAW;gBAChC,QAAQ,EAAE,IAAI,CAAC,YAAY,CAAC,QAAQ;aACvC,CAAC,CAAC;YAEH,MAAM,OAAO,GAAG,MAAM,CAAC,UAAU,EAAE,CAAC;YACpC,IAAI,CAAC,OAAO,EAAE,CAAC;gBACX,MAAM,IAAI,8BAAqB,CAAC,sBAAsB,CAAC,CAAC;YAC5D,CAAC;YAED,OAAO;gBACH,MAAM,EAAE,OAAO,CAAC,GAAG;gBACnB,KAAK,EAAE,OAAO,CAAC,KAAK,IAAI,EAAE;gBAC1B,QAAQ,EAAE;oBACN,IAAI,EAAE,OAAO,CAAC,IAAI;oBAClB,OAAO,EAAE,OAAO,CAAC,OAAO;oBACxB,MAAM,EAAE,OAAO,CAAC,MAAM;iBACzB;aACJ,CAAC;QACN,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACb,MAAM,IAAI,8BAAqB,CAAC,sBAAsB,CAAC,CAAC;QAC5D,CAAC;IACL,CAAC;IAED,iBAAiB;QACb,OAAO,CAAC,aAAa,CAAC,CAAC;IAC3B,CAAC;CACJ,CAAA;AAtDY,gDAAkB;6BAAlB,kBAAkB;IAD9B,IAAA,mBAAU,GAAE;IAOJ,mBAAA,IAAA,0BAAgB,EAAC,kBAAI,CAAC,CAAA;IAGtB,mBAAA,IAAA,0BAAgB,EAAC,mCAAY,CAAC,CAAA;IAG9B,mBAAA,IAAA,eAAM,EAAC,oCAAmB,CAAC,CAAA;6CALM,oBAAU;QAGF,oBAAU;GAV/C,kBAAkB,CAsD9B"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { GoogleAuthProvider } from './google-auth.provider';
|
|
2
|
+
import { FacebookAuthProvider } from './facebook-auth.provider';
|
|
3
|
+
import { AppleAuthProvider } from './apple-auth.provider';
|
|
4
|
+
import { JwtAuthProvider } from './jwt-auth.provider';
|
|
5
|
+
import { PhoneAuthProvider } from './phone-auth.provider';
|
|
6
|
+
import { EmailAuthProvider } from './email-auth.provider';
|
|
7
|
+
export { PhoneAuthProvider, EmailAuthProvider, GoogleAuthProvider, FacebookAuthProvider, AppleAuthProvider, JwtAuthProvider, };
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.JwtAuthProvider = exports.AppleAuthProvider = exports.FacebookAuthProvider = exports.GoogleAuthProvider = exports.EmailAuthProvider = exports.PhoneAuthProvider = void 0;
|
|
4
|
+
const google_auth_provider_1 = require("./google-auth.provider");
|
|
5
|
+
Object.defineProperty(exports, "GoogleAuthProvider", { enumerable: true, get: function () { return google_auth_provider_1.GoogleAuthProvider; } });
|
|
6
|
+
const facebook_auth_provider_1 = require("./facebook-auth.provider");
|
|
7
|
+
Object.defineProperty(exports, "FacebookAuthProvider", { enumerable: true, get: function () { return facebook_auth_provider_1.FacebookAuthProvider; } });
|
|
8
|
+
const apple_auth_provider_1 = require("./apple-auth.provider");
|
|
9
|
+
Object.defineProperty(exports, "AppleAuthProvider", { enumerable: true, get: function () { return apple_auth_provider_1.AppleAuthProvider; } });
|
|
10
|
+
const jwt_auth_provider_1 = require("./jwt-auth.provider");
|
|
11
|
+
Object.defineProperty(exports, "JwtAuthProvider", { enumerable: true, get: function () { return jwt_auth_provider_1.JwtAuthProvider; } });
|
|
12
|
+
const phone_auth_provider_1 = require("./phone-auth.provider");
|
|
13
|
+
Object.defineProperty(exports, "PhoneAuthProvider", { enumerable: true, get: function () { return phone_auth_provider_1.PhoneAuthProvider; } });
|
|
14
|
+
const email_auth_provider_1 = require("./email-auth.provider");
|
|
15
|
+
Object.defineProperty(exports, "EmailAuthProvider", { enumerable: true, get: function () { return email_auth_provider_1.EmailAuthProvider; } });
|
|
16
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../../packages/nest-auth/src/lib/providers/index.ts"],"names":[],"mappings":";;;AAAA,iEAA4D;AAUxD,mGAVK,yCAAkB,OAUL;AATtB,qEAAgE;AAU5D,qGAVK,6CAAoB,OAUL;AATxB,+DAA0D;AAUtD,kGAVK,uCAAiB,OAUL;AATrB,2DAAsD;AAUlD,gGAVK,mCAAe,OAUL;AATnB,+DAA0D;AAItD,kGAJK,uCAAiB,OAIL;AAHrB,+DAA0D;AAItD,kGAJK,uCAAiB,OAIL"}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
import { BaseAuthProvider } from './base-auth.provider';
|
|
2
|
+
import { User } from '../entities/user.entity';
|
|
3
|
+
import { AuthIdentity } from '../entities/auth-identity.entity';
|
|
4
|
+
import { Repository } from 'typeorm';
|
|
5
|
+
import { AuthModuleOptions } from '../interfaces/auth-module-options.interface';
|
|
6
|
+
import { JwtService } from '../services/jwt.service';
|
|
7
|
+
export declare class JwtAuthProvider extends BaseAuthProvider {
|
|
8
|
+
readonly userRepository: Repository<User>;
|
|
9
|
+
readonly authIdentityRepository: Repository<AuthIdentity>;
|
|
10
|
+
private options;
|
|
11
|
+
private readonly jwtService;
|
|
12
|
+
providerId: string;
|
|
13
|
+
private jwtConfig;
|
|
14
|
+
constructor(userRepository: Repository<User>, authIdentityRepository: Repository<AuthIdentity>, options: AuthModuleOptions, jwtService: JwtService);
|
|
15
|
+
validate(credentials: {
|
|
16
|
+
accessToken: string;
|
|
17
|
+
}): Promise<{
|
|
18
|
+
userId: string;
|
|
19
|
+
email: string;
|
|
20
|
+
phone: string;
|
|
21
|
+
metadata: {
|
|
22
|
+
id?: string;
|
|
23
|
+
sub?: string;
|
|
24
|
+
email?: string;
|
|
25
|
+
phone?: string;
|
|
26
|
+
isVerified?: boolean;
|
|
27
|
+
roles?: string[];
|
|
28
|
+
tenantId?: string;
|
|
29
|
+
isMfaEnabled?: boolean;
|
|
30
|
+
isMfaVerified?: boolean;
|
|
31
|
+
sessionId?: string;
|
|
32
|
+
type?: "access" | "refresh";
|
|
33
|
+
exp?: number;
|
|
34
|
+
iat?: number;
|
|
35
|
+
};
|
|
36
|
+
}>;
|
|
37
|
+
getRequiredFields(): string[];
|
|
38
|
+
}
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.JwtAuthProvider = void 0;
|
|
4
|
+
const tslib_1 = require("tslib");
|
|
5
|
+
const common_1 = require("@nestjs/common");
|
|
6
|
+
const base_auth_provider_1 = require("./base-auth.provider");
|
|
7
|
+
const user_entity_1 = require("../entities/user.entity");
|
|
8
|
+
const auth_identity_entity_1 = require("../entities/auth-identity.entity");
|
|
9
|
+
const typeorm_1 = require("typeorm");
|
|
10
|
+
const typeorm_2 = require("@nestjs/typeorm");
|
|
11
|
+
const common_2 = require("@nestjs/common");
|
|
12
|
+
const auth_constants_1 = require("../auth.constants");
|
|
13
|
+
const jwt_service_1 = require("../services/jwt.service");
|
|
14
|
+
let JwtAuthProvider = class JwtAuthProvider extends base_auth_provider_1.BaseAuthProvider {
|
|
15
|
+
constructor(userRepository, authIdentityRepository, options, jwtService) {
|
|
16
|
+
super(userRepository, authIdentityRepository);
|
|
17
|
+
this.userRepository = userRepository;
|
|
18
|
+
this.authIdentityRepository = authIdentityRepository;
|
|
19
|
+
this.options = options;
|
|
20
|
+
this.jwtService = jwtService;
|
|
21
|
+
this.providerId = auth_constants_1.JWT_AUTH_PROVIDER;
|
|
22
|
+
this.jwtConfig = this.options.jwt;
|
|
23
|
+
this.enabled = Boolean(this.jwtConfig);
|
|
24
|
+
}
|
|
25
|
+
async validate(credentials) {
|
|
26
|
+
try {
|
|
27
|
+
const payload = await this.jwtService.verifyToken(credentials.accessToken);
|
|
28
|
+
return {
|
|
29
|
+
userId: payload.sub,
|
|
30
|
+
email: payload.email,
|
|
31
|
+
phone: payload.phone,
|
|
32
|
+
metadata: {
|
|
33
|
+
...payload,
|
|
34
|
+
},
|
|
35
|
+
};
|
|
36
|
+
}
|
|
37
|
+
catch (error) {
|
|
38
|
+
throw new common_1.BadRequestException('Invalid JWT token');
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
getRequiredFields() {
|
|
42
|
+
return ['accessToken'];
|
|
43
|
+
}
|
|
44
|
+
};
|
|
45
|
+
exports.JwtAuthProvider = JwtAuthProvider;
|
|
46
|
+
exports.JwtAuthProvider = JwtAuthProvider = tslib_1.__decorate([
|
|
47
|
+
(0, common_2.Injectable)(),
|
|
48
|
+
tslib_1.__param(0, (0, typeorm_2.InjectRepository)(user_entity_1.User)),
|
|
49
|
+
tslib_1.__param(1, (0, typeorm_2.InjectRepository)(auth_identity_entity_1.AuthIdentity)),
|
|
50
|
+
tslib_1.__param(2, (0, common_1.Inject)(auth_constants_1.AUTH_MODULE_OPTIONS)),
|
|
51
|
+
tslib_1.__metadata("design:paramtypes", [typeorm_1.Repository,
|
|
52
|
+
typeorm_1.Repository, Object, jwt_service_1.JwtService])
|
|
53
|
+
], JwtAuthProvider);
|
|
54
|
+
//# sourceMappingURL=jwt-auth.provider.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"jwt-auth.provider.js","sourceRoot":"","sources":["../../../../../../packages/nest-auth/src/lib/providers/jwt-auth.provider.ts"],"names":[],"mappings":";;;;AAAA,2CAA6D;AAC7D,6DAAwD;AACxD,yDAA+C;AAC/C,2EAAgE;AAChE,qCAAqC;AACrC,6CAAmD;AACnD,2CAA4C;AAE5C,sDAA2E;AAC3E,yDAAqD;AAG9C,IAAM,eAAe,GAArB,MAAM,eAAgB,SAAQ,qCAAgB;IAKjD,YAEI,cAAkD,EAGlD,sBAAkE,EAGlE,OAAkC,EAEjB,UAAsB;QAEvC,KAAK,CAAC,cAAc,EAAE,sBAAsB,CAAC,CAAC;QAV5B,mBAAc,GAAd,cAAc,CAAkB;QAGhC,2BAAsB,GAAtB,sBAAsB,CAA0B;QAG1D,YAAO,GAAP,OAAO,CAAmB;QAEjB,eAAU,GAAV,UAAU,CAAY;QAd3C,eAAU,GAAG,kCAAiB,CAAC;QAkB3B,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC;QAClC,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;IAC3C,CAAC;IAED,KAAK,CAAC,QAAQ,CAAC,WAAoC;QAC/C,IAAI,CAAC;YACD,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,UAAU,CAAC,WAAW,CAAC,WAAW,CAAC,WAAW,CAAC,CAAC;YAE3E,OAAO;gBACH,MAAM,EAAE,OAAO,CAAC,GAAG;gBACnB,KAAK,EAAE,OAAO,CAAC,KAAK;gBACpB,KAAK,EAAE,OAAO,CAAC,KAAK;gBACpB,QAAQ,EAAE;oBACN,GAAG,OAAO;iBACb;aACJ,CAAC;QACN,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACb,MAAM,IAAI,4BAAmB,CAAC,mBAAmB,CAAC,CAAC;QACvD,CAAC;IACL,CAAC;IAED,iBAAiB;QACb,OAAO,CAAC,aAAa,CAAC,CAAC;IAC3B,CAAC;CACJ,CAAA;AA3CY,0CAAe;0BAAf,eAAe;IAD3B,IAAA,mBAAU,GAAE;IAOJ,mBAAA,IAAA,0BAAgB,EAAC,kBAAI,CAAC,CAAA;IAGtB,mBAAA,IAAA,0BAAgB,EAAC,mCAAY,CAAC,CAAA;IAG9B,mBAAA,IAAA,eAAM,EAAC,oCAAmB,CAAC,CAAA;6CALM,oBAAU;QAGF,oBAAU,UAKvB,wBAAU;GAflC,eAAe,CA2C3B"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import { Repository } from 'typeorm';
|
|
2
|
+
import { User } from '../entities/user.entity';
|
|
3
|
+
import { BaseAuthProvider, LinkUserWith } from './base-auth.provider';
|
|
4
|
+
import { AuthIdentity } from '../entities/auth-identity.entity';
|
|
5
|
+
import { AuthModuleOptions } from '../interfaces/auth-module-options.interface';
|
|
6
|
+
export declare class PhoneAuthProvider extends BaseAuthProvider {
|
|
7
|
+
readonly userRepository: Repository<User>;
|
|
8
|
+
readonly authIdentityRepository: Repository<AuthIdentity>;
|
|
9
|
+
private options;
|
|
10
|
+
providerId: string;
|
|
11
|
+
constructor(userRepository: Repository<User>, authIdentityRepository: Repository<AuthIdentity>, options: AuthModuleOptions);
|
|
12
|
+
validate(credentials: {
|
|
13
|
+
phone: string;
|
|
14
|
+
password: string;
|
|
15
|
+
}): Promise<{
|
|
16
|
+
userId: string;
|
|
17
|
+
phone: string;
|
|
18
|
+
metadata: User;
|
|
19
|
+
}>;
|
|
20
|
+
getRequiredFields(): string[];
|
|
21
|
+
linkUserWith(): LinkUserWith;
|
|
22
|
+
}
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.PhoneAuthProvider = void 0;
|
|
4
|
+
const tslib_1 = require("tslib");
|
|
5
|
+
const common_1 = require("@nestjs/common");
|
|
6
|
+
const typeorm_1 = require("@nestjs/typeorm");
|
|
7
|
+
const typeorm_2 = require("typeorm");
|
|
8
|
+
const user_entity_1 = require("../entities/user.entity");
|
|
9
|
+
const base_auth_provider_1 = require("./base-auth.provider");
|
|
10
|
+
const auth_identity_entity_1 = require("../entities/auth-identity.entity");
|
|
11
|
+
const auth_constants_1 = require("../auth.constants");
|
|
12
|
+
let PhoneAuthProvider = class PhoneAuthProvider extends base_auth_provider_1.BaseAuthProvider {
|
|
13
|
+
constructor(userRepository, authIdentityRepository, options) {
|
|
14
|
+
super(userRepository, authIdentityRepository);
|
|
15
|
+
this.userRepository = userRepository;
|
|
16
|
+
this.authIdentityRepository = authIdentityRepository;
|
|
17
|
+
this.options = options;
|
|
18
|
+
this.providerId = auth_constants_1.PHONE_AUTH_PROVIDER;
|
|
19
|
+
this.enabled = this.options.phoneAuth?.enabled;
|
|
20
|
+
}
|
|
21
|
+
async validate(credentials) {
|
|
22
|
+
const identity = await this.findIdentity(credentials.phone);
|
|
23
|
+
if (!identity?.user || !(await identity.user.validatePassword(credentials.password))) {
|
|
24
|
+
throw new common_1.UnauthorizedException('Invalid credentials');
|
|
25
|
+
}
|
|
26
|
+
return {
|
|
27
|
+
userId: identity.user?.phone,
|
|
28
|
+
phone: identity.user?.phone || '',
|
|
29
|
+
metadata: identity.user,
|
|
30
|
+
};
|
|
31
|
+
}
|
|
32
|
+
getRequiredFields() {
|
|
33
|
+
return ['phone', 'password'];
|
|
34
|
+
}
|
|
35
|
+
linkUserWith() {
|
|
36
|
+
return 'phone';
|
|
37
|
+
}
|
|
38
|
+
};
|
|
39
|
+
exports.PhoneAuthProvider = PhoneAuthProvider;
|
|
40
|
+
exports.PhoneAuthProvider = PhoneAuthProvider = tslib_1.__decorate([
|
|
41
|
+
(0, common_1.Injectable)(),
|
|
42
|
+
tslib_1.__param(0, (0, typeorm_1.InjectRepository)(user_entity_1.User)),
|
|
43
|
+
tslib_1.__param(1, (0, typeorm_1.InjectRepository)(auth_identity_entity_1.AuthIdentity)),
|
|
44
|
+
tslib_1.__param(2, (0, common_1.Inject)(auth_constants_1.AUTH_MODULE_OPTIONS)),
|
|
45
|
+
tslib_1.__metadata("design:paramtypes", [typeorm_2.Repository,
|
|
46
|
+
typeorm_2.Repository, Object])
|
|
47
|
+
], PhoneAuthProvider);
|
|
48
|
+
//# sourceMappingURL=phone-auth.provider.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"phone-auth.provider.js","sourceRoot":"","sources":["../../../../../../packages/nest-auth/src/lib/providers/phone-auth.provider.ts"],"names":[],"mappings":";;;;AAAA,2CAA2E;AAC3E,6CAAmD;AACnD,qCAAqC;AACrC,yDAA+C;AAE/C,6DAAsE;AACtE,2EAAgE;AAChE,sDAA6E;AAItE,IAAM,iBAAiB,GAAvB,MAAM,iBAAkB,SAAQ,qCAAgB;IAGnD,YAEI,cAAkD,EAGlD,sBAAkE,EAGlE,OAAkC;QAElC,KAAK,CAAC,cAAc,EAAE,sBAAsB,CAAC,CAAC;QAR5B,mBAAc,GAAd,cAAc,CAAkB;QAGhC,2BAAsB,GAAtB,sBAAsB,CAA0B;QAG1D,YAAO,GAAP,OAAO,CAAmB;QAVtC,eAAU,GAAG,oCAAmB,CAAC;QAc7B,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,OAAO,CAAC;IACnD,CAAC;IAED,KAAK,CAAC,QAAQ,CAAC,WAAgD;QAE3D,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,YAAY,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;QAE5D,IAAI,CAAC,QAAQ,EAAE,IAAI,IAAI,CAAC,CAAC,MAAM,QAAQ,CAAC,IAAI,CAAC,gBAAgB,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC;YACnF,MAAM,IAAI,8BAAqB,CAAC,qBAAqB,CAAC,CAAC;QAC3D,CAAC;QAED,OAAO;YACH,MAAM,EAAE,QAAQ,CAAC,IAAI,EAAE,KAAK;YAC5B,KAAK,EAAE,QAAQ,CAAC,IAAI,EAAE,KAAK,IAAI,EAAE;YACjC,QAAQ,EAAE,QAAQ,CAAC,IAAI;SAC1B,CAAC;IACN,CAAC;IAED,iBAAiB;QACb,OAAO,CAAC,OAAO,EAAE,UAAU,CAAC,CAAC;IACjC,CAAC;IAEQ,YAAY;QACjB,OAAO,OAAO,CAAC;IACnB,CAAC;CACJ,CAAA;AAxCY,8CAAiB;4BAAjB,iBAAiB;IAD7B,IAAA,mBAAU,GAAE;IAKJ,mBAAA,IAAA,0BAAgB,EAAC,kBAAI,CAAC,CAAA;IAGtB,mBAAA,IAAA,0BAAgB,EAAC,mCAAY,CAAC,CAAA;IAG9B,mBAAA,IAAA,eAAM,EAAC,oCAAmB,CAAC,CAAA;6CALM,oBAAU;QAGF,oBAAU;GAR/C,iBAAiB,CAwC7B"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import { Request, Response } from 'express';
|
|
2
|
+
import { JWTTokenPayload, SessionPayload } from '../interfaces/token-payload.interface';
|
|
3
|
+
export declare class RequestContext {
|
|
4
|
+
private static storage;
|
|
5
|
+
readonly id: number;
|
|
6
|
+
request: Request;
|
|
7
|
+
response: Response;
|
|
8
|
+
private constructor();
|
|
9
|
+
static create(request: Request, response: Response, next: () => void): void;
|
|
10
|
+
static current(): RequestContext | undefined;
|
|
11
|
+
static currentRequest(): Request | null;
|
|
12
|
+
static currentUser(): JWTTokenPayload | null;
|
|
13
|
+
static currentSession(): SessionPayload | null;
|
|
14
|
+
static getDeviceInfo(): {
|
|
15
|
+
deviceName: string;
|
|
16
|
+
ipAddress: string;
|
|
17
|
+
browser: string;
|
|
18
|
+
};
|
|
19
|
+
private static getDeviceName;
|
|
20
|
+
private static getBrowser;
|
|
21
|
+
private static getIpAddress;
|
|
22
|
+
}
|
|
@@ -0,0 +1,108 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.RequestContext = void 0;
|
|
4
|
+
const async_hooks_1 = require("async_hooks");
|
|
5
|
+
class RequestContext {
|
|
6
|
+
constructor(request, response) {
|
|
7
|
+
this.id = Math.random();
|
|
8
|
+
this.request = request;
|
|
9
|
+
this.response = response;
|
|
10
|
+
}
|
|
11
|
+
static create(request, response, next) {
|
|
12
|
+
const context = new RequestContext(request, response);
|
|
13
|
+
RequestContext.storage.run(context, () => next());
|
|
14
|
+
}
|
|
15
|
+
static current() {
|
|
16
|
+
return RequestContext.storage.getStore();
|
|
17
|
+
}
|
|
18
|
+
static currentRequest() {
|
|
19
|
+
const requestContext = RequestContext.current();
|
|
20
|
+
return requestContext ? requestContext.request : null;
|
|
21
|
+
}
|
|
22
|
+
static currentUser() {
|
|
23
|
+
const request = RequestContext.currentRequest();
|
|
24
|
+
if (!request['user']) {
|
|
25
|
+
return null;
|
|
26
|
+
}
|
|
27
|
+
return {
|
|
28
|
+
id: request['user'].sub,
|
|
29
|
+
...request['user']
|
|
30
|
+
};
|
|
31
|
+
}
|
|
32
|
+
static currentSession() {
|
|
33
|
+
const request = RequestContext.currentRequest();
|
|
34
|
+
return request ? request['session'] : null;
|
|
35
|
+
}
|
|
36
|
+
static getDeviceInfo() {
|
|
37
|
+
return {
|
|
38
|
+
deviceName: this.getDeviceName(),
|
|
39
|
+
ipAddress: this.getIpAddress(),
|
|
40
|
+
browser: this.getBrowser(),
|
|
41
|
+
};
|
|
42
|
+
}
|
|
43
|
+
static getDeviceName() {
|
|
44
|
+
const request = this.currentRequest();
|
|
45
|
+
if (!request) {
|
|
46
|
+
return 'Unknown Device';
|
|
47
|
+
}
|
|
48
|
+
const userAgent = request.headers['user-agent'] || 'unknown';
|
|
49
|
+
if (userAgent.includes('Windows')) {
|
|
50
|
+
return 'Windows';
|
|
51
|
+
}
|
|
52
|
+
else if (userAgent.includes('Macintosh')) {
|
|
53
|
+
return 'Mac';
|
|
54
|
+
}
|
|
55
|
+
else if (userAgent.includes('Linux')) {
|
|
56
|
+
return 'Linux';
|
|
57
|
+
}
|
|
58
|
+
else if (userAgent.includes('Android')) {
|
|
59
|
+
return 'Android';
|
|
60
|
+
}
|
|
61
|
+
else if (userAgent.includes('iPhone') || userAgent.includes('iPad')) {
|
|
62
|
+
return 'iOS';
|
|
63
|
+
}
|
|
64
|
+
return 'Unknown Device';
|
|
65
|
+
}
|
|
66
|
+
static getBrowser() {
|
|
67
|
+
const request = this.currentRequest();
|
|
68
|
+
if (!request) {
|
|
69
|
+
return 'unknown';
|
|
70
|
+
}
|
|
71
|
+
const userAgent = request.headers['user-agent'] || 'unknown';
|
|
72
|
+
if (userAgent.includes('Chrome') && !userAgent.includes('Chromium')) {
|
|
73
|
+
return 'Chrome';
|
|
74
|
+
}
|
|
75
|
+
if (userAgent.includes('Firefox')) {
|
|
76
|
+
return 'Firefox';
|
|
77
|
+
}
|
|
78
|
+
if (userAgent.includes('Safari') && !userAgent.includes('Chrome')) {
|
|
79
|
+
return 'Safari';
|
|
80
|
+
}
|
|
81
|
+
if (userAgent.includes('Edg')) {
|
|
82
|
+
return 'Edge';
|
|
83
|
+
}
|
|
84
|
+
if (userAgent.includes('Opera') || userAgent.includes('OPR')) {
|
|
85
|
+
return 'Opera';
|
|
86
|
+
}
|
|
87
|
+
if (userAgent.includes('MSIE') || userAgent.includes('Trident/')) {
|
|
88
|
+
return 'Internet Explorer';
|
|
89
|
+
}
|
|
90
|
+
if (userAgent.includes('Brave')) {
|
|
91
|
+
return 'Brave';
|
|
92
|
+
}
|
|
93
|
+
return 'Unknown Browser';
|
|
94
|
+
}
|
|
95
|
+
static getIpAddress() {
|
|
96
|
+
const request = this.currentRequest();
|
|
97
|
+
if (request) {
|
|
98
|
+
return request.ip ||
|
|
99
|
+
request.headers['x-forwarded-for']?.toString() ||
|
|
100
|
+
request.connection.remoteAddress ||
|
|
101
|
+
'unknown';
|
|
102
|
+
}
|
|
103
|
+
return 'unknown';
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
exports.RequestContext = RequestContext;
|
|
107
|
+
RequestContext.storage = new async_hooks_1.AsyncLocalStorage();
|
|
108
|
+
//# sourceMappingURL=request-context.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"request-context.js","sourceRoot":"","sources":["../../../../../../packages/nest-auth/src/lib/request-context/request-context.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.RequestContextMiddleware = void 0;
|
|
4
|
+
const tslib_1 = require("tslib");
|
|
5
|
+
const common_1 = require("@nestjs/common");
|
|
6
|
+
const request_context_1 = require("./request-context");
|
|
7
|
+
let RequestContextMiddleware = class RequestContextMiddleware {
|
|
8
|
+
use(req, res, next) {
|
|
9
|
+
request_context_1.RequestContext.create(req, res, next);
|
|
10
|
+
}
|
|
11
|
+
};
|
|
12
|
+
exports.RequestContextMiddleware = RequestContextMiddleware;
|
|
13
|
+
exports.RequestContextMiddleware = RequestContextMiddleware = tslib_1.__decorate([
|
|
14
|
+
(0, common_1.Injectable)()
|
|
15
|
+
], RequestContextMiddleware);
|
|
16
|
+
//# sourceMappingURL=request-context.middleware.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"request-context.middleware.js","sourceRoot":"","sources":["../../../../../../packages/nest-auth/src/lib/request-context/request-context.middleware.ts"],"names":[],"mappings":";;;;AAAA,2CAA4D;AAE5D,uDAAmD;AAI5C,IAAM,wBAAwB,GAA9B,MAAM,wBAAwB;IAEjC,GAAG,CAAC,GAAG,EAAE,GAAG,EAAE,IAAI;QACd,gCAAc,CAAC,MAAM,CAAC,GAAG,EAAE,GAAG,EAAE,IAAI,CAAC,CAAC;IAC1C,CAAC;CAEJ,CAAA;AANY,4DAAwB;mCAAxB,wBAAwB;IADpC,IAAA,mBAAU,GAAE;GACA,wBAAwB,CAMpC"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import { DataSource, QueryRunner } from 'typeorm';
|
|
2
|
+
export interface AuthMigration {
|
|
3
|
+
name: string;
|
|
4
|
+
up: (queryRunner: QueryRunner) => Promise<void>;
|
|
5
|
+
down: (queryRunner: QueryRunner) => Promise<void>;
|
|
6
|
+
}
|
|
7
|
+
export declare class AuthMigrationService {
|
|
8
|
+
private isSynchronizedEnabled;
|
|
9
|
+
private dataSource;
|
|
10
|
+
private readonly migrationsTableName;
|
|
11
|
+
private migrations;
|
|
12
|
+
constructor(defaultDataSource: DataSource);
|
|
13
|
+
private cloneDataSource;
|
|
14
|
+
onModuleInit(): Promise<void>;
|
|
15
|
+
onModuleDestroy(): Promise<void>;
|
|
16
|
+
runMigrations(dataSource: DataSource, skipMigrations?: string[]): Promise<void>;
|
|
17
|
+
rollbackMigrations(dataSource: DataSource, count?: number): Promise<void>;
|
|
18
|
+
private createMigrationsTable;
|
|
19
|
+
private getExecutedMigrations;
|
|
20
|
+
private recordMigration;
|
|
21
|
+
private removeMigration;
|
|
22
|
+
}
|