nicot-simple-user 1.0.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/.prettierrc +4 -0
- package/Dockerfile.puppeteer +45 -0
- package/LICENSE +22 -0
- package/README.md +414 -0
- package/config.example.yaml +7 -0
- package/dist/app.module.d.ts +2 -0
- package/dist/app.module.js +53 -0
- package/dist/app.module.js.map +1 -0
- package/dist/main.d.ts +1 -0
- package/dist/main.js +26 -0
- package/dist/main.js.map +1 -0
- package/dist/simple-user/aragami-init.d.ts +2 -0
- package/dist/simple-user/aragami-init.js +55 -0
- package/dist/simple-user/aragami-init.js.map +1 -0
- package/dist/simple-user/index.d.ts +6 -0
- package/dist/simple-user/index.js +23 -0
- package/dist/simple-user/index.js.map +1 -0
- package/dist/simple-user/login/login.controller.d.ts +14 -0
- package/dist/simple-user/login/login.controller.js +90 -0
- package/dist/simple-user/login/login.controller.js.map +1 -0
- package/dist/simple-user/module-builder.d.ts +2 -0
- package/dist/simple-user/module-builder.js +34 -0
- package/dist/simple-user/module-builder.js.map +1 -0
- package/dist/simple-user/options.d.ts +26 -0
- package/dist/simple-user/options.js +3 -0
- package/dist/simple-user/options.js.map +1 -0
- package/dist/simple-user/resolver.d.ts +41 -0
- package/dist/simple-user/resolver.js +48 -0
- package/dist/simple-user/resolver.js.map +1 -0
- package/dist/simple-user/send-code/code-context.d.ts +4 -0
- package/dist/simple-user/send-code/code-context.js +8 -0
- package/dist/simple-user/send-code/code-context.js.map +1 -0
- package/dist/simple-user/send-code/decorators.d.ts +2 -0
- package/dist/simple-user/send-code/decorators.js +13 -0
- package/dist/simple-user/send-code/decorators.js.map +1 -0
- package/dist/simple-user/send-code/send-code.controller.d.ts +9 -0
- package/dist/simple-user/send-code/send-code.controller.js +71 -0
- package/dist/simple-user/send-code/send-code.controller.js.map +1 -0
- package/dist/simple-user/send-code/send-code.dto.d.ts +12 -0
- package/dist/simple-user/send-code/send-code.dto.js +55 -0
- package/dist/simple-user/send-code/send-code.dto.js.map +1 -0
- package/dist/simple-user/send-code/send-code.service.d.ts +18 -0
- package/dist/simple-user/send-code/send-code.service.js +144 -0
- package/dist/simple-user/send-code/send-code.service.js.map +1 -0
- package/dist/simple-user/send-code/wait-time.dto.d.ts +3 -0
- package/dist/simple-user/send-code/wait-time.dto.js +29 -0
- package/dist/simple-user/send-code/wait-time.dto.js.map +1 -0
- package/dist/simple-user/simple-user/change-email.dto.d.ts +3 -0
- package/dist/simple-user/simple-user/change-email.dto.js +12 -0
- package/dist/simple-user/simple-user/change-email.dto.js.map +1 -0
- package/dist/simple-user/simple-user/change-password.dto.d.ts +4 -0
- package/dist/simple-user/simple-user/change-password.dto.js +41 -0
- package/dist/simple-user/simple-user/change-password.dto.js.map +1 -0
- package/dist/simple-user/simple-user/email.dto.d.ts +6 -0
- package/dist/simple-user/simple-user/email.dto.js +46 -0
- package/dist/simple-user/simple-user/email.dto.js.map +1 -0
- package/dist/simple-user/simple-user/login.dto.d.ts +11 -0
- package/dist/simple-user/simple-user/login.dto.js +80 -0
- package/dist/simple-user/simple-user/login.dto.js.map +1 -0
- package/dist/simple-user/simple-user/reset-password.dto.d.ts +4 -0
- package/dist/simple-user/simple-user/reset-password.dto.js +32 -0
- package/dist/simple-user/simple-user/reset-password.dto.js.map +1 -0
- package/dist/simple-user/simple-user/simple-user.service.d.ts +33 -0
- package/dist/simple-user/simple-user/simple-user.service.js +338 -0
- package/dist/simple-user/simple-user/simple-user.service.js.map +1 -0
- package/dist/simple-user/simple-user/user-exists.dto.d.ts +3 -0
- package/dist/simple-user/simple-user/user-exists.dto.js +28 -0
- package/dist/simple-user/simple-user/user-exists.dto.js.map +1 -0
- package/dist/simple-user/simple-user.entity.d.ts +40 -0
- package/dist/simple-user/simple-user.entity.js +119 -0
- package/dist/simple-user/simple-user.entity.js.map +1 -0
- package/dist/simple-user/simple-user.module.d.ts +8 -0
- package/dist/simple-user/simple-user.module.js +52 -0
- package/dist/simple-user/simple-user.module.js.map +1 -0
- package/dist/simple-user/tokens.d.ts +2 -0
- package/dist/simple-user/tokens.js +6 -0
- package/dist/simple-user/tokens.js.map +1 -0
- package/dist/simple-user/user-center/patch-me.d.ts +2 -0
- package/dist/simple-user/user-center/patch-me.js +16 -0
- package/dist/simple-user/user-center/patch-me.js.map +1 -0
- package/dist/simple-user/user-center/user-center.controller.d.ts +13 -0
- package/dist/simple-user/user-center/user-center.controller.js +88 -0
- package/dist/simple-user/user-center/user-center.controller.js.map +1 -0
- package/dist/simple-user/user-center/user-center.service.d.ts +2 -0
- package/dist/simple-user/user-center/user-center.service.js +17 -0
- package/dist/simple-user/user-center/user-center.service.js.map +1 -0
- package/dist/tsconfig.build.tsbuildinfo +1 -0
- package/dist/utility/load-config.d.ts +7 -0
- package/dist/utility/load-config.js +61 -0
- package/dist/utility/load-config.js.map +1 -0
- package/eslint.config.mjs +34 -0
- package/install-npm-typeorm.sh +3 -0
- package/nest-cli.json +7 -0
- package/package.json +98 -0
- package/test/app-e2e.spec.ts +242 -0
- package/test/jest-e2e.json +9 -0
- package/tsconfig.build.json +4 -0
- package/tsconfig.json +18 -0
|
@@ -0,0 +1,23 @@
|
|
|
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 __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
14
|
+
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
15
|
+
};
|
|
16
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
|
+
__exportStar(require("./options"), exports);
|
|
18
|
+
__exportStar(require("./simple-user.module"), exports);
|
|
19
|
+
__exportStar(require("./simple-user/simple-user.service"), exports);
|
|
20
|
+
__exportStar(require("./resolver"), exports);
|
|
21
|
+
__exportStar(require("./simple-user.entity"), exports);
|
|
22
|
+
__exportStar(require("aragami"), exports);
|
|
23
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/simple-user/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,4CAA0B;AAC1B,uDAAqC;AACrC,oEAAkD;AAClD,6CAA2B;AAC3B,uDAAqC;AACrC,0CAAwB"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { SimpleUserService } from '../simple-user/simple-user.service';
|
|
2
|
+
import { EmailDto } from '../simple-user/email.dto';
|
|
3
|
+
import { LoginDto, LoginResponseDto } from '../simple-user/login.dto';
|
|
4
|
+
import { UserRiskControlContext } from '../resolver';
|
|
5
|
+
import { ResetPasswordDto } from '../simple-user/reset-password.dto';
|
|
6
|
+
export declare class LoginController {
|
|
7
|
+
private userService;
|
|
8
|
+
constructor(userService: SimpleUserService);
|
|
9
|
+
checkUserExists(dto: EmailDto): Promise<import("nicot").GenericReturnMessageDto<{
|
|
10
|
+
exists: boolean;
|
|
11
|
+
}>>;
|
|
12
|
+
login(dto: LoginDto, rcContext: UserRiskControlContext): Promise<import("nicot").GenericReturnMessageDto<LoginResponseDto>>;
|
|
13
|
+
resetPassword(dto: ResetPasswordDto): Promise<import("nicot").BlankReturnMessageDto>;
|
|
14
|
+
}
|
|
@@ -0,0 +1,90 @@
|
|
|
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
|
+
var __param = (this && this.__param) || function (paramIndex, decorator) {
|
|
12
|
+
return function (target, key) { decorator(target, key, paramIndex); }
|
|
13
|
+
};
|
|
14
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
15
|
+
exports.LoginController = void 0;
|
|
16
|
+
const openapi = require("@nestjs/swagger");
|
|
17
|
+
const common_1 = require("@nestjs/common");
|
|
18
|
+
const swagger_1 = require("@nestjs/swagger");
|
|
19
|
+
const simple_user_service_1 = require("../simple-user/simple-user.service");
|
|
20
|
+
const nicot_1 = require("nicot");
|
|
21
|
+
const user_exists_dto_1 = require("../simple-user/user-exists.dto");
|
|
22
|
+
const email_dto_1 = require("../simple-user/email.dto");
|
|
23
|
+
const login_dto_1 = require("../simple-user/login.dto");
|
|
24
|
+
const resolver_1 = require("../resolver");
|
|
25
|
+
const decorators_1 = require("../send-code/decorators");
|
|
26
|
+
const reset_password_dto_1 = require("../simple-user/reset-password.dto");
|
|
27
|
+
let LoginController = class LoginController {
|
|
28
|
+
constructor(userService) {
|
|
29
|
+
this.userService = userService;
|
|
30
|
+
}
|
|
31
|
+
async checkUserExists(dto) {
|
|
32
|
+
return this.userService.checkUserExists(dto.email);
|
|
33
|
+
}
|
|
34
|
+
async login(dto, rcContext) {
|
|
35
|
+
return this.userService.login(dto, rcContext);
|
|
36
|
+
}
|
|
37
|
+
async resetPassword(dto) {
|
|
38
|
+
return this.userService.resetPassword(dto);
|
|
39
|
+
}
|
|
40
|
+
};
|
|
41
|
+
exports.LoginController = LoginController;
|
|
42
|
+
__decorate([
|
|
43
|
+
(0, common_1.Get)('user-exists'),
|
|
44
|
+
(0, swagger_1.ApiOperation)({
|
|
45
|
+
summary: 'Check if a user exists by email',
|
|
46
|
+
}),
|
|
47
|
+
(0, nicot_1.ApiTypeResponse)(user_exists_dto_1.UserExistsDto),
|
|
48
|
+
openapi.ApiResponse({ status: 200 }),
|
|
49
|
+
__param(0, (0, nicot_1.DataQuery)()),
|
|
50
|
+
__metadata("design:type", Function),
|
|
51
|
+
__metadata("design:paramtypes", [email_dto_1.EmailDto]),
|
|
52
|
+
__metadata("design:returntype", Promise)
|
|
53
|
+
], LoginController.prototype, "checkUserExists", null);
|
|
54
|
+
__decorate([
|
|
55
|
+
(0, common_1.Post)(),
|
|
56
|
+
(0, common_1.HttpCode)(200),
|
|
57
|
+
(0, swagger_1.ApiOperation)({
|
|
58
|
+
summary: 'User login endpoint. The unexisting user will be created automatically.',
|
|
59
|
+
}),
|
|
60
|
+
(0, nicot_1.ApiTypeResponse)(login_dto_1.LoginResponseDto),
|
|
61
|
+
(0, resolver_1.ApiRiskControlContext)(),
|
|
62
|
+
(0, decorators_1.ApiInvalidCode)(),
|
|
63
|
+
(0, nicot_1.ApiError)(404, 'User not found when only password is provided'),
|
|
64
|
+
openapi.ApiResponse({ status: 200 }),
|
|
65
|
+
__param(0, (0, nicot_1.DataBody)()),
|
|
66
|
+
__param(1, (0, resolver_1.PutRiskControlContext)()),
|
|
67
|
+
__metadata("design:type", Function),
|
|
68
|
+
__metadata("design:paramtypes", [login_dto_1.LoginDto, Object]),
|
|
69
|
+
__metadata("design:returntype", Promise)
|
|
70
|
+
], LoginController.prototype, "login", null);
|
|
71
|
+
__decorate([
|
|
72
|
+
(0, common_1.Post)('reset-password'),
|
|
73
|
+
(0, common_1.HttpCode)(200),
|
|
74
|
+
(0, swagger_1.ApiOperation)({
|
|
75
|
+
summary: 'Reset user password using email code.',
|
|
76
|
+
}),
|
|
77
|
+
(0, nicot_1.ApiBlankResponse)(),
|
|
78
|
+
(0, decorators_1.ApiInvalidCode)(),
|
|
79
|
+
openapi.ApiResponse({ status: 200 }),
|
|
80
|
+
__param(0, (0, nicot_1.DataBody)()),
|
|
81
|
+
__metadata("design:type", Function),
|
|
82
|
+
__metadata("design:paramtypes", [reset_password_dto_1.ResetPasswordDto]),
|
|
83
|
+
__metadata("design:returntype", Promise)
|
|
84
|
+
], LoginController.prototype, "resetPassword", null);
|
|
85
|
+
exports.LoginController = LoginController = __decorate([
|
|
86
|
+
(0, common_1.Controller)('login'),
|
|
87
|
+
(0, swagger_1.ApiTags)('login'),
|
|
88
|
+
__metadata("design:paramtypes", [simple_user_service_1.SimpleUserService])
|
|
89
|
+
], LoginController);
|
|
90
|
+
//# sourceMappingURL=login.controller.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"login.controller.js","sourceRoot":"","sources":["../../../src/simple-user/login/login.controller.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,2CAAiE;AACjE,6CAAwD;AACxD,4EAAuE;AACvE,iCAMe;AACf,oEAA+D;AAC/D,wDAAoD;AACpD,wDAAsE;AACtE,0CAIqB;AACrB,wDAAyD;AACzD,0EAAqE;AAI9D,IAAM,eAAe,GAArB,MAAM,eAAe;IAC1B,YAAoB,WAA8B;QAA9B,gBAAW,GAAX,WAAW,CAAmB;IAAG,CAAC;IAOhD,AAAN,KAAK,CAAC,eAAe,CAAc,GAAa;QAC9C,OAAO,IAAI,CAAC,WAAW,CAAC,eAAe,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;IACrD,CAAC;IAYK,AAAN,KAAK,CAAC,KAAK,CACG,GAAa,EACA,SAAiC;QAE1D,OAAO,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,GAAG,EAAE,SAAS,CAAC,CAAC;IAChD,CAAC;IASK,AAAN,KAAK,CAAC,aAAa,CAAa,GAAqB;QACnD,OAAO,IAAI,CAAC,WAAW,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC;IAC7C,CAAC;CACF,CAAA;AAvCY,0CAAe;AAQpB;IALL,IAAA,YAAG,EAAC,aAAa,CAAC;IAClB,IAAA,sBAAY,EAAC;QACZ,OAAO,EAAE,iCAAiC;KAC3C,CAAC;IACD,IAAA,uBAAe,EAAC,+BAAa,CAAC;;IACR,WAAA,IAAA,iBAAS,GAAE,CAAA;;qCAAM,oBAAQ;;sDAE/C;AAYK;IAVL,IAAA,aAAI,GAAE;IACN,IAAA,iBAAQ,EAAC,GAAG,CAAC;IACb,IAAA,sBAAY,EAAC;QACZ,OAAO,EACL,yEAAyE;KAC5E,CAAC;IACD,IAAA,uBAAe,EAAC,4BAAgB,CAAC;IACjC,IAAA,gCAAqB,GAAE;IACvB,IAAA,2BAAc,GAAE;IAChB,IAAA,gBAAQ,EAAC,GAAG,EAAE,+CAA+C,CAAC;kCARrD,GAAG;IAUV,WAAA,IAAA,gBAAQ,GAAE,CAAA;IACV,WAAA,IAAA,gCAAqB,GAAE,CAAA;;qCADP,oBAAQ;;4CAI1B;AASK;IAPL,IAAA,aAAI,EAAC,gBAAgB,CAAC;IACtB,IAAA,iBAAQ,EAAC,GAAG,CAAC;IACb,IAAA,sBAAY,EAAC;QACZ,OAAO,EAAE,uCAAuC;KACjD,CAAC;IACD,IAAA,wBAAgB,GAAE;IAClB,IAAA,2BAAc,GAAE;kCALP,GAAG;IAMQ,WAAA,IAAA,gBAAQ,GAAE,CAAA;;qCAAM,qCAAgB;;oDAEpD;0BAtCU,eAAe;IAF3B,IAAA,mBAAU,EAAC,OAAO,CAAC;IACnB,IAAA,iBAAO,EAAC,OAAO,CAAC;qCAEkB,uCAAiB;GADvC,eAAe,CAuC3B"}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var _a;
|
|
3
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
4
|
+
exports.MODULE_OPTIONS_TOKEN = exports.ConfigurableModuleClass = void 0;
|
|
5
|
+
const common_1 = require("@nestjs/common");
|
|
6
|
+
const simple_user_entity_1 = require("./simple-user.entity");
|
|
7
|
+
const tokens_1 = require("./tokens");
|
|
8
|
+
const typeorm_1 = require("@nestjs/typeorm");
|
|
9
|
+
_a = new common_1.ConfigurableModuleBuilder()
|
|
10
|
+
.setExtras({
|
|
11
|
+
userClass: simple_user_entity_1.SimpleUser,
|
|
12
|
+
isGlobal: false,
|
|
13
|
+
}, (definition, extras) => {
|
|
14
|
+
return {
|
|
15
|
+
...definition,
|
|
16
|
+
imports: [
|
|
17
|
+
...(definition.imports || []),
|
|
18
|
+
typeorm_1.TypeOrmModule.forFeature([extras.userClass], extras.userConnectionName),
|
|
19
|
+
],
|
|
20
|
+
providers: [
|
|
21
|
+
...(definition.providers || []),
|
|
22
|
+
{
|
|
23
|
+
provide: tokens_1.OptionsExToken,
|
|
24
|
+
useValue: extras,
|
|
25
|
+
},
|
|
26
|
+
{
|
|
27
|
+
provide: tokens_1.UserRepoToken,
|
|
28
|
+
useExisting: (0, typeorm_1.getRepositoryToken)(extras.userClass, extras.userConnectionName || undefined),
|
|
29
|
+
},
|
|
30
|
+
],
|
|
31
|
+
};
|
|
32
|
+
})
|
|
33
|
+
.build(), exports.ConfigurableModuleClass = _a.ConfigurableModuleClass, exports.MODULE_OPTIONS_TOKEN = _a.MODULE_OPTIONS_TOKEN;
|
|
34
|
+
//# sourceMappingURL=module-builder.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"module-builder.js","sourceRoot":"","sources":["../../src/simple-user/module-builder.ts"],"names":[],"mappings":";;;;AAAA,2CAA2D;AAE3D,6DAAkD;AAClD,qCAAyD;AACzD,6CAAoE;AAEvD,KACX,IAAI,kCAAyB,EAAqB;KAC/C,SAAS,CACR;IACE,SAAS,EAAE,+BAAU;IACrB,QAAQ,EAAE,KAAK;CAChB,EACD,CAAC,UAAU,EAAE,MAAM,EAAE,EAAE;IACrB,OAAO;QACL,GAAG,UAAU;QACb,OAAO,EAAE;YACP,GAAG,CAAC,UAAU,CAAC,OAAO,IAAI,EAAE,CAAC;YAC7B,uBAAa,CAAC,UAAU,CACtB,CAAC,MAAM,CAAC,SAAS,CAAC,EAClB,MAAM,CAAC,kBAAkB,CAC1B;SACF;QACD,SAAS,EAAE;YACT,GAAG,CAAC,UAAU,CAAC,SAAS,IAAI,EAAE,CAAC;YAC/B;gBACE,OAAO,EAAE,uBAAc;gBACvB,QAAQ,EAAE,MAAM;aACjB;YACD;gBACE,OAAO,EAAE,sBAAa;gBACtB,WAAW,EAAE,IAAA,4BAAkB,EAC7B,MAAM,CAAC,SAAS,EAChB,MAAM,CAAC,kBAAkB,IAAI,SAAS,CACvC;aACF;SACF;KACF,CAAC;AACJ,CAAC,CACF;KACA,KAAK,EAAE,EAlCG,+BAAuB,+BAAE,4BAAoB,2BAkC/C"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import { AragamiOptions, Awaitable } from 'aragami';
|
|
2
|
+
import { ClassType } from 'nicot';
|
|
3
|
+
import { SimpleUser } from './simple-user.entity';
|
|
4
|
+
import { CrudOptions } from 'nicot';
|
|
5
|
+
import { SendCodeDto } from './send-code/send-code.dto';
|
|
6
|
+
export interface SimpleUserExtraOptions {
|
|
7
|
+
userClass?: ClassType<SimpleUser>;
|
|
8
|
+
userServiceCrudExtras?: CrudOptions<SimpleUser>;
|
|
9
|
+
userConnectionName?: string;
|
|
10
|
+
isGlobal?: boolean;
|
|
11
|
+
}
|
|
12
|
+
export interface SimpleUserOptions {
|
|
13
|
+
allowAnonymousUsers?: boolean;
|
|
14
|
+
redisUrl?: string;
|
|
15
|
+
aragamiExtras?: AragamiOptions;
|
|
16
|
+
loginExpiryTimeMs?: number;
|
|
17
|
+
afterPutUser?: (user: SimpleUser) => Awaitable<SimpleUser | undefined>;
|
|
18
|
+
sendCodeGenerator: (ctx: SendCodeDto) => Awaitable<string>;
|
|
19
|
+
sendCodeValidTimeMs?: number;
|
|
20
|
+
sendCodeCooldownTimeMs?: number;
|
|
21
|
+
verifyCodeMaxAttempts?: number;
|
|
22
|
+
verifyCodeBlockTimeMs?: number;
|
|
23
|
+
passwordMaxAttempts?: number;
|
|
24
|
+
passwordBlockTimeMs?: number;
|
|
25
|
+
onMigrateUser?: (oldUser: SimpleUser, newUser: SimpleUser) => Awaitable<void>;
|
|
26
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"options.js","sourceRoot":"","sources":["../../src/simple-user/options.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
import { CombinedParamResolver, ParamResolver, TransformParamResolver, TypeFromParamResolver } from 'nicot';
|
|
2
|
+
export declare const userTokenResolver: ParamResolver<import("nicot").AnyReq>;
|
|
3
|
+
export declare const userSsaidResolver: ParamResolver<import("nicot").AnyReq>;
|
|
4
|
+
export declare const ipResolver: ParamResolver<import("nicot").AnyReq>;
|
|
5
|
+
export declare const userContextResolver: CombinedParamResolver<{
|
|
6
|
+
token: ParamResolver<import("nicot").AnyReq>;
|
|
7
|
+
ssaid: ParamResolver<import("nicot").AnyReq>;
|
|
8
|
+
ip: ParamResolver<import("nicot").AnyReq>;
|
|
9
|
+
}, import("nicot").AnyReq>;
|
|
10
|
+
export type UserContext = TypeFromParamResolver<typeof userContextResolver> & {
|
|
11
|
+
forceAllowAnonymous?: boolean;
|
|
12
|
+
};
|
|
13
|
+
export declare const userResolver: TransformParamResolver<{
|
|
14
|
+
token: string;
|
|
15
|
+
ssaid: string;
|
|
16
|
+
ip: string;
|
|
17
|
+
}, import("./simple-user.entity").SimpleUser, import("nicot").AnyReq>;
|
|
18
|
+
export declare const userResolverProvider: {
|
|
19
|
+
token: string;
|
|
20
|
+
provider: import("nicot").TypedFactoryProvider<["REQUEST", typeof import("@nestjs/core").ModuleRef], import("./simple-user.entity").SimpleUser>;
|
|
21
|
+
inject: () => PropertyDecorator & ParameterDecorator;
|
|
22
|
+
};
|
|
23
|
+
export declare const InjectCurrentUser: () => ParameterDecorator & PropertyDecorator;
|
|
24
|
+
export declare const PutCurrentUser: (...pipes: (import("@nestjs/common").Type<import("@nestjs/common").PipeTransform> | import("@nestjs/common").PipeTransform)[]) => ParameterDecorator;
|
|
25
|
+
export declare const ApiCurrentUser: (extras2?: import("@nestjs/swagger").ApiHeaderOptions | import("@nestjs/swagger").ApiQueryOptions) => ClassDecorator & MethodDecorator;
|
|
26
|
+
export declare const userRiskControlResolver: CombinedParamResolver<{
|
|
27
|
+
ip: ParamResolver<import("nicot").AnyReq>;
|
|
28
|
+
ssaid: ParamResolver<import("nicot").AnyReq>;
|
|
29
|
+
}, import("nicot").AnyReq>;
|
|
30
|
+
export type UserRiskControlContext = TypeFromParamResolver<typeof userRiskControlResolver>;
|
|
31
|
+
export declare const userRiskControlResolverProvider: {
|
|
32
|
+
token: string;
|
|
33
|
+
provider: import("nicot").TypedFactoryProvider<["REQUEST", typeof import("@nestjs/core").ModuleRef], {
|
|
34
|
+
ip: string;
|
|
35
|
+
ssaid: string;
|
|
36
|
+
}>;
|
|
37
|
+
inject: () => PropertyDecorator & ParameterDecorator;
|
|
38
|
+
};
|
|
39
|
+
export declare const InjectRiskControlContext: () => ParameterDecorator & PropertyDecorator;
|
|
40
|
+
export declare const PutRiskControlContext: (...pipes: (import("@nestjs/common").Type<import("@nestjs/common").PipeTransform> | import("@nestjs/common").PipeTransform)[]) => ParameterDecorator;
|
|
41
|
+
export declare const ApiRiskControlContext: (extras2?: import("@nestjs/swagger").ApiHeaderOptions | import("@nestjs/swagger").ApiQueryOptions) => ClassDecorator & MethodDecorator;
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.ApiRiskControlContext = exports.PutRiskControlContext = exports.InjectRiskControlContext = exports.userRiskControlResolverProvider = exports.userRiskControlResolver = exports.ApiCurrentUser = exports.PutCurrentUser = exports.InjectCurrentUser = exports.userResolverProvider = exports.userResolver = exports.userContextResolver = exports.ipResolver = exports.userSsaidResolver = exports.userTokenResolver = void 0;
|
|
4
|
+
const nicot_1 = require("nicot");
|
|
5
|
+
const simple_user_service_1 = require("./simple-user/simple-user.service");
|
|
6
|
+
const core_1 = require("@nestjs/core");
|
|
7
|
+
exports.userTokenResolver = new nicot_1.ParamResolver({
|
|
8
|
+
paramType: 'header',
|
|
9
|
+
paramName: 'x-client-token',
|
|
10
|
+
description: 'User authentication token. Present when user is logged in',
|
|
11
|
+
});
|
|
12
|
+
exports.userSsaidResolver = new nicot_1.ParamResolver({
|
|
13
|
+
paramType: 'header',
|
|
14
|
+
paramName: 'x-client-ssaid',
|
|
15
|
+
description: 'User session identifier. MUST PRESENT in all requests from the client',
|
|
16
|
+
required: true,
|
|
17
|
+
});
|
|
18
|
+
exports.ipResolver = new nicot_1.ParamResolver((req) => {
|
|
19
|
+
const ip = req.ip;
|
|
20
|
+
if (ip.startsWith('::ffff:')) {
|
|
21
|
+
return ip.substring(7);
|
|
22
|
+
}
|
|
23
|
+
return ip;
|
|
24
|
+
});
|
|
25
|
+
exports.userContextResolver = new nicot_1.CombinedParamResolver({
|
|
26
|
+
token: exports.userTokenResolver,
|
|
27
|
+
ssaid: exports.userSsaidResolver,
|
|
28
|
+
ip: exports.ipResolver,
|
|
29
|
+
});
|
|
30
|
+
exports.userResolver = new nicot_1.TransformParamResolver(exports.userContextResolver, async (ctx, ref, req) => {
|
|
31
|
+
const userService = await ref.resolve(simple_user_service_1.SimpleUserService, core_1.ContextIdFactory.getByRequest(req), { strict: false });
|
|
32
|
+
return await userService.findOrCreateUser(ctx);
|
|
33
|
+
}).addExtraDecorator(() => (0, nicot_1.ApiError)(401, 'Invalid user token'), '__simple_user_401__');
|
|
34
|
+
exports.userResolverProvider = exports.userResolver.toRequestScopedProvider();
|
|
35
|
+
const InjectCurrentUser = () => (0, nicot_1.ApiInject)(exports.userResolverProvider.token);
|
|
36
|
+
exports.InjectCurrentUser = InjectCurrentUser;
|
|
37
|
+
exports.PutCurrentUser = exports.userResolver.toParamDecorator();
|
|
38
|
+
exports.ApiCurrentUser = exports.userResolver.toApiPropertyDecorator();
|
|
39
|
+
exports.userRiskControlResolver = new nicot_1.CombinedParamResolver({
|
|
40
|
+
ip: exports.ipResolver,
|
|
41
|
+
ssaid: exports.userSsaidResolver,
|
|
42
|
+
});
|
|
43
|
+
exports.userRiskControlResolverProvider = exports.userRiskControlResolver.toRequestScopedProvider();
|
|
44
|
+
const InjectRiskControlContext = () => (0, nicot_1.ApiInject)(exports.userRiskControlResolverProvider.token);
|
|
45
|
+
exports.InjectRiskControlContext = InjectRiskControlContext;
|
|
46
|
+
exports.PutRiskControlContext = exports.userRiskControlResolver.toParamDecorator();
|
|
47
|
+
exports.ApiRiskControlContext = exports.userRiskControlResolver.toApiPropertyDecorator();
|
|
48
|
+
//# sourceMappingURL=resolver.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"resolver.js","sourceRoot":"","sources":["../../src/simple-user/resolver.ts"],"names":[],"mappings":";;;AAAA,iCAOe;AACf,2EAAsE;AACtE,uCAAgD;AAEnC,QAAA,iBAAiB,GAAG,IAAI,qBAAa,CAAC;IACjD,SAAS,EAAE,QAAQ;IACnB,SAAS,EAAE,gBAAgB;IAC3B,WAAW,EAAE,2DAA2D;CACzE,CAAC,CAAC;AAEU,QAAA,iBAAiB,GAAG,IAAI,qBAAa,CAAC;IACjD,SAAS,EAAE,QAAQ;IACnB,SAAS,EAAE,gBAAgB;IAC3B,WAAW,EACT,uEAAuE;IACzE,QAAQ,EAAE,IAAI;CACf,CAAC,CAAC;AAEU,QAAA,UAAU,GAAG,IAAI,qBAAa,CAAC,CAAC,GAAG,EAAE,EAAE;IAClD,MAAM,EAAE,GAAG,GAAG,CAAC,EAAE,CAAC;IAClB,IAAI,EAAE,CAAC,UAAU,CAAC,SAAS,CAAC,EAAE,CAAC;QAC7B,OAAO,EAAE,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;IACzB,CAAC;IACD,OAAO,EAAE,CAAC;AACZ,CAAC,CAAC,CAAC;AAEU,QAAA,mBAAmB,GAAG,IAAI,6BAAqB,CAAC;IAC3D,KAAK,EAAE,yBAAiB;IACxB,KAAK,EAAE,yBAAiB;IACxB,EAAE,EAAE,kBAAU;CACf,CAAC,CAAC;AAMU,QAAA,YAAY,GAAG,IAAI,8BAAsB,CACpD,2BAAmB,EACnB,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE;IACtB,MAAM,WAAW,GAAG,MAAM,GAAG,CAAC,OAAO,CACnC,uCAAiB,EACjB,uBAAgB,CAAC,YAAY,CAAC,GAAG,CAAC,EAClC,EAAE,MAAM,EAAE,KAAK,EAAE,CAClB,CAAC;IACF,OAAO,MAAM,WAAW,CAAC,gBAAgB,CAAC,GAAG,CAAC,CAAC;AACjD,CAAC,CACF,CAAC,iBAAiB,CACjB,GAAG,EAAE,CAAC,IAAA,gBAAQ,EAAC,GAAG,EAAE,oBAAoB,CAAC,EACzC,qBAAqB,CACtB,CAAC;AAEW,QAAA,oBAAoB,GAAG,oBAAY,CAAC,uBAAuB,EAAE,CAAC;AACpE,MAAM,iBAAiB,GAAG,GAAG,EAAE,CAAC,IAAA,iBAAS,EAAC,4BAAoB,CAAC,KAAK,CAAC,CAAC;AAAhE,QAAA,iBAAiB,qBAA+C;AAChE,QAAA,cAAc,GAAG,oBAAY,CAAC,gBAAgB,EAAE,CAAC;AACjD,QAAA,cAAc,GAAG,oBAAY,CAAC,sBAAsB,EAAE,CAAC;AAEvD,QAAA,uBAAuB,GAAG,IAAI,6BAAqB,CAAC;IAC/D,EAAE,EAAE,kBAAU;IACd,KAAK,EAAE,yBAAiB;CACzB,CAAC,CAAC;AAKU,QAAA,+BAA+B,GAC1C,+BAAuB,CAAC,uBAAuB,EAAE,CAAC;AAC7C,MAAM,wBAAwB,GAAG,GAAG,EAAE,CAC3C,IAAA,iBAAS,EAAC,uCAA+B,CAAC,KAAK,CAAC,CAAC;AADtC,QAAA,wBAAwB,4BACc;AACtC,QAAA,qBAAqB,GAAG,+BAAuB,CAAC,gBAAgB,EAAE,CAAC;AACnE,QAAA,qBAAqB,GAChC,+BAAuB,CAAC,sBAAsB,EAAE,CAAC"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.CodeContext = void 0;
|
|
4
|
+
const send_code_dto_1 = require("./send-code.dto");
|
|
5
|
+
class CodeContext extends send_code_dto_1.SendCodeDto {
|
|
6
|
+
}
|
|
7
|
+
exports.CodeContext = CodeContext;
|
|
8
|
+
//# sourceMappingURL=code-context.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"code-context.js","sourceRoot":"","sources":["../../../src/simple-user/send-code/code-context.ts"],"names":[],"mappings":";;;AAAA,mDAA8C;AAE9C,MAAa,WAAY,SAAQ,2BAAW;CAE3C;AAFD,kCAEC"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.ApiInvalidCode = exports.ApiTooManyRequests = void 0;
|
|
4
|
+
const nicot_1 = require("nicot");
|
|
5
|
+
const wait_time_dto_1 = require("./wait-time.dto");
|
|
6
|
+
const ApiTooManyRequests = () => (0, nicot_1.ApiErrorTyped)(429, 'Too many requests', wait_time_dto_1.WaitTimeDto);
|
|
7
|
+
exports.ApiTooManyRequests = ApiTooManyRequests;
|
|
8
|
+
const ApiInvalidCode = () => (0, nicot_1.MergeClassOrMethodDecorators)([
|
|
9
|
+
(0, nicot_1.ApiError)(403, 'Invalid email code (or password when login)'),
|
|
10
|
+
(0, exports.ApiTooManyRequests)(),
|
|
11
|
+
]);
|
|
12
|
+
exports.ApiInvalidCode = ApiInvalidCode;
|
|
13
|
+
//# sourceMappingURL=decorators.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"decorators.js","sourceRoot":"","sources":["../../../src/simple-user/send-code/decorators.ts"],"names":[],"mappings":";;;AAAA,iCAA8E;AAC9E,mDAA8C;AAEvC,MAAM,kBAAkB,GAAG,GAAG,EAAE,CACrC,IAAA,qBAAa,EAAC,GAAG,EAAE,mBAAmB,EAAE,2BAAW,CAAC,CAAC;AAD1C,QAAA,kBAAkB,sBACwB;AAEhD,MAAM,cAAc,GAAG,GAAG,EAAE,CACjC,IAAA,oCAA4B,EAAC;IAC3B,IAAA,gBAAQ,EAAC,GAAG,EAAE,6CAA6C,CAAC;IAC5D,IAAA,0BAAkB,GAAE;CACrB,CAAC,CAAC;AAJQ,QAAA,cAAc,kBAItB"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { SendCodeService } from './send-code.service';
|
|
2
|
+
import { UserRiskControlContext } from '../resolver';
|
|
3
|
+
import { SendCodeDto, VerifyCodeDto } from './send-code.dto';
|
|
4
|
+
export declare class SendCodeController {
|
|
5
|
+
private service;
|
|
6
|
+
constructor(service: SendCodeService);
|
|
7
|
+
sendCode(dto: SendCodeDto, riskControlContext: UserRiskControlContext): Promise<import("nicot").BlankReturnMessageDto>;
|
|
8
|
+
verifyCode(dto: VerifyCodeDto): Promise<import("nicot").BlankReturnMessageDto>;
|
|
9
|
+
}
|
|
@@ -0,0 +1,71 @@
|
|
|
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
|
+
var __param = (this && this.__param) || function (paramIndex, decorator) {
|
|
12
|
+
return function (target, key) { decorator(target, key, paramIndex); }
|
|
13
|
+
};
|
|
14
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
15
|
+
exports.SendCodeController = void 0;
|
|
16
|
+
const openapi = require("@nestjs/swagger");
|
|
17
|
+
const common_1 = require("@nestjs/common");
|
|
18
|
+
const swagger_1 = require("@nestjs/swagger");
|
|
19
|
+
const send_code_service_1 = require("./send-code.service");
|
|
20
|
+
const resolver_1 = require("../resolver");
|
|
21
|
+
const nicot_1 = require("nicot");
|
|
22
|
+
const decorators_1 = require("./decorators");
|
|
23
|
+
const send_code_dto_1 = require("./send-code.dto");
|
|
24
|
+
let SendCodeController = class SendCodeController {
|
|
25
|
+
constructor(service) {
|
|
26
|
+
this.service = service;
|
|
27
|
+
}
|
|
28
|
+
async sendCode(dto, riskControlContext) {
|
|
29
|
+
return this.service.sendCode(dto, riskControlContext);
|
|
30
|
+
}
|
|
31
|
+
async verifyCode(dto) {
|
|
32
|
+
return this.service.verifyCode(dto, true);
|
|
33
|
+
}
|
|
34
|
+
};
|
|
35
|
+
exports.SendCodeController = SendCodeController;
|
|
36
|
+
__decorate([
|
|
37
|
+
(0, common_1.Post)('send'),
|
|
38
|
+
(0, common_1.HttpCode)(200),
|
|
39
|
+
(0, swagger_1.ApiOperation)({
|
|
40
|
+
summary: 'Send verification code',
|
|
41
|
+
}),
|
|
42
|
+
(0, resolver_1.ApiRiskControlContext)(),
|
|
43
|
+
(0, nicot_1.ApiBlankResponse)(),
|
|
44
|
+
(0, decorators_1.ApiTooManyRequests)(),
|
|
45
|
+
openapi.ApiResponse({ status: 200 }),
|
|
46
|
+
__param(0, (0, nicot_1.DataBody)()),
|
|
47
|
+
__param(1, (0, resolver_1.PutRiskControlContext)()),
|
|
48
|
+
__metadata("design:type", Function),
|
|
49
|
+
__metadata("design:paramtypes", [send_code_dto_1.SendCodeDto, Object]),
|
|
50
|
+
__metadata("design:returntype", Promise)
|
|
51
|
+
], SendCodeController.prototype, "sendCode", null);
|
|
52
|
+
__decorate([
|
|
53
|
+
(0, common_1.Get)('verify'),
|
|
54
|
+
(0, common_1.HttpCode)(200),
|
|
55
|
+
(0, swagger_1.ApiOperation)({
|
|
56
|
+
summary: 'Verify code',
|
|
57
|
+
}),
|
|
58
|
+
(0, nicot_1.ApiBlankResponse)(),
|
|
59
|
+
(0, decorators_1.ApiInvalidCode)(),
|
|
60
|
+
openapi.ApiResponse({ status: 200 }),
|
|
61
|
+
__param(0, (0, nicot_1.DataQuery)()),
|
|
62
|
+
__metadata("design:type", Function),
|
|
63
|
+
__metadata("design:paramtypes", [send_code_dto_1.VerifyCodeDto]),
|
|
64
|
+
__metadata("design:returntype", Promise)
|
|
65
|
+
], SendCodeController.prototype, "verifyCode", null);
|
|
66
|
+
exports.SendCodeController = SendCodeController = __decorate([
|
|
67
|
+
(0, common_1.Controller)('send-code'),
|
|
68
|
+
(0, swagger_1.ApiTags)('send-code'),
|
|
69
|
+
__metadata("design:paramtypes", [send_code_service_1.SendCodeService])
|
|
70
|
+
], SendCodeController);
|
|
71
|
+
//# sourceMappingURL=send-code.controller.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"send-code.controller.js","sourceRoot":"","sources":["../../../src/simple-user/send-code/send-code.controller.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,2CAAiE;AACjE,6CAAwD;AACxD,2DAAsD;AACtD,0CAIqB;AACrB,iCAA8D;AAC9D,6CAAkE;AAClE,mDAA6D;AAItD,IAAM,kBAAkB,GAAxB,MAAM,kBAAkB;IAC7B,YAAoB,OAAwB;QAAxB,YAAO,GAAP,OAAO,CAAiB;IAAG,CAAC;IAU1C,AAAN,KAAK,CAAC,QAAQ,CACA,GAAgB,EACH,kBAA0C;QAEnE,OAAO,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,GAAG,EAAE,kBAAkB,CAAC,CAAC;IACxD,CAAC;IASK,AAAN,KAAK,CAAC,UAAU,CAAc,GAAkB;QAC9C,OAAO,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;IAC5C,CAAC;CACF,CAAA;AA5BY,gDAAkB;AAWvB;IARL,IAAA,aAAI,EAAC,MAAM,CAAC;IACZ,IAAA,iBAAQ,EAAC,GAAG,CAAC;IACb,IAAA,sBAAY,EAAC;QACZ,OAAO,EAAE,wBAAwB;KAClC,CAAC;IACD,IAAA,gCAAqB,GAAE;IACvB,IAAA,wBAAgB,GAAE;IAClB,IAAA,+BAAkB,GAAE;kCANX,GAAG;IAQV,WAAA,IAAA,gBAAQ,GAAE,CAAA;IACV,WAAA,IAAA,gCAAqB,GAAE,CAAA;;qCADP,2BAAW;;kDAI7B;AASK;IAPL,IAAA,YAAG,EAAC,QAAQ,CAAC;IACb,IAAA,iBAAQ,EAAC,GAAG,CAAC;IACb,IAAA,sBAAY,EAAC;QACZ,OAAO,EAAE,aAAa;KACvB,CAAC;IACD,IAAA,wBAAgB,GAAE;IAClB,IAAA,2BAAc,GAAE;kCALP,GAAG;IAMK,WAAA,IAAA,iBAAS,GAAE,CAAA;;qCAAM,6BAAa;;oDAE/C;6BA3BU,kBAAkB;IAF9B,IAAA,mBAAU,EAAC,WAAW,CAAC;IACvB,IAAA,iBAAO,EAAC,WAAW,CAAC;qCAEU,mCAAe;GADjC,kBAAkB,CA4B9B"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { EmailDto } from '../simple-user/email.dto';
|
|
2
|
+
export declare enum CodePurpose {
|
|
3
|
+
Login = "Login",
|
|
4
|
+
ResetPassword = "ResetPassword",
|
|
5
|
+
ChangeEmail = "ChangeEmail"
|
|
6
|
+
}
|
|
7
|
+
export declare class SendCodeDto extends EmailDto {
|
|
8
|
+
codePurpose: CodePurpose;
|
|
9
|
+
}
|
|
10
|
+
export declare class VerifyCodeDto extends SendCodeDto {
|
|
11
|
+
code: string;
|
|
12
|
+
}
|
|
@@ -0,0 +1,55 @@
|
|
|
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.VerifyCodeDto = exports.SendCodeDto = exports.CodePurpose = void 0;
|
|
13
|
+
const openapi = require("@nestjs/swagger");
|
|
14
|
+
const class_validator_1 = require("class-validator");
|
|
15
|
+
const swagger_1 = require("@nestjs/swagger");
|
|
16
|
+
const email_dto_1 = require("../simple-user/email.dto");
|
|
17
|
+
var CodePurpose;
|
|
18
|
+
(function (CodePurpose) {
|
|
19
|
+
CodePurpose["Login"] = "Login";
|
|
20
|
+
CodePurpose["ResetPassword"] = "ResetPassword";
|
|
21
|
+
CodePurpose["ChangeEmail"] = "ChangeEmail";
|
|
22
|
+
})(CodePurpose || (exports.CodePurpose = CodePurpose = {}));
|
|
23
|
+
class SendCodeDto extends email_dto_1.EmailDto {
|
|
24
|
+
static _OPENAPI_METADATA_FACTORY() {
|
|
25
|
+
return { codePurpose: { required: true, enum: require("./send-code.dto").CodePurpose } };
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
exports.SendCodeDto = SendCodeDto;
|
|
29
|
+
__decorate([
|
|
30
|
+
(0, class_validator_1.IsEnum)(CodePurpose),
|
|
31
|
+
(0, swagger_1.ApiProperty)({
|
|
32
|
+
description: 'The purpose of the code being sent',
|
|
33
|
+
example: CodePurpose.Login,
|
|
34
|
+
enum: CodePurpose,
|
|
35
|
+
required: true,
|
|
36
|
+
}),
|
|
37
|
+
__metadata("design:type", String)
|
|
38
|
+
], SendCodeDto.prototype, "codePurpose", void 0);
|
|
39
|
+
class VerifyCodeDto extends SendCodeDto {
|
|
40
|
+
static _OPENAPI_METADATA_FACTORY() {
|
|
41
|
+
return { code: { required: true, type: () => String } };
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
exports.VerifyCodeDto = VerifyCodeDto;
|
|
45
|
+
__decorate([
|
|
46
|
+
(0, class_validator_1.IsString)(),
|
|
47
|
+
(0, class_validator_1.IsNotEmpty)(),
|
|
48
|
+
(0, swagger_1.ApiProperty)({
|
|
49
|
+
description: 'The verification code received via email',
|
|
50
|
+
example: '123456',
|
|
51
|
+
required: true,
|
|
52
|
+
}),
|
|
53
|
+
__metadata("design:type", String)
|
|
54
|
+
], VerifyCodeDto.prototype, "code", void 0);
|
|
55
|
+
//# sourceMappingURL=send-code.dto.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"send-code.dto.js","sourceRoot":"","sources":["../../../src/simple-user/send-code/send-code.dto.ts"],"names":[],"mappings":";;;;;;;;;;;;;AAAA,qDAA+D;AAC/D,6CAA8C;AAC9C,wDAAoD;AAEpD,IAAY,WAIX;AAJD,WAAY,WAAW;IACrB,8BAAe,CAAA;IACf,8CAA+B,CAAA;IAC/B,0CAA2B,CAAA;AAC7B,CAAC,EAJW,WAAW,2BAAX,WAAW,QAItB;AAED,MAAa,WAAY,SAAQ,oBAAQ;;;;CASxC;AATD,kCASC;AADC;IAPC,IAAA,wBAAM,EAAC,WAAW,CAAC;IACnB,IAAA,qBAAW,EAAC;QACX,WAAW,EAAE,oCAAoC;QACjD,OAAO,EAAE,WAAW,CAAC,KAAK;QAC1B,IAAI,EAAE,WAAW;QACjB,QAAQ,EAAE,IAAI;KACf,CAAC;;gDACuB;AAG3B,MAAa,aAAc,SAAQ,WAAW;;;;CAS7C;AATD,sCASC;AADC;IAPC,IAAA,0BAAQ,GAAE;IACV,IAAA,4BAAU,GAAE;IACZ,IAAA,qBAAW,EAAC;QACX,WAAW,EAAE,0CAA0C;QACvD,OAAO,EAAE,QAAQ;QACjB,QAAQ,EAAE,IAAI;KACf,CAAC;;2CACW"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { SimpleUserOptions } from '../options';
|
|
2
|
+
import { SendCodeDto } from './send-code.dto';
|
|
3
|
+
import { Aragami } from 'aragami';
|
|
4
|
+
import { BlankReturnMessageDto } from 'nicot';
|
|
5
|
+
import { CodeContext } from './code-context';
|
|
6
|
+
import { UserRiskControlContext } from '../resolver';
|
|
7
|
+
export declare class SendCodeService {
|
|
8
|
+
private options;
|
|
9
|
+
private aragami;
|
|
10
|
+
constructor(options: SimpleUserOptions, aragami: Aragami);
|
|
11
|
+
private logger;
|
|
12
|
+
private sendCodeValidTimeMs;
|
|
13
|
+
private sendCodeCooldownTimeMs;
|
|
14
|
+
sendCode(dto: SendCodeDto, riskControlContext: UserRiskControlContext): Promise<BlankReturnMessageDto>;
|
|
15
|
+
private verifyCodeMaxAttempts;
|
|
16
|
+
private verifyCodeBlockTimeMs;
|
|
17
|
+
verifyCode(dto: CodeContext, noConsume?: boolean): Promise<BlankReturnMessageDto>;
|
|
18
|
+
}
|