nicot-simple-user 1.1.1 → 2.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 (45) hide show
  1. package/AGENTS.md +216 -0
  2. package/dist/simple-user/login/login.controller.d.ts +3 -3
  3. package/dist/simple-user/login/login.controller.js +8 -8
  4. package/dist/simple-user/login/login.controller.js.map +1 -1
  5. package/dist/simple-user/options.d.ts +3 -2
  6. package/dist/simple-user/send-code/decorators.d.ts +1 -0
  7. package/dist/simple-user/send-code/decorators.js +4 -2
  8. package/dist/simple-user/send-code/decorators.js.map +1 -1
  9. package/dist/simple-user/send-code/send-code.controller.js +1 -0
  10. package/dist/simple-user/send-code/send-code.controller.js.map +1 -1
  11. package/dist/simple-user/send-code/send-code.dto.d.ts +10 -1
  12. package/dist/simple-user/send-code/send-code.dto.js +38 -3
  13. package/dist/simple-user/send-code/send-code.dto.js.map +1 -1
  14. package/dist/simple-user/send-code/send-code.service.js +31 -11
  15. package/dist/simple-user/send-code/send-code.service.js.map +1 -1
  16. package/dist/simple-user/simple-user/change-mobile.dto.d.ts +3 -0
  17. package/dist/simple-user/simple-user/change-mobile.dto.js +12 -0
  18. package/dist/simple-user/simple-user/change-mobile.dto.js.map +1 -0
  19. package/dist/simple-user/simple-user/contact.dto.d.ts +16 -0
  20. package/dist/simple-user/simple-user/contact.dto.js +88 -0
  21. package/dist/simple-user/simple-user/contact.dto.js.map +1 -0
  22. package/dist/simple-user/simple-user/login.dto.d.ts +2 -2
  23. package/dist/simple-user/simple-user/login.dto.js +3 -3
  24. package/dist/simple-user/simple-user/login.dto.js.map +1 -1
  25. package/dist/simple-user/simple-user/mobile.dto.d.ts +6 -0
  26. package/dist/simple-user/simple-user/mobile.dto.js +47 -0
  27. package/dist/simple-user/simple-user/mobile.dto.js.map +1 -0
  28. package/dist/simple-user/simple-user/reset-password.dto.d.ts +2 -2
  29. package/dist/simple-user/simple-user/reset-password.dto.js +2 -2
  30. package/dist/simple-user/simple-user/reset-password.dto.js.map +1 -1
  31. package/dist/simple-user/simple-user/simple-user.service.d.ts +9 -4
  32. package/dist/simple-user/simple-user/simple-user.service.js +102 -60
  33. package/dist/simple-user/simple-user/simple-user.service.js.map +1 -1
  34. package/dist/simple-user/simple-user.entity.d.ts +3 -1
  35. package/dist/simple-user/simple-user.entity.js +19 -4
  36. package/dist/simple-user/simple-user.entity.js.map +1 -1
  37. package/dist/simple-user/user-center/user-center.controller.d.ts +2 -0
  38. package/dist/simple-user/user-center/user-center.controller.js +18 -0
  39. package/dist/simple-user/user-center/user-center.controller.js.map +1 -1
  40. package/dist/tsconfig.build.tsbuildinfo +1 -1
  41. package/dist/tsconfig.tsbuildinfo +1 -0
  42. package/package.json +1 -1
  43. package/test/app-e2e-v2.spec.ts +621 -0
  44. package/test/app-e2e.spec.ts +3 -0
  45. package/test/docker-compose.yml +14 -0
package/AGENTS.md ADDED
@@ -0,0 +1,216 @@
1
+ # 注意事项(AGENTS.md)
2
+
3
+ 本文件定义 nesties / nicot 后端项目中的通用工程规范与红线规则。
4
+ 所有规则均为强制性规范,不得以“方便”“省代码”“习惯不同”为由绕过。
5
+
6
+ 本规范适用于所有基于 NestJS + nicot + nesties 构建的后端项目。
7
+
8
+ ## 项目定位与基本原则
9
+
10
+ - 本项目为标准后端 API 服务
11
+ - 对外接口以 DTO 作为唯一契约形式
12
+ - 明确区分:
13
+ - 接口契约(DTO)
14
+ - Controller(参数接收与返回)
15
+ - Service(业务编排)
16
+ - 基础设施(外部系统、数据库、缓存等)
17
+
18
+ 核心原则:
19
+
20
+ - 显式优于隐式
21
+ - 稳定性优于省代码
22
+ - 契约优于实现细节
23
+
24
+
25
+ ## Controller 层规范
26
+
27
+ - Controller 层只负责:
28
+ - 接收参数(通过 DTO)
29
+ - 返回标准返回结构(通过 DTO)
30
+ - Controller 层禁止:
31
+ - 编写业务逻辑
32
+ - 自行解析、转换输入参数
33
+ - 返回未定义的结构或裸对象
34
+ - 将外部系统 / 数据库实体的原始结构直接暴露给前端
35
+
36
+ Controller 必须保持“薄”,所有流程与判断应下沉到 Service。
37
+
38
+
39
+ ## DTO 与接口规范(必须遵守)
40
+
41
+ DTO 是后端接口的对外契约,而非简单的类型工具。
42
+ 所有 DTO 相关规则均为强制性规范。
43
+
44
+ ### 输入 DTO(Query / Body 通用规则)
45
+
46
+ - 所有接口的 Query 和 Body:
47
+ - 必须定义为 DTO 类
48
+ - 必须放在对应模块的 `*.dto.ts` 文件中
49
+ - 必须携带:
50
+ - class-validator 装饰器
51
+ - ApiProperty(或变体)装饰器
52
+ - DTO 作为接口输入时:
53
+ - Query 使用 `@DataQuery()`
54
+ - Body 使用 `@DataBody()`
55
+
56
+ 禁止事项:
57
+
58
+ - 禁止使用 `@Query()` / `@Body()` 直接接收原始对象
59
+ - 禁止使用 `any` 作为接口输入类型
60
+ - 禁止在 Controller 中自行解析、转换输入字段
61
+
62
+
63
+ ### Query DTO 额外约束(重要)
64
+
65
+ #### 数据结构约束
66
+
67
+ - Query DTO 只能是一层扁平结构
68
+ - 不允许出现任何嵌套结构
69
+
70
+ 禁止使用:
71
+
72
+ - 对象字段
73
+ - 数组字段
74
+ - Map / Record
75
+ - 任意嵌套 DTO
76
+
77
+
78
+ #### 字段类型约束
79
+
80
+ Query DTO 中的字段类型仅允许:
81
+
82
+ - string
83
+ - number
84
+ - Date
85
+ - enum(见 enum 使用规范)
86
+
87
+ 禁止使用:
88
+
89
+ - boolean
90
+ - object
91
+ - array
92
+ - union / intersection
93
+ - 任意自定义复杂类型
94
+
95
+
96
+ #### Query 中的布尔语义(强制规则)
97
+
98
+ - Query 中不允许出现 boolean 类型字段
99
+ - 所有布尔语义必须使用 number 类型的 0 / 1 表示
100
+ - 布尔字段必须通过 ApiProperty 声明 enum 为 [0, 1]
101
+ - 在 Service 层解析时:
102
+ - 必须使用 nesties(如果项目含有 nicot 则用 nicot)提供的 `parseBool(v: any): boolean`
103
+ - 禁止自行判断布尔语义(例如强转、比较字符串等)
104
+
105
+ 该规则用于保证 Swagger 行为一致、URL 参数可预测、自动化调用稳定。
106
+
107
+
108
+ ### enum 使用规范(强制)
109
+
110
+ 该规则适用于 Query / Body / Response。
111
+
112
+ #### enum 的定义位置
113
+
114
+ - enum 仅在一个 DTO 文件中使用:
115
+ - 允许定义在该 DTO 文件中
116
+ - enum 横跨多个 DTO 或多个文件使用:
117
+ - 必须定义在独立的 `*.enum.ts` 文件中
118
+ - 由 DTO 显式引用
119
+
120
+ 禁止事项:
121
+
122
+ - 禁止跨文件复制 enum 定义
123
+ - 禁止在多个 DTO 文件中各自定义同名 enum
124
+
125
+
126
+ #### enum 的定义形式(严格约束)
127
+
128
+ - enum 必须使用字符串 enum
129
+ - enum 的 key 与 value 必须完全一致
130
+ - 命名使用 UpperCamelCase
131
+
132
+ 允许形式示例(语义说明):
133
+
134
+ - Foo = 'Foo'
135
+ - PendingReview = 'PendingReview'
136
+
137
+ 禁止事项:
138
+
139
+ - 禁止使用数字 enum
140
+ - 禁止使用数字或字符串充当“伪 enum”
141
+ - 禁止 key 与 value 不一致
142
+
143
+
144
+ ### 返回 DTO 规范
145
+
146
+ - 所有接口返回值必须定义 DTO 类
147
+ - 禁止直接返回外部系统、数据库实体或内部模型的原始结构
148
+ - 即使字段同名,也必须显式映射后返回
149
+ - 返回值必须通过标准返回结构封装,不允许随意返回裸对象
150
+
151
+
152
+ ### DTO 复用规则
153
+
154
+ - DTO 的复用只允许发生在“结构层”,不得发生在“接口契约层”
155
+ - 允许定义公共基础 DTO 用于字段复用
156
+ - 接口使用的 DTO 必须定义在各自模块内
157
+
158
+ 强制约束:
159
+
160
+ - Controller 禁止直接引用公共 DTO 作为 Query / Body / Response 类型
161
+ - 公共 DTO 不代表接口契约
162
+ - 不允许通过“字段看起来一样”隐式耦合不同接口或模块
163
+
164
+
165
+ ### DTO 禁用项(重要)
166
+
167
+ - 禁止使用 `@nestjs/mapped-types`
168
+ - 包括但不限于:PartialType、PickType、OmitType、IntersectionType
169
+
170
+ 原因包括但不限于:
171
+
172
+ - Swagger 行为不稳定
173
+ - 校验规则与运行时行为不一致
174
+ - 容易引入隐式接口契约继承
175
+
176
+ 如需字段复用:
177
+
178
+ - 必须显式定义 DTO 类
179
+ - 使用组合或显式继承完成
180
+
181
+
182
+ ## HTTP 与 Swagger 规范
183
+
184
+ - 所有非 GET 接口必须显式指定 `@HttpCode(200)`
185
+ - 所有接口必须包含 `@ApiOperation`
186
+ - summary:接口作用(必填)
187
+ - description:注意事项(可选)
188
+ - 不需要在 Controller 中重复写 `@ApiQuery` 或 `@ApiBody`
189
+ - 参数相关 Swagger 信息应由 DTO 与参数装饰器提供
190
+
191
+
192
+ ## 分层与依赖约束
193
+
194
+ - Controller 层:
195
+ - 只处理接口输入输出
196
+ - Service 层:
197
+ - 负责业务编排与流程控制
198
+ - 基础设施层:
199
+ - 负责外部系统与底层能力(数据库、缓存、消息等)
200
+
201
+ 禁止出现跨层污染或职责混用,例如:
202
+
203
+ - Controller 直接访问基础设施
204
+ - Controller / Service 将内部实体原样作为响应返回
205
+ - 将输入解析逻辑散落在 Controller 中
206
+
207
+ ## 关于 lint
208
+
209
+ - 完成每次任务之后,无论 lint 结果如何,不要尝试手动修复 lint 错误,而是先运行一次 npm run lint 来自动修复大部分问题。
210
+
211
+ ## 参考(只读)
212
+
213
+ 以下项目用于理解 nesties 的行为,不得直接修改或复制实现:
214
+
215
+ - nesties: /home/nanahira/test/nesties
216
+ - nicot: /home/nanahira/test/nicot
@@ -1,15 +1,15 @@
1
1
  import { SimpleUserService } from '../simple-user/simple-user.service';
2
- import { EmailAndCodeDto, EmailDto } from '../simple-user/email.dto';
2
+ import { ContactDto, ContactAndCodeDto } from '../simple-user/contact.dto';
3
3
  import { LoginDto, LoginResponseDto } from '../simple-user/login.dto';
4
4
  import { UserRiskControlContext } from '../resolver';
5
5
  import { ResetPasswordDto } from '../simple-user/reset-password.dto';
6
6
  export declare class LoginController {
7
7
  private userService;
8
8
  constructor(userService: SimpleUserService);
9
- checkUserExists(dto: EmailDto): Promise<import("nicot").GenericReturnMessageDto<{
9
+ checkUserExists(dto: ContactDto): Promise<import("nicot").GenericReturnMessageDto<{
10
10
  exists: boolean;
11
11
  }>>;
12
12
  login(dto: LoginDto, rcContext: UserRiskControlContext): Promise<import("nicot").GenericReturnMessageDto<LoginResponseDto>>;
13
13
  resetPassword(dto: ResetPasswordDto): Promise<import("nicot").BlankReturnMessageDto>;
14
- unregisterWithCode(dto: EmailAndCodeDto): Promise<import("nicot").BlankReturnMessageDto>;
14
+ unregisterWithCode(dto: ContactAndCodeDto): Promise<import("nicot").BlankReturnMessageDto>;
15
15
  }
@@ -19,7 +19,7 @@ const swagger_1 = require("@nestjs/swagger");
19
19
  const simple_user_service_1 = require("../simple-user/simple-user.service");
20
20
  const nicot_1 = require("nicot");
21
21
  const user_exists_dto_1 = require("../simple-user/user-exists.dto");
22
- const email_dto_1 = require("../simple-user/email.dto");
22
+ const contact_dto_1 = require("../simple-user/contact.dto");
23
23
  const login_dto_1 = require("../simple-user/login.dto");
24
24
  const resolver_1 = require("../resolver");
25
25
  const decorators_1 = require("../send-code/decorators");
@@ -29,7 +29,7 @@ let LoginController = class LoginController {
29
29
  this.userService = userService;
30
30
  }
31
31
  async checkUserExists(dto) {
32
- return this.userService.checkUserExists(dto.email);
32
+ return this.userService.checkUserExists(dto);
33
33
  }
34
34
  async login(dto, rcContext) {
35
35
  return this.userService.login(dto, rcContext);
@@ -38,20 +38,20 @@ let LoginController = class LoginController {
38
38
  return this.userService.resetPassword(dto);
39
39
  }
40
40
  async unregisterWithCode(dto) {
41
- return this.userService.unregisterWithEmail(dto);
41
+ return this.userService.unregisterWithCode(dto);
42
42
  }
43
43
  };
44
44
  exports.LoginController = LoginController;
45
45
  __decorate([
46
46
  (0, common_1.Get)('user-exists'),
47
47
  (0, swagger_1.ApiOperation)({
48
- summary: 'Check if a user exists by email',
48
+ summary: 'Check if a user exists by email or mobile',
49
49
  }),
50
50
  (0, nicot_1.ApiTypeResponse)(user_exists_dto_1.UserExistsDto),
51
51
  openapi.ApiResponse({ status: 200 }),
52
52
  __param(0, (0, nicot_1.DataQuery)()),
53
53
  __metadata("design:type", Function),
54
- __metadata("design:paramtypes", [email_dto_1.EmailDto]),
54
+ __metadata("design:paramtypes", [contact_dto_1.ContactDto]),
55
55
  __metadata("design:returntype", Promise)
56
56
  ], LoginController.prototype, "checkUserExists", null);
57
57
  __decorate([
@@ -75,7 +75,7 @@ __decorate([
75
75
  (0, common_1.Post)('reset-password'),
76
76
  (0, common_1.HttpCode)(200),
77
77
  (0, swagger_1.ApiOperation)({
78
- summary: 'Reset user password using email code.',
78
+ summary: 'Reset user password using email or mobile code.',
79
79
  }),
80
80
  (0, nicot_1.ApiBlankResponse)(),
81
81
  (0, decorators_1.ApiInvalidCode)(),
@@ -89,14 +89,14 @@ __decorate([
89
89
  (0, common_1.Post)('unregister-with-code'),
90
90
  (0, common_1.HttpCode)(200),
91
91
  (0, swagger_1.ApiOperation)({
92
- summary: 'Unregister user using email code.',
92
+ summary: 'Unregister user using email or mobile code.',
93
93
  }),
94
94
  (0, nicot_1.ApiBlankResponse)(),
95
95
  (0, decorators_1.ApiInvalidCode)(),
96
96
  openapi.ApiResponse({ status: 200 }),
97
97
  __param(0, (0, nicot_1.DataBody)()),
98
98
  __metadata("design:type", Function),
99
- __metadata("design:paramtypes", [email_dto_1.EmailAndCodeDto]),
99
+ __metadata("design:paramtypes", [contact_dto_1.ContactAndCodeDto]),
100
100
  __metadata("design:returntype", Promise)
101
101
  ], LoginController.prototype, "unregisterWithCode", null);
102
102
  exports.LoginController = LoginController = __decorate([
@@ -1 +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,wDAAqE;AACrE,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;IASK,AAAN,KAAK,CAAC,kBAAkB,CAAa,GAAoB;QACvD,OAAO,IAAI,CAAC,WAAW,CAAC,mBAAmB,CAAC,GAAG,CAAC,CAAC;IACnD,CAAC;CACF,CAAA;AAlDY,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;AASK;IAPL,IAAA,aAAI,EAAC,sBAAsB,CAAC;IAC5B,IAAA,iBAAQ,EAAC,GAAG,CAAC;IACb,IAAA,sBAAY,EAAC;QACZ,OAAO,EAAE,mCAAmC;KAC7C,CAAC;IACD,IAAA,wBAAgB,GAAE;IAClB,IAAA,2BAAc,GAAE;kCALP,GAAG;IAMa,WAAA,IAAA,gBAAQ,GAAE,CAAA;;qCAAM,2BAAe;;yDAExD;0BAjDU,eAAe;IAF3B,IAAA,mBAAU,EAAC,OAAO,CAAC;IACnB,IAAA,iBAAO,EAAC,OAAO,CAAC;qCAEkB,uCAAiB;GADvC,eAAe,CAkD3B"}
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,4DAA2E;AAC3E,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,GAAe;QAChD,OAAO,IAAI,CAAC,WAAW,CAAC,eAAe,CAAC,GAAG,CAAC,CAAC;IAC/C,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;IASK,AAAN,KAAK,CAAC,kBAAkB,CAAa,GAAsB;QACzD,OAAO,IAAI,CAAC,WAAW,CAAC,kBAAkB,CAAC,GAAG,CAAC,CAAC;IAClD,CAAC;CACF,CAAA;AAlDY,0CAAe;AAQpB;IALL,IAAA,YAAG,EAAC,aAAa,CAAC;IAClB,IAAA,sBAAY,EAAC;QACZ,OAAO,EAAE,2CAA2C;KACrD,CAAC;IACD,IAAA,uBAAe,EAAC,+BAAa,CAAC;;IACR,WAAA,IAAA,iBAAS,GAAE,CAAA;;qCAAM,wBAAU;;sDAEjD;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,iDAAiD;KAC3D,CAAC;IACD,IAAA,wBAAgB,GAAE;IAClB,IAAA,2BAAc,GAAE;kCALP,GAAG;IAMQ,WAAA,IAAA,gBAAQ,GAAE,CAAA;;qCAAM,qCAAgB;;oDAEpD;AASK;IAPL,IAAA,aAAI,EAAC,sBAAsB,CAAC;IAC5B,IAAA,iBAAQ,EAAC,GAAG,CAAC;IACb,IAAA,sBAAY,EAAC;QACZ,OAAO,EAAE,6CAA6C;KACvD,CAAC;IACD,IAAA,wBAAgB,GAAE;IAClB,IAAA,2BAAc,GAAE;kCALP,GAAG;IAMa,WAAA,IAAA,gBAAQ,GAAE,CAAA;;qCAAM,+BAAiB;;yDAE1D;0BAjDU,eAAe;IAF3B,IAAA,mBAAU,EAAC,OAAO,CAAC;IACnB,IAAA,iBAAO,EAAC,OAAO,CAAC;qCAEkB,uCAAiB;GADvC,eAAe,CAkD3B"}
@@ -2,7 +2,7 @@ import { AragamiOptions, Awaitable } from 'aragami';
2
2
  import { ClassType } from 'nicot';
3
3
  import { SimpleUser } from './simple-user.entity';
4
4
  import { CrudOptions } from 'nicot';
5
- import { SendCodeDto } from './send-code/send-code.dto';
5
+ import { EmailSendCodeDto, SmsSendCodeDto } from './send-code/send-code.dto';
6
6
  import { EntityManager } from 'typeorm';
7
7
  import { MayBeArray } from 'aragami/dist/src/utility/utility';
8
8
  export interface SimpleUserExtraOptions {
@@ -19,7 +19,8 @@ export interface SimpleUserOptions {
19
19
  aragamiExtras?: AragamiOptions;
20
20
  loginExpiryTimeMs?: number;
21
21
  afterPutUser?: (user: SimpleUser) => Awaitable<SimpleUser | undefined>;
22
- sendCodeGenerator: (ctx: SendCodeDto) => Awaitable<string>;
22
+ sendCodeGenerator?: (ctx: EmailSendCodeDto) => Awaitable<string>;
23
+ sendSmsCodeGenerator?: (ctx: SmsSendCodeDto) => Awaitable<string>;
23
24
  sendCodeValidTimeMs?: number;
24
25
  sendCodeCooldownTimeMs?: number;
25
26
  verifyCodeMaxAttempts?: number;
@@ -1,2 +1,3 @@
1
1
  export declare const ApiTooManyRequests: () => MethodDecorator & ClassDecorator;
2
+ export declare const ApiSendCodeNotConfigured: () => MethodDecorator & ClassDecorator;
2
3
  export declare const ApiInvalidCode: () => ClassDecorator & MethodDecorator;
@@ -1,12 +1,14 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.ApiInvalidCode = exports.ApiTooManyRequests = void 0;
3
+ exports.ApiInvalidCode = exports.ApiSendCodeNotConfigured = exports.ApiTooManyRequests = void 0;
4
4
  const nicot_1 = require("nicot");
5
5
  const wait_time_dto_1 = require("./wait-time.dto");
6
6
  const ApiTooManyRequests = () => (0, nicot_1.ApiErrorTyped)(429, 'Too many requests', wait_time_dto_1.WaitTimeDto);
7
7
  exports.ApiTooManyRequests = ApiTooManyRequests;
8
+ const ApiSendCodeNotConfigured = () => (0, nicot_1.ApiError)(501, 'Code generator not configured or failed to send');
9
+ exports.ApiSendCodeNotConfigured = ApiSendCodeNotConfigured;
8
10
  const ApiInvalidCode = () => (0, nicot_1.MergeClassOrMethodDecorators)([
9
- (0, nicot_1.ApiError)(403, 'Invalid email code (or password when login)'),
11
+ (0, nicot_1.ApiError)(403, 'Invalid verification code (or password when login)'),
10
12
  (0, exports.ApiTooManyRequests)(),
11
13
  ]);
12
14
  exports.ApiInvalidCode = ApiInvalidCode;
@@ -1 +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"}
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,wBAAwB,GAAG,GAAG,EAAE,CAC3C,IAAA,gBAAQ,EAAC,GAAG,EAAE,iDAAiD,CAAC,CAAC;AADtD,QAAA,wBAAwB,4BAC8B;AAE5D,MAAM,cAAc,GAAG,GAAG,EAAE,CACjC,IAAA,oCAA4B,EAAC;IAC3B,IAAA,gBAAQ,EAAC,GAAG,EAAE,oDAAoD,CAAC;IACnE,IAAA,0BAAkB,GAAE;CACrB,CAAC,CAAC;AAJQ,QAAA,cAAc,kBAItB"}
@@ -42,6 +42,7 @@ __decorate([
42
42
  (0, resolver_1.ApiRiskControlContext)(),
43
43
  (0, nicot_1.ApiBlankResponse)(),
44
44
  (0, decorators_1.ApiTooManyRequests)(),
45
+ (0, decorators_1.ApiSendCodeNotConfigured)(),
45
46
  openapi.ApiResponse({ status: 200 }),
46
47
  __param(0, (0, nicot_1.DataBody)()),
47
48
  __param(1, (0, resolver_1.PutRiskControlContext)()),
@@ -1 +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"}
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,6CAIsB;AACtB,mDAA6D;AAItD,IAAM,kBAAkB,GAAxB,MAAM,kBAAkB;IAC7B,YAAoB,OAAwB;QAAxB,YAAO,GAAP,OAAO,CAAiB;IAAG,CAAC;IAW1C,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;AA7BY,gDAAkB;AAYvB;IATL,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;IACpB,IAAA,qCAAwB,GAAE;kCAPjB,GAAG;IASV,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;6BA5BU,kBAAkB;IAF9B,IAAA,mBAAU,EAAC,WAAW,CAAC;IACvB,IAAA,iBAAO,EAAC,WAAW,CAAC;qCAEU,mCAAe;GADjC,kBAAkB,CA6B9B"}
@@ -1,11 +1,20 @@
1
+ import { ContactDto } from '../simple-user/contact.dto';
1
2
  import { EmailDto } from '../simple-user/email.dto';
3
+ import { MobileDto } from '../simple-user/mobile.dto';
2
4
  export declare enum CodePurpose {
3
5
  Login = "Login",
4
6
  ResetPassword = "ResetPassword",
5
7
  ChangeEmail = "ChangeEmail",
8
+ ChangeMobile = "ChangeMobile",
6
9
  Unregister = "Unregister"
7
10
  }
8
- export declare class SendCodeDto extends EmailDto {
11
+ export declare class SendCodeDto extends ContactDto {
12
+ codePurpose: CodePurpose;
13
+ }
14
+ export declare class EmailSendCodeDto extends EmailDto {
15
+ codePurpose: CodePurpose;
16
+ }
17
+ export declare class SmsSendCodeDto extends MobileDto {
9
18
  codePurpose: CodePurpose;
10
19
  }
11
20
  export declare class VerifyCodeDto extends SendCodeDto {
@@ -9,19 +9,22 @@ var __metadata = (this && this.__metadata) || function (k, v) {
9
9
  if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
10
10
  };
11
11
  Object.defineProperty(exports, "__esModule", { value: true });
12
- exports.VerifyCodeDto = exports.SendCodeDto = exports.CodePurpose = void 0;
12
+ exports.VerifyCodeDto = exports.SmsSendCodeDto = exports.EmailSendCodeDto = exports.SendCodeDto = exports.CodePurpose = void 0;
13
13
  const openapi = require("@nestjs/swagger");
14
14
  const class_validator_1 = require("class-validator");
15
15
  const swagger_1 = require("@nestjs/swagger");
16
+ const contact_dto_1 = require("../simple-user/contact.dto");
16
17
  const email_dto_1 = require("../simple-user/email.dto");
18
+ const mobile_dto_1 = require("../simple-user/mobile.dto");
17
19
  var CodePurpose;
18
20
  (function (CodePurpose) {
19
21
  CodePurpose["Login"] = "Login";
20
22
  CodePurpose["ResetPassword"] = "ResetPassword";
21
23
  CodePurpose["ChangeEmail"] = "ChangeEmail";
24
+ CodePurpose["ChangeMobile"] = "ChangeMobile";
22
25
  CodePurpose["Unregister"] = "Unregister";
23
26
  })(CodePurpose || (exports.CodePurpose = CodePurpose = {}));
24
- class SendCodeDto extends email_dto_1.EmailDto {
27
+ class SendCodeDto extends contact_dto_1.ContactDto {
25
28
  static _OPENAPI_METADATA_FACTORY() {
26
29
  return { codePurpose: { required: true, enum: require("./send-code.dto").CodePurpose } };
27
30
  }
@@ -37,6 +40,38 @@ __decorate([
37
40
  }),
38
41
  __metadata("design:type", String)
39
42
  ], SendCodeDto.prototype, "codePurpose", void 0);
43
+ class EmailSendCodeDto extends email_dto_1.EmailDto {
44
+ static _OPENAPI_METADATA_FACTORY() {
45
+ return { codePurpose: { required: true, enum: require("./send-code.dto").CodePurpose } };
46
+ }
47
+ }
48
+ exports.EmailSendCodeDto = EmailSendCodeDto;
49
+ __decorate([
50
+ (0, class_validator_1.IsEnum)(CodePurpose),
51
+ (0, swagger_1.ApiProperty)({
52
+ description: 'The purpose of the code being sent',
53
+ example: CodePurpose.Login,
54
+ enum: CodePurpose,
55
+ required: true,
56
+ }),
57
+ __metadata("design:type", String)
58
+ ], EmailSendCodeDto.prototype, "codePurpose", void 0);
59
+ class SmsSendCodeDto extends mobile_dto_1.MobileDto {
60
+ static _OPENAPI_METADATA_FACTORY() {
61
+ return { codePurpose: { required: true, enum: require("./send-code.dto").CodePurpose } };
62
+ }
63
+ }
64
+ exports.SmsSendCodeDto = SmsSendCodeDto;
65
+ __decorate([
66
+ (0, class_validator_1.IsEnum)(CodePurpose),
67
+ (0, swagger_1.ApiProperty)({
68
+ description: 'The purpose of the code being sent',
69
+ example: CodePurpose.Login,
70
+ enum: CodePurpose,
71
+ required: true,
72
+ }),
73
+ __metadata("design:type", String)
74
+ ], SmsSendCodeDto.prototype, "codePurpose", void 0);
40
75
  class VerifyCodeDto extends SendCodeDto {
41
76
  static _OPENAPI_METADATA_FACTORY() {
42
77
  return { code: { required: true, type: () => String } };
@@ -47,7 +82,7 @@ __decorate([
47
82
  (0, class_validator_1.IsString)(),
48
83
  (0, class_validator_1.IsNotEmpty)(),
49
84
  (0, swagger_1.ApiProperty)({
50
- description: 'The verification code received via email',
85
+ description: 'The verification code received via email or SMS',
51
86
  example: '123456',
52
87
  required: true,
53
88
  }),
@@ -1 +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,WAKX;AALD,WAAY,WAAW;IACrB,8BAAe,CAAA;IACf,8CAA+B,CAAA;IAC/B,0CAA2B,CAAA;IAC3B,wCAAyB,CAAA;AAC3B,CAAC,EALW,WAAW,2BAAX,WAAW,QAKtB;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"}
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,4DAAwD;AACxD,wDAAoD;AACpD,0DAAsD;AAEtD,IAAY,WAMX;AAND,WAAY,WAAW;IACrB,8BAAe,CAAA;IACf,8CAA+B,CAAA;IAC/B,0CAA2B,CAAA;IAC3B,4CAA6B,CAAA;IAC7B,wCAAyB,CAAA;AAC3B,CAAC,EANW,WAAW,2BAAX,WAAW,QAMtB;AAED,MAAa,WAAY,SAAQ,wBAAU;;;;CAS1C;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,gBAAiB,SAAQ,oBAAQ;;;;CAS7C;AATD,4CASC;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;;qDACuB;AAG3B,MAAa,cAAe,SAAQ,sBAAS;;;;CAS5C;AATD,wCASC;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;;mDACuB;AAG3B,MAAa,aAAc,SAAQ,WAAW;;;;CAS7C;AATD,sCASC;AADC;IAPC,IAAA,0BAAQ,GAAE;IACV,IAAA,4BAAU,GAAE;IACZ,IAAA,qBAAW,EAAC;QACX,WAAW,EAAE,iDAAiD;QAC9D,OAAO,EAAE,QAAQ;QACjB,QAAQ,EAAE,IAAI;KACf,CAAC;;2CACW"}
@@ -21,7 +21,8 @@ const nestjs_aragami_1 = require("nestjs-aragami");
21
21
  const nicot_1 = require("nicot");
22
22
  const wait_time_dto_1 = require("./wait-time.dto");
23
23
  const nicot_2 = require("nicot");
24
- const buildSendCodeCacheKey = (ctx) => `email:${ctx.email}:${ctx.codePurpose}`;
24
+ const contact_dto_1 = require("../simple-user/contact.dto");
25
+ const buildSendCodeCacheKey = (ctx) => `${(0, contact_dto_1.getContactKey)(ctx)}:${ctx.codePurpose}`;
25
26
  class SendCodeRecord extends send_code_dto_1.SendCodeDto {
26
27
  get cacheKey() {
27
28
  return buildSendCodeCacheKey(this);
@@ -47,10 +48,10 @@ let SendCodeService = class SendCodeService {
47
48
  this.options = options;
48
49
  this.aragami = aragami;
49
50
  this.logger = new common_1.ConsoleLogger('SendCodeService');
50
- this.sendCodeValidTimeMs = this.options.sendCodeValidTimeMs || 10 * 60 * 1000;
51
- this.sendCodeCooldownTimeMs = this.options.sendCodeCooldownTimeMs || 60 * 1000;
52
- this.verifyCodeMaxAttempts = this.options.verifyCodeMaxAttempts || 5;
53
- this.verifyCodeBlockTimeMs = this.options.verifyCodeBlockTimeMs || 15 * 60 * 1000;
51
+ this.sendCodeValidTimeMs = this.options.sendCodeValidTimeMs ?? 10 * 60 * 1000;
52
+ this.sendCodeCooldownTimeMs = this.options.sendCodeCooldownTimeMs ?? 60 * 1000;
53
+ this.verifyCodeMaxAttempts = this.options.verifyCodeMaxAttempts ?? 5;
54
+ this.verifyCodeBlockTimeMs = this.options.verifyCodeBlockTimeMs ?? 15 * 60 * 1000;
54
55
  }
55
56
  async sendCode(dto, riskControlContext) {
56
57
  const riskControlKeys = [
@@ -75,13 +76,31 @@ let SendCodeService = class SendCodeService {
75
76
  throw new nicot_1.GenericReturnMessageDto(429, 'Please wait before requesting another code', waitTimeDto).toException();
76
77
  }
77
78
  }
78
- if (!this.options.sendCodeGenerator) {
79
- throw new nicot_2.BlankReturnMessageDto(501, 'Send code generator not configured').toException();
80
- }
79
+ const generateCode = dto.email
80
+ ? () => {
81
+ if (!this.options.sendCodeGenerator) {
82
+ throw new nicot_2.BlankReturnMessageDto(501, 'Send code generator not configured').toException();
83
+ }
84
+ return this.options.sendCodeGenerator({
85
+ email: dto.email,
86
+ codePurpose: dto.codePurpose,
87
+ });
88
+ }
89
+ : () => {
90
+ if (!this.options.sendSmsCodeGenerator) {
91
+ throw new nicot_2.BlankReturnMessageDto(501, 'SMS code generator not configured').toException();
92
+ }
93
+ return this.options.sendSmsCodeGenerator({
94
+ mobile: dto.mobile,
95
+ codePurpose: dto.codePurpose,
96
+ });
97
+ };
98
+ const target = (0, contact_dto_1.getContactTarget)(dto);
81
99
  try {
82
- const code = await this.options.sendCodeGenerator(dto);
100
+ const code = await generateCode();
83
101
  const record = new SendCodeRecord();
84
102
  record.email = dto.email;
103
+ record.mobile = dto.mobile;
85
104
  record.codePurpose = dto.codePurpose;
86
105
  record.code = code;
87
106
  record.sentTime = new Date();
@@ -97,7 +116,7 @@ let SendCodeService = class SendCodeService {
97
116
  return new nicot_2.BlankReturnMessageDto(200, 'success');
98
117
  }
99
118
  catch (e) {
100
- this.logger.error(`Failed to send code to ${dto.email} for purpose ${dto.codePurpose}: ${e}`);
119
+ this.logger.error(`Failed to send code to ${target} for purpose ${dto.codePurpose}: ${e}`);
101
120
  throw new nicot_1.GenericReturnMessageDto(501, 'Failed to send code').toException();
102
121
  }
103
122
  }
@@ -119,13 +138,14 @@ let SendCodeService = class SendCodeService {
119
138
  if (this.verifyCodeMaxAttempts && this.verifyCodeBlockTimeMs) {
120
139
  const attemptRecord = new VerifyCodeAttemptRecord();
121
140
  attemptRecord.email = dto.email;
141
+ attemptRecord.mobile = dto.mobile;
122
142
  attemptRecord.codePurpose = dto.codePurpose;
123
143
  attemptRecord.time = new Date();
124
144
  await this.aragami.set(attemptRecord, {
125
145
  ttl: this.verifyCodeBlockTimeMs,
126
146
  });
127
147
  }
128
- throw new nicot_2.BlankReturnMessageDto(403, 'Invalid email code').toException();
148
+ throw new nicot_2.BlankReturnMessageDto(403, 'Invalid verification code').toException();
129
149
  }
130
150
  if (!noConsume) {
131
151
  await this.aragami.del(SendCodeRecord, key);
@@ -1 +1 @@
1
- {"version":3,"file":"send-code.service.js","sourceRoot":"","sources":["../../../src/simple-user/send-code/send-code.service.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"send-code.service.js","sourceRoot":"","sources":["../../../src/simple-user/send-code/send-code.service.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import { MobileAndCodeDto } from './mobile.dto';
2
+ export declare class ChangeMobileDto extends MobileAndCodeDto {
3
+ }
@@ -0,0 +1,12 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.ChangeMobileDto = void 0;
4
+ const openapi = require("@nestjs/swagger");
5
+ const mobile_dto_1 = require("./mobile.dto");
6
+ class ChangeMobileDto extends mobile_dto_1.MobileAndCodeDto {
7
+ static _OPENAPI_METADATA_FACTORY() {
8
+ return {};
9
+ }
10
+ }
11
+ exports.ChangeMobileDto = ChangeMobileDto;
12
+ //# sourceMappingURL=change-mobile.dto.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"change-mobile.dto.js","sourceRoot":"","sources":["../../../src/simple-user/simple-user/change-mobile.dto.ts"],"names":[],"mappings":";;;;AAAA,6CAAgD;AAEhD,MAAa,eAAgB,SAAQ,6BAAgB;;;;CAAG;AAAxD,0CAAwD"}
@@ -0,0 +1,16 @@
1
+ export declare class ContactDto {
2
+ email?: string;
3
+ mobile?: string;
4
+ readonly _contactValidation?: any;
5
+ }
6
+ export declare class ContactAndCodeDto extends ContactDto {
7
+ code: string;
8
+ }
9
+ export declare function getContactKey(dto: {
10
+ email?: string;
11
+ mobile?: string;
12
+ }): string;
13
+ export declare function getContactTarget(dto: {
14
+ email?: string;
15
+ mobile?: string;
16
+ }): string;