@yinuo-ngm/server 1.0.15 → 1.0.17

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 (349) hide show
  1. package/lib/app.js +3 -15
  2. package/lib/common/editor.js +2 -2
  3. package/lib/env.d.ts +1 -0
  4. package/lib/env.js +1 -0
  5. package/lib/plugins/error-handler.plugin.d.ts +2 -2
  6. package/lib/plugins/error-handler.plugin.js +97 -88
  7. package/lib/plugins/ws/topics/nginx.ws.js +2 -1
  8. package/lib/plugins/ws/topics/svn.ws.d.ts +2 -1
  9. package/lib/plugins/ws/topics/svn.ws.js +3 -2
  10. package/lib/plugins/ws/topics/syslog.ws.d.ts +1 -1
  11. package/lib/plugins/ws/topics/task.ws.d.ts +2 -1
  12. package/lib/plugins/ws/topics/task.ws.js +2 -1
  13. package/lib/plugins/ws/ws.context.d.ts +1 -1
  14. package/lib/plugins/ws/ws.plugin.js +4 -3
  15. package/lib/plugins/ws/ws.router.d.ts +2 -2
  16. package/lib/plugins/ws/ws.router.js +8 -7
  17. package/lib/routes/api-client/collection.routes.js +8 -6
  18. package/lib/routes/api-client/env.routes.js +4 -3
  19. package/lib/routes/api-client/history.routes.js +3 -2
  20. package/lib/routes/api-client/hub-token.routes.js +32 -10
  21. package/lib/routes/api-client/request.routes.js +7 -6
  22. package/lib/routes/api-client/send.routes.js +3 -2
  23. package/lib/routes/config.routes.js +5 -5
  24. package/lib/routes/hub.routes.js +10 -10
  25. package/lib/routes/index.js +2 -0
  26. package/lib/routes/nginx/nginx-lifecycle.routes.js +4 -0
  27. package/lib/routes/nginx/nginx-route.context.js +23 -7
  28. package/lib/routes/nginx/nginx-server.routes.js +158 -6
  29. package/lib/routes/node-version.routes.d.ts +2 -0
  30. package/lib/routes/node-version.routes.js +56 -0
  31. package/lib/routes/project.routes.js +14 -9
  32. package/lib/routes/rss.routes.js +3 -3
  33. package/lib/routes/sprite-browse.routes.js +21 -6
  34. package/lib/routes/sprite.routes.js +18 -12
  35. package/lib/routes/static-files.routes.js +21 -5
  36. package/lib/routes/svn.routes.js +5 -3
  37. package/lib/routes/system.routes.js +20 -1
  38. package/lib/routes/task.routes.js +10 -3
  39. package/package.json +13 -6
  40. package/www/3rdpartylicenses.txt +66 -118
  41. package/www/browser/chunk-2L7NUOMX.js +2 -0
  42. package/www/browser/chunk-2NZJ7CN2.js +20 -0
  43. package/www/browser/chunk-3CM4SKDO.js +15 -0
  44. package/www/browser/chunk-3I7BQCXS.js +1 -0
  45. package/www/browser/chunk-3M56F2S2.js +1 -0
  46. package/www/browser/chunk-3OHBKMAA.js +1 -0
  47. package/www/browser/chunk-3XNNQFWR.js +1 -0
  48. package/www/browser/chunk-4BRW6LCZ.js +4 -0
  49. package/www/browser/chunk-4LBSLURA.js +1 -0
  50. package/www/browser/chunk-4X42HB6N.js +2 -0
  51. package/www/browser/chunk-5DYX4DUX.js +11 -0
  52. package/www/browser/chunk-6SYVDN5L.js +1 -0
  53. package/www/browser/chunk-6YYNHZ2A.js +1 -0
  54. package/www/browser/chunk-75W3GVSO.js +1 -0
  55. package/www/browser/chunk-7U44RF5F.js +63 -0
  56. package/www/browser/chunk-AELTP6YN.js +1 -0
  57. package/www/browser/chunk-AMXRL4GR.js +1 -0
  58. package/www/browser/chunk-AV2ZODEH.js +1 -0
  59. package/www/browser/chunk-AZ6SIMYH.js +1 -0
  60. package/www/browser/chunk-B3C35ET3.js +2 -0
  61. package/www/browser/chunk-BTQIUVTQ.js +1 -0
  62. package/www/browser/chunk-CN5J4WNO.js +1 -0
  63. package/www/browser/chunk-D2ODDESN.js +1 -0
  64. package/www/browser/chunk-DE6E23ET.js +1 -0
  65. package/www/browser/chunk-DIJPUYIA.js +1 -0
  66. package/www/browser/chunk-DLGJD6YU.js +4 -0
  67. package/www/browser/chunk-EEDA5U4V.js +1 -0
  68. package/www/browser/chunk-FK6Z4HLL.js +1 -0
  69. package/www/browser/chunk-FL6GDGHW.js +1 -0
  70. package/www/browser/chunk-FXCG34QS.js +1 -0
  71. package/www/browser/chunk-H2USFIYR.js +1 -0
  72. package/www/browser/chunk-H5HGMOE6.js +1 -0
  73. package/www/browser/chunk-HB3HECPD.js +1 -0
  74. package/www/browser/chunk-HDNG236Q.js +1 -0
  75. package/www/browser/chunk-HFZLJHYR.js +1 -0
  76. package/www/browser/chunk-HJTXXSMC.js +1 -0
  77. package/www/browser/chunk-HUMCWAKJ.js +3 -0
  78. package/www/browser/chunk-IKB3EQCP.js +2 -0
  79. package/www/browser/chunk-K7PESFPY.js +1 -0
  80. package/www/browser/chunk-KRYMOHYF.js +2 -0
  81. package/www/browser/chunk-M4QRBV3K.js +1 -0
  82. package/www/browser/chunk-N2PELLMM.js +30 -0
  83. package/www/browser/chunk-ONXBYGIG.js +1 -0
  84. package/www/browser/chunk-OSBDR36P.js +1 -0
  85. package/www/browser/chunk-OZCK4XVV.js +1 -0
  86. package/www/browser/chunk-QJP5F735.js +1 -0
  87. package/www/browser/chunk-RGOYDY7H.js +1 -0
  88. package/www/browser/chunk-UJKK4A7Y.js +1 -0
  89. package/www/browser/chunk-WD2EKZQC.js +1 -0
  90. package/www/browser/chunk-WUA5JFDD.js +1 -0
  91. package/www/browser/chunk-XLFHB7RS.js +3 -0
  92. package/www/browser/chunk-YNW4HEJO.js +37 -0
  93. package/www/browser/chunk-ZTDLWBW5.js +1 -0
  94. package/www/browser/dark.css +1 -30433
  95. package/www/browser/default.css +1 -30149
  96. package/www/browser/index.html +3 -3
  97. package/www/browser/main-N64WJCHX.js +34 -0
  98. package/www/browser/scripts-U25HCVEI.js +6 -0
  99. package/www/browser/styles-ROAHD7MY.css +1 -0
  100. package/www/browser/add-widget-drawer.component.css.map +0 -7
  101. package/www/browser/advanced-editor.component.css.map +0 -7
  102. package/www/browser/api-client.component.css.map +0 -7
  103. package/www/browser/api-history-drawer.component.css.map +0 -7
  104. package/www/browser/app.css.map +0 -7
  105. package/www/browser/attachment-viewer.component.css.map +0 -7
  106. package/www/browser/auth-editor.component.css.map +0 -7
  107. package/www/browser/body-editor.component.css.map +0 -7
  108. package/www/browser/chunk-2YSUXBGC.js +0 -627
  109. package/www/browser/chunk-2YSUXBGC.js.map +0 -1
  110. package/www/browser/chunk-3G2GEOPV.js +0 -456
  111. package/www/browser/chunk-3G2GEOPV.js.map +0 -1
  112. package/www/browser/chunk-3L72DF3R.js +0 -1683
  113. package/www/browser/chunk-3L72DF3R.js.map +0 -1
  114. package/www/browser/chunk-3MCIETCQ.js +0 -8279
  115. package/www/browser/chunk-3MCIETCQ.js.map +0 -1
  116. package/www/browser/chunk-665WC4RU.js +0 -5383
  117. package/www/browser/chunk-665WC4RU.js.map +0 -1
  118. package/www/browser/chunk-6QMSEZPT.js +0 -10044
  119. package/www/browser/chunk-6QMSEZPT.js.map +0 -1
  120. package/www/browser/chunk-6TBQERYX.js +0 -280
  121. package/www/browser/chunk-6TBQERYX.js.map +0 -1
  122. package/www/browser/chunk-6UW4MRJZ.js +0 -43
  123. package/www/browser/chunk-6UW4MRJZ.js.map +0 -7
  124. package/www/browser/chunk-6XUMIL3W.js +0 -5495
  125. package/www/browser/chunk-6XUMIL3W.js.map +0 -1
  126. package/www/browser/chunk-724YOJI3.js +0 -903
  127. package/www/browser/chunk-724YOJI3.js.map +0 -1
  128. package/www/browser/chunk-766T7YES.js +0 -437
  129. package/www/browser/chunk-766T7YES.js.map +0 -1
  130. package/www/browser/chunk-7FC7DN65.js +0 -728
  131. package/www/browser/chunk-7FC7DN65.js.map +0 -1
  132. package/www/browser/chunk-APGQRYWX.js +0 -156
  133. package/www/browser/chunk-APGQRYWX.js.map +0 -7
  134. package/www/browser/chunk-AQHSGTHS.js +0 -1960
  135. package/www/browser/chunk-AQHSGTHS.js.map +0 -1
  136. package/www/browser/chunk-CTOEAJQK.js +0 -40
  137. package/www/browser/chunk-CTOEAJQK.js.map +0 -7
  138. package/www/browser/chunk-DEGQJKKZ.js +0 -409
  139. package/www/browser/chunk-DEGQJKKZ.js.map +0 -1
  140. package/www/browser/chunk-DIJX2663.js +0 -1166
  141. package/www/browser/chunk-DIJX2663.js.map +0 -1
  142. package/www/browser/chunk-E4XD4GLT.js +0 -427
  143. package/www/browser/chunk-E4XD4GLT.js.map +0 -1
  144. package/www/browser/chunk-EQOY6A3M.js +0 -212
  145. package/www/browser/chunk-EQOY6A3M.js.map +0 -1
  146. package/www/browser/chunk-ETTBRXVA.js +0 -2643
  147. package/www/browser/chunk-ETTBRXVA.js.map +0 -1
  148. package/www/browser/chunk-FLSUSPBD.js +0 -5569
  149. package/www/browser/chunk-FLSUSPBD.js.map +0 -1
  150. package/www/browser/chunk-FZNHBEAZ.js +0 -102
  151. package/www/browser/chunk-FZNHBEAZ.js.map +0 -1
  152. package/www/browser/chunk-GJC7CZIJ.js +0 -361
  153. package/www/browser/chunk-GJC7CZIJ.js.map +0 -7
  154. package/www/browser/chunk-GMCNMOTD.js +0 -844
  155. package/www/browser/chunk-GMCNMOTD.js.map +0 -7
  156. package/www/browser/chunk-H43HGCRW.js +0 -198
  157. package/www/browser/chunk-H43HGCRW.js.map +0 -7
  158. package/www/browser/chunk-J447GBHM.js +0 -160
  159. package/www/browser/chunk-J447GBHM.js.map +0 -1
  160. package/www/browser/chunk-JN3VOWP7.js +0 -384
  161. package/www/browser/chunk-JN3VOWP7.js.map +0 -1
  162. package/www/browser/chunk-KSHAGY2M.js +0 -399
  163. package/www/browser/chunk-KSHAGY2M.js.map +0 -7
  164. package/www/browser/chunk-KV72AKOD.js +0 -59
  165. package/www/browser/chunk-KV72AKOD.js.map +0 -7
  166. package/www/browser/chunk-LAVMY2SJ.js +0 -26
  167. package/www/browser/chunk-LAVMY2SJ.js.map +0 -7
  168. package/www/browser/chunk-LLRVGHG5.js +0 -73
  169. package/www/browser/chunk-LLRVGHG5.js.map +0 -7
  170. package/www/browser/chunk-LPME4AJ3.js +0 -196
  171. package/www/browser/chunk-LPME4AJ3.js.map +0 -1
  172. package/www/browser/chunk-LVPSURVU.js +0 -4615
  173. package/www/browser/chunk-LVPSURVU.js.map +0 -1
  174. package/www/browser/chunk-MMPO7QLO.js +0 -4146
  175. package/www/browser/chunk-MMPO7QLO.js.map +0 -7
  176. package/www/browser/chunk-O7LB6VFM.js +0 -1953
  177. package/www/browser/chunk-O7LB6VFM.js.map +0 -1
  178. package/www/browser/chunk-P5CWA4FO.js +0 -685
  179. package/www/browser/chunk-P5CWA4FO.js.map +0 -1
  180. package/www/browser/chunk-RBWIWNTL.js +0 -203
  181. package/www/browser/chunk-RBWIWNTL.js.map +0 -7
  182. package/www/browser/chunk-RUXJCM3V.js +0 -26199
  183. package/www/browser/chunk-RUXJCM3V.js.map +0 -1
  184. package/www/browser/chunk-S77VVYUZ.js +0 -168
  185. package/www/browser/chunk-S77VVYUZ.js.map +0 -1
  186. package/www/browser/chunk-SCXPYFOB.js +0 -4316
  187. package/www/browser/chunk-SCXPYFOB.js.map +0 -1
  188. package/www/browser/chunk-SS73S33S.js +0 -471
  189. package/www/browser/chunk-SS73S33S.js.map +0 -7
  190. package/www/browser/chunk-T6UAOWNP.js +0 -600
  191. package/www/browser/chunk-T6UAOWNP.js.map +0 -1
  192. package/www/browser/chunk-TEW4MY4J.js +0 -148
  193. package/www/browser/chunk-TEW4MY4J.js.map +0 -7
  194. package/www/browser/chunk-TVORF3SF.js +0 -82
  195. package/www/browser/chunk-TVORF3SF.js.map +0 -7
  196. package/www/browser/chunk-UAN42EUZ.js +0 -2147
  197. package/www/browser/chunk-UAN42EUZ.js.map +0 -1
  198. package/www/browser/chunk-ULOHDK7Y.js +0 -1
  199. package/www/browser/chunk-ULOHDK7Y.js.map +0 -7
  200. package/www/browser/chunk-UYJ3FVRV.js +0 -3978
  201. package/www/browser/chunk-UYJ3FVRV.js.map +0 -1
  202. package/www/browser/chunk-VXHZMSDM.js +0 -5509
  203. package/www/browser/chunk-VXHZMSDM.js.map +0 -1
  204. package/www/browser/chunk-VYNQPZQO.js +0 -281
  205. package/www/browser/chunk-VYNQPZQO.js.map +0 -1
  206. package/www/browser/chunk-W3J23PZI.js +0 -9213
  207. package/www/browser/chunk-W3J23PZI.js.map +0 -1
  208. package/www/browser/chunk-W5HGHCQT.js +0 -1642
  209. package/www/browser/chunk-W5HGHCQT.js.map +0 -7
  210. package/www/browser/chunk-XF5H7E4L.js +0 -4723
  211. package/www/browser/chunk-XF5H7E4L.js.map +0 -1
  212. package/www/browser/chunk-XNFNEBMY.js +0 -398
  213. package/www/browser/chunk-XNFNEBMY.js.map +0 -7
  214. package/www/browser/chunk-XQY5SPGI.js +0 -30811
  215. package/www/browser/chunk-XQY5SPGI.js.map +0 -1
  216. package/www/browser/chunk-Y7JBZHNK.js +0 -514
  217. package/www/browser/chunk-Y7JBZHNK.js.map +0 -1
  218. package/www/browser/chunk-YWHRP4X3.js +0 -406
  219. package/www/browser/chunk-YWHRP4X3.js.map +0 -1
  220. package/www/browser/chunk-Z7FJIV62.js +0 -95
  221. package/www/browser/chunk-Z7FJIV62.js.map +0 -7
  222. package/www/browser/chunk-ZBZHXS46.js +0 -1674
  223. package/www/browser/chunk-ZBZHXS46.js.map +0 -1
  224. package/www/browser/chunk-ZZA5NVAI.js +0 -735
  225. package/www/browser/chunk-ZZA5NVAI.js.map +0 -1
  226. package/www/browser/collection-modal.component.css.map +0 -7
  227. package/www/browser/collection-tree-item.component.css.map +0 -7
  228. package/www/browser/collection-tree.component.css.map +0 -7
  229. package/www/browser/config-change-bar-component.css.map +0 -7
  230. package/www/browser/config-item-component.css.map +0 -7
  231. package/www/browser/config-nav-component.css.map +0 -7
  232. package/www/browser/config-section-component.css.map +0 -7
  233. package/www/browser/create-summary-aside.component.css.map +0 -7
  234. package/www/browser/curl-actions.component.css.map +0 -7
  235. package/www/browser/dark.css.map +0 -7
  236. package/www/browser/dashboard-canvas.component.css.map +0 -7
  237. package/www/browser/dashboard.component.css.map +0 -7
  238. package/www/browser/default.css.map +0 -7
  239. package/www/browser/detail-item-card.component.css.map +0 -7
  240. package/www/browser/ellipsis-text.component.css.map +0 -7
  241. package/www/browser/env-modal.component.css.map +0 -7
  242. package/www/browser/env-picker.component.css.map +0 -7
  243. package/www/browser/feedback.component.css.map +0 -7
  244. package/www/browser/fs-explorer.component.css.map +0 -7
  245. package/www/browser/git-import-modal.component.css.map +0 -7
  246. package/www/browser/hub-v2-personal-token-modal.component.css.map +0 -7
  247. package/www/browser/issue-action-area.component.css.map +0 -7
  248. package/www/browser/issue-add-participants-dialog.component.css.map +0 -7
  249. package/www/browser/issue-assign-dialog.component.css.map +0 -7
  250. package/www/browser/issue-attachment-area.component.css.map +0 -7
  251. package/www/browser/issue-base-info-area.component.css.map +0 -7
  252. package/www/browser/issue-branches.component.css.map +0 -7
  253. package/www/browser/issue-close-dialog.component.css.map +0 -7
  254. package/www/browser/issue-collaborators-panel.component.css.map +0 -7
  255. package/www/browser/issue-comment-editor.component.css.map +0 -7
  256. package/www/browser/issue-create-branch-dialog.component.css.map +0 -7
  257. package/www/browser/issue-description-area.component.css.map +0 -7
  258. package/www/browser/issue-detail.component.css.map +0 -7
  259. package/www/browser/issue-resolve-dialog.component.css.map +0 -7
  260. package/www/browser/issue-start-own-branch-dialog.component.css.map +0 -7
  261. package/www/browser/issues-list-table.component.css.map +0 -7
  262. package/www/browser/issues.component.css.map +0 -7
  263. package/www/browser/kill-port-widget.component.css.map +0 -7
  264. package/www/browser/kv-table.component.css.map +0 -7
  265. package/www/browser/layout-footer.component.css.map +0 -7
  266. package/www/browser/layout-header.component.css.map +0 -7
  267. package/www/browser/layout-menu.component.css.map +0 -7
  268. package/www/browser/layout-project-nav.component.css.map +0 -7
  269. package/www/browser/layout-sidebar.component.css.map +0 -7
  270. package/www/browser/layout.component.css.map +0 -7
  271. package/www/browser/less-viewport-component.css.map +0 -7
  272. package/www/browser/main.js +0 -1872
  273. package/www/browser/main.js.map +0 -1
  274. package/www/browser/markdown-viewer.component.css.map +0 -7
  275. package/www/browser/news-feed-widget.component.css.map +0 -7
  276. package/www/browser/ng-devtool.component.css.map +0 -7
  277. package/www/browser/nginx-config-editor.component.css.map +0 -7
  278. package/www/browser/nginx-log-viewer.component.css.map +0 -7
  279. package/www/browser/nginx-secondary-logs-tab.component.css.map +0 -7
  280. package/www/browser/nginx-secondary-perf-tab.component.css.map +0 -7
  281. package/www/browser/nginx-secondary-settings-tab.component.css.map +0 -7
  282. package/www/browser/nginx-secondary-ssl-tab.component.css.map +0 -7
  283. package/www/browser/nginx-secondary-test-tab.component.css.map +0 -7
  284. package/www/browser/nginx-secondary-traffic-tab.component.css.map +0 -7
  285. package/www/browser/nginx-secondary-upstream-tab.component.css.map +0 -7
  286. package/www/browser/nginx-section-card.component.css.map +0 -7
  287. package/www/browser/nginx-server-drawer.component.css.map +0 -7
  288. package/www/browser/nginx-server-list.component.css.map +0 -7
  289. package/www/browser/nginx-stat-card.component.css.map +0 -7
  290. package/www/browser/nginx.component.css.map +0 -7
  291. package/www/browser/page-layout.component.css.map +0 -7
  292. package/www/browser/pick-workspace-modal.component.css.map +0 -7
  293. package/www/browser/polyfills.js +0 -26584
  294. package/www/browser/polyfills.js.map +0 -7
  295. package/www/browser/project-conf.component.css.map +0 -7
  296. package/www/browser/project-create-modal.component.css.map +0 -7
  297. package/www/browser/project-create.component.css.map +0 -7
  298. package/www/browser/project-deps.component.css.map +0 -7
  299. package/www/browser/project-edit-modal.component.css.map +0 -7
  300. package/www/browser/project-import.component.css.map +0 -7
  301. package/www/browser/project-item-popover.component.css.map +0 -7
  302. package/www/browser/project-item.component.css.map +0 -7
  303. package/www/browser/project-list.component.css.map +0 -7
  304. package/www/browser/projects.component.css.map +0 -7
  305. package/www/browser/quick-task-widget.component.css.map +0 -7
  306. package/www/browser/rd-action-area.component.css.map +0 -7
  307. package/www/browser/rd-advance-stage-dialog.component.css.map +0 -7
  308. package/www/browser/rd-block-dialog.component.css.map +0 -7
  309. package/www/browser/rd-create-dialog.component.css.map +0 -7
  310. package/www/browser/rd-detail.component.css.map +0 -7
  311. package/www/browser/rd-item-card.component.css.map +0 -7
  312. package/www/browser/rd-list-board.component.css.map +0 -7
  313. package/www/browser/rd-list-table.component.css.map +0 -7
  314. package/www/browser/rd.component.css.map +0 -7
  315. package/www/browser/request-collections.component.css.map +0 -7
  316. package/www/browser/request-editor.component.css.map +0 -7
  317. package/www/browser/request-list-item.component.css.map +0 -7
  318. package/www/browser/request-list.component.css.map +0 -7
  319. package/www/browser/request-tabs-bar.component.css.map +0 -7
  320. package/www/browser/request-tabs.component.css.map +0 -7
  321. package/www/browser/request-urlbar.component.css.map +0 -7
  322. package/www/browser/response-viewer.component.css.map +0 -7
  323. package/www/browser/scripts.js +0 -245
  324. package/www/browser/scripts.js.map +0 -7
  325. package/www/browser/setting.component.css.map +0 -7
  326. package/www/browser/sprite-conf-modal.component.css.map +0 -7
  327. package/www/browser/sprite-icons-panel-component.css.map +0 -7
  328. package/www/browser/sprite-images-panel-component.css.map +0 -7
  329. package/www/browser/sprite-result-tabs.component.css.map +0 -7
  330. package/www/browser/sprite-viewport-component.css.map +0 -7
  331. package/www/browser/sprite.component.css.map +0 -7
  332. package/www/browser/step-advance.component.css.map +0 -7
  333. package/www/browser/step-basic.component.css.map +0 -7
  334. package/www/browser/step-config.component.css.map +0 -7
  335. package/www/browser/step-features.component.css.map +0 -7
  336. package/www/browser/step-preset.component.css.map +0 -7
  337. package/www/browser/step-summary-aside.component.css.map +0 -7
  338. package/www/browser/styles.css +0 -258
  339. package/www/browser/styles.css.map +0 -7
  340. package/www/browser/system-log.component.css.map +0 -7
  341. package/www/browser/task-actions.component.css.map +0 -7
  342. package/www/browser/task-console.component.css.map +0 -7
  343. package/www/browser/task-header.component.css.map +0 -7
  344. package/www/browser/task-list.component.css.map +0 -7
  345. package/www/browser/tasks.component.css.map +0 -7
  346. package/www/browser/terminal-view.component.css.map +0 -7
  347. package/www/browser/welcome-widget.component.css.map +0 -7
  348. package/www/browser/widget-base.component.css.map +0 -7
  349. package/www/browser/widget-host.component.css.map +0 -7
package/lib/app.js CHANGED
@@ -25,23 +25,11 @@ function normalizeLogLevel(v) {
25
25
  }
26
26
  function createFastifyLogger() {
27
27
  const level = normalizeLogLevel(env_1.env.logLevel);
28
- console.log(`Logger initialized with level: ${level || "silent (disabled)"}`);
28
+ if (process.env.NGM_DEBUG === '1') {
29
+ console.log(`Logger initialized with level: ${level || 'silent (disabled)'}`);
30
+ }
29
31
  if (!level)
30
32
  return false;
31
- const isDev = process.env.NODE_ENV !== "production";
32
- if (isDev) {
33
- return {
34
- level,
35
- transport: {
36
- target: "pino-pretty",
37
- options: {
38
- colorize: true,
39
- translateTime: "HH:MM:ss.l",
40
- ignore: "pid,hostname",
41
- },
42
- },
43
- };
44
- }
45
33
  return { level };
46
34
  }
47
35
  async function createServer() {
@@ -37,7 +37,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
37
37
  };
38
38
  Object.defineProperty(exports, "__esModule", { value: true });
39
39
  exports.openFolder = openFolder;
40
- const core_1 = require("@yinuo-ngm/core");
40
+ const errors_1 = require("@yinuo-ngm/errors");
41
41
  const launch_editor_1 = __importDefault(require("launch-editor"));
42
42
  const path = __importStar(require("path"));
43
43
  async function openFolder(folder, opts = {}) {
@@ -60,7 +60,7 @@ async function openFolder(folder, opts = {}) {
60
60
  settled = true;
61
61
  clearTimeout(timer);
62
62
  if (errorMsg) {
63
- reject(new core_1.AppError("EDITOR_NOT_FOUND", errorMsg, { fileName, editor, folder, file, target }));
63
+ reject(new errors_1.CoreError(errors_1.CoreErrorCodes.EDITOR_NOT_FOUND, errorMsg, { fileName, editor, folder, file, target }));
64
64
  return;
65
65
  }
66
66
  resolve();
package/lib/env.d.ts CHANGED
@@ -3,5 +3,6 @@ export declare const env: {
3
3
  host: string;
4
4
  dataDir: string;
5
5
  logLevel: string;
6
+ shutdownToken: string;
6
7
  sysLogCapacity: number;
7
8
  };
package/lib/env.js CHANGED
@@ -12,5 +12,6 @@ exports.env = {
12
12
  dataDir: process.env.NGM_DATA_DIR ||
13
13
  path_1.default.join(os_1.default.homedir(), ".ng-manager"),
14
14
  logLevel: process.env.NGM_LOG_LEVEL || "info",
15
+ shutdownToken: process.env.NGM_SHUTDOWN_TOKEN || "",
15
16
  sysLogCapacity: 3000,
16
17
  };
@@ -1,6 +1,6 @@
1
1
  import type { FastifyPluginAsync } from "fastify";
2
- import { type ErrorCode } from "@yinuo-ngm/core";
3
- export declare const ERROR_STATUS: Record<ErrorCode, number>;
2
+ import { type ErrorCode } from "@yinuo-ngm/errors";
3
+ export declare const ERROR_STATUS: Partial<Record<ErrorCode, number>>;
4
4
  export declare function mapStatus(code: ErrorCode): number;
5
5
  export declare const errorHandlerPlugin: FastifyPluginAsync;
6
6
  export default errorHandlerPlugin;
@@ -6,89 +6,99 @@ Object.defineProperty(exports, "__esModule", { value: true });
6
6
  exports.errorHandlerPlugin = exports.ERROR_STATUS = void 0;
7
7
  exports.mapStatus = mapStatus;
8
8
  const fastify_plugin_1 = __importDefault(require("fastify-plugin"));
9
- const core_1 = require("@yinuo-ngm/core");
9
+ const errors_1 = require("@yinuo-ngm/errors");
10
10
  exports.ERROR_STATUS = {
11
- PROJECT_NOT_FOUND: 404,
12
- PROJECT_ROOT_INVALID: 400,
13
- PROJECT_ALREADY_EXISTS: 409,
14
- PROJECT_ID_REQUIRED: 400,
15
- PROJECT_IMPORT_NOT_EXISTS: 404,
16
- PROJECT_IMPORT_NOT_DIR: 400,
17
- PROJECT_IMPORT_ALREADY_REGISTERED: 409,
18
- PROJECT_IMPORT_NOT_RECOGNIZED: 422,
19
- PROJECT_IMPORT_SCAN_FAILED: 500,
20
- ASSET_NOT_FOUND: 404,
21
- ASSET_KIND_NOT_SUPPORTED: 400,
22
- ASSET_URL_REQUIRED: 400,
23
- ASSET_LABEL_REQUIRED: 400,
24
- ASSET_URL_INVALID: 400,
25
- ASSET_MODE_INVALID: 400,
26
- INVALID_NAME: 400,
27
- TARGET_EXISTS: 409,
28
- INVALID_REPO_URL: 400,
29
- INVALID_PARENT_DIR: 400,
30
- GIT_CHECKOUT_FAILED: 500,
31
- BOOTSTRAP_NOT_IN_PICK_STATE: 400,
32
- BOOTSTRAP_CTX_NOT_FOUND: 404,
33
- BOOTSTRAP_INVALID_PICKED_ROOT: 400,
34
- BOOTSTRAP_NOT_WAITING_PICK: 400,
35
- PROJECT_ANGULAR_JSON_INVALID: 400,
36
- PROJECT_ANGULAR_JSON_NOT_FOUND: 404,
37
- PROJECT_VITE_CONFIG_INVALID: 400,
38
- PROJECT_VUE_CONFIG_NOT_FOUND: 404,
39
- CONFIG_BACKUP_NOT_FOUND: 404,
40
- CONFIG_READ_FAILED: 500,
41
- CONFIG_WRITE_FAILED: 500,
42
- CONFIG_CONFLICT: 409,
43
- CONFIG_OPEN_FAILED: 500,
44
- CONFIG_SCHEMA_NOT_FOUND: 404,
45
- CONFIG_DOMAIN_NOT_FOUND: 404,
46
- CONFIG_DOC_NOT_FOUND: 404,
47
- TASK_NOT_FOUND: 404,
48
- TASK_ALREADY_RUNNING: 409,
49
- PROCESS_SPAWN_FAILED: 500,
50
- TASK_SPEC_NOT_FOUND: 404,
51
- TASK_NOT_RUNNABLE: 400,
52
- RUN_NOT_FOUND: 404,
53
- TASK_ID_REQUIRED: 400,
54
- COMMAND_NOT_FOUND: 404,
55
- BAD_JSON: 400,
56
- BAD_MSG: 400,
57
- OP_NOT_SUPPORTED: 400,
58
- HANDLER_FAILED: 500,
59
- TOPIC_NOT_FOUND: 404,
60
- OP_NOT_FOUND: 400,
61
- FS_PATH_NOT_FOUND: 404,
62
- FS_ALREADY_EXISTS: 409,
63
- FS_PERMISSION_DENIED: 403,
64
- FS_EXISTS_FAILED: 500,
65
- FS_INVALID_NAME: 400,
66
- FS_MKDIR_FAILED: 500,
67
- EDITOR_NOT_FOUND: 404,
68
- EDITOR_LAUNCH_FAILED: 500,
69
- STORAGE_IO_ERROR: 500,
70
- UNAUTHORIZED: 401,
71
- INVALID_TIMESTAMP: 400,
72
- DEP_INSTALL_FAILED: 500,
73
- DEP_UNINSTALL_FAILED: 500,
74
- DEP_NOT_FOUND: 404,
75
- DASHBOARD_CONFLICT: 409,
76
- WIDGET_NOT_FOUND: 404,
77
- WIDGET_LOCKED: 423,
78
- KILL_PORT_FAILED: 500,
79
- INVALID_PORT: 400,
80
- RSS_FETCH_FAILED: 500,
81
- INVALID_RSS_URL: 400,
82
- UNKNOWN_ERROR: 500,
83
- BAD_REQUEST: 400,
84
- NOT_IMPLEMENTED: 501,
85
- NOT_FOUND: 404,
86
- SVN_SYNC_ALREADY_RUNNING: 409,
87
- SVN_SYNC_FAILED: 500,
88
- SVN_SOURCE_ID_REQUIRED: 400,
89
- SPRITE_CONFIG_NOT_FOUND: 404,
90
- SPRITE_ICONS_ROOT_NOT_FOUND: 404,
91
- SPRITE_GROUP_NOT_FOUND: 404,
11
+ [errors_1.GlobalErrorCodes.UNKNOWN_ERROR]: 500,
12
+ [errors_1.GlobalErrorCodes.BAD_REQUEST]: 400,
13
+ [errors_1.GlobalErrorCodes.NOT_FOUND]: 404,
14
+ [errors_1.GlobalErrorCodes.NOT_IMPLEMENTED]: 501,
15
+ [errors_1.GlobalErrorCodes.STORAGE_IO_ERROR]: 500,
16
+ [errors_1.GlobalErrorCodes.FS_PATH_NOT_FOUND]: 404,
17
+ [errors_1.GlobalErrorCodes.FS_PERMISSION_DENIED]: 403,
18
+ [errors_1.GlobalErrorCodes.FS_ALREADY_EXISTS]: 409,
19
+ [errors_1.GlobalErrorCodes.FS_INVALID_NAME]: 400,
20
+ [errors_1.GlobalErrorCodes.FS_MKDIR_FAILED]: 500,
21
+ [errors_1.GlobalErrorCodes.BAD_JSON]: 400,
22
+ [errors_1.GlobalErrorCodes.BAD_MSG]: 400,
23
+ [errors_1.GlobalErrorCodes.OP_NOT_SUPPORTED]: 400,
24
+ [errors_1.GlobalErrorCodes.TOPIC_NOT_FOUND]: 404,
25
+ [errors_1.GlobalErrorCodes.HANDLER_FAILED]: 500,
26
+ [errors_1.GlobalErrorCodes.OP_NOT_FOUND]: 400,
27
+ [errors_1.GlobalErrorCodes.UNAUTHORIZED]: 401,
28
+ [errors_1.GlobalErrorCodes.INVALID_TIMESTAMP]: 400,
29
+ [errors_1.CoreErrorCodes.PROJECT_NOT_FOUND]: 404,
30
+ [errors_1.CoreErrorCodes.PROJECT_ROOT_INVALID]: 400,
31
+ [errors_1.CoreErrorCodes.PROJECT_ALREADY_EXISTS]: 409,
32
+ [errors_1.CoreErrorCodes.PROJECT_ID_REQUIRED]: 400,
33
+ [errors_1.CoreErrorCodes.PROJECT_IMPORT_NOT_EXISTS]: 404,
34
+ [errors_1.CoreErrorCodes.PROJECT_IMPORT_NOT_DIR]: 400,
35
+ [errors_1.CoreErrorCodes.PROJECT_IMPORT_ALREADY_REGISTERED]: 409,
36
+ [errors_1.CoreErrorCodes.PROJECT_IMPORT_NOT_RECOGNIZED]: 422,
37
+ [errors_1.CoreErrorCodes.PROJECT_IMPORT_SCAN_FAILED]: 500,
38
+ [errors_1.CoreErrorCodes.BOOTSTRAP_NOT_IN_PICK_STATE]: 400,
39
+ [errors_1.CoreErrorCodes.BOOTSTRAP_CTX_NOT_FOUND]: 404,
40
+ [errors_1.CoreErrorCodes.BOOTSTRAP_INVALID_PICKED_ROOT]: 400,
41
+ [errors_1.CoreErrorCodes.BOOTSTRAP_NOT_WAITING_PICK]: 400,
42
+ [errors_1.CoreErrorCodes.INVALID_NAME]: 400,
43
+ [errors_1.CoreErrorCodes.TARGET_EXISTS]: 409,
44
+ [errors_1.CoreErrorCodes.INVALID_REPO_URL]: 400,
45
+ [errors_1.CoreErrorCodes.INVALID_PARENT_DIR]: 400,
46
+ [errors_1.CoreErrorCodes.GIT_CHECKOUT_FAILED]: 500,
47
+ [errors_1.CoreErrorCodes.PROJECT_ANGULAR_JSON_INVALID]: 400,
48
+ [errors_1.CoreErrorCodes.PROJECT_ANGULAR_JSON_NOT_FOUND]: 404,
49
+ [errors_1.CoreErrorCodes.PROJECT_VITE_CONFIG_INVALID]: 400,
50
+ [errors_1.CoreErrorCodes.PROJECT_VUE_CONFIG_NOT_FOUND]: 404,
51
+ [errors_1.CoreErrorCodes.ASSET_NOT_FOUND]: 404,
52
+ [errors_1.CoreErrorCodes.ASSET_KIND_NOT_SUPPORTED]: 400,
53
+ [errors_1.CoreErrorCodes.ASSET_URL_REQUIRED]: 400,
54
+ [errors_1.CoreErrorCodes.ASSET_LABEL_REQUIRED]: 400,
55
+ [errors_1.CoreErrorCodes.ASSET_URL_INVALID]: 400,
56
+ [errors_1.CoreErrorCodes.ASSET_MODE_INVALID]: 400,
57
+ [errors_1.CoreErrorCodes.CONFIG_BACKUP_NOT_FOUND]: 404,
58
+ [errors_1.CoreErrorCodes.CONFIG_READ_FAILED]: 500,
59
+ [errors_1.CoreErrorCodes.CONFIG_WRITE_FAILED]: 500,
60
+ [errors_1.CoreErrorCodes.CONFIG_CONFLICT]: 409,
61
+ [errors_1.CoreErrorCodes.CONFIG_OPEN_FAILED]: 500,
62
+ [errors_1.CoreErrorCodes.CONFIG_SCHEMA_NOT_FOUND]: 404,
63
+ [errors_1.CoreErrorCodes.CONFIG_DOMAIN_NOT_FOUND]: 404,
64
+ [errors_1.CoreErrorCodes.CONFIG_DOC_NOT_FOUND]: 404,
65
+ [errors_1.CoreErrorCodes.TASK_NOT_FOUND]: 404,
66
+ [errors_1.CoreErrorCodes.RUN_NOT_FOUND]: 404,
67
+ [errors_1.CoreErrorCodes.TASK_ID_REQUIRED]: 400,
68
+ [errors_1.CoreErrorCodes.TASK_ALREADY_RUNNING]: 409,
69
+ [errors_1.CoreErrorCodes.PROCESS_SPAWN_FAILED]: 500,
70
+ [errors_1.CoreErrorCodes.TASK_SPEC_NOT_FOUND]: 404,
71
+ [errors_1.CoreErrorCodes.TASK_NOT_RUNNABLE]: 400,
72
+ [errors_1.CoreErrorCodes.COMMAND_NOT_FOUND]: 404,
73
+ [errors_1.CoreErrorCodes.FS_EXISTS_FAILED]: 500,
74
+ [errors_1.CoreErrorCodes.FS_INVALID_NAME]: 400,
75
+ [errors_1.CoreErrorCodes.FS_ALREADY_EXISTS]: 409,
76
+ [errors_1.CoreErrorCodes.FS_PERMISSION_DENIED]: 403,
77
+ [errors_1.CoreErrorCodes.FS_MKDIR_FAILED]: 500,
78
+ [errors_1.CoreErrorCodes.FS_PATH_NOT_FOUND]: 404,
79
+ [errors_1.CoreErrorCodes.DASHBOARD_CONFLICT]: 409,
80
+ [errors_1.CoreErrorCodes.WIDGET_NOT_FOUND]: 404,
81
+ [errors_1.CoreErrorCodes.WIDGET_LOCKED]: 423,
82
+ [errors_1.CoreErrorCodes.SPRITE_CONFIG_NOT_FOUND]: 404,
83
+ [errors_1.CoreErrorCodes.SPRITE_GROUP_NOT_FOUND]: 404,
84
+ [errors_1.CoreErrorCodes.SPRITE_ICONS_ROOT_NOT_FOUND]: 404,
85
+ [errors_1.CoreErrorCodes.SVN_SYNC_ALREADY_RUNNING]: 409,
86
+ [errors_1.CoreErrorCodes.SVN_SYNC_FAILED]: 500,
87
+ [errors_1.CoreErrorCodes.SVN_SOURCE_ID_REQUIRED]: 400,
88
+ [errors_1.CoreErrorCodes.DEP_INSTALL_FAILED]: 500,
89
+ [errors_1.CoreErrorCodes.DEP_UNINSTALL_FAILED]: 500,
90
+ [errors_1.CoreErrorCodes.DEP_NOT_FOUND]: 404,
91
+ [errors_1.CoreErrorCodes.NO_VERSION_MANAGER]: 503,
92
+ [errors_1.CoreErrorCodes.SWITCH_VERSION_FAILED]: 500,
93
+ [errors_1.CoreErrorCodes.NO_AVAILABLE_VERSIONS]: 409,
94
+ [errors_1.CoreErrorCodes.VERSION_REQUIRED]: 400,
95
+ [errors_1.CoreErrorCodes.PROJECT_PATH_REQUIRED]: 400,
96
+ [errors_1.CoreErrorCodes.EDITOR_NOT_FOUND]: 404,
97
+ [errors_1.CoreErrorCodes.EDITOR_LAUNCH_FAILED]: 500,
98
+ [errors_1.CoreErrorCodes.RSS_FETCH_FAILED]: 500,
99
+ [errors_1.CoreErrorCodes.INVALID_RSS_URL]: 400,
100
+ [errors_1.CoreErrorCodes.KILL_PORT_FAILED]: 500,
101
+ [errors_1.CoreErrorCodes.INVALID_PORT]: 400,
92
102
  };
93
103
  function mapStatus(code) {
94
104
  return exports.ERROR_STATUS[code] ?? 400;
@@ -110,21 +120,20 @@ function buildErrorBody(reqId, code, message, details) {
110
120
  exports.errorHandlerPlugin = (0, fastify_plugin_1.default)(async (app) => {
111
121
  app.setErrorHandler((err, req, reply) => {
112
122
  const requestId = req.id;
113
- if (err instanceof core_1.AppError || isCoreAppError(err)) {
123
+ if (err instanceof errors_1.AppError || isAppErrorLike(err)) {
114
124
  const status = mapStatus(err.code);
115
125
  return reply.status(status).send(buildErrorBody(requestId, err.code, err.message, err.meta));
116
126
  }
117
127
  if (err?.validation) {
118
128
  return reply
119
129
  .status(400)
120
- .send(buildErrorBody(requestId, "VALIDATION_ERROR", "参数不合法", err.validation));
130
+ .send(buildErrorBody(requestId, errors_1.GlobalErrorCodes.BAD_REQUEST, "参数不合法", err.validation));
121
131
  }
122
- console.log('err', err);
123
132
  req.log.error({ err, requestId }, "Unhandled error");
124
- return reply.status(500).send(buildErrorBody(requestId, "INTERNAL_ERROR", "服务异常,请稍后重试"));
133
+ return reply.status(500).send(buildErrorBody(requestId, errors_1.GlobalErrorCodes.UNKNOWN_ERROR, "服务异常,请稍后重试"));
125
134
  });
126
135
  });
127
- function isCoreAppError(err) {
128
- return err && typeof err === "object" && typeof err.code === "string" && typeof err.message === "string";
136
+ function isAppErrorLike(err) {
137
+ return err !== null && typeof err === 'object' && typeof err.code === 'number' && typeof err.message === 'string';
129
138
  }
130
139
  exports.default = exports.errorHandlerPlugin;
@@ -1,6 +1,7 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.createNginxTopicHandler = createNginxTopicHandler;
4
+ const errors_1 = require("@yinuo-ngm/errors");
4
5
  function createNginxTopicHandler(deps, getAllClients) {
5
6
  const { logService } = deps;
6
7
  const onLog = (entry) => {
@@ -24,7 +25,7 @@ function createNginxTopicHandler(deps, getAllClients) {
24
25
  if (!logType || (logType !== "error" && logType !== "access")) {
25
26
  ctx.send({
26
27
  op: "error",
27
- code: "BAD_MSG",
28
+ code: errors_1.GlobalErrorCodes.BAD_MSG,
28
29
  message: "logType must be 'error' or 'access'",
29
30
  ts: Date.now()
30
31
  });
@@ -1,4 +1,5 @@
1
- import type { SvnEventPayloadMap, SvnEventType, SvnRuntime } from "@yinuo-ngm/core";
1
+ import type { SvnRuntime } from "@yinuo-ngm/core";
2
+ import type { SvnEventPayloadMap, SvnEventType } from "@yinuo-ngm/protocol";
2
3
  import { WsContext } from "../ws.context";
3
4
  import { TopicHandler } from "../ws.router";
4
5
  export type SvnSyncWsDeps = {
@@ -1,6 +1,7 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.createSvnSyncTopicHandler = createSvnSyncTopicHandler;
4
+ const errors_1 = require("@yinuo-ngm/errors");
4
5
  const keyOf = (projectId) => `svn:${projectId}`;
5
6
  function createSvnSyncTopicHandler(deps, getAllClients) {
6
7
  return {
@@ -8,7 +9,7 @@ function createSvnSyncTopicHandler(deps, getAllClients) {
8
9
  async sub(ctx, msg) {
9
10
  const projectId = String(msg?.projectId ?? "").trim();
10
11
  if (!projectId) {
11
- ctx.send({ op: "error", code: "PROJECT_ID_REQUIRED", message: "projectId is required", ts: Date.now() });
12
+ ctx.send({ op: "error", code: errors_1.CoreErrorCodes.PROJECT_ID_REQUIRED, message: "projectId is required", ts: Date.now() });
12
13
  return;
13
14
  }
14
15
  const t = Number(msg?.tail ?? 0) || 0;
@@ -31,7 +32,7 @@ function createSvnSyncTopicHandler(deps, getAllClients) {
31
32
  async unsub(ctx, msg) {
32
33
  const projectId = String(msg?.projectId ?? "").trim();
33
34
  if (!projectId) {
34
- ctx.send({ op: "error", code: "PROJECT_ID_REQUIRED", message: "projectId is required", ts: Date.now() });
35
+ ctx.send({ op: "error", code: errors_1.CoreErrorCodes.PROJECT_ID_REQUIRED, message: "projectId is required", ts: Date.now() });
35
36
  return;
36
37
  }
37
38
  ctx.delSub("svn", keyOf(projectId));
@@ -1,4 +1,4 @@
1
- import type { LogLine } from "@yinuo-ngm/core";
1
+ import type { LogLine } from "@yinuo-ngm/protocol";
2
2
  import { WsContext } from "../ws.context";
3
3
  import type { TopicHandler } from "../ws.router";
4
4
  export type SyslogWsDeps = {
@@ -1,4 +1,5 @@
1
- import type { TaskEventPayloadMap, TaskEventType, TaskOutputPayload, LogLine, TaskRuntime } from "@yinuo-ngm/core";
1
+ import type { TaskRuntime } from "@yinuo-ngm/core";
2
+ import type { LogLine, TaskEventPayloadMap, TaskEventType, TaskOutputPayload } from "@yinuo-ngm/protocol";
2
3
  import { WsContext } from "../ws.context";
3
4
  import type { TopicHandler } from "../ws.router";
4
5
  export type TaskWsDeps = {
@@ -1,6 +1,7 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.createTaskTopicHandler = createTaskTopicHandler;
4
+ const errors_1 = require("@yinuo-ngm/errors");
4
5
  const keyOfTask = (taskId) => `task:${taskId}`;
5
6
  function createTaskTopicHandler(deps, getAllClients) {
6
7
  return {
@@ -9,7 +10,7 @@ function createTaskTopicHandler(deps, getAllClients) {
9
10
  const taskId = String(msg?.taskId ?? "").trim();
10
11
  const tail = Number(msg?.tail ?? 0);
11
12
  if (!taskId) {
12
- ctx.send({ op: "error", code: "TASK_ID_REQUIRED", message: "taskId is required", ts: Date.now() });
13
+ ctx.send({ op: "error", code: errors_1.CoreErrorCodes.TASK_ID_REQUIRED, message: "taskId is required", ts: Date.now() });
13
14
  return;
14
15
  }
15
16
  ctx.addSub("task", keyOfTask(taskId));
@@ -1,4 +1,4 @@
1
- import type { WsServerMsg, WsTopic } from "@yinuo-ngm/core";
1
+ import type { WsServerMsg, WsTopic } from "@yinuo-ngm/protocol";
2
2
  export declare class WsContext {
3
3
  private socket;
4
4
  readonly connId: string;
@@ -4,6 +4,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
4
4
  };
5
5
  Object.defineProperty(exports, "__esModule", { value: true });
6
6
  const core_1 = require("@yinuo-ngm/core");
7
+ const bootstrap_1 = require("@yinuo-ngm/bootstrap");
7
8
  const websocket_1 = __importDefault(require("@fastify/websocket"));
8
9
  const fastify_plugin_1 = __importDefault(require("fastify-plugin"));
9
10
  const topics_1 = require("./topics");
@@ -50,13 +51,13 @@ exports.default = (0, fastify_plugin_1.default)(async function wsPlugin(fastify)
50
51
  offs.push(events.on(core_1.Events.SYSLOG_APPENDED, (e) => {
51
52
  syslogHandler.push(e.entry);
52
53
  }));
53
- offs.push(events.on(core_1.Events.PROJECT_BOOTSTRAP_DONE, (e) => {
54
+ offs.push(events.on(bootstrap_1.BootstrapEvents.DONE, (e) => {
54
55
  taskHandler.pushEvent("bootstrapDone", e);
55
56
  }));
56
- offs.push(events.on(core_1.Events.PROJECT_BOOTSTRAP_FAILED, (e) => {
57
+ offs.push(events.on(bootstrap_1.BootstrapEvents.FAILED, (e) => {
57
58
  taskHandler.pushEvent("bootstrapFailed", e);
58
59
  }));
59
- offs.push(events.on(core_1.Events.PROJECT_BOOTSTRAP_NEED_PICK_ROOT, (e) => {
60
+ offs.push(events.on(bootstrap_1.BootstrapEvents.NEED_PICK_ROOT, (e) => {
60
61
  taskHandler.pushEvent("bootstrapNeedPickRoot", e);
61
62
  }));
62
63
  offs.push(events.on(core_1.Events.SVN_SYNC_STARTED, (e) => {
@@ -1,4 +1,4 @@
1
- import { WsClientMsg, WsTopic } from "@yinuo-ngm/core";
1
+ import type { WsClientMsg, WsTopic } from "@yinuo-ngm/protocol";
2
2
  import { WsContext } from "./ws.context";
3
3
  export type TopicHandler = {
4
4
  topic: WsTopic;
@@ -15,6 +15,6 @@ export type TopicHandler = {
15
15
  export declare class WsRouter {
16
16
  private handlers;
17
17
  register(handler: TopicHandler): void;
18
- handleRaw(ctx: WsContext, raw: any): undefined;
18
+ handleRaw(ctx: WsContext, raw: unknown): undefined;
19
19
  private err;
20
20
  }
@@ -1,6 +1,7 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.WsRouter = void 0;
4
+ const errors_1 = require("@yinuo-ngm/errors");
4
5
  class WsRouter {
5
6
  constructor() {
6
7
  this.handlers = new Map();
@@ -15,11 +16,11 @@ class WsRouter {
15
16
  msg = JSON.parse(text);
16
17
  }
17
18
  catch {
18
- ctx.send(this.err("BAD_JSON", "Invalid JSON"));
19
+ ctx.send(this.err(errors_1.GlobalErrorCodes.BAD_JSON, "Invalid JSON"));
19
20
  return;
20
21
  }
21
22
  if (!msg || typeof msg !== "object" || !("op" in msg)) {
22
- ctx.send(this.err("BAD_MSG", "Invalid message"));
23
+ ctx.send(this.err(errors_1.GlobalErrorCodes.BAD_MSG, "Invalid message"));
23
24
  return;
24
25
  }
25
26
  if (msg.op === "ping") {
@@ -30,14 +31,14 @@ class WsRouter {
30
31
  const topic = msg.topic;
31
32
  const h = this.handlers.get(topic);
32
33
  if (!h || !h.resize) {
33
- ctx.send(this.err("OP_NOT_SUPPORTED", `resize not supported on topic: ${String(topic)}`, { topic }));
34
+ ctx.send(this.err(errors_1.GlobalErrorCodes.OP_NOT_SUPPORTED, `resize not supported on topic: ${String(topic)}`, { topic }));
34
35
  return;
35
36
  }
36
37
  try {
37
38
  return void h.resize(ctx, msg);
38
39
  }
39
40
  catch (e) {
40
- ctx.send(this.err("HANDLER_FAILED", e?.message ?? "handler failed", { topic, op: msg.op }));
41
+ ctx.send(this.err(errors_1.GlobalErrorCodes.HANDLER_FAILED, e?.message ?? "handler failed", { topic, op: msg.op }));
41
42
  return;
42
43
  }
43
44
  }
@@ -45,7 +46,7 @@ class WsRouter {
45
46
  const topic = msg.topic;
46
47
  const h = this.handlers.get(topic);
47
48
  if (!h) {
48
- ctx.send(this.err("TOPIC_NOT_FOUND", `Unknown topic: ${String(topic)}`, { topic }));
49
+ ctx.send(this.err(errors_1.GlobalErrorCodes.TOPIC_NOT_FOUND, `Unknown topic: ${String(topic)}`, { topic }));
49
50
  return;
50
51
  }
51
52
  try {
@@ -54,11 +55,11 @@ class WsRouter {
54
55
  return void h.unsub(ctx, msg);
55
56
  }
56
57
  catch (e) {
57
- ctx.send(this.err("HANDLER_FAILED", e?.message ?? "handler failed", { topic, op: msg.op }));
58
+ ctx.send(this.err(errors_1.GlobalErrorCodes.HANDLER_FAILED, e?.message ?? "handler failed", { topic, op: msg.op }));
58
59
  }
59
60
  return;
60
61
  }
61
- ctx.send(this.err("OP_NOT_FOUND", `Unknown op: ${msg.op}`));
62
+ ctx.send(this.err(errors_1.GlobalErrorCodes.OP_NOT_FOUND, `Unknown op: ${msg.op}`));
62
63
  }
63
64
  err(code, message, details) {
64
65
  return { op: "error", code, message, details, ts: Date.now() };
@@ -2,9 +2,11 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.apiClientCollectionsRoutes = apiClientCollectionsRoutes;
4
4
  const api_1 = require("@yinuo-ngm/api");
5
+ const errors_1 = require("@yinuo-ngm/errors");
6
+ const errors_2 = require("@yinuo-ngm/errors");
5
7
  function assertProjectScope(scope, projectId) {
6
8
  if (scope === "project" && !projectId)
7
- throw new Error("projectId is required when scope=project");
9
+ throw new errors_2.GlobalError(errors_2.GlobalErrorCodes.BAD_REQUEST, "projectId is required when scope=project");
8
10
  }
9
11
  function now() { return Date.now(); }
10
12
  async function apiClientCollectionsRoutes(fastify) {
@@ -52,7 +54,7 @@ async function apiClientCollectionsRoutes(fastify) {
52
54
  await api.saveCollection(entity, scope, body.projectId);
53
55
  return entity;
54
56
  });
55
- fastify.post("/:id", async (req, reply) => {
57
+ fastify.post("/:id", async (req) => {
56
58
  const params = req.params;
57
59
  const q = req.query;
58
60
  const body = req.body;
@@ -60,7 +62,7 @@ async function apiClientCollectionsRoutes(fastify) {
60
62
  assertProjectScope(scope, q.projectId);
61
63
  const old = await api.getCollection(params.id, scope, q.projectId);
62
64
  if (!old) {
63
- return reply.code(404).send({ code: "COLLECTION_NOT_FOUND", message: `collection not found: ${params.id}` });
65
+ throw new errors_1.ApiError(errors_1.ApiErrorCodes.API_COLLECTION_NOT_FOUND, `collection not found: ${params.id}`);
64
66
  }
65
67
  const ts = now();
66
68
  const next = {
@@ -73,7 +75,7 @@ async function apiClientCollectionsRoutes(fastify) {
73
75
  await api.saveCollection(next, scope, q.projectId);
74
76
  return next;
75
77
  });
76
- fastify.delete("/:id", async (req, reply) => {
78
+ fastify.delete("/:id", async (req) => {
77
79
  const params = req.params;
78
80
  const q = req.query;
79
81
  const scope = (q.scope ?? "project");
@@ -81,12 +83,12 @@ async function apiClientCollectionsRoutes(fastify) {
81
83
  const allCols = await api.listCollections(scope, q.projectId);
82
84
  const hasChildCol = allCols.some(c => (c.parentId ?? null) === params.id);
83
85
  if (hasChildCol) {
84
- return reply.code(409).send({ code: "COLLECTION_NOT_EMPTY", message: "collection has child collections" });
86
+ throw new errors_1.ApiError(errors_1.ApiErrorCodes.API_COLLECTION_NOT_EMPTY, "collection has child collections");
85
87
  }
86
88
  const reqs = await api.listRequests(scope, q.projectId);
87
89
  const hasReq = reqs.some((r) => (r.collectionId ?? null) === params.id);
88
90
  if (hasReq) {
89
- return reply.code(409).send({ code: "COLLECTION_NOT_EMPTY", message: "collection has requests" });
91
+ throw new errors_1.ApiError(errors_1.ApiErrorCodes.API_COLLECTION_NOT_EMPTY, "collection has requests");
90
92
  }
91
93
  await api.deleteCollection(params.id, scope, q.projectId);
92
94
  return { ok: true };
@@ -1,11 +1,12 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.apiClientEnvsRoutes = apiClientEnvsRoutes;
4
+ const errors_1 = require("@yinuo-ngm/errors");
4
5
  function parseScope(q) {
5
6
  const scope = (q?.scope ?? "project");
6
7
  const projectId = q?.projectId;
7
8
  if (scope === "project" && !projectId) {
8
- throw new Error("projectId is required when scope=project");
9
+ throw new errors_1.GlobalError(errors_1.GlobalErrorCodes.BAD_REQUEST, "projectId is required when scope=project");
9
10
  }
10
11
  return { scope, projectId };
11
12
  }
@@ -29,9 +30,9 @@ async function apiClientEnvsRoutes(fastify) {
29
30
  const body = req.body;
30
31
  const scope = body?.scope ?? "project";
31
32
  if (scope === "project" && !body.projectId)
32
- throw new Error("projectId is required when scope=project");
33
+ throw new errors_1.GlobalError(errors_1.GlobalErrorCodes.BAD_REQUEST, "projectId is required when scope=project");
33
34
  if (!body?.env?.id)
34
- throw new Error("env.id is required");
35
+ throw new errors_1.GlobalError(errors_1.GlobalErrorCodes.BAD_REQUEST, "env.id is required");
35
36
  await env.saveEnv(body.env, scope, body.projectId);
36
37
  return { id: body.env.id };
37
38
  });
@@ -1,11 +1,12 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.apiClientHistoryRoutes = apiClientHistoryRoutes;
4
+ const errors_1 = require("@yinuo-ngm/errors");
4
5
  function parseScope(q) {
5
6
  const scope = (q?.scope ?? "project");
6
7
  const projectId = q?.projectId;
7
8
  if (scope === "project" && !projectId)
8
- throw new Error("projectId is required when scope=project");
9
+ throw new errors_1.GlobalError(errors_1.GlobalErrorCodes.BAD_REQUEST, "projectId is required when scope=project");
9
10
  return { scope, projectId };
10
11
  }
11
12
  function parseNum(v, fallback) {
@@ -24,7 +25,7 @@ async function apiClientHistoryRoutes(fastify) {
24
25
  const body = req.body;
25
26
  const scope = body?.scope ?? "project";
26
27
  if (scope === "project" && !body.projectId)
27
- throw new Error("projectId is required when scope=project");
28
+ throw new errors_1.GlobalError(errors_1.GlobalErrorCodes.BAD_REQUEST, "projectId is required when scope=project");
28
29
  const removed = await api.purgeHistory({
29
30
  scope,
30
31
  projectId: body.projectId,