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.
Files changed (98) hide show
  1. package/.prettierrc +4 -0
  2. package/Dockerfile.puppeteer +45 -0
  3. package/LICENSE +22 -0
  4. package/README.md +414 -0
  5. package/config.example.yaml +7 -0
  6. package/dist/app.module.d.ts +2 -0
  7. package/dist/app.module.js +53 -0
  8. package/dist/app.module.js.map +1 -0
  9. package/dist/main.d.ts +1 -0
  10. package/dist/main.js +26 -0
  11. package/dist/main.js.map +1 -0
  12. package/dist/simple-user/aragami-init.d.ts +2 -0
  13. package/dist/simple-user/aragami-init.js +55 -0
  14. package/dist/simple-user/aragami-init.js.map +1 -0
  15. package/dist/simple-user/index.d.ts +6 -0
  16. package/dist/simple-user/index.js +23 -0
  17. package/dist/simple-user/index.js.map +1 -0
  18. package/dist/simple-user/login/login.controller.d.ts +14 -0
  19. package/dist/simple-user/login/login.controller.js +90 -0
  20. package/dist/simple-user/login/login.controller.js.map +1 -0
  21. package/dist/simple-user/module-builder.d.ts +2 -0
  22. package/dist/simple-user/module-builder.js +34 -0
  23. package/dist/simple-user/module-builder.js.map +1 -0
  24. package/dist/simple-user/options.d.ts +26 -0
  25. package/dist/simple-user/options.js +3 -0
  26. package/dist/simple-user/options.js.map +1 -0
  27. package/dist/simple-user/resolver.d.ts +41 -0
  28. package/dist/simple-user/resolver.js +48 -0
  29. package/dist/simple-user/resolver.js.map +1 -0
  30. package/dist/simple-user/send-code/code-context.d.ts +4 -0
  31. package/dist/simple-user/send-code/code-context.js +8 -0
  32. package/dist/simple-user/send-code/code-context.js.map +1 -0
  33. package/dist/simple-user/send-code/decorators.d.ts +2 -0
  34. package/dist/simple-user/send-code/decorators.js +13 -0
  35. package/dist/simple-user/send-code/decorators.js.map +1 -0
  36. package/dist/simple-user/send-code/send-code.controller.d.ts +9 -0
  37. package/dist/simple-user/send-code/send-code.controller.js +71 -0
  38. package/dist/simple-user/send-code/send-code.controller.js.map +1 -0
  39. package/dist/simple-user/send-code/send-code.dto.d.ts +12 -0
  40. package/dist/simple-user/send-code/send-code.dto.js +55 -0
  41. package/dist/simple-user/send-code/send-code.dto.js.map +1 -0
  42. package/dist/simple-user/send-code/send-code.service.d.ts +18 -0
  43. package/dist/simple-user/send-code/send-code.service.js +144 -0
  44. package/dist/simple-user/send-code/send-code.service.js.map +1 -0
  45. package/dist/simple-user/send-code/wait-time.dto.d.ts +3 -0
  46. package/dist/simple-user/send-code/wait-time.dto.js +29 -0
  47. package/dist/simple-user/send-code/wait-time.dto.js.map +1 -0
  48. package/dist/simple-user/simple-user/change-email.dto.d.ts +3 -0
  49. package/dist/simple-user/simple-user/change-email.dto.js +12 -0
  50. package/dist/simple-user/simple-user/change-email.dto.js.map +1 -0
  51. package/dist/simple-user/simple-user/change-password.dto.d.ts +4 -0
  52. package/dist/simple-user/simple-user/change-password.dto.js +41 -0
  53. package/dist/simple-user/simple-user/change-password.dto.js.map +1 -0
  54. package/dist/simple-user/simple-user/email.dto.d.ts +6 -0
  55. package/dist/simple-user/simple-user/email.dto.js +46 -0
  56. package/dist/simple-user/simple-user/email.dto.js.map +1 -0
  57. package/dist/simple-user/simple-user/login.dto.d.ts +11 -0
  58. package/dist/simple-user/simple-user/login.dto.js +80 -0
  59. package/dist/simple-user/simple-user/login.dto.js.map +1 -0
  60. package/dist/simple-user/simple-user/reset-password.dto.d.ts +4 -0
  61. package/dist/simple-user/simple-user/reset-password.dto.js +32 -0
  62. package/dist/simple-user/simple-user/reset-password.dto.js.map +1 -0
  63. package/dist/simple-user/simple-user/simple-user.service.d.ts +33 -0
  64. package/dist/simple-user/simple-user/simple-user.service.js +338 -0
  65. package/dist/simple-user/simple-user/simple-user.service.js.map +1 -0
  66. package/dist/simple-user/simple-user/user-exists.dto.d.ts +3 -0
  67. package/dist/simple-user/simple-user/user-exists.dto.js +28 -0
  68. package/dist/simple-user/simple-user/user-exists.dto.js.map +1 -0
  69. package/dist/simple-user/simple-user.entity.d.ts +40 -0
  70. package/dist/simple-user/simple-user.entity.js +119 -0
  71. package/dist/simple-user/simple-user.entity.js.map +1 -0
  72. package/dist/simple-user/simple-user.module.d.ts +8 -0
  73. package/dist/simple-user/simple-user.module.js +52 -0
  74. package/dist/simple-user/simple-user.module.js.map +1 -0
  75. package/dist/simple-user/tokens.d.ts +2 -0
  76. package/dist/simple-user/tokens.js +6 -0
  77. package/dist/simple-user/tokens.js.map +1 -0
  78. package/dist/simple-user/user-center/patch-me.d.ts +2 -0
  79. package/dist/simple-user/user-center/patch-me.js +16 -0
  80. package/dist/simple-user/user-center/patch-me.js.map +1 -0
  81. package/dist/simple-user/user-center/user-center.controller.d.ts +13 -0
  82. package/dist/simple-user/user-center/user-center.controller.js +88 -0
  83. package/dist/simple-user/user-center/user-center.controller.js.map +1 -0
  84. package/dist/simple-user/user-center/user-center.service.d.ts +2 -0
  85. package/dist/simple-user/user-center/user-center.service.js +17 -0
  86. package/dist/simple-user/user-center/user-center.service.js.map +1 -0
  87. package/dist/tsconfig.build.tsbuildinfo +1 -0
  88. package/dist/utility/load-config.d.ts +7 -0
  89. package/dist/utility/load-config.js +61 -0
  90. package/dist/utility/load-config.js.map +1 -0
  91. package/eslint.config.mjs +34 -0
  92. package/install-npm-typeorm.sh +3 -0
  93. package/nest-cli.json +7 -0
  94. package/package.json +98 -0
  95. package/test/app-e2e.spec.ts +242 -0
  96. package/test/jest-e2e.json +9 -0
  97. package/tsconfig.build.json +4 -0
  98. 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,2 @@
1
+ import { SimpleUserExtraOptions, SimpleUserOptions } from './options';
2
+ export declare const ConfigurableModuleClass: import("@nestjs/common").ConfigurableModuleCls<SimpleUserOptions, "register", "create", SimpleUserExtraOptions>, MODULE_OPTIONS_TOKEN: string | symbol;
@@ -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,3 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=options.js.map
@@ -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,4 @@
1
+ import { SendCodeDto } from './send-code.dto';
2
+ export declare class CodeContext extends SendCodeDto {
3
+ code: string;
4
+ }
@@ -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,2 @@
1
+ export declare const ApiTooManyRequests: () => MethodDecorator & ClassDecorator;
2
+ export declare const ApiInvalidCode: () => ClassDecorator & MethodDecorator;
@@ -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
+ }