mongodb-dynamic-api 4.11.0 → 4.13.0
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/CHANGELOG.md +12 -0
- package/package.json +1 -1
- package/src/interfaces/dynamic-api-route-config.interface.d.ts +56 -8
- package/src/modules/auth/auth.helper.d.ts +13 -3
- package/src/modules/auth/auth.helper.js +20 -6
- package/src/modules/auth/auth.helper.js.map +1 -1
- package/src/modules/auth/auth.module.js +24 -3
- package/src/modules/auth/auth.module.js.map +1 -1
- package/src/modules/auth/dtos/send-otp-code.dto.d.ts +3 -0
- package/src/modules/auth/dtos/send-otp-code.dto.js +24 -0
- package/src/modules/auth/dtos/send-otp-code.dto.js.map +1 -0
- package/src/modules/auth/dtos/verify-otp-code.dto.d.ts +4 -0
- package/src/modules/auth/dtos/verify-otp-code.dto.js +31 -0
- package/src/modules/auth/dtos/verify-otp-code.dto.js.map +1 -0
- package/src/modules/auth/guards/index.d.ts +1 -0
- package/src/modules/auth/guards/index.js +1 -0
- package/src/modules/auth/guards/index.js.map +1 -1
- package/src/modules/auth/guards/passwordless/passwordless.guard.d.ts +6 -0
- package/src/modules/auth/guards/passwordless/passwordless.guard.js +30 -0
- package/src/modules/auth/guards/passwordless/passwordless.guard.js.map +1 -0
- package/src/modules/auth/interfaces/auth-controller.interface.d.ts +7 -0
- package/src/modules/auth/interfaces/auth-options.interface.d.ts +8 -1
- package/src/modules/auth/interfaces/auth-service.interface.d.ts +2 -0
- package/src/modules/auth/mixins/auth-controller.mixin.d.ts +11 -2
- package/src/modules/auth/mixins/auth-controller.mixin.js +39 -1
- package/src/modules/auth/mixins/auth-controller.mixin.js.map +1 -1
- package/src/modules/auth/models/otp-code.model.d.ts +15 -0
- package/src/modules/auth/models/otp-code.model.js +38 -0
- package/src/modules/auth/models/otp-code.model.js.map +1 -0
- package/src/modules/auth/services/base-auth.service.d.ts +7 -2
- package/src/modules/auth/services/base-auth.service.js +38 -1
- package/src/modules/auth/services/base-auth.service.js.map +1 -1
- package/src/routes/create-many/create-many.module.d.ts +2 -2
- package/src/routes/create-many/create-many.module.js.map +1 -1
- package/src/routes/create-one/create-one.module.d.ts +2 -2
- package/src/routes/create-one/create-one.module.js.map +1 -1
- package/src/routes/delete-many/delete-many.module.d.ts +2 -2
- package/src/routes/delete-many/delete-many.module.js.map +1 -1
- package/src/routes/delete-one/delete-one.module.d.ts +2 -2
- package/src/routes/delete-one/delete-one.module.js.map +1 -1
- package/src/routes/duplicate-many/duplicate-many.module.d.ts +2 -2
- package/src/routes/duplicate-many/duplicate-many.module.js.map +1 -1
- package/src/routes/duplicate-one/duplicate-one.module.d.ts +2 -2
- package/src/routes/duplicate-one/duplicate-one.module.js.map +1 -1
- package/src/routes/replace-one/replace-one.module.d.ts +2 -2
- package/src/routes/replace-one/replace-one.module.js.map +1 -1
- package/src/routes/update-many/update-many.module.d.ts +2 -2
- package/src/routes/update-many/update-many.module.js.map +1 -1
- package/src/routes/update-one/update-one.module.d.ts +2 -2
- package/src/routes/update-one/update-one.module.js.map +1 -1
- package/src/version.json +1 -1
- package/test/for-root/auth-api-passwordless.e2e-spec.d.ts +1 -0
- package/test/for-root/auth-api-passwordless.e2e-spec.js +150 -0
- package/test/for-root/auth-api-passwordless.e2e-spec.js.map +1 -0
- package/test/shared/entities/index.d.ts +1 -0
- package/test/shared/entities/index.js +1 -0
- package/test/shared/entities/index.js.map +1 -1
- package/test/shared/entities/passwordless-user.factory.d.ts +12 -0
- package/test/shared/entities/passwordless-user.factory.js +31 -0
- package/test/shared/entities/passwordless-user.factory.js.map +1 -0
- package/tsconfig.tsbuildinfo +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,17 @@
|
|
|
1
1
|
Changelog
|
|
2
2
|
|
|
3
|
+
## [4.13.0](https://github.com/MikeDev75015/mongodb-dynamic-api/compare/v4.12.0...v4.13.0) (2026-05-26)
|
|
4
|
+
|
|
5
|
+
### route-config
|
|
6
|
+
|
|
7
|
+
* **route-config:** replace flat DynamicApiRouteConfig with discriminated union ([6046c61](https://github.com/MikeDev75015/mongodb-dynamic-api/commit/6046c6159eb43e68d9efec5bc5890fd9f4c1aadb))
|
|
8
|
+
|
|
9
|
+
## [4.12.0](https://github.com/MikeDev75015/mongodb-dynamic-api/compare/v4.11.0...v4.12.0) (2026-05-26)
|
|
10
|
+
|
|
11
|
+
### auth
|
|
12
|
+
|
|
13
|
+
* **auth:** add passwordless OTP flow ([858cd49](https://github.com/MikeDev75015/mongodb-dynamic-api/commit/858cd49e348127412e8eaf86f06d94d0784bef63))
|
|
14
|
+
|
|
3
15
|
## [4.11.0](https://github.com/MikeDev75015/mongodb-dynamic-api/compare/v4.10.0...v4.11.0) (2026-05-25)
|
|
4
16
|
|
|
5
17
|
### callbacks
|
package/package.json
CHANGED
|
@@ -4,13 +4,11 @@ import { AbilityPredicate, PredicateBehavior } from './dynamic-api-ability.inter
|
|
|
4
4
|
import { BroadcastConfig } from './dynamic-api-broadcast-config.interface';
|
|
5
5
|
import { CascadeConfig } from './dynamic-api-cascade-config.interface';
|
|
6
6
|
import { DTOsBundle } from './dynamic-api-route-dtos-bundle.type';
|
|
7
|
-
import {
|
|
8
|
-
import { AnyBeforeDeleteCallback, AnyBeforeSaveCallback } from './dynamic-api-service-before-save-callback.interface';
|
|
7
|
+
import { BeforeDeleteCallback, BeforeDeleteManyCallback, BeforeSaveCallback, BeforeSaveCreateContext, BeforeSaveCreateManyContext, BeforeSaveDeleteCallback, BeforeSaveDeleteContext, BeforeSaveDeleteManyCallback, BeforeSaveDeleteManyContext, BeforeSaveDuplicateContext, BeforeSaveDuplicateManyContext, BeforeSaveListCallback, BeforeSaveReplaceContext, BeforeSaveUpdateContext, BeforeSaveUpdateManyContext } from './dynamic-api-service-before-save-callback.interface';
|
|
9
8
|
import { AfterSaveCallback } from './dynamic-api-service-callback.interface';
|
|
10
9
|
import { DynamicApiWebSocketOptions } from './dynamic-api-web-socket.interface';
|
|
11
10
|
type FromUserMap<Entity> = Partial<Record<keyof Entity, string | ((user: unknown) => unknown)>>;
|
|
12
|
-
interface
|
|
13
|
-
type: RouteType;
|
|
11
|
+
interface BaseRouteConfig<Entity extends BaseEntity> {
|
|
14
12
|
isPublic?: boolean;
|
|
15
13
|
disableCache?: boolean;
|
|
16
14
|
description?: string;
|
|
@@ -20,9 +18,6 @@ interface DynamicApiRouteConfig<Entity extends BaseEntity> {
|
|
|
20
18
|
validationPipeOptions?: ValidationPipeOptions;
|
|
21
19
|
abilityPredicate?: AbilityPredicate<Entity>;
|
|
22
20
|
predicateBehavior?: PredicateBehavior;
|
|
23
|
-
beforeSaveCallback?: AnyBeforeSaveCallback<Entity>;
|
|
24
|
-
beforeDeleteCallback?: AnyBeforeDeleteCallback<Entity>;
|
|
25
|
-
cascade?: CascadeConfig[];
|
|
26
21
|
callback?: AfterSaveCallback<Entity>;
|
|
27
22
|
webSocket?: DynamicApiWebSocketOptions;
|
|
28
23
|
eventName?: string;
|
|
@@ -31,5 +26,58 @@ interface DynamicApiRouteConfig<Entity extends BaseEntity> {
|
|
|
31
26
|
useInterceptors?: Type<NestInterceptor>[];
|
|
32
27
|
fromUser?: FromUserMap<Entity>;
|
|
33
28
|
}
|
|
29
|
+
interface CreateOneRouteConfig<Entity extends BaseEntity> extends BaseRouteConfig<Entity> {
|
|
30
|
+
type: 'CreateOne';
|
|
31
|
+
beforeSaveCallback?: BeforeSaveCallback<Entity, BeforeSaveCreateContext<Entity>>;
|
|
32
|
+
}
|
|
33
|
+
interface CreateManyRouteConfig<Entity extends BaseEntity> extends BaseRouteConfig<Entity> {
|
|
34
|
+
type: 'CreateMany';
|
|
35
|
+
beforeSaveCallback?: BeforeSaveListCallback<Entity, BeforeSaveCreateManyContext<Entity>>;
|
|
36
|
+
}
|
|
37
|
+
interface UpdateOneRouteConfig<Entity extends BaseEntity> extends BaseRouteConfig<Entity> {
|
|
38
|
+
type: 'UpdateOne';
|
|
39
|
+
beforeSaveCallback?: BeforeSaveCallback<Entity, BeforeSaveUpdateContext<Entity>>;
|
|
40
|
+
}
|
|
41
|
+
interface UpdateManyRouteConfig<Entity extends BaseEntity> extends BaseRouteConfig<Entity> {
|
|
42
|
+
type: 'UpdateMany';
|
|
43
|
+
beforeSaveCallback?: BeforeSaveListCallback<Entity, BeforeSaveUpdateManyContext<Entity>>;
|
|
44
|
+
}
|
|
45
|
+
interface ReplaceOneRouteConfig<Entity extends BaseEntity> extends BaseRouteConfig<Entity> {
|
|
46
|
+
type: 'ReplaceOne';
|
|
47
|
+
beforeSaveCallback?: BeforeSaveCallback<Entity, BeforeSaveReplaceContext<Entity>>;
|
|
48
|
+
}
|
|
49
|
+
interface DuplicateOneRouteConfig<Entity extends BaseEntity> extends BaseRouteConfig<Entity> {
|
|
50
|
+
type: 'DuplicateOne';
|
|
51
|
+
beforeSaveCallback?: BeforeSaveCallback<Entity, BeforeSaveDuplicateContext<Entity>>;
|
|
52
|
+
}
|
|
53
|
+
interface DuplicateManyRouteConfig<Entity extends BaseEntity> extends BaseRouteConfig<Entity> {
|
|
54
|
+
type: 'DuplicateMany';
|
|
55
|
+
beforeSaveCallback?: BeforeSaveListCallback<Entity, BeforeSaveDuplicateManyContext<Entity>>;
|
|
56
|
+
}
|
|
57
|
+
interface DeleteOneRouteConfig<Entity extends BaseEntity> extends BaseRouteConfig<Entity> {
|
|
58
|
+
type: 'DeleteOne';
|
|
59
|
+
beforeSaveCallback?: BeforeSaveDeleteCallback<Entity, BeforeSaveDeleteContext>;
|
|
60
|
+
beforeDeleteCallback?: BeforeDeleteCallback<Entity, BeforeSaveDeleteContext>;
|
|
61
|
+
cascade?: CascadeConfig[];
|
|
62
|
+
}
|
|
63
|
+
interface DeleteManyRouteConfig<Entity extends BaseEntity> extends BaseRouteConfig<Entity> {
|
|
64
|
+
type: 'DeleteMany';
|
|
65
|
+
beforeSaveCallback?: BeforeSaveDeleteManyCallback<Entity, BeforeSaveDeleteManyContext>;
|
|
66
|
+
beforeDeleteCallback?: BeforeDeleteManyCallback<Entity, BeforeSaveDeleteManyContext>;
|
|
67
|
+
cascade?: CascadeConfig[];
|
|
68
|
+
}
|
|
69
|
+
interface GetOneRouteConfig<Entity extends BaseEntity> extends BaseRouteConfig<Entity> {
|
|
70
|
+
type: 'GetOne';
|
|
71
|
+
}
|
|
72
|
+
interface GetManyRouteConfig<Entity extends BaseEntity> extends BaseRouteConfig<Entity> {
|
|
73
|
+
type: 'GetMany';
|
|
74
|
+
}
|
|
75
|
+
interface AggregateRouteConfig<Entity extends BaseEntity> extends BaseRouteConfig<Entity> {
|
|
76
|
+
type: 'Aggregate';
|
|
77
|
+
}
|
|
78
|
+
interface CustomOperationRouteConfig<Entity extends BaseEntity> extends BaseRouteConfig<Entity> {
|
|
79
|
+
type: 'Custom';
|
|
80
|
+
}
|
|
81
|
+
type DynamicApiRouteConfig<Entity extends BaseEntity> = CreateOneRouteConfig<Entity> | CreateManyRouteConfig<Entity> | UpdateOneRouteConfig<Entity> | UpdateManyRouteConfig<Entity> | ReplaceOneRouteConfig<Entity> | DuplicateOneRouteConfig<Entity> | DuplicateManyRouteConfig<Entity> | DeleteOneRouteConfig<Entity> | DeleteManyRouteConfig<Entity> | GetOneRouteConfig<Entity> | GetManyRouteConfig<Entity> | AggregateRouteConfig<Entity> | CustomOperationRouteConfig<Entity>;
|
|
34
82
|
type DynamicAPIRouteConfig<Entity extends BaseEntity> = DynamicApiRouteConfig<Entity>;
|
|
35
|
-
export { DynamicApiRouteConfig, DynamicAPIRouteConfig, FromUserMap };
|
|
83
|
+
export { BaseRouteConfig, CreateOneRouteConfig, CreateManyRouteConfig, UpdateOneRouteConfig, UpdateManyRouteConfig, ReplaceOneRouteConfig, DuplicateOneRouteConfig, DuplicateManyRouteConfig, DeleteOneRouteConfig, DeleteManyRouteConfig, GetOneRouteConfig, GetManyRouteConfig, AggregateRouteConfig, CustomOperationRouteConfig, DynamicApiRouteConfig, DynamicAPIRouteConfig, FromUserMap, };
|
|
@@ -1,12 +1,21 @@
|
|
|
1
1
|
import { Type, ValidationPipeOptions } from '@nestjs/common';
|
|
2
2
|
import { AuthAbilityPredicate, AfterSaveCallback, DynamicAPIServiceProvider, GatewayOptions } from '../../interfaces';
|
|
3
3
|
import { BaseEntity } from '../../models';
|
|
4
|
-
import { AuthControllerConstructor, AuthGatewayConstructor, DynamicApiGetAccountOptions, DynamicApiLoginOptions, DynamicApiRefreshTokenOptions, DynamicApiRegisterOptions, DynamicApiResetPasswordOptions, DynamicApiUpdateAccountOptions } from './interfaces';
|
|
4
|
+
import { AuthControllerConstructor, AuthGatewayConstructor, DynamicApiGetAccountOptions, DynamicApiLoginOptions, DynamicApiRefreshTokenOptions, DynamicApiRegisterOptions, DynamicApiResetPasswordOptions, DynamicApiUpdateAccountOptions, PasswordlessOptions } from './interfaces';
|
|
5
5
|
declare const authServiceProviderName = "DynamicApiAuthService";
|
|
6
6
|
declare const authGatewayProviderName = "DynamicApiAuthGateway";
|
|
7
7
|
declare const localStrategyProviderName = "DynamicApiLocalStrategy";
|
|
8
8
|
declare function createLocalStrategyProvider<Entity extends BaseEntity>(loginField: keyof Entity, passwordField: keyof Entity, abilityPredicate: AuthAbilityPredicate | undefined, customValidate?: (req: any) => Promise<Entity | null>, useStrategy?: Type<any>): DynamicAPIServiceProvider;
|
|
9
|
-
|
|
9
|
+
type AuthServiceProviderOptions<Entity extends BaseEntity> = {
|
|
10
|
+
loginOptions: DynamicApiLoginOptions<Entity>;
|
|
11
|
+
getAccountCallback?: AfterSaveCallback<Entity>;
|
|
12
|
+
register?: DynamicApiRegisterOptions<Entity>;
|
|
13
|
+
resetPasswordOptions?: DynamicApiResetPasswordOptions<Entity>;
|
|
14
|
+
updateAccount?: DynamicApiUpdateAccountOptions<Entity>;
|
|
15
|
+
refreshToken?: DynamicApiRefreshTokenOptions<Entity>;
|
|
16
|
+
passwordlessOptions?: PasswordlessOptions<Entity>;
|
|
17
|
+
};
|
|
18
|
+
declare function createAuthServiceProvider<Entity extends BaseEntity>(userEntity: Type<Entity>, { loginOptions: { loginField, passwordField, additionalFields, callback: loginCallback }, getAccountCallback, register, resetPasswordOptions, updateAccount, refreshToken, passwordlessOptions, }: AuthServiceProviderOptions<Entity>): DynamicAPIServiceProvider;
|
|
10
19
|
type CreateAuthControllerOptions<Entity extends BaseEntity> = {
|
|
11
20
|
getAccountOptions?: DynamicApiGetAccountOptions<Entity>;
|
|
12
21
|
registerOptions?: DynamicApiRegisterOptions<Entity>;
|
|
@@ -14,6 +23,7 @@ type CreateAuthControllerOptions<Entity extends BaseEntity> = {
|
|
|
14
23
|
resetPasswordOptions?: DynamicApiResetPasswordOptions<Entity>;
|
|
15
24
|
updateAccountOptions?: DynamicApiUpdateAccountOptions<Entity>;
|
|
16
25
|
refreshTokenOptions?: DynamicApiRefreshTokenOptions<Entity>;
|
|
26
|
+
passwordlessOptions?: PasswordlessOptions<Entity>;
|
|
17
27
|
};
|
|
18
28
|
type CreateAuthGatewayOptions<Entity extends BaseEntity> = GatewayOptions & {
|
|
19
29
|
validationPipeOptions?: ValidationPipeOptions;
|
|
@@ -23,6 +33,6 @@ type CreateAuthGatewayOptions<Entity extends BaseEntity> = GatewayOptions & {
|
|
|
23
33
|
updateAccountOptions?: DynamicApiUpdateAccountOptions<Entity>;
|
|
24
34
|
refreshTokenOptions?: DynamicApiRefreshTokenOptions<Entity>;
|
|
25
35
|
};
|
|
26
|
-
declare function createAuthController<Entity extends BaseEntity>(userEntity: Type<Entity>, loginOptions: DynamicApiLoginOptions<Entity>, { getAccountOptions, registerOptions, validationPipeOptions, resetPasswordOptions, updateAccountOptions, refreshTokenOptions, }?: CreateAuthControllerOptions<Entity>): AuthControllerConstructor<Entity>;
|
|
36
|
+
declare function createAuthController<Entity extends BaseEntity>(userEntity: Type<Entity>, loginOptions: DynamicApiLoginOptions<Entity>, { getAccountOptions, registerOptions, validationPipeOptions, resetPasswordOptions, updateAccountOptions, refreshTokenOptions, passwordlessOptions, }?: CreateAuthControllerOptions<Entity>): AuthControllerConstructor<Entity>;
|
|
27
37
|
declare function createAuthGateway<Entity extends BaseEntity>(userEntity: Type<Entity>, loginOptions: DynamicApiLoginOptions<Entity>, { getAccountOptions, registerOptions, resetPasswordOptions, updateAccountOptions, refreshTokenOptions, validationPipeOptions, ...gatewayOptions }: CreateAuthGatewayOptions<Entity>): AuthGatewayConstructor<Entity>;
|
|
28
38
|
export { authServiceProviderName, authGatewayProviderName, createAuthController, createAuthServiceProvider, createAuthGateway, createLocalStrategyProvider, localStrategyProviderName, };
|
|
@@ -29,6 +29,7 @@ const decorators_1 = require("../../decorators");
|
|
|
29
29
|
const dynamic_api_module_1 = require("../../dynamic-api.module");
|
|
30
30
|
const filters_1 = require("../../filters");
|
|
31
31
|
const services_1 = require("../../services");
|
|
32
|
+
const otp_code_model_1 = require("./models/otp-code.model");
|
|
32
33
|
const mixins_1 = require("./mixins");
|
|
33
34
|
const services_2 = require("./services");
|
|
34
35
|
const authServiceProviderName = 'DynamicApiAuthService';
|
|
@@ -92,13 +93,14 @@ function createLocalStrategyProvider(loginField, passwordField, abilityPredicate
|
|
|
92
93
|
useClass: LocalStrategy,
|
|
93
94
|
};
|
|
94
95
|
}
|
|
95
|
-
function createAuthServiceProvider(userEntity, { loginField, passwordField, additionalFields = [], callback: loginCallback }, getAccountCallback, register, resetPasswordOptions, updateAccount, refreshToken) {
|
|
96
|
+
function createAuthServiceProvider(userEntity, { loginOptions: { loginField, passwordField, additionalFields = [], callback: loginCallback }, getAccountCallback, register, resetPasswordOptions, updateAccount, refreshToken, passwordlessOptions, }) {
|
|
96
97
|
let AuthService = class AuthService extends services_2.BaseAuthService {
|
|
97
|
-
constructor(model, jwtService, bcryptService) {
|
|
98
|
-
super(model, jwtService, bcryptService);
|
|
98
|
+
constructor(model, jwtService, bcryptService, otpModel) {
|
|
99
|
+
super(model, jwtService, bcryptService, otpModel);
|
|
99
100
|
this.model = model;
|
|
100
101
|
this.jwtService = jwtService;
|
|
101
102
|
this.bcryptService = bcryptService;
|
|
103
|
+
this.otpModel = otpModel;
|
|
102
104
|
this.entity = userEntity;
|
|
103
105
|
this.additionalRequestFields = additionalFields;
|
|
104
106
|
this.loginField = loginField;
|
|
@@ -112,21 +114,33 @@ function createAuthServiceProvider(userEntity, { loginField, passwordField, addi
|
|
|
112
114
|
this.loginCallback = loginCallback;
|
|
113
115
|
this.getAccountCallback = getAccountCallback;
|
|
114
116
|
this.resetPasswordOptions = resetPasswordOptions;
|
|
117
|
+
this.passwordlessOptions = passwordlessOptions;
|
|
115
118
|
}
|
|
116
119
|
};
|
|
117
120
|
AuthService = __decorate([
|
|
118
121
|
__param(0, (0, mongoose_1.InjectModel)(userEntity.name, dynamic_api_module_1.DynamicApiModule.state.get('connectionName'))),
|
|
122
|
+
__param(3, (0, common_1.Optional)()),
|
|
123
|
+
__param(3, (0, mongoose_1.InjectModel)(otp_code_model_1.OtpCode.name, dynamic_api_module_1.DynamicApiModule.state.get('connectionName'))),
|
|
119
124
|
__metadata("design:paramtypes", [mongoose_2.Model,
|
|
120
125
|
jwt_1.JwtService,
|
|
121
|
-
services_1.BcryptService
|
|
126
|
+
services_1.BcryptService,
|
|
127
|
+
mongoose_2.Model])
|
|
122
128
|
], AuthService);
|
|
123
129
|
return {
|
|
124
130
|
provide: authServiceProviderName,
|
|
125
131
|
useClass: AuthService,
|
|
126
132
|
};
|
|
127
133
|
}
|
|
128
|
-
function createAuthController(userEntity, loginOptions, { getAccountOptions, registerOptions, validationPipeOptions, resetPasswordOptions, updateAccountOptions, refreshTokenOptions, } = {}) {
|
|
129
|
-
let AuthController = class AuthController extends (0, mixins_1.AuthControllerMixin)(userEntity,
|
|
134
|
+
function createAuthController(userEntity, loginOptions, { getAccountOptions, registerOptions, validationPipeOptions, resetPasswordOptions, updateAccountOptions, refreshTokenOptions, passwordlessOptions, } = {}) {
|
|
135
|
+
let AuthController = class AuthController extends (0, mixins_1.AuthControllerMixin)(userEntity, {
|
|
136
|
+
loginOptions,
|
|
137
|
+
registerOptions,
|
|
138
|
+
resetPasswordOptions,
|
|
139
|
+
updateAccountOptions,
|
|
140
|
+
getAccountOptions,
|
|
141
|
+
refreshTokenOptions,
|
|
142
|
+
passwordlessOptions,
|
|
143
|
+
}) {
|
|
130
144
|
constructor(service, broadcastService, jwtService) {
|
|
131
145
|
super(service, broadcastService, jwtService);
|
|
132
146
|
this.service = service;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"auth.helper.js","sourceRoot":"","sources":["../../../../libs/dynamic-api/src/modules/auth/auth.helper.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;
|
|
1
|
+
{"version":3,"file":"auth.helper.js","sourceRoot":"","sources":["../../../../libs/dynamic-api/src/modules/auth/auth.helper.ts"],"names":[],"mappings":"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"}
|
|
@@ -18,6 +18,7 @@ const gateways_1 = require("../../gateways");
|
|
|
18
18
|
const helpers_1 = require("../../helpers");
|
|
19
19
|
const services_1 = require("../../services");
|
|
20
20
|
const auth_helper_1 = require("./auth.helper");
|
|
21
|
+
const otp_code_model_1 = require("./models/otp-code.model");
|
|
21
22
|
const strategies_1 = require("./strategies");
|
|
22
23
|
let AuthModule = AuthModule_1 = class AuthModule {
|
|
23
24
|
configure(consumer) {
|
|
@@ -26,12 +27,13 @@ let AuthModule = AuthModule_1 = class AuthModule {
|
|
|
26
27
|
}
|
|
27
28
|
}
|
|
28
29
|
static forRoot(options) {
|
|
29
|
-
const { userEntity, login: { loginField, passwordField, ...login }, getAccount, register, updateAccount, resetPassword, refreshToken, jwt: { secret, expiresIn }, validationPipeOptions, webSocket, extraImports, extraProviders, extraControllers, } = this.initializeAuthOptions(options);
|
|
30
|
+
const { userEntity, login: { loginField, passwordField, ...login }, getAccount, register, updateAccount, resetPassword, refreshToken, passwordless, jwt: { secret, expiresIn }, validationPipeOptions, webSocket, extraImports, extraProviders, extraControllers, } = this.initializeAuthOptions(options);
|
|
30
31
|
AuthModule_1.useCookie = refreshToken?.useCookie ?? false;
|
|
31
32
|
const { resetPasswordCallback, ...resetPasswordOptionsRest } = resetPassword;
|
|
32
33
|
const resetPasswordOptions = resetPasswordCallback
|
|
33
34
|
? { resetPasswordCallback, ...resetPasswordOptionsRest }
|
|
34
35
|
: undefined;
|
|
36
|
+
const connectionName = dynamic_api_module_1.DynamicApiModule.state.get('connectionName');
|
|
35
37
|
const AuthController = (0, auth_helper_1.createAuthController)(userEntity, { loginField, passwordField, ...login }, {
|
|
36
38
|
getAccountOptions: getAccount,
|
|
37
39
|
registerOptions: register,
|
|
@@ -39,8 +41,17 @@ let AuthModule = AuthModule_1 = class AuthModule {
|
|
|
39
41
|
resetPasswordOptions,
|
|
40
42
|
updateAccountOptions: updateAccount,
|
|
41
43
|
refreshTokenOptions: refreshToken,
|
|
44
|
+
passwordlessOptions: passwordless,
|
|
45
|
+
});
|
|
46
|
+
const AuthServiceProvider = (0, auth_helper_1.createAuthServiceProvider)(userEntity, {
|
|
47
|
+
loginOptions: { loginField, passwordField, ...login },
|
|
48
|
+
getAccountCallback: getAccount?.callback,
|
|
49
|
+
register,
|
|
50
|
+
resetPasswordOptions,
|
|
51
|
+
updateAccount,
|
|
52
|
+
refreshToken,
|
|
53
|
+
passwordlessOptions: passwordless,
|
|
42
54
|
});
|
|
43
|
-
const AuthServiceProvider = (0, auth_helper_1.createAuthServiceProvider)(userEntity, { loginField, passwordField, ...login }, getAccount?.callback, register, resetPasswordOptions, updateAccount, refreshToken);
|
|
44
55
|
const LocalStrategyProvider = (0, auth_helper_1.createLocalStrategyProvider)(loginField, passwordField, login.abilityPredicate, login.customValidate, login.useStrategy);
|
|
45
56
|
const schema = (0, helpers_1.buildSchemaFromEntity)(userEntity);
|
|
46
57
|
services_1.DynamicApiGlobalStateService.addEntitySchema(userEntity, schema);
|
|
@@ -68,6 +79,9 @@ let AuthModule = AuthModule_1 = class AuthModule {
|
|
|
68
79
|
}),
|
|
69
80
|
},
|
|
70
81
|
];
|
|
82
|
+
const otpFeatureModule = passwordless
|
|
83
|
+
? mongoose_1.MongooseModule.forFeature([{ name: otp_code_model_1.OtpCode.name, schema: otp_code_model_1.OtpCodeSchema }], connectionName)
|
|
84
|
+
: undefined;
|
|
71
85
|
return {
|
|
72
86
|
module: AuthModule_1,
|
|
73
87
|
imports: [
|
|
@@ -78,6 +92,7 @@ let AuthModule = AuthModule_1 = class AuthModule {
|
|
|
78
92
|
schema,
|
|
79
93
|
},
|
|
80
94
|
], dynamic_api_module_1.DynamicApiModule.state.get('connectionName')),
|
|
95
|
+
...(otpFeatureModule ? [otpFeatureModule] : []),
|
|
81
96
|
passport_1.PassportModule,
|
|
82
97
|
jwt_1.JwtModule.register({
|
|
83
98
|
global: true,
|
|
@@ -98,7 +113,7 @@ let AuthModule = AuthModule_1 = class AuthModule {
|
|
|
98
113
|
controllers: [AuthController, ...extraControllers],
|
|
99
114
|
};
|
|
100
115
|
}
|
|
101
|
-
static initializeAuthOptions({ userEntity, jwt, login, register, updateAccount, getAccount, resetPassword, refreshToken, validationPipeOptions, webSocket, extraImports = [], extraProviders = [], extraControllers = [], }) {
|
|
116
|
+
static initializeAuthOptions({ userEntity, jwt, login, register, updateAccount, getAccount, resetPassword, refreshToken, passwordless, validationPipeOptions, webSocket, extraImports = [], extraProviders = [], extraControllers = [], }) {
|
|
102
117
|
return {
|
|
103
118
|
userEntity: userEntity,
|
|
104
119
|
jwt: {
|
|
@@ -137,6 +152,12 @@ let AuthModule = AuthModule_1 = class AuthModule {
|
|
|
137
152
|
refreshTokenField: refreshToken?.refreshTokenField,
|
|
138
153
|
useCookie: refreshToken?.useCookie ?? false,
|
|
139
154
|
},
|
|
155
|
+
passwordless: passwordless
|
|
156
|
+
? {
|
|
157
|
+
...passwordless,
|
|
158
|
+
otpExpirationMinutes: passwordless.otpExpirationMinutes ?? 10,
|
|
159
|
+
}
|
|
160
|
+
: undefined,
|
|
140
161
|
validationPipeOptions: validationPipeOptions,
|
|
141
162
|
webSocket,
|
|
142
163
|
extraImports,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"auth.module.js","sourceRoot":"","sources":["../../../../libs/dynamic-api/src/modules/auth/auth.module.ts"],"names":[],"mappings":";;;;;;;;;;AAAA,8CAA8C;AAC9C,2CAAwE;AACxE,qCAAwC;AAExC,+CAAkD;AAClD,+CAAkD;AAClD,iEAA4D;AAC5D,6CAAkE;AAClE,2CAAmF;AAGnF,6CAAyG;AACzG,+CAAyJ;
|
|
1
|
+
{"version":3,"file":"auth.module.js","sourceRoot":"","sources":["../../../../libs/dynamic-api/src/modules/auth/auth.module.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
3
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
4
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
5
|
+
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
6
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
7
|
+
};
|
|
8
|
+
var __metadata = (this && this.__metadata) || function (k, v) {
|
|
9
|
+
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
|
|
10
|
+
};
|
|
11
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
|
+
exports.SendOtpCodeDto = void 0;
|
|
13
|
+
const swagger_1 = require("@nestjs/swagger");
|
|
14
|
+
const class_validator_1 = require("class-validator");
|
|
15
|
+
class SendOtpCodeDto {
|
|
16
|
+
}
|
|
17
|
+
exports.SendOtpCodeDto = SendOtpCodeDto;
|
|
18
|
+
__decorate([
|
|
19
|
+
(0, class_validator_1.IsString)(),
|
|
20
|
+
(0, class_validator_1.IsNotEmpty)(),
|
|
21
|
+
(0, swagger_1.ApiProperty)({ description: 'User identifier (e.g. email address).' }),
|
|
22
|
+
__metadata("design:type", String)
|
|
23
|
+
], SendOtpCodeDto.prototype, "identifier", void 0);
|
|
24
|
+
//# sourceMappingURL=send-otp-code.dto.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"send-otp-code.dto.js","sourceRoot":"","sources":["../../../../../libs/dynamic-api/src/modules/auth/dtos/send-otp-code.dto.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,6CAA8C;AAC9C,qDAAuD;AAEvD,MAAa,cAAc;CAK1B;AALD,wCAKC;AADC;IAHC,IAAA,0BAAQ,GAAE;IACV,IAAA,4BAAU,GAAE;IACZ,IAAA,qBAAW,EAAC,EAAE,WAAW,EAAE,uCAAuC,EAAE,CAAC;;kDACnD"}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
3
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
4
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
5
|
+
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
6
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
7
|
+
};
|
|
8
|
+
var __metadata = (this && this.__metadata) || function (k, v) {
|
|
9
|
+
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
|
|
10
|
+
};
|
|
11
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
|
+
exports.VerifyOtpCodeDto = void 0;
|
|
13
|
+
const swagger_1 = require("@nestjs/swagger");
|
|
14
|
+
const class_validator_1 = require("class-validator");
|
|
15
|
+
class VerifyOtpCodeDto {
|
|
16
|
+
}
|
|
17
|
+
exports.VerifyOtpCodeDto = VerifyOtpCodeDto;
|
|
18
|
+
__decorate([
|
|
19
|
+
(0, class_validator_1.IsString)(),
|
|
20
|
+
(0, class_validator_1.IsNotEmpty)(),
|
|
21
|
+
(0, swagger_1.ApiProperty)({ description: 'User identifier (e.g. email address).' }),
|
|
22
|
+
__metadata("design:type", String)
|
|
23
|
+
], VerifyOtpCodeDto.prototype, "identifier", void 0);
|
|
24
|
+
__decorate([
|
|
25
|
+
(0, class_validator_1.IsString)(),
|
|
26
|
+
(0, class_validator_1.IsNotEmpty)(),
|
|
27
|
+
(0, class_validator_1.Length)(6, 6),
|
|
28
|
+
(0, swagger_1.ApiProperty)({ description: '6-digit one-time code sent to the user.' }),
|
|
29
|
+
__metadata("design:type", String)
|
|
30
|
+
], VerifyOtpCodeDto.prototype, "code", void 0);
|
|
31
|
+
//# sourceMappingURL=verify-otp-code.dto.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"verify-otp-code.dto.js","sourceRoot":"","sources":["../../../../../libs/dynamic-api/src/modules/auth/dtos/verify-otp-code.dto.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,6CAA8C;AAC9C,qDAA+D;AAE/D,MAAa,gBAAgB;CAW5B;AAXD,4CAWC;AAPC;IAHC,IAAA,0BAAQ,GAAE;IACV,IAAA,4BAAU,GAAE;IACZ,IAAA,qBAAW,EAAC,EAAE,WAAW,EAAE,uCAAuC,EAAE,CAAC;;oDACnD;AAMnB;IAJC,IAAA,0BAAQ,GAAE;IACV,IAAA,4BAAU,GAAE;IACZ,IAAA,wBAAM,EAAC,CAAC,EAAE,CAAC,CAAC;IACZ,IAAA,qBAAW,EAAC,EAAE,WAAW,EAAE,yCAAyC,EAAE,CAAC;;8CAC3D"}
|
|
@@ -3,4 +3,5 @@ export * from './jwt-refresh/jwt-refresh.guard';
|
|
|
3
3
|
export * from './jwt-socket-auth/jwt-socket-auth.guard';
|
|
4
4
|
export * from './jwt-socket-refresh/jwt-socket-refresh.guard';
|
|
5
5
|
export * from './local-auth/local-auth.guard';
|
|
6
|
+
export * from './passwordless/passwordless.guard';
|
|
6
7
|
export * from './reset-password/reset-password.guard';
|
|
@@ -19,5 +19,6 @@ __exportStar(require("./jwt-refresh/jwt-refresh.guard"), exports);
|
|
|
19
19
|
__exportStar(require("./jwt-socket-auth/jwt-socket-auth.guard"), exports);
|
|
20
20
|
__exportStar(require("./jwt-socket-refresh/jwt-socket-refresh.guard"), exports);
|
|
21
21
|
__exportStar(require("./local-auth/local-auth.guard"), exports);
|
|
22
|
+
__exportStar(require("./passwordless/passwordless.guard"), exports);
|
|
22
23
|
__exportStar(require("./reset-password/reset-password.guard"), exports);
|
|
23
24
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../libs/dynamic-api/src/modules/auth/guards/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,4DAA0C;AAC1C,kEAAgD;AAChD,0EAAwD;AACxD,gFAA8D;AAC9D,gEAA8C;AAC9C,wEAAsD"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../libs/dynamic-api/src/modules/auth/guards/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,4DAA0C;AAC1C,kEAAgD;AAChD,0EAAwD;AACxD,gFAA8D;AAC9D,gEAA8C;AAC9C,oEAAkD;AAClD,wEAAsD"}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
3
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
4
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
5
|
+
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
6
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
7
|
+
};
|
|
8
|
+
var __metadata = (this && this.__metadata) || function (k, v) {
|
|
9
|
+
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
|
|
10
|
+
};
|
|
11
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
|
+
exports.PasswordlessGuard = void 0;
|
|
13
|
+
const common_1 = require("@nestjs/common");
|
|
14
|
+
let PasswordlessGuard = class PasswordlessGuard {
|
|
15
|
+
constructor(configured) {
|
|
16
|
+
this.configured = configured;
|
|
17
|
+
}
|
|
18
|
+
canActivate(_context) {
|
|
19
|
+
if (!this.configured) {
|
|
20
|
+
throw new common_1.ServiceUnavailableException('This feature is not available');
|
|
21
|
+
}
|
|
22
|
+
return true;
|
|
23
|
+
}
|
|
24
|
+
};
|
|
25
|
+
exports.PasswordlessGuard = PasswordlessGuard;
|
|
26
|
+
exports.PasswordlessGuard = PasswordlessGuard = __decorate([
|
|
27
|
+
(0, common_1.Injectable)(),
|
|
28
|
+
__metadata("design:paramtypes", [Boolean])
|
|
29
|
+
], PasswordlessGuard);
|
|
30
|
+
//# sourceMappingURL=passwordless.guard.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"passwordless.guard.js","sourceRoot":"","sources":["../../../../../../libs/dynamic-api/src/modules/auth/guards/passwordless/passwordless.guard.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,2CAAwG;AAGjG,IAAM,iBAAiB,GAAvB,MAAM,iBAAiB;IAC5B,YAA6B,UAAmB;QAAnB,eAAU,GAAV,UAAU,CAAS;IAAG,CAAC;IAEpD,WAAW,CAAC,QAA0B;QACpC,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,CAAC;YACrB,MAAM,IAAI,oCAA2B,CAAC,+BAA+B,CAAC,CAAC;QACzE,CAAC;QAED,OAAO,IAAI,CAAC;IACd,CAAC;CACF,CAAA;AAVY,8CAAiB;4BAAjB,iBAAiB;IAD7B,IAAA,mBAAU,GAAE;;GACA,iBAAiB,CAU7B"}
|
|
@@ -28,6 +28,13 @@ interface AuthController<Entity extends BaseEntity> {
|
|
|
28
28
|
logout(req: {
|
|
29
29
|
user: Entity;
|
|
30
30
|
}, res: Response): Promise<void>;
|
|
31
|
+
sendOtpCode(body: {
|
|
32
|
+
identifier: string;
|
|
33
|
+
}): Promise<void>;
|
|
34
|
+
verifyOtpCode(body: {
|
|
35
|
+
identifier: string;
|
|
36
|
+
code: string;
|
|
37
|
+
}, res: Response): Promise<LoginResponse>;
|
|
31
38
|
}
|
|
32
39
|
type AuthControllerConstructor<Entity extends BaseEntity> = new (service: AuthService<Entity>, broadcastService?: DynamicApiBroadcastService, jwtService?: JwtService) => AuthController<Entity>;
|
|
33
40
|
export type { AuthController, AuthControllerConstructor };
|
|
@@ -66,6 +66,12 @@ type DynamicApiRefreshTokenOptions<Entity extends BaseEntity = any> = {
|
|
|
66
66
|
refreshTokenField?: keyof Entity;
|
|
67
67
|
useCookie?: boolean;
|
|
68
68
|
};
|
|
69
|
+
type PasswordlessOptions<Entity extends BaseEntity = any> = {
|
|
70
|
+
otpExpirationMinutes?: number;
|
|
71
|
+
generateCode?: () => string;
|
|
72
|
+
sendCodeCallback: (identifier: string, code: string) => Promise<void>;
|
|
73
|
+
callback?: AfterSaveCallback<Entity>;
|
|
74
|
+
};
|
|
69
75
|
type DynamicApiAuthOptions<Entity extends BaseEntity = any> = {
|
|
70
76
|
userEntity: Type<Entity>;
|
|
71
77
|
jwt?: DynamicApiJWTOptions;
|
|
@@ -75,10 +81,11 @@ type DynamicApiAuthOptions<Entity extends BaseEntity = any> = {
|
|
|
75
81
|
updateAccount?: DynamicApiUpdateAccountOptions<Entity>;
|
|
76
82
|
resetPassword?: Partial<DynamicApiResetPasswordOptions<Entity>>;
|
|
77
83
|
refreshToken?: DynamicApiRefreshTokenOptions<Entity>;
|
|
84
|
+
passwordless?: PasswordlessOptions<Entity>;
|
|
78
85
|
validationPipeOptions?: ValidationPipeOptions;
|
|
79
86
|
webSocket?: DynamicApiWebSocketOptions;
|
|
80
87
|
extraImports?: ModuleMetadata['imports'];
|
|
81
88
|
extraProviders?: ModuleMetadata['providers'];
|
|
82
89
|
extraControllers?: ModuleMetadata['controllers'];
|
|
83
90
|
};
|
|
84
|
-
export type { DynamicApiAuthBroadcastConfig, DynamicApiAuthOptions, DynamicApiRegisterOptions, DynamicApiUpdateAccountOptions, DynamicApiGetAccountOptions, DynamicApiJWTOptions, DynamicApiLoginOptions, DynamicApiRefreshTokenOptions, DynamicApiResetPasswordOptions, };
|
|
91
|
+
export type { DynamicApiAuthBroadcastConfig, DynamicApiAuthOptions, DynamicApiRegisterOptions, DynamicApiUpdateAccountOptions, DynamicApiGetAccountOptions, DynamicApiJWTOptions, DynamicApiLoginOptions, DynamicApiRefreshTokenOptions, DynamicApiResetPasswordOptions, PasswordlessOptions, };
|
|
@@ -13,5 +13,7 @@ interface AuthService<Entity extends BaseEntity> {
|
|
|
13
13
|
changePassword(resetPasswordToken: string, newPassword: string): Promise<void>;
|
|
14
14
|
refreshToken(user: Entity, rawToken?: string): Promise<LoginResponse>;
|
|
15
15
|
logout(user: Entity): Promise<void>;
|
|
16
|
+
sendOtpCode(identifier: string): Promise<void>;
|
|
17
|
+
verifyOtpCode(identifier: string, code: string): Promise<LoginResponse>;
|
|
16
18
|
}
|
|
17
19
|
export type { AuthService, LoginResponse };
|
|
@@ -1,5 +1,14 @@
|
|
|
1
1
|
import { Type } from '@nestjs/common';
|
|
2
2
|
import { BaseEntity } from '../../../models';
|
|
3
|
-
import { AuthControllerConstructor, DynamicApiGetAccountOptions, DynamicApiLoginOptions, DynamicApiRefreshTokenOptions, DynamicApiRegisterOptions, DynamicApiResetPasswordOptions, DynamicApiUpdateAccountOptions } from '../interfaces';
|
|
4
|
-
|
|
3
|
+
import { AuthControllerConstructor, DynamicApiGetAccountOptions, DynamicApiLoginOptions, DynamicApiRefreshTokenOptions, DynamicApiRegisterOptions, DynamicApiResetPasswordOptions, DynamicApiUpdateAccountOptions, PasswordlessOptions } from '../interfaces';
|
|
4
|
+
type AuthControllerMixinOptions<Entity extends BaseEntity> = {
|
|
5
|
+
loginOptions: DynamicApiLoginOptions<Entity>;
|
|
6
|
+
registerOptions?: DynamicApiRegisterOptions<Entity>;
|
|
7
|
+
resetPasswordOptions?: DynamicApiResetPasswordOptions<Entity>;
|
|
8
|
+
updateAccountOptions?: DynamicApiUpdateAccountOptions<Entity>;
|
|
9
|
+
getAccountOptions?: DynamicApiGetAccountOptions<Entity>;
|
|
10
|
+
refreshTokenOptions?: DynamicApiRefreshTokenOptions<Entity>;
|
|
11
|
+
passwordlessOptions?: PasswordlessOptions<Entity>;
|
|
12
|
+
};
|
|
13
|
+
declare function AuthControllerMixin<Entity extends BaseEntity>(userEntity: Type<Entity>, { loginOptions: { loginField, passwordField, additionalFields: additionalRequestFields, useInterceptors: loginUseInterceptors, broadcast: loginBroadcastConfig, }, registerOptions: { additionalFields: additionalRegisterFields, protected: registerProtected, abilityPredicate: registerAbilityPredicate, useInterceptors: registerUseInterceptors, broadcast: registerBroadcastConfig, }, resetPasswordOptions: { resetPasswordUseInterceptors, changePasswordUseInterceptors, ...resetPasswordOptions }, updateAccountOptions: { useInterceptors: updateAccountUseInterceptors, broadcast: updateAccountBroadcastConfig, refreshTokenOnUpdate, ...updateAccountOptions }, getAccountOptions: { useInterceptors: getAccountUseInterceptors, broadcast: getAccountBroadcastConfig, }, refreshTokenOptions: { useInterceptors: refreshTokenUseInterceptors, useCookie, }, passwordlessOptions, }: AuthControllerMixinOptions<Entity>): AuthControllerConstructor<Entity>;
|
|
5
14
|
export { AuthControllerMixin };
|