@whyour/qinglong 2.17.12-rc.2 → 2.18.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 (252) hide show
  1. package/README-en.md +1 -1
  2. package/README.md +2 -2
  3. package/docker/docker-compose.yml +3 -8
  4. package/package.json +45 -41
  5. package/sample/config.sample.sh +21 -2
  6. package/sample/notify.js +114 -15
  7. package/sample/notify.py +99 -45
  8. package/shell/api.sh +26 -0
  9. package/shell/preload/sitecustomize.js +7 -1
  10. package/shell/preload/sitecustomize.py +9 -1
  11. package/shell/share.sh +3 -7
  12. package/shell/start.sh +6 -1
  13. package/shell/task.sh +1 -1
  14. package/shell/update.sh +2 -6
  15. package/static/build/api/config.js +2 -1
  16. package/static/build/api/script.js +4 -3
  17. package/static/build/api/system.js +16 -1
  18. package/static/build/api/user.js +1 -1
  19. package/static/build/config/util.js +13 -3
  20. package/static/build/data/notify.js +16 -1
  21. package/static/build/data/system.js +1 -0
  22. package/static/build/loaders/express.js +11 -14
  23. package/static/build/loaders/initData.js +41 -5
  24. package/static/build/loaders/initFile.js +74 -76
  25. package/static/build/loaders/sock.js +4 -5
  26. package/static/build/loaders/update.js +2 -2
  27. package/static/build/schedule/index.js +0 -1
  28. package/static/build/services/cron.js +2 -1
  29. package/static/build/services/dependence.js +16 -7
  30. package/static/build/services/env.js +4 -27
  31. package/static/build/services/notify.js +50 -4
  32. package/static/build/services/open.js +16 -14
  33. package/static/build/services/schedule.js +1 -1
  34. package/static/build/services/sshKey.js +5 -6
  35. package/static/build/services/system.js +17 -5
  36. package/static/build/services/user.js +116 -161
  37. package/static/build/shared/store.js +32 -0
  38. package/static/build/shared/utils.js +27 -0
  39. package/static/build/token.js +2 -6
  40. package/static/dist/{827.efeeec44.async.js → 105.85a5c47a.async.js} +1 -1
  41. package/static/dist/{4588.46a3a31e.async.js → 1083.f86ce804.async.js} +1 -1
  42. package/static/dist/1149.33cb7e7a.async.js +1 -0
  43. package/static/dist/119.89e2d610.async.js +1 -0
  44. package/static/dist/{9631.042017c3.async.js → 1352.ab6da08e.async.js} +1 -1
  45. package/static/dist/1690.f0290540.async.js +1 -0
  46. package/static/dist/1742.6cbe5aca.async.js +1 -0
  47. package/static/dist/1765.d8e002d7.async.js +1 -0
  48. package/static/dist/1885.e0d00d2d.async.js +1 -0
  49. package/static/dist/2081.d0d781b1.async.js +1 -0
  50. package/static/dist/2096.383c1047.async.js +1 -0
  51. package/static/dist/2237.4d3def87.async.js +1 -0
  52. package/static/dist/2325.dfa32834.async.js +1 -0
  53. package/static/dist/2338.d678967d.async.js +1 -0
  54. package/static/dist/255.12f03ab2.async.js +1 -0
  55. package/static/dist/2625.675b6a18.chunk.css +1 -0
  56. package/static/dist/2634.a765cd37.async.js +1 -0
  57. package/static/dist/{8605.f56664b9.async.js → 2742.4852aac8.async.js} +1 -1
  58. package/static/dist/2821.be3dc88e.async.js +1 -0
  59. package/static/dist/2890.9e373f5b.async.js +1 -0
  60. package/static/dist/{4658.8a9e2830.async.js → 3034.6413c38e.async.js} +1 -1
  61. package/static/dist/3382.a584a111.async.js +1 -0
  62. package/static/dist/{2755.f6377d52.async.js → 3383.041eee73.async.js} +1 -1
  63. package/static/dist/3390.fb4b6851.async.js +1 -0
  64. package/static/dist/3481.333c2962.async.js +1 -0
  65. package/static/dist/3600.7637c822.async.js +1 -0
  66. package/static/dist/4046.7fbcfa02.async.js +1 -0
  67. package/static/dist/4642.9e24d86c.async.js +1 -0
  68. package/static/dist/4799.d5ca9f30.async.js +1 -0
  69. package/static/dist/4865.98e5a005.async.js +1 -0
  70. package/static/dist/4902.54ecbdb5.async.js +1 -0
  71. package/static/dist/5171.7fc6d0a2.async.js +1 -0
  72. package/static/dist/5312.5545b3ed.async.js +1 -0
  73. package/static/dist/5481.624d0e07.async.js +1 -0
  74. package/static/dist/5520.ff2cfd6b.async.js +1 -0
  75. package/static/dist/{8167.8f9d5e88.async.js → 5653.4fce7ce8.async.js} +1 -1
  76. package/static/dist/5970.10ac4f16.async.js +1 -0
  77. package/static/dist/6013.2d7bb12a.async.js +1 -0
  78. package/static/dist/6016.9c379049.async.js +1 -0
  79. package/static/dist/6035.5889ddc7.async.js +1 -0
  80. package/static/dist/6159.55cb068a.async.js +1 -0
  81. package/static/dist/{5394.de174420.async.js → 6247.b550d996.async.js} +1 -1
  82. package/static/dist/6341.673fb65c.async.js +1 -0
  83. package/static/dist/6439.7ef6c5e3.async.js +1 -0
  84. package/static/dist/{6141.db67ebff.async.js → 6541.a6d499de.async.js} +1 -1
  85. package/static/dist/6646.5fc37228.async.js +1 -0
  86. package/static/dist/6707.801b886b.async.js +1 -0
  87. package/static/dist/6872.42f939f1.async.js +1 -0
  88. package/static/dist/691.187a388c.async.js +1 -0
  89. package/static/dist/{1667.94045304.async.js → 7025.f4080d63.async.js} +1 -1
  90. package/static/dist/7285.d561cf26.async.js +1 -0
  91. package/static/dist/7355.5e5e573b.async.js +1 -0
  92. package/static/dist/7384.065ccae2.async.js +1 -0
  93. package/static/dist/739.6be5552a.async.js +1 -0
  94. package/static/dist/7528.d8b76d8a.async.js +1 -0
  95. package/static/dist/7802.6b73f16a.async.js +1 -0
  96. package/static/dist/{9120.ef78d517.async.js → 8060.8b699029.async.js} +1 -1
  97. package/static/dist/{8078.4add9375.async.js → 8078.8586c875.async.js} +1 -1
  98. package/static/dist/8142.e3e82eda.async.js +1 -0
  99. package/static/dist/852.15be2189.async.js +1 -0
  100. package/static/dist/8528.3dffc548.async.js +1 -0
  101. package/static/dist/872.10bd0974.async.js +1 -0
  102. package/static/dist/872.3fffed15.chunk.css +1 -0
  103. package/static/dist/8982.d2dba153.async.js +1 -0
  104. package/static/dist/9065.df8d5dcc.async.js +1 -0
  105. package/static/dist/9066.605168f8.async.js +1 -0
  106. package/static/dist/955.3c9481f7.async.js +1 -0
  107. package/static/dist/9730.30083c91.async.js +1 -0
  108. package/static/dist/9761.627ca3b5.async.js +1 -0
  109. package/static/dist/index.html +8 -7
  110. package/static/dist/layouts__index.1fce90e0.chunk.css +1 -0
  111. package/static/dist/layouts__index.c164d41f.async.js +1 -0
  112. package/static/dist/preload_helper.55b35ae0.js +1 -0
  113. package/static/dist/src__pages__404.6871535b.async.js +1 -0
  114. package/static/dist/src__pages__config__index.39b5f99f.async.js +1 -0
  115. package/static/dist/src__pages__crontab__detail.6f7c3205.async.js +1 -0
  116. package/static/dist/src__pages__crontab__index.55a8714d.async.js +1 -0
  117. package/static/dist/src__pages__crontab__logModal.c88ea3b7.async.js +1 -0
  118. package/static/dist/src__pages__crontab__modal.328fee41.async.js +1 -0
  119. package/static/dist/{src__pages__crontab__type.a798cac7.async.js → src__pages__crontab__type.5895ed02.async.js} +1 -1
  120. package/static/dist/src__pages__crontab__viewCreateModal.ffcf7a24.async.js +1 -0
  121. package/static/dist/src__pages__crontab__viewManageModal.c71ebc5a.async.js +1 -0
  122. package/static/dist/src__pages__dependence__index.edec638b.async.js +1 -0
  123. package/static/dist/src__pages__dependence__logModal.f123e2ac.async.js +1 -0
  124. package/static/dist/src__pages__dependence__modal.9fd1176b.async.js +1 -0
  125. package/static/dist/{src__pages__dependence__type.860703e8.async.js → src__pages__dependence__type.bdac3725.async.js} +1 -1
  126. package/static/dist/src__pages__diff__index.8ba53a1e.async.js +1 -0
  127. package/static/dist/src__pages__env__editNameModal.c35e96f9.async.js +1 -0
  128. package/static/dist/src__pages__env__index.c799138c.async.js +1 -0
  129. package/static/dist/src__pages__env__modal.3b0ca9a6.async.js +1 -0
  130. package/static/dist/src__pages__error__index.0221fcd9.async.js +1 -0
  131. package/static/dist/src__pages__initialization__index.346725d1.async.js +1 -0
  132. package/static/dist/src__pages__log__index.2fd615f2.async.js +1 -0
  133. package/static/dist/src__pages__login__index.1dd6e684.async.js +1 -0
  134. package/static/dist/src__pages__script__editModal.28caeb56.async.js +1 -0
  135. package/static/dist/src__pages__script__editNameModal.1155d34c.async.js +1 -0
  136. package/static/dist/src__pages__script__index.6a212c2d.async.js +1 -0
  137. package/static/dist/src__pages__script__renameModal.dabfccfd.async.js +1 -0
  138. package/static/dist/src__pages__script__saveModal.04d43882.async.js +1 -0
  139. package/static/dist/src__pages__script__setting.9d5ad53c.async.js +1 -0
  140. package/static/dist/src__pages__setting__about.3a1a6f3b.async.js +1 -0
  141. package/static/dist/src__pages__setting__appModal.7b3bff1e.async.js +1 -0
  142. package/static/dist/src__pages__setting__checkUpdate.0dfdaf7c.async.js +1 -0
  143. package/static/dist/src__pages__setting__dependence.a9b7ed43.async.js +1 -0
  144. package/static/dist/src__pages__setting__index.ffa1cdd6.async.js +1 -0
  145. package/static/dist/src__pages__setting__loginLog.fc87584a.async.js +1 -0
  146. package/static/dist/src__pages__setting__notification.97b1d997.async.js +1 -0
  147. package/static/dist/src__pages__setting__other.34ccb2e8.async.js +1 -0
  148. package/static/dist/src__pages__setting__progress.75143dca.async.js +1 -0
  149. package/static/dist/src__pages__setting__security.c777fb87.async.js +1 -0
  150. package/static/dist/src__pages__setting__systemLog.63e9c69d.async.js +1 -0
  151. package/static/dist/src__pages__subscription__index.69a6de02.async.js +1 -0
  152. package/static/dist/src__pages__subscription__logModal.b3c7c02c.async.js +1 -0
  153. package/static/dist/src__pages__subscription__modal.aefaf070.async.js +1 -0
  154. package/static/dist/umi.a4d14b92.css +1 -0
  155. package/static/dist/umi.fb3ed7a0.js +1 -0
  156. package/version.yaml +7 -10
  157. package/static/dist/1186.39086229.async.js +0 -1
  158. package/static/dist/1431.36b64dc5.async.js +0 -1
  159. package/static/dist/1467.6163d4ee.async.js +0 -1
  160. package/static/dist/2099.a46e32fc.async.js +0 -1
  161. package/static/dist/2182.59dcf306.chunk.css +0 -1
  162. package/static/dist/2260.6c4d0bd0.async.js +0 -1
  163. package/static/dist/2393.3d8adf53.async.js +0 -1
  164. package/static/dist/2618.7a71aedf.async.js +0 -1
  165. package/static/dist/2715.292538bc.async.js +0 -1
  166. package/static/dist/2796.9a52d80e.async.js +0 -1
  167. package/static/dist/2899.03668225.async.js +0 -1
  168. package/static/dist/29.32a92099.async.js +0 -1
  169. package/static/dist/3435.2670d41f.async.js +0 -1
  170. package/static/dist/3435.d2d0a2c7.chunk.css +0 -1
  171. package/static/dist/3669.d39d1a9d.async.js +0 -1
  172. package/static/dist/380.33bc8989.async.js +0 -1
  173. package/static/dist/3800.f0507af4.async.js +0 -1
  174. package/static/dist/4039.badd6267.async.js +0 -1
  175. package/static/dist/4124.980265f2.async.js +0 -1
  176. package/static/dist/4163.17026fe1.async.js +0 -1
  177. package/static/dist/419.908ca086.async.js +0 -1
  178. package/static/dist/4424.a840b858.async.js +0 -1
  179. package/static/dist/4645.d909733e.async.js +0 -1
  180. package/static/dist/4674.1b3db685.async.js +0 -1
  181. package/static/dist/4925.9b770864.async.js +0 -1
  182. package/static/dist/5310.4cd7a0c1.async.js +0 -1
  183. package/static/dist/5484.68655765.async.js +0 -1
  184. package/static/dist/573.21675f9c.async.js +0 -1
  185. package/static/dist/5830.9be47cbb.async.js +0 -1
  186. package/static/dist/6035.48d17c03.async.js +0 -1
  187. package/static/dist/6064.a5141a7d.async.js +0 -1
  188. package/static/dist/641.f0614d96.async.js +0 -1
  189. package/static/dist/6712.05e15d48.async.js +0 -1
  190. package/static/dist/6805.ae3d4019.async.js +0 -1
  191. package/static/dist/694.0baa21db.async.js +0 -1
  192. package/static/dist/6986.6a4ae181.async.js +0 -1
  193. package/static/dist/7346.7096e3b3.async.js +0 -1
  194. package/static/dist/7362.e740709d.async.js +0 -1
  195. package/static/dist/7393.ea2d5ba3.async.js +0 -1
  196. package/static/dist/745.3be9ce9f.async.js +0 -1
  197. package/static/dist/7742.51617038.async.js +0 -1
  198. package/static/dist/7787.b041d555.async.js +0 -1
  199. package/static/dist/7987.5bace809.async.js +0 -1
  200. package/static/dist/8298.978b54ae.async.js +0 -1
  201. package/static/dist/833.87a694db.async.js +0 -1
  202. package/static/dist/8430.0291dda0.async.js +0 -1
  203. package/static/dist/8432.d8d0ade6.async.js +0 -1
  204. package/static/dist/858.1a385b25.async.js +0 -1
  205. package/static/dist/8934.55adca8f.async.js +0 -1
  206. package/static/dist/9065.a1341834.async.js +0 -1
  207. package/static/dist/9504.22415050.async.js +0 -1
  208. package/static/dist/9673.ac17e45d.async.js +0 -1
  209. package/static/dist/9847.d72d4b37.async.js +0 -1
  210. package/static/dist/layouts__index.2f94d49c.async.js +0 -1
  211. package/static/dist/layouts__index.35164d74.chunk.css +0 -1
  212. package/static/dist/src__pages__404.e1ca45fd.async.js +0 -1
  213. package/static/dist/src__pages__config__index.c778a0e0.async.js +0 -1
  214. package/static/dist/src__pages__crontab__detail.34c9ca68.async.js +0 -1
  215. package/static/dist/src__pages__crontab__index.f196124c.async.js +0 -1
  216. package/static/dist/src__pages__crontab__logModal.91357c7c.async.js +0 -1
  217. package/static/dist/src__pages__crontab__modal.6fa9520e.async.js +0 -1
  218. package/static/dist/src__pages__crontab__viewCreateModal.1fe0e251.async.js +0 -1
  219. package/static/dist/src__pages__crontab__viewManageModal.c6dcfcf8.async.js +0 -1
  220. package/static/dist/src__pages__dependence__index.aca3926b.async.js +0 -1
  221. package/static/dist/src__pages__dependence__logModal.07786c7c.async.js +0 -1
  222. package/static/dist/src__pages__dependence__modal.e67d0ff6.async.js +0 -1
  223. package/static/dist/src__pages__diff__index.82b124a8.async.js +0 -1
  224. package/static/dist/src__pages__env__editNameModal.38d65f05.async.js +0 -1
  225. package/static/dist/src__pages__env__index.f545d035.async.js +0 -1
  226. package/static/dist/src__pages__env__modal.6fad122b.async.js +0 -1
  227. package/static/dist/src__pages__error__index.c5c8ed46.async.js +0 -1
  228. package/static/dist/src__pages__initialization__index.a26591c2.async.js +0 -1
  229. package/static/dist/src__pages__log__index.bc06b12f.async.js +0 -1
  230. package/static/dist/src__pages__login__index.e4257741.async.js +0 -1
  231. package/static/dist/src__pages__script__editModal.be12c9e5.async.js +0 -1
  232. package/static/dist/src__pages__script__editNameModal.e7f7fea1.async.js +0 -1
  233. package/static/dist/src__pages__script__index.4fdb14ad.async.js +0 -1
  234. package/static/dist/src__pages__script__renameModal.436dedbf.async.js +0 -1
  235. package/static/dist/src__pages__script__saveModal.f65940c2.async.js +0 -1
  236. package/static/dist/src__pages__script__setting.b4891488.async.js +0 -1
  237. package/static/dist/src__pages__setting__about.d7cea886.async.js +0 -1
  238. package/static/dist/src__pages__setting__appModal.48994718.async.js +0 -1
  239. package/static/dist/src__pages__setting__checkUpdate.0dd2f8d5.async.js +0 -1
  240. package/static/dist/src__pages__setting__dependence.b6d378b3.async.js +0 -1
  241. package/static/dist/src__pages__setting__index.45c54c51.async.js +0 -1
  242. package/static/dist/src__pages__setting__loginLog.4ba597ea.async.js +0 -1
  243. package/static/dist/src__pages__setting__notification.7df85f89.async.js +0 -1
  244. package/static/dist/src__pages__setting__other.2c4534ef.async.js +0 -1
  245. package/static/dist/src__pages__setting__progress.57907231.async.js +0 -1
  246. package/static/dist/src__pages__setting__security.e26348a7.async.js +0 -1
  247. package/static/dist/src__pages__setting__systemLog.a77a9995.async.js +0 -1
  248. package/static/dist/src__pages__subscription__index.0f0a7c0a.async.js +0 -1
  249. package/static/dist/src__pages__subscription__logModal.8d68bb96.async.js +0 -1
  250. package/static/dist/src__pages__subscription__modal.26538bfd.async.js +0 -1
  251. package/static/dist/umi.8a0eaca6.css +0 -1
  252. package/static/dist/umi.ae45a508.js +0 -1
package/README-en.md CHANGED
@@ -126,7 +126,7 @@ curl -sL https://deb.nodesource.com/setup_20.x | sudo -E bash -
126
126
  npm install -g node-pre-gyp pnpm@8.3.1
127
127
  npm install -g @whyour/qinglong
128
128
  qinglong
129
- # Add the environment variables QL_DIR and QL_DATA_DIR when prompted
129
+ # Add the environment variables QL_DIR and QL_DATA_DIR when prompted, QL_DATA_DIR must end with /data.
130
130
  export QL_DIR=""
131
131
  export QL_DATA_DIR=""
132
132
  # Run again
package/README.md CHANGED
@@ -88,7 +88,7 @@ docker run -dit \
88
88
 
89
89
  ```bash
90
90
  # curl -L https://github.com/docker/compose/releases/download/1.16.1/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose
91
- mkdir qinglong
91
+ mkdir qinglong && cd $_
92
92
  wget https://raw.githubusercontent.com/whyour/qinglong/master/docker/docker-compose.yml
93
93
 
94
94
  # 启动
@@ -128,7 +128,7 @@ curl -sL https://deb.nodesource.com/setup_20.x | sudo -E bash -
128
128
  npm install -g node-pre-gyp pnpm@8.3.1
129
129
  npm install -g @whyour/qinglong
130
130
  qinglong
131
- # 根据提示增加环境变量 QL_DIR 和 QL_DATA_DIR
131
+ # 根据提示增加环境变量 QL_DIR 和 QL_DATA_DIR,QL_DATA_DIR 必须以 /data 结尾
132
132
  export QL_DIR=""
133
133
  export QL_DATA_DIR=""
134
134
  # 再次执行
@@ -1,15 +1,10 @@
1
- version: '2'
2
1
  services:
3
2
  web:
4
- # alpine 基础镜像版本
5
- image: whyour/qinglong:latest
6
- # debian-slim 基础镜像版本
7
- # image: whyour/qinglong:debian
3
+ image: whyour/qinglong:latest # 基于 Debian 的版本:whyour/qinglong:debian
8
4
  volumes:
9
5
  - ./data:/ql/data
10
6
  ports:
11
- - "0.0.0.0:5700:5700"
7
+ - "5700:5700"
12
8
  environment:
13
- # 部署路径非必须,以斜杠开头和结尾,比如 /test/
14
- QlBaseUrl: '/'
9
+ QlBaseUrl: '/' # 部署路径非必须,以斜杠开头和结尾,比如 /test/
15
10
  restart: unless-stopped
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@whyour/qinglong",
3
- "version": "2.17.12-rc.2",
3
+ "version": "2.18.0",
4
4
  "description": "Timed task management platform supporting Python3, JavaScript, Shell, Typescript",
5
5
  "repository": {
6
6
  "type": "git",
@@ -70,64 +70,68 @@
70
70
  "react-dom": "18",
71
71
  "dva-core": "2"
72
72
  }
73
+ },
74
+ "overrides": {
75
+ "sqlite3": "git+https://github.com/whyour/node-sqlite3.git#v1.0.3"
73
76
  }
74
77
  },
75
78
  "dependencies": {
76
- "@grpc/grpc-js": "^1.8.13",
79
+ "@grpc/grpc-js": "^1.12.3",
77
80
  "@otplib/preset-default": "^12.0.1",
78
- "@sentry/node": "^8.26.0",
79
- "body-parser": "^1.19.2",
80
- "celebrate": "^15.0.1",
81
- "chokidar": "^3.5.3",
81
+ "@sentry/node": "^8.42.0",
82
+ "body-parser": "^1.20.3",
83
+ "celebrate": "^15.0.3",
84
+ "chokidar": "^4.0.1",
82
85
  "cors": "^2.8.5",
83
- "cron-parser": "^4.2.1",
84
- "cross-spawn": "^7.0.3",
85
- "dayjs": "^1.11.2",
86
- "dotenv": "^16.0.0",
87
- "express": "^4.17.3",
88
- "express-jwt": "^6.1.1",
89
- "express-rate-limit": "^7.0.0",
90
- "express-urlrewrite": "^1.4.0",
86
+ "cron-parser": "^4.9.0",
87
+ "cross-spawn": "^7.0.6",
88
+ "dayjs": "^1.11.13",
89
+ "dotenv": "^16.4.6",
90
+ "express": "^4.21.1",
91
+ "express-jwt": "^8.4.1",
92
+ "express-rate-limit": "^7.4.1",
93
+ "express-urlrewrite": "^2.0.3",
91
94
  "form-data": "^4.0.0",
92
95
  "got": "^11.8.2",
93
96
  "hpagent": "^1.2.0",
94
- "http-proxy-middleware": "^2.0.6",
97
+ "http-proxy-middleware": "^3.0.3",
95
98
  "iconv-lite": "^0.6.3",
96
99
  "js-yaml": "^4.1.0",
97
- "jsonwebtoken": "^8.5.1",
100
+ "jsonwebtoken": "^9.0.2",
98
101
  "lodash": "^4.17.21",
99
102
  "multer": "1.4.5-lts.1",
100
103
  "nedb": "^1.8.0",
101
104
  "node-schedule": "^2.1.0",
102
- "nodemailer": "^6.7.2",
105
+ "nodemailer": "^6.9.16",
103
106
  "p-queue-cjs": "7.3.4",
104
- "protobufjs": "^7.3.0",
107
+ "protobufjs": "^7.4.0",
105
108
  "pstree.remy": "^1.1.8",
106
- "reflect-metadata": "^0.1.13",
107
- "sequelize": "^6.25.5",
108
- "serve-handler": "^6.1.3",
109
+ "reflect-metadata": "^0.2.2",
110
+ "sequelize": "^6.37.5",
111
+ "serve-handler": "^6.1.6",
109
112
  "sockjs": "^0.3.24",
110
113
  "sqlite3": "git+https://github.com/whyour/node-sqlite3.git#v1.0.3",
111
- "toad-scheduler": "^1.6.0",
114
+ "toad-scheduler": "^3.0.1",
112
115
  "typedi": "^0.10.0",
113
- "uuid": "^8.3.2",
114
- "winston": "^3.6.0",
115
- "winston-daily-rotate-file": "^4.7.1",
116
- "yargs": "^17.3.1",
117
- "tough-cookie": "^4.0.0",
116
+ "uuid": "^11.0.3",
117
+ "winston": "^3.17.0",
118
+ "winston-daily-rotate-file": "^5.0.0",
118
119
  "request-ip": "3.3.0",
119
- "ip2region": "2.3.0"
120
+ "ip2region": "2.3.0",
121
+ "keyv": "^5.2.3",
122
+ "@keyv/sqlite": "^4.0.1",
123
+ "proper-lockfile": "^4.1.2"
120
124
  },
121
125
  "devDependencies": {
122
126
  "moment": "2.30.1",
123
- "@ant-design/icons": "^4.7.0",
127
+ "@ant-design/icons": "^5.0.1",
124
128
  "@ant-design/pro-layout": "6.38.22",
125
129
  "@codemirror/view": "^6.34.1",
126
130
  "@codemirror/state": "^6.4.1",
127
131
  "@monaco-editor/react": "4.2.1",
128
- "@react-hook/resize-observer": "^1.2.6",
132
+ "@react-hook/resize-observer": "^2.0.2",
129
133
  "react-router-dom": "6.26.1",
130
- "@sentry/react": "^8.26.0",
134
+ "@sentry/react": "^8.42.0",
131
135
  "@types/body-parser": "^1.19.2",
132
136
  "@types/cors": "^2.8.12",
133
137
  "@types/cross-spawn": "^6.0.2",
@@ -151,18 +155,19 @@
151
155
  "@types/sockjs-client": "^1.5.1",
152
156
  "@types/uuid": "^8.3.4",
153
157
  "@types/request-ip": "0.0.41",
158
+ "@types/proper-lockfile": "^4.1.4",
154
159
  "@uiw/codemirror-extensions-langs": "^4.21.9",
155
160
  "@uiw/react-codemirror": "^4.21.9",
156
- "@umijs/max": "^4.0.72",
161
+ "@umijs/max": "^4.3.36",
157
162
  "@umijs/ssr-darkreader": "^4.9.45",
158
163
  "ahooks": "^3.7.8",
159
164
  "ansi-to-react": "^6.1.6",
160
165
  "antd": "^4.24.8",
161
- "antd-img-crop": "^4.2.3",
166
+ "antd-img-crop": "^4.23.0",
162
167
  "axios": "^1.4.0",
163
168
  "compression-webpack-plugin": "9.2.0",
164
169
  "concurrently": "^7.0.0",
165
- "react-hotkeys-hook": "^4.4.1",
170
+ "react-hotkeys-hook": "^4.6.1",
166
171
  "file-saver": "2.0.2",
167
172
  "lint-staged": "^13.0.3",
168
173
  "monaco-editor": "0.33.0",
@@ -173,14 +178,14 @@
173
178
  "qrcode.react": "^1.0.1",
174
179
  "query-string": "^7.1.1",
175
180
  "rc-tween-one": "^3.0.6",
176
- "rc-virtual-list": "3.5.3",
177
- "react": "18.2.0",
181
+ "rc-virtual-list": "3.15.0",
182
+ "react": "18.3.1",
178
183
  "react-copy-to-clipboard": "^5.1.0",
179
184
  "react-diff-viewer": "^3.1.1",
180
- "react-dnd": "^14.0.2",
181
- "react-dnd-html5-backend": "^14.0.0",
182
- "react-dom": "18.2.0",
183
- "react-intl-universal": "^2.6.21",
185
+ "react-dnd": "^16.0.1",
186
+ "react-dnd-html5-backend": "^16.0.1",
187
+ "react-dom": "18.3.1",
188
+ "react-intl-universal": "^2.12.0",
184
189
  "react-split-pane": "^0.1.92",
185
190
  "sockjs-client": "^1.6.0",
186
191
  "ts-node": "^10.9.2",
@@ -189,7 +194,6 @@
189
194
  "typescript": "5.2.2",
190
195
  "vh-check": "^2.0.5",
191
196
  "virtualizedtableforantd4": "1.3.0",
192
- "webpack": "^5.70.0",
193
197
  "yorkie": "^2.0.0"
194
198
  }
195
199
  }
@@ -117,6 +117,16 @@ export PUSH_PLUS_TOKEN=""
117
117
  ## 下方填写您的一对多推送的 "群组编码" ,(一对多推送下面->您的群组(如无则新建)->群组编码)
118
118
  ## 1. 需订阅者扫描二维码 2、如果您是创建群组所属人,也需点击“查看二维码”扫描绑定,否则不能接受群组消息推送
119
119
  export PUSH_PLUS_USER=""
120
+ ## 发送模板,支持html,txt,json,markdown,cloudMonitor,jenkins,route,pay
121
+ export PUSH_PLUS_TEMPLATE="html"
122
+ ## 发送渠道,支持wechat,webhook,cp,mail,sms
123
+ export PUSH_PLUS_CHANNEL="wechat"
124
+ ## webhook编码,可在pushplus公众号上扩展配置出更多渠道
125
+ export PUSH_PLUS_WEBHOOK=""
126
+ ## 发送结果回调地址,会把推送最终结果通知到这个地址上
127
+ export PUSH_PLUS_CALLBACKURL=""
128
+ ## 好友令牌,微信公众号渠道填写好友令牌,企业微信渠道填写企业微信用户id
129
+ export PUSH_PLUS_TO=""
120
130
 
121
131
  ## 9. 微加机器人
122
132
  ## 官方网站:http://www.weplusbot.com
@@ -220,8 +230,17 @@ export NTFY_URL=""
220
230
  export NTFY_TOPIC=""
221
231
  export NTFY_PRIORITY="3"
222
232
 
223
-
224
- ## 21. 自定义通知
233
+ ## 21. wxPusher
234
+ ## 官方文档: https://wxpusher.zjiecode.com/docs/
235
+ ## 管理后台: https://wxpusher.zjiecode.com/admin/
236
+ ## wxPusher 的 appToken
237
+ export WXPUSHER_APP_TOKEN=""
238
+ ## wxPusher 的 topicIds,多个用英文分号;分隔 topic_ids 与 uids 至少配置一个才行
239
+ export WXPUSHER_TOPIC_IDS=""
240
+ ## wxPusher 的 用户ID,多个用英文分号;分隔 topic_ids 与 uids 至少配置一个才行
241
+ export WXPUSHER_UIDS=""
242
+
243
+ ## 22. 自定义通知
225
244
  ## 自定义通知 接收回调的URL
226
245
  export WEBHOOK_URL=""
227
246
  ## WEBHOOK_BODY 和 WEBHOOK_HEADERS 多个参数时,直接换行或者使用 $'\n' 连接多行字符串,比如 export dd="line 1"$'\n'"line 2"
package/sample/notify.js CHANGED
@@ -40,9 +40,14 @@ const push_config = {
40
40
  CHAT_URL: '', // synology chat url
41
41
  CHAT_TOKEN: '', // synology chat token
42
42
 
43
- // 官方文档:http://www.pushplus.plus/
44
- PUSH_PLUS_TOKEN: '', // push+ 微信推送的用户令牌
45
- PUSH_PLUS_USER: '', // push+ 微信推送的群组编码
43
+ // 官方文档:https://www.pushplus.plus/
44
+ PUSH_PLUS_TOKEN: '', // pushplus 推送的用户令牌
45
+ PUSH_PLUS_USER: '', // pushplus 推送的群组编码
46
+ PUSH_PLUS_TEMPLATE: 'html', // pushplus 发送模板,支持html,txt,json,markdown,cloudMonitor,jenkins,route,pay
47
+ PUSH_PLUS_CHANNEL: 'wechat', // pushplus 发送渠道,支持wechat,webhook,cp,mail,sms
48
+ PUSH_PLUS_WEBHOOK: '', // pushplus webhook编码,可在pushplus公众号上扩展配置出更多渠道
49
+ PUSH_PLUS_CALLBACKURL: '', // pushplus 发送结果回调地址,会把推送最终结果通知到这个地址上
50
+ PUSH_PLUS_TO: '', // pushplus 好友令牌,微信公众号渠道填写好友令牌,企业微信渠道填写企业微信用户id
46
51
 
47
52
  // 微加机器人,官方网站:https://www.weplusbot.com/
48
53
  WE_PLUS_BOT_TOKEN: '', // 微加机器人的用户令牌
@@ -99,6 +104,12 @@ const push_config = {
99
104
  NTFY_URL: '', // ntfy地址,如https://ntfy.sh,默认为https://ntfy.sh
100
105
  NTFY_TOPIC: '', // ntfy的消息应用topic
101
106
  NTFY_PRIORITY: '3', // 推送消息优先级,默认为3
107
+
108
+ // 官方文档: https://wxpusher.zjiecode.com/docs/
109
+ // 管理后台: https://wxpusher.zjiecode.com/admin/
110
+ WXPUSHER_APP_TOKEN: '', // wxpusher 的 appToken
111
+ WXPUSHER_TOPIC_IDS: '', // wxpusher 的 主题ID,多个用英文分号;分隔 topic_ids 与 uids 至少配置一个才行
112
+ WXPUSHER_UIDS: '', // wxpusher 的 用户ID,多个用英文分号;分隔 topic_ids 与 uids 至少配置一个才行
102
113
  };
103
114
 
104
115
  for (const key in push_config) {
@@ -231,10 +242,13 @@ function serverNotify(text, desp) {
231
242
 
232
243
  const matchResult = PUSH_KEY.match(/^sctp(\d+)t/i);
233
244
  const options = {
234
- url: matchResult && matchResult[1]
235
- ? `https://${matchResult[1]}.push.ft07.com/send/${PUSH_KEY}.send`
236
- : `https://sctapi.ftqq.com/${PUSH_KEY}.send`,
237
- body: `text=${encodeURIComponent(text)}&desp=${encodeURIComponent(desp)}`,
245
+ url:
246
+ matchResult && matchResult[1]
247
+ ? `https://${matchResult[1]}.push.ft07.com/send/${PUSH_KEY}.send`
248
+ : `https://sctapi.ftqq.com/${PUSH_KEY}.send`,
249
+ body: `text=${encodeURIComponent(text)}&desp=${encodeURIComponent(
250
+ desp,
251
+ )}`,
238
252
  headers: {
239
253
  'Content-Type': 'application/x-www-form-urlencoded',
240
254
  },
@@ -765,7 +779,15 @@ function iGotNotify(text, desp, params = {}) {
765
779
 
766
780
  function pushPlusNotify(text, desp) {
767
781
  return new Promise((resolve) => {
768
- const { PUSH_PLUS_TOKEN, PUSH_PLUS_USER } = push_config;
782
+ const {
783
+ PUSH_PLUS_TOKEN,
784
+ PUSH_PLUS_USER,
785
+ PUSH_PLUS_TEMPLATE,
786
+ PUSH_PLUS_CHANNEL,
787
+ PUSH_PLUS_WEBHOOK,
788
+ PUSH_PLUS_CALLBACKURL,
789
+ PUSH_PLUS_TO,
790
+ } = push_config;
769
791
  if (PUSH_PLUS_TOKEN) {
770
792
  desp = desp.replace(/[\n\r]/g, '<br>'); // 默认为html, 不支持plaintext
771
793
  const body = {
@@ -773,6 +795,11 @@ function pushPlusNotify(text, desp) {
773
795
  title: `${text}`,
774
796
  content: `${desp}`,
775
797
  topic: `${PUSH_PLUS_USER}`,
798
+ template: `${PUSH_PLUS_TEMPLATE}`,
799
+ channel: `${PUSH_PLUS_CHANNEL}`,
800
+ webhook: `${PUSH_PLUS_WEBHOOK}`,
801
+ callbackUrl: `${PUSH_PLUS_CALLBACKURL}`,
802
+ to: `${PUSH_PLUS_TO}`,
776
803
  };
777
804
  const options = {
778
805
  url: `https://www.pushplus.plus/send`,
@@ -786,7 +813,7 @@ function pushPlusNotify(text, desp) {
786
813
  try {
787
814
  if (err) {
788
815
  console.log(
789
- `Push+ 发送${
816
+ `pushplus 发送${
790
817
  PUSH_PLUS_USER ? '一对多' : '一对一'
791
818
  }通知消息失败😞\n`,
792
819
  err,
@@ -794,13 +821,15 @@ function pushPlusNotify(text, desp) {
794
821
  } else {
795
822
  if (data.code === 200) {
796
823
  console.log(
797
- `Push+ 发送${
824
+ `pushplus 发送${
798
825
  PUSH_PLUS_USER ? '一对多' : '一对一'
799
- }通知消息完成🎉\n`,
826
+ }通知请求成功🎉,可根据流水号查询推送结果:${
827
+ data.data
828
+ }\n注意:请求成功并不代表推送成功,如未收到消息,请到pushplus官网使用流水号查询推送最终结果`,
800
829
  );
801
830
  } else {
802
831
  console.log(
803
- `Push+ 发送${
832
+ `pushplus 发送${
804
833
  PUSH_PLUS_USER ? '一对多' : '一对一'
805
834
  }通知消息异常 ${data.msg}\n`,
806
835
  );
@@ -1205,10 +1234,10 @@ function ntfyNotify(text, desp) {
1205
1234
  if (NTFY_TOPIC) {
1206
1235
  const options = {
1207
1236
  url: `${NTFY_URL || 'https://ntfy.sh'}/${NTFY_TOPIC}`,
1208
- body: `${desp}`,
1237
+ body: `${desp}`,
1209
1238
  headers: {
1210
- 'Title': `${encodeRFC2047(text)}`,
1211
- 'Priority': NTFY_PRIORITY || '3'
1239
+ Title: `${encodeRFC2047(text)}`,
1240
+ Priority: NTFY_PRIORITY || '3',
1212
1241
  },
1213
1242
  timeout,
1214
1243
  };
@@ -1235,6 +1264,75 @@ function ntfyNotify(text, desp) {
1235
1264
  });
1236
1265
  }
1237
1266
 
1267
+ function wxPusherNotify(text, desp) {
1268
+ return new Promise((resolve) => {
1269
+ const { WXPUSHER_APP_TOKEN, WXPUSHER_TOPIC_IDS, WXPUSHER_UIDS } =
1270
+ push_config;
1271
+ if (WXPUSHER_APP_TOKEN) {
1272
+ // 处理topic_ids,将分号分隔的字符串转为数组
1273
+ const topicIds = WXPUSHER_TOPIC_IDS
1274
+ ? WXPUSHER_TOPIC_IDS.split(';')
1275
+ .map((id) => id.trim())
1276
+ .filter((id) => id)
1277
+ .map((id) => parseInt(id))
1278
+ : [];
1279
+
1280
+ // 处理uids,将分号分隔的字符串转为数组
1281
+ const uids = WXPUSHER_UIDS
1282
+ ? WXPUSHER_UIDS.split(';')
1283
+ .map((uid) => uid.trim())
1284
+ .filter((uid) => uid)
1285
+ : [];
1286
+
1287
+ // topic_ids uids 至少有一个
1288
+ if (!topicIds.length && !uids.length) {
1289
+ console.log(
1290
+ 'wxpusher 服务的 WXPUSHER_TOPIC_IDS 和 WXPUSHER_UIDS 至少设置一个!!',
1291
+ );
1292
+ return resolve();
1293
+ }
1294
+
1295
+ const body = {
1296
+ appToken: WXPUSHER_APP_TOKEN,
1297
+ content: `<h1>${text}</h1><br/><div style='white-space: pre-wrap;'>${desp}</div>`,
1298
+ summary: text,
1299
+ contentType: 2,
1300
+ topicIds: topicIds,
1301
+ uids: uids,
1302
+ verifyPayType: 0,
1303
+ };
1304
+
1305
+ const options = {
1306
+ url: 'https://wxpusher.zjiecode.com/api/send/message',
1307
+ body: JSON.stringify(body),
1308
+ headers: {
1309
+ 'Content-Type': 'application/json',
1310
+ },
1311
+ timeout,
1312
+ };
1313
+
1314
+ $.post(options, (err, resp, data) => {
1315
+ try {
1316
+ if (err) {
1317
+ console.log('wxpusher发送通知消息失败!\n', err);
1318
+ } else {
1319
+ if (data.code === 1000) {
1320
+ console.log('wxpusher发送通知消息完成!');
1321
+ } else {
1322
+ console.log(`wxpusher发送通知消息异常:${data.msg}`);
1323
+ }
1324
+ }
1325
+ } catch (e) {
1326
+ $.logErr(e, resp);
1327
+ } finally {
1328
+ resolve(data);
1329
+ }
1330
+ });
1331
+ } else {
1332
+ resolve();
1333
+ }
1334
+ });
1335
+ }
1238
1336
 
1239
1337
  function parseString(input, valueFormatFn) {
1240
1338
  const regex = /(\w+):\s*((?:(?!\n\w+:).)*)/g;
@@ -1365,6 +1463,7 @@ async function sendNotify(text, desp, params = {}) {
1365
1463
  webhookNotify(text, desp), // 自定义通知
1366
1464
  qmsgNotify(text, desp), // 自定义通知
1367
1465
  ntfyNotify(text, desp), // Ntfy
1466
+ wxPusherNotify(text, desp), // wxpusher
1368
1467
  ]);
1369
1468
  }
1370
1469