@scpxl/nodejs-framework 1.0.13

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 (411) hide show
  1. package/README.md +195 -0
  2. package/dist/api-requester/api-requester.d.ts +11 -0
  3. package/dist/api-requester/api-requester.d.ts.map +1 -0
  4. package/dist/api-requester/api-requester.js +59 -0
  5. package/dist/api-requester/api-requester.js.map +7 -0
  6. package/dist/api-requester/index.d.ts +2 -0
  7. package/dist/api-requester/index.d.ts.map +1 -0
  8. package/dist/api-requester/index.js +5 -0
  9. package/dist/api-requester/index.js.map +7 -0
  10. package/dist/application/base-application.d.ts +110 -0
  11. package/dist/application/base-application.d.ts.map +1 -0
  12. package/dist/application/base-application.interface.d.ts +161 -0
  13. package/dist/application/base-application.interface.d.ts.map +1 -0
  14. package/dist/application/base-application.interface.js +1 -0
  15. package/dist/application/base-application.interface.js.map +7 -0
  16. package/dist/application/base-application.js +350 -0
  17. package/dist/application/base-application.js.map +7 -0
  18. package/dist/application/command-application.d.ts +18 -0
  19. package/dist/application/command-application.d.ts.map +1 -0
  20. package/dist/application/command-application.interface.d.ts +26 -0
  21. package/dist/application/command-application.interface.d.ts.map +1 -0
  22. package/dist/application/command-application.interface.js +1 -0
  23. package/dist/application/command-application.interface.js.map +7 -0
  24. package/dist/application/command-application.js +110 -0
  25. package/dist/application/command-application.js.map +7 -0
  26. package/dist/application/index.d.ts +5 -0
  27. package/dist/application/index.d.ts.map +1 -0
  28. package/dist/application/index.js +7 -0
  29. package/dist/application/index.js.map +7 -0
  30. package/dist/application/web-application.d.ts +43 -0
  31. package/dist/application/web-application.d.ts.map +1 -0
  32. package/dist/application/web-application.interface.d.ts +21 -0
  33. package/dist/application/web-application.interface.d.ts.map +1 -0
  34. package/dist/application/web-application.interface.js +1 -0
  35. package/dist/application/web-application.interface.js.map +7 -0
  36. package/dist/application/web-application.js +176 -0
  37. package/dist/application/web-application.js.map +7 -0
  38. package/dist/auth/index.d.ts +2 -0
  39. package/dist/auth/index.d.ts.map +1 -0
  40. package/dist/auth/index.js +5 -0
  41. package/dist/auth/index.js.map +7 -0
  42. package/dist/auth/jwt.d.ts +25 -0
  43. package/dist/auth/jwt.d.ts.map +1 -0
  44. package/dist/auth/jwt.js +51 -0
  45. package/dist/auth/jwt.js.map +7 -0
  46. package/dist/cache/index.d.ts +2 -0
  47. package/dist/cache/index.d.ts.map +1 -0
  48. package/dist/cache/index.js +5 -0
  49. package/dist/cache/index.js.map +7 -0
  50. package/dist/cache/manager.d.ts +26 -0
  51. package/dist/cache/manager.d.ts.map +1 -0
  52. package/dist/cache/manager.js +54 -0
  53. package/dist/cache/manager.js.map +7 -0
  54. package/dist/cluster/cluster-manager.d.ts +15 -0
  55. package/dist/cluster/cluster-manager.d.ts.map +1 -0
  56. package/dist/cluster/cluster-manager.interface.d.ts +23 -0
  57. package/dist/cluster/cluster-manager.interface.d.ts.map +1 -0
  58. package/dist/cluster/cluster-manager.interface.js +1 -0
  59. package/dist/cluster/cluster-manager.interface.js.map +7 -0
  60. package/dist/cluster/cluster-manager.js +106 -0
  61. package/dist/cluster/cluster-manager.js.map +7 -0
  62. package/dist/cluster/index.d.ts +2 -0
  63. package/dist/cluster/index.d.ts.map +1 -0
  64. package/dist/cluster/index.js +13 -0
  65. package/dist/cluster/index.js.map +7 -0
  66. package/dist/command/command-manager.d.ts +19 -0
  67. package/dist/command/command-manager.d.ts.map +1 -0
  68. package/dist/command/command-manager.js +42 -0
  69. package/dist/command/command-manager.js.map +7 -0
  70. package/dist/command/command.d.ts +27 -0
  71. package/dist/command/command.d.ts.map +1 -0
  72. package/dist/command/command.interface.d.ts +11 -0
  73. package/dist/command/command.interface.d.ts.map +1 -0
  74. package/dist/command/command.interface.js +1 -0
  75. package/dist/command/command.interface.js.map +7 -0
  76. package/dist/command/command.js +37 -0
  77. package/dist/command/command.js.map +7 -0
  78. package/dist/command/index.d.ts +3 -0
  79. package/dist/command/index.d.ts.map +1 -0
  80. package/dist/command/index.js +7 -0
  81. package/dist/command/index.js.map +7 -0
  82. package/dist/database/dynamic-entity-form-decorators.d.ts +31 -0
  83. package/dist/database/dynamic-entity-form-decorators.d.ts.map +1 -0
  84. package/dist/database/dynamic-entity-form-decorators.js +62 -0
  85. package/dist/database/dynamic-entity-form-decorators.js.map +7 -0
  86. package/dist/database/dynamic-entity.d.ts +15 -0
  87. package/dist/database/dynamic-entity.d.ts.map +1 -0
  88. package/dist/database/dynamic-entity.js +42 -0
  89. package/dist/database/dynamic-entity.js.map +7 -0
  90. package/dist/database/index.d.ts +5 -0
  91. package/dist/database/index.d.ts.map +1 -0
  92. package/dist/database/index.js +12 -0
  93. package/dist/database/index.js.map +7 -0
  94. package/dist/database/instance.d.ts +36 -0
  95. package/dist/database/instance.d.ts.map +1 -0
  96. package/dist/database/instance.interface.d.ts +5 -0
  97. package/dist/database/instance.interface.d.ts.map +1 -0
  98. package/dist/database/instance.interface.js +1 -0
  99. package/dist/database/instance.interface.js.map +7 -0
  100. package/dist/database/instance.js +57 -0
  101. package/dist/database/instance.js.map +7 -0
  102. package/dist/database/manager.d.ts +27 -0
  103. package/dist/database/manager.d.ts.map +1 -0
  104. package/dist/database/manager.interface.d.ts +18 -0
  105. package/dist/database/manager.interface.d.ts.map +1 -0
  106. package/dist/database/manager.interface.js +1 -0
  107. package/dist/database/manager.interface.js.map +7 -0
  108. package/dist/database/manager.js +49 -0
  109. package/dist/database/manager.js.map +7 -0
  110. package/dist/event/controller/base.d.ts +23 -0
  111. package/dist/event/controller/base.d.ts.map +1 -0
  112. package/dist/event/controller/base.interface.d.ts +11 -0
  113. package/dist/event/controller/base.interface.d.ts.map +1 -0
  114. package/dist/event/controller/base.interface.js +1 -0
  115. package/dist/event/controller/base.interface.js.map +7 -0
  116. package/dist/event/controller/base.js +51 -0
  117. package/dist/event/controller/base.js.map +7 -0
  118. package/dist/event/index.d.ts +5 -0
  119. package/dist/event/index.d.ts.map +1 -0
  120. package/dist/event/index.js +9 -0
  121. package/dist/event/index.js.map +7 -0
  122. package/dist/event/manager.d.ts +21 -0
  123. package/dist/event/manager.d.ts.map +1 -0
  124. package/dist/event/manager.interface.d.ts +134 -0
  125. package/dist/event/manager.interface.d.ts.map +1 -0
  126. package/dist/event/manager.interface.js +1 -0
  127. package/dist/event/manager.interface.js.map +7 -0
  128. package/dist/event/manager.js +134 -0
  129. package/dist/event/manager.js.map +7 -0
  130. package/dist/index.d.ts +18 -0
  131. package/dist/index.d.ts.map +1 -0
  132. package/dist/index.js +23 -0
  133. package/dist/index.js.map +7 -0
  134. package/dist/logger/index.d.ts +2 -0
  135. package/dist/logger/index.d.ts.map +1 -0
  136. package/dist/logger/index.js +5 -0
  137. package/dist/logger/index.js.map +7 -0
  138. package/dist/logger/logger.d.ts +51 -0
  139. package/dist/logger/logger.d.ts.map +1 -0
  140. package/dist/logger/logger.interface.d.ts +2 -0
  141. package/dist/logger/logger.interface.d.ts.map +1 -0
  142. package/dist/logger/logger.interface.js +1 -0
  143. package/dist/logger/logger.interface.js.map +7 -0
  144. package/dist/logger/logger.js +168 -0
  145. package/dist/logger/logger.js.map +7 -0
  146. package/dist/performance/cache-performance.d.ts +58 -0
  147. package/dist/performance/cache-performance.d.ts.map +1 -0
  148. package/dist/performance/cache-performance.js +199 -0
  149. package/dist/performance/cache-performance.js.map +7 -0
  150. package/dist/performance/database-performance.d.ts +40 -0
  151. package/dist/performance/database-performance.d.ts.map +1 -0
  152. package/dist/performance/database-performance.js +132 -0
  153. package/dist/performance/database-performance.js.map +7 -0
  154. package/dist/performance/index.d.ts +7 -0
  155. package/dist/performance/index.d.ts.map +1 -0
  156. package/dist/performance/index.js +7 -0
  157. package/dist/performance/index.js.map +7 -0
  158. package/dist/performance/performance-monitor.d.ts +68 -0
  159. package/dist/performance/performance-monitor.d.ts.map +1 -0
  160. package/dist/performance/performance-monitor.js +270 -0
  161. package/dist/performance/performance-monitor.js.map +7 -0
  162. package/dist/performance/queue-performance.d.ts +46 -0
  163. package/dist/performance/queue-performance.d.ts.map +1 -0
  164. package/dist/performance/queue-performance.js +144 -0
  165. package/dist/performance/queue-performance.js.map +7 -0
  166. package/dist/performance/webserver-performance.d.ts +69 -0
  167. package/dist/performance/webserver-performance.d.ts.map +1 -0
  168. package/dist/performance/webserver-performance.js +164 -0
  169. package/dist/performance/webserver-performance.js.map +7 -0
  170. package/dist/performance/websocket-performance.d.ts +44 -0
  171. package/dist/performance/websocket-performance.d.ts.map +1 -0
  172. package/dist/performance/websocket-performance.js +139 -0
  173. package/dist/performance/websocket-performance.js.map +7 -0
  174. package/dist/queue/index.d.ts +6 -0
  175. package/dist/queue/index.d.ts.map +1 -0
  176. package/dist/queue/index.interface.d.ts +10 -0
  177. package/dist/queue/index.interface.d.ts.map +1 -0
  178. package/dist/queue/index.interface.js +1 -0
  179. package/dist/queue/index.interface.js.map +7 -0
  180. package/dist/queue/index.js +7 -0
  181. package/dist/queue/index.js.map +7 -0
  182. package/dist/queue/job.interface.d.ts +42 -0
  183. package/dist/queue/job.interface.d.ts.map +1 -0
  184. package/dist/queue/job.interface.js +1 -0
  185. package/dist/queue/job.interface.js.map +7 -0
  186. package/dist/queue/manager.d.ts +36 -0
  187. package/dist/queue/manager.d.ts.map +1 -0
  188. package/dist/queue/manager.interface.d.ts +18 -0
  189. package/dist/queue/manager.interface.d.ts.map +1 -0
  190. package/dist/queue/manager.interface.js +1 -0
  191. package/dist/queue/manager.interface.js.map +7 -0
  192. package/dist/queue/manager.js +244 -0
  193. package/dist/queue/manager.js.map +7 -0
  194. package/dist/queue/processor/base.d.ts +28 -0
  195. package/dist/queue/processor/base.d.ts.map +1 -0
  196. package/dist/queue/processor/base.js +46 -0
  197. package/dist/queue/processor/base.js.map +7 -0
  198. package/dist/queue/processor/processor.interface.d.ts +15 -0
  199. package/dist/queue/processor/processor.interface.d.ts.map +1 -0
  200. package/dist/queue/processor/processor.interface.js +1 -0
  201. package/dist/queue/processor/processor.interface.js.map +7 -0
  202. package/dist/queue/worker.d.ts +14 -0
  203. package/dist/queue/worker.d.ts.map +1 -0
  204. package/dist/queue/worker.interface.d.ts +13 -0
  205. package/dist/queue/worker.interface.d.ts.map +1 -0
  206. package/dist/queue/worker.interface.js +1 -0
  207. package/dist/queue/worker.interface.js.map +7 -0
  208. package/dist/queue/worker.js +72 -0
  209. package/dist/queue/worker.js.map +7 -0
  210. package/dist/redis/index.d.ts +3 -0
  211. package/dist/redis/index.d.ts.map +1 -0
  212. package/dist/redis/index.js +7 -0
  213. package/dist/redis/index.js.map +7 -0
  214. package/dist/redis/instance.d.ts +32 -0
  215. package/dist/redis/instance.d.ts.map +1 -0
  216. package/dist/redis/instance.interface.d.ts +9 -0
  217. package/dist/redis/instance.interface.d.ts.map +1 -0
  218. package/dist/redis/instance.interface.js +1 -0
  219. package/dist/redis/instance.interface.js.map +7 -0
  220. package/dist/redis/instance.js +92 -0
  221. package/dist/redis/instance.js.map +7 -0
  222. package/dist/redis/manager.d.ts +15 -0
  223. package/dist/redis/manager.d.ts.map +1 -0
  224. package/dist/redis/manager.interface.d.ts +8 -0
  225. package/dist/redis/manager.interface.d.ts.map +1 -0
  226. package/dist/redis/manager.interface.js +1 -0
  227. package/dist/redis/manager.interface.js.map +7 -0
  228. package/dist/redis/manager.js +65 -0
  229. package/dist/redis/manager.js.map +7 -0
  230. package/dist/services/aws/index.d.ts +2 -0
  231. package/dist/services/aws/index.d.ts.map +1 -0
  232. package/dist/services/aws/index.js +5 -0
  233. package/dist/services/aws/index.js.map +7 -0
  234. package/dist/services/aws/s3.d.ts +54 -0
  235. package/dist/services/aws/s3.d.ts.map +1 -0
  236. package/dist/services/aws/s3.interface.d.ts +14 -0
  237. package/dist/services/aws/s3.interface.d.ts.map +1 -0
  238. package/dist/services/aws/s3.interface.js +1 -0
  239. package/dist/services/aws/s3.interface.js.map +7 -0
  240. package/dist/services/aws/s3.js +236 -0
  241. package/dist/services/aws/s3.js.map +7 -0
  242. package/dist/services/index.d.ts +2 -0
  243. package/dist/services/index.d.ts.map +1 -0
  244. package/dist/services/index.js +2 -0
  245. package/dist/services/index.js.map +7 -0
  246. package/dist/util/file.d.ts +45 -0
  247. package/dist/util/file.d.ts.map +1 -0
  248. package/dist/util/file.js +105 -0
  249. package/dist/util/file.js.map +7 -0
  250. package/dist/util/helper.d.ts +37 -0
  251. package/dist/util/helper.d.ts.map +1 -0
  252. package/dist/util/helper.js +73 -0
  253. package/dist/util/helper.js.map +7 -0
  254. package/dist/util/image.d.ts +12 -0
  255. package/dist/util/image.d.ts.map +1 -0
  256. package/dist/util/image.js +35 -0
  257. package/dist/util/image.js.map +7 -0
  258. package/dist/util/index.d.ts +10 -0
  259. package/dist/util/index.d.ts.map +1 -0
  260. package/dist/util/index.js +21 -0
  261. package/dist/util/index.js.map +7 -0
  262. package/dist/util/loader.d.ts +19 -0
  263. package/dist/util/loader.d.ts.map +1 -0
  264. package/dist/util/loader.js +84 -0
  265. package/dist/util/loader.js.map +7 -0
  266. package/dist/util/num.d.ts +13 -0
  267. package/dist/util/num.d.ts.map +1 -0
  268. package/dist/util/num.js +16 -0
  269. package/dist/util/num.js.map +7 -0
  270. package/dist/util/os.d.ts +6 -0
  271. package/dist/util/os.d.ts.map +1 -0
  272. package/dist/util/os.js +32 -0
  273. package/dist/util/os.js.map +7 -0
  274. package/dist/util/str.d.ts +39 -0
  275. package/dist/util/str.d.ts.map +1 -0
  276. package/dist/util/str.js +34 -0
  277. package/dist/util/str.js.map +7 -0
  278. package/dist/util/time.d.ts +13 -0
  279. package/dist/util/time.d.ts.map +1 -0
  280. package/dist/util/time.interface.d.ts +12 -0
  281. package/dist/util/time.interface.d.ts.map +1 -0
  282. package/dist/util/time.interface.js +1 -0
  283. package/dist/util/time.interface.js.map +7 -0
  284. package/dist/util/time.js +90 -0
  285. package/dist/util/time.js.map +7 -0
  286. package/dist/util/url.d.ts +7 -0
  287. package/dist/util/url.d.ts.map +1 -0
  288. package/dist/util/url.js +12 -0
  289. package/dist/util/url.js.map +7 -0
  290. package/dist/webserver/controller/auth-middleware.d.ts +21 -0
  291. package/dist/webserver/controller/auth-middleware.d.ts.map +1 -0
  292. package/dist/webserver/controller/auth-middleware.js +33 -0
  293. package/dist/webserver/controller/auth-middleware.js.map +7 -0
  294. package/dist/webserver/controller/base.d.ts +39 -0
  295. package/dist/webserver/controller/base.d.ts.map +1 -0
  296. package/dist/webserver/controller/base.interface.d.ts +45 -0
  297. package/dist/webserver/controller/base.interface.d.ts.map +1 -0
  298. package/dist/webserver/controller/base.interface.js +1 -0
  299. package/dist/webserver/controller/base.interface.js.map +7 -0
  300. package/dist/webserver/controller/base.js +188 -0
  301. package/dist/webserver/controller/base.js.map +7 -0
  302. package/dist/webserver/controller/entity.d.ts +94 -0
  303. package/dist/webserver/controller/entity.d.ts.map +1 -0
  304. package/dist/webserver/controller/entity.js +361 -0
  305. package/dist/webserver/controller/entity.js.map +7 -0
  306. package/dist/webserver/controller/example-auth.d.ts +12 -0
  307. package/dist/webserver/controller/example-auth.d.ts.map +1 -0
  308. package/dist/webserver/controller/example-auth.js +53 -0
  309. package/dist/webserver/controller/example-auth.js.map +7 -0
  310. package/dist/webserver/controller/health.d.ts +8 -0
  311. package/dist/webserver/controller/health.d.ts.map +1 -0
  312. package/dist/webserver/controller/health.js +50 -0
  313. package/dist/webserver/controller/health.js.map +7 -0
  314. package/dist/webserver/index.d.ts +12 -0
  315. package/dist/webserver/index.d.ts.map +1 -0
  316. package/dist/webserver/index.js +19 -0
  317. package/dist/webserver/index.js.map +7 -0
  318. package/dist/webserver/util.d.ts +10 -0
  319. package/dist/webserver/util.d.ts.map +1 -0
  320. package/dist/webserver/util.js +63 -0
  321. package/dist/webserver/util.js.map +7 -0
  322. package/dist/webserver/webserver.d.ts +65 -0
  323. package/dist/webserver/webserver.d.ts.map +1 -0
  324. package/dist/webserver/webserver.interface.d.ts +118 -0
  325. package/dist/webserver/webserver.interface.d.ts.map +1 -0
  326. package/dist/webserver/webserver.interface.js +9 -0
  327. package/dist/webserver/webserver.interface.js.map +7 -0
  328. package/dist/webserver/webserver.js +347 -0
  329. package/dist/webserver/webserver.js.map +7 -0
  330. package/dist/websocket/controller/client/base.d.ts +12 -0
  331. package/dist/websocket/controller/client/base.d.ts.map +1 -0
  332. package/dist/websocket/controller/client/base.interface.d.ts +12 -0
  333. package/dist/websocket/controller/client/base.interface.d.ts.map +1 -0
  334. package/dist/websocket/controller/client/base.interface.js +1 -0
  335. package/dist/websocket/controller/client/base.interface.js.map +7 -0
  336. package/dist/websocket/controller/client/base.js +26 -0
  337. package/dist/websocket/controller/client/base.js.map +7 -0
  338. package/dist/websocket/controller/server/base.d.ts +13 -0
  339. package/dist/websocket/controller/server/base.d.ts.map +1 -0
  340. package/dist/websocket/controller/server/base.interface.d.ts +13 -0
  341. package/dist/websocket/controller/server/base.interface.d.ts.map +1 -0
  342. package/dist/websocket/controller/server/base.interface.js +1 -0
  343. package/dist/websocket/controller/server/base.interface.js.map +7 -0
  344. package/dist/websocket/controller/server/base.js +26 -0
  345. package/dist/websocket/controller/server/base.js.map +7 -0
  346. package/dist/websocket/controllers/client/system.d.ts +6 -0
  347. package/dist/websocket/controllers/client/system.d.ts.map +1 -0
  348. package/dist/websocket/controllers/client/system.js +14 -0
  349. package/dist/websocket/controllers/client/system.js.map +7 -0
  350. package/dist/websocket/controllers/server/system.d.ts +7 -0
  351. package/dist/websocket/controllers/server/system.d.ts.map +1 -0
  352. package/dist/websocket/controllers/server/system.js +87 -0
  353. package/dist/websocket/controllers/server/system.js.map +7 -0
  354. package/dist/websocket/index.d.ts +7 -0
  355. package/dist/websocket/index.d.ts.map +1 -0
  356. package/dist/websocket/index.js +11 -0
  357. package/dist/websocket/index.js.map +7 -0
  358. package/dist/websocket/routes/client/system.d.ts +3 -0
  359. package/dist/websocket/routes/client/system.d.ts.map +1 -0
  360. package/dist/websocket/routes/client/system.js +11 -0
  361. package/dist/websocket/routes/client/system.js.map +7 -0
  362. package/dist/websocket/routes/server/system.d.ts +3 -0
  363. package/dist/websocket/routes/server/system.d.ts.map +1 -0
  364. package/dist/websocket/routes/server/system.js +16 -0
  365. package/dist/websocket/routes/server/system.js.map +7 -0
  366. package/dist/websocket/utils.d.ts +9 -0
  367. package/dist/websocket/utils.d.ts.map +1 -0
  368. package/dist/websocket/utils.js +39 -0
  369. package/dist/websocket/utils.js.map +7 -0
  370. package/dist/websocket/websocket-base.d.ts +15 -0
  371. package/dist/websocket/websocket-base.d.ts.map +1 -0
  372. package/dist/websocket/websocket-base.js +104 -0
  373. package/dist/websocket/websocket-base.js.map +7 -0
  374. package/dist/websocket/websocket-client-manager.d.ts +53 -0
  375. package/dist/websocket/websocket-client-manager.d.ts.map +1 -0
  376. package/dist/websocket/websocket-client-manager.interface.d.ts +8 -0
  377. package/dist/websocket/websocket-client-manager.interface.d.ts.map +1 -0
  378. package/dist/websocket/websocket-client-manager.interface.js +1 -0
  379. package/dist/websocket/websocket-client-manager.interface.js.map +7 -0
  380. package/dist/websocket/websocket-client-manager.js +225 -0
  381. package/dist/websocket/websocket-client-manager.js.map +7 -0
  382. package/dist/websocket/websocket-client.d.ts +35 -0
  383. package/dist/websocket/websocket-client.d.ts.map +1 -0
  384. package/dist/websocket/websocket-client.interface.d.ts +14 -0
  385. package/dist/websocket/websocket-client.interface.d.ts.map +1 -0
  386. package/dist/websocket/websocket-client.interface.js +1 -0
  387. package/dist/websocket/websocket-client.interface.js.map +7 -0
  388. package/dist/websocket/websocket-client.js +158 -0
  389. package/dist/websocket/websocket-client.js.map +7 -0
  390. package/dist/websocket/websocket-room-manager.d.ts +32 -0
  391. package/dist/websocket/websocket-room-manager.d.ts.map +1 -0
  392. package/dist/websocket/websocket-room-manager.js +130 -0
  393. package/dist/websocket/websocket-room-manager.js.map +7 -0
  394. package/dist/websocket/websocket-server.d.ts +92 -0
  395. package/dist/websocket/websocket-server.d.ts.map +1 -0
  396. package/dist/websocket/websocket-server.interface.d.ts +16 -0
  397. package/dist/websocket/websocket-server.interface.d.ts.map +1 -0
  398. package/dist/websocket/websocket-server.interface.js +1 -0
  399. package/dist/websocket/websocket-server.interface.js.map +7 -0
  400. package/dist/websocket/websocket-server.js +686 -0
  401. package/dist/websocket/websocket-server.js.map +7 -0
  402. package/dist/websocket/websocket-service.d.ts +44 -0
  403. package/dist/websocket/websocket-service.d.ts.map +1 -0
  404. package/dist/websocket/websocket-service.js +99 -0
  405. package/dist/websocket/websocket-service.js.map +7 -0
  406. package/dist/websocket/websocket.interface.d.ts +119 -0
  407. package/dist/websocket/websocket.interface.d.ts.map +1 -0
  408. package/dist/websocket/websocket.interface.js +18 -0
  409. package/dist/websocket/websocket.interface.js.map +7 -0
  410. package/package.json +159 -0
  411. package/pxl.js +4 -0
@@ -0,0 +1,39 @@
1
+ /**
2
+ * Generate a unique id.
3
+ */
4
+ declare function generateUniqueId(): string;
5
+ /**
6
+ * Slugify string.
7
+ */
8
+ declare function slugify({ text }: {
9
+ text: string;
10
+ }): string;
11
+ /**
12
+ * Make text title case.
13
+ */
14
+ declare function titleCase({ text }: {
15
+ text: string;
16
+ }): string;
17
+ /**
18
+ * Remove file extension from filename.
19
+ */
20
+ declare function removeFileExtension({ filename }: {
21
+ filename: string;
22
+ }): string;
23
+ /**
24
+ * Get file extension from filename.
25
+ * @param filename
26
+ * @returns File extension
27
+ */
28
+ declare function getFileExtension({ filename }: {
29
+ filename: string;
30
+ }): string;
31
+ declare const _default: {
32
+ generateUniqueId: typeof generateUniqueId;
33
+ slugify: typeof slugify;
34
+ titleCase: typeof titleCase;
35
+ removeFileExtension: typeof removeFileExtension;
36
+ getFileExtension: typeof getFileExtension;
37
+ };
38
+ export default _default;
39
+ //# sourceMappingURL=str.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"str.d.ts","sourceRoot":"","sources":["../../src/util/str.ts"],"names":[],"mappings":"AAEA;;GAEG;AACH,iBAAS,gBAAgB,IAAI,MAAM,CAElC;AAED;;GAEG;AACH,iBAAS,OAAO,CAAC,EAAE,IAAI,EAAE,EAAE;IAAE,IAAI,EAAE,MAAM,CAAA;CAAE,GAAG,MAAM,CAQnD;AAED;;GAEG;AACH,iBAAS,SAAS,CAAC,EAAE,IAAI,EAAE,EAAE;IAAE,IAAI,EAAE,MAAM,CAAA;CAAE,GAAG,MAAM,CAMrD;AAED;;GAEG;AACH,iBAAS,mBAAmB,CAAC,EAAE,QAAQ,EAAE,EAAE;IAAE,QAAQ,EAAE,MAAM,CAAA;CAAE,GAAG,MAAM,CAEvE;AAED;;;;GAIG;AACH,iBAAS,gBAAgB,CAAC,EAAE,QAAQ,EAAE,EAAE;IAAE,QAAQ,EAAE,MAAM,CAAA;CAAE,GAAG,MAAM,CAEpE;;;;;;;;AAED,wBAME"}
@@ -0,0 +1,34 @@
1
+ var __defProp = Object.defineProperty;
2
+ var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
3
+ import { v4 as uuidv4 } from "uuid";
4
+ function generateUniqueId() {
5
+ return uuidv4();
6
+ }
7
+ __name(generateUniqueId, "generateUniqueId");
8
+ function slugify({ text }) {
9
+ return text.toLowerCase().replace(/\s+/g, "-").replace(/[^\w-]+/g, "").replace(/--+/g, "-").replace(/^-+/, "").replace(/-+$/, "");
10
+ }
11
+ __name(slugify, "slugify");
12
+ function titleCase({ text }) {
13
+ return text.toLowerCase().split(" ").map((word) => word.charAt(0).toUpperCase() + word.slice(1)).join(" ");
14
+ }
15
+ __name(titleCase, "titleCase");
16
+ function removeFileExtension({ filename }) {
17
+ return filename.replace(/\.[^/.]+$/, "");
18
+ }
19
+ __name(removeFileExtension, "removeFileExtension");
20
+ function getFileExtension({ filename }) {
21
+ return filename.split(".").pop() ?? "";
22
+ }
23
+ __name(getFileExtension, "getFileExtension");
24
+ var str_default = {
25
+ generateUniqueId,
26
+ slugify,
27
+ titleCase,
28
+ removeFileExtension,
29
+ getFileExtension
30
+ };
31
+ export {
32
+ str_default as default
33
+ };
34
+ //# sourceMappingURL=str.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../src/util/str.ts"],
4
+ "sourcesContent": ["import { v4 as uuidv4 } from 'uuid';\n\n/**\n * Generate a unique id.\n */\nfunction generateUniqueId(): string {\n return uuidv4();\n}\n\n/**\n * Slugify string.\n */\nfunction slugify({ text }: { text: string }): string {\n return text\n .toLowerCase()\n .replace(/\\s+/g, '-') // Replace spaces with -\n .replace(/[^\\w-]+/g, '') // Remove all non-word chars\n .replace(/--+/g, '-') // Replace multiple - with single -\n .replace(/^-+/, '') // Trim - from start of text\n .replace(/-+$/, ''); // Trim - from end of text\n}\n\n/**\n * Make text title case.\n */\nfunction titleCase({ text }: { text: string }): string {\n return text\n .toLowerCase()\n .split(' ')\n .map(word => word.charAt(0).toUpperCase() + word.slice(1))\n .join(' ');\n}\n\n/**\n * Remove file extension from filename.\n */\nfunction removeFileExtension({ filename }: { filename: string }): string {\n return filename.replace(/\\.[^/.]+$/, '');\n}\n\n/**\n * Get file extension from filename.\n * @param filename\n * @returns File extension\n */\nfunction getFileExtension({ filename }: { filename: string }): string {\n return filename.split('.').pop() ?? '';\n}\n\nexport default {\n generateUniqueId,\n slugify,\n titleCase,\n removeFileExtension,\n getFileExtension,\n};\n"],
5
+ "mappings": ";;AAAA,SAAS,MAAM,cAAc;AAK7B,SAAS,mBAA2B;AAClC,SAAO,OAAO;AAChB;AAFS;AAOT,SAAS,QAAQ,EAAE,KAAK,GAA6B;AACnD,SAAO,KACJ,YAAY,EACZ,QAAQ,QAAQ,GAAG,EACnB,QAAQ,YAAY,EAAE,EACtB,QAAQ,QAAQ,GAAG,EACnB,QAAQ,OAAO,EAAE,EACjB,QAAQ,OAAO,EAAE;AACtB;AARS;AAaT,SAAS,UAAU,EAAE,KAAK,GAA6B;AACrD,SAAO,KACJ,YAAY,EACZ,MAAM,GAAG,EACT,IAAI,UAAQ,KAAK,OAAO,CAAC,EAAE,YAAY,IAAI,KAAK,MAAM,CAAC,CAAC,EACxD,KAAK,GAAG;AACb;AANS;AAWT,SAAS,oBAAoB,EAAE,SAAS,GAAiC;AACvE,SAAO,SAAS,QAAQ,aAAa,EAAE;AACzC;AAFS;AAST,SAAS,iBAAiB,EAAE,SAAS,GAAiC;AACpE,SAAO,SAAS,MAAM,GAAG,EAAE,IAAI,KAAK;AACtC;AAFS;AAIT,IAAO,cAAQ;AAAA,EACb;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF;",
6
+ "names": []
7
+ }
@@ -0,0 +1,13 @@
1
+ import type { FormatRelativeTimeOptions, FormatTimeOptions } from './time.interface.js';
2
+ declare const _default: {
3
+ calculateElapsedTime: ({ startTime }: {
4
+ startTime: [number, number];
5
+ }) => number;
6
+ formatTime: ({ time, format, numDecimals, showUnit }: FormatTimeOptions) => string;
7
+ formatRelativeTime: ({ date, baseDate, includeSeconds, }: FormatRelativeTimeOptions) => string;
8
+ sleep: ({ seconds }: {
9
+ seconds: number;
10
+ }) => Promise<void>;
11
+ };
12
+ export default _default;
13
+ //# sourceMappingURL=time.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"time.d.ts","sourceRoot":"","sources":["../../src/util/time.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,yBAAyB,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;;0CAK3C;QAAE,SAAS,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;KAAE,KAAG,MAAM;0DAUJ,iBAAiB,KAAG,MAAM;8DA4CxG,yBAAyB,KAAG,MAAM;yBAbT;QAAE,OAAO,EAAE,MAAM,CAAA;KAAE,KAAG,OAAO,CAAC,IAAI,CAAC;;AA6D/D,wBAKE"}
@@ -0,0 +1,12 @@
1
+ export interface FormatTimeOptions {
2
+ time: number;
3
+ format?: 'ms' | 's' | 'auto' | 'hh:mm:ss';
4
+ numDecimals?: number;
5
+ showUnit?: boolean;
6
+ }
7
+ export interface FormatRelativeTimeOptions {
8
+ date: Date;
9
+ baseDate?: Date;
10
+ includeSeconds?: boolean;
11
+ }
12
+ //# sourceMappingURL=time.interface.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"time.interface.d.ts","sourceRoot":"","sources":["../../src/util/time.interface.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,iBAAiB;IAChC,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,CAAC,EAAE,IAAI,GAAG,GAAG,GAAG,MAAM,GAAG,UAAU,CAAC;IAC1C,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAED,MAAM,WAAW,yBAAyB;IACxC,IAAI,EAAE,IAAI,CAAC;IACX,QAAQ,CAAC,EAAE,IAAI,CAAC;IAChB,cAAc,CAAC,EAAE,OAAO,CAAC;CAC1B"}
@@ -0,0 +1 @@
1
+ //# sourceMappingURL=time.interface.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": [],
4
+ "sourcesContent": [],
5
+ "mappings": "",
6
+ "names": []
7
+ }
@@ -0,0 +1,90 @@
1
+ var __defProp = Object.defineProperty;
2
+ var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
3
+ const calculateElapsedTime = /* @__PURE__ */ __name(({ startTime }) => {
4
+ const endTime = process.hrtime(startTime);
5
+ const elapsedTime = (endTime[0] * 1e9 + endTime[1]) / 1e6;
6
+ return elapsedTime;
7
+ }, "calculateElapsedTime");
8
+ const formatTime = /* @__PURE__ */ __name(({ time, format = "auto", numDecimals = 0, showUnit = true }) => {
9
+ let formattedTime;
10
+ let formattedTimeText;
11
+ if (format === "s" || format === "auto" && time < 6e4) {
12
+ formattedTime = time / 1e3;
13
+ formattedTimeText = formattedTime.toFixed(numDecimals);
14
+ format = "s";
15
+ } else if (format === "hh:mm:ss" || format === "auto" && time >= 6e4) {
16
+ const totalSeconds = Math.floor(time / 1e3);
17
+ const hours = Math.floor(totalSeconds / 3600);
18
+ const minutes = Math.floor(totalSeconds % 3600 / 60);
19
+ const seconds = totalSeconds % 60;
20
+ formattedTimeText = `${String(hours).padStart(2, "0")}:${String(minutes).padStart(2, "0")}:${String(seconds).padStart(2, "0")}`;
21
+ return formattedTimeText;
22
+ } else {
23
+ formattedTime = time;
24
+ formattedTimeText = formattedTime.toFixed(numDecimals);
25
+ format = "ms";
26
+ }
27
+ const unit = format === "ms" || format === "s" ? format : "";
28
+ return showUnit ? `${formattedTimeText}${unit}` : formattedTimeText;
29
+ }, "formatTime");
30
+ const sleep = /* @__PURE__ */ __name(({ seconds }) => {
31
+ return new Promise((resolve) => {
32
+ setTimeout(resolve, seconds * 1e3);
33
+ });
34
+ }, "sleep");
35
+ const formatRelativeTime = /* @__PURE__ */ __name(({
36
+ date,
37
+ baseDate = /* @__PURE__ */ new Date(),
38
+ includeSeconds = false
39
+ }) => {
40
+ const diffInMs = date.getTime() - baseDate.getTime();
41
+ const diffInSeconds = Math.abs(Math.floor(diffInMs / 1e3));
42
+ const isFuture = diffInMs > 0;
43
+ const minute = 60;
44
+ const hour = minute * 60;
45
+ const day = hour * 24;
46
+ const week = day * 7;
47
+ const month = day * 30;
48
+ const year = day * 365;
49
+ let value;
50
+ let unit;
51
+ if (diffInSeconds < minute) {
52
+ if (!includeSeconds && diffInSeconds < 60) {
53
+ return "just now";
54
+ }
55
+ value = diffInSeconds;
56
+ unit = value === 1 ? "second" : "seconds";
57
+ } else if (diffInSeconds < hour) {
58
+ value = Math.floor(diffInSeconds / minute);
59
+ unit = value === 1 ? "minute" : "minutes";
60
+ } else if (diffInSeconds < day) {
61
+ value = Math.floor(diffInSeconds / hour);
62
+ unit = value === 1 ? "hour" : "hours";
63
+ } else if (diffInSeconds < week) {
64
+ value = Math.floor(diffInSeconds / day);
65
+ unit = value === 1 ? "day" : "days";
66
+ } else if (diffInSeconds < month) {
67
+ value = Math.floor(diffInSeconds / week);
68
+ unit = value === 1 ? "week" : "weeks";
69
+ } else if (diffInSeconds < year) {
70
+ value = Math.floor(diffInSeconds / month);
71
+ unit = value === 1 ? "month" : "months";
72
+ } else {
73
+ value = Math.floor(diffInSeconds / year);
74
+ unit = value === 1 ? "year" : "years";
75
+ }
76
+ if (isFuture) {
77
+ return `in ${value} ${unit}`;
78
+ }
79
+ return `${value} ${unit} ago`;
80
+ }, "formatRelativeTime");
81
+ var time_default = {
82
+ calculateElapsedTime,
83
+ formatTime,
84
+ formatRelativeTime,
85
+ sleep
86
+ };
87
+ export {
88
+ time_default as default
89
+ };
90
+ //# sourceMappingURL=time.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../src/util/time.ts"],
4
+ "sourcesContent": ["import type { FormatRelativeTimeOptions, FormatTimeOptions } from './time.interface.js';\n\n/**\n * Calculate elapsed time in milliseconds.\n */\nconst calculateElapsedTime = ({ startTime }: { startTime: [number, number] }): number => {\n const endTime = process.hrtime(startTime);\n const elapsedTime = (endTime[0] * 1e9 + endTime[1]) / 1e6;\n\n return elapsedTime;\n};\n\n/**\n * Format time.\n */\nconst formatTime = ({ time, format = 'auto', numDecimals = 0, showUnit = true }: FormatTimeOptions): string => {\n let formattedTime: number;\n let formattedTimeText: string;\n\n if (format === 's' || (format === 'auto' && time < 60000)) {\n formattedTime = time / 1000;\n formattedTimeText = formattedTime.toFixed(numDecimals);\n format = 's'; // Ensure the unit is correctly displayed\n } else if (format === 'hh:mm:ss' || (format === 'auto' && time >= 60000)) {\n const totalSeconds = Math.floor(time / 1000);\n const hours = Math.floor(totalSeconds / 3600);\n const minutes = Math.floor((totalSeconds % 3600) / 60);\n const seconds = totalSeconds % 60;\n\n formattedTimeText = `${String(hours).padStart(2, '0')}:${String(minutes).padStart(2, '0')}:${String(seconds).padStart(2, '0')}`;\n\n return formattedTimeText; // No need to append unit for 'hh:mm:ss'\n } else {\n formattedTime = time;\n formattedTimeText = formattedTime.toFixed(numDecimals);\n format = 'ms'; // Ensure the unit is correctly displayed\n }\n\n const unit = format === 'ms' || format === 's' ? format : '';\n\n return showUnit ? `${formattedTimeText}${unit}` : formattedTimeText;\n};\n\n/**\n * Sleep for a specified number of seconds.\n */\nconst sleep = ({ seconds }: { seconds: number }): Promise<void> => {\n return new Promise(resolve => {\n setTimeout(resolve, seconds * 1000);\n });\n};\n\n/**\n * Format a date as relative time (e.g., \"in 3 minutes\", \"2 hours ago\").\n */\nconst formatRelativeTime = ({\n date,\n baseDate = new Date(),\n includeSeconds = false,\n}: FormatRelativeTimeOptions): string => {\n const diffInMs = date.getTime() - baseDate.getTime();\n const diffInSeconds = Math.abs(Math.floor(diffInMs / 1000));\n const isFuture = diffInMs > 0;\n\n // Time units in seconds\n const minute = 60;\n const hour = minute * 60;\n const day = hour * 24;\n const week = day * 7;\n const month = day * 30; // Approximate\n const year = day * 365; // Approximate\n\n let value: number;\n let unit: string;\n\n if (diffInSeconds < minute) {\n if (!includeSeconds && diffInSeconds < 60) {\n return 'just now';\n }\n value = diffInSeconds;\n unit = value === 1 ? 'second' : 'seconds';\n } else if (diffInSeconds < hour) {\n value = Math.floor(diffInSeconds / minute);\n unit = value === 1 ? 'minute' : 'minutes';\n } else if (diffInSeconds < day) {\n value = Math.floor(diffInSeconds / hour);\n unit = value === 1 ? 'hour' : 'hours';\n } else if (diffInSeconds < week) {\n value = Math.floor(diffInSeconds / day);\n unit = value === 1 ? 'day' : 'days';\n } else if (diffInSeconds < month) {\n value = Math.floor(diffInSeconds / week);\n unit = value === 1 ? 'week' : 'weeks';\n } else if (diffInSeconds < year) {\n value = Math.floor(diffInSeconds / month);\n unit = value === 1 ? 'month' : 'months';\n } else {\n value = Math.floor(diffInSeconds / year);\n unit = value === 1 ? 'year' : 'years';\n }\n\n if (isFuture) {\n return `in ${value} ${unit}`;\n }\n return `${value} ${unit} ago`;\n};\n\nexport default {\n calculateElapsedTime,\n formatTime,\n formatRelativeTime,\n sleep,\n};\n"],
5
+ "mappings": ";;AAKA,MAAM,uBAAuB,wBAAC,EAAE,UAAU,MAA+C;AACvF,QAAM,UAAU,QAAQ,OAAO,SAAS;AACxC,QAAM,eAAe,QAAQ,CAAC,IAAI,MAAM,QAAQ,CAAC,KAAK;AAEtD,SAAO;AACT,GAL6B;AAU7B,MAAM,aAAa,wBAAC,EAAE,MAAM,SAAS,QAAQ,cAAc,GAAG,WAAW,KAAK,MAAiC;AAC7G,MAAI;AACJ,MAAI;AAEJ,MAAI,WAAW,OAAQ,WAAW,UAAU,OAAO,KAAQ;AACzD,oBAAgB,OAAO;AACvB,wBAAoB,cAAc,QAAQ,WAAW;AACrD,aAAS;AAAA,EACX,WAAW,WAAW,cAAe,WAAW,UAAU,QAAQ,KAAQ;AACxE,UAAM,eAAe,KAAK,MAAM,OAAO,GAAI;AAC3C,UAAM,QAAQ,KAAK,MAAM,eAAe,IAAI;AAC5C,UAAM,UAAU,KAAK,MAAO,eAAe,OAAQ,EAAE;AACrD,UAAM,UAAU,eAAe;AAE/B,wBAAoB,GAAG,OAAO,KAAK,EAAE,SAAS,GAAG,GAAG,CAAC,IAAI,OAAO,OAAO,EAAE,SAAS,GAAG,GAAG,CAAC,IAAI,OAAO,OAAO,EAAE,SAAS,GAAG,GAAG,CAAC;AAE7H,WAAO;AAAA,EACT,OAAO;AACL,oBAAgB;AAChB,wBAAoB,cAAc,QAAQ,WAAW;AACrD,aAAS;AAAA,EACX;AAEA,QAAM,OAAO,WAAW,QAAQ,WAAW,MAAM,SAAS;AAE1D,SAAO,WAAW,GAAG,iBAAiB,GAAG,IAAI,KAAK;AACpD,GA1BmB;AA+BnB,MAAM,QAAQ,wBAAC,EAAE,QAAQ,MAA0C;AACjE,SAAO,IAAI,QAAQ,aAAW;AAC5B,eAAW,SAAS,UAAU,GAAI;AAAA,EACpC,CAAC;AACH,GAJc;AASd,MAAM,qBAAqB,wBAAC;AAAA,EAC1B;AAAA,EACA,WAAW,oBAAI,KAAK;AAAA,EACpB,iBAAiB;AACnB,MAAyC;AACvC,QAAM,WAAW,KAAK,QAAQ,IAAI,SAAS,QAAQ;AACnD,QAAM,gBAAgB,KAAK,IAAI,KAAK,MAAM,WAAW,GAAI,CAAC;AAC1D,QAAM,WAAW,WAAW;AAG5B,QAAM,SAAS;AACf,QAAM,OAAO,SAAS;AACtB,QAAM,MAAM,OAAO;AACnB,QAAM,OAAO,MAAM;AACnB,QAAM,QAAQ,MAAM;AACpB,QAAM,OAAO,MAAM;AAEnB,MAAI;AACJ,MAAI;AAEJ,MAAI,gBAAgB,QAAQ;AAC1B,QAAI,CAAC,kBAAkB,gBAAgB,IAAI;AACzC,aAAO;AAAA,IACT;AACA,YAAQ;AACR,WAAO,UAAU,IAAI,WAAW;AAAA,EAClC,WAAW,gBAAgB,MAAM;AAC/B,YAAQ,KAAK,MAAM,gBAAgB,MAAM;AACzC,WAAO,UAAU,IAAI,WAAW;AAAA,EAClC,WAAW,gBAAgB,KAAK;AAC9B,YAAQ,KAAK,MAAM,gBAAgB,IAAI;AACvC,WAAO,UAAU,IAAI,SAAS;AAAA,EAChC,WAAW,gBAAgB,MAAM;AAC/B,YAAQ,KAAK,MAAM,gBAAgB,GAAG;AACtC,WAAO,UAAU,IAAI,QAAQ;AAAA,EAC/B,WAAW,gBAAgB,OAAO;AAChC,YAAQ,KAAK,MAAM,gBAAgB,IAAI;AACvC,WAAO,UAAU,IAAI,SAAS;AAAA,EAChC,WAAW,gBAAgB,MAAM;AAC/B,YAAQ,KAAK,MAAM,gBAAgB,KAAK;AACxC,WAAO,UAAU,IAAI,UAAU;AAAA,EACjC,OAAO;AACL,YAAQ,KAAK,MAAM,gBAAgB,IAAI;AACvC,WAAO,UAAU,IAAI,SAAS;AAAA,EAChC;AAEA,MAAI,UAAU;AACZ,WAAO,MAAM,KAAK,IAAI,IAAI;AAAA,EAC5B;AACA,SAAO,GAAG,KAAK,IAAI,IAAI;AACzB,GAlD2B;AAoD3B,IAAO,eAAQ;AAAA,EACb;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF;",
6
+ "names": []
7
+ }
@@ -0,0 +1,7 @@
1
+ declare const _default: {
2
+ buildQueryString: (params: {
3
+ [key: string]: string | number | boolean;
4
+ }) => string;
5
+ };
6
+ export default _default;
7
+ //# sourceMappingURL=url.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"url.d.ts","sourceRoot":"","sources":["../../src/util/url.ts"],"names":[],"mappings":";+BAAkC;QAAE,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,CAAA;KAAE,KAAG,MAAM;;AAOvF,wBAEE"}
@@ -0,0 +1,12 @@
1
+ var __defProp = Object.defineProperty;
2
+ var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
3
+ const buildQueryString = /* @__PURE__ */ __name((params) => {
4
+ return Object.keys(params).filter((key) => params[key] !== void 0 && params[key] !== "").map((key) => `${encodeURIComponent(key)}=${encodeURIComponent(params[key])}`).join("&");
5
+ }, "buildQueryString");
6
+ var url_default = {
7
+ buildQueryString
8
+ };
9
+ export {
10
+ url_default as default
11
+ };
12
+ //# sourceMappingURL=url.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../src/util/url.ts"],
4
+ "sourcesContent": ["const buildQueryString = (params: { [key: string]: string | number | boolean }): string => {\n return Object.keys(params)\n .filter(key => params[key] !== undefined && params[key] !== '')\n .map(key => `${encodeURIComponent(key)}=${encodeURIComponent(params[key])}`)\n .join('&');\n};\n\nexport default {\n buildQueryString,\n};\n"],
5
+ "mappings": ";;AAAA,MAAM,mBAAmB,wBAAC,WAAiE;AACzF,SAAO,OAAO,KAAK,MAAM,EACtB,OAAO,SAAO,OAAO,GAAG,MAAM,UAAa,OAAO,GAAG,MAAM,EAAE,EAC7D,IAAI,SAAO,GAAG,mBAAmB,GAAG,CAAC,IAAI,mBAAmB,OAAO,GAAG,CAAC,CAAC,EAAE,EAC1E,KAAK,GAAG;AACb,GALyB;AAOzB,IAAO,cAAQ;AAAA,EACb;AACF;",
6
+ "names": []
7
+ }
@@ -0,0 +1,21 @@
1
+ import type { FastifyReply, FastifyRequest } from 'fastify';
2
+ import type { AuthenticatedUser } from './base.js';
3
+ export type { AuthenticatedUser } from './base.js';
4
+ export interface AuthenticatedRequest extends FastifyRequest {
5
+ user: AuthenticatedUser;
6
+ }
7
+ export type AuthenticatedRouteHandler = (request: AuthenticatedRequest, reply: FastifyReply) => Promise<void>;
8
+ export type RouteHandler = (request: FastifyRequest, reply: FastifyReply) => Promise<void>;
9
+ /**
10
+ * Higher-order function that wraps a route handler with authentication
11
+ * @param handler The route handler that requires authentication
12
+ * @param authenticateRequest The authentication method from the controller
13
+ * @returns A new route handler with authentication built-in
14
+ */
15
+ export declare function withAuth(handler: AuthenticatedRouteHandler, authenticateRequest: (request: FastifyRequest, reply: FastifyReply) => Promise<AuthenticatedUser | null>): RouteHandler;
16
+ /**
17
+ * Method decorator for class-based controllers
18
+ * Usage: @requiresAuth()
19
+ */
20
+ export declare function requiresAuth(): (target: any, propertyKey: string, descriptor: PropertyDescriptor) => PropertyDescriptor;
21
+ //# sourceMappingURL=auth-middleware.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"auth-middleware.d.ts","sourceRoot":"","sources":["../../../src/webserver/controller/auth-middleware.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,cAAc,EAAE,MAAM,SAAS,CAAC;AAC5D,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,WAAW,CAAC;AAEnD,YAAY,EAAE,iBAAiB,EAAE,MAAM,WAAW,CAAC;AAEnD,MAAM,WAAW,oBAAqB,SAAQ,cAAc;IAC1D,IAAI,EAAE,iBAAiB,CAAC;CACzB;AAED,MAAM,MAAM,yBAAyB,GAAG,CAAC,OAAO,EAAE,oBAAoB,EAAE,KAAK,EAAE,YAAY,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;AAC9G,MAAM,MAAM,YAAY,GAAG,CAAC,OAAO,EAAE,cAAc,EAAE,KAAK,EAAE,YAAY,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;AAE3F;;;;;GAKG;AACH,wBAAgB,QAAQ,CACtB,OAAO,EAAE,yBAAyB,EAClC,mBAAmB,EAAE,CAAC,OAAO,EAAE,cAAc,EAAE,KAAK,EAAE,YAAY,KAAK,OAAO,CAAC,iBAAiB,GAAG,IAAI,CAAC,GACvG,YAAY,CAed;AAED;;;GAGG;AACH,wBAAgB,YAAY,KACT,QAAQ,GAAG,EAAE,aAAa,MAAM,EAAE,YAAY,kBAAkB,wBAoBlF"}
@@ -0,0 +1,33 @@
1
+ var __defProp = Object.defineProperty;
2
+ var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
3
+ function withAuth(handler, authenticateRequest) {
4
+ return async (request, reply) => {
5
+ const user = await authenticateRequest(request, reply);
6
+ if (!user) {
7
+ return;
8
+ }
9
+ request.user = user;
10
+ return handler(request, reply);
11
+ };
12
+ }
13
+ __name(withAuth, "withAuth");
14
+ function requiresAuth() {
15
+ return function(target, propertyKey, descriptor) {
16
+ const originalMethod = descriptor.value;
17
+ descriptor.value = async function(request, reply) {
18
+ const user = await this.authenticateRequest(request, reply);
19
+ if (!user) {
20
+ return;
21
+ }
22
+ request.user = user;
23
+ return originalMethod.call(this, request, reply);
24
+ };
25
+ return descriptor;
26
+ };
27
+ }
28
+ __name(requiresAuth, "requiresAuth");
29
+ export {
30
+ requiresAuth,
31
+ withAuth
32
+ };
33
+ //# sourceMappingURL=auth-middleware.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../src/webserver/controller/auth-middleware.ts"],
4
+ "sourcesContent": ["import type { FastifyReply, FastifyRequest } from 'fastify';\nimport type { AuthenticatedUser } from './base.js';\n\nexport type { AuthenticatedUser } from './base.js';\n\nexport interface AuthenticatedRequest extends FastifyRequest {\n user: AuthenticatedUser;\n}\n\nexport type AuthenticatedRouteHandler = (request: AuthenticatedRequest, reply: FastifyReply) => Promise<void>;\nexport type RouteHandler = (request: FastifyRequest, reply: FastifyReply) => Promise<void>;\n\n/**\n * Higher-order function that wraps a route handler with authentication\n * @param handler The route handler that requires authentication\n * @param authenticateRequest The authentication method from the controller\n * @returns A new route handler with authentication built-in\n */\nexport function withAuth(\n handler: AuthenticatedRouteHandler,\n authenticateRequest: (request: FastifyRequest, reply: FastifyReply) => Promise<AuthenticatedUser | null>,\n): RouteHandler {\n return async (request: FastifyRequest, reply: FastifyReply): Promise<void> => {\n const user = await authenticateRequest(request, reply);\n\n if (!user) {\n // Authentication failed, response already sent by authenticateRequest\n return;\n }\n\n // Add user to request object\n (request as AuthenticatedRequest).user = user;\n\n // Call the original handler with the authenticated request\n return handler(request as AuthenticatedRequest, reply);\n };\n}\n\n/**\n * Method decorator for class-based controllers\n * Usage: @requiresAuth()\n */\nexport function requiresAuth() {\n return function (target: any, propertyKey: string, descriptor: PropertyDescriptor) {\n const originalMethod = descriptor.value;\n\n descriptor.value = async function (this: any, request: FastifyRequest, reply: FastifyReply) {\n const user = await this.authenticateRequest(request, reply);\n\n if (!user) {\n // Authentication failed, response already sent by authenticateRequest\n return;\n }\n\n // Add user to request object\n (request as AuthenticatedRequest).user = user;\n\n // Call the original method with the authenticated request\n return originalMethod.call(this, request, reply);\n };\n\n return descriptor;\n };\n}\n"],
5
+ "mappings": ";;AAkBO,SAAS,SACd,SACA,qBACc;AACd,SAAO,OAAO,SAAyB,UAAuC;AAC5E,UAAM,OAAO,MAAM,oBAAoB,SAAS,KAAK;AAErD,QAAI,CAAC,MAAM;AAET;AAAA,IACF;AAGA,IAAC,QAAiC,OAAO;AAGzC,WAAO,QAAQ,SAAiC,KAAK;AAAA,EACvD;AACF;AAlBgB;AAwBT,SAAS,eAAe;AAC7B,SAAO,SAAU,QAAa,aAAqB,YAAgC;AACjF,UAAM,iBAAiB,WAAW;AAElC,eAAW,QAAQ,eAA2B,SAAyB,OAAqB;AAC1F,YAAM,OAAO,MAAM,KAAK,oBAAoB,SAAS,KAAK;AAE1D,UAAI,CAAC,MAAM;AAET;AAAA,MACF;AAGA,MAAC,QAAiC,OAAO;AAGzC,aAAO,eAAe,KAAK,MAAM,SAAS,KAAK;AAAA,IACjD;AAEA,WAAO;AAAA,EACT;AACF;AArBgB;",
6
+ "names": []
7
+ }
@@ -0,0 +1,39 @@
1
+ import { StatusCodes } from 'http-status-codes';
2
+ import type { FastifyReply, FastifyRequest } from 'fastify';
3
+ import type { DatabaseInstance } from '../../database/index.js';
4
+ import type { RedisInstance } from '../../redis/index.js';
5
+ import type { QueueManager } from '../../queue/index.js';
6
+ import type { ApiError, ApiResponse, WebServerBaseControllerConstructorParams } from './base.interface.js';
7
+ import type { ApplicationConfig } from '../../application/base-application.interface.js';
8
+ import type EventManager from '../../event/manager.js';
9
+ import type { WebServerOptions } from '../webserver.interface.js';
10
+ export interface AuthenticatedUser {
11
+ userId: number;
12
+ payload: any;
13
+ }
14
+ export default abstract class BaseController {
15
+ protected workerId: number | undefined;
16
+ protected applicationConfig: ApplicationConfig;
17
+ protected webServerOptions: WebServerOptions;
18
+ protected redisInstance: RedisInstance;
19
+ protected queueManager: QueueManager;
20
+ protected eventManager: EventManager;
21
+ protected databaseInstance: DatabaseInstance;
22
+ constructor({ applicationConfig, webServerOptions, redisInstance, queueManager, eventManager, databaseInstance, }: WebServerBaseControllerConstructorParams);
23
+ protected sendSuccessResponse<T = any>({ reply, data, statusCode, meta, }: {
24
+ reply: FastifyReply;
25
+ data: T;
26
+ statusCode?: StatusCodes;
27
+ meta?: ApiResponse<T>['meta'];
28
+ }): void;
29
+ protected sendNotFoundResponse(reply: FastifyReply, message?: string): void;
30
+ protected sendErrorResponse({ reply, error, statusCode, errorType, }: {
31
+ reply: FastifyReply;
32
+ error: unknown;
33
+ statusCode?: StatusCodes;
34
+ errorType?: ApiError['type'];
35
+ }): void;
36
+ private getErrorType;
37
+ protected authenticateRequest(request: FastifyRequest, reply: FastifyReply): Promise<AuthenticatedUser | null>;
38
+ }
39
+ //# sourceMappingURL=base.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"base.d.ts","sourceRoot":"","sources":["../../../src/webserver/controller/base.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAChD,OAAO,KAAK,EAAE,YAAY,EAAE,cAAc,EAAE,MAAM,SAAS,CAAC;AAC5D,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAChE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAC1D,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AACzD,OAAO,KAAK,EAAE,QAAQ,EAAE,WAAW,EAAE,wCAAwC,EAAE,MAAM,qBAAqB,CAAC;AAE3G,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,iDAAiD,CAAC;AACzF,OAAO,KAAK,YAAY,MAAM,wBAAwB,CAAC;AAEvD,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,2BAA2B,CAAC;AAIlE,MAAM,WAAW,iBAAiB;IAChC,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,GAAG,CAAC;CACd;AAED,MAAM,CAAC,OAAO,CAAC,QAAQ,OAAO,cAAc;IAC1C,SAAS,CAAC,QAAQ,EAAE,MAAM,GAAG,SAAS,CAAC;IAEvC,SAAS,CAAC,iBAAiB,EAAE,iBAAiB,CAAC;IAC/C,SAAS,CAAC,gBAAgB,EAAE,gBAAgB,CAAC;IAE7C,SAAS,CAAC,aAAa,EAAE,aAAa,CAAC;IACvC,SAAS,CAAC,YAAY,EAAE,YAAY,CAAC;IACrC,SAAS,CAAC,YAAY,EAAE,YAAY,CAAC;IACrC,SAAS,CAAC,gBAAgB,EAAE,gBAAgB,CAAC;gBAEjC,EACV,iBAAiB,EACjB,gBAAgB,EAChB,aAAa,EACb,YAAY,EACZ,YAAY,EACZ,gBAAgB,GACjB,EAAE,wCAAwC;IAY3C,SAAS,CAAC,mBAAmB,CAAC,CAAC,GAAG,GAAG,EAAE,EACrC,KAAK,EACL,IAAI,EACJ,UAA2B,EAC3B,IAAI,GACL,EAAE;QACD,KAAK,EAAE,YAAY,CAAC;QACpB,IAAI,EAAE,CAAC,CAAC;QACR,UAAU,CAAC,EAAE,WAAW,CAAC;QACzB,IAAI,CAAC,EAAE,WAAW,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;KAC/B;IAYD,SAAS,CAAC,oBAAoB,CAAC,KAAK,EAAE,YAAY,EAAE,OAAO,GAAE,MAA6B;IAW1F,SAAS,CAAC,iBAAiB,CAAC,EAC1B,KAAK,EACL,KAAK,EACL,UAAoC,EACpC,SAAS,GACV,EAAE;QACD,KAAK,EAAE,YAAY,CAAC;QACpB,KAAK,EAAE,OAAO,CAAC;QACf,UAAU,CAAC,EAAE,WAAW,CAAC;QACzB,SAAS,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,CAAC;KAC9B;IA6CD,OAAO,CAAC,YAAY;cAoBJ,mBAAmB,CAAC,OAAO,EAAE,cAAc,EAAE,KAAK,EAAE,YAAY,GAAG,OAAO,CAAC,iBAAiB,GAAG,IAAI,CAAC;CAwErH"}
@@ -0,0 +1,45 @@
1
+ import type { ApplicationConfig } from '../../application/base-application.interface.js';
2
+ import type { DatabaseInstance } from '../../database/index.js';
3
+ import type EventManager from '../../event/manager.js';
4
+ import type { QueueManager } from '../../queue/index.js';
5
+ import type { RedisInstance } from '../../redis/index.js';
6
+ import type { WebServerOptions } from '../webserver.interface.js';
7
+ import type WebServerBaseController from './base.js';
8
+ export interface WebServerBaseControllerConstructorParams {
9
+ applicationConfig: ApplicationConfig;
10
+ webServerOptions: WebServerOptions;
11
+ redisInstance: RedisInstance;
12
+ queueManager: QueueManager;
13
+ eventManager: EventManager;
14
+ databaseInstance: DatabaseInstance;
15
+ }
16
+ export type WebServerBaseControllerType = new (params: WebServerBaseControllerConstructorParams) => WebServerBaseController;
17
+ export interface ApiResponse<T = any> {
18
+ data?: T;
19
+ meta?: {
20
+ pagination?: {
21
+ page: number;
22
+ limit: number;
23
+ total: number;
24
+ totalPages: number;
25
+ };
26
+ timestamp: string;
27
+ requestId: string;
28
+ };
29
+ error?: ApiError;
30
+ }
31
+ export interface ApiError {
32
+ message: string;
33
+ code?: string;
34
+ type: 'validation' | 'authentication' | 'authorization' | 'not_found' | 'server_error' | 'client_error';
35
+ details?: any;
36
+ timestamp: string;
37
+ requestId: string;
38
+ }
39
+ export interface PaginationParams {
40
+ page?: number;
41
+ limit?: number;
42
+ sortBy?: string;
43
+ sortOrder?: 'asc' | 'desc';
44
+ }
45
+ //# sourceMappingURL=base.interface.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"base.interface.d.ts","sourceRoot":"","sources":["../../../src/webserver/controller/base.interface.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,iDAAiD,CAAC;AACzF,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAChE,OAAO,KAAK,YAAY,MAAM,wBAAwB,CAAC;AACvD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AACzD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAC1D,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,2BAA2B,CAAC;AAClE,OAAO,KAAK,uBAAuB,MAAM,WAAW,CAAC;AAErD,MAAM,WAAW,wCAAwC;IACvD,iBAAiB,EAAE,iBAAiB,CAAC;IACrC,gBAAgB,EAAE,gBAAgB,CAAC;IAEnC,aAAa,EAAE,aAAa,CAAC;IAC7B,YAAY,EAAE,YAAY,CAAC;IAC3B,YAAY,EAAE,YAAY,CAAC;IAC3B,gBAAgB,EAAE,gBAAgB,CAAC;CACpC;AAED,MAAM,MAAM,2BAA2B,GAAG,KACxC,MAAM,EAAE,wCAAwC,KAC7C,uBAAuB,CAAC;AAE7B,MAAM,WAAW,WAAW,CAAC,CAAC,GAAG,GAAG;IAClC,IAAI,CAAC,EAAE,CAAC,CAAC;IACT,IAAI,CAAC,EAAE;QACL,UAAU,CAAC,EAAE;YACX,IAAI,EAAE,MAAM,CAAC;YACb,KAAK,EAAE,MAAM,CAAC;YACd,KAAK,EAAE,MAAM,CAAC;YACd,UAAU,EAAE,MAAM,CAAC;SACpB,CAAC;QACF,SAAS,EAAE,MAAM,CAAC;QAClB,SAAS,EAAE,MAAM,CAAC;KACnB,CAAC;IACF,KAAK,CAAC,EAAE,QAAQ,CAAC;CAClB;AAED,MAAM,WAAW,QAAQ;IACvB,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,YAAY,GAAG,gBAAgB,GAAG,eAAe,GAAG,WAAW,GAAG,cAAc,GAAG,cAAc,CAAC;IACxG,OAAO,CAAC,EAAE,GAAG,CAAC;IACd,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,gBAAgB;IAC/B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,SAAS,CAAC,EAAE,KAAK,GAAG,MAAM,CAAC;CAC5B"}
@@ -0,0 +1 @@
1
+ //# sourceMappingURL=base.interface.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": [],
4
+ "sourcesContent": [],
5
+ "mappings": "",
6
+ "names": []
7
+ }
@@ -0,0 +1,188 @@
1
+ var __defProp = Object.defineProperty;
2
+ var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
3
+ import { StatusCodes } from "http-status-codes";
4
+ import { Logger } from "../../logger/index.js";
5
+ import cluster from "cluster";
6
+ import Jwt from "../../auth/jwt.js";
7
+ class BaseController {
8
+ static {
9
+ __name(this, "BaseController");
10
+ }
11
+ workerId;
12
+ applicationConfig;
13
+ webServerOptions;
14
+ redisInstance;
15
+ queueManager;
16
+ eventManager;
17
+ databaseInstance;
18
+ constructor({
19
+ applicationConfig,
20
+ webServerOptions,
21
+ redisInstance,
22
+ queueManager,
23
+ eventManager,
24
+ databaseInstance
25
+ }) {
26
+ this.workerId = cluster.worker?.id;
27
+ this.applicationConfig = applicationConfig;
28
+ this.webServerOptions = webServerOptions;
29
+ this.redisInstance = redisInstance;
30
+ this.queueManager = queueManager;
31
+ this.eventManager = eventManager;
32
+ this.databaseInstance = databaseInstance;
33
+ }
34
+ sendSuccessResponse({
35
+ reply,
36
+ data,
37
+ statusCode = StatusCodes.OK,
38
+ meta
39
+ }) {
40
+ const response = {
41
+ data,
42
+ meta: {
43
+ timestamp: (/* @__PURE__ */ new Date()).toISOString(),
44
+ requestId: reply.request.id || "unknown",
45
+ ...meta
46
+ }
47
+ };
48
+ reply.status(statusCode).send(response);
49
+ }
50
+ sendNotFoundResponse(reply, message = "Resource not found") {
51
+ const error = {
52
+ message,
53
+ type: "not_found",
54
+ timestamp: (/* @__PURE__ */ new Date()).toISOString(),
55
+ requestId: reply.request.id || "unknown"
56
+ };
57
+ const response = { error };
58
+ reply.status(StatusCodes.NOT_FOUND).send(response);
59
+ }
60
+ sendErrorResponse({
61
+ reply,
62
+ error,
63
+ statusCode = StatusCodes.BAD_REQUEST,
64
+ errorType
65
+ }) {
66
+ let publicErrorMessage;
67
+ let errorDetails = void 0;
68
+ if (this.webServerOptions.errors?.verbose === true) {
69
+ if (error instanceof Error) {
70
+ publicErrorMessage = error.stack ?? error.message;
71
+ errorDetails = { stack: error.stack, name: error.name };
72
+ } else {
73
+ publicErrorMessage = String(error);
74
+ }
75
+ } else {
76
+ if (process.env.NODE_ENV === "production") {
77
+ if (error instanceof Error) {
78
+ publicErrorMessage = "Something went wrong";
79
+ } else if (typeof error === "string") {
80
+ publicErrorMessage = error;
81
+ } else {
82
+ publicErrorMessage = "An unknown error occurred";
83
+ }
84
+ } else {
85
+ if (error instanceof Error) {
86
+ publicErrorMessage = error.stack ?? error.message;
87
+ errorDetails = { stack: error.stack, name: error.name };
88
+ } else {
89
+ publicErrorMessage = String(error);
90
+ }
91
+ }
92
+ }
93
+ Logger.custom({ level: "webServer", message: error });
94
+ console.error(error);
95
+ const apiError = {
96
+ message: publicErrorMessage,
97
+ type: errorType ?? this.getErrorType(statusCode),
98
+ timestamp: (/* @__PURE__ */ new Date()).toISOString(),
99
+ requestId: reply.request.id || "unknown",
100
+ ...errorDetails && { details: errorDetails }
101
+ };
102
+ const response = { error: apiError };
103
+ reply.status(statusCode).send(response);
104
+ }
105
+ getErrorType(statusCode) {
106
+ switch (statusCode) {
107
+ case StatusCodes.UNAUTHORIZED:
108
+ return "authentication";
109
+ case StatusCodes.FORBIDDEN:
110
+ return "authorization";
111
+ case StatusCodes.NOT_FOUND:
112
+ return "not_found";
113
+ case StatusCodes.BAD_REQUEST:
114
+ case StatusCodes.UNPROCESSABLE_ENTITY:
115
+ return "validation";
116
+ case StatusCodes.INTERNAL_SERVER_ERROR:
117
+ case StatusCodes.BAD_GATEWAY:
118
+ case StatusCodes.SERVICE_UNAVAILABLE:
119
+ return "server_error";
120
+ default:
121
+ return "client_error";
122
+ }
123
+ }
124
+ async authenticateRequest(request, reply) {
125
+ const jwtSecretKey = this.applicationConfig.auth?.jwtSecretKey;
126
+ if (!jwtSecretKey) {
127
+ this.sendErrorResponse({
128
+ reply,
129
+ error: "Authentication not configured.",
130
+ statusCode: StatusCodes.INTERNAL_SERVER_ERROR,
131
+ errorType: "server_error"
132
+ });
133
+ return null;
134
+ }
135
+ const authHeader = request.headers.authorization;
136
+ if (!authHeader) {
137
+ this.sendErrorResponse({
138
+ reply,
139
+ error: "No token provided.",
140
+ statusCode: StatusCodes.UNAUTHORIZED,
141
+ errorType: "authentication"
142
+ });
143
+ return null;
144
+ }
145
+ if (!authHeader.startsWith("Bearer ")) {
146
+ this.sendErrorResponse({
147
+ reply,
148
+ error: "Invalid token.",
149
+ statusCode: StatusCodes.UNAUTHORIZED,
150
+ errorType: "authentication"
151
+ });
152
+ return null;
153
+ }
154
+ try {
155
+ const importedJwtSecretKey = await Jwt.importJwtSecretKey({
156
+ jwtSecretKey
157
+ });
158
+ const jwtAccessToken = authHeader.substring(7);
159
+ const { payload } = await Jwt.jwtVerify(jwtAccessToken, importedJwtSecretKey);
160
+ if (!payload.sub) {
161
+ this.sendErrorResponse({
162
+ reply,
163
+ error: "Invalid token payload.",
164
+ statusCode: StatusCodes.UNAUTHORIZED,
165
+ errorType: "authentication"
166
+ });
167
+ return null;
168
+ }
169
+ const userId = parseInt(payload.sub);
170
+ return {
171
+ userId,
172
+ payload
173
+ };
174
+ } catch {
175
+ this.sendErrorResponse({
176
+ reply,
177
+ error: "Invalid or expired token.",
178
+ statusCode: StatusCodes.UNAUTHORIZED,
179
+ errorType: "authentication"
180
+ });
181
+ return null;
182
+ }
183
+ }
184
+ }
185
+ export {
186
+ BaseController as default
187
+ };
188
+ //# sourceMappingURL=base.js.map