@chrishdx/llm-dev-server 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 (184) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +164 -0
  3. package/backend/bin/llm-dev-server.js +3 -0
  4. package/backend/dist/cli.d.ts +15 -0
  5. package/backend/dist/cli.d.ts.map +1 -0
  6. package/backend/dist/cli.js +326 -0
  7. package/backend/dist/cli.js.map +1 -0
  8. package/backend/dist/config/database.d.ts +10 -0
  9. package/backend/dist/config/database.d.ts.map +1 -0
  10. package/backend/dist/config/database.js +61 -0
  11. package/backend/dist/config/database.js.map +1 -0
  12. package/backend/dist/config/environment.d.ts +20 -0
  13. package/backend/dist/config/environment.d.ts.map +1 -0
  14. package/backend/dist/config/environment.js +77 -0
  15. package/backend/dist/config/environment.js.map +1 -0
  16. package/backend/dist/controllers/AuthController.d.ts +18 -0
  17. package/backend/dist/controllers/AuthController.d.ts.map +1 -0
  18. package/backend/dist/controllers/AuthController.js +282 -0
  19. package/backend/dist/controllers/AuthController.js.map +1 -0
  20. package/backend/dist/controllers/ConversationController.d.ts +44 -0
  21. package/backend/dist/controllers/ConversationController.d.ts.map +1 -0
  22. package/backend/dist/controllers/ConversationController.js +193 -0
  23. package/backend/dist/controllers/ConversationController.js.map +1 -0
  24. package/backend/dist/controllers/JobController.d.ts +49 -0
  25. package/backend/dist/controllers/JobController.d.ts.map +1 -0
  26. package/backend/dist/controllers/JobController.js +227 -0
  27. package/backend/dist/controllers/JobController.js.map +1 -0
  28. package/backend/dist/index.d.ts +2 -0
  29. package/backend/dist/index.d.ts.map +1 -0
  30. package/backend/dist/index.js +160 -0
  31. package/backend/dist/index.js.map +1 -0
  32. package/backend/dist/middleware/auth.middleware.d.ts +25 -0
  33. package/backend/dist/middleware/auth.middleware.d.ts.map +1 -0
  34. package/backend/dist/middleware/auth.middleware.js +116 -0
  35. package/backend/dist/middleware/auth.middleware.js.map +1 -0
  36. package/backend/dist/middleware/authelia.middleware.d.ts +26 -0
  37. package/backend/dist/middleware/authelia.middleware.d.ts.map +1 -0
  38. package/backend/dist/middleware/authelia.middleware.js +165 -0
  39. package/backend/dist/middleware/authelia.middleware.js.map +1 -0
  40. package/backend/dist/middleware/error.middleware.d.ts +23 -0
  41. package/backend/dist/middleware/error.middleware.d.ts.map +1 -0
  42. package/backend/dist/middleware/error.middleware.js +59 -0
  43. package/backend/dist/middleware/error.middleware.js.map +1 -0
  44. package/backend/dist/models/AuthToken.d.ts +42 -0
  45. package/backend/dist/models/AuthToken.d.ts.map +1 -0
  46. package/backend/dist/models/AuthToken.js +97 -0
  47. package/backend/dist/models/AuthToken.js.map +1 -0
  48. package/backend/dist/models/Conversation.d.ts +36 -0
  49. package/backend/dist/models/Conversation.d.ts.map +1 -0
  50. package/backend/dist/models/Conversation.js +100 -0
  51. package/backend/dist/models/Conversation.js.map +1 -0
  52. package/backend/dist/models/FileOperation.d.ts +36 -0
  53. package/backend/dist/models/FileOperation.d.ts.map +1 -0
  54. package/backend/dist/models/FileOperation.js +117 -0
  55. package/backend/dist/models/FileOperation.js.map +1 -0
  56. package/backend/dist/models/Job.d.ts +48 -0
  57. package/backend/dist/models/Job.d.ts.map +1 -0
  58. package/backend/dist/models/Job.js +87 -0
  59. package/backend/dist/models/Job.js.map +1 -0
  60. package/backend/dist/models/Message.d.ts +38 -0
  61. package/backend/dist/models/Message.d.ts.map +1 -0
  62. package/backend/dist/models/Message.js +87 -0
  63. package/backend/dist/models/Message.js.map +1 -0
  64. package/backend/dist/models/User.d.ts +26 -0
  65. package/backend/dist/models/User.d.ts.map +1 -0
  66. package/backend/dist/models/User.js +67 -0
  67. package/backend/dist/models/User.js.map +1 -0
  68. package/backend/dist/models/index.d.ts +13 -0
  69. package/backend/dist/models/index.d.ts.map +1 -0
  70. package/backend/dist/models/index.js +24 -0
  71. package/backend/dist/models/index.js.map +1 -0
  72. package/backend/dist/routes/auth.routes.d.ts +3 -0
  73. package/backend/dist/routes/auth.routes.d.ts.map +1 -0
  74. package/backend/dist/routes/auth.routes.js +27 -0
  75. package/backend/dist/routes/auth.routes.js.map +1 -0
  76. package/backend/dist/routes/conversation.routes.d.ts +3 -0
  77. package/backend/dist/routes/conversation.routes.d.ts.map +1 -0
  78. package/backend/dist/routes/conversation.routes.js +17 -0
  79. package/backend/dist/routes/conversation.routes.js.map +1 -0
  80. package/backend/dist/routes/filesystem.routes.d.ts +3 -0
  81. package/backend/dist/routes/filesystem.routes.d.ts.map +1 -0
  82. package/backend/dist/routes/filesystem.routes.js +64 -0
  83. package/backend/dist/routes/filesystem.routes.js.map +1 -0
  84. package/backend/dist/routes/index.d.ts +3 -0
  85. package/backend/dist/routes/index.d.ts.map +1 -0
  86. package/backend/dist/routes/index.js +27 -0
  87. package/backend/dist/routes/index.js.map +1 -0
  88. package/backend/dist/routes/job.routes.d.ts +3 -0
  89. package/backend/dist/routes/job.routes.d.ts.map +1 -0
  90. package/backend/dist/routes/job.routes.js +18 -0
  91. package/backend/dist/routes/job.routes.js.map +1 -0
  92. package/backend/dist/services/auth/BaseAuthService.d.ts +49 -0
  93. package/backend/dist/services/auth/BaseAuthService.d.ts.map +1 -0
  94. package/backend/dist/services/auth/BaseAuthService.js +97 -0
  95. package/backend/dist/services/auth/BaseAuthService.js.map +1 -0
  96. package/backend/dist/services/auth/ClaudeAuthService.d.ts +69 -0
  97. package/backend/dist/services/auth/ClaudeAuthService.d.ts.map +1 -0
  98. package/backend/dist/services/auth/ClaudeAuthService.js +401 -0
  99. package/backend/dist/services/auth/ClaudeAuthService.js.map +1 -0
  100. package/backend/dist/services/auth/CodexAuthService.d.ts +37 -0
  101. package/backend/dist/services/auth/CodexAuthService.d.ts.map +1 -0
  102. package/backend/dist/services/auth/CodexAuthService.js +186 -0
  103. package/backend/dist/services/auth/CodexAuthService.js.map +1 -0
  104. package/backend/dist/services/auth/GeminiAuthService.d.ts +50 -0
  105. package/backend/dist/services/auth/GeminiAuthService.d.ts.map +1 -0
  106. package/backend/dist/services/auth/GeminiAuthService.js +284 -0
  107. package/backend/dist/services/auth/GeminiAuthService.js.map +1 -0
  108. package/backend/dist/services/auth/JwtService.d.ts +27 -0
  109. package/backend/dist/services/auth/JwtService.d.ts.map +1 -0
  110. package/backend/dist/services/auth/JwtService.js +65 -0
  111. package/backend/dist/services/auth/JwtService.js.map +1 -0
  112. package/backend/dist/services/auth/TokenRefreshService.d.ts +36 -0
  113. package/backend/dist/services/auth/TokenRefreshService.d.ts.map +1 -0
  114. package/backend/dist/services/auth/TokenRefreshService.js +178 -0
  115. package/backend/dist/services/auth/TokenRefreshService.js.map +1 -0
  116. package/backend/dist/services/conversation/ConversationService.d.ts +89 -0
  117. package/backend/dist/services/conversation/ConversationService.d.ts.map +1 -0
  118. package/backend/dist/services/conversation/ConversationService.js +255 -0
  119. package/backend/dist/services/conversation/ConversationService.js.map +1 -0
  120. package/backend/dist/services/job/JobService.d.ts +83 -0
  121. package/backend/dist/services/job/JobService.d.ts.map +1 -0
  122. package/backend/dist/services/job/JobService.js +213 -0
  123. package/backend/dist/services/job/JobService.js.map +1 -0
  124. package/backend/dist/services/job/WorkingDirectoryService.d.ts +73 -0
  125. package/backend/dist/services/job/WorkingDirectoryService.d.ts.map +1 -0
  126. package/backend/dist/services/job/WorkingDirectoryService.js +289 -0
  127. package/backend/dist/services/job/WorkingDirectoryService.js.map +1 -0
  128. package/backend/dist/services/llm/ClaudeProvider.d.ts +16 -0
  129. package/backend/dist/services/llm/ClaudeProvider.d.ts.map +1 -0
  130. package/backend/dist/services/llm/ClaudeProvider.js +229 -0
  131. package/backend/dist/services/llm/ClaudeProvider.js.map +1 -0
  132. package/backend/dist/services/llm/CodexProvider.d.ts +15 -0
  133. package/backend/dist/services/llm/CodexProvider.d.ts.map +1 -0
  134. package/backend/dist/services/llm/CodexProvider.js +301 -0
  135. package/backend/dist/services/llm/CodexProvider.js.map +1 -0
  136. package/backend/dist/services/llm/GeminiProvider.d.ts +17 -0
  137. package/backend/dist/services/llm/GeminiProvider.d.ts.map +1 -0
  138. package/backend/dist/services/llm/GeminiProvider.js +190 -0
  139. package/backend/dist/services/llm/GeminiProvider.js.map +1 -0
  140. package/backend/dist/services/llm/LLMProviderBase.d.ts +76 -0
  141. package/backend/dist/services/llm/LLMProviderBase.d.ts.map +1 -0
  142. package/backend/dist/services/llm/LLMProviderBase.js +34 -0
  143. package/backend/dist/services/llm/LLMProviderBase.js.map +1 -0
  144. package/backend/dist/services/llm/ProviderFactory.d.ts +17 -0
  145. package/backend/dist/services/llm/ProviderFactory.d.ts.map +1 -0
  146. package/backend/dist/services/llm/ProviderFactory.js +58 -0
  147. package/backend/dist/services/llm/ProviderFactory.js.map +1 -0
  148. package/backend/dist/utils/crypto.d.ts +33 -0
  149. package/backend/dist/utils/crypto.d.ts.map +1 -0
  150. package/backend/dist/utils/crypto.js +165 -0
  151. package/backend/dist/utils/crypto.js.map +1 -0
  152. package/backend/dist/utils/logger.d.ts +4 -0
  153. package/backend/dist/utils/logger.d.ts.map +1 -0
  154. package/backend/dist/utils/logger.js +44 -0
  155. package/backend/dist/utils/logger.js.map +1 -0
  156. package/backend/dist/utils/validators.d.ts +22 -0
  157. package/backend/dist/utils/validators.d.ts.map +1 -0
  158. package/backend/dist/utils/validators.js +127 -0
  159. package/backend/dist/utils/validators.js.map +1 -0
  160. package/backend/package.json +45 -0
  161. package/backend/public/assets/index-C207-KqP.js +188 -0
  162. package/backend/public/index.html +12 -0
  163. package/package.json +96 -0
  164. package/shared/dist/index.d.ts +5 -0
  165. package/shared/dist/index.d.ts.map +1 -0
  166. package/shared/dist/index.js +25 -0
  167. package/shared/dist/index.js.map +1 -0
  168. package/shared/dist/types/api.d.ts +27 -0
  169. package/shared/dist/types/api.d.ts.map +1 -0
  170. package/shared/dist/types/api.js +3 -0
  171. package/shared/dist/types/api.js.map +1 -0
  172. package/shared/dist/types/auth.d.ts +62 -0
  173. package/shared/dist/types/auth.d.ts.map +1 -0
  174. package/shared/dist/types/auth.js +3 -0
  175. package/shared/dist/types/auth.js.map +1 -0
  176. package/shared/dist/types/conversation.d.ts +98 -0
  177. package/shared/dist/types/conversation.d.ts.map +1 -0
  178. package/shared/dist/types/conversation.js +3 -0
  179. package/shared/dist/types/conversation.js.map +1 -0
  180. package/shared/dist/types/job.d.ts +93 -0
  181. package/shared/dist/types/job.d.ts.map +1 -0
  182. package/shared/dist/types/job.js +3 -0
  183. package/shared/dist/types/job.js.map +1 -0
  184. package/shared/package.json +15 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ConversationController.js","sourceRoot":"","sources":["../../src/controllers/ConversationController.ts"],"names":[],"mappings":";;;;;;AACA,sFAIsD;AAEtD,6DAAqC;AAErC,MAAa,sBAAsB;IACjC;;;OAGG;IACH,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,GAAY,EAAE,GAAa;QAC7C,IAAI,CAAC;YACH,MAAM,EAAE,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAE,KAAK,EAAE,YAAY,EAAE,GAAG,GAAG,CAAC,IAM3D,CAAC;YAEF,IAAI,CAAC,KAAK,IAAI,CAAC,QAAQ,EAAE,CAAC;gBACxB,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,iCAAiC,EAAE,CAAC,CAAC;gBACnE,OAAO;YACT,CAAC;YAED,MAAM,EAAE,YAAY,EAAE,QAAQ,EAAE,WAAW,EAAE,GAC3C,MAAM,yCAAmB,CAAC,kBAAkB,CAAC;gBAC3C,KAAK;gBACL,QAAQ;gBACR,KAAK;gBACL,KAAK;gBACL,YAAY;aACb,CAAC,CAAC;YAEL,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC;gBACnB,YAAY;gBACZ,YAAY,EAAE;oBACZ,IAAI,EAAE,WAAW,CAAC,WAAW,CAAC,IAAI;oBAClC,KAAK,EAAG,WAAmB,CAAC,KAAK;iBAClC;aACF,CAAC,CAAC;QACL,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,OAAO,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;YACvE,gBAAM,CAAC,KAAK,CAAC,8BAA8B,EAAE,OAAO,CAAC,CAAC;YACtD,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC,CAAC;QAC3C,CAAC;IACH,CAAC;IAED;;;OAGG;IACH,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,GAAY,EAAE,GAAa;QAC1C,IAAI,CAAC;YACH,MAAM,EAAE,cAAc,EAAE,GAAG,GAAG,CAAC,MAAM,CAAC;YACtC,MAAM,YAAY,GAAG,MAAM,yCAAmB,CAAC,eAAe,CAC5D,cAAc,CACf,CAAC;YAEF,IAAI,CAAC,YAAY,EAAE,CAAC;gBAClB,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,wBAAwB,EAAE,CAAC,CAAC;gBAC1D,OAAO;YACT,CAAC;YAED,GAAG,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;QACzB,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,OAAO,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;YACvE,gBAAM,CAAC,KAAK,CAAC,6BAA6B,EAAE,OAAO,CAAC,CAAC;YACrD,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC,CAAC;QAC3C,CAAC;IACH,CAAC;IAED;;;OAGG;IACH,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,GAAY,EAAE,GAAa;QAC7C,IAAI,CAAC;YACH,MAAM,EAAE,cAAc,EAAE,GAAG,GAAG,CAAC,MAAM,CAAC;YACtC,MAAM,MAAM,GAAG,GAAG,CAAC,IAAgC,CAAC;YAEpD,MAAM,YAAY,GAAG,MAAM,yCAAmB,CAAC,kBAAkB,CAC/D,cAAc,EACd,MAAM,CACP,CAAC;YACF,GAAG,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;QACzB,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,OAAO,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;YACvE,gBAAM,CAAC,KAAK,CAAC,8BAA8B,EAAE,OAAO,CAAC,CAAC;YACtD,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC,CAAC;QAC3C,CAAC;IACH,CAAC;IAED;;;OAGG;IACH,MAAM,CAAC,KAAK,CAAC,YAAY,CAAC,GAAY,EAAE,GAAa;QACnD,IAAI,CAAC;YACH,MAAM,SAAS,GAAG,MAAM,yCAAmB,CAAC,qBAAqB,EAAE,CAAC;YACpE,GAAG,CAAC,IAAI,CAAC,EAAE,SAAS,EAAE,CAAC,CAAC;QAC1B,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,OAAO,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;YACvE,gBAAM,CAAC,KAAK,CAAC,0BAA0B,EAAE,OAAO,CAAC,CAAC;YAClD,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC,CAAC;QAC3C,CAAC;IACH,CAAC;IAED;;;OAGG;IACH,MAAM,CAAC,KAAK,CAAC,WAAW,CAAC,GAAY,EAAE,GAAa;QAClD,IAAI,CAAC;YACH,MAAM,EAAE,cAAc,EAAE,GAAG,GAAG,CAAC,MAAM,CAAC;YACtC,MAAM,KAAK,GAAG,GAAG,CAAC,KAAK,CAAC,KAAK;gBAC3B,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,KAAe,EAAE,EAAE,CAAC;gBACzC,CAAC,CAAC,SAAS,CAAC;YACd,MAAM,MAAM,GAAG,GAAG,CAAC,KAAK,CAAC,MAAM;gBAC7B,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,MAAgB,EAAE,EAAE,CAAC;gBAC1C,CAAC,CAAC,SAAS,CAAC;YAEd,MAAM,MAAM,GAAG,MAAM,yCAAmB,CAAC,WAAW,CAAC,cAAc,EAAE;gBACnE,KAAK;gBACL,MAAM;aACP,CAAC,CAAC;YAEH,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QACnB,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,OAAO,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;YACvE,gBAAM,CAAC,KAAK,CAAC,yBAAyB,EAAE,OAAO,CAAC,CAAC;YACjD,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC,CAAC;QAC3C,CAAC;IACH,CAAC;IAED;;;OAGG;IACH,MAAM,CAAC,KAAK,CAAC,WAAW,CAAC,GAAY,EAAE,GAAa;QAClD,IAAI,CAAC;YACH,MAAM,EAAE,cAAc,EAAE,GAAG,GAAG,CAAC,MAAM,CAAC;YACtC,MAAM,EAAE,OAAO,EAAE,WAAW,EAAE,GAAG,GAAG,CAAC,IAGpC,CAAC;YAEF,IAAI,CAAC,OAAO,EAAE,CAAC;gBACb,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,qBAAqB,EAAE,CAAC,CAAC;gBACvD,OAAO;YACT,CAAC;YAED,MAAM,MAAM,GAAG,MAAM,yCAAmB,CAAC,WAAW,CAAC;gBACnD,cAAc;gBACd,OAAO;gBACP,WAAW;aACZ,CAAC,CAAC;YAEH,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QACnB,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,OAAO,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;YACvE,gBAAM,CAAC,KAAK,CAAC,wBAAwB,EAAE,OAAO,CAAC,CAAC;YAChD,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC,CAAC;QAC3C,CAAC;IACH,CAAC;IAED;;;OAGG;IACH,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,GAAY,EAAE,GAAa;QAC7C,IAAI,CAAC;YACH,MAAM,EAAE,cAAc,EAAE,GAAG,GAAG,CAAC,MAAM,CAAC;YAEtC,aAAa;YACb,GAAG,CAAC,SAAS,CAAC,cAAc,EAAE,mBAAmB,CAAC,CAAC;YACnD,GAAG,CAAC,SAAS,CAAC,eAAe,EAAE,UAAU,CAAC,CAAC;YAC3C,GAAG,CAAC,SAAS,CAAC,YAAY,EAAE,YAAY,CAAC,CAAC;YAE1C,4BAA4B;YAC5B,MAAM,MAAM,GAAG,MAAM,yCAAmB,CAAC,WAAW,CAAC;gBACnD,cAAc;gBACd,OAAO,EAAE,GAAG,CAAC,IAAI,CAAC,OAAiB;gBACnC,WAAW,EAAE,GAAG,CAAC,IAAI,CAAC,WAAmC;gBACzD,OAAO,EAAE,CAAC,KAAa,EAAE,EAAE;oBACzB,GAAG,CAAC,KAAK,CACP,SAAS,IAAI,CAAC,SAAS,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC,MAAM,CACjE,CAAC;gBACJ,CAAC;aACF,CAAC,CAAC;YAEH,qBAAqB;YACrB,GAAG,CAAC,KAAK,CAAC,SAAS,IAAI,CAAC,SAAS,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC,MAAM,CAAC,CAAC;YACnE,GAAG,CAAC,GAAG,EAAE,CAAC;QACZ,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,OAAO,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;YACvE,gBAAM,CAAC,KAAK,CAAC,+BAA+B,EAAE,OAAO,CAAC,CAAC;YACvD,GAAG,CAAC,KAAK,CACP,SAAS,IAAI,CAAC,SAAS,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC,MAAM,CACjE,CAAC;YACF,GAAG,CAAC,GAAG,EAAE,CAAC;QACZ,CAAC;IACH,CAAC;IAED;;;OAGG;IACH,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,GAAY,EAAE,GAAa;QAC7C,IAAI,CAAC;YACH,MAAM,EAAE,cAAc,EAAE,GAAG,GAAG,CAAC,MAAM,CAAC;YAEtC,MAAM,yCAAmB,CAAC,kBAAkB,CAAC,cAAc,CAAC,CAAC;YAE7D,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC;QACzB,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,OAAO,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;YACvE,gBAAM,CAAC,KAAK,CAAC,8BAA8B,EAAE,OAAO,CAAC,CAAC;YACtD,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC,CAAC;QAC3C,CAAC;IACH,CAAC;CACF;AAxND,wDAwNC"}
@@ -0,0 +1,49 @@
1
+ import { Request, Response } from "express";
2
+ export declare class JobController {
3
+ /**
4
+ * Create a new job
5
+ * POST /api/jobs
6
+ */
7
+ static create(req: Request, res: Response): Promise<void>;
8
+ /**
9
+ * List jobs
10
+ * GET /api/jobs
11
+ */
12
+ static list(req: Request, res: Response): Promise<void>;
13
+ /**
14
+ * Get a job by ID
15
+ * GET /api/jobs/:jobId
16
+ */
17
+ static get(req: Request, res: Response): Promise<void>;
18
+ /**
19
+ * Get conversations for a job
20
+ * GET /api/jobs/:jobId/conversations
21
+ */
22
+ static getConversations(req: Request, res: Response): Promise<void>;
23
+ /**
24
+ * Update a job
25
+ * PATCH /api/jobs/:jobId
26
+ */
27
+ static update(req: Request, res: Response): Promise<void>;
28
+ /**
29
+ * Delete a job
30
+ * DELETE /api/jobs/:jobId
31
+ */
32
+ static delete(req: Request, res: Response): Promise<void>;
33
+ /**
34
+ * Get job status and statistics
35
+ * GET /api/jobs/:jobId/status
36
+ */
37
+ static getStatus(req: Request, res: Response): Promise<void>;
38
+ /**
39
+ * Cancel a job
40
+ * POST /api/jobs/:jobId/cancel
41
+ */
42
+ static cancel(req: Request, res: Response): Promise<void>;
43
+ /**
44
+ * List files in job working directory
45
+ * GET /api/jobs/:jobId/files
46
+ */
47
+ static listFiles(req: Request, res: Response): Promise<void>;
48
+ }
49
+ //# sourceMappingURL=JobController.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"JobController.d.ts","sourceRoot":"","sources":["../../src/controllers/JobController.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AAU5C,qBAAa,aAAa;IACxB;;;OAGG;WACU,MAAM,CAAC,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC;IAoB/D;;;OAGG;WACU,IAAI,CAAC,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC;IA0B7D;;;OAGG;WACU,GAAG,CAAC,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC;IA2B5D;;;OAGG;WACU,gBAAgB,CAAC,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC;IAsCzE;;;OAGG;WACU,MAAM,CAAC,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC;IAc/D;;;OAGG;WACU,MAAM,CAAC,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC;IAa/D;;;OAGG;WACU,SAAS,CAAC,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC;IAuBlE;;;OAGG;WACU,MAAM,CAAC,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC;IAa/D;;;OAGG;WACU,SAAS,CAAC,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC;CAoBnE"}
@@ -0,0 +1,227 @@
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
+ exports.JobController = void 0;
7
+ const JobService_1 = require("../services/job/JobService");
8
+ const ConversationService_1 = require("../services/conversation/ConversationService");
9
+ const WorkingDirectoryService_1 = require("../services/job/WorkingDirectoryService");
10
+ const logger_1 = __importDefault(require("../utils/logger"));
11
+ class JobController {
12
+ /**
13
+ * Create a new job
14
+ * POST /api/jobs
15
+ */
16
+ static async create(req, res) {
17
+ try {
18
+ const params = req.body;
19
+ if (!params.name || !params.workingDirectory) {
20
+ res.status(400).json({
21
+ error: "name and workingDirectory are required",
22
+ });
23
+ return;
24
+ }
25
+ const job = await JobService_1.JobService.createJob(params);
26
+ res.status(201).json(job);
27
+ }
28
+ catch (error) {
29
+ const message = error instanceof Error ? error.message : String(error);
30
+ logger_1.default.error("Error creating job:", message);
31
+ res.status(500).json({ error: message });
32
+ }
33
+ }
34
+ /**
35
+ * List jobs
36
+ * GET /api/jobs
37
+ */
38
+ static async list(req, res) {
39
+ try {
40
+ const status = req.query.status;
41
+ const provider = req.query.provider;
42
+ const limit = req.query.limit
43
+ ? parseInt(req.query.limit, 10)
44
+ : undefined;
45
+ const offset = req.query.offset
46
+ ? parseInt(req.query.offset, 10)
47
+ : undefined;
48
+ const result = await JobService_1.JobService.listJobs({
49
+ status,
50
+ provider,
51
+ limit,
52
+ offset,
53
+ });
54
+ res.json(result);
55
+ }
56
+ catch (error) {
57
+ const message = error instanceof Error ? error.message : String(error);
58
+ logger_1.default.error("Error listing jobs:", message);
59
+ res.status(500).json({ error: message });
60
+ }
61
+ }
62
+ /**
63
+ * Get a job by ID
64
+ * GET /api/jobs/:jobId
65
+ */
66
+ static async get(req, res) {
67
+ try {
68
+ const { jobId } = req.params;
69
+ const includeConversations = req.query.includeConversations === "true";
70
+ if (includeConversations) {
71
+ const result = await JobService_1.JobService.getJobWithConversations(jobId);
72
+ if (!result) {
73
+ res.status(404).json({ error: "Job not found" });
74
+ return;
75
+ }
76
+ res.json(result);
77
+ }
78
+ else {
79
+ const job = await JobService_1.JobService.getJob(jobId);
80
+ if (!job) {
81
+ res.status(404).json({ error: "Job not found" });
82
+ return;
83
+ }
84
+ res.json(job);
85
+ }
86
+ }
87
+ catch (error) {
88
+ const message = error instanceof Error ? error.message : String(error);
89
+ logger_1.default.error("Error getting job:", message);
90
+ res.status(500).json({ error: message });
91
+ }
92
+ }
93
+ /**
94
+ * Get conversations for a job
95
+ * GET /api/jobs/:jobId/conversations
96
+ */
97
+ static async getConversations(req, res) {
98
+ try {
99
+ const { jobId } = req.params;
100
+ const provider = req.query.provider;
101
+ const isActive = req.query.isActive === "true"
102
+ ? true
103
+ : req.query.isActive === "false"
104
+ ? false
105
+ : undefined;
106
+ const limit = req.query.limit
107
+ ? parseInt(req.query.limit, 10)
108
+ : undefined;
109
+ const offset = req.query.offset
110
+ ? parseInt(req.query.offset, 10)
111
+ : undefined;
112
+ const job = await JobService_1.JobService.getJob(jobId);
113
+ if (!job) {
114
+ res.status(404).json({ error: "Job not found" });
115
+ return;
116
+ }
117
+ const result = await ConversationService_1.ConversationService.getConversationsByJob(jobId, {
118
+ provider,
119
+ isActive,
120
+ limit,
121
+ offset,
122
+ });
123
+ res.json(result);
124
+ }
125
+ catch (error) {
126
+ const message = error instanceof Error ? error.message : String(error);
127
+ logger_1.default.error("Error getting conversations:", message);
128
+ res.status(500).json({ error: message });
129
+ }
130
+ }
131
+ /**
132
+ * Update a job
133
+ * PATCH /api/jobs/:jobId
134
+ */
135
+ static async update(req, res) {
136
+ try {
137
+ const { jobId } = req.params;
138
+ const params = req.body;
139
+ const job = await JobService_1.JobService.updateJob(jobId, params);
140
+ res.json(job);
141
+ }
142
+ catch (error) {
143
+ const message = error instanceof Error ? error.message : String(error);
144
+ logger_1.default.error("Error updating job:", message);
145
+ res.status(500).json({ error: message });
146
+ }
147
+ }
148
+ /**
149
+ * Delete a job
150
+ * DELETE /api/jobs/:jobId
151
+ */
152
+ static async delete(req, res) {
153
+ try {
154
+ const { jobId } = req.params;
155
+ await JobService_1.JobService.deleteJob(jobId);
156
+ res.status(204).send();
157
+ }
158
+ catch (error) {
159
+ const message = error instanceof Error ? error.message : String(error);
160
+ logger_1.default.error("Error deleting job:", message);
161
+ res.status(500).json({ error: message });
162
+ }
163
+ }
164
+ /**
165
+ * Get job status and statistics
166
+ * GET /api/jobs/:jobId/status
167
+ */
168
+ static async getStatus(req, res) {
169
+ try {
170
+ const { jobId } = req.params;
171
+ const job = await JobService_1.JobService.getJob(jobId);
172
+ if (!job) {
173
+ res.status(404).json({ error: "Job not found" });
174
+ return;
175
+ }
176
+ const stats = await JobService_1.JobService.getJobStatistics(jobId);
177
+ res.json({
178
+ job,
179
+ statistics: stats,
180
+ });
181
+ }
182
+ catch (error) {
183
+ const message = error instanceof Error ? error.message : String(error);
184
+ logger_1.default.error("Error getting job status:", message);
185
+ res.status(500).json({ error: message });
186
+ }
187
+ }
188
+ /**
189
+ * Cancel a job
190
+ * POST /api/jobs/:jobId/cancel
191
+ */
192
+ static async cancel(req, res) {
193
+ try {
194
+ const { jobId } = req.params;
195
+ const job = await JobService_1.JobService.cancelJob(jobId);
196
+ res.json(job);
197
+ }
198
+ catch (error) {
199
+ const message = error instanceof Error ? error.message : String(error);
200
+ logger_1.default.error("Error cancelling job:", message);
201
+ res.status(500).json({ error: message });
202
+ }
203
+ }
204
+ /**
205
+ * List files in job working directory
206
+ * GET /api/jobs/:jobId/files
207
+ */
208
+ static async listFiles(req, res) {
209
+ try {
210
+ const { jobId } = req.params;
211
+ const job = await JobService_1.JobService.getJob(jobId);
212
+ if (!job) {
213
+ res.status(404).json({ error: "Job not found" });
214
+ return;
215
+ }
216
+ const files = await WorkingDirectoryService_1.WorkingDirectoryService.listFiles(job.workingDirectory);
217
+ res.json({ files });
218
+ }
219
+ catch (error) {
220
+ const message = error instanceof Error ? error.message : String(error);
221
+ logger_1.default.error("Error listing files:", message);
222
+ res.status(500).json({ error: message });
223
+ }
224
+ }
225
+ }
226
+ exports.JobController = JobController;
227
+ //# sourceMappingURL=JobController.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"JobController.js","sourceRoot":"","sources":["../../src/controllers/JobController.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ import "./models";
2
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAkBA,OAAO,UAAU,CAAC"}
@@ -0,0 +1,160 @@
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 express_1 = __importDefault(require("express"));
7
+ const cors_1 = __importDefault(require("cors"));
8
+ const path_1 = __importDefault(require("path"));
9
+ const fs_1 = __importDefault(require("fs"));
10
+ const database_1 = require("./config/database");
11
+ const environment_1 = __importDefault(require("./config/environment"));
12
+ const logger_1 = __importDefault(require("./utils/logger"));
13
+ const routes_1 = __importDefault(require("./routes"));
14
+ const error_middleware_1 = require("./middleware/error.middleware");
15
+ const ClaudeAuthService_1 = require("./services/auth/ClaudeAuthService");
16
+ const CodexAuthService_1 = require("./services/auth/CodexAuthService");
17
+ const GeminiAuthService_1 = require("./services/auth/GeminiAuthService");
18
+ const TokenRefreshService_1 = require("./services/auth/TokenRefreshService");
19
+ const models_1 = require("./models");
20
+ const crypto_1 = require("./utils/crypto");
21
+ require("./models"); // Import models to ensure associations are set up
22
+ /**
23
+ * Determine the path to the frontend static files
24
+ * Handles both development and production (npm installed) scenarios
25
+ */
26
+ function getPublicDir() {
27
+ // Try paths in order of preference:
28
+ const possiblePaths = [
29
+ // 1. Sibling "public" folder (production build)
30
+ path_1.default.join(__dirname, "../public"),
31
+ // 2. From dist folder structure (npm package)
32
+ path_1.default.join(__dirname, "../../public"),
33
+ // 3. Development: built frontend
34
+ path_1.default.join(__dirname, "../../frontend/dist"),
35
+ // 4. Monorepo structure
36
+ path_1.default.join(__dirname, "../../../frontend/dist"),
37
+ ];
38
+ for (const p of possiblePaths) {
39
+ const indexPath = path_1.default.join(p, "index.html");
40
+ if (fs_1.default.existsSync(indexPath)) {
41
+ return p;
42
+ }
43
+ }
44
+ // Default fallback
45
+ return path_1.default.join(__dirname, "../public");
46
+ }
47
+ async function initializeServer() {
48
+ logger_1.default.info("Starting LLM Dev Server...");
49
+ // 1. Setup database
50
+ await database_1.database.initialize();
51
+ // 2. Create default admin user if no users exist
52
+ const userCount = await models_1.User.count();
53
+ if (userCount === 0) {
54
+ const defaultPassword = (0, crypto_1.generateRandomHex)(16); // 32 character random password
55
+ const passwordHash = await (0, crypto_1.hashPassword)(defaultPassword);
56
+ await models_1.User.create({
57
+ username: "admin",
58
+ passwordHash,
59
+ role: "admin",
60
+ authProvider: "local",
61
+ });
62
+ logger_1.default.info("═══════════════════════════════════════════════════════════════");
63
+ logger_1.default.info(" DEFAULT ADMIN USER CREATED");
64
+ logger_1.default.info(" Username: admin");
65
+ logger_1.default.info(` Password: ${defaultPassword}`);
66
+ logger_1.default.info(" Please change this password after first login!");
67
+ logger_1.default.info("═══════════════════════════════════════════════════════════════");
68
+ }
69
+ // 3. Load credentials from filesystem
70
+ logger_1.default.info("Loading provider credentials from disk...");
71
+ const claudeAuth = new ClaudeAuthService_1.ClaudeAuthService();
72
+ const codexAuth = new CodexAuthService_1.CodexAuthService();
73
+ const geminiAuth = new GeminiAuthService_1.GeminiAuthService();
74
+ const [claudeCreds, codexCreds, geminiCreds] = await Promise.all([
75
+ claudeAuth.loadFromFile(),
76
+ codexAuth.loadFromFile(),
77
+ geminiAuth.loadFromFile(),
78
+ ]);
79
+ if (claudeCreds) {
80
+ logger_1.default.info("✓ Claude credentials loaded");
81
+ TokenRefreshService_1.TokenRefreshService.getInstance().start(claudeCreds.id);
82
+ }
83
+ else {
84
+ logger_1.default.info("ℹ Claude not authenticated");
85
+ }
86
+ if (codexCreds) {
87
+ logger_1.default.info("✓ Codex credentials loaded");
88
+ }
89
+ else {
90
+ logger_1.default.info("ℹ Codex not authenticated");
91
+ }
92
+ if (geminiCreds) {
93
+ logger_1.default.info("✓ Gemini credentials loaded");
94
+ }
95
+ else {
96
+ logger_1.default.info("ℹ Gemini not authenticated");
97
+ }
98
+ // 4. Set environment variables for CLI tools
99
+ process.env.CLAUDE_CONFIG_DIR = path_1.default.join(environment_1.default.DATA_DIR, "claude");
100
+ process.env.CODEX_HOME = path_1.default.join(environment_1.default.DATA_DIR, "codex");
101
+ // 5. Create Express app
102
+ const app = (0, express_1.default)();
103
+ // Trust proxy for reverse proxy (Traefik/Nginx) support
104
+ if (environment_1.default.TRUST_PROXY) {
105
+ app.set("trust proxy", environment_1.default.TRUST_PROXY);
106
+ logger_1.default.info("Trust proxy enabled:", environment_1.default.TRUST_PROXY);
107
+ }
108
+ // Middleware
109
+ app.use((0, cors_1.default)({ origin: environment_1.default.ALLOWED_ORIGINS, credentials: true }));
110
+ app.use(express_1.default.json({ limit: "10mb" }));
111
+ app.use(express_1.default.urlencoded({ extended: true, limit: "10mb" }));
112
+ // API routes
113
+ app.use("/api", routes_1.default);
114
+ // Serve static frontend in production
115
+ if (environment_1.default.NODE_ENV === "production") {
116
+ const publicDir = getPublicDir();
117
+ if (fs_1.default.existsSync(path_1.default.join(publicDir, "index.html"))) {
118
+ logger_1.default.info(`Serving frontend from: ${publicDir}`);
119
+ app.use(express_1.default.static(publicDir));
120
+ app.get("*", (req, res) => {
121
+ res.sendFile(path_1.default.join(publicDir, "index.html"));
122
+ });
123
+ }
124
+ else {
125
+ logger_1.default.warn(`Frontend not found at: ${publicDir}`);
126
+ logger_1.default.warn("API-only mode - frontend files not bundled");
127
+ }
128
+ }
129
+ else {
130
+ // Development mode - expect Vite dev server
131
+ logger_1.default.info("Development mode - frontend served by Vite dev server");
132
+ }
133
+ // Error handling
134
+ app.use(error_middleware_1.notFoundMiddleware);
135
+ app.use(error_middleware_1.errorMiddleware);
136
+ // 6. Start server
137
+ const server = app.listen(environment_1.default.PORT, () => {
138
+ logger_1.default.info(`✓ Server running on http://localhost:${environment_1.default.PORT}`);
139
+ logger_1.default.info(`✓ API available at http://localhost:${environment_1.default.PORT}/api`);
140
+ logger_1.default.info(`Environment: ${environment_1.default.NODE_ENV}`);
141
+ });
142
+ // Graceful shutdown
143
+ const shutdown = async () => {
144
+ logger_1.default.info("Shutting down server...");
145
+ TokenRefreshService_1.TokenRefreshService.getInstance().stopAll();
146
+ await database_1.database.close();
147
+ server.close(() => {
148
+ logger_1.default.info("Server shut down successfully");
149
+ process.exit(0);
150
+ });
151
+ };
152
+ process.on("SIGTERM", shutdown);
153
+ process.on("SIGINT", shutdown);
154
+ }
155
+ // Start server
156
+ initializeServer().catch((error) => {
157
+ logger_1.default.error("Failed to start server:", error);
158
+ process.exit(1);
159
+ });
160
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;;AAAA,sDAA8B;AAC9B,gDAAwB;AACxB,gDAAwB;AACxB,4CAAoB;AACpB,gDAA6C;AAC7C,uEAA0C;AAC1C,4DAAoC;AACpC,sDAA8B;AAC9B,oEAGuC;AACvC,yEAAsE;AACtE,uEAAoE;AACpE,yEAAsE;AACtE,6EAA0E;AAC1E,qCAAgC;AAChC,2CAAiE;AACjE,oBAAkB,CAAC,kDAAkD;AAErE;;;GAGG;AACH,SAAS,YAAY;IACnB,oCAAoC;IACpC,MAAM,aAAa,GAAG;QACpB,gDAAgD;QAChD,cAAI,CAAC,IAAI,CAAC,SAAS,EAAE,WAAW,CAAC;QACjC,8CAA8C;QAC9C,cAAI,CAAC,IAAI,CAAC,SAAS,EAAE,cAAc,CAAC;QACpC,iCAAiC;QACjC,cAAI,CAAC,IAAI,CAAC,SAAS,EAAE,qBAAqB,CAAC;QAC3C,wBAAwB;QACxB,cAAI,CAAC,IAAI,CAAC,SAAS,EAAE,wBAAwB,CAAC;KAC/C,CAAC;IAEF,KAAK,MAAM,CAAC,IAAI,aAAa,EAAE,CAAC;QAC9B,MAAM,SAAS,GAAG,cAAI,CAAC,IAAI,CAAC,CAAC,EAAE,YAAY,CAAC,CAAC;QAC7C,IAAI,YAAE,CAAC,UAAU,CAAC,SAAS,CAAC,EAAE,CAAC;YAC7B,OAAO,CAAC,CAAC;QACX,CAAC;IACH,CAAC;IAED,mBAAmB;IACnB,OAAO,cAAI,CAAC,IAAI,CAAC,SAAS,EAAE,WAAW,CAAC,CAAC;AAC3C,CAAC;AAED,KAAK,UAAU,gBAAgB;IAC7B,gBAAM,CAAC,IAAI,CAAC,4BAA4B,CAAC,CAAC;IAE1C,oBAAoB;IACpB,MAAM,mBAAQ,CAAC,UAAU,EAAE,CAAC;IAE5B,iDAAiD;IACjD,MAAM,SAAS,GAAG,MAAM,aAAI,CAAC,KAAK,EAAE,CAAC;IACrC,IAAI,SAAS,KAAK,CAAC,EAAE,CAAC;QACpB,MAAM,eAAe,GAAG,IAAA,0BAAiB,EAAC,EAAE,CAAC,CAAC,CAAC,+BAA+B;QAC9E,MAAM,YAAY,GAAG,MAAM,IAAA,qBAAY,EAAC,eAAe,CAAC,CAAC;QAEzD,MAAM,aAAI,CAAC,MAAM,CAAC;YAChB,QAAQ,EAAE,OAAO;YACjB,YAAY;YACZ,IAAI,EAAE,OAAO;YACb,YAAY,EAAE,OAAO;SACtB,CAAC,CAAC;QAEH,gBAAM,CAAC,IAAI,CACT,iEAAiE,CAClE,CAAC;QACF,gBAAM,CAAC,IAAI,CAAC,8BAA8B,CAAC,CAAC;QAC5C,gBAAM,CAAC,IAAI,CAAC,mBAAmB,CAAC,CAAC;QACjC,gBAAM,CAAC,IAAI,CAAC,eAAe,eAAe,EAAE,CAAC,CAAC;QAC9C,gBAAM,CAAC,IAAI,CAAC,kDAAkD,CAAC,CAAC;QAChE,gBAAM,CAAC,IAAI,CACT,iEAAiE,CAClE,CAAC;IACJ,CAAC;IAED,sCAAsC;IACtC,gBAAM,CAAC,IAAI,CAAC,2CAA2C,CAAC,CAAC;IAEzD,MAAM,UAAU,GAAG,IAAI,qCAAiB,EAAE,CAAC;IAC3C,MAAM,SAAS,GAAG,IAAI,mCAAgB,EAAE,CAAC;IACzC,MAAM,UAAU,GAAG,IAAI,qCAAiB,EAAE,CAAC;IAE3C,MAAM,CAAC,WAAW,EAAE,UAAU,EAAE,WAAW,CAAC,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC;QAC/D,UAAU,CAAC,YAAY,EAAE;QACzB,SAAS,CAAC,YAAY,EAAE;QACxB,UAAU,CAAC,YAAY,EAAE;KAC1B,CAAC,CAAC;IAEH,IAAI,WAAW,EAAE,CAAC;QAChB,gBAAM,CAAC,IAAI,CAAC,6BAA6B,CAAC,CAAC;QAC3C,yCAAmB,CAAC,WAAW,EAAE,CAAC,KAAK,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC;IAC1D,CAAC;SAAM,CAAC;QACN,gBAAM,CAAC,IAAI,CAAC,4BAA4B,CAAC,CAAC;IAC5C,CAAC;IAED,IAAI,UAAU,EAAE,CAAC;QACf,gBAAM,CAAC,IAAI,CAAC,4BAA4B,CAAC,CAAC;IAC5C,CAAC;SAAM,CAAC;QACN,gBAAM,CAAC,IAAI,CAAC,2BAA2B,CAAC,CAAC;IAC3C,CAAC;IAED,IAAI,WAAW,EAAE,CAAC;QAChB,gBAAM,CAAC,IAAI,CAAC,6BAA6B,CAAC,CAAC;IAC7C,CAAC;SAAM,CAAC;QACN,gBAAM,CAAC,IAAI,CAAC,4BAA4B,CAAC,CAAC;IAC5C,CAAC;IAED,6CAA6C;IAC7C,OAAO,CAAC,GAAG,CAAC,iBAAiB,GAAG,cAAI,CAAC,IAAI,CAAC,qBAAM,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;IACrE,OAAO,CAAC,GAAG,CAAC,UAAU,GAAG,cAAI,CAAC,IAAI,CAAC,qBAAM,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;IAE7D,wBAAwB;IACxB,MAAM,GAAG,GAAG,IAAA,iBAAO,GAAE,CAAC;IAEtB,wDAAwD;IACxD,IAAI,qBAAM,CAAC,WAAW,EAAE,CAAC;QACvB,GAAG,CAAC,GAAG,CAAC,aAAa,EAAE,qBAAM,CAAC,WAAW,CAAC,CAAC;QAC3C,gBAAM,CAAC,IAAI,CAAC,sBAAsB,EAAE,qBAAM,CAAC,WAAW,CAAC,CAAC;IAC1D,CAAC;IAED,aAAa;IACb,GAAG,CAAC,GAAG,CAAC,IAAA,cAAI,EAAC,EAAE,MAAM,EAAE,qBAAM,CAAC,eAAe,EAAE,WAAW,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;IACrE,GAAG,CAAC,GAAG,CAAC,iBAAO,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC;IACzC,GAAG,CAAC,GAAG,CAAC,iBAAO,CAAC,UAAU,CAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC;IAE/D,aAAa;IACb,GAAG,CAAC,GAAG,CAAC,MAAM,EAAE,gBAAM,CAAC,CAAC;IAExB,sCAAsC;IACtC,IAAI,qBAAM,CAAC,QAAQ,KAAK,YAAY,EAAE,CAAC;QACrC,MAAM,SAAS,GAAG,YAAY,EAAE,CAAC;QAEjC,IAAI,YAAE,CAAC,UAAU,CAAC,cAAI,CAAC,IAAI,CAAC,SAAS,EAAE,YAAY,CAAC,CAAC,EAAE,CAAC;YACtD,gBAAM,CAAC,IAAI,CAAC,0BAA0B,SAAS,EAAE,CAAC,CAAC;YACnD,GAAG,CAAC,GAAG,CAAC,iBAAO,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC;YACnC,GAAG,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE;gBACxB,GAAG,CAAC,QAAQ,CAAC,cAAI,CAAC,IAAI,CAAC,SAAS,EAAE,YAAY,CAAC,CAAC,CAAC;YACnD,CAAC,CAAC,CAAC;QACL,CAAC;aAAM,CAAC;YACN,gBAAM,CAAC,IAAI,CAAC,0BAA0B,SAAS,EAAE,CAAC,CAAC;YACnD,gBAAM,CAAC,IAAI,CAAC,4CAA4C,CAAC,CAAC;QAC5D,CAAC;IACH,CAAC;SAAM,CAAC;QACN,4CAA4C;QAC5C,gBAAM,CAAC,IAAI,CAAC,uDAAuD,CAAC,CAAC;IACvE,CAAC;IAED,iBAAiB;IACjB,GAAG,CAAC,GAAG,CAAC,qCAAkB,CAAC,CAAC;IAC5B,GAAG,CAAC,GAAG,CAAC,kCAAe,CAAC,CAAC;IAEzB,kBAAkB;IAClB,MAAM,MAAM,GAAG,GAAG,CAAC,MAAM,CAAC,qBAAM,CAAC,IAAI,EAAE,GAAG,EAAE;QAC1C,gBAAM,CAAC,IAAI,CAAC,wCAAwC,qBAAM,CAAC,IAAI,EAAE,CAAC,CAAC;QACnE,gBAAM,CAAC,IAAI,CAAC,uCAAuC,qBAAM,CAAC,IAAI,MAAM,CAAC,CAAC;QACtE,gBAAM,CAAC,IAAI,CAAC,gBAAgB,qBAAM,CAAC,QAAQ,EAAE,CAAC,CAAC;IACjD,CAAC,CAAC,CAAC;IAEH,oBAAoB;IACpB,MAAM,QAAQ,GAAG,KAAK,IAAI,EAAE;QAC1B,gBAAM,CAAC,IAAI,CAAC,yBAAyB,CAAC,CAAC;QACvC,yCAAmB,CAAC,WAAW,EAAE,CAAC,OAAO,EAAE,CAAC;QAC5C,MAAM,mBAAQ,CAAC,KAAK,EAAE,CAAC;QACvB,MAAM,CAAC,KAAK,CAAC,GAAG,EAAE;YAChB,gBAAM,CAAC,IAAI,CAAC,+BAA+B,CAAC,CAAC;YAC7C,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC,CAAC,CAAC;IACL,CAAC,CAAC;IAEF,OAAO,CAAC,EAAE,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC;IAChC,OAAO,CAAC,EAAE,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;AACjC,CAAC;AAED,eAAe;AACf,gBAAgB,EAAE,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,EAAE;IACjC,gBAAM,CAAC,KAAK,CAAC,yBAAyB,EAAE,KAAK,CAAC,CAAC;IAC/C,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC,CAAC,CAAC"}
@@ -0,0 +1,25 @@
1
+ import { Request, Response, NextFunction } from "express";
2
+ import { JwtPayload } from "../services/auth/JwtService";
3
+ declare global {
4
+ namespace Express {
5
+ interface Request {
6
+ user?: JwtPayload;
7
+ }
8
+ }
9
+ }
10
+ /**
11
+ * Middleware to verify JWT token and attach user to request
12
+ * Also supports Authelia header authentication when AUTHELIA_ENABLED=true
13
+ */
14
+ export declare function authMiddleware(req: Request, res: Response, next: NextFunction): Promise<void>;
15
+ /**
16
+ * Middleware to verify admin role
17
+ */
18
+ export declare function adminMiddleware(req: Request, res: Response, next: NextFunction): void;
19
+ /**
20
+ * Optional auth middleware - does not fail if no token
21
+ * Also supports Authelia header authentication when AUTHELIA_ENABLED=true
22
+ */
23
+ export declare function optionalAuthMiddleware(req: Request, res: Response, next: NextFunction): Promise<void>;
24
+ export default authMiddleware;
25
+ //# sourceMappingURL=auth.middleware.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"auth.middleware.d.ts","sourceRoot":"","sources":["../../src/middleware/auth.middleware.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAC1D,OAAO,EAAc,UAAU,EAAE,MAAM,6BAA6B,CAAC;AAMrE,OAAO,CAAC,MAAM,CAAC;IACb,UAAU,OAAO,CAAC;QAChB,UAAU,OAAO;YACf,IAAI,CAAC,EAAE,UAAU,CAAC;SACnB;KACF;CACF;AAED;;;GAGG;AACH,wBAAsB,cAAc,CAClC,GAAG,EAAE,OAAO,EACZ,GAAG,EAAE,QAAQ,EACb,IAAI,EAAE,YAAY,GACjB,OAAO,CAAC,IAAI,CAAC,CAqDf;AAED;;GAEG;AACH,wBAAgB,eAAe,CAC7B,GAAG,EAAE,OAAO,EACZ,GAAG,EAAE,QAAQ,EACb,IAAI,EAAE,YAAY,GACjB,IAAI,CAoBN;AAED;;;GAGG;AACH,wBAAsB,sBAAsB,CAC1C,GAAG,EAAE,OAAO,EACZ,GAAG,EAAE,QAAQ,EACb,IAAI,EAAE,YAAY,GACjB,OAAO,CAAC,IAAI,CAAC,CA2Bf;AAED,eAAe,cAAc,CAAC"}
@@ -0,0 +1,116 @@
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
+ exports.authMiddleware = authMiddleware;
7
+ exports.adminMiddleware = adminMiddleware;
8
+ exports.optionalAuthMiddleware = optionalAuthMiddleware;
9
+ const JwtService_1 = require("../services/auth/JwtService");
10
+ const authelia_middleware_1 = require("./authelia.middleware");
11
+ const environment_1 = __importDefault(require("../config/environment"));
12
+ const logger_1 = __importDefault(require("../utils/logger"));
13
+ /**
14
+ * Middleware to verify JWT token and attach user to request
15
+ * Also supports Authelia header authentication when AUTHELIA_ENABLED=true
16
+ */
17
+ async function authMiddleware(req, res, next) {
18
+ try {
19
+ // 1. Try Authelia authentication first (if enabled)
20
+ if (environment_1.default.AUTHELIA_ENABLED) {
21
+ const autheliaSuccess = await (0, authelia_middleware_1.authenticateWithAuthelia)(req);
22
+ if (autheliaSuccess) {
23
+ next();
24
+ return;
25
+ }
26
+ }
27
+ // 2. Fall back to JWT authentication
28
+ const authHeader = req.headers.authorization;
29
+ if (!authHeader) {
30
+ res.status(401).json({
31
+ error: "Unauthorized",
32
+ message: "No authorization token provided",
33
+ statusCode: 401,
34
+ });
35
+ return;
36
+ }
37
+ // Extract token (format: "Bearer <token>")
38
+ const token = authHeader.replace(/^Bearer\s+/i, "");
39
+ if (!token || token === authHeader) {
40
+ res.status(401).json({
41
+ error: "Unauthorized",
42
+ message: "Invalid authorization header format",
43
+ statusCode: 401,
44
+ });
45
+ return;
46
+ }
47
+ // Verify token
48
+ const payload = JwtService_1.JwtService.verifyToken(token);
49
+ // Attach user to request
50
+ req.user = payload;
51
+ next();
52
+ }
53
+ catch (error) {
54
+ logger_1.default.error("Auth middleware error:", error);
55
+ const message = error instanceof Error ? error.message : "Invalid or expired token";
56
+ res.status(401).json({
57
+ error: "Unauthorized",
58
+ message,
59
+ statusCode: 401,
60
+ });
61
+ }
62
+ }
63
+ /**
64
+ * Middleware to verify admin role
65
+ */
66
+ function adminMiddleware(req, res, next) {
67
+ if (!req.user) {
68
+ res.status(401).json({
69
+ error: "Unauthorized",
70
+ message: "Authentication required",
71
+ statusCode: 401,
72
+ });
73
+ return;
74
+ }
75
+ if (req.user.role !== "admin") {
76
+ res.status(403).json({
77
+ error: "Forbidden",
78
+ message: "Admin access required",
79
+ statusCode: 403,
80
+ });
81
+ return;
82
+ }
83
+ next();
84
+ }
85
+ /**
86
+ * Optional auth middleware - does not fail if no token
87
+ * Also supports Authelia header authentication when AUTHELIA_ENABLED=true
88
+ */
89
+ async function optionalAuthMiddleware(req, res, next) {
90
+ try {
91
+ // 1. Try Authelia authentication first (if enabled)
92
+ if (environment_1.default.AUTHELIA_ENABLED) {
93
+ const autheliaSuccess = await (0, authelia_middleware_1.authenticateWithAuthelia)(req);
94
+ if (autheliaSuccess) {
95
+ next();
96
+ return;
97
+ }
98
+ }
99
+ // 2. Try JWT authentication
100
+ const authHeader = req.headers.authorization;
101
+ if (authHeader) {
102
+ const token = authHeader.replace(/^Bearer\s+/i, "");
103
+ if (token && token !== authHeader) {
104
+ const payload = JwtService_1.JwtService.verifyToken(token);
105
+ req.user = payload;
106
+ }
107
+ }
108
+ next();
109
+ }
110
+ catch (error) {
111
+ // Silently fail for optional auth
112
+ next();
113
+ }
114
+ }
115
+ exports.default = authMiddleware;
116
+ //# sourceMappingURL=auth.middleware.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"auth.middleware.js","sourceRoot":"","sources":["../../src/middleware/auth.middleware.ts"],"names":[],"mappings":"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"}