@jayfong/x-server 2.119.0 → 3.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 (290) hide show
  1. package/lib/_virtual/_rolldown/runtime.mjs +4 -0
  2. package/lib/cli/api_generator.d.mts +74 -0
  3. package/lib/cli/api_generator.mjs +310 -0
  4. package/lib/cli/build_util.d.mts +17 -0
  5. package/lib/cli/build_util.mjs +156 -0
  6. package/lib/cli/cli.d.mts +1 -0
  7. package/lib/cli/cli.mjs +355 -0
  8. package/lib/cli/css_register.d.mts +1 -0
  9. package/lib/cli/css_register.mjs +7 -0
  10. package/lib/cli/deploy_util.d.mts +23 -0
  11. package/lib/cli/deploy_util.mjs +70 -0
  12. package/lib/cli/dev_util.d.mts +7 -0
  13. package/lib/cli/dev_util.mjs +25 -0
  14. package/lib/cli/env_util.d.mts +45 -0
  15. package/lib/cli/env_util.mjs +207 -0
  16. package/lib/cli/esbuild_register.d.mts +1 -0
  17. package/lib/cli/esbuild_register.mjs +7 -0
  18. package/lib/cli/template_util.d.mts +18 -0
  19. package/lib/cli/template_util.mjs +85 -0
  20. package/lib/cli/templates/crons.ts +1 -1
  21. package/lib/cli/templates/handlers.ts +1 -1
  22. package/lib/cli/templates/hooks.ts +1 -1
  23. package/lib/cli/templates/models.ts +7 -7
  24. package/lib/cli/templates/package.json +11 -1
  25. package/lib/cli/templates/routes.ts +2 -1
  26. package/lib/core/ctx_storage.d.mts +3 -0
  27. package/lib/core/ctx_storage.mjs +4 -0
  28. package/lib/core/define_bus.d.mts +37 -0
  29. package/lib/core/define_bus.mjs +12 -0
  30. package/lib/core/{define_cron.d.ts → define_cron.d.mts} +2 -2
  31. package/lib/core/define_cron.mjs +11 -0
  32. package/lib/core/{define_handler.d.ts → define_handler.d.mts} +19 -19
  33. package/lib/core/define_handler.mjs +44 -0
  34. package/lib/core/define_hook.d.mts +2 -0
  35. package/lib/core/define_hook.mjs +6 -0
  36. package/lib/core/define_server.d.mts +3 -0
  37. package/lib/core/define_server.mjs +8 -0
  38. package/lib/core/{define_task.d.ts → define_task.d.mts} +2 -2
  39. package/lib/core/define_task.mjs +102 -0
  40. package/lib/core/get_handler_url.d.mts +2 -0
  41. package/lib/core/get_handler_url.mjs +7 -0
  42. package/lib/core/handler.d.mts +16 -0
  43. package/lib/core/handler.mjs +132 -0
  44. package/lib/core/http_error.d.mts +2 -0
  45. package/lib/core/http_error.mjs +1 -0
  46. package/lib/core/http_header.d.mts +856 -0
  47. package/lib/core/http_header.mjs +860 -0
  48. package/lib/core/http_method.d.mts +3 -0
  49. package/lib/core/http_method.mjs +10 -0
  50. package/lib/core/http_redirect.d.mts +5 -0
  51. package/lib/core/http_redirect.mjs +10 -0
  52. package/lib/core/server.d.mts +20 -0
  53. package/lib/core/server.mjs +186 -0
  54. package/lib/core/types.d.mts +256 -0
  55. package/lib/exports.d.mts +46 -0
  56. package/lib/exports.mjs +46 -0
  57. package/lib/index.d.mts +48 -0
  58. package/lib/index.mjs +45 -0
  59. package/lib/plugins/base.d.mts +4 -0
  60. package/lib/plugins/compress.d.mts +12 -0
  61. package/lib/plugins/compress.mjs +15 -0
  62. package/lib/plugins/cookie.d.mts +12 -0
  63. package/lib/plugins/cookie.mjs +15 -0
  64. package/lib/plugins/cors.d.mts +22 -0
  65. package/lib/plugins/cors.mjs +34 -0
  66. package/lib/plugins/file_parser.d.mts +15 -0
  67. package/lib/plugins/file_parser.mjs +24 -0
  68. package/lib/plugins/form_body_parser.d.mts +12 -0
  69. package/lib/plugins/form_body_parser.mjs +15 -0
  70. package/lib/plugins/ws_parser.d.mts +12 -0
  71. package/lib/plugins/ws_parser.mjs +15 -0
  72. package/lib/plugins/xml_parser.d.mts +19 -0
  73. package/lib/plugins/xml_parser.mjs +40 -0
  74. package/lib/services/ai.d.mts +31 -0
  75. package/lib/services/ai.mjs +44 -0
  76. package/lib/services/base.d.mts +4 -0
  77. package/lib/services/base.mjs +1 -0
  78. package/lib/services/cache.d.mts +165 -0
  79. package/lib/services/cache.mjs +323 -0
  80. package/lib/services/captcha.d.mts +65 -0
  81. package/lib/services/captcha.mjs +61 -0
  82. package/lib/services/{crypto.js → crypto.d.mts} +19 -78
  83. package/lib/services/crypto.mjs +141 -0
  84. package/lib/services/db_value.d.mts +60 -0
  85. package/lib/services/db_value.mjs +64 -0
  86. package/lib/services/dingtalk.d.mts +39 -0
  87. package/lib/services/dingtalk.mjs +44 -0
  88. package/lib/services/dispose.d.mts +17 -0
  89. package/lib/services/dispose.mjs +18 -0
  90. package/lib/services/emoji.d.mts +10 -0
  91. package/lib/services/emoji.mjs +2025 -0
  92. package/lib/services/file_store.d.mts +49 -0
  93. package/lib/services/file_store.mjs +58 -0
  94. package/lib/services/html.d.mts +11 -0
  95. package/lib/services/html.mjs +12 -0
  96. package/lib/services/jwt.d.mts +33 -0
  97. package/lib/services/jwt.mjs +42 -0
  98. package/lib/services/log.d.mts +37 -0
  99. package/lib/services/log.mjs +99 -0
  100. package/lib/services/mail.d.mts +22 -0
  101. package/lib/services/mail.mjs +28 -0
  102. package/lib/services/pay.d.mts +123 -0
  103. package/lib/services/pay.mjs +157 -0
  104. package/lib/services/random.d.mts +27 -0
  105. package/lib/services/random.mjs +42 -0
  106. package/lib/services/rate_limit.d.mts +37 -0
  107. package/lib/services/rate_limit.mjs +40 -0
  108. package/lib/services/redis.d.mts +11 -0
  109. package/lib/services/redis.mjs +6 -0
  110. package/lib/services/sensitive_words.d.mts +29 -0
  111. package/lib/services/sensitive_words.mjs +37 -0
  112. package/lib/services/sms.d.mts +40 -0
  113. package/lib/services/sms.mjs +30238 -0
  114. package/lib/types/dto.d.mts +30 -0
  115. package/lib/types/dto.mjs +1 -0
  116. package/lib/x.d.mts +11 -0
  117. package/lib/x.mjs +21 -0
  118. package/lib/x_init.d.mts +1 -0
  119. package/lib/x_init.mjs +10 -0
  120. package/package.json +71 -16
  121. package/lib/_cjs/cli/api_generator.js +0 -458
  122. package/lib/_cjs/cli/build_util.js +0 -243
  123. package/lib/_cjs/cli/cli.js +0 -378
  124. package/lib/_cjs/cli/css_register.js +0 -7
  125. package/lib/_cjs/cli/deploy_util.js +0 -76
  126. package/lib/_cjs/cli/dev_util.js +0 -26
  127. package/lib/_cjs/cli/env_util.js +0 -252
  128. package/lib/_cjs/cli/esbuild_register.js +0 -7
  129. package/lib/_cjs/cli/template_util.js +0 -101
  130. package/lib/_cjs/cli/templates/crons.ts +0 -2
  131. package/lib/_cjs/cli/templates/handlers.ts +0 -3
  132. package/lib/_cjs/cli/templates/hooks.ts +0 -2
  133. package/lib/_cjs/cli/templates/models.ts +0 -123
  134. package/lib/_cjs/cli/templates/package.json +0 -3
  135. package/lib/_cjs/cli/templates/routes.ts +0 -68
  136. package/lib/_cjs/core/ctx_storage.js +0 -6
  137. package/lib/_cjs/core/define_bus.js +0 -31
  138. package/lib/_cjs/core/define_cron.js +0 -13
  139. package/lib/_cjs/core/define_handler.js +0 -56
  140. package/lib/_cjs/core/define_hook.js +0 -8
  141. package/lib/_cjs/core/define_server.js +0 -10
  142. package/lib/_cjs/core/define_task.js +0 -113
  143. package/lib/_cjs/core/get_handler_url.js +0 -11
  144. package/lib/_cjs/core/handler.js +0 -216
  145. package/lib/_cjs/core/http_error.js +0 -6
  146. package/lib/_cjs/core/http_header.js +0 -142
  147. package/lib/_cjs/core/http_method.js +0 -12
  148. package/lib/_cjs/core/http_redirect.js +0 -11
  149. package/lib/_cjs/core/server.js +0 -219
  150. package/lib/_cjs/core/types.js +0 -8
  151. package/lib/_cjs/exports.js +0 -273
  152. package/lib/_cjs/index.js +0 -15
  153. package/lib/_cjs/plugins/base.js +0 -3
  154. package/lib/_cjs/plugins/compress.js +0 -18
  155. package/lib/_cjs/plugins/cookie.js +0 -18
  156. package/lib/_cjs/plugins/cors.js +0 -38
  157. package/lib/_cjs/plugins/file_parser.js +0 -28
  158. package/lib/_cjs/plugins/form_body_parser.js +0 -18
  159. package/lib/_cjs/plugins/ws_parser.js +0 -18
  160. package/lib/_cjs/plugins/xml_parser.js +0 -48
  161. package/lib/_cjs/services/ai.js +0 -48
  162. package/lib/_cjs/services/base.js +0 -3
  163. package/lib/_cjs/services/cache.js +0 -400
  164. package/lib/_cjs/services/captcha.js +0 -78
  165. package/lib/_cjs/services/crypto.js +0 -175
  166. package/lib/_cjs/services/db_value.js +0 -77
  167. package/lib/_cjs/services/dingtalk.js +0 -51
  168. package/lib/_cjs/services/dispose.js +0 -23
  169. package/lib/_cjs/services/emoji.js +0 -2034
  170. package/lib/_cjs/services/file_store.js +0 -67
  171. package/lib/_cjs/services/html.js +0 -17
  172. package/lib/_cjs/services/jwt.js +0 -65
  173. package/lib/_cjs/services/log.js +0 -108
  174. package/lib/_cjs/services/mail.js +0 -31
  175. package/lib/_cjs/services/pay.js +0 -191
  176. package/lib/_cjs/services/random.js +0 -51
  177. package/lib/_cjs/services/rate_limit.js +0 -54
  178. package/lib/_cjs/services/redis.js +0 -12
  179. package/lib/_cjs/services/sensitive_words.js +0 -61
  180. package/lib/_cjs/services/sms.js +0 -84
  181. package/lib/_cjs/types/dto.js +0 -3
  182. package/lib/_cjs/x.js +0 -35
  183. package/lib/cli/api_generator.d.ts +0 -74
  184. package/lib/cli/api_generator.js +0 -452
  185. package/lib/cli/build_util.d.ts +0 -17
  186. package/lib/cli/build_util.js +0 -236
  187. package/lib/cli/cli.d.ts +0 -2
  188. package/lib/cli/cli.js +0 -374
  189. package/lib/cli/css_register.js +0 -5
  190. package/lib/cli/deploy_util.d.ts +0 -23
  191. package/lib/cli/deploy_util.js +0 -70
  192. package/lib/cli/dev_util.d.ts +0 -8
  193. package/lib/cli/dev_util.js +0 -20
  194. package/lib/cli/env_util.d.ts +0 -45
  195. package/lib/cli/env_util.js +0 -246
  196. package/lib/cli/esbuild_register.js +0 -5
  197. package/lib/cli/template_util.d.ts +0 -18
  198. package/lib/cli/template_util.js +0 -95
  199. package/lib/core/ctx_storage.d.ts +0 -3
  200. package/lib/core/ctx_storage.js +0 -2
  201. package/lib/core/define_bus.d.ts +0 -37
  202. package/lib/core/define_bus.js +0 -27
  203. package/lib/core/define_cron.js +0 -9
  204. package/lib/core/define_handler.js +0 -48
  205. package/lib/core/define_hook.d.ts +0 -2
  206. package/lib/core/define_hook.js +0 -4
  207. package/lib/core/define_server.d.ts +0 -3
  208. package/lib/core/define_server.js +0 -6
  209. package/lib/core/define_task.js +0 -107
  210. package/lib/core/get_handler_url.d.ts +0 -2
  211. package/lib/core/get_handler_url.js +0 -7
  212. package/lib/core/handler.d.ts +0 -16
  213. package/lib/core/handler.js +0 -209
  214. package/lib/core/http_error.d.ts +0 -2
  215. package/lib/core/http_error.js +0 -2
  216. package/lib/core/http_header.d.ts +0 -856
  217. package/lib/core/http_header.js +0 -139
  218. package/lib/core/http_method.d.ts +0 -3
  219. package/lib/core/http_method.js +0 -8
  220. package/lib/core/http_redirect.d.ts +0 -5
  221. package/lib/core/http_redirect.js +0 -6
  222. package/lib/core/server.d.ts +0 -20
  223. package/lib/core/server.js +0 -213
  224. package/lib/core/types.d.ts +0 -265
  225. package/lib/core/types.js +0 -4
  226. package/lib/exports.d.ts +0 -45
  227. package/lib/exports.js +0 -47
  228. package/lib/index.d.ts +0 -2
  229. package/lib/index.js +0 -3
  230. package/lib/plugins/base.d.ts +0 -4
  231. package/lib/plugins/base.js +0 -1
  232. package/lib/plugins/compress.d.ts +0 -13
  233. package/lib/plugins/compress.js +0 -12
  234. package/lib/plugins/cookie.d.ts +0 -13
  235. package/lib/plugins/cookie.js +0 -12
  236. package/lib/plugins/cors.d.ts +0 -22
  237. package/lib/plugins/cors.js +0 -32
  238. package/lib/plugins/file_parser.d.ts +0 -16
  239. package/lib/plugins/file_parser.js +0 -22
  240. package/lib/plugins/form_body_parser.d.ts +0 -13
  241. package/lib/plugins/form_body_parser.js +0 -12
  242. package/lib/plugins/ws_parser.d.ts +0 -13
  243. package/lib/plugins/ws_parser.js +0 -12
  244. package/lib/plugins/xml_parser.d.ts +0 -19
  245. package/lib/plugins/xml_parser.js +0 -43
  246. package/lib/services/ai.d.ts +0 -31
  247. package/lib/services/ai.js +0 -43
  248. package/lib/services/base.d.ts +0 -4
  249. package/lib/services/base.js +0 -1
  250. package/lib/services/cache.d.ts +0 -173
  251. package/lib/services/cache.js +0 -394
  252. package/lib/services/captcha.d.ts +0 -65
  253. package/lib/services/captcha.js +0 -72
  254. package/lib/services/crypto.d.ts +0 -110
  255. package/lib/services/db_value.d.ts +0 -60
  256. package/lib/services/db_value.js +0 -72
  257. package/lib/services/dingtalk.d.ts +0 -39
  258. package/lib/services/dingtalk.js +0 -45
  259. package/lib/services/dispose.d.ts +0 -17
  260. package/lib/services/dispose.js +0 -17
  261. package/lib/services/emoji.d.ts +0 -10
  262. package/lib/services/emoji.js +0 -2029
  263. package/lib/services/file_store.d.ts +0 -49
  264. package/lib/services/file_store.js +0 -61
  265. package/lib/services/html.d.ts +0 -11
  266. package/lib/services/html.js +0 -12
  267. package/lib/services/jwt.d.ts +0 -34
  268. package/lib/services/jwt.js +0 -59
  269. package/lib/services/log.d.ts +0 -37
  270. package/lib/services/log.js +0 -102
  271. package/lib/services/mail.d.ts +0 -23
  272. package/lib/services/mail.js +0 -25
  273. package/lib/services/pay.d.ts +0 -123
  274. package/lib/services/pay.js +0 -185
  275. package/lib/services/random.d.ts +0 -27
  276. package/lib/services/random.js +0 -45
  277. package/lib/services/rate_limit.d.ts +0 -37
  278. package/lib/services/rate_limit.js +0 -49
  279. package/lib/services/redis.d.ts +0 -12
  280. package/lib/services/redis.js +0 -7
  281. package/lib/services/sensitive_words.d.ts +0 -29
  282. package/lib/services/sensitive_words.js +0 -56
  283. package/lib/services/sms.d.ts +0 -40
  284. package/lib/services/sms.js +0 -78
  285. package/lib/types/dto.d.ts +0 -86
  286. package/lib/types/dto.js +0 -1
  287. package/lib/x.d.ts +0 -17
  288. package/lib/x.js +0 -30
  289. /package/lib/{cli/css_register.d.ts → core/types.mjs} +0 -0
  290. /package/lib/{cli/esbuild_register.d.ts → plugins/base.mjs} +0 -0
@@ -0,0 +1,27 @@
1
+ import { BaseService } from "./base.mjs";
2
+ export declare class RandomService implements BaseService {
3
+ serviceName: string;
4
+ /**
5
+ * 24位。
6
+ *
7
+ * @see https://github.com/paralleldrive/cuid2
8
+ */
9
+ cuid2(): string;
10
+ /**
11
+ * [0-9 a-z A-Z]
12
+ */
13
+ generateAlphanumeric(length: number): string;
14
+ /**
15
+ * [a-z A-Z]
16
+ */
17
+ generateAlphabetic(length: number): string;
18
+ /**
19
+ * [0-9]
20
+ */
21
+ generateNumeric(length: number): string;
22
+ }
23
+ declare module '../x.mjs' {
24
+ interface X {
25
+ random: RandomService;
26
+ }
27
+ }
@@ -0,0 +1,42 @@
1
+ import { createId } from "@paralleldrive/cuid2";
2
+ import randomstring from "randomstring";
3
+ // src/services/random.ts
4
+ var RandomService = class {
5
+ serviceName = "random";
6
+ /**
7
+ * 24位。
8
+ *
9
+ * @see https://github.com/paralleldrive/cuid2
10
+ */
11
+ cuid2() {
12
+ return createId();
13
+ }
14
+ /**
15
+ * [0-9 a-z A-Z]
16
+ */
17
+ generateAlphanumeric(length) {
18
+ return randomstring.generate({
19
+ charset: "alphanumeric",
20
+ length
21
+ });
22
+ }
23
+ /**
24
+ * [a-z A-Z]
25
+ */
26
+ generateAlphabetic(length) {
27
+ return randomstring.generate({
28
+ charset: "alphabetic",
29
+ length
30
+ });
31
+ }
32
+ /**
33
+ * [0-9]
34
+ */
35
+ generateNumeric(length) {
36
+ return randomstring.generate({
37
+ charset: "numeric",
38
+ length
39
+ });
40
+ }
41
+ };
42
+ export { RandomService };
@@ -0,0 +1,37 @@
1
+ import { BaseService } from "./base.mjs";
2
+ import { MsValue } from "vtils";
3
+ export interface RateLimitServiceLimitByCountOptions {
4
+ key: string;
5
+ ttl: MsValue;
6
+ count: number;
7
+ }
8
+ export interface RateLimitServiceLimitByCountOrFailOptions extends RateLimitServiceLimitByCountOptions {
9
+ message?: string;
10
+ }
11
+ export interface RateLimitServiceLimitByManyCountOptions {
12
+ key: string;
13
+ limits: Array<{
14
+ ttl: MsValue;
15
+ count: number;
16
+ }>;
17
+ }
18
+ export interface RateLimitServiceLimitByManyCountOrFailOptions extends RateLimitServiceLimitByManyCountOptions {
19
+ message?: string;
20
+ limits: Array<{
21
+ ttl: MsValue;
22
+ count: number;
23
+ message?: string;
24
+ }>;
25
+ }
26
+ export declare class RateLimitService implements BaseService {
27
+ serviceName: string;
28
+ limitByCount(options: RateLimitServiceLimitByCountOptions): Promise<number>;
29
+ limitByCountOrFail(options: RateLimitServiceLimitByCountOrFailOptions): Promise<number>;
30
+ limitByManyCount(options: RateLimitServiceLimitByManyCountOptions): Promise<true | number>;
31
+ limitByManyCountOrFail(options: RateLimitServiceLimitByManyCountOrFailOptions): Promise<void>;
32
+ }
33
+ declare module '../x.mjs' {
34
+ interface X {
35
+ rateLimit: RateLimitService;
36
+ }
37
+ }
@@ -0,0 +1,40 @@
1
+ import { HttpError } from "../core/http_error.mjs";
2
+ import { x } from "../x.mjs";
3
+ import { ms } from "vtils";
4
+ // src/services/rate_limit.ts
5
+ var RateLimitService = class {
6
+ serviceName = "rateLimit";
7
+ async limitByCount(options) {
8
+ const cacheKey = `rateLimit_${options.key}`;
9
+ const remainingCount = await x.cache.get(cacheKey);
10
+ if (remainingCount == null) {
11
+ await x.cache.set(cacheKey, options.count, options.ttl);
12
+ return options.count;
13
+ }
14
+ if (remainingCount === 0) return 0;
15
+ await x.cache.decrease(cacheKey);
16
+ return remainingCount - 1;
17
+ }
18
+ async limitByCountOrFail(options) {
19
+ const count = await this.limitByCount(options);
20
+ if (count === 0) throw new HttpError.Forbidden(options.message);
21
+ return count;
22
+ }
23
+ async limitByManyCount(options) {
24
+ for (let i = 0; i < options.limits.length; i++) {
25
+ const item = options.limits[i];
26
+ const ttl = ms(item.ttl);
27
+ if (await this.limitByCount({
28
+ key: `${options.key}_${ttl}`,
29
+ ttl,
30
+ count: item.count
31
+ }) === 0) return i;
32
+ }
33
+ return true;
34
+ }
35
+ async limitByManyCountOrFail(options) {
36
+ const pass = await this.limitByManyCount(options);
37
+ if (pass !== true) throw new HttpError.Forbidden(options.limits[pass].message ?? options.message);
38
+ }
39
+ };
40
+ export { RateLimitService };
@@ -0,0 +1,11 @@
1
+ import { BaseService } from "./base.mjs";
2
+ import { Redis, RedisOptions } from "ioredis";
3
+ export interface RedisServiceOptions extends RedisOptions {}
4
+ export declare class RedisService extends Redis implements BaseService {
5
+ serviceName: string;
6
+ }
7
+ declare module '../x.mjs' {
8
+ interface X {
9
+ redis: RedisService;
10
+ }
11
+ }
@@ -0,0 +1,6 @@
1
+ import { Redis } from "ioredis";
2
+ // src/services/redis.ts
3
+ var RedisService = class extends Redis {
4
+ serviceName = "redis";
5
+ };
6
+ export { RedisService };
@@ -0,0 +1,29 @@
1
+ import { BaseService } from "./base.mjs";
2
+ export interface SensitiveWordsServiceOptions {
3
+ /** 敏感词列表 */
4
+ words: string[];
5
+ }
6
+ /**
7
+ * 敏感词服务。
8
+ */
9
+ export declare class SensitiveWordsService implements BaseService {
10
+ serviceName: string;
11
+ private sensitiveWords;
12
+ constructor(options: SensitiveWordsServiceOptions);
13
+ /**
14
+ * 文本转换。
15
+ */
16
+ private transform;
17
+ /**
18
+ * 验证文本是否包含敏感词。
19
+ */
20
+ validate(text: string, every?: boolean): Promise<{
21
+ pass: boolean;
22
+ words: string[];
23
+ }>;
24
+ }
25
+ declare module '../x.mjs' {
26
+ interface X {
27
+ sensitiveWords: SensitiveWordsService;
28
+ }
29
+ }
@@ -0,0 +1,37 @@
1
+ import { memoize, removeBlankChars, removeNonWordChars, toHalfWidthString, uniq } from "vtils";
2
+ import { phoneNumberRegExpBuilder } from "vtils/regexp";
3
+ // src/services/sensitive_words.ts
4
+ const phoneNumberRegExp = phoneNumberRegExpBuilder.build();
5
+ const toRegExp = memoize((re) => new RegExp(re.substring(1, re.length - 1)), (re) => re);
6
+ /**
7
+ * 敏感词服务。
8
+ */
9
+ var SensitiveWordsService = class {
10
+ serviceName = "sensitiveWords";
11
+ sensitiveWords = [];
12
+ constructor(options) {
13
+ this.sensitiveWords = uniq(options.words.map((word) => word.toLowerCase()));
14
+ }
15
+ /**
16
+ * 文本转换。
17
+ */
18
+ transform(text) {
19
+ return removeBlankChars(removeNonWordChars(toHalfWidthString(text))).toLowerCase().replace(/([^a-zA-Z0-9])\1+/g, "$1");
20
+ }
21
+ /**
22
+ * 验证文本是否包含敏感词。
23
+ */
24
+ async validate(text, every) {
25
+ text = this.transform(text);
26
+ const words = [];
27
+ for (const word of this.sensitiveWords) if (word === "<手机号>" ? phoneNumberRegExp.test(text) : word[0] === "/" && word[word.length - 1] === "/" ? toRegExp(word).test(text) : text.includes(word)) {
28
+ words.push(word);
29
+ if (!every) break;
30
+ }
31
+ return {
32
+ pass: !words.length,
33
+ words
34
+ };
35
+ }
36
+ };
37
+ export { SensitiveWordsService };
@@ -0,0 +1,40 @@
1
+ import { BaseService } from "./base.mjs";
2
+ export type SmsServiceProvider = 'tencentCloud';
3
+ export type SmsServiceOptions = {
4
+ provider: 'tencentCloud';
5
+ providerOptions: {
6
+ appId: string;
7
+ secretId: string;
8
+ secretKey: string;
9
+ };
10
+ };
11
+ export type SmsServiceSendPayload = {
12
+ provider: SmsServiceProvider;
13
+ signature: string;
14
+ templateId: string;
15
+ templateParamValues: string[];
16
+ phoneNumber: string;
17
+ };
18
+ export type SmsServiceSendResult = {
19
+ success: boolean;
20
+ message: string;
21
+ smsId: string;
22
+ };
23
+ export type SmsServiceErrorType = 'TEXT_INTERCEPTION' | 'PROVIDER_EXCEPTION' | 'RATE_LIMITATION' | 'NUMBER_EXCEPTION' | 'USER_REJECTION' | 'OTHERS';
24
+ export declare class SmsService implements BaseService {
25
+ private options;
26
+ serviceName: string;
27
+ constructor(options: SmsServiceOptions);
28
+ send(payload: SmsServiceSendPayload): Promise<SmsServiceSendResult>;
29
+ /**
30
+ * 推断错误类型
31
+ *
32
+ * @param errMsg 错误信息
33
+ */
34
+ static inferErrorType(errMsg: string): SmsServiceErrorType;
35
+ }
36
+ declare module '../x.mjs' {
37
+ interface X {
38
+ sms: SmsService;
39
+ }
40
+ }