koa-boot-runtime 1.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 (355) hide show
  1. package/dist/aiToolRegistry.d.ts +32 -0
  2. package/dist/aiToolRegistry.d.ts.map +1 -0
  3. package/dist/aiToolRegistry.js +41 -0
  4. package/dist/aiToolRegistry.js.map +1 -0
  5. package/dist/build/routes.d.ts +3 -0
  6. package/dist/build/routes.d.ts.map +1 -0
  7. package/dist/build/routes.js +4055 -0
  8. package/dist/build/routes.js.map +1 -0
  9. package/dist/build/swagger.json +6752 -0
  10. package/dist/common/decorators/index.d.ts +2 -0
  11. package/dist/common/decorators/index.d.ts.map +1 -0
  12. package/dist/common/decorators/index.js +18 -0
  13. package/dist/common/decorators/index.js.map +1 -0
  14. package/dist/common/decorators/validation.d.ts +33 -0
  15. package/dist/common/decorators/validation.d.ts.map +1 -0
  16. package/dist/common/decorators/validation.js +215 -0
  17. package/dist/common/decorators/validation.js.map +1 -0
  18. package/dist/common/dto.d.ts +17 -0
  19. package/dist/common/dto.d.ts.map +1 -0
  20. package/dist/common/dto.js +28 -0
  21. package/dist/common/dto.js.map +1 -0
  22. package/dist/common/enums/base.d.ts +14 -0
  23. package/dist/common/enums/base.d.ts.map +1 -0
  24. package/dist/common/enums/base.js +14 -0
  25. package/dist/common/enums/base.js.map +1 -0
  26. package/dist/common/enums/index.d.ts +8 -0
  27. package/dist/common/enums/index.d.ts.map +1 -0
  28. package/dist/common/enums/index.js +24 -0
  29. package/dist/common/enums/index.js.map +1 -0
  30. package/dist/common/enums/system.d.ts +14 -0
  31. package/dist/common/enums/system.d.ts.map +1 -0
  32. package/dist/common/enums/system.js +14 -0
  33. package/dist/common/enums/system.js.map +1 -0
  34. package/dist/common/index.d.ts +6 -0
  35. package/dist/common/index.d.ts.map +1 -0
  36. package/dist/common/index.js +25 -0
  37. package/dist/common/index.js.map +1 -0
  38. package/dist/common/paginate.d.ts +49 -0
  39. package/dist/common/paginate.d.ts.map +1 -0
  40. package/dist/common/paginate.js +47 -0
  41. package/dist/common/paginate.js.map +1 -0
  42. package/dist/common/types/index.d.ts +8 -0
  43. package/dist/common/types/index.d.ts.map +1 -0
  44. package/dist/common/types/index.js +18 -0
  45. package/dist/common/types/index.js.map +1 -0
  46. package/dist/common/types/pagination.d.ts +76 -0
  47. package/dist/common/types/pagination.d.ts.map +1 -0
  48. package/dist/common/types/pagination.js +29 -0
  49. package/dist/common/types/pagination.js.map +1 -0
  50. package/dist/common/types/request.d.ts +66 -0
  51. package/dist/common/types/request.d.ts.map +1 -0
  52. package/dist/common/types/request.js +4 -0
  53. package/dist/common/types/request.js.map +1 -0
  54. package/dist/common/types/response.d.ts +109 -0
  55. package/dist/common/types/response.d.ts.map +1 -0
  56. package/dist/common/types/response.js +50 -0
  57. package/dist/common/types/response.js.map +1 -0
  58. package/dist/common/types/sort.d.ts +71 -0
  59. package/dist/common/types/sort.d.ts.map +1 -0
  60. package/dist/common/types/sort.js +46 -0
  61. package/dist/common/types/sort.js.map +1 -0
  62. package/dist/config/database.d.ts +12 -0
  63. package/dist/config/database.d.ts.map +1 -0
  64. package/dist/config/database.js +24 -0
  65. package/dist/config/database.js.map +1 -0
  66. package/dist/config/index.d.ts +144 -0
  67. package/dist/config/index.d.ts.map +1 -0
  68. package/dist/config/index.js +180 -0
  69. package/dist/config/index.js.map +1 -0
  70. package/dist/config/ioc.d.ts +6 -0
  71. package/dist/config/ioc.d.ts.map +1 -0
  72. package/dist/config/ioc.js +29 -0
  73. package/dist/config/ioc.js.map +1 -0
  74. package/dist/index.d.ts +12 -0
  75. package/dist/index.d.ts.map +1 -0
  76. package/dist/index.js +49 -0
  77. package/dist/index.js.map +1 -0
  78. package/dist/middleware/auth.d.ts +3 -0
  79. package/dist/middleware/auth.d.ts.map +1 -0
  80. package/dist/middleware/auth.js +52 -0
  81. package/dist/middleware/auth.js.map +1 -0
  82. package/dist/middleware/errorHandler.d.ts +3 -0
  83. package/dist/middleware/errorHandler.d.ts.map +1 -0
  84. package/dist/middleware/errorHandler.js +40 -0
  85. package/dist/middleware/errorHandler.js.map +1 -0
  86. package/dist/middleware/logger.d.ts +3 -0
  87. package/dist/middleware/logger.d.ts.map +1 -0
  88. package/dist/middleware/logger.js +13 -0
  89. package/dist/middleware/logger.js.map +1 -0
  90. package/dist/middleware/operationLogger.d.ts +11 -0
  91. package/dist/middleware/operationLogger.d.ts.map +1 -0
  92. package/dist/middleware/operationLogger.js +155 -0
  93. package/dist/middleware/operationLogger.js.map +1 -0
  94. package/dist/middleware/permission.d.ts +23 -0
  95. package/dist/middleware/permission.d.ts.map +1 -0
  96. package/dist/middleware/permission.js +153 -0
  97. package/dist/middleware/permission.js.map +1 -0
  98. package/dist/middleware/validate.d.ts +7 -0
  99. package/dist/middleware/validate.d.ts.map +1 -0
  100. package/dist/middleware/validate.js +53 -0
  101. package/dist/middleware/validate.js.map +1 -0
  102. package/dist/middlewares.d.ts +15 -0
  103. package/dist/middlewares.d.ts.map +1 -0
  104. package/dist/middlewares.js +24 -0
  105. package/dist/middlewares.js.map +1 -0
  106. package/dist/registerRoutes.d.ts +15 -0
  107. package/dist/registerRoutes.d.ts.map +1 -0
  108. package/dist/registerRoutes.js +83 -0
  109. package/dist/registerRoutes.js.map +1 -0
  110. package/dist/system/department/department.controller.d.ts +46 -0
  111. package/dist/system/department/department.controller.d.ts.map +1 -0
  112. package/dist/system/department/department.controller.js +203 -0
  113. package/dist/system/department/department.controller.js.map +1 -0
  114. package/dist/system/department/department.model.d.ts +33 -0
  115. package/dist/system/department/department.model.d.ts.map +1 -0
  116. package/dist/system/department/department.model.js +171 -0
  117. package/dist/system/department/department.model.js.map +1 -0
  118. package/dist/system/department/department.service.d.ts +40 -0
  119. package/dist/system/department/department.service.d.ts.map +1 -0
  120. package/dist/system/department/department.service.js +99 -0
  121. package/dist/system/department/department.service.js.map +1 -0
  122. package/dist/system/dictItem/dictItem.controller.d.ts +42 -0
  123. package/dist/system/dictItem/dictItem.controller.d.ts.map +1 -0
  124. package/dist/system/dictItem/dictItem.controller.js +167 -0
  125. package/dist/system/dictItem/dictItem.controller.js.map +1 -0
  126. package/dist/system/dictItem/dictItem.model.d.ts +38 -0
  127. package/dist/system/dictItem/dictItem.model.d.ts.map +1 -0
  128. package/dist/system/dictItem/dictItem.model.js +180 -0
  129. package/dist/system/dictItem/dictItem.model.js.map +1 -0
  130. package/dist/system/dictItem/dictItem.service.d.ts +33 -0
  131. package/dist/system/dictItem/dictItem.service.d.ts.map +1 -0
  132. package/dist/system/dictItem/dictItem.service.js +97 -0
  133. package/dist/system/dictItem/dictItem.service.js.map +1 -0
  134. package/dist/system/dictType/dictType.controller.d.ts +47 -0
  135. package/dist/system/dictType/dictType.controller.d.ts.map +1 -0
  136. package/dist/system/dictType/dictType.controller.js +174 -0
  137. package/dist/system/dictType/dictType.controller.js.map +1 -0
  138. package/dist/system/dictType/dictType.model.d.ts +31 -0
  139. package/dist/system/dictType/dictType.model.d.ts.map +1 -0
  140. package/dist/system/dictType/dictType.model.js +127 -0
  141. package/dist/system/dictType/dictType.model.js.map +1 -0
  142. package/dist/system/dictType/dictType.service.d.ts +27 -0
  143. package/dist/system/dictType/dictType.service.d.ts.map +1 -0
  144. package/dist/system/dictType/dictType.service.js +74 -0
  145. package/dist/system/dictType/dictType.service.js.map +1 -0
  146. package/dist/system/employee/employee.controller.d.ts +16 -0
  147. package/dist/system/employee/employee.controller.d.ts.map +1 -0
  148. package/dist/system/employee/employee.controller.js +111 -0
  149. package/dist/system/employee/employee.controller.js.map +1 -0
  150. package/dist/system/employee/employee.model.d.ts +34 -0
  151. package/dist/system/employee/employee.model.d.ts.map +1 -0
  152. package/dist/system/employee/employee.model.js +186 -0
  153. package/dist/system/employee/employee.model.js.map +1 -0
  154. package/dist/system/employee/employee.service.d.ts +16 -0
  155. package/dist/system/employee/employee.service.d.ts.map +1 -0
  156. package/dist/system/employee/employee.service.js +49 -0
  157. package/dist/system/employee/employee.service.js.map +1 -0
  158. package/dist/system/fileUpload/fileUpload.controller.d.ts +35 -0
  159. package/dist/system/fileUpload/fileUpload.controller.d.ts.map +1 -0
  160. package/dist/system/fileUpload/fileUpload.controller.js +228 -0
  161. package/dist/system/fileUpload/fileUpload.controller.js.map +1 -0
  162. package/dist/system/fileUpload/fileUpload.model.d.ts +13 -0
  163. package/dist/system/fileUpload/fileUpload.model.d.ts.map +1 -0
  164. package/dist/system/fileUpload/fileUpload.model.js +71 -0
  165. package/dist/system/fileUpload/fileUpload.model.js.map +1 -0
  166. package/dist/system/fileUpload/fileUpload.service.d.ts +29 -0
  167. package/dist/system/fileUpload/fileUpload.service.d.ts.map +1 -0
  168. package/dist/system/fileUpload/fileUpload.service.js +61 -0
  169. package/dist/system/fileUpload/fileUpload.service.js.map +1 -0
  170. package/dist/system/loginLog/loginLog.controller.d.ts +21 -0
  171. package/dist/system/loginLog/loginLog.controller.d.ts.map +1 -0
  172. package/dist/system/loginLog/loginLog.controller.js +149 -0
  173. package/dist/system/loginLog/loginLog.controller.js.map +1 -0
  174. package/dist/system/loginLog/loginLog.model.d.ts +26 -0
  175. package/dist/system/loginLog/loginLog.model.d.ts.map +1 -0
  176. package/dist/system/loginLog/loginLog.model.js +150 -0
  177. package/dist/system/loginLog/loginLog.model.js.map +1 -0
  178. package/dist/system/loginLog/loginLog.service.d.ts +24 -0
  179. package/dist/system/loginLog/loginLog.service.d.ts.map +1 -0
  180. package/dist/system/loginLog/loginLog.service.js +87 -0
  181. package/dist/system/loginLog/loginLog.service.js.map +1 -0
  182. package/dist/system/menu/menu.controller.d.ts +46 -0
  183. package/dist/system/menu/menu.controller.d.ts.map +1 -0
  184. package/dist/system/menu/menu.controller.js +203 -0
  185. package/dist/system/menu/menu.controller.js.map +1 -0
  186. package/dist/system/menu/menu.model.d.ts +45 -0
  187. package/dist/system/menu/menu.model.d.ts.map +1 -0
  188. package/dist/system/menu/menu.model.js +254 -0
  189. package/dist/system/menu/menu.model.js.map +1 -0
  190. package/dist/system/menu/menu.service.d.ts +40 -0
  191. package/dist/system/menu/menu.service.d.ts.map +1 -0
  192. package/dist/system/menu/menu.service.js +101 -0
  193. package/dist/system/menu/menu.service.js.map +1 -0
  194. package/dist/system/operationLog/operationLog.controller.d.ts +34 -0
  195. package/dist/system/operationLog/operationLog.controller.d.ts.map +1 -0
  196. package/dist/system/operationLog/operationLog.controller.js +126 -0
  197. package/dist/system/operationLog/operationLog.controller.js.map +1 -0
  198. package/dist/system/operationLog/operationLog.model.d.ts +38 -0
  199. package/dist/system/operationLog/operationLog.model.d.ts.map +1 -0
  200. package/dist/system/operationLog/operationLog.model.js +224 -0
  201. package/dist/system/operationLog/operationLog.model.js.map +1 -0
  202. package/dist/system/operationLog/operationLog.service.d.ts +46 -0
  203. package/dist/system/operationLog/operationLog.service.d.ts.map +1 -0
  204. package/dist/system/operationLog/operationLog.service.js +109 -0
  205. package/dist/system/operationLog/operationLog.service.js.map +1 -0
  206. package/dist/system/permission/permission.controller.d.ts +18 -0
  207. package/dist/system/permission/permission.controller.d.ts.map +1 -0
  208. package/dist/system/permission/permission.controller.js +160 -0
  209. package/dist/system/permission/permission.controller.js.map +1 -0
  210. package/dist/system/permission/permission.model.d.ts +39 -0
  211. package/dist/system/permission/permission.model.d.ts.map +1 -0
  212. package/dist/system/permission/permission.model.js +220 -0
  213. package/dist/system/permission/permission.model.js.map +1 -0
  214. package/dist/system/permission/permission.service.d.ts +40 -0
  215. package/dist/system/permission/permission.service.d.ts.map +1 -0
  216. package/dist/system/permission/permission.service.js +105 -0
  217. package/dist/system/permission/permission.service.js.map +1 -0
  218. package/dist/system/role/role.controller.d.ts +16 -0
  219. package/dist/system/role/role.controller.d.ts.map +1 -0
  220. package/dist/system/role/role.controller.js +123 -0
  221. package/dist/system/role/role.controller.js.map +1 -0
  222. package/dist/system/role/role.model.d.ts +25 -0
  223. package/dist/system/role/role.model.d.ts.map +1 -0
  224. package/dist/system/role/role.model.js +133 -0
  225. package/dist/system/role/role.model.js.map +1 -0
  226. package/dist/system/role/role.service.d.ts +17 -0
  227. package/dist/system/role/role.service.d.ts.map +1 -0
  228. package/dist/system/role/role.service.js +50 -0
  229. package/dist/system/role/role.service.js.map +1 -0
  230. package/dist/system/roleMenu/roleMenu.controller.d.ts +26 -0
  231. package/dist/system/roleMenu/roleMenu.controller.d.ts.map +1 -0
  232. package/dist/system/roleMenu/roleMenu.controller.js +83 -0
  233. package/dist/system/roleMenu/roleMenu.controller.js.map +1 -0
  234. package/dist/system/roleMenu/roleMenu.model.d.ts +35 -0
  235. package/dist/system/roleMenu/roleMenu.model.d.ts.map +1 -0
  236. package/dist/system/roleMenu/roleMenu.model.js +56 -0
  237. package/dist/system/roleMenu/roleMenu.model.js.map +1 -0
  238. package/dist/system/roleMenu/roleMenu.service.d.ts +35 -0
  239. package/dist/system/roleMenu/roleMenu.service.d.ts.map +1 -0
  240. package/dist/system/roleMenu/roleMenu.service.js +77 -0
  241. package/dist/system/roleMenu/roleMenu.service.js.map +1 -0
  242. package/dist/system/rolePermission/rolePermission.controller.d.ts +36 -0
  243. package/dist/system/rolePermission/rolePermission.controller.d.ts.map +1 -0
  244. package/dist/system/rolePermission/rolePermission.controller.js +115 -0
  245. package/dist/system/rolePermission/rolePermission.controller.js.map +1 -0
  246. package/dist/system/rolePermission/rolePermission.model.d.ts +45 -0
  247. package/dist/system/rolePermission/rolePermission.model.d.ts.map +1 -0
  248. package/dist/system/rolePermission/rolePermission.model.js +87 -0
  249. package/dist/system/rolePermission/rolePermission.model.js.map +1 -0
  250. package/dist/system/rolePermission/rolePermission.service.d.ts +50 -0
  251. package/dist/system/rolePermission/rolePermission.service.d.ts.map +1 -0
  252. package/dist/system/rolePermission/rolePermission.service.js +110 -0
  253. package/dist/system/rolePermission/rolePermission.service.js.map +1 -0
  254. package/dist/system/user/user.controller.d.ts +66 -0
  255. package/dist/system/user/user.controller.d.ts.map +1 -0
  256. package/dist/system/user/user.controller.js +322 -0
  257. package/dist/system/user/user.controller.js.map +1 -0
  258. package/dist/system/user/user.model.d.ts +58 -0
  259. package/dist/system/user/user.model.d.ts.map +1 -0
  260. package/dist/system/user/user.model.js +225 -0
  261. package/dist/system/user/user.model.js.map +1 -0
  262. package/dist/system/user/user.service.d.ts +73 -0
  263. package/dist/system/user/user.service.d.ts.map +1 -0
  264. package/dist/system/user/user.service.js +388 -0
  265. package/dist/system/user/user.service.js.map +1 -0
  266. package/dist/system/userRole/userRole.controller.d.ts +33 -0
  267. package/dist/system/userRole/userRole.controller.d.ts.map +1 -0
  268. package/dist/system/userRole/userRole.controller.js +231 -0
  269. package/dist/system/userRole/userRole.controller.js.map +1 -0
  270. package/dist/system/userRole/userRole.model.d.ts +14 -0
  271. package/dist/system/userRole/userRole.model.d.ts.map +1 -0
  272. package/dist/system/userRole/userRole.model.js +58 -0
  273. package/dist/system/userRole/userRole.model.js.map +1 -0
  274. package/dist/system/userRole/userRole.service.d.ts +29 -0
  275. package/dist/system/userRole/userRole.service.d.ts.map +1 -0
  276. package/dist/system/userRole/userRole.service.js +135 -0
  277. package/dist/system/userRole/userRole.service.js.map +1 -0
  278. package/dist/systemServices.d.ts +23 -0
  279. package/dist/systemServices.d.ts.map +1 -0
  280. package/dist/systemServices.js +40 -0
  281. package/dist/systemServices.js.map +1 -0
  282. package/dist/types.d.ts +29 -0
  283. package/dist/types.d.ts.map +1 -0
  284. package/dist/types.js +70 -0
  285. package/dist/types.js.map +1 -0
  286. package/dist/utils/aiClient.d.ts +55 -0
  287. package/dist/utils/aiClient.d.ts.map +1 -0
  288. package/dist/utils/aiClient.js +59 -0
  289. package/dist/utils/aiClient.js.map +1 -0
  290. package/dist/utils/banner.d.ts +10 -0
  291. package/dist/utils/banner.d.ts.map +1 -0
  292. package/dist/utils/banner.js +40 -0
  293. package/dist/utils/banner.js.map +1 -0
  294. package/dist/utils/crypto.d.ts +49 -0
  295. package/dist/utils/crypto.d.ts.map +1 -0
  296. package/dist/utils/crypto.js +113 -0
  297. package/dist/utils/crypto.js.map +1 -0
  298. package/dist/utils/dataScope.d.ts +41 -0
  299. package/dist/utils/dataScope.d.ts.map +1 -0
  300. package/dist/utils/dataScope.js +130 -0
  301. package/dist/utils/dataScope.js.map +1 -0
  302. package/dist/utils/date.d.ts +48 -0
  303. package/dist/utils/date.d.ts.map +1 -0
  304. package/dist/utils/date.js +145 -0
  305. package/dist/utils/date.js.map +1 -0
  306. package/dist/utils/emailClient.d.ts +15 -0
  307. package/dist/utils/emailClient.d.ts.map +1 -0
  308. package/dist/utils/emailClient.js +71 -0
  309. package/dist/utils/emailClient.js.map +1 -0
  310. package/dist/utils/jwt.d.ts +10 -0
  311. package/dist/utils/jwt.d.ts.map +1 -0
  312. package/dist/utils/jwt.js +31 -0
  313. package/dist/utils/jwt.js.map +1 -0
  314. package/dist/utils/logger.d.ts +34 -0
  315. package/dist/utils/logger.d.ts.map +1 -0
  316. package/dist/utils/logger.js +108 -0
  317. package/dist/utils/logger.js.map +1 -0
  318. package/dist/utils/ossClient.d.ts +38 -0
  319. package/dist/utils/ossClient.d.ts.map +1 -0
  320. package/dist/utils/ossClient.js +92 -0
  321. package/dist/utils/ossClient.js.map +1 -0
  322. package/dist/utils/permissionSync.d.ts +10 -0
  323. package/dist/utils/permissionSync.d.ts.map +1 -0
  324. package/dist/utils/permissionSync.js +11 -0
  325. package/dist/utils/permissionSync.js.map +1 -0
  326. package/dist/utils/redisClient.d.ts +91 -0
  327. package/dist/utils/redisClient.d.ts.map +1 -0
  328. package/dist/utils/redisClient.js +246 -0
  329. package/dist/utils/redisClient.js.map +1 -0
  330. package/dist/utils/sequence.d.ts +53 -0
  331. package/dist/utils/sequence.d.ts.map +1 -0
  332. package/dist/utils/sequence.js +109 -0
  333. package/dist/utils/sequence.js.map +1 -0
  334. package/dist/utils/smsClient.d.ts +15 -0
  335. package/dist/utils/smsClient.d.ts.map +1 -0
  336. package/dist/utils/smsClient.js +115 -0
  337. package/dist/utils/smsClient.js.map +1 -0
  338. package/dist/utils/supabaseClient.d.ts +5 -0
  339. package/dist/utils/supabaseClient.d.ts.map +1 -0
  340. package/dist/utils/supabaseClient.js +17 -0
  341. package/dist/utils/supabaseClient.js.map +1 -0
  342. package/dist/utils/unipushClient.d.ts +12 -0
  343. package/dist/utils/unipushClient.d.ts.map +1 -0
  344. package/dist/utils/unipushClient.js +109 -0
  345. package/dist/utils/unipushClient.js.map +1 -0
  346. package/dist/utils/validator.d.ts +74 -0
  347. package/dist/utils/validator.d.ts.map +1 -0
  348. package/dist/utils/validator.js +173 -0
  349. package/dist/utils/validator.js.map +1 -0
  350. package/dist/utils/wecom.d.ts +20 -0
  351. package/dist/utils/wecom.d.ts.map +1 -0
  352. package/dist/utils/wecom.js +126 -0
  353. package/dist/utils/wecom.js.map +1 -0
  354. package/package.json +84 -0
  355. package/templates/schema.system.prisma +283 -0
@@ -0,0 +1,144 @@
1
+ declare const _default: {
2
+ app: {
3
+ port: string | number;
4
+ nodeEnv: string;
5
+ };
6
+ database: {
7
+ dialect: string;
8
+ host: string;
9
+ port: number;
10
+ username: string;
11
+ password: string;
12
+ database: string;
13
+ };
14
+ jwt: {
15
+ secret: string;
16
+ expiresIn: string;
17
+ };
18
+ supabase: {
19
+ url: string | undefined;
20
+ serviceKey: string | undefined;
21
+ anonKey: string | undefined;
22
+ };
23
+ redis: {
24
+ url: string;
25
+ };
26
+ scalar: {
27
+ routePrefix: string;
28
+ specUrl: string;
29
+ theme: string;
30
+ layout: string;
31
+ darkMode: boolean;
32
+ localization: {
33
+ locale: string;
34
+ };
35
+ };
36
+ /**
37
+ * 权限控制配置
38
+ *
39
+ * strictMode(安全开关):
40
+ * - true(生产推荐):未在 sys_permissions 中注册的 API 端点,默认 403 拒绝
41
+ * - false(开发默认):未注册的端点默认放行,方便联调
42
+ *
43
+ * 环境变量:PERMISSION_STRICT_MODE=true
44
+ *
45
+ * menuBypassRoleFilter(调试开关):
46
+ * - true:/system/user/current 返回全量菜单(绕过角色-菜单绑定过滤),
47
+ * 仅用于开发/联调阶段角色菜单尚未配置时快速验证页面
48
+ * - false(默认):按用户绑定角色过滤菜单
49
+ * - 安全约束:由服务端环境变量控制(客户端无法传参伪造),
50
+ * 且在 NODE_ENV=production 时强制失效(见 user.service.ts)
51
+ *
52
+ * 环境变量:MENU_BYPASS_ROLE_FILTER=true
53
+ */
54
+ permission: {
55
+ strictMode: boolean;
56
+ menuBypassRoleFilter: boolean;
57
+ };
58
+ /**
59
+ * 外部通知方式选择(V6.2):
60
+ * 内部通知(站内信 sysMessage)为独立链路不受影响;此开关只决定外部渠道(旁路推送)走哪家。
61
+ * - sms = 阿里云短信
62
+ * - email = SMTP 邮件
63
+ * - wecom = 企业微信应用消息
64
+ * - none / 空 = 关闭外部通知(仅站内信)
65
+ */
66
+ notify: {
67
+ externalChannel: string;
68
+ };
69
+ /**
70
+ * APP 应用推送(V6.3):UniPush 2.0 独立链路。
71
+ * 独立开关 APP_PUSH_ENABLED=true 启用,不受 EXTERNAL_NOTIFY_CHANNEL 影响(两者可同时启用)。
72
+ * 打包 APP 时:前端 manifest 勾选 Push 模块,登录后调用 uni.getPushClientId 获取 cid 并上报绑定用户。
73
+ */
74
+ appPush: {
75
+ enabled: boolean;
76
+ /** DCloud 开发者中心 → UniPush 2.0 的 appid(即 manifest 的 appid) */
77
+ appid: string;
78
+ appkey: string;
79
+ /** REST API 鉴权密钥(HMAC 签名用,请勿泄露) */
80
+ masterSecret: string;
81
+ };
82
+ /** SMTP 邮件(EXTERNAL_NOTIFY_CHANNEL=email 时启用) */
83
+ email: {
84
+ host: string;
85
+ port: number;
86
+ /** true = 465 端口 SSL/TLS(默认);false = 587 端口 STARTTLS */
87
+ secure: boolean;
88
+ /** 发件邮箱账号(通常与 from 的邮箱部分相同) */
89
+ user: string;
90
+ /** 邮箱授权码(非登录密码,需在邮箱设置中开启 SMTP 并生成) */
91
+ pass: string;
92
+ /** 发件人显示(nodemailer 支持 "名称 <addr>" 格式,如 "WIS供应链 <noreply@example.com>") */
93
+ from: string;
94
+ };
95
+ /** 阿里云短信(EXTERNAL_NOTIFY_CHANNEL=sms 时启用) */
96
+ sms: {
97
+ accessKeyId: string;
98
+ accessKeySecret: string;
99
+ /** 短信签名(短信服务控制台 → 签名管理,如「WIS供应链」) */
100
+ signName: string;
101
+ /** 短信模板 Code(短信服务控制台 → 模板管理,如 SMS_xxxx) */
102
+ templateCode: string;
103
+ /** 阿里云 OpenAPI 地域,短信固定使用 dysmsapi 终端节点,此处仅用于区分(默认 ap-southeast-1 外网直连) */
104
+ region: string;
105
+ };
106
+ /**
107
+ * 企业微信应用消息(V6.0):消息通知二期,服务端推送不校验域名。
108
+ * 注意:V6.1 起渠道启用与否改由 EXTERNAL_NOTIFY_CHANNEL 决定,此处的 enabled
109
+ * 仅表示企微凭证是否可用(EXTERNAL_NOTIFY_CHANNEL=wecom 时生效)
110
+ */
111
+ wecom: {
112
+ enabled: boolean;
113
+ corpId: string;
114
+ agentId: string;
115
+ secret: string;
116
+ /** 按手机号自动解析企微 userid(未绑定用户时),解析成功回写 sys_users.wechat_userid */
117
+ autoBind: boolean;
118
+ /** admin 端 H5 基础地址,textcard 跳转链接前缀(本地开发可指向 dev server) */
119
+ h5BaseUrl: string;
120
+ };
121
+ /** 阿里云 OSS 文件存储配置 */
122
+ oss: {
123
+ accessKeyId: string;
124
+ accessKeySecret: string;
125
+ bucket: string;
126
+ endpoint: string;
127
+ region: string;
128
+ };
129
+ /**
130
+ * DeepSeek AI 智能助手(V7.0):Function Calling 工具调用查询业务数据。
131
+ * - AI_ENABLED=true 开启;AI_API_KEY 必填(https://platform.deepseek.com)
132
+ * - AI_BASE_URL 默认 DeepSeek 官方,兼容 OpenAI 格式可指向任意代理
133
+ */
134
+ ai: {
135
+ enabled: boolean;
136
+ apiKey: string;
137
+ baseUrl: string;
138
+ model: string;
139
+ /** 厂商扩展参数透传(JSON 字符串)。例:DeepSeek V4 Pro 思考模式 {"thinking":{"type":"enabled"}} */
140
+ extraBody: Record<string, unknown>;
141
+ };
142
+ };
143
+ export default _default;
144
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/config/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;IAqEE;;;;;;;;;;;;;;;;;OAiBG;;;;;IAKH;;;;;;;OAOG;;;;IAIH;;;;OAIG;;;QAGD,6DAA6D;;;QAG7D,mCAAmC;;;IAGrC,iDAAiD;;;;QAI/C,wDAAwD;;QAExD,+BAA+B;;QAE/B,sCAAsC;;QAEtC,2EAA2E;;;IAG7E,6CAA6C;;;;QAI3C,qCAAqC;;QAErC,2CAA2C;;QAE3C,0EAA0E;;;IAG5E;;;;OAIG;;;;;;QAMD,+DAA+D;;QAE/D,0DAA0D;;;IAG5D,qBAAqB;;;;;;;;IAQrB;;;;OAIG;;;;;;QAOD,gFAAgF;;;;AA3IpF,wBA8IE"}
@@ -0,0 +1,180 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ const dotenv_1 = __importDefault(require("dotenv"));
7
+ /**
8
+ * 环境变量加载策略(优先级从高到低):
9
+ *
10
+ * 1. .env.{NODE_ENV} — 环境专属配置(最高优先级)
11
+ * - 开发:.env.development
12
+ * - 生产:.env.production
13
+ *
14
+ * 2. .env — 兜底默认值
15
+ * - Prisma CLI 也依赖此文件读取 DATABASE_URL
16
+ * - 只填充环境专属文件中未定义的变量
17
+ *
18
+ * 运行 `npm run dev` 时 cross-env 已设置 NODE_ENV=development,
19
+ * 生产部署时由运行环境注入 NODE_ENV=production。
20
+ */
21
+ // 1. 先加载环境专属文件(高优先级)
22
+ const envFile = `.env.${process.env.NODE_ENV || 'development'}`;
23
+ dotenv_1.default.config({ path: envFile });
24
+ // 2. 再加载 .env 兜底(不会覆盖已在步骤1中设值的变量)
25
+ dotenv_1.default.config();
26
+ /** 解析可选的厂商扩展参数(JSON 字符串 → 对象;解析失败返回空对象) */
27
+ function parseExtraBody(raw) {
28
+ if (!raw)
29
+ return {};
30
+ try {
31
+ return JSON.parse(raw);
32
+ }
33
+ catch {
34
+ return {};
35
+ }
36
+ }
37
+ exports.default = {
38
+ app: {
39
+ port: process.env.PORT || 3003,
40
+ nodeEnv: process.env.NODE_ENV || 'development'
41
+ },
42
+ database: {
43
+ dialect: 'mysql',
44
+ host: process.env.DB_HOST || 'localhost',
45
+ port: parseInt(process.env.DB_PORT || '3306'),
46
+ username: process.env.DB_USER || 'root',
47
+ password: process.env.DB_PASSWORD || 'root',
48
+ database: process.env.DB_NAME || 'wis_supply_cloud'
49
+ },
50
+ jwt: {
51
+ secret: process.env.JWT_SECRET || 'your-secret-key-change-in-production',
52
+ expiresIn: process.env.JWT_EXPIRES_IN || '7d'
53
+ },
54
+ supabase: {
55
+ url: process.env.SUPABASE_URL,
56
+ serviceKey: process.env.SUPABASE_SERVICE_KEY,
57
+ anonKey: process.env.SUPABASE_ANON_KEY
58
+ },
59
+ redis: {
60
+ url: process.env.REDIS_URL || 'redis://localhost:6379'
61
+ },
62
+ scalar: {
63
+ routePrefix: '/docs',
64
+ specUrl: '/swagger.json',
65
+ theme: 'purple',
66
+ layout: 'modern',
67
+ darkMode: true,
68
+ localization: {
69
+ locale: 'zh-CN',
70
+ },
71
+ },
72
+ /**
73
+ * 权限控制配置
74
+ *
75
+ * strictMode(安全开关):
76
+ * - true(生产推荐):未在 sys_permissions 中注册的 API 端点,默认 403 拒绝
77
+ * - false(开发默认):未注册的端点默认放行,方便联调
78
+ *
79
+ * 环境变量:PERMISSION_STRICT_MODE=true
80
+ *
81
+ * menuBypassRoleFilter(调试开关):
82
+ * - true:/system/user/current 返回全量菜单(绕过角色-菜单绑定过滤),
83
+ * 仅用于开发/联调阶段角色菜单尚未配置时快速验证页面
84
+ * - false(默认):按用户绑定角色过滤菜单
85
+ * - 安全约束:由服务端环境变量控制(客户端无法传参伪造),
86
+ * 且在 NODE_ENV=production 时强制失效(见 user.service.ts)
87
+ *
88
+ * 环境变量:MENU_BYPASS_ROLE_FILTER=true
89
+ */
90
+ permission: {
91
+ strictMode: process.env.PERMISSION_STRICT_MODE === 'true',
92
+ menuBypassRoleFilter: process.env.MENU_BYPASS_ROLE_FILTER === 'true',
93
+ },
94
+ /**
95
+ * 外部通知方式选择(V6.2):
96
+ * 内部通知(站内信 sysMessage)为独立链路不受影响;此开关只决定外部渠道(旁路推送)走哪家。
97
+ * - sms = 阿里云短信
98
+ * - email = SMTP 邮件
99
+ * - wecom = 企业微信应用消息
100
+ * - none / 空 = 关闭外部通知(仅站内信)
101
+ */
102
+ notify: {
103
+ externalChannel: (process.env.EXTERNAL_NOTIFY_CHANNEL || 'none').toLowerCase(),
104
+ },
105
+ /**
106
+ * APP 应用推送(V6.3):UniPush 2.0 独立链路。
107
+ * 独立开关 APP_PUSH_ENABLED=true 启用,不受 EXTERNAL_NOTIFY_CHANNEL 影响(两者可同时启用)。
108
+ * 打包 APP 时:前端 manifest 勾选 Push 模块,登录后调用 uni.getPushClientId 获取 cid 并上报绑定用户。
109
+ */
110
+ appPush: {
111
+ enabled: process.env.APP_PUSH_ENABLED === 'true',
112
+ /** DCloud 开发者中心 → UniPush 2.0 的 appid(即 manifest 的 appid) */
113
+ appid: process.env.UNI_PUSH_APPID || '',
114
+ appkey: process.env.UNI_PUSH_APPKEY || '',
115
+ /** REST API 鉴权密钥(HMAC 签名用,请勿泄露) */
116
+ masterSecret: process.env.UNI_PUSH_MASTER_SECRET || '',
117
+ },
118
+ /** SMTP 邮件(EXTERNAL_NOTIFY_CHANNEL=email 时启用) */
119
+ email: {
120
+ host: process.env.EMAIL_SMTP_HOST || '',
121
+ port: parseInt(process.env.EMAIL_SMTP_PORT || '465'),
122
+ /** true = 465 端口 SSL/TLS(默认);false = 587 端口 STARTTLS */
123
+ secure: (process.env.EMAIL_SMTP_SECURE || 'true') === 'true',
124
+ /** 发件邮箱账号(通常与 from 的邮箱部分相同) */
125
+ user: process.env.EMAIL_SMTP_USER || '',
126
+ /** 邮箱授权码(非登录密码,需在邮箱设置中开启 SMTP 并生成) */
127
+ pass: process.env.EMAIL_SMTP_PASS || '',
128
+ /** 发件人显示(nodemailer 支持 "名称 <addr>" 格式,如 "WIS供应链 <noreply@example.com>") */
129
+ from: process.env.EMAIL_FROM || '',
130
+ },
131
+ /** 阿里云短信(EXTERNAL_NOTIFY_CHANNEL=sms 时启用) */
132
+ sms: {
133
+ accessKeyId: process.env.SMS_ACCESS_KEY_ID || '',
134
+ accessKeySecret: process.env.SMS_ACCESS_KEY_SECRET || '',
135
+ /** 短信签名(短信服务控制台 → 签名管理,如「WIS供应链」) */
136
+ signName: process.env.SMS_SIGN_NAME || '',
137
+ /** 短信模板 Code(短信服务控制台 → 模板管理,如 SMS_xxxx) */
138
+ templateCode: process.env.SMS_TEMPLATE_CODE || '',
139
+ /** 阿里云 OpenAPI 地域,短信固定使用 dysmsapi 终端节点,此处仅用于区分(默认 ap-southeast-1 外网直连) */
140
+ region: process.env.SMS_REGION || 'ap-southeast-1',
141
+ },
142
+ /**
143
+ * 企业微信应用消息(V6.0):消息通知二期,服务端推送不校验域名。
144
+ * 注意:V6.1 起渠道启用与否改由 EXTERNAL_NOTIFY_CHANNEL 决定,此处的 enabled
145
+ * 仅表示企微凭证是否可用(EXTERNAL_NOTIFY_CHANNEL=wecom 时生效)
146
+ */
147
+ wecom: {
148
+ enabled: process.env.WECOM_ENABLED === 'true',
149
+ corpId: process.env.WECOM_CORP_ID || '',
150
+ agentId: process.env.WECOM_AGENT_ID || '',
151
+ secret: process.env.WECOM_SECRET || '',
152
+ /** 按手机号自动解析企微 userid(未绑定用户时),解析成功回写 sys_users.wechat_userid */
153
+ autoBind: process.env.WECOM_AUTO_BIND === 'true',
154
+ /** admin 端 H5 基础地址,textcard 跳转链接前缀(本地开发可指向 dev server) */
155
+ h5BaseUrl: process.env.WECOM_H5_BASE_URL || '',
156
+ },
157
+ /** 阿里云 OSS 文件存储配置 */
158
+ oss: {
159
+ accessKeyId: process.env.OSS_ACCESS_KEY_ID || '',
160
+ accessKeySecret: process.env.OSS_ACCESS_KEY_SECRET || '',
161
+ bucket: process.env.OSS_BUCKET || '',
162
+ endpoint: process.env.OSS_ENDPOINT || 'https://oss-cn-chengdu.aliyuncs.com',
163
+ region: process.env.OSS_REGION || 'oss-cn-chengdu',
164
+ },
165
+ /**
166
+ * DeepSeek AI 智能助手(V7.0):Function Calling 工具调用查询业务数据。
167
+ * - AI_ENABLED=true 开启;AI_API_KEY 必填(https://platform.deepseek.com)
168
+ * - AI_BASE_URL 默认 DeepSeek 官方,兼容 OpenAI 格式可指向任意代理
169
+ */
170
+ ai: {
171
+ enabled: process.env.AI_ENABLED === 'true',
172
+ apiKey: process.env.AI_API_KEY || '',
173
+ baseUrl: process.env.AI_BASE_URL || 'https://api.deepseek.com',
174
+ // 注意:旧名 deepseek-chat / deepseek-reasoner 已于 2026-07-24 停用
175
+ model: process.env.AI_MODEL || 'deepseek-v4-flash',
176
+ /** 厂商扩展参数透传(JSON 字符串)。例:DeepSeek V4 Pro 思考模式 {"thinking":{"type":"enabled"}} */
177
+ extraBody: parseExtraBody(process.env.AI_EXTRA_BODY),
178
+ },
179
+ };
180
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/config/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ export declare const iocContainer: {
2
+ get<T>(controller: {
3
+ new (...args: any[]): T;
4
+ }): T;
5
+ };
6
+ //# sourceMappingURL=ioc.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ioc.d.ts","sourceRoot":"","sources":["../../src/config/ioc.ts"],"names":[],"mappings":"AAcA,eAAO,MAAM,YAAY;QACnB,CAAC,cAAc;QAAE,KAAK,GAAG,IAAI,EAAE,GAAG,EAAE,GAAG,CAAC,CAAA;KAAE,GAAG,CAAC;CASnD,CAAC"}
@@ -0,0 +1,29 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.iocContainer = void 0;
4
+ /**
5
+ * tsoa + typedi 依赖注入适配模块
6
+ *
7
+ * tsoa 生成的路由代码期望 iocContainer 为 IocContainer 对象(有 .get() 方法),
8
+ * 或 IocContainerFactory 函数(接收 request,返回 IocContainer 对象)。
9
+ *
10
+ * 当前项目采用渐进式 DI:Controller 内部手动 new Service(),
11
+ * 未使用 @Service() 装饰器注册到容器。因此 .get() 先尝试 typedi 解析,
12
+ * 失败时降级为直接 new,兼容两种模式。
13
+ *
14
+ * 配置位置:tsoa.json → routes.iocModule
15
+ */
16
+ const typedi_1 = require("typedi");
17
+ exports.iocContainer = {
18
+ get(controller) {
19
+ try {
20
+ // 优先从 typedi 容器获取(适用于已用 @Service() 注册的 Controller)
21
+ return typedi_1.Container.get(controller);
22
+ }
23
+ catch {
24
+ // 降级:直接 new(适用于未注册的 Controller,当前默认行为)
25
+ return new controller();
26
+ }
27
+ },
28
+ };
29
+ //# sourceMappingURL=ioc.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ioc.js","sourceRoot":"","sources":["../../src/config/ioc.ts"],"names":[],"mappings":";;;AAAA;;;;;;;;;;;GAWG;AACH,mCAAmC;AAEtB,QAAA,YAAY,GAAG;IAC1B,GAAG,CAAI,UAAuC;QAC5C,IAAI,CAAC;YACH,mDAAmD;YACnD,OAAO,kBAAS,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;QACnC,CAAC;QAAC,MAAM,CAAC;YACP,uCAAuC;YACvC,OAAO,IAAI,UAAU,EAAE,CAAC;QAC1B,CAAC;IACH,CAAC;CACF,CAAC"}
@@ -0,0 +1,12 @@
1
+ import 'reflect-metadata';
2
+ /**
3
+ * Koa-Boot Runtime —— 框架运行时 Public API(仅导出 6 个命名,内部模块不导出)。
4
+ */
5
+ export { registerRoutes } from './registerRoutes';
6
+ export type { RegisterRoutesOptions } from './registerRoutes';
7
+ export { createPrismaClient } from './config/database';
8
+ export * as systemServices from './systemServices';
9
+ export * as aiToolRegistry from './aiToolRegistry';
10
+ export * as middlewares from './middlewares';
11
+ export * as types from './types';
12
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,kBAAkB,CAAC;AAE1B;;GAEG;AACH,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAClD,YAAY,EAAE,qBAAqB,EAAE,MAAM,kBAAkB,CAAC;AAC9D,OAAO,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AACvD,OAAO,KAAK,cAAc,MAAM,kBAAkB,CAAC;AACnD,OAAO,KAAK,cAAc,MAAM,kBAAkB,CAAC;AACnD,OAAO,KAAK,WAAW,MAAM,eAAe,CAAC;AAC7C,OAAO,KAAK,KAAK,MAAM,SAAS,CAAC"}
package/dist/index.js ADDED
@@ -0,0 +1,49 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ Object.defineProperty(exports, "__esModule", { value: true });
36
+ exports.types = exports.middlewares = exports.aiToolRegistry = exports.systemServices = exports.createPrismaClient = exports.registerRoutes = void 0;
37
+ require("reflect-metadata");
38
+ /**
39
+ * Koa-Boot Runtime —— 框架运行时 Public API(仅导出 6 个命名,内部模块不导出)。
40
+ */
41
+ var registerRoutes_1 = require("./registerRoutes");
42
+ Object.defineProperty(exports, "registerRoutes", { enumerable: true, get: function () { return registerRoutes_1.registerRoutes; } });
43
+ var database_1 = require("./config/database");
44
+ Object.defineProperty(exports, "createPrismaClient", { enumerable: true, get: function () { return database_1.createPrismaClient; } });
45
+ exports.systemServices = __importStar(require("./systemServices"));
46
+ exports.aiToolRegistry = __importStar(require("./aiToolRegistry"));
47
+ exports.middlewares = __importStar(require("./middlewares"));
48
+ exports.types = __importStar(require("./types"));
49
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,4BAA0B;AAE1B;;GAEG;AACH,mDAAkD;AAAzC,gHAAA,cAAc,OAAA;AAEvB,8CAAuD;AAA9C,8GAAA,kBAAkB,OAAA;AAC3B,mEAAmD;AACnD,mEAAmD;AACnD,6DAA6C;AAC7C,iDAAiC"}
@@ -0,0 +1,3 @@
1
+ import { Middleware } from 'koa';
2
+ export declare const authMiddleware: Middleware;
3
+ //# sourceMappingURL=auth.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"auth.d.ts","sourceRoot":"","sources":["../../src/middleware/auth.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,KAAK,CAAC;AA8BjC,eAAO,MAAM,cAAc,EAAE,UA2B5B,CAAC"}
@@ -0,0 +1,52 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.authMiddleware = void 0;
4
+ const jwt_1 = require("../utils/jwt");
5
+ const types_1 = require("../common/types");
6
+ // 放行路径API(tsoa basePath=/api,所有路由均带 /api 前缀)
7
+ const whiteList = [
8
+ '/api/system/user/login',
9
+ // 登出:JWT 无状态,服务端不吊销 token,仅记日志;放行以兼容 token 已过期场景
10
+ '/api/system/user/logout',
11
+ // 批量查询文件 URL(溯源页图片回显),只读接口
12
+ '/api/system/file-upload/batch',
13
+ // API 文档页(Scalar/Swagger UI)公开可访问
14
+ '/api-docs',
15
+ '/docs',
16
+ '/swagger.json',
17
+ ];
18
+ // 正则放行(路径中含动态参数的公开接口)
19
+ const whiteListPatterns = [
20
+ // 消费者扫码查询溯源信息,无需登录
21
+ /^\/api\/traceability-codes\/[^/]+\/trace-info$/,
22
+ ];
23
+ function isWhiteList(path) {
24
+ return (whiteList.some(pattern => path.startsWith(pattern)) ||
25
+ whiteListPatterns.some(pattern => pattern.test(path)));
26
+ }
27
+ const authMiddleware = async (ctx, next) => {
28
+ if (isWhiteList(ctx.path)) {
29
+ await next();
30
+ return;
31
+ }
32
+ const authorization = ctx.headers.authorization;
33
+ if (!authorization || !authorization.startsWith('Bearer ')) {
34
+ ctx.status = 401;
35
+ ctx.body = (0, types_1.fail)('未授权,请先登录', types_1.BizCode.UNAUTHORIZED);
36
+ return;
37
+ }
38
+ const token = authorization.slice(7);
39
+ const payload = (0, jwt_1.verifyToken)(token);
40
+ if (!payload) {
41
+ ctx.status = 401;
42
+ ctx.body = (0, types_1.fail)('Token 无效或已过期', types_1.BizCode.UNAUTHORIZED);
43
+ return;
44
+ }
45
+ ctx.state.user = payload;
46
+ // tsoa koa 模板 @Request() 注入的是 ctx.request(而非整个 ctx),
47
+ // 需将 state 同步挂到 request 上,controller 中 req.state.user 才能取到登录用户
48
+ ctx.request.state = ctx.state;
49
+ await next();
50
+ };
51
+ exports.authMiddleware = authMiddleware;
52
+ //# sourceMappingURL=auth.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"auth.js","sourceRoot":"","sources":["../../src/middleware/auth.ts"],"names":[],"mappings":";;;AACA,sCAAuD;AACvD,2CAAgD;AAEhD,6CAA6C;AAC7C,MAAM,SAAS,GAAG;IAChB,wBAAwB;IACxB,iDAAiD;IACjD,yBAAyB;IACzB,2BAA2B;IAC3B,+BAA+B;IAC/B,kCAAkC;IAClC,WAAW;IACX,OAAO;IACP,eAAe;CAChB,CAAC;AAEF,sBAAsB;AACtB,MAAM,iBAAiB,GAAG;IACxB,mBAAmB;IACnB,gDAAgD;CACjD,CAAC;AAEF,SAAS,WAAW,CAAC,IAAY;IAC/B,OAAO,CACL,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC;QACnD,iBAAiB,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CACtD,CAAC;AACJ,CAAC;AAEM,MAAM,cAAc,GAAe,KAAK,EAAE,GAAG,EAAE,IAAI,EAAE,EAAE;IAC5D,IAAI,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;QAC1B,MAAM,IAAI,EAAE,CAAC;QACb,OAAO;IACT,CAAC;IAED,MAAM,aAAa,GAAG,GAAG,CAAC,OAAO,CAAC,aAAa,CAAC;IAChD,IAAI,CAAC,aAAa,IAAI,CAAC,aAAa,CAAC,UAAU,CAAC,SAAS,CAAC,EAAE,CAAC;QAC3D,GAAG,CAAC,MAAM,GAAG,GAAG,CAAC;QACjB,GAAG,CAAC,IAAI,GAAG,IAAA,YAAI,EAAC,UAAU,EAAE,eAAO,CAAC,YAAY,CAAC,CAAC;QAClD,OAAO;IACT,CAAC;IAED,MAAM,KAAK,GAAG,aAAa,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IACrC,MAAM,OAAO,GAAG,IAAA,iBAAW,EAAC,KAAK,CAAC,CAAC;IAEnC,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,GAAG,CAAC,MAAM,GAAG,GAAG,CAAC;QACjB,GAAG,CAAC,IAAI,GAAG,IAAA,YAAI,EAAC,cAAc,EAAE,eAAO,CAAC,YAAY,CAAC,CAAC;QACtD,OAAO;IACT,CAAC;IAED,GAAG,CAAC,KAAK,CAAC,IAAI,GAAG,OAAO,CAAC;IACzB,qDAAqD;IACrD,+DAA+D;IAC9D,GAAG,CAAC,OAAe,CAAC,KAAK,GAAG,GAAG,CAAC,KAAK,CAAC;IACvC,MAAM,IAAI,EAAE,CAAC;AACf,CAAC,CAAC;AA3BW,QAAA,cAAc,kBA2BzB"}
@@ -0,0 +1,3 @@
1
+ import { Middleware } from 'koa';
2
+ export declare const errorHandler: Middleware;
3
+ //# sourceMappingURL=errorHandler.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"errorHandler.d.ts","sourceRoot":"","sources":["../../src/middleware/errorHandler.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,KAAK,CAAC;AAIjC,eAAO,MAAM,YAAY,EAAE,UA4B1B,CAAC"}
@@ -0,0 +1,40 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.errorHandler = void 0;
4
+ const types_1 = require("../common/types");
5
+ const logger_1 = require("../utils/logger");
6
+ const errorHandler = async (ctx, next) => {
7
+ try {
8
+ await next();
9
+ }
10
+ catch (err) {
11
+ const error = err;
12
+ const status = error.status || 500;
13
+ ctx.status = status;
14
+ // 根据 HTTP 状态码映射业务码,保持响应格式统一
15
+ let bizCode;
16
+ switch (status) {
17
+ case 401:
18
+ bizCode = types_1.BizCode.UNAUTHORIZED;
19
+ break;
20
+ case 403:
21
+ bizCode = types_1.BizCode.FORBIDDEN;
22
+ break;
23
+ case 404:
24
+ bizCode = types_1.BizCode.NOT_FOUND;
25
+ break;
26
+ case 422:
27
+ bizCode = types_1.BizCode.VALIDATION_ERROR;
28
+ break;
29
+ default: bizCode = status >= 500 ? types_1.BizCode.INTERNAL_ERROR : types_1.BizCode.FAIL;
30
+ }
31
+ ctx.body = (0, types_1.fail)(error.message || '服务器内部错误', bizCode);
32
+ // 开发环境追加堆栈信息
33
+ if (process.env.NODE_ENV === 'development') {
34
+ ctx.body.stack = error.stack;
35
+ }
36
+ logger_1.logger.error(`[ErrorHandler] ${ctx.method} ${ctx.url} → ${status}`, error);
37
+ }
38
+ };
39
+ exports.errorHandler = errorHandler;
40
+ //# sourceMappingURL=errorHandler.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"errorHandler.js","sourceRoot":"","sources":["../../src/middleware/errorHandler.ts"],"names":[],"mappings":";;;AACA,2CAAgD;AAChD,4CAAyC;AAElC,MAAM,YAAY,GAAe,KAAK,EAAE,GAAG,EAAE,IAAI,EAAE,EAAE;IAC1D,IAAI,CAAC;QACH,MAAM,IAAI,EAAE,CAAC;IACf,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,MAAM,KAAK,GAAG,GAAkD,CAAC;QACjE,MAAM,MAAM,GAAG,KAAK,CAAC,MAAM,IAAI,GAAG,CAAC;QAEnC,GAAG,CAAC,MAAM,GAAG,MAAM,CAAC;QAEpB,4BAA4B;QAC5B,IAAI,OAAe,CAAC;QACpB,QAAQ,MAAM,EAAE,CAAC;YACf,KAAK,GAAG;gBAAE,OAAO,GAAG,eAAO,CAAC,YAAY,CAAC;gBAAC,MAAM;YAChD,KAAK,GAAG;gBAAE,OAAO,GAAG,eAAO,CAAC,SAAS,CAAC;gBAAC,MAAM;YAC7C,KAAK,GAAG;gBAAE,OAAO,GAAG,eAAO,CAAC,SAAS,CAAC;gBAAC,MAAM;YAC7C,KAAK,GAAG;gBAAE,OAAO,GAAG,eAAO,CAAC,gBAAgB,CAAC;gBAAC,MAAM;YACpD,OAAO,CAAC,CAAE,OAAO,GAAG,MAAM,IAAI,GAAG,CAAC,CAAC,CAAC,eAAO,CAAC,cAAc,CAAC,CAAC,CAAC,eAAO,CAAC,IAAI,CAAC;QAC5E,CAAC;QAED,GAAG,CAAC,IAAI,GAAG,IAAA,YAAI,EAAC,KAAK,CAAC,OAAO,IAAI,SAAS,EAAE,OAAO,CAAC,CAAC;QAErD,aAAa;QACb,IAAI,OAAO,CAAC,GAAG,CAAC,QAAQ,KAAK,aAAa,EAAE,CAAC;YAC1C,GAAG,CAAC,IAAgC,CAAC,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC;QAC5D,CAAC;QAED,eAAM,CAAC,KAAK,CAAC,kBAAkB,GAAG,CAAC,MAAM,IAAI,GAAG,CAAC,GAAG,MAAM,MAAM,EAAE,EAAE,KAAK,CAAC,CAAC;IAC7E,CAAC;AACH,CAAC,CAAC;AA5BW,QAAA,YAAY,gBA4BvB"}
@@ -0,0 +1,3 @@
1
+ import { Middleware } from 'koa';
2
+ export declare const logger: Middleware;
3
+ //# sourceMappingURL=logger.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"logger.d.ts","sourceRoot":"","sources":["../../src/middleware/logger.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAE,MAAM,KAAK,CAAA;AAKhC,eAAO,MAAM,MAAM,EAAE,UAKpB,CAAC"}
@@ -0,0 +1,13 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.logger = void 0;
4
+ const logger_1 = require("../utils/logger");
5
+ const requestLogger = new logger_1.Logger('HTTP');
6
+ const logger = async (ctx, next) => {
7
+ const start = Date.now();
8
+ await next();
9
+ const ms = Date.now() - start;
10
+ requestLogger.logRequest(ctx.method, ctx.url, ctx.status, ms);
11
+ };
12
+ exports.logger = logger;
13
+ //# sourceMappingURL=logger.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"logger.js","sourceRoot":"","sources":["../../src/middleware/logger.ts"],"names":[],"mappings":";;;AAEA,4CAAwC;AAExC,MAAM,aAAa,GAAG,IAAI,eAAM,CAAC,MAAM,CAAC,CAAA;AAEjC,MAAM,MAAM,GAAe,KAAK,EAAE,GAAG,EAAE,IAAI,EAAE,EAAE;IACpD,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IACzB,MAAM,IAAI,EAAE,CAAC;IACb,MAAM,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,KAAK,CAAC;IAC9B,aAAa,CAAC,UAAU,CAAC,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,EAAE,GAAG,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;AAChE,CAAC,CAAC;AALW,QAAA,MAAM,UAKjB"}
@@ -0,0 +1,11 @@
1
+ import { Middleware } from 'koa';
2
+ /**
3
+ * 操作日志中间件
4
+ *
5
+ * 自动拦截 POST/PUT/DELETE 请求,记录操作日志到数据库。
6
+ * 必须放在 authMiddleware 之后使用,以获取 ctx.state.user 中的用户信息。
7
+ *
8
+ * 日志写入采用 fire-and-forget 模式,不阻塞响应返回。
9
+ */
10
+ export declare const operationLogger: Middleware;
11
+ //# sourceMappingURL=operationLogger.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"operationLogger.d.ts","sourceRoot":"","sources":["../../src/middleware/operationLogger.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,KAAK,CAAC;AA2GjC;;;;;;;GAOG;AACH,eAAO,MAAM,eAAe,EAAE,UAiD7B,CAAC"}