@scpxl/nodejs-framework 1.0.49 → 1.0.56

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 (258) hide show
  1. package/README.md +12 -7
  2. package/dist/api-requester/api-requester.js +1 -1
  3. package/dist/api-requester/api-requester.js.map +2 -2
  4. package/dist/api-requester/index.d.ts +1 -1
  5. package/dist/api-requester/index.d.ts.map +1 -1
  6. package/dist/api-requester/index.js.map +2 -2
  7. package/dist/application/base-application.d.ts +6 -5
  8. package/dist/application/base-application.d.ts.map +1 -1
  9. package/dist/application/base-application.interface.d.ts +2 -4
  10. package/dist/application/base-application.interface.d.ts.map +1 -1
  11. package/dist/application/base-application.js +23 -14
  12. package/dist/application/base-application.js.map +2 -2
  13. package/dist/application/command-application.d.ts.map +1 -1
  14. package/dist/application/command-application.js +2 -2
  15. package/dist/application/command-application.js.map +2 -2
  16. package/dist/application/index.d.ts +3 -3
  17. package/dist/application/index.d.ts.map +1 -1
  18. package/dist/application/index.js +4 -4
  19. package/dist/application/index.js.map +2 -2
  20. package/dist/application/web-application.d.ts +5 -5
  21. package/dist/application/web-application.d.ts.map +1 -1
  22. package/dist/application/web-application.js +6 -7
  23. package/dist/application/web-application.js.map +2 -2
  24. package/dist/application/worker-application.d.ts +2 -2
  25. package/dist/application/worker-application.d.ts.map +1 -1
  26. package/dist/application/worker-application.js +2 -2
  27. package/dist/application/worker-application.js.map +2 -2
  28. package/dist/auth/jwt.d.ts.map +1 -1
  29. package/dist/auth/jwt.js +2 -2
  30. package/dist/auth/jwt.js.map +2 -2
  31. package/dist/cache/manager.d.ts.map +1 -1
  32. package/dist/cache/manager.js.map +2 -2
  33. package/dist/cli/index.js +192 -7029
  34. package/dist/cli/index.js.map +4 -4
  35. package/dist/cluster/cluster-manager.d.ts.map +1 -1
  36. package/dist/cluster/cluster-manager.js +1 -1
  37. package/dist/cluster/cluster-manager.js.map +2 -2
  38. package/dist/command/command.d.ts +1 -1
  39. package/dist/command/command.d.ts.map +1 -1
  40. package/dist/command/command.js.map +2 -2
  41. package/dist/config/env.d.ts +1 -1
  42. package/dist/config/env.d.ts.map +1 -1
  43. package/dist/config/env.js.map +1 -1
  44. package/dist/config/index.d.ts +1 -1
  45. package/dist/config/index.d.ts.map +1 -1
  46. package/dist/config/index.js +1 -1
  47. package/dist/config/index.js.map +1 -1
  48. package/dist/config/schema.d.ts.map +1 -1
  49. package/dist/config/schema.js +1 -1
  50. package/dist/config/schema.js.map +2 -2
  51. package/dist/database/dynamic-entity.js +9 -9
  52. package/dist/database/dynamic-entity.js.map +2 -2
  53. package/dist/database/index.d.ts +3 -3
  54. package/dist/database/index.d.ts.map +1 -1
  55. package/dist/database/index.js +5 -5
  56. package/dist/database/index.js.map +2 -2
  57. package/dist/database/instance.d.ts +3 -3
  58. package/dist/database/instance.js +3 -3
  59. package/dist/database/instance.js.map +1 -1
  60. package/dist/database/manager.d.ts +1 -0
  61. package/dist/database/manager.d.ts.map +1 -1
  62. package/dist/database/manager.js +16 -3
  63. package/dist/database/manager.js.map +2 -2
  64. package/dist/error/error-reporter.js +1 -1
  65. package/dist/error/error-reporter.js.map +2 -2
  66. package/dist/error/index.d.ts +2 -3
  67. package/dist/error/index.d.ts.map +1 -1
  68. package/dist/error/index.js +8 -9
  69. package/dist/error/index.js.map +2 -2
  70. package/dist/event/controller/base.d.ts +2 -2
  71. package/dist/event/controller/base.d.ts.map +1 -1
  72. package/dist/event/controller/base.js +2 -2
  73. package/dist/event/controller/base.js.map +2 -2
  74. package/dist/event/index.d.ts +3 -3
  75. package/dist/event/index.d.ts.map +1 -1
  76. package/dist/event/index.js +5 -5
  77. package/dist/event/index.js.map +2 -2
  78. package/dist/event/manager.d.ts.map +1 -1
  79. package/dist/event/manager.interface.d.ts +2 -3
  80. package/dist/event/manager.interface.d.ts.map +1 -1
  81. package/dist/event/manager.js.map +2 -2
  82. package/dist/index.d.ts +1 -1
  83. package/dist/index.d.ts.map +1 -1
  84. package/dist/index.js +1 -1
  85. package/dist/index.js.map +2 -2
  86. package/dist/lifecycle/index.d.ts +3 -3
  87. package/dist/lifecycle/index.d.ts.map +1 -1
  88. package/dist/lifecycle/index.js +1 -1
  89. package/dist/lifecycle/index.js.map +2 -2
  90. package/dist/lifecycle/lifecycle-manager.d.ts +6 -0
  91. package/dist/lifecycle/lifecycle-manager.d.ts.map +1 -1
  92. package/dist/lifecycle/lifecycle-manager.js +28 -0
  93. package/dist/lifecycle/lifecycle-manager.js.map +2 -2
  94. package/dist/logger/logger.d.ts +20 -1
  95. package/dist/logger/logger.d.ts.map +1 -1
  96. package/dist/logger/logger.js +68 -96
  97. package/dist/logger/logger.js.map +2 -2
  98. package/dist/performance/cache-performance.d.ts.map +1 -1
  99. package/dist/performance/cache-performance.js +1 -1
  100. package/dist/performance/cache-performance.js.map +2 -2
  101. package/dist/performance/database-performance.d.ts.map +1 -1
  102. package/dist/performance/database-performance.js +1 -1
  103. package/dist/performance/database-performance.js.map +2 -2
  104. package/dist/performance/index.d.ts +3 -3
  105. package/dist/performance/index.d.ts.map +1 -1
  106. package/dist/performance/index.js +3 -3
  107. package/dist/performance/index.js.map +1 -1
  108. package/dist/performance/performance-monitor.js +2 -2
  109. package/dist/performance/performance-monitor.js.map +2 -2
  110. package/dist/performance/performance-monitor.plugin.d.ts.map +1 -1
  111. package/dist/performance/performance-monitor.plugin.js +1 -1
  112. package/dist/performance/performance-monitor.plugin.js.map +2 -2
  113. package/dist/performance/queue-performance.d.ts.map +1 -1
  114. package/dist/performance/queue-performance.js +1 -1
  115. package/dist/performance/queue-performance.js.map +2 -2
  116. package/dist/performance/webserver-performance.d.ts.map +1 -1
  117. package/dist/performance/webserver-performance.js +1 -1
  118. package/dist/performance/webserver-performance.js.map +2 -2
  119. package/dist/performance/websocket-performance.d.ts.map +1 -1
  120. package/dist/performance/websocket-performance.js +1 -1
  121. package/dist/performance/websocket-performance.js.map +2 -2
  122. package/dist/queue/index.d.ts +2 -2
  123. package/dist/queue/index.d.ts.map +1 -1
  124. package/dist/queue/index.interface.d.ts +1 -1
  125. package/dist/queue/index.interface.d.ts.map +1 -1
  126. package/dist/queue/index.js.map +2 -2
  127. package/dist/queue/manager.d.ts +9 -2
  128. package/dist/queue/manager.d.ts.map +1 -1
  129. package/dist/queue/manager.js +44 -6
  130. package/dist/queue/manager.js.map +2 -2
  131. package/dist/queue/processor/base.d.ts +5 -5
  132. package/dist/queue/processor/base.d.ts.map +1 -1
  133. package/dist/queue/processor/base.js +2 -2
  134. package/dist/queue/processor/base.js.map +2 -2
  135. package/dist/queue/processor/processor.interface.d.ts +3 -3
  136. package/dist/queue/processor/processor.interface.d.ts.map +1 -1
  137. package/dist/queue/worker.d.ts +5 -0
  138. package/dist/queue/worker.d.ts.map +1 -1
  139. package/dist/queue/worker.interface.d.ts +1 -1
  140. package/dist/queue/worker.interface.d.ts.map +1 -1
  141. package/dist/queue/worker.js +9 -1
  142. package/dist/queue/worker.js.map +2 -2
  143. package/dist/redis/index.d.ts +1 -1
  144. package/dist/redis/index.d.ts.map +1 -1
  145. package/dist/redis/index.js +5 -4
  146. package/dist/redis/index.js.map +2 -2
  147. package/dist/redis/instance.js +1 -1
  148. package/dist/redis/instance.js.map +2 -2
  149. package/dist/redis/manager.d.ts +7 -1
  150. package/dist/redis/manager.d.ts.map +1 -1
  151. package/dist/redis/manager.js +20 -4
  152. package/dist/redis/manager.js.map +2 -2
  153. package/dist/request-context/index.d.ts +1 -1
  154. package/dist/request-context/index.d.ts.map +1 -1
  155. package/dist/request-context/index.js +5 -5
  156. package/dist/request-context/index.js.map +1 -1
  157. package/dist/schemas/entity-builder.d.ts +3 -3
  158. package/dist/schemas/entity-builder.d.ts.map +1 -1
  159. package/dist/schemas/entity-builder.js.map +1 -1
  160. package/dist/services/aws/s3.d.ts.map +1 -1
  161. package/dist/services/aws/s3.js +7 -10
  162. package/dist/services/aws/s3.js.map +2 -2
  163. package/dist/util/file.d.ts +13 -8
  164. package/dist/util/file.d.ts.map +1 -1
  165. package/dist/util/file.js +6 -28
  166. package/dist/util/file.js.map +2 -2
  167. package/dist/util/helper.js +2 -2
  168. package/dist/util/helper.js.map +2 -2
  169. package/dist/util/index.d.ts +2 -2
  170. package/dist/util/index.d.ts.map +1 -1
  171. package/dist/util/index.js +18 -18
  172. package/dist/util/index.js.map +2 -2
  173. package/dist/util/loader.js +3 -3
  174. package/dist/util/loader.js.map +2 -2
  175. package/dist/util/os.js +2 -2
  176. package/dist/util/os.js.map +2 -2
  177. package/dist/webserver/controller/auth-middleware.d.ts +1 -1
  178. package/dist/webserver/controller/auth-middleware.d.ts.map +1 -1
  179. package/dist/webserver/controller/auth-middleware.js +1 -1
  180. package/dist/webserver/controller/auth-middleware.js.map +2 -2
  181. package/dist/webserver/controller/base.d.ts +6 -6
  182. package/dist/webserver/controller/base.d.ts.map +1 -1
  183. package/dist/webserver/controller/base.interface.d.ts +1 -1
  184. package/dist/webserver/controller/base.interface.d.ts.map +1 -1
  185. package/dist/webserver/controller/base.js +4 -4
  186. package/dist/webserver/controller/base.js.map +2 -2
  187. package/dist/webserver/controller/entity.d.ts +4 -3
  188. package/dist/webserver/controller/entity.d.ts.map +1 -1
  189. package/dist/webserver/controller/entity.js +26 -17
  190. package/dist/webserver/controller/entity.js.map +2 -2
  191. package/dist/webserver/controller/example-auth.d.ts.map +1 -1
  192. package/dist/webserver/controller/example-auth.js +1 -1
  193. package/dist/webserver/controller/example-auth.js.map +2 -2
  194. package/dist/webserver/controller/health.d.ts.map +1 -1
  195. package/dist/webserver/controller/health.js +1 -1
  196. package/dist/webserver/controller/health.js.map +2 -2
  197. package/dist/webserver/define-action.d.ts +1 -1
  198. package/dist/webserver/define-action.d.ts.map +1 -1
  199. package/dist/webserver/define-action.js.map +1 -1
  200. package/dist/webserver/define-route.d.ts +1 -1
  201. package/dist/webserver/define-route.d.ts.map +1 -1
  202. package/dist/webserver/define-route.js.map +2 -2
  203. package/dist/webserver/index.d.ts +9 -9
  204. package/dist/webserver/index.d.ts.map +1 -1
  205. package/dist/webserver/index.js +14 -14
  206. package/dist/webserver/index.js.map +2 -2
  207. package/dist/webserver/webserver.d.ts +3 -3
  208. package/dist/webserver/webserver.d.ts.map +1 -1
  209. package/dist/webserver/webserver.interface.d.ts +5 -5
  210. package/dist/webserver/webserver.interface.d.ts.map +1 -1
  211. package/dist/webserver/webserver.interface.js.map +1 -1
  212. package/dist/webserver/webserver.js +9 -9
  213. package/dist/webserver/webserver.js.map +2 -2
  214. package/dist/websocket/controller/server/base.d.ts +2 -2
  215. package/dist/websocket/controller/server/base.js.map +1 -1
  216. package/dist/websocket/controllers/server/system.d.ts.map +1 -1
  217. package/dist/websocket/controllers/server/system.js +1 -1
  218. package/dist/websocket/controllers/server/system.js.map +2 -2
  219. package/dist/websocket/index.d.ts +9 -11
  220. package/dist/websocket/index.d.ts.map +1 -1
  221. package/dist/websocket/index.js +22 -22
  222. package/dist/websocket/index.js.map +2 -2
  223. package/dist/websocket/subscriber-middleware.d.ts.map +1 -1
  224. package/dist/websocket/subscriber-middleware.js.map +2 -2
  225. package/dist/websocket/subscriber-utils.d.ts.map +1 -1
  226. package/dist/websocket/subscriber-utils.js.map +2 -2
  227. package/dist/websocket/utils.d.ts.map +1 -1
  228. package/dist/websocket/utils.js +4 -2
  229. package/dist/websocket/utils.js.map +2 -2
  230. package/dist/websocket/websocket-auth.d.ts.map +1 -1
  231. package/dist/websocket/websocket-auth.js +3 -3
  232. package/dist/websocket/websocket-auth.js.map +2 -2
  233. package/dist/websocket/websocket-base.d.ts +2 -2
  234. package/dist/websocket/websocket-base.d.ts.map +1 -1
  235. package/dist/websocket/websocket-base.js +1 -1
  236. package/dist/websocket/websocket-base.js.map +2 -2
  237. package/dist/websocket/websocket-client-manager.d.ts +2 -0
  238. package/dist/websocket/websocket-client-manager.d.ts.map +1 -1
  239. package/dist/websocket/websocket-client-manager.js +11 -4
  240. package/dist/websocket/websocket-client-manager.js.map +2 -2
  241. package/dist/websocket/websocket-client.d.ts +10 -5
  242. package/dist/websocket/websocket-client.d.ts.map +1 -1
  243. package/dist/websocket/websocket-client.js +27 -5
  244. package/dist/websocket/websocket-client.js.map +2 -2
  245. package/dist/websocket/websocket-room-manager.js +1 -1
  246. package/dist/websocket/websocket-room-manager.js.map +1 -1
  247. package/dist/websocket/websocket-server.d.ts +7 -7
  248. package/dist/websocket/websocket-server.d.ts.map +1 -1
  249. package/dist/websocket/websocket-server.js +25 -20
  250. package/dist/websocket/websocket-server.js.map +2 -2
  251. package/dist/websocket/websocket-service.d.ts +2 -2
  252. package/dist/websocket/websocket-service.d.ts.map +1 -1
  253. package/dist/websocket/websocket-service.js +1 -1
  254. package/dist/websocket/websocket-service.js.map +2 -2
  255. package/dist/websocket/websocket.interface.d.ts +3 -5
  256. package/dist/websocket/websocket.interface.d.ts.map +1 -1
  257. package/dist/websocket/websocket.interface.js.map +2 -2
  258. package/package.json +68 -64
@@ -1,12 +1,12 @@
1
- import type RedisInstance from '../redis/instance.js';
2
1
  import type DatabaseInstance from '../database/instance.js';
3
- import WebServer from '../webserver/webserver.js';
2
+ import type EventManager from '../event/manager.js';
4
3
  import type QueueManager from '../queue/manager.js';
4
+ import type RedisInstance from '../redis/instance.js';
5
+ import WebServer from '../webserver/webserver.js';
6
+ import WebSocketClient from '../websocket/websocket-client.js';
7
+ import WebSocketServer from '../websocket/websocket-server.js';
5
8
  import BaseApplication from './base-application.js';
6
9
  import type { WebApplicationConfig } from './web-application.interface.js';
7
- import WebSocketServer from '../websocket/websocket-server.js';
8
- import WebSocketClient from '../websocket/websocket-client.js';
9
- import type EventManager from '../event/manager.js';
10
10
  /**
11
11
  * Application
12
12
  */
@@ -1 +1 @@
1
- {"version":3,"file":"web-application.d.ts","sourceRoot":"","sources":["../../src/application/web-application.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,aAAa,MAAM,sBAAsB,CAAC;AACtD,OAAO,KAAK,gBAAgB,MAAM,yBAAyB,CAAC;AAC5D,OAAO,SAAS,MAAM,2BAA2B,CAAC;AAClD,OAAO,KAAK,YAAY,MAAM,qBAAqB,CAAC;AACpD,OAAO,eAAe,MAAM,uBAAuB,CAAC;AACpD,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,gCAAgC,CAAC;AAG3E,OAAO,eAAe,MAAM,kCAAkC,CAAC;AAC/D,OAAO,eAAe,MAAM,kCAAkC,CAAC;AAC/D,OAAO,KAAK,YAAY,MAAM,qBAAqB,CAAC;AAGpD;;GAEG;AACH,MAAM,CAAC,OAAO,OAAO,cAAe,SAAQ,eAAe;IACzD,6BAA6B;IAC7B,SAAS,CAAC,MAAM,EAAE,oBAAoB,CAAC;IAEvC,iBAAiB;IACV,SAAS,CAAC,EAAE,SAAS,CAAC;IAE7B,uBAAuB;IAChB,eAAe,CAAC,EAAE,eAAe,CAAC;IAEzC,uBAAuB;IAChB,eAAe,CAAC,EAAE,eAAe,CAAC;gBAE7B,MAAM,EAAE,oBAAoB;cAcxB,YAAY,CAAC,EAC3B,aAAa,EACb,gBAAgB,EAChB,YAAY,EACZ,YAAY,GACb,EAAE;QACD,aAAa,EAAE,aAAa,CAAC;QAC7B,gBAAgB,EAAE,gBAAgB,CAAC;QACnC,YAAY,EAAE,YAAY,CAAC;QAC3B,YAAY,EAAE,YAAY,CAAC;KAC5B,GAAG,OAAO,CAAC,IAAI,CAAC;IAsHjB;;OAEG;cACa,YAAY,IAAI,OAAO,CAAC,IAAI,CAAC;IAY7C;;OAEG;cACa,SAAS,CAAC,EAAE,WAAW,EAAE,EAAE;QAAE,WAAW,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC,IAAI,CAAC;cAuBlE,SAAS,CAAC,EAAE,OAAO,EAAE,EAAE;QAAE,OAAO,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC,IAAI,CAAC;CAqB3E"}
1
+ {"version":3,"file":"web-application.d.ts","sourceRoot":"","sources":["../../src/application/web-application.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,gBAAgB,MAAM,yBAAyB,CAAC;AAC5D,OAAO,KAAK,YAAY,MAAM,qBAAqB,CAAC;AAGpD,OAAO,KAAK,YAAY,MAAM,qBAAqB,CAAC;AACpD,OAAO,KAAK,aAAa,MAAM,sBAAsB,CAAC;AAEtD,OAAO,SAAS,MAAM,2BAA2B,CAAC;AAClD,OAAO,eAAe,MAAM,kCAAkC,CAAC;AAC/D,OAAO,eAAe,MAAM,kCAAkC,CAAC;AAC/D,OAAO,eAAe,MAAM,uBAAuB,CAAC;AACpD,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,gCAAgC,CAAC;AAE3E;;GAEG;AACH,MAAM,CAAC,OAAO,OAAO,cAAe,SAAQ,eAAe;IACzD,6BAA6B;IAC7B,SAAS,CAAC,MAAM,EAAE,oBAAoB,CAAC;IAEvC,iBAAiB;IACV,SAAS,CAAC,EAAE,SAAS,CAAC;IAE7B,uBAAuB;IAChB,eAAe,CAAC,EAAE,eAAe,CAAC;IAEzC,uBAAuB;IAChB,eAAe,CAAC,EAAE,eAAe,CAAC;gBAE7B,MAAM,EAAE,oBAAoB;cAcxB,YAAY,CAAC,EAC3B,aAAa,EACb,gBAAgB,EAChB,YAAY,EACZ,YAAY,GACb,EAAE;QACD,aAAa,EAAE,aAAa,CAAC;QAC7B,gBAAgB,EAAE,gBAAgB,CAAC;QACnC,YAAY,EAAE,YAAY,CAAC;QAC3B,YAAY,EAAE,YAAY,CAAC;KAC5B,GAAG,OAAO,CAAC,IAAI,CAAC;IAqHjB;;OAEG;cACa,YAAY,IAAI,OAAO,CAAC,IAAI,CAAC;IAY7C;;OAEG;cACa,SAAS,CAAC,EAAE,WAAW,EAAE,EAAE;QAAE,WAAW,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC,IAAI,CAAC;cAuBlE,SAAS,CAAC,EAAE,OAAO,EAAE,EAAE;QAAE,OAAO,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC,IAAI,CAAC;CAqB3E"}
@@ -1,12 +1,12 @@
1
1
  var __defProp = Object.defineProperty;
2
2
  var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
3
- import WebServer from "../webserver/webserver.js";
4
- import BaseApplication from "./base-application.js";
5
- import { Helper, Time } from "../util/index.js";
6
3
  import { Logger } from "../logger/index.js";
7
- import WebSocketServer from "../websocket/websocket-server.js";
8
- import WebSocketClient from "../websocket/websocket-client.js";
9
4
  import { WebServerPerformanceWrapper, WebSocketPerformanceWrapper } from "../performance/index.js";
5
+ import { Helper, Time } from "../util/index.js";
6
+ import WebServer from "../webserver/webserver.js";
7
+ import WebSocketClient from "../websocket/websocket-client.js";
8
+ import WebSocketServer from "../websocket/websocket-server.js";
9
+ import BaseApplication from "./base-application.js";
10
10
  class WebApplication extends BaseApplication {
11
11
  static {
12
12
  __name(this, "WebApplication");
@@ -112,9 +112,8 @@ class WebApplication extends BaseApplication {
112
112
  default: {
113
113
  if (!this.config.webSocket.type) {
114
114
  throw new Error("WebSocket type is required");
115
- } else {
116
- throw new Error(`WebSocket type is not supported (Type: ${this.config.webSocket.type})`);
117
115
  }
116
+ throw new Error(`WebSocket type is not supported (Type: ${this.config.webSocket.type})`);
118
117
  }
119
118
  }
120
119
  this.webSocketServer = webSocketServer;
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../src/application/web-application.ts"],
4
- "sourcesContent": ["import type RedisInstance from '../redis/instance.js';\nimport type DatabaseInstance from '../database/instance.js';\nimport WebServer from '../webserver/webserver.js';\nimport type QueueManager from '../queue/manager.js';\nimport BaseApplication from './base-application.js';\nimport type { WebApplicationConfig } from './web-application.interface.js';\nimport { Helper, Time } from '../util/index.js';\nimport { Logger } from '../logger/index.js';\nimport WebSocketServer from '../websocket/websocket-server.js';\nimport WebSocketClient from '../websocket/websocket-client.js';\nimport type EventManager from '../event/manager.js';\nimport { WebServerPerformanceWrapper, WebSocketPerformanceWrapper } from '../performance/index.js';\n\n/**\n * Application\n */\nexport default class WebApplication extends BaseApplication {\n /** Web application config */\n protected config: WebApplicationConfig;\n\n /** Web server */\n public webServer?: WebServer;\n\n /** WebSocket server */\n public webSocketServer?: WebSocketServer;\n\n /** WebSocket client */\n public webSocketClient?: WebSocketClient;\n\n constructor(config: WebApplicationConfig) {\n super(config);\n\n const defaultConfig: Partial<WebApplicationConfig> = {\n log: {\n startUp: true,\n },\n };\n\n const mergedConfig = Helper.defaultsDeep(config, defaultConfig);\n\n this.config = mergedConfig;\n }\n\n protected async startHandler({\n redisInstance,\n databaseInstance,\n queueManager,\n eventManager,\n }: {\n redisInstance: RedisInstance;\n databaseInstance: DatabaseInstance;\n queueManager: QueueManager;\n eventManager: EventManager;\n }): Promise<void> {\n if (this.config.webServer?.enabled) {\n const staticRoutes = this.config.webServer.routes;\n\n // Initialize web server\n this.webServer = new WebServer({\n applicationConfig: this.config,\n options: {\n host: this.config.webServer.host,\n port: this.config.webServer.port,\n controllersDirectory: this.config.webServer.controllersDirectory,\n routesDirectory: this.config.webServer.routesDirectory,\n cors: this.config.webServer.cors,\n security: this.config.webServer.security,\n log: this.config.webServer.log,\n debug: this.config.webServer.debug,\n },\n\n ...(Array.isArray(staticRoutes) ? { routes: staticRoutes } : {}),\n\n redisInstance,\n databaseInstance,\n queueManager,\n eventManager,\n lifecycleManager: this.lifecycle,\n });\n\n // Set up performance monitoring for web server\n if (this.performanceMonitor && this.config.performanceMonitoring?.monitorHttpRequests !== false) {\n WebServerPerformanceWrapper.setPerformanceMonitor(this.performanceMonitor);\n }\n\n // Load web server\n await this.webServer.load();\n\n // Start web server\n await this.webServer.start();\n\n // Register readiness check for web server\n this.lifecycle.addReadinessCheck('webserver', async () => {\n try {\n return this.webServer?.isReady() ?? false;\n } catch {\n return false;\n }\n });\n }\n\n if (this.config.webSocket?.enabled) {\n if (!this.webServer) {\n throw new Error('WebSocket requires web server to be enabled');\n }\n\n let webSocketServer: WebSocketServer | undefined;\n let webSocketClient: WebSocketClient | undefined;\n\n switch (this.config.webSocket.type) {\n case 'server': {\n // Initialize WebSocket server\n webSocketServer = new WebSocketServer({\n uniqueInstanceId: this.uniqueInstanceId,\n applicationConfig: this.config,\n options: this.config.webSocket,\n redisInstance,\n databaseInstance,\n queueManager,\n routes: this.config.webSocket.routes,\n workerId: this.workerId,\n });\n\n // Set up performance monitoring for WebSocket\n if (this.performanceMonitor && this.config.performanceMonitoring?.monitorWebSocketOperations !== false) {\n WebSocketPerformanceWrapper.setPerformanceMonitor(this.performanceMonitor);\n }\n\n // Load WebSocket client\n await webSocketServer.load();\n\n // Start WebSocket server\n await webSocketServer.start({\n fastifyServer: this.webServer.fastifyServer,\n });\n\n break;\n }\n case 'client': {\n // Initialize WebSocket client\n webSocketClient = new WebSocketClient({\n applicationConfig: this.config,\n options: this.config.webSocket,\n redisInstance,\n databaseInstance,\n queueManager,\n routes: this.config.webSocket.routes,\n });\n\n // Load WebSocket client\n await webSocketClient.load();\n\n // Connect to WebSocket server\n await webSocketClient.connectToServer();\n\n break;\n }\n default: {\n if (!this.config.webSocket.type) {\n throw new Error('WebSocket type is required');\n } else {\n throw new Error(`WebSocket type is not supported (Type: ${this.config.webSocket.type})`);\n }\n }\n }\n\n this.webSocketServer = webSocketServer;\n this.webSocketClient = webSocketClient;\n }\n }\n\n /**\n * Stop application callback\n */\n protected async stopCallback(): Promise<void> {\n if (this.webServer) {\n // Stop web server\n await this.webServer.stop();\n }\n\n if (this.webSocketServer) {\n // Stop WebSocket server\n await this.webSocketServer.stop();\n }\n }\n\n /**\n * Application started event\n */\n protected async onStarted({ startupTime }: { startupTime: number }): Promise<void> {\n if (this.config.log?.startUp) {\n Logger.info({\n message: 'Application started',\n meta: {\n 'Startup Time': Time.formatTime({\n time: startupTime,\n format: 's',\n numDecimals: 2,\n showUnit: true,\n }),\n },\n });\n }\n\n if (this.config.events?.onStarted) {\n this.config.events.onStarted({\n app: this,\n startupTime,\n });\n }\n }\n\n protected async onStopped({ runtime }: { runtime: number }): Promise<void> {\n if (this.config.log?.shutdown) {\n Logger.info({\n message: 'Application stopped',\n meta: {\n Name: this.config.name,\n 'Instance ID': this.config.instanceId,\n Runtime: Time.formatTime({\n time: runtime,\n format: 's',\n numDecimals: 2,\n showUnit: true,\n }),\n },\n });\n }\n\n if (this.config.events?.onStopped) {\n this.config.events.onStopped({ app: this, runtime });\n }\n }\n}\n"],
5
- "mappings": "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",
4
+ "sourcesContent": ["import type DatabaseInstance from '../database/instance.js';\nimport type EventManager from '../event/manager.js';\nimport { Logger } from '../logger/index.js';\nimport { WebServerPerformanceWrapper, WebSocketPerformanceWrapper } from '../performance/index.js';\nimport type QueueManager from '../queue/manager.js';\nimport type RedisInstance from '../redis/instance.js';\nimport { Helper, Time } from '../util/index.js';\nimport WebServer from '../webserver/webserver.js';\nimport WebSocketClient from '../websocket/websocket-client.js';\nimport WebSocketServer from '../websocket/websocket-server.js';\nimport BaseApplication from './base-application.js';\nimport type { WebApplicationConfig } from './web-application.interface.js';\n\n/**\n * Application\n */\nexport default class WebApplication extends BaseApplication {\n /** Web application config */\n protected config: WebApplicationConfig;\n\n /** Web server */\n public webServer?: WebServer;\n\n /** WebSocket server */\n public webSocketServer?: WebSocketServer;\n\n /** WebSocket client */\n public webSocketClient?: WebSocketClient;\n\n constructor(config: WebApplicationConfig) {\n super(config);\n\n const defaultConfig: Partial<WebApplicationConfig> = {\n log: {\n startUp: true,\n },\n };\n\n const mergedConfig = Helper.defaultsDeep(config, defaultConfig);\n\n this.config = mergedConfig;\n }\n\n protected async startHandler({\n redisInstance,\n databaseInstance,\n queueManager,\n eventManager,\n }: {\n redisInstance: RedisInstance;\n databaseInstance: DatabaseInstance;\n queueManager: QueueManager;\n eventManager: EventManager;\n }): Promise<void> {\n if (this.config.webServer?.enabled) {\n const staticRoutes = this.config.webServer.routes;\n\n // Initialize web server\n this.webServer = new WebServer({\n applicationConfig: this.config,\n options: {\n host: this.config.webServer.host,\n port: this.config.webServer.port,\n controllersDirectory: this.config.webServer.controllersDirectory,\n routesDirectory: this.config.webServer.routesDirectory,\n cors: this.config.webServer.cors,\n security: this.config.webServer.security,\n log: this.config.webServer.log,\n debug: this.config.webServer.debug,\n },\n\n ...(Array.isArray(staticRoutes) ? { routes: staticRoutes } : {}),\n\n redisInstance,\n databaseInstance,\n queueManager,\n eventManager,\n lifecycleManager: this.lifecycle,\n });\n\n // Set up performance monitoring for web server\n if (this.performanceMonitor && this.config.performanceMonitoring?.monitorHttpRequests !== false) {\n WebServerPerformanceWrapper.setPerformanceMonitor(this.performanceMonitor);\n }\n\n // Load web server\n await this.webServer.load();\n\n // Start web server\n await this.webServer.start();\n\n // Register readiness check for web server\n this.lifecycle.addReadinessCheck('webserver', async () => {\n try {\n return this.webServer?.isReady() ?? false;\n } catch {\n return false;\n }\n });\n }\n\n if (this.config.webSocket?.enabled) {\n if (!this.webServer) {\n throw new Error('WebSocket requires web server to be enabled');\n }\n\n let webSocketServer: WebSocketServer | undefined;\n let webSocketClient: WebSocketClient | undefined;\n\n switch (this.config.webSocket.type) {\n case 'server': {\n // Initialize WebSocket server\n webSocketServer = new WebSocketServer({\n uniqueInstanceId: this.uniqueInstanceId,\n applicationConfig: this.config,\n options: this.config.webSocket,\n redisInstance,\n databaseInstance,\n queueManager,\n routes: this.config.webSocket.routes,\n workerId: this.workerId,\n });\n\n // Set up performance monitoring for WebSocket\n if (this.performanceMonitor && this.config.performanceMonitoring?.monitorWebSocketOperations !== false) {\n WebSocketPerformanceWrapper.setPerformanceMonitor(this.performanceMonitor);\n }\n\n // Load WebSocket client\n await webSocketServer.load();\n\n // Start WebSocket server\n await webSocketServer.start({\n fastifyServer: this.webServer.fastifyServer,\n });\n\n break;\n }\n case 'client': {\n // Initialize WebSocket client\n webSocketClient = new WebSocketClient({\n applicationConfig: this.config,\n options: this.config.webSocket,\n redisInstance,\n databaseInstance,\n queueManager,\n routes: this.config.webSocket.routes,\n });\n\n // Load WebSocket client\n await webSocketClient.load();\n\n // Connect to WebSocket server\n await webSocketClient.connectToServer();\n\n break;\n }\n default: {\n if (!this.config.webSocket.type) {\n throw new Error('WebSocket type is required');\n }\n throw new Error(`WebSocket type is not supported (Type: ${this.config.webSocket.type})`);\n }\n }\n\n this.webSocketServer = webSocketServer;\n this.webSocketClient = webSocketClient;\n }\n }\n\n /**\n * Stop application callback\n */\n protected async stopCallback(): Promise<void> {\n if (this.webServer) {\n // Stop web server\n await this.webServer.stop();\n }\n\n if (this.webSocketServer) {\n // Stop WebSocket server\n await this.webSocketServer.stop();\n }\n }\n\n /**\n * Application started event\n */\n protected async onStarted({ startupTime }: { startupTime: number }): Promise<void> {\n if (this.config.log?.startUp) {\n Logger.info({\n message: 'Application started',\n meta: {\n 'Startup Time': Time.formatTime({\n time: startupTime,\n format: 's',\n numDecimals: 2,\n showUnit: true,\n }),\n },\n });\n }\n\n if (this.config.events?.onStarted) {\n this.config.events.onStarted({\n app: this,\n startupTime,\n });\n }\n }\n\n protected async onStopped({ runtime }: { runtime: number }): Promise<void> {\n if (this.config.log?.shutdown) {\n Logger.info({\n message: 'Application stopped',\n meta: {\n Name: this.config.name,\n 'Instance ID': this.config.instanceId,\n Runtime: Time.formatTime({\n time: runtime,\n format: 's',\n numDecimals: 2,\n showUnit: true,\n }),\n },\n });\n }\n\n if (this.config.events?.onStopped) {\n this.config.events.onStopped({ app: this, runtime });\n }\n }\n}\n"],
5
+ "mappings": "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",
6
6
  "names": []
7
7
  }
@@ -1,7 +1,7 @@
1
- import type RedisInstance from '../redis/instance.js';
2
1
  import type DatabaseInstance from '../database/instance.js';
3
- import type QueueManager from '../queue/manager.js';
4
2
  import type EventManager from '../event/manager.js';
3
+ import type QueueManager from '../queue/manager.js';
4
+ import type RedisInstance from '../redis/instance.js';
5
5
  import BaseApplication from './base-application.js';
6
6
  import type { WorkerApplicationConfig } from './worker-application.interface.js';
7
7
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"worker-application.d.ts","sourceRoot":"","sources":["../../src/application/worker-application.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,aAAa,MAAM,sBAAsB,CAAC;AACtD,OAAO,KAAK,gBAAgB,MAAM,yBAAyB,CAAC;AAC5D,OAAO,KAAK,YAAY,MAAM,qBAAqB,CAAC;AACpD,OAAO,KAAK,YAAY,MAAM,qBAAqB,CAAC;AACpD,OAAO,eAAe,MAAM,uBAAuB,CAAC;AACpD,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,mCAAmC,CAAC;AAIjF;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8BG;AACH,MAAM,CAAC,OAAO,OAAO,iBAAkB,SAAQ,eAAe;IAC5D,gCAAgC;IAChC,SAAS,CAAC,MAAM,EAAE,uBAAuB,CAAC;gBAE9B,MAAM,EAAE,uBAAuB;IAc3C;;;;;;OAMG;cACa,YAAY,CAAC,EAC3B,aAAa,EAAE,cAAc,EAC7B,gBAAgB,EAAE,iBAAiB,EACnC,YAAY,EAAE,aAAa,EAC3B,YAAY,EAAE,aAAa,GAC5B,EAAE;QACD,aAAa,EAAE,aAAa,CAAC;QAC7B,gBAAgB,EAAE,gBAAgB,GAAG,IAAI,CAAC;QAC1C,YAAY,EAAE,YAAY,CAAC;QAC3B,YAAY,CAAC,EAAE,YAAY,GAAG,IAAI,CAAC;KACpC,GAAG,OAAO,CAAC,IAAI,CAAC;IAWjB;;OAEG;cACa,YAAY,IAAI,OAAO,CAAC,IAAI,CAAC;IAO7C;;OAEG;cACa,SAAS,CAAC,EAAE,WAAW,EAAE,EAAE;QAAE,WAAW,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IA0BlF;;OAEG;cACa,SAAS,CAAC,EAAE,OAAO,EAAE,EAAE;QAAE,OAAO,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC,IAAI,CAAC;CAqB3E"}
1
+ {"version":3,"file":"worker-application.d.ts","sourceRoot":"","sources":["../../src/application/worker-application.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,gBAAgB,MAAM,yBAAyB,CAAC;AAC5D,OAAO,KAAK,YAAY,MAAM,qBAAqB,CAAC;AAEpD,OAAO,KAAK,YAAY,MAAM,qBAAqB,CAAC;AACpD,OAAO,KAAK,aAAa,MAAM,sBAAsB,CAAC;AAEtD,OAAO,eAAe,MAAM,uBAAuB,CAAC;AACpD,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,mCAAmC,CAAC;AAEjF;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8BG;AACH,MAAM,CAAC,OAAO,OAAO,iBAAkB,SAAQ,eAAe;IAC5D,gCAAgC;IAChC,SAAS,CAAC,MAAM,EAAE,uBAAuB,CAAC;gBAE9B,MAAM,EAAE,uBAAuB;IAc3C;;;;;;OAMG;cACa,YAAY,CAAC,EAC3B,aAAa,EAAE,cAAc,EAC7B,gBAAgB,EAAE,iBAAiB,EACnC,YAAY,EAAE,aAAa,EAC3B,YAAY,EAAE,aAAa,GAC5B,EAAE;QACD,aAAa,EAAE,aAAa,CAAC;QAC7B,gBAAgB,EAAE,gBAAgB,GAAG,IAAI,CAAC;QAC1C,YAAY,EAAE,YAAY,CAAC;QAC3B,YAAY,CAAC,EAAE,YAAY,GAAG,IAAI,CAAC;KACpC,GAAG,OAAO,CAAC,IAAI,CAAC;IAWjB;;OAEG;cACa,YAAY,IAAI,OAAO,CAAC,IAAI,CAAC;IAO7C;;OAEG;cACa,SAAS,CAAC,EAAE,WAAW,EAAE,EAAE;QAAE,WAAW,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IA0BlF;;OAEG;cACa,SAAS,CAAC,EAAE,OAAO,EAAE,EAAE;QAAE,OAAO,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC,IAAI,CAAC;CAqB3E"}
@@ -1,8 +1,8 @@
1
1
  var __defProp = Object.defineProperty;
2
2
  var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
3
- import BaseApplication from "./base-application.js";
4
- import { Helper, Time } from "../util/index.js";
5
3
  import { Logger } from "../logger/index.js";
4
+ import { Helper, Time } from "../util/index.js";
5
+ import BaseApplication from "./base-application.js";
6
6
  class WorkerApplication extends BaseApplication {
7
7
  static {
8
8
  __name(this, "WorkerApplication");
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../src/application/worker-application.ts"],
4
- "sourcesContent": ["import type RedisInstance from '../redis/instance.js';\nimport type DatabaseInstance from '../database/instance.js';\nimport type QueueManager from '../queue/manager.js';\nimport type EventManager from '../event/manager.js';\nimport BaseApplication from './base-application.js';\nimport type { WorkerApplicationConfig } from './worker-application.interface.js';\nimport { Helper, Time } from '../util/index.js';\nimport { Logger } from '../logger/index.js';\n\n/**\n * WorkerApplication\n *\n * A long-running application focused on queue processing.\n * Unlike WebApplication, it does not start a web server.\n * Unlike CommandApplication, it runs indefinitely.\n *\n * Workers are automatically started by QueueManager during initialization\n * (via BaseApplication.onBeforeStart()) with autorun: true. This class\n * simply provides the appropriate lifecycle management for long-running\n * queue worker processes.\n *\n * @example\n * ```typescript\n * import { WorkerApplication } from '@scpxl/nodejs-framework';\n *\n * const app = new WorkerApplication({\n * name: 'my-worker',\n * instanceId: 'worker-1',\n * rootDirectory: __dirname,\n * redis: { host: 'localhost', port: 6379 },\n * queue: {\n * processorsDirectory: './processors',\n * queues: [{ name: 'default', jobs: [{ id: 'my-job' }] }],\n * },\n * auth: { jwtSecretKey: 'secret' },\n * });\n *\n * await app.start(); // Runs indefinitely, processing jobs\n * ```\n */\nexport default class WorkerApplication extends BaseApplication {\n /** Worker application config */\n protected config: WorkerApplicationConfig;\n\n constructor(config: WorkerApplicationConfig) {\n super(config);\n\n const defaultConfig: Partial<WorkerApplicationConfig> = {\n log: {\n startUp: true,\n shutdown: true,\n },\n };\n\n const mergedConfig = Helper.defaultsDeep(config, defaultConfig);\n this.config = mergedConfig;\n }\n\n /**\n * Start handler - workers are already started by BaseApplication.onBeforeStart()\n * via QueueManager.registerQueues() which creates workers with autorun: true.\n *\n * This method intentionally does minimal work since the queue workers\n * are already running. It registers a readiness check for monitoring.\n */\n protected async startHandler({\n redisInstance: _redisInstance,\n databaseInstance: _databaseInstance,\n queueManager: _queueManager,\n eventManager: _eventManager,\n }: {\n redisInstance: RedisInstance;\n databaseInstance: DatabaseInstance | null;\n queueManager: QueueManager;\n eventManager?: EventManager | null;\n }): Promise<void> {\n // Workers are already running via QueueManager (autorun: true)\n // This handler exists for any additional worker-specific initialization\n\n // Register readiness check for queue processing\n this.lifecycle.addReadinessCheck('workers', async () => {\n // Workers are ready if queueManager exists and has registered queues\n return !!this.queueManager;\n });\n }\n\n /**\n * Stop callback - cleanup worker-specific resources\n */\n protected async stopCallback(): Promise<void> {\n Logger.info({ message: 'Worker application stopping' });\n\n // Note: QueueWorkers are closed automatically by BullMQ when the process exits\n // and Redis connections are cleaned up by BaseApplication shutdown hooks\n }\n\n /**\n * Application started event\n */\n protected async onStarted({ startupTime }: { startupTime: number }): Promise<void> {\n if (this.config.log?.startUp) {\n const queueCount = this.config.queue?.queues?.length ?? 0;\n\n Logger.info({\n message: 'Worker application started',\n meta: {\n 'Startup Time': Time.formatTime({\n time: startupTime,\n format: 's',\n numDecimals: 2,\n showUnit: true,\n }),\n 'Queues Registered': queueCount,\n },\n });\n }\n\n if (this.config.events?.onStarted) {\n this.config.events.onStarted({\n app: this,\n startupTime,\n });\n }\n }\n\n /**\n * Application stopped event\n */\n protected async onStopped({ runtime }: { runtime: number }): Promise<void> {\n if (this.config.log?.shutdown) {\n Logger.info({\n message: 'Worker application stopped',\n meta: {\n Name: this.config.name,\n 'Instance ID': this.config.instanceId,\n Runtime: Time.formatTime({\n time: runtime,\n format: 's',\n numDecimals: 2,\n showUnit: true,\n }),\n },\n });\n }\n\n if (this.config.events?.onStopped) {\n this.config.events.onStopped({ app: this, runtime });\n }\n }\n}\n"],
5
- "mappings": ";;AAIA,OAAO,qBAAqB;AAE5B,SAAS,QAAQ,YAAY;AAC7B,SAAS,cAAc;AAiCvB,MAAO,0BAAwC,gBAAgB;AAAA,EAxC/D,OAwC+D;AAAA;AAAA;AAAA;AAAA,EAEnD;AAAA,EAEV,YAAY,QAAiC;AAC3C,UAAM,MAAM;AAEZ,UAAM,gBAAkD;AAAA,MACtD,KAAK;AAAA,QACH,SAAS;AAAA,QACT,UAAU;AAAA,MACZ;AAAA,IACF;AAEA,UAAM,eAAe,OAAO,aAAa,QAAQ,aAAa;AAC9D,SAAK,SAAS;AAAA,EAChB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASA,MAAgB,aAAa;AAAA,IAC3B,eAAe;AAAA,IACf,kBAAkB;AAAA,IAClB,cAAc;AAAA,IACd,cAAc;AAAA,EAChB,GAKkB;AAKhB,SAAK,UAAU,kBAAkB,WAAW,YAAY;AAEtD,aAAO,CAAC,CAAC,KAAK;AAAA,IAChB,CAAC;AAAA,EACH;AAAA;AAAA;AAAA;AAAA,EAKA,MAAgB,eAA8B;AAC5C,WAAO,KAAK,EAAE,SAAS,8BAA8B,CAAC;AAAA,EAIxD;AAAA;AAAA;AAAA;AAAA,EAKA,MAAgB,UAAU,EAAE,YAAY,GAA2C;AACjF,QAAI,KAAK,OAAO,KAAK,SAAS;AAC5B,YAAM,aAAa,KAAK,OAAO,OAAO,QAAQ,UAAU;AAExD,aAAO,KAAK;AAAA,QACV,SAAS;AAAA,QACT,MAAM;AAAA,UACJ,gBAAgB,KAAK,WAAW;AAAA,YAC9B,MAAM;AAAA,YACN,QAAQ;AAAA,YACR,aAAa;AAAA,YACb,UAAU;AAAA,UACZ,CAAC;AAAA,UACD,qBAAqB;AAAA,QACvB;AAAA,MACF,CAAC;AAAA,IACH;AAEA,QAAI,KAAK,OAAO,QAAQ,WAAW;AACjC,WAAK,OAAO,OAAO,UAAU;AAAA,QAC3B,KAAK;AAAA,QACL;AAAA,MACF,CAAC;AAAA,IACH;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAKA,MAAgB,UAAU,EAAE,QAAQ,GAAuC;AACzE,QAAI,KAAK,OAAO,KAAK,UAAU;AAC7B,aAAO,KAAK;AAAA,QACV,SAAS;AAAA,QACT,MAAM;AAAA,UACJ,MAAM,KAAK,OAAO;AAAA,UAClB,eAAe,KAAK,OAAO;AAAA,UAC3B,SAAS,KAAK,WAAW;AAAA,YACvB,MAAM;AAAA,YACN,QAAQ;AAAA,YACR,aAAa;AAAA,YACb,UAAU;AAAA,UACZ,CAAC;AAAA,QACH;AAAA,MACF,CAAC;AAAA,IACH;AAEA,QAAI,KAAK,OAAO,QAAQ,WAAW;AACjC,WAAK,OAAO,OAAO,UAAU,EAAE,KAAK,MAAM,QAAQ,CAAC;AAAA,IACrD;AAAA,EACF;AACF;",
4
+ "sourcesContent": ["import type DatabaseInstance from '../database/instance.js';\nimport type EventManager from '../event/manager.js';\nimport { Logger } from '../logger/index.js';\nimport type QueueManager from '../queue/manager.js';\nimport type RedisInstance from '../redis/instance.js';\nimport { Helper, Time } from '../util/index.js';\nimport BaseApplication from './base-application.js';\nimport type { WorkerApplicationConfig } from './worker-application.interface.js';\n\n/**\n * WorkerApplication\n *\n * A long-running application focused on queue processing.\n * Unlike WebApplication, it does not start a web server.\n * Unlike CommandApplication, it runs indefinitely.\n *\n * Workers are automatically started by QueueManager during initialization\n * (via BaseApplication.onBeforeStart()) with autorun: true. This class\n * simply provides the appropriate lifecycle management for long-running\n * queue worker processes.\n *\n * @example\n * ```typescript\n * import { WorkerApplication } from '@scpxl/nodejs-framework';\n *\n * const app = new WorkerApplication({\n * name: 'my-worker',\n * instanceId: 'worker-1',\n * rootDirectory: __dirname,\n * redis: { host: 'localhost', port: 6379 },\n * queue: {\n * processorsDirectory: './processors',\n * queues: [{ name: 'default', jobs: [{ id: 'my-job' }] }],\n * },\n * auth: { jwtSecretKey: 'secret' },\n * });\n *\n * await app.start(); // Runs indefinitely, processing jobs\n * ```\n */\nexport default class WorkerApplication extends BaseApplication {\n /** Worker application config */\n protected config: WorkerApplicationConfig;\n\n constructor(config: WorkerApplicationConfig) {\n super(config);\n\n const defaultConfig: Partial<WorkerApplicationConfig> = {\n log: {\n startUp: true,\n shutdown: true,\n },\n };\n\n const mergedConfig = Helper.defaultsDeep(config, defaultConfig);\n this.config = mergedConfig;\n }\n\n /**\n * Start handler - workers are already started by BaseApplication.onBeforeStart()\n * via QueueManager.registerQueues() which creates workers with autorun: true.\n *\n * This method intentionally does minimal work since the queue workers\n * are already running. It registers a readiness check for monitoring.\n */\n protected async startHandler({\n redisInstance: _redisInstance,\n databaseInstance: _databaseInstance,\n queueManager: _queueManager,\n eventManager: _eventManager,\n }: {\n redisInstance: RedisInstance;\n databaseInstance: DatabaseInstance | null;\n queueManager: QueueManager;\n eventManager?: EventManager | null;\n }): Promise<void> {\n // Workers are already running via QueueManager (autorun: true)\n // This handler exists for any additional worker-specific initialization\n\n // Register readiness check for queue processing\n this.lifecycle.addReadinessCheck('workers', async () => {\n // Workers are ready if queueManager exists and has registered queues\n return !!this.queueManager;\n });\n }\n\n /**\n * Stop callback - cleanup worker-specific resources\n */\n protected async stopCallback(): Promise<void> {\n Logger.info({ message: 'Worker application stopping' });\n\n // Note: QueueWorkers are closed automatically by BullMQ when the process exits\n // and Redis connections are cleaned up by BaseApplication shutdown hooks\n }\n\n /**\n * Application started event\n */\n protected async onStarted({ startupTime }: { startupTime: number }): Promise<void> {\n if (this.config.log?.startUp) {\n const queueCount = this.config.queue?.queues?.length ?? 0;\n\n Logger.info({\n message: 'Worker application started',\n meta: {\n 'Startup Time': Time.formatTime({\n time: startupTime,\n format: 's',\n numDecimals: 2,\n showUnit: true,\n }),\n 'Queues Registered': queueCount,\n },\n });\n }\n\n if (this.config.events?.onStarted) {\n this.config.events.onStarted({\n app: this,\n startupTime,\n });\n }\n }\n\n /**\n * Application stopped event\n */\n protected async onStopped({ runtime }: { runtime: number }): Promise<void> {\n if (this.config.log?.shutdown) {\n Logger.info({\n message: 'Worker application stopped',\n meta: {\n Name: this.config.name,\n 'Instance ID': this.config.instanceId,\n Runtime: Time.formatTime({\n time: runtime,\n format: 's',\n numDecimals: 2,\n showUnit: true,\n }),\n },\n });\n }\n\n if (this.config.events?.onStopped) {\n this.config.events.onStopped({ app: this, runtime });\n }\n }\n}\n"],
5
+ "mappings": ";;AAEA,SAAS,cAAc;AAGvB,SAAS,QAAQ,YAAY;AAC7B,OAAO,qBAAqB;AAkC5B,MAAO,0BAAwC,gBAAgB;AAAA,EAxC/D,OAwC+D;AAAA;AAAA;AAAA;AAAA,EAEnD;AAAA,EAEV,YAAY,QAAiC;AAC3C,UAAM,MAAM;AAEZ,UAAM,gBAAkD;AAAA,MACtD,KAAK;AAAA,QACH,SAAS;AAAA,QACT,UAAU;AAAA,MACZ;AAAA,IACF;AAEA,UAAM,eAAe,OAAO,aAAa,QAAQ,aAAa;AAC9D,SAAK,SAAS;AAAA,EAChB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASA,MAAgB,aAAa;AAAA,IAC3B,eAAe;AAAA,IACf,kBAAkB;AAAA,IAClB,cAAc;AAAA,IACd,cAAc;AAAA,EAChB,GAKkB;AAKhB,SAAK,UAAU,kBAAkB,WAAW,YAAY;AAEtD,aAAO,CAAC,CAAC,KAAK;AAAA,IAChB,CAAC;AAAA,EACH;AAAA;AAAA;AAAA;AAAA,EAKA,MAAgB,eAA8B;AAC5C,WAAO,KAAK,EAAE,SAAS,8BAA8B,CAAC;AAAA,EAIxD;AAAA;AAAA;AAAA;AAAA,EAKA,MAAgB,UAAU,EAAE,YAAY,GAA2C;AACjF,QAAI,KAAK,OAAO,KAAK,SAAS;AAC5B,YAAM,aAAa,KAAK,OAAO,OAAO,QAAQ,UAAU;AAExD,aAAO,KAAK;AAAA,QACV,SAAS;AAAA,QACT,MAAM;AAAA,UACJ,gBAAgB,KAAK,WAAW;AAAA,YAC9B,MAAM;AAAA,YACN,QAAQ;AAAA,YACR,aAAa;AAAA,YACb,UAAU;AAAA,UACZ,CAAC;AAAA,UACD,qBAAqB;AAAA,QACvB;AAAA,MACF,CAAC;AAAA,IACH;AAEA,QAAI,KAAK,OAAO,QAAQ,WAAW;AACjC,WAAK,OAAO,OAAO,UAAU;AAAA,QAC3B,KAAK;AAAA,QACL;AAAA,MACF,CAAC;AAAA,IACH;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAKA,MAAgB,UAAU,EAAE,QAAQ,GAAuC;AACzE,QAAI,KAAK,OAAO,KAAK,UAAU;AAC7B,aAAO,KAAK;AAAA,QACV,SAAS;AAAA,QACT,MAAM;AAAA,UACJ,MAAM,KAAK,OAAO;AAAA,UAClB,eAAe,KAAK,OAAO;AAAA,UAC3B,SAAS,KAAK,WAAW;AAAA,YACvB,MAAM;AAAA,YACN,QAAQ;AAAA,YACR,aAAa;AAAA,YACb,UAAU;AAAA,UACZ,CAAC;AAAA,QACH;AAAA,MACF,CAAC;AAAA,IACH;AAEA,QAAI,KAAK,OAAO,QAAQ,WAAW;AACjC,WAAK,OAAO,OAAO,UAAU,EAAE,KAAK,MAAM,QAAQ,CAAC;AAAA,IACrD;AAAA,EACF;AACF;",
6
6
  "names": []
7
7
  }
@@ -1 +1 @@
1
- {"version":3,"file":"jwt.d.ts","sourceRoot":"","sources":["../../src/auth/jwt.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,UAAU,EAAsB,SAAS,EAAE,MAAM,MAAM,CAAC;AAEtE,MAAM,WAAW,mBAAmB;IAClC,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE,MAAM,CAAC;IACrB,SAAS,EAAE,IAAI,CAAC;CACjB;;mEAME;QACD,aAAa,EAAE,GAAG,CAAC;QACnB,OAAO,EAAE,UAAU,CAAC;QACpB,YAAY,EAAE,MAAM,CAAC;KACtB,KAAG,OAAO,CAAC,mBAAmB,CAAC;gEAqC7B;QACD,SAAS,EAAE,GAAG,CAAC;QACf,OAAO,EAAE,UAAU,CAAC;QACpB,cAAc,EAAE,MAAM,CAAC;KACxB,KAAG,OAAO,CAAC,MAAM,CAAC;2CAUiC;QAAE,YAAY,EAAE,MAAM,CAAA;KAAE,KAAG,OAAO,CAAC,GAAG,CAAC;;;AAI3F,wBAKE"}
1
+ {"version":3,"file":"jwt.d.ts","sourceRoot":"","sources":["../../src/auth/jwt.ts"],"names":[],"mappings":"AAAA,OAAO,EAAa,KAAK,UAAU,EAAE,SAAS,EAAW,MAAM,MAAM,CAAC;AAEtE,MAAM,WAAW,mBAAmB;IAClC,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE,MAAM,CAAC;IACrB,SAAS,EAAE,IAAI,CAAC;CACjB;;mEAME;QACD,aAAa,EAAE,GAAG,CAAC;QACnB,OAAO,EAAE,UAAU,CAAC;QACpB,YAAY,EAAE,MAAM,CAAC;KACtB,KAAG,OAAO,CAAC,mBAAmB,CAAC;gEAqC7B;QACD,SAAS,EAAE,GAAG,CAAC;QACf,OAAO,EAAE,UAAU,CAAC;QACpB,cAAc,EAAE,MAAM,CAAC;KACxB,KAAG,OAAO,CAAC,MAAM,CAAC;2CAUiC;QAAE,YAAY,EAAE,MAAM,CAAA;KAAE,KAAG,OAAO,CAAC,GAAG,CAAC;;;AAI3F,wBAKE"}
package/dist/auth/jwt.js CHANGED
@@ -1,6 +1,6 @@
1
1
  var __defProp = Object.defineProperty;
2
2
  var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
3
- import { SignJWT, importJWK, jwtVerify } from "jose";
3
+ import { importJWK, jwtVerify, SignJWT } from "jose";
4
4
  const generateJwtTokens = /* @__PURE__ */ __name(async ({
5
5
  entityManager,
6
6
  payload,
@@ -24,7 +24,7 @@ const generateJwtTokens = /* @__PURE__ */ __name(async ({
24
24
  type: "Bearer",
25
25
  accessToken: jwtAccessToken,
26
26
  refreshToken: jwtRefreshToken,
27
- expiresAt: new Date((/* @__PURE__ */ new Date()).getTime() + jwtAccessTokenLifetimeInHours * 60 * 60 * 1e3)
27
+ expiresAt: new Date(Date.now() + jwtAccessTokenLifetimeInHours * 60 * 60 * 1e3)
28
28
  };
29
29
  return jwtToken;
30
30
  }, "generateJwtTokens");
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../src/auth/jwt.ts"],
4
- "sourcesContent": ["import { type JWTPayload, SignJWT, importJWK, jwtVerify } from 'jose';\n\nexport interface AuthenticationToken {\n type: string;\n accessToken: string;\n refreshToken: string;\n expiresAt: Date;\n}\n\nconst generateJwtTokens = async ({\n entityManager,\n payload,\n jwtSecretKey,\n}: {\n entityManager: any;\n payload: JWTPayload;\n jwtSecretKey: string;\n}): Promise<AuthenticationToken> => {\n // Import JWT secret key\n const importedJwtSecretKey = await importJwtSecretKey({ jwtSecretKey });\n\n const jwtAccessTokenLifetimeInHours = 24;\n const jwtRefreshTokenLifetimeInHours = 30 * 24;\n\n // Generate JWT access token\n const jwtAccessToken = await generateJwtToken({\n secretKey: importedJwtSecretKey,\n payload,\n expirationTime: jwtAccessTokenLifetimeInHours,\n });\n\n // Generate JWT refresh token\n const jwtRefreshToken = await generateJwtToken({\n secretKey: importedJwtSecretKey,\n payload,\n expirationTime: jwtRefreshTokenLifetimeInHours,\n });\n\n await entityManager.flush();\n\n const jwtToken: AuthenticationToken = {\n type: 'Bearer',\n accessToken: jwtAccessToken,\n refreshToken: jwtRefreshToken,\n expiresAt: new Date(new Date().getTime() + jwtAccessTokenLifetimeInHours * 60 * 60 * 1000),\n };\n\n return jwtToken;\n};\n\nconst generateJwtToken = async ({\n secretKey,\n payload,\n expirationTime,\n}: {\n secretKey: any;\n payload: JWTPayload;\n expirationTime: number;\n}): Promise<string> => {\n const jwtToken = await new SignJWT(payload)\n .setProtectedHeader({ alg: 'HS256' })\n .setIssuedAt()\n .setExpirationTime(`${expirationTime}h`)\n .sign(secretKey);\n\n return jwtToken;\n};\n\nconst importJwtSecretKey = async ({ jwtSecretKey }: { jwtSecretKey: string }): Promise<any> => {\n return await importJWK({ kty: 'oct', k: jwtSecretKey });\n};\n\nexport default {\n generateJwtTokens,\n generateJwtToken,\n importJwtSecretKey,\n jwtVerify,\n};\n"],
5
- "mappings": ";;AAAA,SAA0B,SAAS,WAAW,iBAAiB;AAS/D,MAAM,oBAAoB,8BAAO;AAAA,EAC/B;AAAA,EACA;AAAA,EACA;AACF,MAIoC;AAElC,QAAM,uBAAuB,MAAM,mBAAmB,EAAE,aAAa,CAAC;AAEtE,QAAM,gCAAgC;AACtC,QAAM,iCAAiC,KAAK;AAG5C,QAAM,iBAAiB,MAAM,iBAAiB;AAAA,IAC5C,WAAW;AAAA,IACX;AAAA,IACA,gBAAgB;AAAA,EAClB,CAAC;AAGD,QAAM,kBAAkB,MAAM,iBAAiB;AAAA,IAC7C,WAAW;AAAA,IACX;AAAA,IACA,gBAAgB;AAAA,EAClB,CAAC;AAED,QAAM,cAAc,MAAM;AAE1B,QAAM,WAAgC;AAAA,IACpC,MAAM;AAAA,IACN,aAAa;AAAA,IACb,cAAc;AAAA,IACd,WAAW,IAAI,MAAK,oBAAI,KAAK,GAAE,QAAQ,IAAI,gCAAgC,KAAK,KAAK,GAAI;AAAA,EAC3F;AAEA,SAAO;AACT,GAvC0B;AAyC1B,MAAM,mBAAmB,8BAAO;AAAA,EAC9B;AAAA,EACA;AAAA,EACA;AACF,MAIuB;AACrB,QAAM,WAAW,MAAM,IAAI,QAAQ,OAAO,EACvC,mBAAmB,EAAE,KAAK,QAAQ,CAAC,EACnC,YAAY,EACZ,kBAAkB,GAAG,cAAc,GAAG,EACtC,KAAK,SAAS;AAEjB,SAAO;AACT,GAhByB;AAkBzB,MAAM,qBAAqB,8BAAO,EAAE,aAAa,MAA8C;AAC7F,SAAO,MAAM,UAAU,EAAE,KAAK,OAAO,GAAG,aAAa,CAAC;AACxD,GAF2B;AAI3B,IAAO,cAAQ;AAAA,EACb;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF;",
4
+ "sourcesContent": ["import { importJWK, type JWTPayload, jwtVerify, SignJWT } from 'jose';\n\nexport interface AuthenticationToken {\n type: string;\n accessToken: string;\n refreshToken: string;\n expiresAt: Date;\n}\n\nconst generateJwtTokens = async ({\n entityManager,\n payload,\n jwtSecretKey,\n}: {\n entityManager: any;\n payload: JWTPayload;\n jwtSecretKey: string;\n}): Promise<AuthenticationToken> => {\n // Import JWT secret key\n const importedJwtSecretKey = await importJwtSecretKey({ jwtSecretKey });\n\n const jwtAccessTokenLifetimeInHours = 24;\n const jwtRefreshTokenLifetimeInHours = 30 * 24;\n\n // Generate JWT access token\n const jwtAccessToken = await generateJwtToken({\n secretKey: importedJwtSecretKey,\n payload,\n expirationTime: jwtAccessTokenLifetimeInHours,\n });\n\n // Generate JWT refresh token\n const jwtRefreshToken = await generateJwtToken({\n secretKey: importedJwtSecretKey,\n payload,\n expirationTime: jwtRefreshTokenLifetimeInHours,\n });\n\n await entityManager.flush();\n\n const jwtToken: AuthenticationToken = {\n type: 'Bearer',\n accessToken: jwtAccessToken,\n refreshToken: jwtRefreshToken,\n expiresAt: new Date(Date.now() + jwtAccessTokenLifetimeInHours * 60 * 60 * 1000),\n };\n\n return jwtToken;\n};\n\nconst generateJwtToken = async ({\n secretKey,\n payload,\n expirationTime,\n}: {\n secretKey: any;\n payload: JWTPayload;\n expirationTime: number;\n}): Promise<string> => {\n const jwtToken = await new SignJWT(payload)\n .setProtectedHeader({ alg: 'HS256' })\n .setIssuedAt()\n .setExpirationTime(`${expirationTime}h`)\n .sign(secretKey);\n\n return jwtToken;\n};\n\nconst importJwtSecretKey = async ({ jwtSecretKey }: { jwtSecretKey: string }): Promise<any> => {\n return await importJWK({ kty: 'oct', k: jwtSecretKey });\n};\n\nexport default {\n generateJwtTokens,\n generateJwtToken,\n importJwtSecretKey,\n jwtVerify,\n};\n"],
5
+ "mappings": ";;AAAA,SAAS,WAA4B,WAAW,eAAe;AAS/D,MAAM,oBAAoB,8BAAO;AAAA,EAC/B;AAAA,EACA;AAAA,EACA;AACF,MAIoC;AAElC,QAAM,uBAAuB,MAAM,mBAAmB,EAAE,aAAa,CAAC;AAEtE,QAAM,gCAAgC;AACtC,QAAM,iCAAiC,KAAK;AAG5C,QAAM,iBAAiB,MAAM,iBAAiB;AAAA,IAC5C,WAAW;AAAA,IACX;AAAA,IACA,gBAAgB;AAAA,EAClB,CAAC;AAGD,QAAM,kBAAkB,MAAM,iBAAiB;AAAA,IAC7C,WAAW;AAAA,IACX;AAAA,IACA,gBAAgB;AAAA,EAClB,CAAC;AAED,QAAM,cAAc,MAAM;AAE1B,QAAM,WAAgC;AAAA,IACpC,MAAM;AAAA,IACN,aAAa;AAAA,IACb,cAAc;AAAA,IACd,WAAW,IAAI,KAAK,KAAK,IAAI,IAAI,gCAAgC,KAAK,KAAK,GAAI;AAAA,EACjF;AAEA,SAAO;AACT,GAvC0B;AAyC1B,MAAM,mBAAmB,8BAAO;AAAA,EAC9B;AAAA,EACA;AAAA,EACA;AACF,MAIuB;AACrB,QAAM,WAAW,MAAM,IAAI,QAAQ,OAAO,EACvC,mBAAmB,EAAE,KAAK,QAAQ,CAAC,EACnC,YAAY,EACZ,kBAAkB,GAAG,cAAc,GAAG,EACtC,KAAK,SAAS;AAEjB,SAAO;AACT,GAhByB;AAkBzB,MAAM,qBAAqB,8BAAO,EAAE,aAAa,MAA8C;AAC7F,SAAO,MAAM,UAAU,EAAE,KAAK,OAAO,GAAG,aAAa,CAAC;AACxD,GAF2B;AAI3B,IAAO,cAAQ;AAAA,EACb;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF;",
6
6
  "names": []
7
7
  }
@@ -1 +1 @@
1
- {"version":3,"file":"manager.d.ts","sourceRoot":"","sources":["../../src/cache/manager.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,YAAY,MAAM,qBAAqB,CAAC;AAIpD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8BG;AAEH,MAAM,WAAW,iBAAiB;IAChC,oDAAoD;IACpD,YAAY,EAAE,YAAY,CAAC;CAC5B;AAED,MAAM,CAAC,OAAO,OAAO,YAAY;IAC/B,OAAO,CAAC,YAAY,CAAe;IACnC,OAAO,CAAC,aAAa,CAAC,CAAgB;IACtC,OAAO,CAAC,oBAAoB,CAAC,CAAyB;gBAE1C,EAAE,YAAY,EAAE,EAAE,iBAAiB;IAI/C;;;OAGG;YACW,gBAAgB;IAyB9B;;;;;;;;;;;;;;OAcG;IACU,OAAO,CAAC,CAAC,EAAE,EAAE,GAAG,EAAE,EAAE;QAAE,GAAG,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC,CAAC,GAAG,IAAI,CAAC;IAkBpE;;;;;;;;;;;;;;;;;;;OAmBG;IACU,OAAO,CAAC,CAAC,EAAE,EAAE,GAAG,EAAE,KAAK,EAAE,QAAQ,EAAE,EAAE;QAAE,GAAG,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,CAAC,CAAC;QAAC,QAAQ,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IAK9G;;;;;;;;;OASG;IACU,SAAS,CAAC,EAAE,GAAG,EAAE,EAAE;QAAE,GAAG,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IAK/D;;OAEG;IACU,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;CAGpC"}
1
+ {"version":3,"file":"manager.d.ts","sourceRoot":"","sources":["../../src/cache/manager.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,YAAY,MAAM,qBAAqB,CAAC;AAEpD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8BG;AAEH,MAAM,WAAW,iBAAiB;IAChC,oDAAoD;IACpD,YAAY,EAAE,YAAY,CAAC;CAC5B;AAED,MAAM,CAAC,OAAO,OAAO,YAAY;IAC/B,OAAO,CAAC,YAAY,CAAe;IACnC,OAAO,CAAC,aAAa,CAAC,CAAgB;IACtC,OAAO,CAAC,oBAAoB,CAAC,CAAyB;gBAE1C,EAAE,YAAY,EAAE,EAAE,iBAAiB;IAI/C;;;OAGG;YACW,gBAAgB;IAyB9B;;;;;;;;;;;;;;OAcG;IACU,OAAO,CAAC,CAAC,EAAE,EAAE,GAAG,EAAE,EAAE;QAAE,GAAG,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC,CAAC,GAAG,IAAI,CAAC;IAkBpE;;;;;;;;;;;;;;;;;;;OAmBG;IACU,OAAO,CAAC,CAAC,EAAE,EAAE,GAAG,EAAE,KAAK,EAAE,QAAQ,EAAE,EAAE;QAAE,GAAG,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,CAAC,CAAC;QAAC,QAAQ,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IAK9G;;;;;;;;;OASG;IACU,SAAS,CAAC,EAAE,GAAG,EAAE,EAAE;QAAE,GAAG,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IAK/D;;OAEG;IACU,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;CAGpC"}
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../src/cache/manager.ts"],
4
- "sourcesContent": ["import type RedisManager from '../redis/manager.js';\nimport type RedisInstance from '../redis/instance.js';\nimport { safeSerializeError } from '../error/error-reporter.js';\n\n/**\n * CacheManager\n *\n * Thin abstraction over Redis for basic JSON value caching. Unifies all Redis\n * access through the framework RedisManager / RedisInstance (ioredis) so we\n * avoid maintaining a second client implementation (node-redis).\n *\n * Lazy acquisition: the first call to any cache method will either reuse an\n * existing connected RedisInstance (if already established by application\n * startup) or trigger a connection via RedisManager.\n *\n * **Important:** All values are stored as JSON strings. Only JSON-serializable\n * values are supported. Complex types like Date, Map, Set, RegExp, etc. will\n * lose their type information during serialization:\n * - `Date` objects \u2192 ISO strings\n * - `Map` / `Set` \u2192 empty objects `{}`\n * - `undefined` \u2192 omitted from objects, `null` in arrays\n * - Functions \u2192 omitted\n *\n * @example\n * ```typescript\n * // Supported types\n * await cache.setItem({ key: 'user', value: { id: 1, name: 'John' } }); // \u2713\n * await cache.setItem({ key: 'count', value: 42 }); // \u2713\n * await cache.setItem({ key: 'tags', value: ['a', 'b', 'c'] }); // \u2713\n *\n * // Unsupported types (will lose type information)\n * await cache.setItem({ key: 'date', value: new Date() }); // \u2192 ISO string\n * await cache.setItem({ key: 'map', value: new Map() }); // \u2192 {}\n * ```\n */\n\nexport interface CacheManagerProps {\n /** Redis manager (shared across the application) */\n redisManager: RedisManager;\n}\n\nexport default class CacheManager {\n private redisManager: RedisManager;\n private redisInstance?: RedisInstance;\n private redisInstancePromise?: Promise<RedisInstance>;\n\n constructor({ redisManager }: CacheManagerProps) {\n this.redisManager = redisManager;\n }\n\n /**\n * Ensure we have a connected RedisInstance. Reuses the first existing\n * instance if already connected by the application bootstrap.\n */\n private async getRedisInstance(): Promise<RedisInstance> {\n if (this.redisInstance) return this.redisInstance;\n if (this.redisInstancePromise) return this.redisInstancePromise;\n\n if (this.redisManager.instances.length > 0) {\n this.redisInstance = this.redisManager.instances[0];\n return this.redisInstance;\n }\n\n // Lazily connect if no instances yet (e.g., used before app onBeforeStart)\n this.redisInstancePromise = this.redisManager\n .connect()\n .then(instance => {\n this.redisInstance = instance;\n this.redisInstancePromise = undefined;\n return instance;\n })\n .catch(error => {\n this.redisInstancePromise = undefined;\n throw error;\n });\n\n return this.redisInstancePromise;\n }\n\n /**\n * Get a cached JSON value (deserialized) or null if not present.\n *\n * @param key - Cache key\n * @returns Deserialized value or null if not found\n * @throws {Error} If the cached value is not valid JSON\n *\n * @example\n * ```typescript\n * const user = await cache.getItem<{ id: number; name: string }>({ key: 'user:123' });\n * if (user) {\n * console.log(user.name);\n * }\n * ```\n */\n public async getItem<T>({ key }: { key: string }): Promise<T | null> {\n const instance = await this.getRedisInstance();\n const raw = await instance.getCache({ key });\n if (raw === null) return null;\n\n // Validate that we received a string (Redis should always return string or null)\n if (typeof raw !== 'string') {\n throw new Error(`Cache value for key \"${key}\" must be a string, got ${typeof raw}`);\n }\n\n try {\n return JSON.parse(raw) as T;\n } catch (error) {\n const errorMessage = error instanceof Error ? error.message : safeSerializeError(error);\n throw new Error(`Failed to parse cached value for key \"${key}\": ${errorMessage}`);\n }\n }\n\n /**\n * Set a JSON-serializable value. Optionally specify lifetime (seconds).\n *\n * @param key - Cache key\n * @param value - Value to cache (must be JSON-serializable)\n * @param lifetime - Optional expiration in seconds\n *\n * @example\n * ```typescript\n * // Cache with no expiration\n * await cache.setItem({ key: 'config', value: { theme: 'dark' } });\n *\n * // Cache with 1 hour expiration\n * await cache.setItem({\n * key: 'session:abc',\n * value: { userId: 123 },\n * lifetime: 3600\n * });\n * ```\n */\n public async setItem<T>({ key, value, lifetime }: { key: string; value: T; lifetime?: number }): Promise<void> {\n const instance = await this.getRedisInstance();\n await instance.setCache({ key, value, expiration: lifetime });\n }\n\n /**\n * Delete a cached value.\n *\n * @param key - Cache key to delete\n *\n * @example\n * ```typescript\n * await cache.clearItem({ key: 'session:abc' });\n * ```\n */\n public async clearItem({ key }: { key: string }): Promise<void> {\n const instance = await this.getRedisInstance();\n await instance.deleteCache({ key });\n }\n\n /**\n * No-op: lifecycle handles Redis disconnection globally.\n */\n public async close(): Promise<void> {\n // Intentionally empty; RedisManager handles disconnect.\n }\n}\n"],
5
- "mappings": ";;AAEA,SAAS,0BAA0B;AAuCnC,MAAO,aAA2B;AAAA,EAzClC,OAyCkC;AAAA;AAAA;AAAA,EACxB;AAAA,EACA;AAAA,EACA;AAAA,EAER,YAAY,EAAE,aAAa,GAAsB;AAC/C,SAAK,eAAe;AAAA,EACtB;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,MAAc,mBAA2C;AACvD,QAAI,KAAK,cAAe,QAAO,KAAK;AACpC,QAAI,KAAK,qBAAsB,QAAO,KAAK;AAE3C,QAAI,KAAK,aAAa,UAAU,SAAS,GAAG;AAC1C,WAAK,gBAAgB,KAAK,aAAa,UAAU,CAAC;AAClD,aAAO,KAAK;AAAA,IACd;AAGA,SAAK,uBAAuB,KAAK,aAC9B,QAAQ,EACR,KAAK,cAAY;AAChB,WAAK,gBAAgB;AACrB,WAAK,uBAAuB;AAC5B,aAAO;AAAA,IACT,CAAC,EACA,MAAM,WAAS;AACd,WAAK,uBAAuB;AAC5B,YAAM;AAAA,IACR,CAAC;AAEH,WAAO,KAAK;AAAA,EACd;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAiBA,MAAa,QAAW,EAAE,IAAI,GAAuC;AACnE,UAAM,WAAW,MAAM,KAAK,iBAAiB;AAC7C,UAAM,MAAM,MAAM,SAAS,SAAS,EAAE,IAAI,CAAC;AAC3C,QAAI,QAAQ,KAAM,QAAO;AAGzB,QAAI,OAAO,QAAQ,UAAU;AAC3B,YAAM,IAAI,MAAM,wBAAwB,GAAG,2BAA2B,OAAO,GAAG,EAAE;AAAA,IACpF;AAEA,QAAI;AACF,aAAO,KAAK,MAAM,GAAG;AAAA,IACvB,SAAS,OAAO;AACd,YAAM,eAAe,iBAAiB,QAAQ,MAAM,UAAU,mBAAmB,KAAK;AACtF,YAAM,IAAI,MAAM,yCAAyC,GAAG,MAAM,YAAY,EAAE;AAAA,IAClF;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAsBA,MAAa,QAAW,EAAE,KAAK,OAAO,SAAS,GAAgE;AAC7G,UAAM,WAAW,MAAM,KAAK,iBAAiB;AAC7C,UAAM,SAAS,SAAS,EAAE,KAAK,OAAO,YAAY,SAAS,CAAC;AAAA,EAC9D;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAYA,MAAa,UAAU,EAAE,IAAI,GAAmC;AAC9D,UAAM,WAAW,MAAM,KAAK,iBAAiB;AAC7C,UAAM,SAAS,YAAY,EAAE,IAAI,CAAC;AAAA,EACpC;AAAA;AAAA;AAAA;AAAA,EAKA,MAAa,QAAuB;AAAA,EAEpC;AACF;",
4
+ "sourcesContent": ["import { safeSerializeError } from '../error/error-reporter.js';\nimport type RedisInstance from '../redis/instance.js';\nimport type RedisManager from '../redis/manager.js';\n\n/**\n * CacheManager\n *\n * Thin abstraction over Redis for basic JSON value caching. Unifies all Redis\n * access through the framework RedisManager / RedisInstance (ioredis) so we\n * avoid maintaining a second client implementation (node-redis).\n *\n * Lazy acquisition: the first call to any cache method will either reuse an\n * existing connected RedisInstance (if already established by application\n * startup) or trigger a connection via RedisManager.\n *\n * **Important:** All values are stored as JSON strings. Only JSON-serializable\n * values are supported. Complex types like Date, Map, Set, RegExp, etc. will\n * lose their type information during serialization:\n * - `Date` objects \u2192 ISO strings\n * - `Map` / `Set` \u2192 empty objects `{}`\n * - `undefined` \u2192 omitted from objects, `null` in arrays\n * - Functions \u2192 omitted\n *\n * @example\n * ```typescript\n * // Supported types\n * await cache.setItem({ key: 'user', value: { id: 1, name: 'John' } }); // \u2713\n * await cache.setItem({ key: 'count', value: 42 }); // \u2713\n * await cache.setItem({ key: 'tags', value: ['a', 'b', 'c'] }); // \u2713\n *\n * // Unsupported types (will lose type information)\n * await cache.setItem({ key: 'date', value: new Date() }); // \u2192 ISO string\n * await cache.setItem({ key: 'map', value: new Map() }); // \u2192 {}\n * ```\n */\n\nexport interface CacheManagerProps {\n /** Redis manager (shared across the application) */\n redisManager: RedisManager;\n}\n\nexport default class CacheManager {\n private redisManager: RedisManager;\n private redisInstance?: RedisInstance;\n private redisInstancePromise?: Promise<RedisInstance>;\n\n constructor({ redisManager }: CacheManagerProps) {\n this.redisManager = redisManager;\n }\n\n /**\n * Ensure we have a connected RedisInstance. Reuses the first existing\n * instance if already connected by the application bootstrap.\n */\n private async getRedisInstance(): Promise<RedisInstance> {\n if (this.redisInstance) return this.redisInstance;\n if (this.redisInstancePromise) return this.redisInstancePromise;\n\n if (this.redisManager.instances.length > 0) {\n this.redisInstance = this.redisManager.instances[0];\n return this.redisInstance;\n }\n\n // Lazily connect if no instances yet (e.g., used before app onBeforeStart)\n this.redisInstancePromise = this.redisManager\n .connect()\n .then(instance => {\n this.redisInstance = instance;\n this.redisInstancePromise = undefined;\n return instance;\n })\n .catch(error => {\n this.redisInstancePromise = undefined;\n throw error;\n });\n\n return this.redisInstancePromise;\n }\n\n /**\n * Get a cached JSON value (deserialized) or null if not present.\n *\n * @param key - Cache key\n * @returns Deserialized value or null if not found\n * @throws {Error} If the cached value is not valid JSON\n *\n * @example\n * ```typescript\n * const user = await cache.getItem<{ id: number; name: string }>({ key: 'user:123' });\n * if (user) {\n * console.log(user.name);\n * }\n * ```\n */\n public async getItem<T>({ key }: { key: string }): Promise<T | null> {\n const instance = await this.getRedisInstance();\n const raw = await instance.getCache({ key });\n if (raw === null) return null;\n\n // Validate that we received a string (Redis should always return string or null)\n if (typeof raw !== 'string') {\n throw new Error(`Cache value for key \"${key}\" must be a string, got ${typeof raw}`);\n }\n\n try {\n return JSON.parse(raw) as T;\n } catch (error) {\n const errorMessage = error instanceof Error ? error.message : safeSerializeError(error);\n throw new Error(`Failed to parse cached value for key \"${key}\": ${errorMessage}`);\n }\n }\n\n /**\n * Set a JSON-serializable value. Optionally specify lifetime (seconds).\n *\n * @param key - Cache key\n * @param value - Value to cache (must be JSON-serializable)\n * @param lifetime - Optional expiration in seconds\n *\n * @example\n * ```typescript\n * // Cache with no expiration\n * await cache.setItem({ key: 'config', value: { theme: 'dark' } });\n *\n * // Cache with 1 hour expiration\n * await cache.setItem({\n * key: 'session:abc',\n * value: { userId: 123 },\n * lifetime: 3600\n * });\n * ```\n */\n public async setItem<T>({ key, value, lifetime }: { key: string; value: T; lifetime?: number }): Promise<void> {\n const instance = await this.getRedisInstance();\n await instance.setCache({ key, value, expiration: lifetime });\n }\n\n /**\n * Delete a cached value.\n *\n * @param key - Cache key to delete\n *\n * @example\n * ```typescript\n * await cache.clearItem({ key: 'session:abc' });\n * ```\n */\n public async clearItem({ key }: { key: string }): Promise<void> {\n const instance = await this.getRedisInstance();\n await instance.deleteCache({ key });\n }\n\n /**\n * No-op: lifecycle handles Redis disconnection globally.\n */\n public async close(): Promise<void> {\n // Intentionally empty; RedisManager handles disconnect.\n }\n}\n"],
5
+ "mappings": ";;AAAA,SAAS,0BAA0B;AAyCnC,MAAO,aAA2B;AAAA,EAzClC,OAyCkC;AAAA;AAAA;AAAA,EACxB;AAAA,EACA;AAAA,EACA;AAAA,EAER,YAAY,EAAE,aAAa,GAAsB;AAC/C,SAAK,eAAe;AAAA,EACtB;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,MAAc,mBAA2C;AACvD,QAAI,KAAK,cAAe,QAAO,KAAK;AACpC,QAAI,KAAK,qBAAsB,QAAO,KAAK;AAE3C,QAAI,KAAK,aAAa,UAAU,SAAS,GAAG;AAC1C,WAAK,gBAAgB,KAAK,aAAa,UAAU,CAAC;AAClD,aAAO,KAAK;AAAA,IACd;AAGA,SAAK,uBAAuB,KAAK,aAC9B,QAAQ,EACR,KAAK,cAAY;AAChB,WAAK,gBAAgB;AACrB,WAAK,uBAAuB;AAC5B,aAAO;AAAA,IACT,CAAC,EACA,MAAM,WAAS;AACd,WAAK,uBAAuB;AAC5B,YAAM;AAAA,IACR,CAAC;AAEH,WAAO,KAAK;AAAA,EACd;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAiBA,MAAa,QAAW,EAAE,IAAI,GAAuC;AACnE,UAAM,WAAW,MAAM,KAAK,iBAAiB;AAC7C,UAAM,MAAM,MAAM,SAAS,SAAS,EAAE,IAAI,CAAC;AAC3C,QAAI,QAAQ,KAAM,QAAO;AAGzB,QAAI,OAAO,QAAQ,UAAU;AAC3B,YAAM,IAAI,MAAM,wBAAwB,GAAG,2BAA2B,OAAO,GAAG,EAAE;AAAA,IACpF;AAEA,QAAI;AACF,aAAO,KAAK,MAAM,GAAG;AAAA,IACvB,SAAS,OAAO;AACd,YAAM,eAAe,iBAAiB,QAAQ,MAAM,UAAU,mBAAmB,KAAK;AACtF,YAAM,IAAI,MAAM,yCAAyC,GAAG,MAAM,YAAY,EAAE;AAAA,IAClF;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAsBA,MAAa,QAAW,EAAE,KAAK,OAAO,SAAS,GAAgE;AAC7G,UAAM,WAAW,MAAM,KAAK,iBAAiB;AAC7C,UAAM,SAAS,SAAS,EAAE,KAAK,OAAO,YAAY,SAAS,CAAC;AAAA,EAC9D;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAYA,MAAa,UAAU,EAAE,IAAI,GAAmC;AAC9D,UAAM,WAAW,MAAM,KAAK,iBAAiB;AAC7C,UAAM,SAAS,YAAY,EAAE,IAAI,CAAC;AAAA,EACpC;AAAA;AAAA;AAAA;AAAA,EAKA,MAAa,QAAuB;AAAA,EAEpC;AACF;",
6
6
  "names": []
7
7
  }