@dofe/infra-common 0.1.1

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 (373) hide show
  1. package/dist/adapters/base.adapter.d.ts +84 -0
  2. package/dist/adapters/base.adapter.d.ts.map +1 -0
  3. package/dist/adapters/base.adapter.js +19 -0
  4. package/dist/adapters/base.adapter.js.map +1 -0
  5. package/dist/adapters/index.d.ts +35 -0
  6. package/dist/adapters/index.d.ts.map +1 -0
  7. package/dist/adapters/index.js +53 -0
  8. package/dist/adapters/index.js.map +1 -0
  9. package/dist/common.module.d.ts +7 -0
  10. package/dist/common.module.d.ts.map +1 -0
  11. package/dist/common.module.js +26 -0
  12. package/dist/common.module.js.map +1 -0
  13. package/dist/config/agentx.config.d.ts +37 -0
  14. package/dist/config/agentx.config.d.ts.map +1 -0
  15. package/dist/config/agentx.config.js +81 -0
  16. package/dist/config/agentx.config.js.map +1 -0
  17. package/dist/config/configuration.d.ts +55 -0
  18. package/dist/config/configuration.d.ts.map +1 -0
  19. package/dist/config/configuration.js +336 -0
  20. package/dist/config/configuration.js.map +1 -0
  21. package/dist/config/constant/config.constants.d.ts +48 -0
  22. package/dist/config/constant/config.constants.d.ts.map +1 -0
  23. package/dist/config/constant/config.constants.js +86 -0
  24. package/dist/config/constant/config.constants.js.map +1 -0
  25. package/dist/config/dto/config.dto.d.ts +222 -0
  26. package/dist/config/dto/config.dto.d.ts.map +1 -0
  27. package/dist/config/dto/config.dto.js +42 -0
  28. package/dist/config/dto/config.dto.js.map +1 -0
  29. package/dist/config/env-config.service.d.ts +147 -0
  30. package/dist/config/env-config.service.d.ts.map +1 -0
  31. package/dist/config/env-config.service.js +296 -0
  32. package/dist/config/env-config.service.js.map +1 -0
  33. package/dist/config/features/feature-errors.d.ts +13 -0
  34. package/dist/config/features/feature-errors.d.ts.map +1 -0
  35. package/dist/config/features/feature-errors.js +25 -0
  36. package/dist/config/features/feature-errors.js.map +1 -0
  37. package/dist/config/features/feature-registry.d.ts +26 -0
  38. package/dist/config/features/feature-registry.d.ts.map +1 -0
  39. package/dist/config/features/feature-registry.js +172 -0
  40. package/dist/config/features/feature-registry.js.map +1 -0
  41. package/dist/config/features/index.d.ts +4 -0
  42. package/dist/config/features/index.d.ts.map +1 -0
  43. package/dist/config/features/index.js +9 -0
  44. package/dist/config/features/index.js.map +1 -0
  45. package/dist/config/validation/env.validation.d.ts +132 -0
  46. package/dist/config/validation/env.validation.d.ts.map +1 -0
  47. package/dist/config/validation/env.validation.js +304 -0
  48. package/dist/config/validation/env.validation.js.map +1 -0
  49. package/dist/config/validation/index.d.ts +21 -0
  50. package/dist/config/validation/index.d.ts.map +1 -0
  51. package/dist/config/validation/index.js +119 -0
  52. package/dist/config/validation/index.js.map +1 -0
  53. package/dist/config/validation/keys.validation.d.ts +884 -0
  54. package/dist/config/validation/keys.validation.d.ts.map +1 -0
  55. package/dist/config/validation/keys.validation.js +506 -0
  56. package/dist/config/validation/keys.validation.js.map +1 -0
  57. package/dist/config/validation/yaml.validation.d.ts +765 -0
  58. package/dist/config/validation/yaml.validation.d.ts.map +1 -0
  59. package/dist/config/validation/yaml.validation.js +488 -0
  60. package/dist/config/validation/yaml.validation.js.map +1 -0
  61. package/dist/config/vendor.config.d.ts +48 -0
  62. package/dist/config/vendor.config.d.ts.map +1 -0
  63. package/dist/config/vendor.config.js +136 -0
  64. package/dist/config/vendor.config.js.map +1 -0
  65. package/dist/decorators/api-key/api-key.decorator.d.ts +25 -0
  66. package/dist/decorators/api-key/api-key.decorator.d.ts.map +1 -0
  67. package/dist/decorators/api-key/api-key.decorator.js +30 -0
  68. package/dist/decorators/api-key/api-key.decorator.js.map +1 -0
  69. package/dist/decorators/api-key/index.d.ts +2 -0
  70. package/dist/decorators/api-key/index.d.ts.map +1 -0
  71. package/dist/decorators/api-key/index.js +18 -0
  72. package/dist/decorators/api-key/index.js.map +1 -0
  73. package/dist/decorators/app-version/app-version.controller.d.ts +30 -0
  74. package/dist/decorators/app-version/app-version.controller.d.ts.map +1 -0
  75. package/dist/decorators/app-version/app-version.controller.js +159 -0
  76. package/dist/decorators/app-version/app-version.controller.js.map +1 -0
  77. package/dist/decorators/app-version/app-version.interceptor.d.ts +15 -0
  78. package/dist/decorators/app-version/app-version.interceptor.d.ts.map +1 -0
  79. package/dist/decorators/app-version/app-version.interceptor.js +42 -0
  80. package/dist/decorators/app-version/app-version.interceptor.js.map +1 -0
  81. package/dist/decorators/app-version/app-version.module.d.ts +8 -0
  82. package/dist/decorators/app-version/app-version.module.d.ts.map +1 -0
  83. package/dist/decorators/app-version/app-version.module.js +39 -0
  84. package/dist/decorators/app-version/app-version.module.js.map +1 -0
  85. package/dist/decorators/app-version/app-version.service.d.ts +88 -0
  86. package/dist/decorators/app-version/app-version.service.d.ts.map +1 -0
  87. package/dist/decorators/app-version/app-version.service.js +251 -0
  88. package/dist/decorators/app-version/app-version.service.js.map +1 -0
  89. package/dist/decorators/app-version/index.d.ts +8 -0
  90. package/dist/decorators/app-version/index.d.ts.map +1 -0
  91. package/dist/decorators/app-version/index.js +15 -0
  92. package/dist/decorators/app-version/index.js.map +1 -0
  93. package/dist/decorators/audit-log.decorator.d.ts +41 -0
  94. package/dist/decorators/audit-log.decorator.d.ts.map +1 -0
  95. package/dist/decorators/audit-log.decorator.js +19 -0
  96. package/dist/decorators/audit-log.decorator.js.map +1 -0
  97. package/dist/decorators/cache/cache.decorator.d.ts +256 -0
  98. package/dist/decorators/cache/cache.decorator.d.ts.map +1 -0
  99. package/dist/decorators/cache/cache.decorator.js +339 -0
  100. package/dist/decorators/cache/cache.decorator.js.map +1 -0
  101. package/dist/decorators/cache/cache.interceptor.d.ts +43 -0
  102. package/dist/decorators/cache/cache.interceptor.d.ts.map +1 -0
  103. package/dist/decorators/cache/cache.interceptor.js +219 -0
  104. package/dist/decorators/cache/cache.interceptor.js.map +1 -0
  105. package/dist/decorators/cache/cache.module.d.ts +9 -0
  106. package/dist/decorators/cache/cache.module.d.ts.map +1 -0
  107. package/dist/decorators/cache/cache.module.js +36 -0
  108. package/dist/decorators/cache/cache.module.js.map +1 -0
  109. package/dist/decorators/cache/index.d.ts +7 -0
  110. package/dist/decorators/cache/index.d.ts.map +1 -0
  111. package/dist/decorators/cache/index.js +32 -0
  112. package/dist/decorators/cache/index.js.map +1 -0
  113. package/dist/decorators/data-visibility/data-visibility.decorator.d.ts +74 -0
  114. package/dist/decorators/data-visibility/data-visibility.decorator.d.ts.map +1 -0
  115. package/dist/decorators/data-visibility/data-visibility.decorator.js +87 -0
  116. package/dist/decorators/data-visibility/data-visibility.decorator.js.map +1 -0
  117. package/dist/decorators/data-visibility/index.d.ts +2 -0
  118. package/dist/decorators/data-visibility/index.d.ts.map +1 -0
  119. package/dist/decorators/data-visibility/index.js +18 -0
  120. package/dist/decorators/data-visibility/index.js.map +1 -0
  121. package/dist/decorators/event/event.decorator.d.ts +152 -0
  122. package/dist/decorators/event/event.decorator.d.ts.map +1 -0
  123. package/dist/decorators/event/event.decorator.js +158 -0
  124. package/dist/decorators/event/event.decorator.js.map +1 -0
  125. package/dist/decorators/event/event.interceptor.d.ts +23 -0
  126. package/dist/decorators/event/event.interceptor.d.ts.map +1 -0
  127. package/dist/decorators/event/event.interceptor.js +140 -0
  128. package/dist/decorators/event/event.interceptor.js.map +1 -0
  129. package/dist/decorators/event/event.module.d.ts +9 -0
  130. package/dist/decorators/event/event.module.d.ts.map +1 -0
  131. package/dist/decorators/event/event.module.js +59 -0
  132. package/dist/decorators/event/event.module.js.map +1 -0
  133. package/dist/decorators/event/handlers/cache-event.handler.d.ts +55 -0
  134. package/dist/decorators/event/handlers/cache-event.handler.d.ts.map +1 -0
  135. package/dist/decorators/event/handlers/cache-event.handler.js +159 -0
  136. package/dist/decorators/event/handlers/cache-event.handler.js.map +1 -0
  137. package/dist/decorators/event/index.d.ts +8 -0
  138. package/dist/decorators/event/index.d.ts.map +1 -0
  139. package/dist/decorators/event/index.js +26 -0
  140. package/dist/decorators/event/index.js.map +1 -0
  141. package/dist/decorators/feature-flag/feature-flag.decorator.d.ts +144 -0
  142. package/dist/decorators/feature-flag/feature-flag.decorator.d.ts.map +1 -0
  143. package/dist/decorators/feature-flag/feature-flag.decorator.js +135 -0
  144. package/dist/decorators/feature-flag/feature-flag.decorator.js.map +1 -0
  145. package/dist/decorators/feature-flag/feature-flag.interceptor.d.ts +30 -0
  146. package/dist/decorators/feature-flag/feature-flag.interceptor.d.ts.map +1 -0
  147. package/dist/decorators/feature-flag/feature-flag.interceptor.js +127 -0
  148. package/dist/decorators/feature-flag/feature-flag.interceptor.js.map +1 -0
  149. package/dist/decorators/feature-flag/feature-flag.module.d.ts +9 -0
  150. package/dist/decorators/feature-flag/feature-flag.module.d.ts.map +1 -0
  151. package/dist/decorators/feature-flag/feature-flag.module.js +39 -0
  152. package/dist/decorators/feature-flag/feature-flag.module.js.map +1 -0
  153. package/dist/decorators/feature-flag/feature-flag.service.d.ts +102 -0
  154. package/dist/decorators/feature-flag/feature-flag.service.d.ts.map +1 -0
  155. package/dist/decorators/feature-flag/feature-flag.service.js +373 -0
  156. package/dist/decorators/feature-flag/feature-flag.service.js.map +1 -0
  157. package/dist/decorators/feature-flag/feature-flag.service.spec.d.ts +2 -0
  158. package/dist/decorators/feature-flag/feature-flag.service.spec.d.ts.map +1 -0
  159. package/dist/decorators/feature-flag/feature-flag.service.spec.js +264 -0
  160. package/dist/decorators/feature-flag/feature-flag.service.spec.js.map +1 -0
  161. package/dist/decorators/feature-flag/index.d.ts +8 -0
  162. package/dist/decorators/feature-flag/index.d.ts.map +1 -0
  163. package/dist/decorators/feature-flag/index.js +23 -0
  164. package/dist/decorators/feature-flag/index.js.map +1 -0
  165. package/dist/decorators/rate-limit/dto/rate-limit.dto.d.ts +174 -0
  166. package/dist/decorators/rate-limit/dto/rate-limit.dto.d.ts.map +1 -0
  167. package/dist/decorators/rate-limit/dto/rate-limit.dto.js +8 -0
  168. package/dist/decorators/rate-limit/dto/rate-limit.dto.js.map +1 -0
  169. package/dist/decorators/rate-limit/index.d.ts +24 -0
  170. package/dist/decorators/rate-limit/index.d.ts.map +1 -0
  171. package/dist/decorators/rate-limit/index.js +44 -0
  172. package/dist/decorators/rate-limit/index.js.map +1 -0
  173. package/dist/decorators/rate-limit/rate-limit.constants.d.ts +16 -0
  174. package/dist/decorators/rate-limit/rate-limit.constants.d.ts.map +1 -0
  175. package/dist/decorators/rate-limit/rate-limit.constants.js +22 -0
  176. package/dist/decorators/rate-limit/rate-limit.constants.js.map +1 -0
  177. package/dist/decorators/rate-limit/rate-limit.decorator.d.ts +132 -0
  178. package/dist/decorators/rate-limit/rate-limit.decorator.d.ts.map +1 -0
  179. package/dist/decorators/rate-limit/rate-limit.decorator.js +185 -0
  180. package/dist/decorators/rate-limit/rate-limit.decorator.js.map +1 -0
  181. package/dist/decorators/rate-limit/rate-limit.exception.d.ts +39 -0
  182. package/dist/decorators/rate-limit/rate-limit.exception.d.ts.map +1 -0
  183. package/dist/decorators/rate-limit/rate-limit.exception.js +67 -0
  184. package/dist/decorators/rate-limit/rate-limit.exception.js.map +1 -0
  185. package/dist/decorators/rate-limit/rate-limit.module.d.ts +25 -0
  186. package/dist/decorators/rate-limit/rate-limit.module.d.ts.map +1 -0
  187. package/dist/decorators/rate-limit/rate-limit.module.js +48 -0
  188. package/dist/decorators/rate-limit/rate-limit.module.js.map +1 -0
  189. package/dist/decorators/rate-limit/rate-limit.service.d.ts +102 -0
  190. package/dist/decorators/rate-limit/rate-limit.service.d.ts.map +1 -0
  191. package/dist/decorators/rate-limit/rate-limit.service.js +390 -0
  192. package/dist/decorators/rate-limit/rate-limit.service.js.map +1 -0
  193. package/dist/decorators/response.decorator.d.ts +10 -0
  194. package/dist/decorators/response.decorator.d.ts.map +1 -0
  195. package/dist/decorators/response.decorator.js +58 -0
  196. package/dist/decorators/response.decorator.js.map +1 -0
  197. package/dist/decorators/skip-version-check.decorator.d.ts +25 -0
  198. package/dist/decorators/skip-version-check.decorator.d.ts.map +1 -0
  199. package/dist/decorators/skip-version-check.decorator.js +31 -0
  200. package/dist/decorators/skip-version-check.decorator.js.map +1 -0
  201. package/dist/decorators/tenant/index.d.ts +2 -0
  202. package/dist/decorators/tenant/index.d.ts.map +1 -0
  203. package/dist/decorators/tenant/index.js +18 -0
  204. package/dist/decorators/tenant/index.js.map +1 -0
  205. package/dist/decorators/tenant/tenant.decorator.d.ts +82 -0
  206. package/dist/decorators/tenant/tenant.decorator.d.ts.map +1 -0
  207. package/dist/decorators/tenant/tenant.decorator.js +98 -0
  208. package/dist/decorators/tenant/tenant.decorator.js.map +1 -0
  209. package/dist/decorators/transaction/index.d.ts +6 -0
  210. package/dist/decorators/transaction/index.d.ts.map +1 -0
  211. package/dist/decorators/transaction/index.js +12 -0
  212. package/dist/decorators/transaction/index.js.map +1 -0
  213. package/dist/decorators/transaction/transactional.decorator.d.ts +234 -0
  214. package/dist/decorators/transaction/transactional.decorator.d.ts.map +1 -0
  215. package/dist/decorators/transaction/transactional.decorator.js +433 -0
  216. package/dist/decorators/transaction/transactional.decorator.js.map +1 -0
  217. package/dist/decorators/ts-rest-controller.decorator.d.ts +38 -0
  218. package/dist/decorators/ts-rest-controller.decorator.d.ts.map +1 -0
  219. package/dist/decorators/ts-rest-controller.decorator.js +25 -0
  220. package/dist/decorators/ts-rest-controller.decorator.js.map +1 -0
  221. package/dist/decorators/validation.decorator.d.ts +4 -0
  222. package/dist/decorators/validation.decorator.d.ts.map +1 -0
  223. package/dist/decorators/validation.decorator.js +121 -0
  224. package/dist/decorators/validation.decorator.js.map +1 -0
  225. package/dist/decorators/version/index.d.ts +7 -0
  226. package/dist/decorators/version/index.d.ts.map +1 -0
  227. package/dist/decorators/version/index.js +25 -0
  228. package/dist/decorators/version/index.js.map +1 -0
  229. package/dist/decorators/version/version.decorator.d.ts +96 -0
  230. package/dist/decorators/version/version.decorator.d.ts.map +1 -0
  231. package/dist/decorators/version/version.decorator.js +146 -0
  232. package/dist/decorators/version/version.decorator.js.map +1 -0
  233. package/dist/decorators/version/version.interceptor.d.ts +19 -0
  234. package/dist/decorators/version/version.interceptor.d.ts.map +1 -0
  235. package/dist/decorators/version/version.interceptor.js +86 -0
  236. package/dist/decorators/version/version.interceptor.js.map +1 -0
  237. package/dist/decorators/version/version.module.d.ts +8 -0
  238. package/dist/decorators/version/version.module.d.ts.map +1 -0
  239. package/dist/decorators/version/version.module.js +33 -0
  240. package/dist/decorators/version/version.module.js.map +1 -0
  241. package/dist/encryption.service.d.ts +15 -0
  242. package/dist/encryption.service.d.ts.map +1 -0
  243. package/dist/encryption.service.js +35 -0
  244. package/dist/encryption.service.js.map +1 -0
  245. package/dist/enums/action.enum.d.ts +8 -0
  246. package/dist/enums/action.enum.d.ts.map +1 -0
  247. package/dist/enums/action.enum.js +12 -0
  248. package/dist/enums/action.enum.js.map +1 -0
  249. package/dist/enums/error-codes.d.ts +33 -0
  250. package/dist/enums/error-codes.d.ts.map +1 -0
  251. package/dist/enums/error-codes.js +52 -0
  252. package/dist/enums/error-codes.js.map +1 -0
  253. package/dist/enums/role.enum.d.ts +5 -0
  254. package/dist/enums/role.enum.d.ts.map +1 -0
  255. package/dist/enums/role.enum.js +9 -0
  256. package/dist/enums/role.enum.js.map +1 -0
  257. package/dist/filter/exception/api.exception.d.ts +77 -0
  258. package/dist/filter/exception/api.exception.d.ts.map +1 -0
  259. package/dist/filter/exception/api.exception.js +151 -0
  260. package/dist/filter/exception/api.exception.js.map +1 -0
  261. package/dist/filter/exception/exception.d.ts +8 -0
  262. package/dist/filter/exception/exception.d.ts.map +1 -0
  263. package/dist/filter/exception/exception.js +50 -0
  264. package/dist/filter/exception/exception.js.map +1 -0
  265. package/dist/filter/exception/http.exception.d.ts +11 -0
  266. package/dist/filter/exception/http.exception.d.ts.map +1 -0
  267. package/dist/filter/exception/http.exception.js +152 -0
  268. package/dist/filter/exception/http.exception.js.map +1 -0
  269. package/dist/guards/api-key.guard.d.ts +42 -0
  270. package/dist/guards/api-key.guard.d.ts.map +1 -0
  271. package/dist/guards/api-key.guard.js +159 -0
  272. package/dist/guards/api-key.guard.js.map +1 -0
  273. package/dist/guards/auth.guard.d.ts +39 -0
  274. package/dist/guards/auth.guard.d.ts.map +1 -0
  275. package/dist/guards/auth.guard.js +178 -0
  276. package/dist/guards/auth.guard.js.map +1 -0
  277. package/dist/guards/data-visibility.guard.d.ts +18 -0
  278. package/dist/guards/data-visibility.guard.d.ts.map +1 -0
  279. package/dist/guards/data-visibility.guard.js +84 -0
  280. package/dist/guards/data-visibility.guard.js.map +1 -0
  281. package/dist/guards/index.d.ts +7 -0
  282. package/dist/guards/index.d.ts.map +1 -0
  283. package/dist/guards/index.js +23 -0
  284. package/dist/guards/index.js.map +1 -0
  285. package/dist/guards/permission.guard.d.ts +20 -0
  286. package/dist/guards/permission.guard.d.ts.map +1 -0
  287. package/dist/guards/permission.guard.js +141 -0
  288. package/dist/guards/permission.guard.js.map +1 -0
  289. package/dist/guards/tenant-context.guard.d.ts +12 -0
  290. package/dist/guards/tenant-context.guard.d.ts.map +1 -0
  291. package/dist/guards/tenant-context.guard.js +94 -0
  292. package/dist/guards/tenant-context.guard.js.map +1 -0
  293. package/dist/guards/version.guard.d.ts +100 -0
  294. package/dist/guards/version.guard.d.ts.map +1 -0
  295. package/dist/guards/version.guard.js +233 -0
  296. package/dist/guards/version.guard.js.map +1 -0
  297. package/dist/index.d.ts +60 -0
  298. package/dist/index.d.ts.map +1 -0
  299. package/dist/index.js +85 -0
  300. package/dist/index.js.map +1 -0
  301. package/dist/interceptor/audit/audit-log.interceptor.d.ts +16 -0
  302. package/dist/interceptor/audit/audit-log.interceptor.d.ts.map +1 -0
  303. package/dist/interceptor/audit/audit-log.interceptor.js +156 -0
  304. package/dist/interceptor/audit/audit-log.interceptor.js.map +1 -0
  305. package/dist/interceptor/audit/index.d.ts +2 -0
  306. package/dist/interceptor/audit/index.d.ts.map +1 -0
  307. package/dist/interceptor/audit/index.js +18 -0
  308. package/dist/interceptor/audit/index.js.map +1 -0
  309. package/dist/interceptor/mask/index.d.ts +2 -0
  310. package/dist/interceptor/mask/index.d.ts.map +1 -0
  311. package/dist/interceptor/mask/index.js +18 -0
  312. package/dist/interceptor/mask/index.js.map +1 -0
  313. package/dist/interceptor/mask/mask.interceptor.d.ts +79 -0
  314. package/dist/interceptor/mask/mask.interceptor.d.ts.map +1 -0
  315. package/dist/interceptor/mask/mask.interceptor.js +197 -0
  316. package/dist/interceptor/mask/mask.interceptor.js.map +1 -0
  317. package/dist/interceptor/rate-limit/no-rate-limit.interceptor.d.ts +6 -0
  318. package/dist/interceptor/rate-limit/no-rate-limit.interceptor.d.ts.map +1 -0
  319. package/dist/interceptor/rate-limit/no-rate-limit.interceptor.js +20 -0
  320. package/dist/interceptor/rate-limit/no-rate-limit.interceptor.js.map +1 -0
  321. package/dist/interceptor/rate-limit/rate-limit.interceptor.d.ts +45 -0
  322. package/dist/interceptor/rate-limit/rate-limit.interceptor.d.ts.map +1 -0
  323. package/dist/interceptor/rate-limit/rate-limit.interceptor.js +193 -0
  324. package/dist/interceptor/rate-limit/rate-limit.interceptor.js.map +1 -0
  325. package/dist/interceptor/transform/transform.interceptor.d.ts +37 -0
  326. package/dist/interceptor/transform/transform.interceptor.d.ts.map +1 -0
  327. package/dist/interceptor/transform/transform.interceptor.js +72 -0
  328. package/dist/interceptor/transform/transform.interceptor.js.map +1 -0
  329. package/dist/interceptor/transform/transform.interceptor.spec.d.ts +2 -0
  330. package/dist/interceptor/transform/transform.interceptor.spec.d.ts.map +1 -0
  331. package/dist/interceptor/transform/transform.interceptor.spec.js +9 -0
  332. package/dist/interceptor/transform/transform.interceptor.spec.js.map +1 -0
  333. package/dist/interceptor/version/index.d.ts +2 -0
  334. package/dist/interceptor/version/index.d.ts.map +1 -0
  335. package/dist/interceptor/version/index.js +18 -0
  336. package/dist/interceptor/version/index.js.map +1 -0
  337. package/dist/interceptor/version/version-header.interceptor.d.ts +31 -0
  338. package/dist/interceptor/version/version-header.interceptor.d.ts.map +1 -0
  339. package/dist/interceptor/version/version-header.interceptor.js +62 -0
  340. package/dist/interceptor/version/version-header.interceptor.js.map +1 -0
  341. package/dist/middleware/request.middleware.d.ts +27 -0
  342. package/dist/middleware/request.middleware.d.ts.map +1 -0
  343. package/dist/middleware/request.middleware.js +141 -0
  344. package/dist/middleware/request.middleware.js.map +1 -0
  345. package/dist/middleware/tenant-isolation.middleware.d.ts +12 -0
  346. package/dist/middleware/tenant-isolation.middleware.d.ts.map +1 -0
  347. package/dist/middleware/tenant-isolation.middleware.js +51 -0
  348. package/dist/middleware/tenant-isolation.middleware.js.map +1 -0
  349. package/dist/pipes/transform-root.pipe.d.ts +5 -0
  350. package/dist/pipes/transform-root.pipe.d.ts.map +1 -0
  351. package/dist/pipes/transform-root.pipe.js +24 -0
  352. package/dist/pipes/transform-root.pipe.js.map +1 -0
  353. package/dist/ts-rest/index.d.ts +36 -0
  354. package/dist/ts-rest/index.d.ts.map +1 -0
  355. package/dist/ts-rest/index.js +65 -0
  356. package/dist/ts-rest/index.js.map +1 -0
  357. package/dist/ts-rest/response.helper.d.ts +261 -0
  358. package/dist/ts-rest/response.helper.d.ts.map +1 -0
  359. package/dist/ts-rest/response.helper.js +372 -0
  360. package/dist/ts-rest/response.helper.js.map +1 -0
  361. package/dist/utils/audit-log-helper.util.d.ts +41 -0
  362. package/dist/utils/audit-log-helper.util.d.ts.map +1 -0
  363. package/dist/utils/audit-log-helper.util.js +115 -0
  364. package/dist/utils/audit-log-helper.util.js.map +1 -0
  365. package/dist/utils/audit-signature.util.d.ts +64 -0
  366. package/dist/utils/audit-signature.util.d.ts.map +1 -0
  367. package/dist/utils/audit-signature.util.js +155 -0
  368. package/dist/utils/audit-signature.util.js.map +1 -0
  369. package/dist/utils/prisma-error.util.d.ts +160 -0
  370. package/dist/utils/prisma-error.util.d.ts.map +1 -0
  371. package/dist/utils/prisma-error.util.js +342 -0
  372. package/dist/utils/prisma-error.util.js.map +1 -0
  373. package/package.json +54 -0
@@ -0,0 +1,136 @@
1
+ "use strict";
2
+ /**
3
+ * Vendor Configuration - AI 提供商配置
4
+ *
5
+ * 定义各 AI 提供商的 API 端点和认证方式
6
+ * 支持 60+ 提供商,与 provider.schema.ts 保持同步
7
+ */
8
+ Object.defineProperty(exports, "__esModule", { value: true });
9
+ exports.VENDOR_CONFIGS = void 0;
10
+ exports.createVendorConfigFromUrl = createVendorConfigFromUrl;
11
+ exports.getSupportedVendors = getSupportedVendors;
12
+ exports.isVendorSupported = isVendorSupported;
13
+ exports.getVendorConfig = getVendorConfig;
14
+ exports.getVendorConfigWithCustomUrl = getVendorConfigWithCustomUrl;
15
+ const infra_contracts_1 = require("@dofe/infra-contracts");
16
+ /**
17
+ * 根据 API 类型获取认证配置
18
+ */
19
+ function getAuthConfig(apiType) {
20
+ switch (apiType) {
21
+ case 'anthropic':
22
+ return {
23
+ authHeader: 'x-api-key',
24
+ authFormat: (key) => key,
25
+ };
26
+ case 'gemini':
27
+ return {
28
+ authHeader: 'x-goog-api-key',
29
+ authFormat: (key) => key,
30
+ };
31
+ case 'azure-openai':
32
+ return {
33
+ authHeader: 'api-key',
34
+ authFormat: (key) => key,
35
+ };
36
+ case 'aws-bedrock':
37
+ // AWS Bedrock uses IAM credentials, not API keys
38
+ return {
39
+ authHeader: 'Authorization',
40
+ authFormat: (key) => `Bearer ${key}`,
41
+ };
42
+ case 'vertexai':
43
+ return {
44
+ authHeader: 'Authorization',
45
+ authFormat: (key) => `Bearer ${key}`,
46
+ };
47
+ // OpenAI-compatible APIs (openai, openai-response, ollama, new-api, gateway)
48
+ default:
49
+ return {
50
+ authHeader: 'Authorization',
51
+ authFormat: (key) => `Bearer ${key}`,
52
+ };
53
+ }
54
+ }
55
+ /**
56
+ * 从 URL 解析主机名和基础路径
57
+ */
58
+ function parseApiHost(apiHost) {
59
+ if (!apiHost) {
60
+ return { host: '', basePath: '' };
61
+ }
62
+ try {
63
+ const url = new URL(apiHost);
64
+ return {
65
+ host: url.host,
66
+ basePath: url.pathname === '/' ? '' : url.pathname,
67
+ };
68
+ }
69
+ catch {
70
+ // 如果不是有效 URL,假设是主机名
71
+ return { host: apiHost, basePath: '' };
72
+ }
73
+ }
74
+ /**
75
+ * 从 PROVIDER_CONFIGS 动态生成 VENDOR_CONFIGS
76
+ * 支持所有 60+ 提供商
77
+ */
78
+ exports.VENDOR_CONFIGS = Object.entries(infra_contracts_1.PROVIDER_CONFIGS).reduce((acc, [vendor, config]) => {
79
+ const { host, basePath } = parseApiHost(config.apiHost);
80
+ const authConfig = getAuthConfig(config.apiType);
81
+ acc[vendor] = {
82
+ host,
83
+ basePath,
84
+ ...authConfig,
85
+ apiType: config.apiType,
86
+ };
87
+ return acc;
88
+ }, {});
89
+ /**
90
+ * 从自定义 URL 创建 VendorConfig
91
+ * 用于支持自定义 endpoint
92
+ */
93
+ function createVendorConfigFromUrl(customUrl, apiType = 'openai') {
94
+ const { host, basePath } = parseApiHost(customUrl);
95
+ const authConfig = getAuthConfig(apiType);
96
+ return {
97
+ host,
98
+ basePath,
99
+ ...authConfig,
100
+ apiType,
101
+ };
102
+ }
103
+ /**
104
+ * 获取支持的 vendor 列表
105
+ */
106
+ function getSupportedVendors() {
107
+ return Object.keys(exports.VENDOR_CONFIGS);
108
+ }
109
+ /**
110
+ * 检查 vendor 是否支持
111
+ * 注意:即使 vendor 不在预定义列表中,如果有自定义 baseUrl 也可以支持
112
+ */
113
+ function isVendorSupported(vendor) {
114
+ return vendor in exports.VENDOR_CONFIGS || vendor === 'custom';
115
+ }
116
+ /**
117
+ * 获取 vendor 配置
118
+ */
119
+ function getVendorConfig(vendor) {
120
+ return exports.VENDOR_CONFIGS[vendor];
121
+ }
122
+ /**
123
+ * 获取 vendor 配置,支持自定义 URL 覆盖
124
+ * 如果提供了 customBaseUrl,将使用自定义 URL 创建配置
125
+ */
126
+ function getVendorConfigWithCustomUrl(vendor, customBaseUrl, apiType) {
127
+ // 如果有自定义 URL,使用自定义配置
128
+ if (customBaseUrl) {
129
+ const baseConfig = exports.VENDOR_CONFIGS[vendor];
130
+ const effectiveApiType = apiType || baseConfig?.apiType || 'openai';
131
+ return createVendorConfigFromUrl(customBaseUrl, effectiveApiType);
132
+ }
133
+ // 否则使用默认配置
134
+ return exports.VENDOR_CONFIGS[vendor];
135
+ }
136
+ //# sourceMappingURL=vendor.config.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"vendor.config.js","sourceRoot":"","sources":["../../src/config/vendor.config.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,25 @@
1
+ /**
2
+ * 允许 API Key 访问的元数据键
3
+ */
4
+ export declare const ALLOW_API_KEY_KEY: "allowApiKey";
5
+ /**
6
+ * 允许 API Key 访问装饰器
7
+ * 标记可以使用 API Key 跳过部分验证的端点
8
+ *
9
+ * @example
10
+ * ```typescript
11
+ * @TsRestHandler(skillC.list)
12
+ * @AllowApiKey()
13
+ * @TenantScope()
14
+ * @RequirePermissions(PERMISSION.SKILL_READ)
15
+ * async listSkills(@Req() req: AuthenticatedRequest) {
16
+ * // ...
17
+ * }
18
+ * ```
19
+ *
20
+ * 配合 ApiKeyGuard 使用,需要设置以下环境变量:
21
+ * - INTERNAL_API_KEYS: API Key 列表,多个用逗号分隔(必填)
22
+ * - INTERNAL_API_REQUIRE_TENANT: (可选) 是否强制要求租户 Header,默认 false
23
+ */
24
+ export declare const AllowApiKey: () => import("@nestjs/common").CustomDecorator<"allowApiKey">;
25
+ //# sourceMappingURL=api-key.decorator.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"api-key.decorator.d.ts","sourceRoot":"","sources":["../../../src/decorators/api-key/api-key.decorator.ts"],"names":[],"mappings":"AAEA;;GAEG;AACH,eAAO,MAAM,iBAAiB,EAAG,aAAsB,CAAC;AAExD;;;;;;;;;;;;;;;;;;GAkBG;AACH,eAAO,MAAM,WAAW,+DAA6C,CAAC"}
@@ -0,0 +1,30 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.AllowApiKey = exports.ALLOW_API_KEY_KEY = void 0;
4
+ const common_1 = require("@nestjs/common");
5
+ /**
6
+ * 允许 API Key 访问的元数据键
7
+ */
8
+ exports.ALLOW_API_KEY_KEY = 'allowApiKey';
9
+ /**
10
+ * 允许 API Key 访问装饰器
11
+ * 标记可以使用 API Key 跳过部分验证的端点
12
+ *
13
+ * @example
14
+ * ```typescript
15
+ * @TsRestHandler(skillC.list)
16
+ * @AllowApiKey()
17
+ * @TenantScope()
18
+ * @RequirePermissions(PERMISSION.SKILL_READ)
19
+ * async listSkills(@Req() req: AuthenticatedRequest) {
20
+ * // ...
21
+ * }
22
+ * ```
23
+ *
24
+ * 配合 ApiKeyGuard 使用,需要设置以下环境变量:
25
+ * - INTERNAL_API_KEYS: API Key 列表,多个用逗号分隔(必填)
26
+ * - INTERNAL_API_REQUIRE_TENANT: (可选) 是否强制要求租户 Header,默认 false
27
+ */
28
+ const AllowApiKey = () => (0, common_1.SetMetadata)(exports.ALLOW_API_KEY_KEY, true);
29
+ exports.AllowApiKey = AllowApiKey;
30
+ //# sourceMappingURL=api-key.decorator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"api-key.decorator.js","sourceRoot":"","sources":["../../../src/decorators/api-key/api-key.decorator.ts"],"names":[],"mappings":";;;AAAA,2CAA6C;AAE7C;;GAEG;AACU,QAAA,iBAAiB,GAAG,aAAsB,CAAC;AAExD;;;;;;;;;;;;;;;;;;GAkBG;AACI,MAAM,WAAW,GAAG,GAAG,EAAE,CAAC,IAAA,oBAAW,EAAC,yBAAiB,EAAE,IAAI,CAAC,CAAC;AAAzD,QAAA,WAAW,eAA8C"}
@@ -0,0 +1,2 @@
1
+ export * from './api-key.decorator';
2
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/decorators/api-key/index.ts"],"names":[],"mappings":"AAAA,cAAc,qBAAqB,CAAC"}
@@ -0,0 +1,18 @@
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 __exportStar = (this && this.__exportStar) || function(m, exports) {
14
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
+ };
16
+ Object.defineProperty(exports, "__esModule", { value: true });
17
+ __exportStar(require("./api-key.decorator"), exports);
18
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/decorators/api-key/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,sDAAoC"}
@@ -0,0 +1,30 @@
1
+ /**
2
+ * App Version Controller
3
+ *
4
+ * 提供版本检查 API 端点。
5
+ *
6
+ * **重要**: 此控制器使用 VERSION_NEUTRAL,不需要版本 header。
7
+ * 前端应在启动时调用此 API 获取当前 API 版本,然后在后续请求中携带版本 header。
8
+ */
9
+ import { AppVersionService, AppVersionInfo, VersionCheckResult } from './app-version.service';
10
+ export declare class AppVersionController {
11
+ private readonly appVersionService;
12
+ constructor(appVersionService: AppVersionService);
13
+ /**
14
+ * 获取服务端版本信息
15
+ */
16
+ getVersion(): AppVersionInfo;
17
+ /**
18
+ * 检查客户端版本兼容性
19
+ */
20
+ checkVersion(clientVersion?: string, buildVersion?: string): VersionCheckResult;
21
+ /**
22
+ * 简单的版本哈希检查 (轻量级)
23
+ * 用于前端轮询检测
24
+ */
25
+ getBuildHash(): {
26
+ hash: string;
27
+ time: string;
28
+ };
29
+ }
30
+ //# sourceMappingURL=app-version.controller.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"app-version.controller.d.ts","sourceRoot":"","sources":["../../../src/decorators/app-version/app-version.controller.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAIH,OAAO,EACL,iBAAiB,EACjB,cAAc,EACd,kBAAkB,EACnB,MAAM,uBAAuB,CAAC;AAG/B,qBAEa,oBAAoB;IACnB,OAAO,CAAC,QAAQ,CAAC,iBAAiB;gBAAjB,iBAAiB,EAAE,iBAAiB;IAEjE;;OAEG;IAoBH,UAAU,IAAI,cAAc;IAI5B;;OAEG;IAiCH,YAAY,CACc,aAAa,CAAC,EAAE,MAAM,EACvB,YAAY,CAAC,EAAE,MAAM,GAC3C,kBAAkB;IAsBrB;;;OAGG;IAeH,YAAY,IAAI;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE;CAO/C"}
@@ -0,0 +1,159 @@
1
+ "use strict";
2
+ /**
3
+ * App Version Controller
4
+ *
5
+ * 提供版本检查 API 端点。
6
+ *
7
+ * **重要**: 此控制器使用 VERSION_NEUTRAL,不需要版本 header。
8
+ * 前端应在启动时调用此 API 获取当前 API 版本,然后在后续请求中携带版本 header。
9
+ */
10
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
11
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
12
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
13
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
14
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
15
+ };
16
+ var __metadata = (this && this.__metadata) || function (k, v) {
17
+ if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
18
+ };
19
+ var __param = (this && this.__param) || function (paramIndex, decorator) {
20
+ return function (target, key) { decorator(target, key, paramIndex); }
21
+ };
22
+ Object.defineProperty(exports, "__esModule", { value: true });
23
+ exports.AppVersionController = void 0;
24
+ const common_1 = require("@nestjs/common");
25
+ const swagger_1 = require("@nestjs/swagger");
26
+ const app_version_service_1 = require("./app-version.service");
27
+ const ts_rest_controller_decorator_1 = require("../ts-rest-controller.decorator");
28
+ let AppVersionController = class AppVersionController {
29
+ appVersionService;
30
+ constructor(appVersionService) {
31
+ this.appVersionService = appVersionService;
32
+ }
33
+ /**
34
+ * 获取服务端版本信息
35
+ */
36
+ getVersion() {
37
+ return this.appVersionService.getVersionInfo();
38
+ }
39
+ /**
40
+ * 检查客户端版本兼容性
41
+ */
42
+ checkVersion(clientVersion, buildVersion) {
43
+ const result = this.appVersionService.checkClientVersion(clientVersion || '');
44
+ // 如果版本匹配,额外检查构建版本
45
+ if (!result.needsRefresh && buildVersion) {
46
+ const buildMatch = this.appVersionService.checkBuildVersion(buildVersion);
47
+ if (!buildMatch) {
48
+ return {
49
+ ...result,
50
+ needsRefresh: true,
51
+ reason: 'outdated',
52
+ action: 'refresh',
53
+ message: '检测到代码更新,建议刷新页面',
54
+ };
55
+ }
56
+ }
57
+ return result;
58
+ }
59
+ /**
60
+ * 简单的版本哈希检查 (轻量级)
61
+ * 用于前端轮询检测
62
+ */
63
+ getBuildHash() {
64
+ const info = this.appVersionService.getVersionInfo();
65
+ return {
66
+ hash: info.buildVersion,
67
+ time: info.buildTime,
68
+ };
69
+ }
70
+ };
71
+ exports.AppVersionController = AppVersionController;
72
+ __decorate([
73
+ (0, common_1.Get)(),
74
+ (0, swagger_1.ApiOperation)({ summary: '获取服务端版本信息' }),
75
+ (0, swagger_1.ApiResponse)({
76
+ status: 200,
77
+ description: '版本信息',
78
+ schema: {
79
+ type: 'object',
80
+ properties: {
81
+ appVersion: { type: 'string', example: '1.0.0' },
82
+ apiVersion: { type: 'string', example: '1' },
83
+ buildVersion: { type: 'string', example: 'a1b2c3d4' },
84
+ buildTime: {
85
+ type: 'string',
86
+ example: '2025-01-15T10:00:00.000Z',
87
+ },
88
+ environment: { type: 'string', example: 'production' },
89
+ },
90
+ },
91
+ }),
92
+ __metadata("design:type", Function),
93
+ __metadata("design:paramtypes", []),
94
+ __metadata("design:returntype", Object)
95
+ ], AppVersionController.prototype, "getVersion", null);
96
+ __decorate([
97
+ (0, common_1.Get)('check'),
98
+ (0, swagger_1.ApiOperation)({ summary: '检查客户端版本兼容性' }),
99
+ (0, swagger_1.ApiQuery)({
100
+ name: 'clientVersion',
101
+ description: '客户端版本号',
102
+ required: false,
103
+ example: '1.0.0',
104
+ }),
105
+ (0, swagger_1.ApiQuery)({
106
+ name: 'buildVersion',
107
+ description: '客户端构建版本',
108
+ required: false,
109
+ example: 'a1b2c3d4',
110
+ }),
111
+ (0, swagger_1.ApiResponse)({
112
+ status: 200,
113
+ description: '版本检查结果',
114
+ schema: {
115
+ type: 'object',
116
+ properties: {
117
+ needsRefresh: { type: 'boolean', example: false },
118
+ reason: {
119
+ type: 'string',
120
+ enum: ['outdated', 'incompatible', 'major_update'],
121
+ },
122
+ serverVersion: { type: 'string', example: '1.0.0' },
123
+ clientVersion: { type: 'string', example: '1.0.0' },
124
+ action: { type: 'string', enum: ['refresh', 'update', 'none'] },
125
+ message: { type: 'string' },
126
+ },
127
+ },
128
+ }),
129
+ __param(0, (0, common_1.Query)('clientVersion')),
130
+ __param(1, (0, common_1.Query)('buildVersion')),
131
+ __metadata("design:type", Function),
132
+ __metadata("design:paramtypes", [String, String]),
133
+ __metadata("design:returntype", Object)
134
+ ], AppVersionController.prototype, "checkVersion", null);
135
+ __decorate([
136
+ (0, common_1.Get)('hash'),
137
+ (0, swagger_1.ApiOperation)({ summary: '获取构建哈希 (轻量级检查)' }),
138
+ (0, common_1.Header)('Cache-Control', 'no-cache, no-store, must-revalidate'),
139
+ (0, swagger_1.ApiResponse)({
140
+ status: 200,
141
+ description: '构建哈希',
142
+ schema: {
143
+ type: 'object',
144
+ properties: {
145
+ hash: { type: 'string', example: 'a1b2c3d4' },
146
+ time: { type: 'string', example: '2025-01-15T10:00:00.000Z' },
147
+ },
148
+ },
149
+ }),
150
+ __metadata("design:type", Function),
151
+ __metadata("design:paramtypes", []),
152
+ __metadata("design:returntype", Object)
153
+ ], AppVersionController.prototype, "getBuildHash", null);
154
+ exports.AppVersionController = AppVersionController = __decorate([
155
+ (0, swagger_1.ApiTags)('Version'),
156
+ (0, ts_rest_controller_decorator_1.TsRestController)('version'),
157
+ __metadata("design:paramtypes", [app_version_service_1.AppVersionService])
158
+ ], AppVersionController);
159
+ //# sourceMappingURL=app-version.controller.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"app-version.controller.js","sourceRoot":"","sources":["../../../src/decorators/app-version/app-version.controller.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,15 @@
1
+ /**
2
+ * App Version Interceptor
3
+ *
4
+ * 拦截器实现,在每个响应中添加版本信息头。
5
+ * 前端可以通过这些头检测版本变化。
6
+ */
7
+ import { NestInterceptor, ExecutionContext, CallHandler } from '@nestjs/common';
8
+ import { Observable } from 'rxjs';
9
+ import { AppVersionService } from './app-version.service';
10
+ export declare class AppVersionInterceptor implements NestInterceptor {
11
+ private readonly appVersionService;
12
+ constructor(appVersionService: AppVersionService);
13
+ intercept(context: ExecutionContext, next: CallHandler): Observable<any>;
14
+ }
15
+ //# sourceMappingURL=app-version.interceptor.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"app-version.interceptor.d.ts","sourceRoot":"","sources":["../../../src/decorators/app-version/app-version.interceptor.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAEL,eAAe,EACf,gBAAgB,EAChB,WAAW,EACZ,MAAM,gBAAgB,CAAC;AACxB,OAAO,EAAE,UAAU,EAAE,MAAM,MAAM,CAAC;AAElC,OAAO,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AAE1D,qBACa,qBAAsB,YAAW,eAAe;IAC/C,OAAO,CAAC,QAAQ,CAAC,iBAAiB;gBAAjB,iBAAiB,EAAE,iBAAiB;IAEjE,SAAS,CAAC,OAAO,EAAE,gBAAgB,EAAE,IAAI,EAAE,WAAW,GAAG,UAAU,CAAC,GAAG,CAAC;CAazE"}
@@ -0,0 +1,42 @@
1
+ "use strict";
2
+ /**
3
+ * App Version Interceptor
4
+ *
5
+ * 拦截器实现,在每个响应中添加版本信息头。
6
+ * 前端可以通过这些头检测版本变化。
7
+ */
8
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
9
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
10
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
11
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
12
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
13
+ };
14
+ var __metadata = (this && this.__metadata) || function (k, v) {
15
+ if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
16
+ };
17
+ Object.defineProperty(exports, "__esModule", { value: true });
18
+ exports.AppVersionInterceptor = void 0;
19
+ const common_1 = require("@nestjs/common");
20
+ const app_version_service_1 = require("./app-version.service");
21
+ let AppVersionInterceptor = class AppVersionInterceptor {
22
+ appVersionService;
23
+ constructor(appVersionService) {
24
+ this.appVersionService = appVersionService;
25
+ }
26
+ intercept(context, next) {
27
+ const response = context.switchToHttp().getResponse();
28
+ // 获取版本响应头
29
+ const versionHeaders = this.appVersionService.getVersionHeaders();
30
+ // 添加版本头到响应
31
+ for (const [key, value] of Object.entries(versionHeaders)) {
32
+ response.header(key, value);
33
+ }
34
+ return next.handle();
35
+ }
36
+ };
37
+ exports.AppVersionInterceptor = AppVersionInterceptor;
38
+ exports.AppVersionInterceptor = AppVersionInterceptor = __decorate([
39
+ (0, common_1.Injectable)(),
40
+ __metadata("design:paramtypes", [app_version_service_1.AppVersionService])
41
+ ], AppVersionInterceptor);
42
+ //# sourceMappingURL=app-version.interceptor.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"app-version.interceptor.js","sourceRoot":"","sources":["../../../src/decorators/app-version/app-version.interceptor.ts"],"names":[],"mappings":";AAAA;;;;;GAKG;;;;;;;;;;;;AAEH,2CAKwB;AAGxB,+DAA0D;AAGnD,IAAM,qBAAqB,GAA3B,MAAM,qBAAqB;IACH;IAA7B,YAA6B,iBAAoC;QAApC,sBAAiB,GAAjB,iBAAiB,CAAmB;IAAG,CAAC;IAErE,SAAS,CAAC,OAAyB,EAAE,IAAiB;QACpD,MAAM,QAAQ,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC,WAAW,EAAE,CAAC;QAEtD,UAAU;QACV,MAAM,cAAc,GAAG,IAAI,CAAC,iBAAiB,CAAC,iBAAiB,EAAE,CAAC;QAElE,WAAW;QACX,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,cAAc,CAAC,EAAE,CAAC;YAC1D,QAAQ,CAAC,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;QAC9B,CAAC;QAED,OAAO,IAAI,CAAC,MAAM,EAAE,CAAC;IACvB,CAAC;CACF,CAAA;AAhBY,sDAAqB;gCAArB,qBAAqB;IADjC,IAAA,mBAAU,GAAE;qCAEqC,uCAAiB;GADtD,qBAAqB,CAgBjC"}
@@ -0,0 +1,8 @@
1
+ /**
2
+ * App Version Module
3
+ *
4
+ * 提供应用版本管理和前后端版本一致性检查。
5
+ */
6
+ export declare class AppVersionModule {
7
+ }
8
+ //# sourceMappingURL=app-version.module.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"app-version.module.d.ts","sourceRoot":"","sources":["../../../src/decorators/app-version/app-version.module.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AASH,qBAaa,gBAAgB;CAAG"}
@@ -0,0 +1,39 @@
1
+ "use strict";
2
+ /**
3
+ * App Version Module
4
+ *
5
+ * 提供应用版本管理和前后端版本一致性检查。
6
+ */
7
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
8
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
9
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
10
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
11
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
12
+ };
13
+ Object.defineProperty(exports, "__esModule", { value: true });
14
+ exports.AppVersionModule = void 0;
15
+ const common_1 = require("@nestjs/common");
16
+ const core_1 = require("@nestjs/core");
17
+ const config_1 = require("@nestjs/config");
18
+ const app_version_service_1 = require("./app-version.service");
19
+ const app_version_controller_1 = require("./app-version.controller");
20
+ const app_version_interceptor_1 = require("./app-version.interceptor");
21
+ let AppVersionModule = class AppVersionModule {
22
+ };
23
+ exports.AppVersionModule = AppVersionModule;
24
+ exports.AppVersionModule = AppVersionModule = __decorate([
25
+ (0, common_1.Global)(),
26
+ (0, common_1.Module)({
27
+ imports: [config_1.ConfigModule],
28
+ controllers: [app_version_controller_1.AppVersionController],
29
+ providers: [
30
+ app_version_service_1.AppVersionService,
31
+ {
32
+ provide: core_1.APP_INTERCEPTOR,
33
+ useClass: app_version_interceptor_1.AppVersionInterceptor,
34
+ },
35
+ ],
36
+ exports: [app_version_service_1.AppVersionService],
37
+ })
38
+ ], AppVersionModule);
39
+ //# sourceMappingURL=app-version.module.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"app-version.module.js","sourceRoot":"","sources":["../../../src/decorators/app-version/app-version.module.ts"],"names":[],"mappings":";AAAA;;;;GAIG;;;;;;;;;AAEH,2CAAgD;AAChD,uCAA+C;AAC/C,2CAA8C;AAC9C,+DAA0D;AAC1D,qEAAgE;AAChE,uEAAkE;AAe3D,IAAM,gBAAgB,GAAtB,MAAM,gBAAgB;CAAG,CAAA;AAAnB,4CAAgB;2BAAhB,gBAAgB;IAb5B,IAAA,eAAM,GAAE;IACR,IAAA,eAAM,EAAC;QACN,OAAO,EAAE,CAAC,qBAAY,CAAC;QACvB,WAAW,EAAE,CAAC,6CAAoB,CAAC;QACnC,SAAS,EAAE;YACT,uCAAiB;YACjB;gBACE,OAAO,EAAE,sBAAe;gBACxB,QAAQ,EAAE,+CAAqB;aAChC;SACF;QACD,OAAO,EAAE,CAAC,uCAAiB,CAAC;KAC7B,CAAC;GACW,gBAAgB,CAAG"}
@@ -0,0 +1,88 @@
1
+ /**
2
+ * App Version Service
3
+ *
4
+ * 提供应用版本管理服务,用于前后端版本一致性检查。
5
+ *
6
+ * 版本策略:
7
+ * - API 版本: 后端 API 接口版本
8
+ * - App 版本: 应用整体版本 (前后端协调)
9
+ * - Build 版本: 构建时间戳/Git commit hash
10
+ *
11
+ * 前端检测机制:
12
+ * 1. 响应头检查: x-app-version, x-build-version
13
+ * 2. 专用接口: GET /api/version
14
+ * 3. 版本不一致时提示用户刷新
15
+ */
16
+ import { OnModuleInit } from '@nestjs/common';
17
+ import { ConfigService } from '@nestjs/config';
18
+ import { Logger } from 'winston';
19
+ export interface AppVersionInfo {
20
+ /** 应用版本 (package.json version) */
21
+ appVersion: string;
22
+ /** API 版本 */
23
+ apiVersion: string;
24
+ /** 构建版本 (时间戳或 Git hash) */
25
+ buildVersion: string;
26
+ /** 构建时间 */
27
+ buildTime: string;
28
+ /** 环境 */
29
+ environment: string;
30
+ /** 最低兼容前端版本 */
31
+ minClientVersion?: string;
32
+ }
33
+ export interface VersionCheckResult {
34
+ /** 是否需要刷新 */
35
+ needsRefresh: boolean;
36
+ /** 原因 */
37
+ reason?: 'outdated' | 'incompatible' | 'major_update';
38
+ /** 当前服务端版本 */
39
+ serverVersion: string;
40
+ /** 客户端版本 */
41
+ clientVersion: string;
42
+ /** 建议操作 */
43
+ action?: 'refresh' | 'update' | 'none';
44
+ /** 消息 */
45
+ message?: string;
46
+ }
47
+ export declare class AppVersionService implements OnModuleInit {
48
+ private readonly configService;
49
+ private readonly logger;
50
+ private versionInfo;
51
+ private buildHash;
52
+ constructor(configService: ConfigService, logger: Logger);
53
+ onModuleInit(): Promise<void>;
54
+ /**
55
+ * 加载版本信息
56
+ */
57
+ private loadVersionInfo;
58
+ /**
59
+ * 生成构建哈希
60
+ */
61
+ private generateBuildHash;
62
+ /**
63
+ * 获取版本信息
64
+ */
65
+ getVersionInfo(): AppVersionInfo;
66
+ /**
67
+ * 获取版本响应头
68
+ */
69
+ getVersionHeaders(): Record<string, string>;
70
+ /**
71
+ * 检查客户端版本兼容性
72
+ */
73
+ checkClientVersion(clientVersion: string): VersionCheckResult;
74
+ /**
75
+ * 检查构建版本是否匹配
76
+ */
77
+ checkBuildVersion(clientBuildVersion: string): boolean;
78
+ /**
79
+ * 比较版本号
80
+ * @returns -1 if v1 < v2, 0 if v1 == v2, 1 if v1 > v2
81
+ */
82
+ private compareVersions;
83
+ /**
84
+ * 检查是否为主版本更新
85
+ */
86
+ private isMajorVersionDiff;
87
+ }
88
+ //# sourceMappingURL=app-version.service.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"app-version.service.d.ts","sourceRoot":"","sources":["../../../src/decorators/app-version/app-version.service.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,OAAO,EAAc,YAAY,EAAU,MAAM,gBAAgB,CAAC;AAClE,OAAO,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAE/C,OAAO,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AAUjC,MAAM,WAAW,cAAc;IAC7B,kCAAkC;IAClC,UAAU,EAAE,MAAM,CAAC;IACnB,aAAa;IACb,UAAU,EAAE,MAAM,CAAC;IACnB,2BAA2B;IAC3B,YAAY,EAAE,MAAM,CAAC;IACrB,WAAW;IACX,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS;IACT,WAAW,EAAE,MAAM,CAAC;IACpB,eAAe;IACf,gBAAgB,CAAC,EAAE,MAAM,CAAC;CAC3B;AAED,MAAM,WAAW,kBAAkB;IACjC,aAAa;IACb,YAAY,EAAE,OAAO,CAAC;IACtB,SAAS;IACT,MAAM,CAAC,EAAE,UAAU,GAAG,cAAc,GAAG,cAAc,CAAC;IACtD,cAAc;IACd,aAAa,EAAE,MAAM,CAAC;IACtB,YAAY;IACZ,aAAa,EAAE,MAAM,CAAC;IACtB,WAAW;IACX,MAAM,CAAC,EAAE,SAAS,GAAG,QAAQ,GAAG,MAAM,CAAC;IACvC,SAAS;IACT,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAMD,qBACa,iBAAkB,YAAW,YAAY;IAKlD,OAAO,CAAC,QAAQ,CAAC,aAAa;IACG,OAAO,CAAC,QAAQ,CAAC,MAAM;IAL1D,OAAO,CAAC,WAAW,CAAiB;IACpC,OAAO,CAAC,SAAS,CAAc;gBAGZ,aAAa,EAAE,aAAa,EACK,MAAM,EAAE,MAAM;IAG5D,YAAY;IAIlB;;OAEG;YACW,eAAe;IA2C7B;;OAEG;IACH,OAAO,CAAC,iBAAiB;IAWzB;;OAEG;IACH,cAAc,IAAI,cAAc;IAIhC;;OAEG;IACH,iBAAiB,IAAI,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC;IAS3C;;OAEG;IACH,kBAAkB,CAAC,aAAa,EAAE,MAAM,GAAG,kBAAkB;IA0D7D;;OAEG;IACH,iBAAiB,CAAC,kBAAkB,EAAE,MAAM,GAAG,OAAO;IAItD;;;OAGG;IACH,OAAO,CAAC,eAAe;IAevB;;OAEG;IACH,OAAO,CAAC,kBAAkB;CAK3B"}