equipped 5.2.9 → 5.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (781) hide show
  1. package/CHANGELOG.md +95 -0
  2. package/README.md +362 -34
  3. package/dist/cjs/cache/adapters/in-memory/index.cjs +824 -0
  4. package/dist/cjs/cache/adapters/in-memory/index.cjs.map +1 -0
  5. package/dist/cjs/cache/adapters/in-memory/index.min.cjs +4 -0
  6. package/dist/cjs/cache/adapters/in-memory/index.min.cjs.map +1 -0
  7. package/dist/cjs/cache/adapters/redis/index.cjs +844 -0
  8. package/dist/cjs/cache/adapters/redis/index.cjs.map +1 -0
  9. package/dist/cjs/cache/adapters/redis/index.min.cjs +4 -0
  10. package/dist/cjs/cache/adapters/redis/index.min.cjs.map +1 -0
  11. package/dist/cjs/cache/index.cjs +602 -4
  12. package/dist/cjs/cache/index.cjs.map +1 -1
  13. package/dist/cjs/cache/index.min.cjs +3 -1
  14. package/dist/cjs/cache/index.min.cjs.map +1 -1
  15. package/dist/cjs/dbs/adapters/mongodb/index.cjs +1314 -0
  16. package/dist/cjs/dbs/adapters/mongodb/index.cjs.map +1 -0
  17. package/dist/cjs/dbs/adapters/mongodb/index.min.cjs +4 -0
  18. package/dist/cjs/dbs/adapters/mongodb/index.min.cjs.map +1 -0
  19. package/dist/cjs/dbs/index.cjs +965 -6
  20. package/dist/cjs/dbs/index.cjs.map +1 -1
  21. package/dist/cjs/dbs/index.min.cjs +3 -1
  22. package/dist/cjs/dbs/index.min.cjs.map +1 -1
  23. package/dist/cjs/errors/index.cjs +127 -8
  24. package/dist/cjs/errors/index.cjs.map +1 -1
  25. package/dist/cjs/errors/index.min.cjs +1 -1
  26. package/dist/cjs/errors/index.min.cjs.map +1 -1
  27. package/dist/cjs/events/adapters/kafka/index.cjs +845 -0
  28. package/dist/cjs/events/adapters/kafka/index.cjs.map +1 -0
  29. package/dist/cjs/events/adapters/kafka/index.min.cjs +4 -0
  30. package/dist/cjs/events/adapters/kafka/index.min.cjs.map +1 -0
  31. package/dist/cjs/events/adapters/rabbitmq/index.cjs +836 -0
  32. package/dist/cjs/events/adapters/rabbitmq/index.cjs.map +1 -0
  33. package/dist/cjs/events/adapters/rabbitmq/index.min.cjs +4 -0
  34. package/dist/cjs/events/adapters/rabbitmq/index.min.cjs.map +1 -0
  35. package/dist/cjs/events/index.cjs +33 -4
  36. package/dist/cjs/events/index.cjs.map +1 -1
  37. package/dist/cjs/events/index.min.cjs +1 -1
  38. package/dist/cjs/events/index.min.cjs.map +1 -1
  39. package/dist/cjs/index.cjs +588 -1
  40. package/dist/cjs/index.cjs.map +1 -1
  41. package/dist/cjs/index.min.cjs +3 -1
  42. package/dist/cjs/index.min.cjs.map +1 -1
  43. package/dist/cjs/instance/index.cjs +514 -64
  44. package/dist/cjs/instance/index.cjs.map +1 -1
  45. package/dist/cjs/instance/index.min.cjs +3 -3
  46. package/dist/cjs/instance/index.min.cjs.map +1 -1
  47. package/dist/cjs/jobs/adapters/redis/index.cjs +979 -0
  48. package/dist/cjs/jobs/adapters/redis/index.cjs.map +1 -0
  49. package/dist/cjs/jobs/adapters/redis/index.min.cjs +4 -0
  50. package/dist/cjs/jobs/adapters/redis/index.min.cjs.map +1 -0
  51. package/dist/cjs/jobs/index.cjs +55 -2
  52. package/dist/cjs/jobs/index.cjs.map +1 -1
  53. package/dist/cjs/jobs/index.min.cjs +1 -1
  54. package/dist/cjs/jobs/index.min.cjs.map +1 -1
  55. package/dist/cjs/orm/adapters/in-memory/index.cjs +2551 -0
  56. package/dist/cjs/orm/adapters/in-memory/index.cjs.map +1 -0
  57. package/dist/cjs/orm/adapters/in-memory/index.min.cjs +4 -0
  58. package/dist/cjs/orm/adapters/in-memory/index.min.cjs.map +1 -0
  59. package/dist/cjs/orm/adapters/json/index.cjs +3518 -0
  60. package/dist/cjs/orm/adapters/json/index.cjs.map +1 -0
  61. package/dist/cjs/orm/adapters/json/index.min.cjs +4 -0
  62. package/dist/cjs/orm/adapters/json/index.min.cjs.map +1 -0
  63. package/dist/cjs/orm/adapters/mongodb/index.cjs +3299 -0
  64. package/dist/cjs/orm/adapters/mongodb/index.cjs.map +1 -0
  65. package/dist/cjs/orm/adapters/mongodb/index.min.cjs +4 -0
  66. package/dist/cjs/orm/adapters/mongodb/index.min.cjs.map +1 -0
  67. package/dist/cjs/orm/adapters/postgresql/index.cjs +4114 -0
  68. package/dist/cjs/orm/adapters/postgresql/index.cjs.map +1 -0
  69. package/dist/cjs/orm/adapters/postgresql/index.min.cjs +49 -0
  70. package/dist/cjs/orm/adapters/postgresql/index.min.cjs.map +1 -0
  71. package/dist/cjs/orm/index.cjs +9216 -0
  72. package/dist/cjs/orm/index.cjs.map +1 -0
  73. package/dist/cjs/orm/index.min.cjs +4 -0
  74. package/dist/cjs/orm/index.min.cjs.map +1 -0
  75. package/dist/cjs/server/adapters/express/index.cjs +1967 -0
  76. package/dist/cjs/server/adapters/express/index.cjs.map +1 -0
  77. package/dist/cjs/server/adapters/express/index.min.cjs +32 -0
  78. package/dist/cjs/server/adapters/express/index.min.cjs.map +1 -0
  79. package/dist/cjs/server/adapters/fastify/index.cjs +1974 -0
  80. package/dist/cjs/server/adapters/fastify/index.cjs.map +1 -0
  81. package/dist/cjs/server/adapters/fastify/index.min.cjs +32 -0
  82. package/dist/cjs/server/adapters/fastify/index.min.cjs.map +1 -0
  83. package/dist/cjs/server/index.cjs +1811 -9
  84. package/dist/cjs/server/index.cjs.map +1 -1
  85. package/dist/cjs/server/index.min.cjs +31 -1
  86. package/dist/cjs/server/index.min.cjs.map +1 -1
  87. package/dist/cjs/types/index.cjs +18 -1
  88. package/dist/cjs/types/index.cjs.map +1 -1
  89. package/dist/cjs/types/index.min.cjs +1 -1
  90. package/dist/cjs/types/index.min.cjs.map +1 -1
  91. package/dist/cjs/utilities/index.cjs +862 -7
  92. package/dist/cjs/utilities/index.cjs.map +1 -1
  93. package/dist/cjs/utilities/index.min.cjs +3 -1
  94. package/dist/cjs/utilities/index.min.cjs.map +1 -1
  95. package/dist/cjs/validations/index.cjs +679 -10
  96. package/dist/cjs/validations/index.cjs.map +1 -1
  97. package/dist/cjs/validations/index.min.cjs +3 -1
  98. package/dist/cjs/validations/index.min.cjs.map +1 -1
  99. package/dist/esm/cache/adapters/in-memory/index.min.mjs +2 -0
  100. package/dist/esm/cache/adapters/in-memory/index.min.mjs.map +1 -0
  101. package/dist/esm/cache/adapters/in-memory/index.mjs +93 -0
  102. package/dist/esm/cache/adapters/in-memory/index.mjs.map +1 -0
  103. package/dist/esm/cache/adapters/redis/index.min.mjs +2 -0
  104. package/dist/esm/cache/adapters/redis/index.mjs +13 -0
  105. package/dist/esm/cache/index.min.mjs +1 -1
  106. package/dist/esm/cache/index.min.mjs.map +1 -1
  107. package/dist/esm/cache/index.mjs +9 -4
  108. package/dist/esm/cache/index.mjs.map +1 -1
  109. package/dist/esm/chunk-4JLDXF7T.min.mjs +2 -0
  110. package/dist/esm/chunk-4JLDXF7T.min.mjs.map +1 -0
  111. package/dist/{types/events/types/kafka.js → esm/chunk-4MXYZS5R.mjs} +60 -37
  112. package/dist/esm/chunk-4MXYZS5R.mjs.map +1 -0
  113. package/dist/esm/chunk-5VW3JAFR.min.mjs +2 -0
  114. package/dist/esm/chunk-5VW3JAFR.min.mjs.map +1 -0
  115. package/dist/esm/chunk-AKQBDYUO.mjs +126 -0
  116. package/dist/esm/chunk-AKQBDYUO.mjs.map +1 -0
  117. package/dist/esm/chunk-AQY7QVYI.min.mjs +2 -0
  118. package/dist/esm/chunk-B5QQ32YY.min.mjs +2 -0
  119. package/dist/esm/chunk-B5QQ32YY.min.mjs.map +1 -0
  120. package/dist/esm/chunk-BJNIUCPT.min.mjs +2 -0
  121. package/dist/esm/chunk-BJNIUCPT.min.mjs.map +1 -0
  122. package/dist/esm/chunk-DKPZJIIR.mjs +29 -0
  123. package/dist/esm/chunk-DKPZJIIR.mjs.map +1 -0
  124. package/dist/esm/chunk-DSUJ5FUL.min.mjs +2 -0
  125. package/dist/esm/chunk-DSUJ5FUL.min.mjs.map +1 -0
  126. package/dist/esm/chunk-FLAPYQUT.min.mjs +32 -0
  127. package/dist/esm/chunk-FLAPYQUT.min.mjs.map +1 -0
  128. package/dist/esm/chunk-J5LGTIGS.mjs +10 -0
  129. package/dist/esm/chunk-JH6EBXY4.mjs +53 -0
  130. package/dist/esm/chunk-JH6EBXY4.mjs.map +1 -0
  131. package/dist/esm/chunk-MDQKODYQ.mjs +2035 -0
  132. package/dist/esm/chunk-MDQKODYQ.mjs.map +1 -0
  133. package/dist/esm/chunk-PCAUXBAG.min.mjs +2 -0
  134. package/dist/esm/chunk-PCAUXBAG.min.mjs.map +1 -0
  135. package/dist/esm/chunk-PNZNNUMN.mjs +113 -0
  136. package/dist/esm/chunk-PNZNNUMN.mjs.map +1 -0
  137. package/dist/esm/chunk-PQCBVQL6.mjs +1280 -0
  138. package/dist/esm/chunk-PQCBVQL6.mjs.map +1 -0
  139. package/dist/esm/chunk-QHLKB47N.min.mjs +2 -0
  140. package/dist/esm/chunk-QHLKB47N.min.mjs.map +1 -0
  141. package/dist/esm/chunk-SGZNOYC3.min.mjs +2 -0
  142. package/dist/esm/chunk-SGZNOYC3.min.mjs.map +1 -0
  143. package/dist/esm/chunk-TVTYDU2D.mjs +795 -0
  144. package/dist/esm/chunk-TVTYDU2D.mjs.map +1 -0
  145. package/dist/esm/chunk-VCCS7CAI.mjs +8 -0
  146. package/dist/esm/chunk-VCCS7CAI.mjs.map +1 -0
  147. package/dist/esm/chunk-Z2TZ3KR7.mjs +22 -0
  148. package/dist/esm/chunk-Z2TZ3KR7.mjs.map +1 -0
  149. package/dist/esm/chunk-ZGMFFK6Y.min.mjs +2 -0
  150. package/dist/esm/chunk-ZGMFFK6Y.min.mjs.map +1 -0
  151. package/dist/esm/dbs/adapters/mongodb/index.min.mjs +2 -0
  152. package/dist/esm/dbs/adapters/mongodb/index.min.mjs.map +1 -0
  153. package/dist/esm/dbs/adapters/mongodb/index.mjs +419 -0
  154. package/dist/esm/dbs/adapters/mongodb/index.mjs.map +1 -0
  155. package/dist/esm/dbs/index.min.mjs +1 -1
  156. package/dist/esm/dbs/index.min.mjs.map +1 -1
  157. package/dist/esm/dbs/index.mjs +22 -6
  158. package/dist/esm/dbs/index.mjs.map +1 -1
  159. package/dist/esm/errors/index.min.mjs +1 -1
  160. package/dist/esm/errors/index.min.mjs.map +1 -1
  161. package/dist/esm/errors/index.mjs +22 -8
  162. package/dist/esm/errors/index.mjs.map +1 -1
  163. package/dist/esm/events/adapters/kafka/index.min.mjs +2 -0
  164. package/dist/esm/events/adapters/kafka/index.min.mjs.map +1 -0
  165. package/dist/esm/events/adapters/kafka/index.mjs +12 -0
  166. package/dist/esm/events/adapters/kafka/index.mjs.map +1 -0
  167. package/dist/esm/events/adapters/rabbitmq/index.min.mjs +2 -0
  168. package/dist/esm/events/adapters/rabbitmq/index.min.mjs.map +1 -0
  169. package/dist/esm/events/adapters/rabbitmq/index.mjs +92 -0
  170. package/dist/esm/events/adapters/rabbitmq/index.mjs.map +1 -0
  171. package/dist/esm/events/index.min.mjs +1 -1
  172. package/dist/esm/events/index.min.mjs.map +1 -1
  173. package/dist/esm/events/index.mjs +7 -4
  174. package/dist/esm/events/index.mjs.map +1 -1
  175. package/dist/esm/index.min.mjs +1 -1
  176. package/dist/esm/index.min.mjs.map +1 -1
  177. package/dist/esm/index.mjs +8 -1
  178. package/dist/esm/index.mjs.map +1 -1
  179. package/dist/esm/instance/index.min.mjs +1 -3
  180. package/dist/esm/instance/index.min.mjs.map +1 -1
  181. package/dist/esm/instance/index.mjs +4 -132
  182. package/dist/esm/instance/index.mjs.map +1 -1
  183. package/dist/esm/introspection-32BRYKYY.mjs +10 -0
  184. package/dist/esm/introspection-32BRYKYY.mjs.map +1 -0
  185. package/dist/esm/introspection-A72WMWE3.min.mjs +2 -0
  186. package/dist/esm/introspection-A72WMWE3.min.mjs.map +1 -0
  187. package/dist/esm/jobs/adapters/redis/index.min.mjs +2 -0
  188. package/dist/esm/jobs/adapters/redis/index.min.mjs.map +1 -0
  189. package/dist/esm/jobs/{types/redis.mjs → adapters/redis/index.mjs} +71 -56
  190. package/dist/esm/jobs/adapters/redis/index.mjs.map +1 -0
  191. package/dist/esm/jobs/index.min.mjs +1 -1
  192. package/dist/esm/jobs/index.min.mjs.map +1 -1
  193. package/dist/esm/jobs/index.mjs +9 -2
  194. package/dist/esm/jobs/index.mjs.map +1 -1
  195. package/dist/esm/orm/adapters/in-memory/index.min.mjs +2 -0
  196. package/dist/esm/orm/adapters/in-memory/index.min.mjs.map +1 -0
  197. package/dist/esm/orm/adapters/in-memory/index.mjs +11 -0
  198. package/dist/esm/orm/adapters/in-memory/index.mjs.map +1 -0
  199. package/dist/esm/orm/adapters/json/index.min.mjs +2 -0
  200. package/dist/esm/orm/adapters/json/index.min.mjs.map +1 -0
  201. package/dist/esm/orm/adapters/json/index.mjs +980 -0
  202. package/dist/esm/orm/adapters/json/index.mjs.map +1 -0
  203. package/dist/esm/orm/adapters/mongodb/index.min.mjs +2 -0
  204. package/dist/esm/orm/adapters/mongodb/index.min.mjs.map +1 -0
  205. package/dist/esm/orm/adapters/mongodb/index.mjs +1539 -0
  206. package/dist/esm/orm/adapters/mongodb/index.mjs.map +1 -0
  207. package/dist/esm/orm/adapters/postgresql/index.min.mjs +47 -0
  208. package/dist/esm/orm/adapters/postgresql/index.min.mjs.map +1 -0
  209. package/dist/esm/orm/adapters/postgresql/index.mjs +2070 -0
  210. package/dist/esm/orm/adapters/postgresql/index.mjs.map +1 -0
  211. package/dist/esm/orm/index.min.mjs +2 -0
  212. package/dist/esm/orm/index.min.mjs.map +1 -0
  213. package/dist/esm/orm/index.mjs +7326 -0
  214. package/dist/esm/orm/index.mjs.map +1 -0
  215. package/dist/esm/server/adapters/express/index.min.mjs +2 -0
  216. package/dist/esm/server/adapters/express/index.min.mjs.map +1 -0
  217. package/dist/esm/server/adapters/express/index.mjs +177 -0
  218. package/dist/esm/server/adapters/express/index.mjs.map +1 -0
  219. package/dist/esm/server/adapters/fastify/index.min.mjs +2 -0
  220. package/dist/esm/server/adapters/fastify/index.min.mjs.map +1 -0
  221. package/dist/esm/server/adapters/fastify/index.mjs +185 -0
  222. package/dist/esm/server/adapters/fastify/index.mjs.map +1 -0
  223. package/dist/esm/server/index.min.mjs +1 -1
  224. package/dist/esm/server/index.min.mjs.map +1 -1
  225. package/dist/esm/server/index.mjs +38 -9
  226. package/dist/esm/server/index.mjs.map +1 -1
  227. package/dist/esm/types/index.min.mjs +0 -1
  228. package/dist/esm/types/index.min.mjs.map +1 -1
  229. package/dist/esm/types/index.mjs +0 -1
  230. package/dist/esm/types/index.mjs.map +1 -1
  231. package/dist/esm/utilities/index.min.mjs +1 -1
  232. package/dist/esm/utilities/index.min.mjs.map +1 -1
  233. package/dist/esm/utilities/index.mjs +22 -9
  234. package/dist/esm/utilities/index.mjs.map +1 -1
  235. package/dist/esm/validations/index.min.mjs +1 -1
  236. package/dist/esm/validations/index.min.mjs.map +1 -1
  237. package/dist/esm/validations/index.mjs +8 -18
  238. package/dist/esm/validations/index.mjs.map +1 -1
  239. package/dist/types/adapter-Coap9ISX.d.ts +1435 -0
  240. package/dist/types/{fastify-DLPUK3vD.d.ts → base-DVr0fHil.d.ts} +76 -143
  241. package/dist/types/cache/adapters/in-memory/index.d.ts +21 -0
  242. package/dist/types/cache/adapters/in-memory/index.js +92 -0
  243. package/dist/types/cache/adapters/redis/index.d.ts +73 -0
  244. package/dist/types/cache/adapters/redis/index.js +12 -0
  245. package/dist/types/cache/index.d.ts +2 -42
  246. package/dist/types/cache/index.js +9 -4
  247. package/dist/types/chunk-3M4PBZAQ.js +125 -0
  248. package/dist/types/chunk-3TKJGSCZ.js +21 -0
  249. package/dist/types/chunk-65EHKCDZ.js +112 -0
  250. package/dist/types/chunk-JQ2FWX4W.js +1279 -0
  251. package/dist/types/chunk-KZKFYO4V.js +7 -0
  252. package/dist/types/chunk-LN3A6R4Y.js +28 -0
  253. package/dist/types/chunk-MLKGABMK.js +9 -0
  254. package/dist/types/chunk-NJ2FHI3U.js +794 -0
  255. package/dist/types/chunk-OHFTQGQG.js +52 -0
  256. package/dist/{esm/events/types/kafka.mjs → types/chunk-XGGGAEET.js} +59 -38
  257. package/dist/types/chunk-YTY3EFNB.js +2034 -0
  258. package/dist/types/{core-BrkNSwvc.d.ts → core-tNlIMH9Y.d.ts} +48 -38
  259. package/dist/types/dbs/adapters/mongodb/index.d.ts +43 -0
  260. package/dist/types/dbs/adapters/mongodb/index.js +418 -0
  261. package/dist/types/dbs/index.d.ts +14 -12
  262. package/dist/types/dbs/index.js +22 -6
  263. package/dist/types/equippedError-Cmo60Kn-.d.ts +8 -0
  264. package/dist/types/errors/index.d.ts +3 -3
  265. package/dist/types/errors/index.js +22 -8
  266. package/dist/types/events/adapters/kafka/index.d.ts +83 -0
  267. package/dist/types/events/adapters/kafka/index.js +11 -0
  268. package/dist/types/events/adapters/rabbitmq/index.d.ts +41 -0
  269. package/dist/types/events/adapters/rabbitmq/index.js +91 -0
  270. package/dist/types/events/index.d.ts +11 -11
  271. package/dist/types/events/index.js +7 -4
  272. package/dist/types/index.d.ts +2 -25
  273. package/dist/types/index.js +8 -1
  274. package/dist/types/instance/index.d.ts +12 -179
  275. package/dist/types/instance/index.js +4 -132
  276. package/dist/types/introspection-VOIU3XE6.js +9 -0
  277. package/dist/types/jobs/adapters/redis/index.d.ts +93 -0
  278. package/dist/types/jobs/{types/redis.js → adapters/redis/index.js} +70 -55
  279. package/dist/types/jobs/index.d.ts +19 -35
  280. package/dist/types/jobs/index.js +9 -2
  281. package/dist/types/orm/adapters/in-memory/index.d.ts +92 -0
  282. package/dist/types/orm/adapters/in-memory/index.js +10 -0
  283. package/dist/types/orm/adapters/json/index.d.ts +72 -0
  284. package/dist/types/orm/adapters/json/index.js +979 -0
  285. package/dist/types/orm/adapters/mongodb/index.d.ts +74 -0
  286. package/dist/types/orm/adapters/mongodb/index.js +1538 -0
  287. package/dist/types/orm/adapters/postgresql/index.d.ts +112 -0
  288. package/dist/types/orm/adapters/postgresql/index.js +2069 -0
  289. package/dist/types/orm/index.d.ts +160 -0
  290. package/dist/types/orm/index.js +7325 -0
  291. package/dist/types/{requestError-C2PNWUrt.d.ts → requestError-DdaL8hc3.d.ts} +2 -8
  292. package/dist/types/server/adapters/express/index.d.ts +196 -0
  293. package/dist/types/server/adapters/express/index.js +176 -0
  294. package/dist/types/server/adapters/fastify/index.d.ts +221 -0
  295. package/dist/types/server/adapters/fastify/index.js +184 -0
  296. package/dist/types/server/index.d.ts +10 -11
  297. package/dist/types/server/index.js +38 -9
  298. package/dist/types/types/index.js +0 -1
  299. package/dist/types/utilities/index.d.ts +22 -9
  300. package/dist/types/utilities/index.js +22 -9
  301. package/dist/types/{validationError-Bw8OYv5s.d.ts → validationError-oigtHqBi.d.ts} +1 -1
  302. package/dist/types/validations/index.d.ts +3 -2
  303. package/dist/types/validations/index.js +8 -18
  304. package/package.json +155 -18
  305. package/dist/cjs/audit/events.cjs +0 -101
  306. package/dist/cjs/audit/events.cjs.map +0 -1
  307. package/dist/cjs/audit/events.min.cjs +0 -2
  308. package/dist/cjs/audit/events.min.cjs.map +0 -1
  309. package/dist/cjs/audit/index.cjs +0 -2
  310. package/dist/cjs/audit/index.cjs.map +0 -1
  311. package/dist/cjs/audit/index.min.cjs +0 -2
  312. package/dist/cjs/audit/index.min.cjs.map +0 -1
  313. package/dist/cjs/cache/base.cjs +0 -6
  314. package/dist/cjs/cache/base.cjs.map +0 -1
  315. package/dist/cjs/cache/base.min.cjs +0 -2
  316. package/dist/cjs/cache/base.min.cjs.map +0 -1
  317. package/dist/cjs/cache/pipes.cjs +0 -16
  318. package/dist/cjs/cache/pipes.cjs.map +0 -1
  319. package/dist/cjs/cache/pipes.min.cjs +0 -2
  320. package/dist/cjs/cache/pipes.min.cjs.map +0 -1
  321. package/dist/cjs/cache/types/in-memory.cjs +0 -47
  322. package/dist/cjs/cache/types/in-memory.cjs.map +0 -1
  323. package/dist/cjs/cache/types/in-memory.min.cjs +0 -2
  324. package/dist/cjs/cache/types/in-memory.min.cjs.map +0 -1
  325. package/dist/cjs/cache/types/redis.cjs +0 -55
  326. package/dist/cjs/cache/types/redis.cjs.map +0 -1
  327. package/dist/cjs/cache/types/redis.min.cjs +0 -2
  328. package/dist/cjs/cache/types/redis.min.cjs.map +0 -1
  329. package/dist/cjs/dbs/base/changes.cjs +0 -36
  330. package/dist/cjs/dbs/base/changes.cjs.map +0 -1
  331. package/dist/cjs/dbs/base/changes.min.cjs +0 -2
  332. package/dist/cjs/dbs/base/changes.min.cjs.map +0 -1
  333. package/dist/cjs/dbs/base/core.cjs +0 -1
  334. package/dist/cjs/dbs/base/core.cjs.map +0 -1
  335. package/dist/cjs/dbs/base/core.min.cjs +0 -1
  336. package/dist/cjs/dbs/base/core.min.cjs.map +0 -1
  337. package/dist/cjs/dbs/base/db.cjs +0 -14
  338. package/dist/cjs/dbs/base/db.cjs.map +0 -1
  339. package/dist/cjs/dbs/base/db.min.cjs +0 -2
  340. package/dist/cjs/dbs/base/db.min.cjs.map +0 -1
  341. package/dist/cjs/dbs/base/types.cjs +0 -2
  342. package/dist/cjs/dbs/base/types.cjs.map +0 -1
  343. package/dist/cjs/dbs/base/types.min.cjs +0 -2
  344. package/dist/cjs/dbs/base/types.min.cjs.map +0 -1
  345. package/dist/cjs/dbs/mongo/changes.cjs +0 -81
  346. package/dist/cjs/dbs/mongo/changes.cjs.map +0 -1
  347. package/dist/cjs/dbs/mongo/changes.min.cjs +0 -2
  348. package/dist/cjs/dbs/mongo/changes.min.cjs.map +0 -1
  349. package/dist/cjs/dbs/mongo/db.cjs +0 -225
  350. package/dist/cjs/dbs/mongo/db.cjs.map +0 -1
  351. package/dist/cjs/dbs/mongo/db.min.cjs +0 -2
  352. package/dist/cjs/dbs/mongo/db.min.cjs.map +0 -1
  353. package/dist/cjs/dbs/mongo/query.cjs +0 -66
  354. package/dist/cjs/dbs/mongo/query.cjs.map +0 -1
  355. package/dist/cjs/dbs/mongo/query.min.cjs +0 -2
  356. package/dist/cjs/dbs/mongo/query.min.cjs.map +0 -1
  357. package/dist/cjs/dbs/pipes.cjs +0 -104
  358. package/dist/cjs/dbs/pipes.cjs.map +0 -1
  359. package/dist/cjs/dbs/pipes.min.cjs +0 -2
  360. package/dist/cjs/dbs/pipes.min.cjs.map +0 -1
  361. package/dist/cjs/errors/equippedError.cjs +0 -12
  362. package/dist/cjs/errors/equippedError.cjs.map +0 -1
  363. package/dist/cjs/errors/equippedError.min.cjs +0 -2
  364. package/dist/cjs/errors/equippedError.min.cjs.map +0 -1
  365. package/dist/cjs/errors/requestError.cjs +0 -12
  366. package/dist/cjs/errors/requestError.cjs.map +0 -1
  367. package/dist/cjs/errors/requestError.min.cjs +0 -2
  368. package/dist/cjs/errors/requestError.min.cjs.map +0 -1
  369. package/dist/cjs/errors/types/badRequestError.cjs +0 -12
  370. package/dist/cjs/errors/types/badRequestError.cjs.map +0 -1
  371. package/dist/cjs/errors/types/badRequestError.min.cjs +0 -2
  372. package/dist/cjs/errors/types/badRequestError.min.cjs.map +0 -1
  373. package/dist/cjs/errors/types/notAuthenticatedError.cjs +0 -12
  374. package/dist/cjs/errors/types/notAuthenticatedError.cjs.map +0 -1
  375. package/dist/cjs/errors/types/notAuthenticatedError.min.cjs +0 -2
  376. package/dist/cjs/errors/types/notAuthenticatedError.min.cjs.map +0 -1
  377. package/dist/cjs/errors/types/notAuthorizedError.cjs +0 -12
  378. package/dist/cjs/errors/types/notAuthorizedError.cjs.map +0 -1
  379. package/dist/cjs/errors/types/notAuthorizedError.min.cjs +0 -2
  380. package/dist/cjs/errors/types/notAuthorizedError.min.cjs.map +0 -1
  381. package/dist/cjs/errors/types/notFoundError.cjs +0 -12
  382. package/dist/cjs/errors/types/notFoundError.cjs.map +0 -1
  383. package/dist/cjs/errors/types/notFoundError.min.cjs +0 -2
  384. package/dist/cjs/errors/types/notFoundError.min.cjs.map +0 -1
  385. package/dist/cjs/errors/types/tokenExpired.cjs +0 -12
  386. package/dist/cjs/errors/types/tokenExpired.cjs.map +0 -1
  387. package/dist/cjs/errors/types/tokenExpired.min.cjs +0 -2
  388. package/dist/cjs/errors/types/tokenExpired.min.cjs.map +0 -1
  389. package/dist/cjs/errors/types/validationError.cjs +0 -16
  390. package/dist/cjs/errors/types/validationError.cjs.map +0 -1
  391. package/dist/cjs/errors/types/validationError.min.cjs +0 -2
  392. package/dist/cjs/errors/types/validationError.min.cjs.map +0 -1
  393. package/dist/cjs/events/base.cjs +0 -6
  394. package/dist/cjs/events/base.cjs.map +0 -1
  395. package/dist/cjs/events/base.min.cjs +0 -2
  396. package/dist/cjs/events/base.min.cjs.map +0 -1
  397. package/dist/cjs/events/pipes.cjs +0 -28
  398. package/dist/cjs/events/pipes.cjs.map +0 -1
  399. package/dist/cjs/events/pipes.min.cjs +0 -2
  400. package/dist/cjs/events/pipes.min.cjs.map +0 -1
  401. package/dist/cjs/events/types/kafka.cjs +0 -80
  402. package/dist/cjs/events/types/kafka.cjs.map +0 -1
  403. package/dist/cjs/events/types/kafka.min.cjs +0 -2
  404. package/dist/cjs/events/types/kafka.min.cjs.map +0 -1
  405. package/dist/cjs/events/types/rabbitmq.cjs +0 -54
  406. package/dist/cjs/events/types/rabbitmq.cjs.map +0 -1
  407. package/dist/cjs/events/types/rabbitmq.min.cjs +0 -2
  408. package/dist/cjs/events/types/rabbitmq.min.cjs.map +0 -1
  409. package/dist/cjs/instance/hooks.cjs +0 -26
  410. package/dist/cjs/instance/hooks.cjs.map +0 -1
  411. package/dist/cjs/instance/hooks.min.cjs +0 -2
  412. package/dist/cjs/instance/hooks.min.cjs.map +0 -1
  413. package/dist/cjs/instance/settings.cjs +0 -57
  414. package/dist/cjs/instance/settings.cjs.map +0 -1
  415. package/dist/cjs/instance/settings.min.cjs +0 -2
  416. package/dist/cjs/instance/settings.min.cjs.map +0 -1
  417. package/dist/cjs/jobs/pipes.cjs +0 -13
  418. package/dist/cjs/jobs/pipes.cjs.map +0 -1
  419. package/dist/cjs/jobs/pipes.min.cjs +0 -2
  420. package/dist/cjs/jobs/pipes.min.cjs.map +0 -1
  421. package/dist/cjs/jobs/types/redis.cjs +0 -106
  422. package/dist/cjs/jobs/types/redis.cjs.map +0 -1
  423. package/dist/cjs/jobs/types/redis.min.cjs +0 -2
  424. package/dist/cjs/jobs/types/redis.min.cjs.map +0 -1
  425. package/dist/cjs/server/impls/base.cjs +0 -211
  426. package/dist/cjs/server/impls/base.cjs.map +0 -1
  427. package/dist/cjs/server/impls/base.min.cjs +0 -2
  428. package/dist/cjs/server/impls/base.min.cjs.map +0 -1
  429. package/dist/cjs/server/impls/express.cjs +0 -111
  430. package/dist/cjs/server/impls/express.cjs.map +0 -1
  431. package/dist/cjs/server/impls/express.min.cjs +0 -2
  432. package/dist/cjs/server/impls/express.min.cjs.map +0 -1
  433. package/dist/cjs/server/impls/fastify.cjs +0 -121
  434. package/dist/cjs/server/impls/fastify.cjs.map +0 -1
  435. package/dist/cjs/server/impls/fastify.min.cjs +0 -2
  436. package/dist/cjs/server/impls/fastify.min.cjs.map +0 -1
  437. package/dist/cjs/server/middlewares/index.cjs +0 -2
  438. package/dist/cjs/server/middlewares/index.cjs.map +0 -1
  439. package/dist/cjs/server/middlewares/index.min.cjs +0 -2
  440. package/dist/cjs/server/middlewares/index.min.cjs.map +0 -1
  441. package/dist/cjs/server/middlewares/requireAuthUser.cjs +0 -22
  442. package/dist/cjs/server/middlewares/requireAuthUser.cjs.map +0 -1
  443. package/dist/cjs/server/middlewares/requireAuthUser.min.cjs +0 -2
  444. package/dist/cjs/server/middlewares/requireAuthUser.min.cjs.map +0 -1
  445. package/dist/cjs/server/openapi.cjs +0 -191
  446. package/dist/cjs/server/openapi.cjs.map +0 -1
  447. package/dist/cjs/server/openapi.min.cjs +0 -30
  448. package/dist/cjs/server/openapi.min.cjs.map +0 -1
  449. package/dist/cjs/server/pipes.cjs +0 -67
  450. package/dist/cjs/server/pipes.cjs.map +0 -1
  451. package/dist/cjs/server/pipes.min.cjs +0 -2
  452. package/dist/cjs/server/pipes.min.cjs.map +0 -1
  453. package/dist/cjs/server/requests-auth-methods/apiKeys.cjs +0 -21
  454. package/dist/cjs/server/requests-auth-methods/apiKeys.cjs.map +0 -1
  455. package/dist/cjs/server/requests-auth-methods/apiKeys.min.cjs +0 -2
  456. package/dist/cjs/server/requests-auth-methods/apiKeys.min.cjs.map +0 -1
  457. package/dist/cjs/server/requests-auth-methods/base.cjs +0 -20
  458. package/dist/cjs/server/requests-auth-methods/base.cjs.map +0 -1
  459. package/dist/cjs/server/requests-auth-methods/base.min.cjs +0 -2
  460. package/dist/cjs/server/requests-auth-methods/base.min.cjs.map +0 -1
  461. package/dist/cjs/server/requests-auth-methods/index.cjs +0 -4
  462. package/dist/cjs/server/requests-auth-methods/index.cjs.map +0 -1
  463. package/dist/cjs/server/requests-auth-methods/index.min.cjs +0 -2
  464. package/dist/cjs/server/requests-auth-methods/index.min.cjs.map +0 -1
  465. package/dist/cjs/server/requests-auth-methods/jwt.cjs +0 -78
  466. package/dist/cjs/server/requests-auth-methods/jwt.cjs.map +0 -1
  467. package/dist/cjs/server/requests-auth-methods/jwt.min.cjs +0 -2
  468. package/dist/cjs/server/requests-auth-methods/jwt.min.cjs.map +0 -1
  469. package/dist/cjs/server/requests.cjs +0 -80
  470. package/dist/cjs/server/requests.cjs.map +0 -1
  471. package/dist/cjs/server/requests.min.cjs +0 -2
  472. package/dist/cjs/server/requests.min.cjs.map +0 -1
  473. package/dist/cjs/server/routes.cjs +0 -74
  474. package/dist/cjs/server/routes.cjs.map +0 -1
  475. package/dist/cjs/server/routes.min.cjs +0 -2
  476. package/dist/cjs/server/routes.min.cjs.map +0 -1
  477. package/dist/cjs/server/sockets.cjs +0 -126
  478. package/dist/cjs/server/sockets.cjs.map +0 -1
  479. package/dist/cjs/server/sockets.min.cjs +0 -2
  480. package/dist/cjs/server/sockets.min.cjs.map +0 -1
  481. package/dist/cjs/server/types.cjs +0 -34
  482. package/dist/cjs/server/types.cjs.map +0 -1
  483. package/dist/cjs/server/types.min.cjs +0 -2
  484. package/dist/cjs/server/types.min.cjs.map +0 -1
  485. package/dist/cjs/types/overrides.cjs +0 -1
  486. package/dist/cjs/types/overrides.cjs.map +0 -1
  487. package/dist/cjs/types/overrides.min.cjs +0 -1
  488. package/dist/cjs/types/overrides.min.cjs.map +0 -1
  489. package/dist/cjs/utilities/authProviders.cjs +0 -53
  490. package/dist/cjs/utilities/authProviders.cjs.map +0 -1
  491. package/dist/cjs/utilities/authProviders.min.cjs +0 -2
  492. package/dist/cjs/utilities/authProviders.min.cjs.map +0 -1
  493. package/dist/cjs/utilities/hash.cjs +0 -17
  494. package/dist/cjs/utilities/hash.cjs.map +0 -1
  495. package/dist/cjs/utilities/hash.min.cjs +0 -2
  496. package/dist/cjs/utilities/hash.min.cjs.map +0 -1
  497. package/dist/cjs/utilities/json.cjs +0 -16
  498. package/dist/cjs/utilities/json.cjs.map +0 -1
  499. package/dist/cjs/utilities/json.min.cjs +0 -2
  500. package/dist/cjs/utilities/json.min.cjs.map +0 -1
  501. package/dist/cjs/utilities/media.cjs +0 -13
  502. package/dist/cjs/utilities/media.cjs.map +0 -1
  503. package/dist/cjs/utilities/media.min.cjs +0 -2
  504. package/dist/cjs/utilities/media.min.cjs.map +0 -1
  505. package/dist/cjs/utilities/random.cjs +0 -12
  506. package/dist/cjs/utilities/random.cjs.map +0 -1
  507. package/dist/cjs/utilities/random.min.cjs +0 -2
  508. package/dist/cjs/utilities/random.min.cjs.map +0 -1
  509. package/dist/cjs/utilities/retry.cjs +0 -14
  510. package/dist/cjs/utilities/retry.cjs.map +0 -1
  511. package/dist/cjs/utilities/retry.min.cjs +0 -2
  512. package/dist/cjs/utilities/retry.min.cjs.map +0 -1
  513. package/dist/cjs/validations/valleyed.cjs +0 -43
  514. package/dist/cjs/validations/valleyed.cjs.map +0 -1
  515. package/dist/cjs/validations/valleyed.min.cjs +0 -2
  516. package/dist/cjs/validations/valleyed.min.cjs.map +0 -1
  517. package/dist/esm/audit/events.min.mjs +0 -2
  518. package/dist/esm/audit/events.min.mjs.map +0 -1
  519. package/dist/esm/audit/events.mjs +0 -101
  520. package/dist/esm/audit/events.mjs.map +0 -1
  521. package/dist/esm/audit/index.min.mjs +0 -2
  522. package/dist/esm/audit/index.min.mjs.map +0 -1
  523. package/dist/esm/audit/index.mjs +0 -2
  524. package/dist/esm/audit/index.mjs.map +0 -1
  525. package/dist/esm/cache/base.min.mjs +0 -2
  526. package/dist/esm/cache/base.min.mjs.map +0 -1
  527. package/dist/esm/cache/base.mjs +0 -6
  528. package/dist/esm/cache/base.mjs.map +0 -1
  529. package/dist/esm/cache/pipes.min.mjs +0 -2
  530. package/dist/esm/cache/pipes.min.mjs.map +0 -1
  531. package/dist/esm/cache/pipes.mjs +0 -16
  532. package/dist/esm/cache/pipes.mjs.map +0 -1
  533. package/dist/esm/cache/types/in-memory.min.mjs +0 -2
  534. package/dist/esm/cache/types/in-memory.min.mjs.map +0 -1
  535. package/dist/esm/cache/types/in-memory.mjs +0 -47
  536. package/dist/esm/cache/types/in-memory.mjs.map +0 -1
  537. package/dist/esm/cache/types/redis.min.mjs +0 -2
  538. package/dist/esm/cache/types/redis.min.mjs.map +0 -1
  539. package/dist/esm/cache/types/redis.mjs +0 -55
  540. package/dist/esm/cache/types/redis.mjs.map +0 -1
  541. package/dist/esm/dbs/base/changes.min.mjs +0 -2
  542. package/dist/esm/dbs/base/changes.min.mjs.map +0 -1
  543. package/dist/esm/dbs/base/changes.mjs +0 -36
  544. package/dist/esm/dbs/base/changes.mjs.map +0 -1
  545. package/dist/esm/dbs/base/core.min.mjs +0 -1
  546. package/dist/esm/dbs/base/core.mjs +0 -1
  547. package/dist/esm/dbs/base/db.min.mjs +0 -2
  548. package/dist/esm/dbs/base/db.min.mjs.map +0 -1
  549. package/dist/esm/dbs/base/db.mjs +0 -14
  550. package/dist/esm/dbs/base/db.mjs.map +0 -1
  551. package/dist/esm/dbs/base/types.min.mjs +0 -2
  552. package/dist/esm/dbs/base/types.min.mjs.map +0 -1
  553. package/dist/esm/dbs/base/types.mjs +0 -2
  554. package/dist/esm/dbs/base/types.mjs.map +0 -1
  555. package/dist/esm/dbs/mongo/changes.min.mjs +0 -2
  556. package/dist/esm/dbs/mongo/changes.min.mjs.map +0 -1
  557. package/dist/esm/dbs/mongo/changes.mjs +0 -81
  558. package/dist/esm/dbs/mongo/changes.mjs.map +0 -1
  559. package/dist/esm/dbs/mongo/db.min.mjs +0 -2
  560. package/dist/esm/dbs/mongo/db.min.mjs.map +0 -1
  561. package/dist/esm/dbs/mongo/db.mjs +0 -225
  562. package/dist/esm/dbs/mongo/db.mjs.map +0 -1
  563. package/dist/esm/dbs/mongo/query.min.mjs +0 -2
  564. package/dist/esm/dbs/mongo/query.min.mjs.map +0 -1
  565. package/dist/esm/dbs/mongo/query.mjs +0 -66
  566. package/dist/esm/dbs/mongo/query.mjs.map +0 -1
  567. package/dist/esm/dbs/pipes.min.mjs +0 -2
  568. package/dist/esm/dbs/pipes.min.mjs.map +0 -1
  569. package/dist/esm/dbs/pipes.mjs +0 -104
  570. package/dist/esm/dbs/pipes.mjs.map +0 -1
  571. package/dist/esm/errors/equippedError.min.mjs +0 -2
  572. package/dist/esm/errors/equippedError.min.mjs.map +0 -1
  573. package/dist/esm/errors/equippedError.mjs +0 -12
  574. package/dist/esm/errors/equippedError.mjs.map +0 -1
  575. package/dist/esm/errors/requestError.min.mjs +0 -2
  576. package/dist/esm/errors/requestError.min.mjs.map +0 -1
  577. package/dist/esm/errors/requestError.mjs +0 -12
  578. package/dist/esm/errors/requestError.mjs.map +0 -1
  579. package/dist/esm/errors/types/badRequestError.min.mjs +0 -2
  580. package/dist/esm/errors/types/badRequestError.min.mjs.map +0 -1
  581. package/dist/esm/errors/types/badRequestError.mjs +0 -12
  582. package/dist/esm/errors/types/badRequestError.mjs.map +0 -1
  583. package/dist/esm/errors/types/notAuthenticatedError.min.mjs +0 -2
  584. package/dist/esm/errors/types/notAuthenticatedError.min.mjs.map +0 -1
  585. package/dist/esm/errors/types/notAuthenticatedError.mjs +0 -12
  586. package/dist/esm/errors/types/notAuthenticatedError.mjs.map +0 -1
  587. package/dist/esm/errors/types/notAuthorizedError.min.mjs +0 -2
  588. package/dist/esm/errors/types/notAuthorizedError.min.mjs.map +0 -1
  589. package/dist/esm/errors/types/notAuthorizedError.mjs +0 -12
  590. package/dist/esm/errors/types/notAuthorizedError.mjs.map +0 -1
  591. package/dist/esm/errors/types/notFoundError.min.mjs +0 -2
  592. package/dist/esm/errors/types/notFoundError.min.mjs.map +0 -1
  593. package/dist/esm/errors/types/notFoundError.mjs +0 -12
  594. package/dist/esm/errors/types/notFoundError.mjs.map +0 -1
  595. package/dist/esm/errors/types/tokenExpired.min.mjs +0 -2
  596. package/dist/esm/errors/types/tokenExpired.min.mjs.map +0 -1
  597. package/dist/esm/errors/types/tokenExpired.mjs +0 -12
  598. package/dist/esm/errors/types/tokenExpired.mjs.map +0 -1
  599. package/dist/esm/errors/types/validationError.min.mjs +0 -2
  600. package/dist/esm/errors/types/validationError.min.mjs.map +0 -1
  601. package/dist/esm/errors/types/validationError.mjs +0 -16
  602. package/dist/esm/errors/types/validationError.mjs.map +0 -1
  603. package/dist/esm/events/base.min.mjs +0 -2
  604. package/dist/esm/events/base.min.mjs.map +0 -1
  605. package/dist/esm/events/base.mjs +0 -6
  606. package/dist/esm/events/base.mjs.map +0 -1
  607. package/dist/esm/events/pipes.min.mjs +0 -2
  608. package/dist/esm/events/pipes.min.mjs.map +0 -1
  609. package/dist/esm/events/pipes.mjs +0 -28
  610. package/dist/esm/events/pipes.mjs.map +0 -1
  611. package/dist/esm/events/types/kafka.min.mjs +0 -2
  612. package/dist/esm/events/types/kafka.min.mjs.map +0 -1
  613. package/dist/esm/events/types/kafka.mjs.map +0 -1
  614. package/dist/esm/events/types/rabbitmq.min.mjs +0 -2
  615. package/dist/esm/events/types/rabbitmq.min.mjs.map +0 -1
  616. package/dist/esm/events/types/rabbitmq.mjs +0 -54
  617. package/dist/esm/events/types/rabbitmq.mjs.map +0 -1
  618. package/dist/esm/instance/hooks.min.mjs +0 -2
  619. package/dist/esm/instance/hooks.min.mjs.map +0 -1
  620. package/dist/esm/instance/hooks.mjs +0 -26
  621. package/dist/esm/instance/hooks.mjs.map +0 -1
  622. package/dist/esm/instance/settings.min.mjs +0 -2
  623. package/dist/esm/instance/settings.min.mjs.map +0 -1
  624. package/dist/esm/instance/settings.mjs +0 -57
  625. package/dist/esm/instance/settings.mjs.map +0 -1
  626. package/dist/esm/jobs/pipes.min.mjs +0 -2
  627. package/dist/esm/jobs/pipes.min.mjs.map +0 -1
  628. package/dist/esm/jobs/pipes.mjs +0 -13
  629. package/dist/esm/jobs/pipes.mjs.map +0 -1
  630. package/dist/esm/jobs/types/redis.min.mjs +0 -2
  631. package/dist/esm/jobs/types/redis.min.mjs.map +0 -1
  632. package/dist/esm/jobs/types/redis.mjs.map +0 -1
  633. package/dist/esm/server/impls/base.min.mjs +0 -2
  634. package/dist/esm/server/impls/base.min.mjs.map +0 -1
  635. package/dist/esm/server/impls/base.mjs +0 -211
  636. package/dist/esm/server/impls/base.mjs.map +0 -1
  637. package/dist/esm/server/impls/express.min.mjs +0 -2
  638. package/dist/esm/server/impls/express.min.mjs.map +0 -1
  639. package/dist/esm/server/impls/express.mjs +0 -111
  640. package/dist/esm/server/impls/express.mjs.map +0 -1
  641. package/dist/esm/server/impls/fastify.min.mjs +0 -2
  642. package/dist/esm/server/impls/fastify.min.mjs.map +0 -1
  643. package/dist/esm/server/impls/fastify.mjs +0 -121
  644. package/dist/esm/server/impls/fastify.mjs.map +0 -1
  645. package/dist/esm/server/middlewares/index.min.mjs +0 -2
  646. package/dist/esm/server/middlewares/index.min.mjs.map +0 -1
  647. package/dist/esm/server/middlewares/index.mjs +0 -2
  648. package/dist/esm/server/middlewares/index.mjs.map +0 -1
  649. package/dist/esm/server/middlewares/requireAuthUser.min.mjs +0 -2
  650. package/dist/esm/server/middlewares/requireAuthUser.min.mjs.map +0 -1
  651. package/dist/esm/server/middlewares/requireAuthUser.mjs +0 -22
  652. package/dist/esm/server/middlewares/requireAuthUser.mjs.map +0 -1
  653. package/dist/esm/server/openapi.min.mjs +0 -30
  654. package/dist/esm/server/openapi.min.mjs.map +0 -1
  655. package/dist/esm/server/openapi.mjs +0 -191
  656. package/dist/esm/server/openapi.mjs.map +0 -1
  657. package/dist/esm/server/pipes.min.mjs +0 -2
  658. package/dist/esm/server/pipes.min.mjs.map +0 -1
  659. package/dist/esm/server/pipes.mjs +0 -67
  660. package/dist/esm/server/pipes.mjs.map +0 -1
  661. package/dist/esm/server/requests-auth-methods/apiKeys.min.mjs +0 -2
  662. package/dist/esm/server/requests-auth-methods/apiKeys.min.mjs.map +0 -1
  663. package/dist/esm/server/requests-auth-methods/apiKeys.mjs +0 -21
  664. package/dist/esm/server/requests-auth-methods/apiKeys.mjs.map +0 -1
  665. package/dist/esm/server/requests-auth-methods/base.min.mjs +0 -2
  666. package/dist/esm/server/requests-auth-methods/base.min.mjs.map +0 -1
  667. package/dist/esm/server/requests-auth-methods/base.mjs +0 -20
  668. package/dist/esm/server/requests-auth-methods/base.mjs.map +0 -1
  669. package/dist/esm/server/requests-auth-methods/index.min.mjs +0 -2
  670. package/dist/esm/server/requests-auth-methods/index.min.mjs.map +0 -1
  671. package/dist/esm/server/requests-auth-methods/index.mjs +0 -4
  672. package/dist/esm/server/requests-auth-methods/index.mjs.map +0 -1
  673. package/dist/esm/server/requests-auth-methods/jwt.min.mjs +0 -2
  674. package/dist/esm/server/requests-auth-methods/jwt.min.mjs.map +0 -1
  675. package/dist/esm/server/requests-auth-methods/jwt.mjs +0 -78
  676. package/dist/esm/server/requests-auth-methods/jwt.mjs.map +0 -1
  677. package/dist/esm/server/requests.min.mjs +0 -2
  678. package/dist/esm/server/requests.min.mjs.map +0 -1
  679. package/dist/esm/server/requests.mjs +0 -80
  680. package/dist/esm/server/requests.mjs.map +0 -1
  681. package/dist/esm/server/routes.min.mjs +0 -2
  682. package/dist/esm/server/routes.min.mjs.map +0 -1
  683. package/dist/esm/server/routes.mjs +0 -74
  684. package/dist/esm/server/routes.mjs.map +0 -1
  685. package/dist/esm/server/sockets.min.mjs +0 -2
  686. package/dist/esm/server/sockets.min.mjs.map +0 -1
  687. package/dist/esm/server/sockets.mjs +0 -126
  688. package/dist/esm/server/sockets.mjs.map +0 -1
  689. package/dist/esm/server/types.min.mjs +0 -2
  690. package/dist/esm/server/types.min.mjs.map +0 -1
  691. package/dist/esm/server/types.mjs +0 -34
  692. package/dist/esm/server/types.mjs.map +0 -1
  693. package/dist/esm/types/overrides.min.mjs +0 -1
  694. package/dist/esm/types/overrides.mjs +0 -1
  695. package/dist/esm/utilities/authProviders.min.mjs +0 -2
  696. package/dist/esm/utilities/authProviders.min.mjs.map +0 -1
  697. package/dist/esm/utilities/authProviders.mjs +0 -53
  698. package/dist/esm/utilities/authProviders.mjs.map +0 -1
  699. package/dist/esm/utilities/hash.min.mjs +0 -2
  700. package/dist/esm/utilities/hash.min.mjs.map +0 -1
  701. package/dist/esm/utilities/hash.mjs +0 -17
  702. package/dist/esm/utilities/hash.mjs.map +0 -1
  703. package/dist/esm/utilities/json.min.mjs +0 -2
  704. package/dist/esm/utilities/json.min.mjs.map +0 -1
  705. package/dist/esm/utilities/json.mjs +0 -16
  706. package/dist/esm/utilities/json.mjs.map +0 -1
  707. package/dist/esm/utilities/media.min.mjs +0 -2
  708. package/dist/esm/utilities/media.min.mjs.map +0 -1
  709. package/dist/esm/utilities/media.mjs +0 -13
  710. package/dist/esm/utilities/media.mjs.map +0 -1
  711. package/dist/esm/utilities/random.min.mjs +0 -2
  712. package/dist/esm/utilities/random.min.mjs.map +0 -1
  713. package/dist/esm/utilities/random.mjs +0 -12
  714. package/dist/esm/utilities/random.mjs.map +0 -1
  715. package/dist/esm/utilities/retry.min.mjs +0 -2
  716. package/dist/esm/utilities/retry.min.mjs.map +0 -1
  717. package/dist/esm/utilities/retry.mjs +0 -14
  718. package/dist/esm/utilities/retry.mjs.map +0 -1
  719. package/dist/esm/validations/valleyed.min.mjs +0 -2
  720. package/dist/esm/validations/valleyed.min.mjs.map +0 -1
  721. package/dist/esm/validations/valleyed.mjs +0 -43
  722. package/dist/esm/validations/valleyed.mjs.map +0 -1
  723. package/dist/types/audit/events.js +0 -100
  724. package/dist/types/audit/index.d.ts +0 -44
  725. package/dist/types/audit/index.js +0 -1
  726. package/dist/types/cache/base.js +0 -5
  727. package/dist/types/cache/pipes.js +0 -15
  728. package/dist/types/cache/types/in-memory.js +0 -46
  729. package/dist/types/cache/types/redis.js +0 -54
  730. package/dist/types/db-C8YY1yTO.d.ts +0 -14
  731. package/dist/types/db-Dj1SGto0.d.ts +0 -24
  732. package/dist/types/dbs/base/changes.js +0 -35
  733. package/dist/types/dbs/base/core.js +0 -0
  734. package/dist/types/dbs/base/db.js +0 -13
  735. package/dist/types/dbs/base/types.js +0 -1
  736. package/dist/types/dbs/mongo/changes.js +0 -80
  737. package/dist/types/dbs/mongo/db.js +0 -224
  738. package/dist/types/dbs/mongo/query.js +0 -65
  739. package/dist/types/dbs/pipes.js +0 -103
  740. package/dist/types/errors/equippedError.js +0 -11
  741. package/dist/types/errors/requestError.js +0 -11
  742. package/dist/types/errors/types/badRequestError.js +0 -11
  743. package/dist/types/errors/types/notAuthenticatedError.js +0 -11
  744. package/dist/types/errors/types/notAuthorizedError.js +0 -11
  745. package/dist/types/errors/types/notFoundError.js +0 -11
  746. package/dist/types/errors/types/tokenExpired.js +0 -11
  747. package/dist/types/errors/types/validationError.js +0 -15
  748. package/dist/types/events/base.js +0 -5
  749. package/dist/types/events/pipes.js +0 -27
  750. package/dist/types/events/types/rabbitmq.js +0 -53
  751. package/dist/types/instance/hooks.js +0 -25
  752. package/dist/types/instance/settings.js +0 -56
  753. package/dist/types/jobs/pipes.js +0 -12
  754. package/dist/types/kafka-Cf-TUJgv.d.ts +0 -54
  755. package/dist/types/server/impls/base.js +0 -210
  756. package/dist/types/server/impls/express.js +0 -110
  757. package/dist/types/server/impls/fastify.js +0 -120
  758. package/dist/types/server/middlewares/index.js +0 -1
  759. package/dist/types/server/middlewares/requireAuthUser.js +0 -21
  760. package/dist/types/server/openapi.js +0 -190
  761. package/dist/types/server/pipes.js +0 -66
  762. package/dist/types/server/requests-auth-methods/apiKeys.js +0 -20
  763. package/dist/types/server/requests-auth-methods/base.js +0 -19
  764. package/dist/types/server/requests-auth-methods/index.js +0 -3
  765. package/dist/types/server/requests-auth-methods/jwt.js +0 -77
  766. package/dist/types/server/requests.js +0 -79
  767. package/dist/types/server/routes.js +0 -73
  768. package/dist/types/server/sockets.js +0 -125
  769. package/dist/types/server/types.js +0 -33
  770. package/dist/types/types/overrides.js +0 -0
  771. package/dist/types/utilities/authProviders.js +0 -52
  772. package/dist/types/utilities/hash.js +0 -16
  773. package/dist/types/utilities/json.js +0 -15
  774. package/dist/types/utilities/media.js +0 -12
  775. package/dist/types/utilities/random.js +0 -11
  776. package/dist/types/utilities/retry.js +0 -13
  777. package/dist/types/validations/valleyed.js +0 -42
  778. /package/dist/esm/{dbs/base/core.min.mjs.map → cache/adapters/redis/index.min.mjs.map} +0 -0
  779. /package/dist/esm/{dbs/base/core.mjs.map → cache/adapters/redis/index.mjs.map} +0 -0
  780. /package/dist/esm/{types/overrides.min.mjs.map → chunk-AQY7QVYI.min.mjs.map} +0 -0
  781. /package/dist/esm/{types/overrides.mjs.map → chunk-J5LGTIGS.mjs.map} +0 -0
@@ -0,0 +1,1974 @@
1
+ "use strict";
2
+ var __create = Object.create;
3
+ var __defProp = Object.defineProperty;
4
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
5
+ var __getOwnPropNames = Object.getOwnPropertyNames;
6
+ var __getProtoOf = Object.getPrototypeOf;
7
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
8
+ var __export = (target, all) => {
9
+ for (var name in all)
10
+ __defProp(target, name, { get: all[name], enumerable: true });
11
+ };
12
+ var __copyProps = (to, from, except, desc) => {
13
+ if (from && typeof from === "object" || typeof from === "function") {
14
+ for (let key of __getOwnPropNames(from))
15
+ if (!__hasOwnProp.call(to, key) && key !== except)
16
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
17
+ }
18
+ return to;
19
+ };
20
+ var __reExport = (target, mod, secondTarget) => (__copyProps(target, mod, "default"), secondTarget && __copyProps(secondTarget, mod, "default"));
21
+ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
22
+ // If the importer is in node compatibility mode or this is not an ESM
23
+ // file that has been converted to a CommonJS file using a Babel-
24
+ // compatible transform (i.e. "__esModule" has not been set), then set
25
+ // "default" to the CommonJS "module.exports" for node compatibility.
26
+ isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
27
+ mod
28
+ ));
29
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
30
+
31
+ // src/server/adapters/fastify/index.ts
32
+ var fastify_exports = {};
33
+ __export(fastify_exports, {
34
+ FastifyServer: () => FastifyServer
35
+ });
36
+ module.exports = __toCommonJS(fastify_exports);
37
+ var import_cookie = __toESM(require("@fastify/cookie"), 1);
38
+ var import_cors3 = __toESM(require("@fastify/cors"), 1);
39
+ var import_formbody = __toESM(require("@fastify/formbody"), 1);
40
+ var import_helmet = __toESM(require("@fastify/helmet"), 1);
41
+ var import_multipart = __toESM(require("@fastify/multipart"), 1);
42
+ var import_rate_limit = __toESM(require("@fastify/rate-limit"), 1);
43
+ var import_static = __toESM(require("@fastify/static"), 1);
44
+ var import_fastify = __toESM(require("fastify"), 1);
45
+ var import_qs = __toESM(require("qs"), 1);
46
+
47
+ // src/errors/equippedError.ts
48
+ var EquippedError = class extends Error {
49
+ constructor(message, context, cause) {
50
+ super(message, { cause });
51
+ this.message = message;
52
+ this.context = context;
53
+ this.cause = cause;
54
+ }
55
+ };
56
+
57
+ // src/errors/requestError.ts
58
+ var RequestError = class extends EquippedError {
59
+ constructor(message, serializedErrors, cause) {
60
+ super(message, { serializedErrors }, cause);
61
+ this.message = message;
62
+ this.serializedErrors = serializedErrors;
63
+ }
64
+ };
65
+
66
+ // src/server/adapters/base.ts
67
+ var import_node_http = require("http");
68
+ var import_cors = require("@fastify/cors");
69
+ var import_cors2 = require("cors");
70
+ var import_socket = require("socket.io");
71
+ var import_supertest = __toESM(require("supertest"), 1);
72
+ var import_valleyed8 = require("valleyed");
73
+
74
+ // src/events/adapters/base.ts
75
+ var EventBus = class {
76
+ };
77
+
78
+ // src/instance/index.ts
79
+ var import_pino = __toESM(require("pino"), 1);
80
+ var import_ulid = require("ulid");
81
+ var import_valleyed2 = require("valleyed");
82
+
83
+ // src/instance/hooks.ts
84
+ function registerHook(hooks, record) {
85
+ for (const dep of record.after) {
86
+ if (!hooks.some((h) => h.class === dep)) {
87
+ const depName = dep.name || "unknown";
88
+ const ownerName = record.class?.name || "anonymous";
89
+ throw new Error(`Missing dependency: ${ownerName} declares after: [${depName}], but ${depName} is not registered`);
90
+ }
91
+ }
92
+ if (record.class) {
93
+ const tentative = [...hooks, record];
94
+ detectCycle(tentative);
95
+ }
96
+ hooks.push(record);
97
+ }
98
+ function detectCycle(hooks) {
99
+ const classToAfter = /* @__PURE__ */ new Map();
100
+ for (const h of hooks) {
101
+ if (!h.class) continue;
102
+ const existing = classToAfter.get(h.class);
103
+ if (existing) {
104
+ for (const dep of h.after) {
105
+ if (!existing.includes(dep)) existing.push(dep);
106
+ }
107
+ } else {
108
+ classToAfter.set(h.class, [...h.after]);
109
+ }
110
+ }
111
+ const visited = /* @__PURE__ */ new Set();
112
+ const stack = /* @__PURE__ */ new Set();
113
+ function visit(cls, path) {
114
+ if (stack.has(cls)) {
115
+ const cycleStart = path.indexOf(cls);
116
+ const cycle = [...path.slice(cycleStart), cls];
117
+ const names = cycle.map((c) => c.name || "unknown");
118
+ throw new Error(`Cycle detected: ${names.join(" \u2192 ")}`);
119
+ }
120
+ if (visited.has(cls)) return;
121
+ stack.add(cls);
122
+ path.push(cls);
123
+ for (const dep of classToAfter.get(cls) ?? []) {
124
+ visit(dep, path);
125
+ }
126
+ path.pop();
127
+ stack.delete(cls);
128
+ visited.add(cls);
129
+ }
130
+ for (const cls of classToAfter.keys()) {
131
+ visit(cls, []);
132
+ }
133
+ }
134
+ function resolveHookDAG(hooks, invert = false) {
135
+ if (hooks.length === 0) return [];
136
+ const classToHooks = /* @__PURE__ */ new Map();
137
+ const anonymous = [];
138
+ for (const h of hooks) {
139
+ if (h.class) {
140
+ const list = classToHooks.get(h.class);
141
+ if (list) list.push(h);
142
+ else classToHooks.set(h.class, [h]);
143
+ } else {
144
+ anonymous.push(h);
145
+ }
146
+ }
147
+ const classes = [...classToHooks.keys()];
148
+ const inDegree = /* @__PURE__ */ new Map();
149
+ const graph = /* @__PURE__ */ new Map();
150
+ for (const cls of classes) {
151
+ inDegree.set(cls, 0);
152
+ graph.set(cls, []);
153
+ }
154
+ for (const h of hooks) {
155
+ if (!h.class) continue;
156
+ for (const dep of h.after) {
157
+ const [from, to] = invert ? [h.class, dep] : [dep, h.class];
158
+ const edges = graph.get(from);
159
+ if (!edges.includes(to)) {
160
+ edges.push(to);
161
+ inDegree.set(to, inDegree.get(to) + 1);
162
+ }
163
+ }
164
+ }
165
+ const layers = [];
166
+ let queue = classes.filter((c) => inDegree.get(c) === 0);
167
+ while (queue.length > 0) {
168
+ const layer = [];
169
+ const next = [];
170
+ for (const cls of queue) {
171
+ layer.push(...classToHooks.get(cls) ?? []);
172
+ }
173
+ layers.push(layer);
174
+ for (const cls of queue) {
175
+ for (const neighbor of graph.get(cls) ?? []) {
176
+ const d = inDegree.get(neighbor) - 1;
177
+ inDegree.set(neighbor, d);
178
+ if (d === 0) next.push(neighbor);
179
+ }
180
+ }
181
+ queue = next;
182
+ }
183
+ if (anonymous.length > 0) {
184
+ const anonWithDeps = anonymous.filter((h) => h.after.length > 0);
185
+ const anonWithoutDeps = anonymous.filter((h) => h.after.length === 0);
186
+ if (anonWithDeps.length > 0) {
187
+ let maxLayer = -1;
188
+ for (const h of anonWithDeps) {
189
+ for (const dep of h.after) {
190
+ const depLayer = layers.findIndex((l) => l.some((r) => r.class === dep));
191
+ if (depLayer > maxLayer) maxLayer = depLayer;
192
+ }
193
+ }
194
+ const insertAt = maxLayer + 1;
195
+ if (insertAt < layers.length) {
196
+ layers[insertAt].push(...anonWithDeps);
197
+ } else {
198
+ layers.push(anonWithDeps);
199
+ }
200
+ }
201
+ if (anonWithoutDeps.length > 0) {
202
+ if (layers.length > 0) {
203
+ layers[layers.length - 1].push(...anonWithoutDeps);
204
+ } else {
205
+ layers.push(anonWithoutDeps);
206
+ }
207
+ }
208
+ }
209
+ return layers;
210
+ }
211
+ async function runHooks(hooks, onError = (error) => {
212
+ throw error;
213
+ }, invert = false) {
214
+ const layers = resolveHookDAG(hooks, invert);
215
+ for (const layer of layers)
216
+ await Promise.all(
217
+ layer.map(async (h) => {
218
+ try {
219
+ if (typeof h.cb === "function") return await h.cb();
220
+ return await h.cb;
221
+ } catch (error) {
222
+ return onError(error instanceof Error ? error : new Error(`${error}`));
223
+ }
224
+ })
225
+ );
226
+ }
227
+ if (void 0) {
228
+ const { describe, test, expect } = void 0;
229
+ class A {
230
+ }
231
+ class B {
232
+ }
233
+ class C {
234
+ }
235
+ class D {
236
+ }
237
+ const noop = () => {
238
+ };
239
+ describe("registerHook", () => {
240
+ test("registers a hook with no dependencies", () => {
241
+ const hooks = [];
242
+ registerHook(hooks, { cb: noop, class: A, after: [] });
243
+ expect(hooks).toHaveLength(1);
244
+ });
245
+ test("throws on missing dependency", () => {
246
+ const hooks = [];
247
+ expect(() => registerHook(hooks, { cb: noop, class: B, after: [A] })).toThrow(/Missing dependency.*B.*A/);
248
+ });
249
+ test("throws on cycle: A\u2192B\u2192A", () => {
250
+ const hooks = [];
251
+ registerHook(hooks, { cb: noop, class: A, after: [] });
252
+ registerHook(hooks, { cb: noop, class: B, after: [A] });
253
+ expect(() => registerHook(hooks, { cb: noop, class: A, after: [B] })).toThrow(/Cycle detected/);
254
+ });
255
+ test("throws on transitive cycle: A\u2192B\u2192C\u2192A", () => {
256
+ const hooks = [];
257
+ registerHook(hooks, { cb: noop, class: A, after: [] });
258
+ registerHook(hooks, { cb: noop, class: B, after: [A] });
259
+ registerHook(hooks, { cb: noop, class: C, after: [B] });
260
+ expect(() => registerHook(hooks, { cb: noop, class: A, after: [C] })).toThrow(/Cycle detected/);
261
+ });
262
+ test("allows anonymous hooks with dependencies", () => {
263
+ const hooks = [];
264
+ registerHook(hooks, { cb: noop, class: A, after: [] });
265
+ registerHook(hooks, { cb: noop, after: [A] });
266
+ expect(hooks).toHaveLength(2);
267
+ });
268
+ test("anonymous hook throws on missing dependency", () => {
269
+ const hooks = [];
270
+ expect(() => registerHook(hooks, { cb: noop, after: [A] })).toThrow(/Missing dependency.*anonymous.*A/);
271
+ });
272
+ });
273
+ describe("resolveHookDAG", () => {
274
+ test("linear chain: A \u2192 B \u2192 C", () => {
275
+ const hooks = [
276
+ { cb: noop, class: A, after: [] },
277
+ { cb: noop, class: B, after: [A] },
278
+ { cb: noop, class: C, after: [B] }
279
+ ];
280
+ const layers = resolveHookDAG(hooks);
281
+ expect(layers).toHaveLength(3);
282
+ expect(layers[0].every((h) => h.class === A)).toBe(true);
283
+ expect(layers[1].every((h) => h.class === B)).toBe(true);
284
+ expect(layers[2].every((h) => h.class === C)).toBe(true);
285
+ });
286
+ test("fan-out: A \u2192 B, A \u2192 C (B and C are parallel)", () => {
287
+ const hooks = [
288
+ { cb: noop, class: A, after: [] },
289
+ { cb: noop, class: B, after: [A] },
290
+ { cb: noop, class: C, after: [A] }
291
+ ];
292
+ const layers = resolveHookDAG(hooks);
293
+ expect(layers).toHaveLength(2);
294
+ expect(layers[0].every((h) => h.class === A)).toBe(true);
295
+ const secondClasses = layers[1].map((h) => h.class);
296
+ expect(secondClasses).toContain(B);
297
+ expect(secondClasses).toContain(C);
298
+ });
299
+ test("fan-in: B \u2192 D, C \u2192 D", () => {
300
+ const hooks = [
301
+ { cb: noop, class: B, after: [] },
302
+ { cb: noop, class: C, after: [] },
303
+ { cb: noop, class: D, after: [B, C] }
304
+ ];
305
+ const layers = resolveHookDAG(hooks);
306
+ expect(layers).toHaveLength(2);
307
+ const firstClasses = layers[0].map((h) => h.class);
308
+ expect(firstClasses).toContain(B);
309
+ expect(firstClasses).toContain(C);
310
+ expect(layers[1].every((h) => h.class === D)).toBe(true);
311
+ });
312
+ test("diamond: A \u2192 B, A \u2192 C, B \u2192 D, C \u2192 D", () => {
313
+ const hooks = [
314
+ { cb: noop, class: A, after: [] },
315
+ { cb: noop, class: B, after: [A] },
316
+ { cb: noop, class: C, after: [A] },
317
+ { cb: noop, class: D, after: [B, C] }
318
+ ];
319
+ const layers = resolveHookDAG(hooks);
320
+ expect(layers).toHaveLength(3);
321
+ expect(layers[0][0].class).toBe(A);
322
+ const midClasses = layers[1].map((h) => h.class);
323
+ expect(midClasses).toContain(B);
324
+ expect(midClasses).toContain(C);
325
+ expect(layers[2][0].class).toBe(D);
326
+ });
327
+ test("close-event inversion reverses the graph", () => {
328
+ const hooks = [
329
+ { cb: noop, class: A, after: [] },
330
+ { cb: noop, class: B, after: [A] },
331
+ { cb: noop, class: C, after: [B] }
332
+ ];
333
+ const layers = resolveHookDAG(hooks, true);
334
+ expect(layers).toHaveLength(3);
335
+ expect(layers[0].every((h) => h.class === C)).toBe(true);
336
+ expect(layers[1].every((h) => h.class === B)).toBe(true);
337
+ expect(layers[2].every((h) => h.class === A)).toBe(true);
338
+ });
339
+ test("close inversion: fan-out becomes fan-in", () => {
340
+ const hooks = [
341
+ { cb: noop, class: A, after: [] },
342
+ { cb: noop, class: B, after: [A] },
343
+ { cb: noop, class: C, after: [A] }
344
+ ];
345
+ const layers = resolveHookDAG(hooks, true);
346
+ expect(layers).toHaveLength(2);
347
+ const firstClasses = layers[0].map((h) => h.class);
348
+ expect(firstClasses).toContain(B);
349
+ expect(firstClasses).toContain(C);
350
+ expect(layers[1].every((h) => h.class === A)).toBe(true);
351
+ });
352
+ test("multiple hooks per class are all in the same layer", () => {
353
+ const cb1 = () => {
354
+ };
355
+ const cb2 = () => {
356
+ };
357
+ const hooks = [
358
+ { cb: cb1, class: A, after: [] },
359
+ { cb: cb2, class: A, after: [] },
360
+ { cb: noop, class: B, after: [A] }
361
+ ];
362
+ const layers = resolveHookDAG(hooks);
363
+ expect(layers).toHaveLength(2);
364
+ expect(layers[0]).toHaveLength(2);
365
+ expect(layers[0].every((h) => h.class === A)).toBe(true);
366
+ });
367
+ test("anonymous hooks without deps run at deepest level", () => {
368
+ const hooks = [
369
+ { cb: noop, class: A, after: [] },
370
+ { cb: noop, class: B, after: [A] },
371
+ { cb: noop, after: [] }
372
+ ];
373
+ const layers = resolveHookDAG(hooks);
374
+ expect(layers).toHaveLength(2);
375
+ const lastLayer = layers[layers.length - 1];
376
+ expect(lastLayer.some((h) => h.class === void 0)).toBe(true);
377
+ });
378
+ test("anonymous hooks with deps run after their dependencies", () => {
379
+ const hooks = [
380
+ { cb: noop, class: A, after: [] },
381
+ { cb: noop, class: B, after: [A] },
382
+ { cb: noop, class: C, after: [B] },
383
+ { cb: noop, after: [A] }
384
+ ];
385
+ const layers = resolveHookDAG(hooks);
386
+ const anonLayer = layers.findIndex((l) => l.some((h) => h.class === void 0));
387
+ const aLayer = layers.findIndex((l) => l.some((h) => h.class === A));
388
+ expect(anonLayer).toBeGreaterThan(aLayer);
389
+ });
390
+ test("empty hooks returns empty layers", () => {
391
+ expect(resolveHookDAG([])).toEqual([]);
392
+ });
393
+ });
394
+ describe("runHooks", () => {
395
+ test("same-depth siblings observably overlap", async () => {
396
+ const log = [];
397
+ const hooks = [
398
+ {
399
+ cb: async () => {
400
+ log.push("B-start");
401
+ await new Promise((r) => setTimeout(r, 20));
402
+ log.push("B-end");
403
+ },
404
+ class: B,
405
+ after: []
406
+ },
407
+ {
408
+ cb: async () => {
409
+ log.push("C-start");
410
+ await new Promise((r) => setTimeout(r, 20));
411
+ log.push("C-end");
412
+ },
413
+ class: C,
414
+ after: []
415
+ }
416
+ ];
417
+ await runHooks(hooks);
418
+ expect(log[0]).toBe("B-start");
419
+ expect(log[1]).toBe("C-start");
420
+ });
421
+ test("different depths run sequentially", async () => {
422
+ const log = [];
423
+ const hooks = [
424
+ {
425
+ cb: async () => {
426
+ log.push("A");
427
+ },
428
+ class: A,
429
+ after: []
430
+ },
431
+ {
432
+ cb: async () => {
433
+ log.push("B");
434
+ },
435
+ class: B,
436
+ after: [A]
437
+ }
438
+ ];
439
+ await runHooks(hooks);
440
+ expect(log).toEqual(["A", "B"]);
441
+ });
442
+ test("close inversion runs hooks in reverse dependency order", async () => {
443
+ const log = [];
444
+ const hooks = [
445
+ { cb: async () => log.push("A"), class: A, after: [] },
446
+ { cb: async () => log.push("B"), class: B, after: [A] },
447
+ { cb: async () => log.push("C"), class: C, after: [B] }
448
+ ];
449
+ await runHooks(hooks, void 0, true);
450
+ expect(log).toEqual(["C", "B", "A"]);
451
+ });
452
+ test("errors are routed to onError handler", async () => {
453
+ const errors = [];
454
+ const hooks = [
455
+ {
456
+ cb: () => {
457
+ throw new Error("boom");
458
+ },
459
+ class: A,
460
+ after: []
461
+ }
462
+ ];
463
+ await runHooks(hooks, (e) => {
464
+ errors.push(e);
465
+ });
466
+ expect(errors).toHaveLength(1);
467
+ expect(errors[0].message).toBe("boom");
468
+ });
469
+ test("raw promise callbacks are awaited", async () => {
470
+ const log = [];
471
+ const hooks = [
472
+ {
473
+ cb: Promise.resolve().then(() => log.push("resolved")),
474
+ class: A,
475
+ after: []
476
+ }
477
+ ];
478
+ await runHooks(hooks);
479
+ expect(log).toContain("resolved");
480
+ });
481
+ });
482
+ }
483
+
484
+ // src/instance/settings.ts
485
+ var import_valleyed = require("valleyed");
486
+ var instanceSettingsPipe = () => import_valleyed.v.object({
487
+ app: import_valleyed.v.object({
488
+ name: import_valleyed.v.string()
489
+ }),
490
+ log: import_valleyed.v.defaults(
491
+ import_valleyed.v.object({
492
+ level: import_valleyed.v.defaults(import_valleyed.v.in(["fatal", "error", "warn", "info", "debug", "trace", "silent"]), "info")
493
+ }),
494
+ {}
495
+ ),
496
+ utils: import_valleyed.v.defaults(
497
+ import_valleyed.v.object({
498
+ hashSaltRounds: import_valleyed.v.defaults(import_valleyed.v.number(), 10),
499
+ paginationDefaultLimit: import_valleyed.v.defaults(import_valleyed.v.number(), 100),
500
+ maxFileUploadSizeInMb: import_valleyed.v.defaults(import_valleyed.v.number(), 500)
501
+ }),
502
+ {}
503
+ )
504
+ });
505
+
506
+ // src/instance/index.ts
507
+ var Instance = class _Instance {
508
+ static #id;
509
+ static #instance;
510
+ static #hooks = {};
511
+ settings;
512
+ log;
513
+ constructor(settings) {
514
+ _Instance.#instance = this;
515
+ this.settings = Object.freeze(settings);
516
+ this.log = (0, import_pino.default)({
517
+ level: this.settings.log.level,
518
+ serializers: {
519
+ err: import_pino.default.stdSerializers.err,
520
+ error: import_pino.default.stdSerializers.err,
521
+ req: import_pino.default.stdSerializers.req,
522
+ res: import_pino.default.stdSerializers.res
523
+ },
524
+ mixin: () => ({
525
+ instanceId: _Instance.#id
526
+ })
527
+ });
528
+ _Instance.#registerOnExitHandler();
529
+ }
530
+ alias(id) {
531
+ if (_Instance.#id !== void 0) return _Instance.crash(new EquippedError("Instance already has an alias", {}));
532
+ _Instance.#id = id;
533
+ }
534
+ get id() {
535
+ if (_Instance.#id === void 0) return _Instance.crash(new EquippedError("Instance doesnt have an alias yet", {}));
536
+ return _Instance.#id;
537
+ }
538
+ getScopedName(name, key = ".") {
539
+ return [this.settings.app.name, name].join(key);
540
+ }
541
+ async start() {
542
+ try {
543
+ await runHooks(_Instance.#hooks["setup"] ?? []);
544
+ await runHooks(_Instance.#hooks["start"] ?? []);
545
+ } catch (error) {
546
+ _Instance.crash(new EquippedError(`Error starting instance`, {}, error));
547
+ }
548
+ }
549
+ static envs(envsPipe) {
550
+ const envValidity = import_valleyed2.v.validate(envsPipe, process.env);
551
+ if (!envValidity.valid) {
552
+ _Instance.crash(
553
+ new EquippedError(`Environment variables are not valid
554
+ ${envValidity.error.toString()}`, {
555
+ messages: envValidity.error.messages
556
+ })
557
+ );
558
+ }
559
+ return envValidity.value;
560
+ }
561
+ static create(settings) {
562
+ if (_Instance.#instance) return _Instance.crash(new EquippedError("Instance has been initialized already", {}));
563
+ const settingsValidity = import_valleyed2.v.validate(instanceSettingsPipe(), settings);
564
+ if (!settingsValidity.valid) {
565
+ _Instance.crash(
566
+ new EquippedError(`Settings are not valid
567
+ ${settingsValidity.error.toString()}`, {
568
+ messages: settingsValidity.error.messages
569
+ })
570
+ );
571
+ }
572
+ return new _Instance(settingsValidity.value);
573
+ }
574
+ static get() {
575
+ if (!_Instance.#instance)
576
+ return _Instance.crash(
577
+ new EquippedError("Has not been initialized. Make sure an instance has been created before you get an instance", {})
578
+ );
579
+ return _Instance.#instance;
580
+ }
581
+ static maybeGet() {
582
+ return _Instance.#instance;
583
+ }
584
+ static on(event, cb, options) {
585
+ _Instance.#hooks[event] ??= [];
586
+ const record = { cb, class: options?.class, after: options?.after ?? [] };
587
+ registerHook(_Instance.#hooks[event], record);
588
+ }
589
+ static #registerOnExitHandler() {
590
+ const signals = {
591
+ SIGHUP: 1,
592
+ SIGINT: 2,
593
+ SIGTERM: 15
594
+ };
595
+ Object.entries(signals).forEach(([signal, code]) => {
596
+ process.on(signal, async () => {
597
+ await runHooks(_Instance.#hooks["close"] ?? [], () => {
598
+ }, true);
599
+ process.exit(128 + code);
600
+ });
601
+ });
602
+ }
603
+ static resolveBeforeCrash(cb) {
604
+ const value = cb();
605
+ _Instance.on("close", async () => await value);
606
+ return value;
607
+ }
608
+ static crash(error) {
609
+ console.error(error);
610
+ process.exit(1);
611
+ }
612
+ static createId(opts) {
613
+ return `${opts?.prefix ?? ""}${(0, import_ulid.ulid)(opts?.time?.getTime())}`;
614
+ }
615
+ };
616
+
617
+ // src/validations/index.ts
618
+ var validations_exports = {};
619
+ __export(validations_exports, {
620
+ pipeErrorToValidationError: () => pipeErrorToValidationError,
621
+ validate: () => validate,
622
+ ve: () => valleyed_exports
623
+ });
624
+ __reExport(validations_exports, require("valleyed"));
625
+
626
+ // src/validations/valleyed.ts
627
+ var valleyed_exports = {};
628
+ __export(valleyed_exports, {
629
+ incomingFile: () => incomingFile,
630
+ incomingFiles: () => incomingFiles,
631
+ requestLocalStorage: () => requestLocalStorage,
632
+ responseLocalStorage: () => responseLocalStorage,
633
+ withRequest: () => withRequest,
634
+ withResponse: () => withResponse
635
+ });
636
+ var import_node_async_hooks = require("async_hooks");
637
+ var import_valleyed3 = require("valleyed");
638
+ var filePipe = (err) => import_valleyed3.v.array(
639
+ import_valleyed3.v.file(err).pipe((input) => {
640
+ const err2 = `is larger than allowed limit of ${Instance.get().settings.utils.maxFileUploadSizeInMb}mb`;
641
+ const valid = input ? !input.isTruncated : true;
642
+ if (valid) return input;
643
+ throw import_valleyed3.PipeError.root(err2, input);
644
+ })
645
+ );
646
+ var incomingFile = (err) => import_valleyed3.v.define(
647
+ import_valleyed3.v.compile(
648
+ filePipe(err).pipe(import_valleyed3.v.min(1, "no file provided")).pipe((files) => files[0])
649
+ ),
650
+ { schema: () => ({ type: "string", format: "binary" }) }
651
+ );
652
+ var incomingFiles = (err) => import_valleyed3.v.define(import_valleyed3.v.compile(filePipe(err)), {
653
+ schema: () => ({ type: "string", format: "binary" })
654
+ });
655
+ var requestLocalStorage = new import_node_async_hooks.AsyncLocalStorage();
656
+ var responseLocalStorage = new import_node_async_hooks.AsyncLocalStorage();
657
+ var withRequest = (fn) => import_valleyed3.v.define((input) => {
658
+ const req = requestLocalStorage.getStore();
659
+ if (!req) throw new Error("Request not found in context");
660
+ const validated = import_valleyed3.v.validate(fn(req), input);
661
+ return validated.valid ? validated.value : validated.error;
662
+ });
663
+ var withResponse = (fn) => import_valleyed3.v.define((input) => {
664
+ const res = responseLocalStorage.getStore();
665
+ if (!res) throw new Error("Response not found in context");
666
+ const validated = import_valleyed3.v.validate(fn(res), input);
667
+ return validated.valid ? validated.value : validated.error;
668
+ });
669
+
670
+ // src/validations/index.ts
671
+ var import_valleyed4 = require("valleyed");
672
+ function pipeErrorToValidationError(error) {
673
+ const errorsObject = error.messages.reduce((acc, { path = "", message }) => {
674
+ if (acc[path]) acc[path].messages.push(message);
675
+ else acc[path] = { field: path, messages: [message] };
676
+ return acc;
677
+ }, {});
678
+ return new ValidationError(Object.values(errorsObject));
679
+ }
680
+ function validate(pipe, value) {
681
+ const validity = import_valleyed4.v.validate(pipe, value);
682
+ if (validity.valid) return validity.value;
683
+ throw pipeErrorToValidationError(validity.error);
684
+ }
685
+
686
+ // src/server/openapi.ts
687
+ var import_json_schema_to_openapi_schema = require("@openapi-contrib/json-schema-to-openapi-schema");
688
+ var import_valleyed6 = require("valleyed");
689
+
690
+ // src/server/routes.ts
691
+ var import_valleyed5 = require("valleyed");
692
+
693
+ // src/server/types.ts
694
+ var Methods = {
695
+ head: "head",
696
+ get: "get",
697
+ post: "post",
698
+ put: "put",
699
+ patch: "patch",
700
+ delete: "delete",
701
+ options: "options"
702
+ };
703
+ var StatusCodes = {
704
+ Ok: 200,
705
+ Found: 302,
706
+ BadRequest: 400,
707
+ NotAuthenticated: 401,
708
+ NotAuthorized: 403,
709
+ NotFound: 404,
710
+ ValidationError: 422,
711
+ TooManyRequests: 429,
712
+ TokenExpired: 461
713
+ };
714
+
715
+ // src/server/routes.ts
716
+ function mergeSchemas(...schemas) {
717
+ const k = {
718
+ params: "",
719
+ headers: "",
720
+ query: "",
721
+ body: "",
722
+ cookies: "",
723
+ response: "",
724
+ responseHeaders: "",
725
+ responseCookies: "",
726
+ defaultStatusCode: "",
727
+ defaultContentType: ""
728
+ };
729
+ function merge(acc, cur) {
730
+ if (!acc) return cur;
731
+ if (!cur) return acc;
732
+ if (typeof acc === "number") return cur;
733
+ if (typeof acc === "string") return cur;
734
+ if (typeof acc === "function") return cur;
735
+ return import_valleyed5.v.merge(acc, cur);
736
+ }
737
+ return Object.fromEntries(
738
+ Object.keys(k).map((key) => [
739
+ key,
740
+ schemas.map((s) => s[key]).reduce(merge, null)
741
+ ])
742
+ );
743
+ }
744
+ var groupRoutes = (config, routes) => routes.map((route) => ({
745
+ ...config,
746
+ ...route,
747
+ path: `${config.path}/${route.path}`,
748
+ groups: [...config.groups ?? [], ...route.groups ?? []],
749
+ middlewares: [...config.middlewares ?? [], ...route.middlewares ?? []],
750
+ responseMiddlewares: [...config.responseMiddlewares ?? [], ...route.responseMiddlewares ?? []],
751
+ schema: mergeSchemas(config.schema ?? {}, route.schema ?? {}),
752
+ security: [...config.security ?? [], ...route.security ?? []]
753
+ }));
754
+ var Router = class {
755
+ #config = { path: "" };
756
+ #routes = [];
757
+ #children = [];
758
+ constructor(config = { path: "" }) {
759
+ this.#config = config;
760
+ }
761
+ #wrap(method) {
762
+ return (path, config = {}) => (handler) => {
763
+ const route = groupRoutes(this.#config, [{ ...config, path, method, handler }])[0];
764
+ this.#routes.push(route);
765
+ return route;
766
+ };
767
+ }
768
+ head = this.#wrap(Methods.head);
769
+ get = this.#wrap(Methods.get);
770
+ post = this.#wrap(Methods.post);
771
+ put = this.#wrap(Methods.put);
772
+ patch = this.#wrap(Methods.patch);
773
+ delete = this.#wrap(Methods.delete);
774
+ options = this.#wrap(Methods.options);
775
+ nest(...routers) {
776
+ routers.forEach((router) => this.#children.push(router));
777
+ }
778
+ get routes() {
779
+ return [...this.#routes].concat(this.#children.flatMap((child) => groupRoutes(this.#config, child.routes)));
780
+ }
781
+ };
782
+
783
+ // src/server/openapi.ts
784
+ var openapi = (config) => {
785
+ const instance = Instance.get();
786
+ const { app } = instance.settings;
787
+ const baseOpenapiDoc = {
788
+ openapi: "3.0.0",
789
+ info: {
790
+ title: `${app.name} ${instance.id}`,
791
+ version: config.openapi.docsVersion ?? ""
792
+ },
793
+ servers: config.openapi.docsBaseUrl?.map((url) => ({ url })),
794
+ paths: {},
795
+ components: {
796
+ schemas: {},
797
+ securitySchemes: {
798
+ Authorization: {
799
+ type: "apiKey",
800
+ name: "authorization",
801
+ in: "header"
802
+ },
803
+ RefreshToken: {
804
+ type: "apiKey",
805
+ name: "x-refresh-token",
806
+ in: "header"
807
+ },
808
+ ApiKey: {
809
+ type: "apiKey",
810
+ name: "x-api-key",
811
+ in: "header"
812
+ }
813
+ }
814
+ },
815
+ tags: [],
816
+ "x-tagGroups": []
817
+ };
818
+ const registeredTags = {};
819
+ const registeredTagGroups = {};
820
+ const flattenForParameters = (node) => {
821
+ const { allOf, oneOf, anyOf, ...schema } = node;
822
+ if (allOf) return allOf.flatMap((n) => flattenForParameters(n));
823
+ return [schema];
824
+ };
825
+ const visit = (node) => {
826
+ if (!node || typeof node !== "object") return node;
827
+ if (typeof node.$refId === "string") {
828
+ const { $refId: id, ...rest } = node;
829
+ const res = visit(rest);
830
+ if (baseOpenapiDoc.components?.schemas) {
831
+ baseOpenapiDoc.components.schemas[id] = res;
832
+ return { $ref: `#/components/schemas/${id}` };
833
+ } else return res;
834
+ }
835
+ if (Array.isArray(node)) return node.map((n) => visit(n));
836
+ return Object.fromEntries(Object.entries(node).map(([key, value]) => [key, visit(value)]));
837
+ };
838
+ const buildTag = (groups) => {
839
+ if (!groups.length) return void 0;
840
+ const parsed = groups.map((g) => typeof g === "string" ? { name: g } : g);
841
+ const name = parsed.map((g) => g.name).join(" > ");
842
+ const displayName = parsed.at(-1)?.name ?? "";
843
+ const description = parsed.map((g) => g.description?.trim() ?? "").filter(Boolean).join("\n\n\n\n");
844
+ if (!registeredTags[name]) {
845
+ registeredTags[name] = true;
846
+ baseOpenapiDoc.tags.push({ name, "x-displayName": displayName, description });
847
+ const tagGroups = parsed.slice(0, -1);
848
+ const groupName = tagGroups.map((g) => g.name).join(" > ") || "default";
849
+ if (!registeredTagGroups[groupName]) {
850
+ const group = { name: groupName, tags: [] };
851
+ baseOpenapiDoc["x-tagGroups"].push(group);
852
+ registeredTagGroups[groupName] = group;
853
+ }
854
+ registeredTagGroups[groupName].tags = [.../* @__PURE__ */ new Set([...registeredTagGroups[groupName].tags, name])];
855
+ }
856
+ return name;
857
+ };
858
+ const addRouteToOpenApiDoc = async (path, method, def, methodObj) => {
859
+ if (def.response.response?.length) {
860
+ methodObj.responses ??= {};
861
+ for (const resp of def.response.response) {
862
+ methodObj.responses[resp.status] ??= { description: "", content: {} };
863
+ const res = methodObj.responses[resp.status];
864
+ res.content[resp.contentType] = { schema: await (0, import_json_schema_to_openapi_schema.convert)(visit(resp.schema)) };
865
+ }
866
+ }
867
+ if (def.response.responseHeaders?.length) {
868
+ methodObj.responses ??= {};
869
+ for (const resp of def.response.responseHeaders) {
870
+ methodObj.responses[resp.status] ??= { description: "", content: {} };
871
+ methodObj.responses[resp.status];
872
+ const res = methodObj.responses[resp.status];
873
+ res.headers = { schema: await (0, import_json_schema_to_openapi_schema.convert)(visit(resp.schema)) };
874
+ }
875
+ }
876
+ if (def.request.body)
877
+ methodObj.requestBody = {
878
+ required: true,
879
+ content: {
880
+ "application/json": { schema: await (0, import_json_schema_to_openapi_schema.convert)(visit(def.request.body)) }
881
+ }
882
+ };
883
+ const parameters = [];
884
+ const addParams = async (location, schema) => {
885
+ if (!schema) return;
886
+ const flat = flattenForParameters(schema);
887
+ for (const schema2 of flat) {
888
+ if (!schema2.properties) continue;
889
+ for (const [name, value] of Object.entries(schema2.properties))
890
+ parameters.push({
891
+ name,
892
+ in: location,
893
+ schema: await (0, import_json_schema_to_openapi_schema.convert)(visit(value)),
894
+ required: (schema2.required || []).includes(name)
895
+ });
896
+ }
897
+ };
898
+ await Promise.all([
899
+ addParams("query", def.request.query),
900
+ addParams("path", def.request.params),
901
+ addParams("header", def.request.headers)
902
+ ]);
903
+ if (parameters.length) methodObj.parameters = parameters;
904
+ if (!baseOpenapiDoc.paths) baseOpenapiDoc.paths = {};
905
+ if (!baseOpenapiDoc.paths[path]) baseOpenapiDoc.paths[path] = {};
906
+ baseOpenapiDoc.paths[path][method] = methodObj;
907
+ };
908
+ const html = (jsonPath2) => {
909
+ const title = (0, import_valleyed6.capitalize)(`${app.name} ${instance.id}`);
910
+ return `
911
+ <!doctype html>
912
+ <html>
913
+ <head>
914
+ <title>${title}</title>
915
+ <meta charset="utf-8" />
916
+ <meta name="viewport" content="width=device-width, initial-scale=1" />
917
+ <style>
918
+ .darklight-reference {
919
+ display: none;
920
+ }
921
+ </style>
922
+ </head>
923
+ <body>
924
+ <script id="api-reference" data-url="${jsonPath2}"></script>
925
+ <script>
926
+ const configuration = { theme: 'purple' };
927
+ document.getElementById('api-reference').dataset.configuration = JSON.stringify(configuration);
928
+ </script>
929
+ <script src="https://cdn.jsdelivr.net/npm/@scalar/api-reference@1.38.0"></script>
930
+ </body>
931
+ </html>
932
+ `;
933
+ };
934
+ const cleanPath = (path) => {
935
+ let cleaned = path.replace(/(\/\s*)+/g, "/");
936
+ if (!cleaned.startsWith("/")) cleaned = `/${cleaned}`;
937
+ if (cleaned !== "/" && cleaned.endsWith("/")) cleaned = cleaned.slice(0, -1);
938
+ return cleaned;
939
+ };
940
+ const register = async (route, def) => {
941
+ if (route.hide) return;
942
+ const tag = buildTag(route.groups ?? []);
943
+ const cleanedPath = cleanPath(route.path);
944
+ const operationId = `(${route.method.toUpperCase()}) ${cleanedPath}`;
945
+ await addRouteToOpenApiDoc(cleanedPath, route.method.toLowerCase(), def, {
946
+ operationId,
947
+ summary: route.title ?? cleanedPath,
948
+ description: route.descriptions?.join("\n\n"),
949
+ tags: tag ? [tag] : void 0,
950
+ security: route.security
951
+ });
952
+ };
953
+ const jsonPath = "/openapi.json";
954
+ const router = new Router({ path: config.openapi.docsPath ?? "/", hide: true });
955
+ router.get("/index.html")((req) => req.res({ body: html(`.${jsonPath}`), contentType: "text/html" }));
956
+ router.get(jsonPath)((req) => req.res({ body: baseOpenapiDoc }));
957
+ return {
958
+ router,
959
+ register,
960
+ cleanPath
961
+ };
962
+ };
963
+
964
+ // src/utilities/configurable.ts
965
+ var import_valleyed7 = require("valleyed");
966
+ function configurable(pipeFn, base) {
967
+ const pipe = pipeFn();
968
+ import_valleyed7.v.compile(pipe);
969
+ class Configurable extends base {
970
+ constructor(config, ...baseArgs) {
971
+ super(...baseArgs);
972
+ this.config = config;
973
+ }
974
+ static create(input, ...args) {
975
+ const r = import_valleyed7.v.validate(pipe, input);
976
+ if (!r.valid) throw r.error;
977
+ return new this(r.value, ...args);
978
+ }
979
+ }
980
+ return Configurable;
981
+ }
982
+ if (void 0) {
983
+ const { describe, test, expect, expectTypeOf } = void 0;
984
+ const { v: v8 } = null;
985
+ const testPipe = () => v8.object({
986
+ host: v8.string(),
987
+ port: v8.number()
988
+ });
989
+ class TestBase {
990
+ baseValue;
991
+ constructor() {
992
+ this.baseValue = "base";
993
+ }
994
+ }
995
+ class TestBaseWithArgs {
996
+ label;
997
+ constructor(label) {
998
+ this.label = label;
999
+ }
1000
+ }
1001
+ describe("configurable", () => {
1002
+ test("validation runs in static create before constructor body executes", () => {
1003
+ let constructorRan = false;
1004
+ const Wrapped = configurable(testPipe, TestBase);
1005
+ class MyClass extends Wrapped {
1006
+ constructor(config) {
1007
+ super(config);
1008
+ constructorRan = true;
1009
+ }
1010
+ }
1011
+ expect(() => MyClass.create({ host: 123, port: "bad" })).toThrow();
1012
+ expect(constructorRan).toBe(false);
1013
+ MyClass.create({ host: "localhost", port: 3e3 });
1014
+ expect(constructorRan).toBe(true);
1015
+ });
1016
+ test("constructor receives validated value", () => {
1017
+ const Wrapped = configurable(testPipe, TestBase);
1018
+ let receivedConfig;
1019
+ class MyClass extends Wrapped {
1020
+ constructor(config) {
1021
+ super(config);
1022
+ receivedConfig = this.config;
1023
+ }
1024
+ }
1025
+ MyClass.create({ host: "localhost", port: 3e3 });
1026
+ expect(receivedConfig).toEqual({ host: "localhost", port: 3e3 });
1027
+ });
1028
+ test("external new is a compile error", () => {
1029
+ const Wrapped = configurable(testPipe, TestBase);
1030
+ class MyClass extends Wrapped {
1031
+ constructor(config) {
1032
+ super(config);
1033
+ }
1034
+ }
1035
+ void (() => new MyClass({ host: "localhost", port: 3e3 }));
1036
+ });
1037
+ test("static Config resolves to PipeOutput<P> at the type level", () => {
1038
+ const Wrapped = configurable(testPipe, TestBase);
1039
+ class MyClass extends Wrapped {
1040
+ constructor(config) {
1041
+ super(config);
1042
+ }
1043
+ }
1044
+ expectTypeOf().toEqualTypeOf();
1045
+ expect(MyClass.create).toBeTypeOf("function");
1046
+ });
1047
+ test("ConstructorParameters<This>-based extras inference works for non-zero-arg leaf signatures", () => {
1048
+ const Wrapped = configurable(testPipe, TestBase);
1049
+ class MyClass extends Wrapped {
1050
+ extra;
1051
+ constructor(config, extra) {
1052
+ super(config);
1053
+ this.extra = extra;
1054
+ }
1055
+ }
1056
+ const instance = MyClass.create({ host: "localhost", port: 3e3 }, 42);
1057
+ expect(instance.extra).toBe(42);
1058
+ expectTypeOf(instance).toHaveProperty("extra");
1059
+ expectTypeOf(instance.extra).toEqualTypeOf();
1060
+ void (() => MyClass.create({ host: "localhost", port: 3e3 }, "not-a-number"));
1061
+ });
1062
+ test("base-args forwarding works for non-zero-arg bases", () => {
1063
+ const Wrapped = configurable(testPipe, TestBaseWithArgs);
1064
+ class MyClass extends Wrapped {
1065
+ constructor(config, label) {
1066
+ super(config, label);
1067
+ }
1068
+ }
1069
+ const instance = MyClass.create({ host: "localhost", port: 3e3 }, "test-label");
1070
+ expect(instance.label).toBe("test-label");
1071
+ });
1072
+ test("config is accessible as protected readonly on instances", () => {
1073
+ const Wrapped = configurable(testPipe, TestBase);
1074
+ class MyClass extends Wrapped {
1075
+ constructor(config) {
1076
+ super(config);
1077
+ }
1078
+ getHost() {
1079
+ return this.config.host;
1080
+ }
1081
+ }
1082
+ const instance = MyClass.create({ host: "localhost", port: 3e3 });
1083
+ expect(instance.getHost()).toBe("localhost");
1084
+ });
1085
+ test("accepts an abstract base class", () => {
1086
+ class AbstractBase {
1087
+ }
1088
+ const Wrapped = configurable(testPipe, AbstractBase);
1089
+ class Concrete extends Wrapped {
1090
+ constructor(config) {
1091
+ super(config);
1092
+ }
1093
+ greet() {
1094
+ return `hello from ${this.config.host}`;
1095
+ }
1096
+ }
1097
+ const instance = Concrete.create({ host: "localhost", port: 3e3 });
1098
+ expect(instance.greet()).toBe("hello from localhost");
1099
+ expectTypeOf(instance).toHaveProperty("config");
1100
+ });
1101
+ });
1102
+ }
1103
+
1104
+ // src/utilities/json.ts
1105
+ var parseJSONValue = (data) => {
1106
+ try {
1107
+ if (data?.constructor?.name !== "String") return data;
1108
+ return JSON.parse(data);
1109
+ } catch {
1110
+ return data;
1111
+ }
1112
+ };
1113
+ function parseJSONObject(data) {
1114
+ return Object.fromEntries(Object.entries(data).map(([key, value]) => [key, parseJSONValue(value)]));
1115
+ }
1116
+
1117
+ // src/utilities/media.ts
1118
+ var import_music_metadata = require("music-metadata");
1119
+ var getMediaDuration = async (buffer) => {
1120
+ try {
1121
+ const meta = await (0, import_music_metadata.parseBuffer)(buffer);
1122
+ return meta.format.duration ?? 0;
1123
+ } catch {
1124
+ return 0;
1125
+ }
1126
+ };
1127
+
1128
+ // src/server/requests.ts
1129
+ var Request = class {
1130
+ ip;
1131
+ method;
1132
+ path;
1133
+ body;
1134
+ params;
1135
+ query;
1136
+ headers;
1137
+ cookies;
1138
+ authUser = null;
1139
+ constructor({
1140
+ ip,
1141
+ body,
1142
+ cookies,
1143
+ params,
1144
+ query,
1145
+ method,
1146
+ path,
1147
+ headers,
1148
+ files
1149
+ }) {
1150
+ this.ip = ip;
1151
+ this.method = method;
1152
+ this.path = path;
1153
+ this.params = params;
1154
+ this.cookies = cookies;
1155
+ this.headers = headers;
1156
+ this.query = parseJSONObject(query);
1157
+ this.body = Object.assign(parseJSONObject(body), files);
1158
+ }
1159
+ pipe(stream, opts = {}) {
1160
+ return new Response({ ...opts, piped: true, body: stream });
1161
+ }
1162
+ res(params) {
1163
+ return new Response({ ...params, piped: false });
1164
+ }
1165
+ error(params) {
1166
+ return new Response({ ...params, piped: false });
1167
+ }
1168
+ };
1169
+ var Response = class {
1170
+ body;
1171
+ headers;
1172
+ cookies;
1173
+ status;
1174
+ contentType;
1175
+ piped;
1176
+ constructor({
1177
+ body,
1178
+ status = 200,
1179
+ headers = {},
1180
+ cookies = {},
1181
+ piped = false,
1182
+ contentType = "application/json"
1183
+ }) {
1184
+ this.body = body;
1185
+ this.status = status;
1186
+ this.contentType = contentType;
1187
+ this.headers = headers;
1188
+ this.cookies = cookies;
1189
+ this.piped = piped;
1190
+ if (!this.piped) {
1191
+ this.headers["Content-Type"] = contentType;
1192
+ }
1193
+ }
1194
+ get cookieValues() {
1195
+ return Object.fromEntries(Object.entries(this.cookies).map(([key, val]) => [key, val]));
1196
+ }
1197
+ set cookieValues(values) {
1198
+ Object.entries(values).forEach(([key, val]) => {
1199
+ if (this.cookies[key]) this.cookies[key].value = val;
1200
+ });
1201
+ }
1202
+ };
1203
+
1204
+ // src/server/requests-auth-methods/base.ts
1205
+ var import_node_http2 = require("http2");
1206
+ var BaseRequestAuthMethod = class {
1207
+ static async process(methods, headers) {
1208
+ if (methods.length === 0) return null;
1209
+ let error;
1210
+ for (const method of methods) {
1211
+ try {
1212
+ return await method.parse(headers);
1213
+ } catch (err) {
1214
+ error = err;
1215
+ }
1216
+ }
1217
+ throw error instanceof RequestError ? error : new BadRequestError("failed to parse auth user", error);
1218
+ }
1219
+ };
1220
+
1221
+ // src/server/sockets.ts
1222
+ var import_path_to_regexp = require("path-to-regexp");
1223
+ var EmitterEvent = "__listener_emitter";
1224
+ var defaultTo = "*";
1225
+ var SocketEmitter = class {
1226
+ constructor(socket, config) {
1227
+ this.config = config;
1228
+ this.socketInstance = socket;
1229
+ this.#setupSocketConnection();
1230
+ Instance.on("setup", () => {
1231
+ const stream = config.eventBus?.stream(EmitterEvent, { fanout: true });
1232
+ this.#publish = stream ? stream.publish : async (data) => {
1233
+ socket.to(data.channel).emit(data.channel, data);
1234
+ };
1235
+ stream?.subscribe(async (data) => {
1236
+ socket.to(data.channel).emit(data.channel, data);
1237
+ });
1238
+ });
1239
+ }
1240
+ socketInstance;
1241
+ #connectionCallbacks = { onConnect: async () => {
1242
+ }, onDisconnect: async () => {
1243
+ } };
1244
+ #routes = {};
1245
+ #publish = async () => {
1246
+ };
1247
+ async created(channels, data, to) {
1248
+ await this.#emit(channels, "created" /* created */, { after: data.toJSON(), before: null }, to);
1249
+ }
1250
+ async updated(channels, { after, before }, to) {
1251
+ await this.#emit(channels, "updated" /* updated */, { after: after.toJSON(), before: before.toJSON() }, to);
1252
+ }
1253
+ async deleted(channels, data, to) {
1254
+ await this.#emit(channels, "deleted" /* deleted */, { before: data.toJSON(), after: null }, to);
1255
+ }
1256
+ async #emit(channels, type, { before, after }, to) {
1257
+ const toArray = Array.isArray(to) ? to : [to ?? defaultTo];
1258
+ const channelMap = channels.flatMap((c) => toArray.map((to2) => `${to2}:${c}`));
1259
+ await Promise.all(channelMap.map(async (channel) => this.#publish({ channel, type, before, after })));
1260
+ }
1261
+ set connectionCallbacks(callbacks) {
1262
+ this.#connectionCallbacks = callbacks;
1263
+ this.#setupSocketConnection();
1264
+ }
1265
+ register(channel, onJoin) {
1266
+ this.#routes[channel] = onJoin;
1267
+ this.#routes[channel + "/:id"] = onJoin;
1268
+ return this;
1269
+ }
1270
+ #getConfig(channel) {
1271
+ const matcher = (key) => (0, import_path_to_regexp.match)(key)(channel);
1272
+ const matchedChannel = Object.keys(this.#routes).find(matcher) ?? null;
1273
+ if (!matchedChannel) return null;
1274
+ const match = matcher(matchedChannel);
1275
+ if (!match) return null;
1276
+ return {
1277
+ config: this.#routes[matchedChannel],
1278
+ params: match.params
1279
+ };
1280
+ }
1281
+ #setupSocketConnection = () => {
1282
+ this.socketInstance.removeAllListeners("connection");
1283
+ this.socketInstance.on("connection", async (socket) => {
1284
+ const socketId = socket.id;
1285
+ const user = await BaseRequestAuthMethod.process(this.config.socketsAuthMethods, socket.handshake.headers).catch(() => null);
1286
+ socket.on("leave", async (data, callback) => {
1287
+ if (!data.channel)
1288
+ return typeof callback === "function" && callback({
1289
+ code: StatusCodes.ValidationError,
1290
+ message: "channel is required",
1291
+ channel: ""
1292
+ });
1293
+ socket.leave(data.channel);
1294
+ return typeof callback === "function" && callback({
1295
+ code: StatusCodes.Ok,
1296
+ message: "",
1297
+ channel: data.channel
1298
+ });
1299
+ });
1300
+ socket.on("join", async (data, callback) => {
1301
+ if (!data.channel)
1302
+ return typeof callback === "function" && callback({
1303
+ code: StatusCodes.ValidationError,
1304
+ message: "channel is required",
1305
+ channel: ""
1306
+ });
1307
+ const channel = data.channel;
1308
+ const route = this.#getConfig(channel) ?? null;
1309
+ if (!route)
1310
+ return typeof callback === "function" && callback({
1311
+ code: StatusCodes.BadRequest,
1312
+ message: "unknown channel",
1313
+ channel
1314
+ });
1315
+ const to = await route.config({ channel, user }, route.params, data.query ?? {});
1316
+ const newChannel = `${to ?? defaultTo}:${channel}`;
1317
+ socket.join(newChannel);
1318
+ return typeof callback === "function" && callback({
1319
+ code: StatusCodes.Ok,
1320
+ message: "",
1321
+ channel: newChannel
1322
+ });
1323
+ });
1324
+ if (user) await this.#connectionCallbacks.onConnect(user.id, socketId);
1325
+ socket.on("disconnect", async () => {
1326
+ if (user) await this.#connectionCallbacks.onDisconnect(user.id, socketId);
1327
+ });
1328
+ });
1329
+ };
1330
+ };
1331
+
1332
+ // src/server/adapters/base.ts
1333
+ var serverConfigPipe = () => import_valleyed8.v.object({
1334
+ port: import_valleyed8.v.number(),
1335
+ cors: import_valleyed8.v.optional(
1336
+ import_valleyed8.v.object({
1337
+ origin: import_valleyed8.v.optional(import_valleyed8.v.or([import_valleyed8.v.array(import_valleyed8.v.string()), import_valleyed8.v.is(true)])),
1338
+ methods: import_valleyed8.v.optional(import_valleyed8.v.array(import_valleyed8.v.in(Object.values(Methods)))),
1339
+ credentials: import_valleyed8.v.optional(import_valleyed8.v.boolean())
1340
+ })
1341
+ ),
1342
+ eventBus: import_valleyed8.v.optional(import_valleyed8.v.instanceOf(EventBus)),
1343
+ publicPath: import_valleyed8.v.optional(import_valleyed8.v.string()),
1344
+ healthPath: import_valleyed8.v.optional(import_valleyed8.v.string()),
1345
+ openapi: import_valleyed8.v.defaults(
1346
+ import_valleyed8.v.object({
1347
+ docsVersion: import_valleyed8.v.defaults(import_valleyed8.v.string(), "1.0.0"),
1348
+ docsBaseUrl: import_valleyed8.v.defaults(import_valleyed8.v.array(import_valleyed8.v.string()), ["/"]),
1349
+ docsPath: import_valleyed8.v.defaults(import_valleyed8.v.string(), "/__docs")
1350
+ }),
1351
+ {}
1352
+ ),
1353
+ requests: import_valleyed8.v.defaults(
1354
+ import_valleyed8.v.object({
1355
+ log: import_valleyed8.v.defaults(import_valleyed8.v.boolean(), true),
1356
+ rateLimit: import_valleyed8.v.defaults(
1357
+ import_valleyed8.v.object({
1358
+ enabled: import_valleyed8.v.defaults(import_valleyed8.v.boolean(), false),
1359
+ periodInMs: import_valleyed8.v.defaults(import_valleyed8.v.number(), 60 * 60 * 1e3),
1360
+ limit: import_valleyed8.v.defaults(import_valleyed8.v.number(), 5e3)
1361
+ }),
1362
+ {}
1363
+ ),
1364
+ slowdown: import_valleyed8.v.defaults(
1365
+ import_valleyed8.v.object({
1366
+ enabled: import_valleyed8.v.defaults(import_valleyed8.v.boolean(), false),
1367
+ periodInMs: import_valleyed8.v.defaults(import_valleyed8.v.number(), 10 * 60 * 1e3),
1368
+ delayAfter: import_valleyed8.v.defaults(import_valleyed8.v.number(), 2e3),
1369
+ delayInMs: import_valleyed8.v.defaults(import_valleyed8.v.number(), 500)
1370
+ }),
1371
+ {}
1372
+ )
1373
+ }),
1374
+ {}
1375
+ ),
1376
+ socketsAuthMethods: import_valleyed8.v.defaults(import_valleyed8.v.array(import_valleyed8.v.instanceOf(BaseRequestAuthMethod)), [])
1377
+ });
1378
+ var rawResponseHandledSymbol = /* @__PURE__ */ Symbol("rawResponseHandled");
1379
+ var rawResponseHandled = Object.freeze({ [rawResponseHandledSymbol]: true });
1380
+ var rawResponseNotStartedMessage = "Raw not-found handler did not start or complete a response";
1381
+ function isRawResponseHandled(input) {
1382
+ return Boolean(input && typeof input === "object" && rawResponseHandledSymbol in input);
1383
+ }
1384
+ function hasRawResponseStarted(response) {
1385
+ return response.headersSent || response.writableEnded;
1386
+ }
1387
+ function writeRawHandlerError(response, error) {
1388
+ if (hasRawResponseStarted(response)) return;
1389
+ response.statusCode = StatusCodes.BadRequest;
1390
+ response.setHeader("Content-Type", "application/json");
1391
+ const message = error instanceof Error ? error.message : `${error}`;
1392
+ response.end(JSON.stringify([{ message }]));
1393
+ }
1394
+ var errorsSchemas = Object.entries(StatusCodes).filter(([, value]) => value > 399).map(([key, value]) => ({
1395
+ status: value,
1396
+ contentType: "application/json",
1397
+ pipe: import_valleyed8.v.meta(import_valleyed8.v.array(import_valleyed8.v.object({ message: import_valleyed8.v.string(), field: import_valleyed8.v.optional(import_valleyed8.v.string()) })), {
1398
+ $refId: `Errors.${key}Response`,
1399
+ description: `${key} Response`
1400
+ })
1401
+ }));
1402
+ var Server = class {
1403
+ socket;
1404
+ cors;
1405
+ #httpServer;
1406
+ #oai;
1407
+ #serverConfig;
1408
+ #queue = [];
1409
+ #routesByKey = /* @__PURE__ */ new Set();
1410
+ #started = false;
1411
+ #notFoundHandler = null;
1412
+ setup(httpServer, config) {
1413
+ this.#httpServer = httpServer;
1414
+ this.#serverConfig = config;
1415
+ this.cors = {
1416
+ origin: config.cors?.origin ? (_, cb) => cb(null, true) : config.cors?.origin,
1417
+ methods: (config.cors?.methods ?? Object.values(Methods)).filter((m) => m !== Methods.options).map((m) => m.toUpperCase()),
1418
+ credentials: config.cors?.credentials
1419
+ };
1420
+ this.#oai = openapi(config);
1421
+ const socketInstance = new import_socket.Server(httpServer, { cors: this.cors });
1422
+ this.socket = new SocketEmitter(socketInstance, config);
1423
+ this.addRouter(this.#oai.router);
1424
+ }
1425
+ addRouter(...routers) {
1426
+ routers.map((router) => router.routes).forEach((routes) => this.addRoute(...routes));
1427
+ }
1428
+ addRoute(...routes) {
1429
+ routes.forEach((route) => {
1430
+ this.#queue.push(async () => {
1431
+ const { method, path, schema = {}, onError, middlewares = [], responseMiddlewares = [] } = route;
1432
+ const key = `(${method.toUpperCase()}) ${this.#oai.cleanPath(path)}`;
1433
+ if (this.#routesByKey.has(key))
1434
+ throw new EquippedError(`Route key ${key} already registered. All route keys must be unique`, { route, key });
1435
+ middlewares.forEach((m) => m.onSetup?.(route));
1436
+ onError?.onSetup?.(route);
1437
+ responseMiddlewares.forEach((m) => m.onSetup?.(route));
1438
+ const { validateRequest, validateResponse, jsonSchema } = this.#resolveSchema(method, schema);
1439
+ this.#routesByKey.add(key);
1440
+ await this.#oai.register(route, jsonSchema);
1441
+ this.registerRoute(method, this.#oai.cleanPath(path), async (req, res) => {
1442
+ const request = await validateRequest(await this.parseRequest(req));
1443
+ try {
1444
+ for (const middleware of middlewares) await middleware.cb(request);
1445
+ const rawRes = await route.handler(request);
1446
+ const response = rawRes instanceof Response ? rawRes : new Response({ body: rawRes, status: StatusCodes.Ok, headers: {}, piped: false });
1447
+ for (const middleware of responseMiddlewares) await middleware.cb(request, response);
1448
+ return await this.handleResponse(res, await validateResponse(response));
1449
+ } catch (error) {
1450
+ if (onError?.cb) {
1451
+ const rawResponse = await onError.cb(request, error);
1452
+ const response = rawResponse instanceof Response ? rawResponse : new Response({ body: rawResponse, status: StatusCodes.BadRequest, headers: {} });
1453
+ return await this.handleResponse(res, await validateResponse(response));
1454
+ }
1455
+ throw error;
1456
+ }
1457
+ });
1458
+ });
1459
+ });
1460
+ }
1461
+ setNotFoundHandler(handler) {
1462
+ if (this.#started) throw new EquippedError("Cannot set not-found handler after server has started", {});
1463
+ this.#notFoundHandler = handler;
1464
+ return this;
1465
+ }
1466
+ test() {
1467
+ return (0, import_supertest.default)(this.#httpServer);
1468
+ }
1469
+ async start() {
1470
+ this.#started = true;
1471
+ const config = this.#serverConfig;
1472
+ const instance = Instance.get();
1473
+ const { app } = instance.settings;
1474
+ if (config.healthPath)
1475
+ this.addRoute({
1476
+ method: Methods.get,
1477
+ path: config.healthPath,
1478
+ handler: async (req) => req.res({
1479
+ body: `${instance.id}(${app.name}) service running`,
1480
+ contentType: "text/plain"
1481
+ })
1482
+ });
1483
+ await Promise.all(this.#queue.map((cb) => cb()));
1484
+ this.registerNotFoundHandler(async (req, res) => await this.#handleNotFound(req, res));
1485
+ this.registerErrorHandler(async (error, _, res) => {
1486
+ if (!(error instanceof EquippedError)) Instance.get().log.error({ error }, "Uncaught error in route handler");
1487
+ const response = error instanceof RequestError ? new Response({
1488
+ body: error.serializedErrors,
1489
+ status: error.statusCode
1490
+ }) : error instanceof EquippedError ? new Response({
1491
+ body: [{ message: error.message }],
1492
+ status: StatusCodes.BadRequest
1493
+ }) : new Response({
1494
+ body: [{ message: "Something went wrong", data: error.message }],
1495
+ status: StatusCodes.BadRequest
1496
+ });
1497
+ return await this.handleResponse(res, response);
1498
+ });
1499
+ const started = await this.startServer(config.port);
1500
+ if (started) Instance.get().log.info(`${instance.id}(${app.name}) service listening on port ${config.port}`);
1501
+ return started;
1502
+ }
1503
+ createNodeRawResponder(input) {
1504
+ return async (handler) => {
1505
+ input.beforeHandle?.();
1506
+ try {
1507
+ await handler(input.request, input.response);
1508
+ } catch (error) {
1509
+ if (!hasRawResponseStarted(input.response)) {
1510
+ writeRawHandlerError(input.response, error);
1511
+ return rawResponseHandled;
1512
+ }
1513
+ throw error;
1514
+ }
1515
+ if (!hasRawResponseStarted(input.response))
1516
+ writeRawHandlerError(input.response, new EquippedError(rawResponseNotStartedMessage, {}));
1517
+ return rawResponseHandled;
1518
+ };
1519
+ }
1520
+ async #handleNotFound(req, res) {
1521
+ const request = await this.parseRequest(req);
1522
+ if (!this.#notFoundHandler) throw new NotFoundError(`Route ${request.path} not found`);
1523
+ const result = await this.#notFoundHandler({ request, respondWithRaw: this.createRawResponder(req, res) });
1524
+ if (isRawResponseHandled(result)) return;
1525
+ if (result instanceof Response) return await this.handleResponse(res, result);
1526
+ throw new EquippedError("Not-found handler must return a Response or respondWithRaw(...)", {});
1527
+ }
1528
+ #resolveSchema(method, schema) {
1529
+ const defaultStatusCode = schema?.defaultStatusCode ?? StatusCodes.Ok;
1530
+ const defaultContentType = schema?.defaultContentType ?? "application/json";
1531
+ let status = defaultStatusCode;
1532
+ let contentType = defaultContentType;
1533
+ const jsonSchema = { response: {}, request: {} };
1534
+ const requestPipeDefs = {};
1535
+ const responsePipeDefs = {};
1536
+ const defs = [
1537
+ { key: "params", type: "request" },
1538
+ { key: "headers", type: "request" },
1539
+ { key: "cookies", type: "request" },
1540
+ { key: "query", type: "request" },
1541
+ { key: "body", type: "request", skip: ![Methods.post, Methods.put, Methods.patch].includes(method) },
1542
+ { key: "response", type: "response" },
1543
+ { key: "responseHeaders", type: "response" },
1544
+ { key: "responseCookies", type: "response" }
1545
+ ];
1546
+ defs.forEach((def) => {
1547
+ const pipe = schema[def.key] ?? import_valleyed8.v.any();
1548
+ if (def.skip) return;
1549
+ if (def.type === "request") {
1550
+ requestPipeDefs[def.key] = pipe;
1551
+ jsonSchema.request[def.key] = import_valleyed8.v.schema(pipe);
1552
+ }
1553
+ if (def.type === "response") {
1554
+ const pipeRecords = errorsSchemas.concat({ status: defaultStatusCode, contentType, pipe });
1555
+ responsePipeDefs[def.key] = import_valleyed8.v.any().pipe((input) => {
1556
+ const p = pipeRecords.find((rec) => rec.status === status)?.pipe;
1557
+ if (!p) throw import_valleyed8.PipeError.root(`schema not defined for status code: ${status}`, input);
1558
+ const r = import_valleyed8.v.validate(p, input);
1559
+ if (!r.valid) throw r.error;
1560
+ return r.value;
1561
+ });
1562
+ jsonSchema.response[def.key] = pipeRecords.map((record) => ({
1563
+ status: record.status,
1564
+ contentType: record.contentType,
1565
+ schema: import_valleyed8.v.schema(record.pipe)
1566
+ }));
1567
+ }
1568
+ });
1569
+ const requestPipe = import_valleyed8.v.object(requestPipeDefs);
1570
+ import_valleyed8.v.compile(requestPipe, { allErrors: true });
1571
+ const responsePipe = import_valleyed8.v.object(responsePipeDefs);
1572
+ import_valleyed8.v.compile(responsePipe, { allErrors: true });
1573
+ const validateRequest = async (request) => {
1574
+ if (!Object.keys(requestPipeDefs)) return request;
1575
+ const validity = requestLocalStorage.run(
1576
+ request,
1577
+ () => import_valleyed8.v.validate(requestPipe, {
1578
+ params: request.params,
1579
+ headers: request.headers,
1580
+ query: request.query,
1581
+ body: request.body,
1582
+ cookies: request.cookies
1583
+ })
1584
+ );
1585
+ if (!validity.valid) throw pipeErrorToValidationError(validity.error);
1586
+ request.params = validity.value.params;
1587
+ request.headers = validity.value.headers;
1588
+ request.query = validity.value.query;
1589
+ request.body = validity.value.body;
1590
+ request.cookies = validity.value.cookies;
1591
+ return request;
1592
+ };
1593
+ const validateResponse = async (response) => {
1594
+ if (!Object.keys(responsePipeDefs)) return response;
1595
+ status = response.status;
1596
+ contentType = response.contentType;
1597
+ const validity = responseLocalStorage.run(
1598
+ response,
1599
+ () => import_valleyed8.v.validate(responsePipe, {
1600
+ responseHeaders: response.headers,
1601
+ responseCookies: Object.fromEntries(Object.entries(response.cookies).map(([key, val]) => [key, val.value])),
1602
+ response: response.body
1603
+ })
1604
+ );
1605
+ if (!validity.valid) throw pipeErrorToValidationError(validity.error);
1606
+ response.body = validity.value.response;
1607
+ response.headers = validity.value.responseHeaders;
1608
+ response.cookieValues = validity.value.responseCookies;
1609
+ return response;
1610
+ };
1611
+ return {
1612
+ jsonSchema,
1613
+ validateRequest,
1614
+ validateResponse
1615
+ };
1616
+ }
1617
+ };
1618
+ if (void 0) {
1619
+ let ensureTestInstance = function() {
1620
+ const instance = Instance.maybeGet() ?? Instance.create({ app: { name: "equipped-test" }, log: { level: "silent" } });
1621
+ if (!testInstanceState.__equippedTestInstanceAliased) {
1622
+ instance.alias("equipped-test");
1623
+ testInstanceState.__equippedTestInstanceAliased = true;
1624
+ }
1625
+ }, createRawResponse = function() {
1626
+ const chunks = [];
1627
+ return {
1628
+ statusCode: 200,
1629
+ headersSent: false,
1630
+ writableEnded: false,
1631
+ headers: {},
1632
+ setHeader(key, value) {
1633
+ this.headers[key] = value;
1634
+ },
1635
+ end(chunk) {
1636
+ if (chunk !== void 0) chunks.push(Buffer.isBuffer(chunk) ? chunk.toString("utf8") : String(chunk));
1637
+ this.headersSent = true;
1638
+ this.writableEnded = true;
1639
+ },
1640
+ body() {
1641
+ return chunks.join("");
1642
+ }
1643
+ };
1644
+ };
1645
+ ensureTestInstance2 = ensureTestInstance, createRawResponse2 = createRawResponse;
1646
+ const { describe, expect, test } = void 0;
1647
+ const testInstanceState = globalThis;
1648
+ class TestServer extends Server {
1649
+ handledResponse = null;
1650
+ notFoundHandler = null;
1651
+ constructor() {
1652
+ super();
1653
+ this.setup(http.createServer(), {
1654
+ port: 0,
1655
+ cors: void 0,
1656
+ eventBus: void 0,
1657
+ publicPath: void 0,
1658
+ healthPath: void 0,
1659
+ openapi: { docsVersion: "1.0.0", docsBaseUrl: ["/"], docsPath: "/__docs" },
1660
+ requests: {
1661
+ log: false,
1662
+ rateLimit: { enabled: false, periodInMs: 1, limit: 1 },
1663
+ slowdown: { enabled: false, periodInMs: 1, delayAfter: 1, delayInMs: 1 }
1664
+ },
1665
+ socketsAuthMethods: []
1666
+ });
1667
+ }
1668
+ async parseRequest(req) {
1669
+ return new Request2({
1670
+ ip: "127.0.0.1",
1671
+ body: {},
1672
+ cookies: {},
1673
+ params: {},
1674
+ query: {},
1675
+ method: Methods.get,
1676
+ path: req.path,
1677
+ headers: {},
1678
+ files: {}
1679
+ });
1680
+ }
1681
+ async handleResponse(_, response) {
1682
+ this.handledResponse = response;
1683
+ }
1684
+ createRawResponder(req, res) {
1685
+ return this.createNodeRawResponder({ request: req.rawRequest, response: res.rawResponse });
1686
+ }
1687
+ registerRoute() {
1688
+ }
1689
+ registerErrorHandler() {
1690
+ }
1691
+ registerNotFoundHandler(cb) {
1692
+ this.notFoundHandler = cb;
1693
+ }
1694
+ async startServer() {
1695
+ return true;
1696
+ }
1697
+ async dispatchNotFound(path) {
1698
+ if (!this.notFoundHandler) throw new Error("not-found handler was not registered");
1699
+ this.handledResponse = null;
1700
+ const rawResponse = createRawResponse();
1701
+ await this.notFoundHandler({ path, rawRequest: {} }, { rawResponse });
1702
+ return { handledResponse: this.handledResponse, rawResponse };
1703
+ }
1704
+ }
1705
+ describe("Server not-found handler", () => {
1706
+ test("throws the default Equipped not-found error when no custom handler is set", async () => {
1707
+ ensureTestInstance();
1708
+ const server = new TestServer();
1709
+ await server.start();
1710
+ await expect(server.dispatchNotFound("/missing")).rejects.toBeInstanceOf(NotFoundError);
1711
+ });
1712
+ test("allows a custom not-found handler to return an Equipped response", async () => {
1713
+ ensureTestInstance();
1714
+ const server = new TestServer();
1715
+ server.setNotFoundHandler(
1716
+ ({ request }) => new Response({
1717
+ body: [{ message: `No route for ${request.path}` }],
1718
+ status: StatusCodes.NotFound,
1719
+ headers: {},
1720
+ cookies: {},
1721
+ contentType: "application/json"
1722
+ })
1723
+ );
1724
+ await server.start();
1725
+ const result = await server.dispatchNotFound("/custom");
1726
+ expect(result.handledResponse?.status).toBe(StatusCodes.NotFound);
1727
+ expect(result.handledResponse?.body).toEqual([{ message: "No route for /custom" }]);
1728
+ });
1729
+ test("allows a custom not-found handler to complete the response through a raw Node listener", async () => {
1730
+ ensureTestInstance();
1731
+ const server = new TestServer();
1732
+ server.setNotFoundHandler(
1733
+ ({ respondWithRaw }) => respondWithRaw((_, response) => {
1734
+ response.statusCode = 203;
1735
+ response.end("raw fallback");
1736
+ })
1737
+ );
1738
+ await server.start();
1739
+ const result = await server.dispatchNotFound("/page");
1740
+ expect(result.handledResponse).toBeNull();
1741
+ expect(result.rawResponse.statusCode).toBe(203);
1742
+ expect(result.rawResponse.body()).toBe("raw fallback");
1743
+ });
1744
+ test("writes a clear raw error when a raw not-found handler does not start a response", async () => {
1745
+ ensureTestInstance();
1746
+ const server = new TestServer();
1747
+ server.setNotFoundHandler(({ respondWithRaw }) => respondWithRaw(() => {
1748
+ }));
1749
+ await server.start();
1750
+ const result = await server.dispatchNotFound("/page");
1751
+ expect(result.handledResponse).toBeNull();
1752
+ expect(result.rawResponse.statusCode).toBe(StatusCodes.BadRequest);
1753
+ expect(result.rawResponse.body()).toContain(rawResponseNotStartedMessage);
1754
+ });
1755
+ test("rejects a custom not-found handler result that is neither an Equipped response nor raw completion", async () => {
1756
+ ensureTestInstance();
1757
+ const server = new TestServer();
1758
+ server.setNotFoundHandler((() => void 0));
1759
+ await server.start();
1760
+ await expect(server.dispatchNotFound("/bad")).rejects.toThrow("Not-found handler must return a Response or respondWithRaw(...)");
1761
+ });
1762
+ test("rejects setting the custom not-found handler after server startup", async () => {
1763
+ ensureTestInstance();
1764
+ const server = new TestServer();
1765
+ await server.start();
1766
+ expect(
1767
+ () => server.setNotFoundHandler(
1768
+ () => new Response({
1769
+ body: null,
1770
+ status: StatusCodes.NotFound,
1771
+ headers: {},
1772
+ cookies: {},
1773
+ contentType: "application/json"
1774
+ })
1775
+ )
1776
+ ).toThrow("Cannot set not-found handler after server has started");
1777
+ });
1778
+ });
1779
+ }
1780
+ var ensureTestInstance2;
1781
+ var createRawResponse2;
1782
+
1783
+ // src/errors/types/badRequestError.ts
1784
+ var BadRequestError = class extends RequestError {
1785
+ statusCode = StatusCodes.BadRequest;
1786
+ constructor(message, cause) {
1787
+ super(message, [{ message }], cause);
1788
+ }
1789
+ };
1790
+
1791
+ // src/errors/types/notFoundError.ts
1792
+ var NotFoundError = class extends RequestError {
1793
+ statusCode = StatusCodes.NotFound;
1794
+ constructor(message = "Not found", cause) {
1795
+ super(message, [{ message }], cause);
1796
+ }
1797
+ };
1798
+
1799
+ // src/errors/types/validationError.ts
1800
+ var ValidationError = class extends RequestError {
1801
+ statusCode = StatusCodes.ValidationError;
1802
+ constructor(errors, cause) {
1803
+ super(
1804
+ "Unprocessable Entity",
1805
+ errors.flatMap(({ field, messages }) => messages.map((message) => ({ message, field }))),
1806
+ cause
1807
+ );
1808
+ }
1809
+ };
1810
+
1811
+ // src/server/adapters/fastify/index.ts
1812
+ var FastifyServer = class extends configurable(serverConfigPipe, Server) {
1813
+ #app;
1814
+ constructor(config) {
1815
+ super(config);
1816
+ const instance = Instance.get();
1817
+ const app = (0, import_fastify.default)({
1818
+ disableRequestLogging: !config.requests.log,
1819
+ loggerInstance: config.requests.log ? instance.log : void 0,
1820
+ ajv: { customOptions: { coerceTypes: false } },
1821
+ routerOptions: {
1822
+ ignoreTrailingSlash: true,
1823
+ caseSensitive: false
1824
+ },
1825
+ schemaErrorFormatter: (errors, data) => new ValidationError(
1826
+ errors.map((error) => ({
1827
+ messages: [error.message ?? ""],
1828
+ field: `${data}${error.instancePath}`.replaceAll("/", ".")
1829
+ }))
1830
+ )
1831
+ });
1832
+ this.#app = app;
1833
+ this.setup(app.server, config);
1834
+ app.decorateRequest("savedReq", null);
1835
+ app.setValidatorCompiler(() => () => true);
1836
+ app.setSerializerCompiler(() => (data) => JSON.stringify(data));
1837
+ if (config.publicPath) app.register(import_static.default, { root: config.publicPath });
1838
+ app.register(import_cookie.default, {});
1839
+ app.register(import_cors3.default, this.cors);
1840
+ app.register(import_formbody.default, { parser: (str) => import_qs.default.parse(str) });
1841
+ app.register(import_helmet.default, { crossOriginResourcePolicy: { policy: "cross-origin" }, contentSecurityPolicy: false });
1842
+ app.register(import_multipart.default, {
1843
+ attachFieldsToBody: "keyValues",
1844
+ throwFileSizeLimit: false,
1845
+ limits: { fileSize: instance.settings.utils.maxFileUploadSizeInMb * 1024 * 1024 },
1846
+ onFile: async (f) => {
1847
+ const buffer = await f.toBuffer();
1848
+ const parsed = {
1849
+ name: f.filename,
1850
+ type: f.mimetype,
1851
+ size: buffer.byteLength,
1852
+ isTruncated: f.file.truncated,
1853
+ data: buffer,
1854
+ duration: await getMediaDuration(buffer)
1855
+ };
1856
+ f.value = parsed;
1857
+ }
1858
+ });
1859
+ if (config.requests.rateLimit.enabled)
1860
+ app.register(import_rate_limit.default, {
1861
+ max: config.requests.rateLimit.limit,
1862
+ timeWindow: config.requests.rateLimit.periodInMs,
1863
+ errorResponseBuilder: (_, context) => ({
1864
+ statusCode: StatusCodes.TooManyRequests,
1865
+ message: JSON.stringify([{ message: `Too Many Requests. Retry in ${context.after}` }])
1866
+ })
1867
+ });
1868
+ }
1869
+ async parseRequest(req) {
1870
+ const { body, files } = excludeBufferKeys(req.body ?? {});
1871
+ return new Request({
1872
+ ip: req.ip,
1873
+ body,
1874
+ cookies: req.cookies ?? {},
1875
+ params: req.params ?? {},
1876
+ query: req.query ?? {},
1877
+ method: req.method,
1878
+ path: req.url,
1879
+ headers: req.headers,
1880
+ files
1881
+ });
1882
+ }
1883
+ async handleResponse(res, response) {
1884
+ for (const [key, { value, ...opts }] of Object.entries(response.cookies)) res = res.setCookie(key, value, opts);
1885
+ await res.status(response.status).headers(response.headers).send(response.body);
1886
+ }
1887
+ createRawResponder(req, res) {
1888
+ return this.createNodeRawResponder({ request: req.raw, response: res.raw, beforeHandle: () => res.hijack() });
1889
+ }
1890
+ registerRoute(method, path, cb) {
1891
+ this.#app.register(async (inst) => {
1892
+ inst.route({ url: path, method, handler: cb });
1893
+ });
1894
+ }
1895
+ registerErrorHandler(cb) {
1896
+ this.#app.setErrorHandler(cb);
1897
+ }
1898
+ registerNotFoundHandler(cb) {
1899
+ this.#app.setNotFoundHandler(cb);
1900
+ }
1901
+ async startServer(port) {
1902
+ await this.#app.ready();
1903
+ await this.#app.listen({ port, host: "0.0.0.0" });
1904
+ Instance.on("close", this.#app.close);
1905
+ return true;
1906
+ }
1907
+ };
1908
+ function excludeBufferKeys(body) {
1909
+ if (typeof body !== "object") return { body, files: {} };
1910
+ const entries = Object.entries(body ?? {});
1911
+ const isFile = (val) => Array.isArray(val) ? isFile(val.at(0)) : Buffer.isBuffer(val?.data);
1912
+ const fileEntries = entries.filter(([_, value]) => isFile(value)).map(([key, value]) => [key, Array.isArray(value) ? value : [value]]);
1913
+ const nonFileEntries = entries.filter(([_, value]) => !isFile(value));
1914
+ return {
1915
+ body: Object.fromEntries(nonFileEntries),
1916
+ files: Object.fromEntries(fileEntries)
1917
+ };
1918
+ }
1919
+ if (void 0) {
1920
+ let ensureTestInstance = function() {
1921
+ const instance = Instance.maybeGet() ?? Instance.create({ app: { name: "equipped-test" }, log: { level: "silent" } });
1922
+ if (!testInstanceState.__equippedTestInstanceAliased) {
1923
+ instance.alias("equipped-test");
1924
+ testInstanceState.__equippedTestInstanceAliased = true;
1925
+ }
1926
+ }, createRawResponse = function() {
1927
+ return {
1928
+ statusCode: 200,
1929
+ headersSent: false,
1930
+ writableEnded: false,
1931
+ setHeader: vi.fn(),
1932
+ end(chunk) {
1933
+ void chunk;
1934
+ this.headersSent = true;
1935
+ this.writableEnded = true;
1936
+ }
1937
+ };
1938
+ };
1939
+ ensureTestInstance2 = ensureTestInstance, createRawResponse2 = createRawResponse;
1940
+ const { describe, expect, test, vi } = void 0;
1941
+ const testInstanceState = globalThis;
1942
+ class TestFastifyServer extends FastifyServer {
1943
+ exposeRawResponder(req, res) {
1944
+ return this.createRawResponder(req, res);
1945
+ }
1946
+ }
1947
+ describe("FastifyServer raw responder", () => {
1948
+ test("hijacks the Fastify reply before passing Node raw request and response to the handler", async () => {
1949
+ ensureTestInstance();
1950
+ const server = TestFastifyServer.create({ port: 0, requests: { log: false } });
1951
+ const rawRequest = { marker: "request" };
1952
+ const rawResponse = createRawResponse();
1953
+ const reply = { raw: rawResponse, hijack: vi.fn() };
1954
+ const request = { raw: rawRequest };
1955
+ let received = null;
1956
+ await server.exposeRawResponder(
1957
+ request,
1958
+ reply
1959
+ )(async (req, res) => {
1960
+ received = { request: req, response: res };
1961
+ res.end("ok");
1962
+ });
1963
+ expect(reply.hijack).toHaveBeenCalledOnce();
1964
+ expect(received).toEqual({ request: rawRequest, response: rawResponse });
1965
+ });
1966
+ });
1967
+ }
1968
+ var ensureTestInstance2;
1969
+ var createRawResponse2;
1970
+ // Annotate the CommonJS export names for ESM import in node:
1971
+ 0 && (module.exports = {
1972
+ FastifyServer
1973
+ });
1974
+ //# sourceMappingURL=index.cjs.map