mongodb-dynamic-api
Version:
Auto generated CRUD API for MongoDB using NestJS
114 lines • 5.88 kB
JavaScript
;
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
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;
return c > 3 && r && Object.defineProperty(target, key, r), r;
};
var AuthModule_1;
Object.defineProperty(exports, "__esModule", { value: true });
exports.AuthModule = void 0;
const common_1 = require("@nestjs/common");
const jwt_1 = require("@nestjs/jwt");
const mongoose_1 = require("@nestjs/mongoose");
const passport_1 = require("@nestjs/passport");
const dynamic_api_module_1 = require("../../dynamic-api.module");
const helpers_1 = require("../../helpers");
const services_1 = require("../../services");
const auth_helper_1 = require("./auth.helper");
const strategies_1 = require("./strategies");
let AuthModule = AuthModule_1 = class AuthModule {
static forRoot(options, extraImports = []) {
const { userEntity, login: { loginField, passwordField, ...login }, register, updateAccount, resetPassword, jwt: { secret, expiresIn }, validationPipeOptions, webSocket, } = this.initializeAuthOptions(options);
const { beforeChangePasswordCallback, resetPasswordCallback, changePasswordCallback, emailField, expirationInMinutes, changePasswordAbilityPredicate, } = resetPassword;
const resetPasswordOptions = resetPasswordCallback
? {
beforeChangePasswordCallback,
resetPasswordCallback,
changePasswordCallback,
emailField,
expirationInMinutes,
changePasswordAbilityPredicate: changePasswordAbilityPredicate,
}
: undefined;
const AuthController = (0, auth_helper_1.createAuthController)(userEntity, { loginField, passwordField, ...login }, register, validationPipeOptions, resetPasswordOptions, updateAccount);
const AuthServiceProvider = (0, auth_helper_1.createAuthServiceProvider)(userEntity, { loginField, passwordField, ...login }, register.callback, resetPasswordOptions, updateAccount.callback, register.beforeSaveCallback, updateAccount.beforeSaveCallback);
const LocalStrategyProvider = (0, auth_helper_1.createLocalStrategyProvider)(loginField, passwordField, login.abilityPredicate);
const schema = (0, helpers_1.buildSchemaFromEntity)(userEntity);
services_1.DynamicApiGlobalStateService.addEntitySchema(userEntity, schema);
const gatewayOptions = (0, helpers_1.initializeConfigFromOptions)(webSocket ?? dynamic_api_module_1.DynamicApiModule.state.get('gatewayOptions'));
const webSocketsProviders = !gatewayOptions ? [] : [
{
provide: auth_helper_1.authGatewayProviderName,
useClass: (0, auth_helper_1.createAuthGateway)(userEntity, {
loginField,
passwordField,
additionalFields: login.additionalFields,
abilityPredicate: login.abilityPredicate,
}, register, validationPipeOptions, resetPasswordOptions, updateAccount, gatewayOptions),
},
];
return {
module: AuthModule_1,
imports: [
...extraImports,
mongoose_1.MongooseModule.forFeature([
{
name: userEntity.name,
schema,
},
], dynamic_api_module_1.DynamicApiModule.state.get('connectionName')),
passport_1.PassportModule,
jwt_1.JwtModule.register({
global: true,
secret,
signOptions: { expiresIn },
}),
],
providers: [
AuthServiceProvider,
LocalStrategyProvider,
strategies_1.JwtStrategy,
services_1.BcryptService,
...webSocketsProviders,
],
controllers: [AuthController],
};
}
static initializeAuthOptions({ userEntity, jwt, login, register, updateAccount, resetPassword, validationPipeOptions, webSocket, }) {
return {
userEntity: userEntity,
jwt: {
secret: jwt?.secret ?? 'dynamic-api-jwt-secret',
expiresIn: jwt?.expiresIn ?? '1d',
},
login: {
...login,
loginField: (login?.loginField ?? 'email'),
passwordField: (login?.passwordField ?? 'password'),
additionalFields: login?.additionalFields ?? [],
},
register: {
...register,
additionalFields: register?.additionalFields ?? [],
protected: register?.protected ?? !!register?.abilityPredicate,
},
updateAccount: {
...updateAccount,
additionalFieldsToExclude: updateAccount?.additionalFieldsToExclude ?? [],
},
resetPassword: {
...resetPassword,
emailField: (!resetPassword?.emailField ? 'email' : String(resetPassword.emailField)),
expirationInMinutes: resetPassword?.expirationInMinutes ?? 10,
},
validationPipeOptions: validationPipeOptions,
webSocket,
};
}
};
exports.AuthModule = AuthModule;
exports.AuthModule = AuthModule = AuthModule_1 = __decorate([
(0, common_1.Module)({})
], AuthModule);
//# sourceMappingURL=auth.module.js.map