@jayfong/x-server 2.118.1 → 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 +99 -43
  121. package/lib/_cjs/cli/api_generator.js +0 -438
  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 -25
  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 -221
  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 -62
  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 -432
  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 -19
  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 -215
  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 -33
  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 -30
  282. package/lib/services/sensitive_words.js +0 -57
  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,141 @@
1
+ import crypto from "node:crypto";
2
+ // src/services/crypto.ts
3
+ var CryptoService = class {
4
+ serviceName = "crypto";
5
+ /**
6
+ * 将给定的文本转换为 Base64 编码的字符串
7
+ *
8
+ * @param text 需要编码的原始文本
9
+ * @returns 返回 Base64 编码后的字符串
10
+ */
11
+ base64Encode(text) {
12
+ return Buffer.from(text).toString("base64");
13
+ }
14
+ /**
15
+ * 将 Base64 编码的字符串转换为 UTF-8 编码的字符串
16
+ *
17
+ * @param text Base64 编码的字符串
18
+ * @returns 转换后的 UTF-8 编码的字符串
19
+ */
20
+ base64Decode(text) {
21
+ return Buffer.from(text, "base64").toString("utf8");
22
+ }
23
+ /**
24
+ * 将字符串文本编码为Base64 URL格式
25
+ *
26
+ * 此函数的目的是将输入的字符串转换为Base64编码,并进一步转换为URL安全的格式
27
+ * Base64标准字符集中的'+'和'/'在URL中有特殊意义,因此需要被替换为'-'和'_'
28
+ * 此外,Base64编码中用于填充的'='字符在URL中通常被视为不必要的,因此也会被移除
29
+ *
30
+ * @param text 需要被编码的字符串文本
31
+ * @returns 编码后的Base64 URL安全字符串
32
+ */
33
+ base64UrlEncode(text) {
34
+ let base64 = Buffer.from(text).toString("base64");
35
+ base64 = base64.replace(/\+/g, "-");
36
+ base64 = base64.replace(/\//g, "_");
37
+ base64 = base64.replace(/=/g, "");
38
+ return base64;
39
+ }
40
+ /**
41
+ * 解码base64url格式的字符串
42
+ * base64url是一种用于URL的base64编码变体,它将标准base64中的'+'和'/'字符替换为'-'和'_',以避免URL编码
43
+ * 此函数的作用是将base64url编码的字符串解码回原始字符串
44
+ *
45
+ * @param text 需要解码的base64url格式的字符串
46
+ * @returns 解码后的原始字符串
47
+ */
48
+ base64UrlDecode(text) {
49
+ return Buffer.from(text.replace(/-/g, "+").replace(/_/g, "/"), "base64").toString("utf8");
50
+ }
51
+ /**
52
+ * 使用MD5算法对文本进行哈希处理
53
+ *
54
+ * @param text 需要进行哈希处理的文本
55
+ * @returns 返回经过MD5哈希处理后的字符串
56
+ */
57
+ md5(text) {
58
+ return crypto.createHash("md5").update(text).digest("hex");
59
+ }
60
+ /**
61
+ * 使用SHA-1算法对文本进行哈希处理
62
+ *
63
+ * SHA-1是一种安全散列算法,它接收一个输入(在此例中为文本字符串),
64
+ * 并返回一个固定大小的160位散列值,通常以40位的十六进制数字表示
65
+ * 此函数用于将给定的文本转换为SHA-1散列值,常用于数据完整性校验或存储密码的散列值
66
+ *
67
+ * @param text 待哈希处理的文本字符串
68
+ * @returns 返回文本的SHA-1散列值,以十六进制字符串形式表示
69
+ */
70
+ sha1(text) {
71
+ return crypto.createHash("sha1").update(text).digest("hex");
72
+ }
73
+ /**
74
+ * 使用SHA-256算法对文本进行哈希处理
75
+ *
76
+ * @param text 输入的文本字符串
77
+ * @returns 返回经过SHA-256哈希处理后的十六进制字符串
78
+ */
79
+ sha256(text) {
80
+ return crypto.createHash("sha256").update(text).digest("hex");
81
+ }
82
+ /**
83
+ * 使用SHA-512算法对文本进行哈希处理
84
+ *
85
+ * @param text 输入的文本字符串
86
+ * @returns 返回经过SHA-512哈希处理后的字符串
87
+ */
88
+ sha512(text) {
89
+ return crypto.createHash("sha512").update(text).digest("hex");
90
+ }
91
+ /**
92
+ * 使用给定的密钥对给定的字符串执行 AES 加密(加密模式为 ECB,填充方式为 PKCS7)。
93
+ *
94
+ * @param text - 要加密的字符串。
95
+ * @param key - 用于加密的密钥(仅支持16字节的密钥)。
96
+ */
97
+ aesEncrypt(text, key) {
98
+ const cipher = crypto.createCipheriv("aes-128-ecb", key.substring(0, 16), null);
99
+ let encrypted = cipher.update(text, "utf8", "base64");
100
+ encrypted += cipher.final("base64");
101
+ return encrypted;
102
+ }
103
+ /**
104
+ * 使用给定的密钥对给定的字符串执行 AES 解密(解密模式为 ECB,填充方式为 PKCS7)。
105
+ *
106
+ * @param text - 要解密的字符串。
107
+ * @param key - 用于解密的密钥(仅支持16字节的密钥)。
108
+ */
109
+ aesDecrypt(text, key) {
110
+ const decipher = crypto.createDecipheriv("aes-128-ecb", key.substring(0, 16), null);
111
+ let decrypted = decipher.update(text, "base64", "utf8");
112
+ decrypted += decipher.final("utf8");
113
+ return decrypted;
114
+ }
115
+ /**
116
+ * 使用AES加密算法对JSON数据进行加密
117
+ *
118
+ * 该方法首先将payload参数序列化为JSON字符串,然后使用指定的密钥进行AES加密
119
+ * 主要用于在传输敏感信息前,对数据进行加密处理,以确保数据的安全性
120
+ *
121
+ * @param payload 任何类型的对象,代表需要加密的原始数据
122
+ * @param key 字符串类型的密钥,用于AES加密算法
123
+ * 密钥需要符合AES加密算法的长度要求
124
+ * @returns 返回加密后的字符串数据
125
+ * 加密后的数据可以安全地进行网络传输或存储
126
+ */
127
+ aesEncryptJson(payload, key) {
128
+ return this.aesEncrypt(JSON.stringify(payload), key);
129
+ }
130
+ /**
131
+ * 使用AES算法解密给定的文本,并将解密后的结果解析为JSON对象
132
+ *
133
+ * @param text 需要解密的加密文本
134
+ * @param key 解密用的密钥,必须与加密时使用的密钥相同
135
+ * @returns 返回解密后的JSON对象,类型为泛型T,根据调用时指定的类型解析
136
+ */
137
+ aesDecryptJson(text, key) {
138
+ return JSON.parse(this.aesDecrypt(text, key));
139
+ }
140
+ };
141
+ export { CryptoService };
@@ -0,0 +1,60 @@
1
+ import { BaseService } from "./base.mjs";
2
+ export type DbValueServiceSimpleArrayOptions = {
3
+ /**
4
+ * 分隔符
5
+ *
6
+ * @default ,
7
+ */
8
+ separator?: string;
9
+ /**
10
+ * 前缀后缀
11
+ */
12
+ affix?: string;
13
+ /**
14
+ * 是否数字
15
+ */
16
+ number?: boolean;
17
+ };
18
+ export type DbValueServiceJsonObjectOptions<T> = {
19
+ transform?: {
20
+ add?: (value: T) => T;
21
+ get?: (value: T) => T;
22
+ update?: (value: T) => T;
23
+ };
24
+ };
25
+ export declare class DbValueService implements BaseService {
26
+ serviceName: string;
27
+ SimpleArray: {
28
+ new <T extends string | number = string>(options?: DbValueServiceSimpleArrayOptions): {
29
+ separator: string;
30
+ affix: string;
31
+ number: boolean;
32
+ add: (value?: T[], defaultValue?: T[]) => string;
33
+ get: (value?: string) => T[];
34
+ update: (value?: T[]) => string | undefined;
35
+ };
36
+ };
37
+ JsonArray: {
38
+ new <T = string>(): {
39
+ add: (value?: T[], defaultValue?: T[]) => string;
40
+ get: (value?: string) => T[];
41
+ update: (value?: T[]) => string | undefined;
42
+ };
43
+ };
44
+ JsonObject: {
45
+ new <T>(options?: DbValueServiceJsonObjectOptions<T>): {
46
+ options?: DbValueServiceJsonObjectOptions<T>;
47
+ hasTransformAdd: boolean;
48
+ hasTransformGet: boolean;
49
+ hasTransformUpdate: boolean;
50
+ add: (value?: T, defaultValue?: T) => string;
51
+ get: (value?: string) => T;
52
+ update: (value?: T) => string | undefined;
53
+ };
54
+ };
55
+ }
56
+ declare module '../x.mjs' {
57
+ interface X {
58
+ dbValue: DbValueService;
59
+ }
60
+ }
@@ -0,0 +1,64 @@
1
+ import { isPlainObject } from "vtils";
2
+ // src/services/db_value.ts
3
+ var DbValueService = class {
4
+ serviceName = "dbValue";
5
+ SimpleArray = class {
6
+ separator;
7
+ affix;
8
+ number;
9
+ constructor(options) {
10
+ this.separator = options?.separator || ",";
11
+ this.affix = options?.affix || "";
12
+ this.number = !!options?.number;
13
+ }
14
+ add = (value, defaultValue = []) => {
15
+ const text = (!value || !Array.isArray(value) ? defaultValue : value.filter((v) => v != null && v !== "")).join(this.separator);
16
+ return !text || !this.affix ? text : `${this.affix}${text}${this.affix}`;
17
+ };
18
+ get = (value) => {
19
+ const res = !value ? [] : String(!this.affix ? value : value.substring(this.affix.length, value.length - this.affix.length)).split(this.separator).filter((v) => v !== "");
20
+ return this.number ? res.map(Number) : res;
21
+ };
22
+ update = (value) => {
23
+ const text = !value || !Array.isArray(value) ? void 0 : value.filter((v) => v != null && v !== "").join(this.separator);
24
+ return !text || !this.affix ? text : `${this.affix}${text}${this.affix}`;
25
+ };
26
+ };
27
+ JsonArray = class {
28
+ add = (value, defaultValue = []) => {
29
+ return JSON.stringify(!value || !Array.isArray(value) ? defaultValue : value);
30
+ };
31
+ get = (value) => {
32
+ return !value ? [] : JSON.parse(value);
33
+ };
34
+ update = (value) => {
35
+ return !value || !Array.isArray(value) ? void 0 : JSON.stringify(value);
36
+ };
37
+ };
38
+ JsonObject = class {
39
+ options;
40
+ hasTransformAdd = false;
41
+ hasTransformGet = false;
42
+ hasTransformUpdate = false;
43
+ constructor(options) {
44
+ this.options = options;
45
+ this.hasTransformAdd = !!options?.transform?.add;
46
+ this.hasTransformGet = !!options?.transform?.get;
47
+ this.hasTransformUpdate = !!options?.transform?.update;
48
+ }
49
+ add = (value, defaultValue = {}) => {
50
+ if (value && this.hasTransformAdd) value = this.options.transform.add(value);
51
+ return JSON.stringify(!value || !isPlainObject(value) ? defaultValue : value);
52
+ };
53
+ get = (value) => {
54
+ let result = !value ? {} : JSON.parse(value);
55
+ if (result && this.hasTransformGet) result = this.options.transform.get(result);
56
+ return result;
57
+ };
58
+ update = (value) => {
59
+ if (value && this.hasTransformUpdate) value = this.options.transform.update(value);
60
+ return !value || !isPlainObject(value) ? void 0 : JSON.stringify(value);
61
+ };
62
+ };
63
+ };
64
+ export { DbValueService };
@@ -0,0 +1,39 @@
1
+ import { BaseService } from "./base.mjs";
2
+ export interface DingtalkServiceOptions {
3
+ /**
4
+ * 访问口令。
5
+ */
6
+ accessToken: string;
7
+ /**
8
+ * 访问密钥。
9
+ */
10
+ secret: string;
11
+ }
12
+ export interface DingtalkServiceSendOptions {
13
+ /**
14
+ * 通知标题。
15
+ */
16
+ title: string;
17
+ /**
18
+ * 通知内容,Markdown 格式。
19
+ */
20
+ content: string;
21
+ /**
22
+ * 要提醒的人员,设为 `all` 表示 @ 所有人,设为手机号数组只 @ 指定人。
23
+ */
24
+ at?: 'all' | string[];
25
+ }
26
+ export declare class DingtalkService implements BaseService {
27
+ private options;
28
+ serviceName: string;
29
+ constructor(options: DingtalkServiceOptions);
30
+ send(options: DingtalkServiceSendOptions): Promise<{
31
+ errcode: number;
32
+ errmsg: string;
33
+ }>;
34
+ }
35
+ declare module '../x.mjs' {
36
+ interface X {
37
+ dingtalk: DingtalkService;
38
+ }
39
+ }
@@ -0,0 +1,44 @@
1
+ import { xr } from "@jayfong/x-request";
2
+ import crypto from "node:crypto";
3
+ // src/services/dingtalk.ts
4
+ var DingtalkService = class {
5
+ options;
6
+ serviceName = "dingtalk";
7
+ constructor(options) {
8
+ this.options = options;
9
+ }
10
+ async send(options) {
11
+ const timestamp = Date.now();
12
+ const sign = crypto.createHmac("sha256", this.options.secret).update(`${timestamp}\n${this.options.secret}`).digest("base64");
13
+ const data = {
14
+ msgtype: "markdown",
15
+ markdown: {
16
+ title: options.title,
17
+ text: options.content
18
+ },
19
+ at: {
20
+ atMobiles: Array.isArray(options.at) ? options.at : [],
21
+ isAtAll: options.at === "all"
22
+ }
23
+ };
24
+ if (!data.at.isAtAll && data.at.atMobiles.length) {
25
+ const atMobiles = data.at.atMobiles.filter((mobile) => !data.markdown.text.includes(`@${mobile}`));
26
+ if (atMobiles.length) {
27
+ const atMobilesText = atMobiles.map((mobile) => `@${mobile}`).join(" ");
28
+ data.markdown.text += `<!-- ${atMobilesText} -->`;
29
+ }
30
+ }
31
+ const { data: body } = await xr.postJson({
32
+ url: "https://oapi.dingtalk.com/robot/send",
33
+ query: {
34
+ access_token: this.options.accessToken,
35
+ timestamp: `${timestamp}`,
36
+ sign
37
+ },
38
+ data
39
+ });
40
+ if (body.errcode !== 0) throw new Error(body.errmsg);
41
+ return body;
42
+ }
43
+ };
44
+ export { DingtalkService };
@@ -0,0 +1,17 @@
1
+ import { BaseService } from "./base.mjs";
2
+ export interface DisposeServiceOptions {
3
+ disposeOnExit?: boolean;
4
+ }
5
+ export declare class DisposeService implements BaseService {
6
+ private options?;
7
+ serviceName: string;
8
+ constructor(options?: DisposeServiceOptions | undefined);
9
+ private disposes;
10
+ add(fn: () => any): void;
11
+ dispose(): Promise<any[]>;
12
+ }
13
+ declare module '../x.mjs' {
14
+ interface X {
15
+ dispose: DisposeService;
16
+ }
17
+ }
@@ -0,0 +1,18 @@
1
+ import onExit from "exit-hook";
2
+ // src/services/dispose.ts
3
+ var DisposeService = class {
4
+ options;
5
+ serviceName = "dispose";
6
+ constructor(options) {
7
+ this.options = options;
8
+ if (this.options?.disposeOnExit) onExit(() => this.dispose());
9
+ }
10
+ disposes = [];
11
+ add(fn) {
12
+ this.disposes.push(fn);
13
+ }
14
+ dispose() {
15
+ return Promise.all(this.disposes.map((dispose) => dispose()));
16
+ }
17
+ };
18
+ export { DisposeService };
@@ -0,0 +1,10 @@
1
+ import { BaseService } from "./base.mjs";
2
+ export declare class EmojiService implements BaseService {
3
+ serviceName: string;
4
+ unify(text: string): string;
5
+ }
6
+ declare module '../x.mjs' {
7
+ interface X {
8
+ emoji: EmojiService;
9
+ }
10
+ }