exisjs 0.1.2

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 (495) hide show
  1. package/README.md +52 -0
  2. package/bin/exis.js +2 -0
  3. package/dist/adapters/aws-lambda.d.ts +21 -0
  4. package/dist/adapters/aws-lambda.d.ts.map +1 -0
  5. package/dist/adapters/aws-lambda.js +110 -0
  6. package/dist/adapters/aws-lambda.js.map +1 -0
  7. package/dist/adapters/bun.d.ts +9 -0
  8. package/dist/adapters/bun.d.ts.map +1 -0
  9. package/dist/adapters/bun.js +15 -0
  10. package/dist/adapters/bun.js.map +1 -0
  11. package/dist/adapters/cloudflare.d.ts +10 -0
  12. package/dist/adapters/cloudflare.d.ts.map +1 -0
  13. package/dist/adapters/cloudflare.js +14 -0
  14. package/dist/adapters/cloudflare.js.map +1 -0
  15. package/dist/adapters/deno.d.ts +7 -0
  16. package/dist/adapters/deno.d.ts.map +1 -0
  17. package/dist/adapters/deno.js +11 -0
  18. package/dist/adapters/deno.js.map +1 -0
  19. package/dist/adapters/fastly.d.ts +6 -0
  20. package/dist/adapters/fastly.d.ts.map +1 -0
  21. package/dist/adapters/fastly.js +12 -0
  22. package/dist/adapters/fastly.js.map +1 -0
  23. package/dist/adapters/fetch.d.ts +30 -0
  24. package/dist/adapters/fetch.d.ts.map +1 -0
  25. package/dist/adapters/fetch.js +119 -0
  26. package/dist/adapters/fetch.js.map +1 -0
  27. package/dist/adapters/index.d.ts +9 -0
  28. package/dist/adapters/index.d.ts.map +1 -0
  29. package/dist/adapters/index.js +28 -0
  30. package/dist/adapters/index.js.map +1 -0
  31. package/dist/adapters/netlify.d.ts +8 -0
  32. package/dist/adapters/netlify.d.ts.map +1 -0
  33. package/dist/adapters/netlify.js +12 -0
  34. package/dist/adapters/netlify.js.map +1 -0
  35. package/dist/adapters/vercel.d.ts +14 -0
  36. package/dist/adapters/vercel.d.ts.map +1 -0
  37. package/dist/adapters/vercel.js +20 -0
  38. package/dist/adapters/vercel.js.map +1 -0
  39. package/dist/auth/jwt.d.ts +20 -0
  40. package/dist/auth/jwt.d.ts.map +1 -0
  41. package/dist/auth/jwt.js +79 -0
  42. package/dist/auth/jwt.js.map +1 -0
  43. package/dist/auth/password.d.ts +25 -0
  44. package/dist/auth/password.d.ts.map +1 -0
  45. package/dist/auth/password.js +93 -0
  46. package/dist/auth/password.js.map +1 -0
  47. package/dist/auth/rbac.d.ts +10 -0
  48. package/dist/auth/rbac.d.ts.map +1 -0
  49. package/dist/auth/rbac.js +34 -0
  50. package/dist/auth/rbac.js.map +1 -0
  51. package/dist/auth/session.d.ts +23 -0
  52. package/dist/auth/session.d.ts.map +1 -0
  53. package/dist/auth/session.js +105 -0
  54. package/dist/auth/session.js.map +1 -0
  55. package/dist/cache/index.d.ts +2 -0
  56. package/dist/cache/index.d.ts.map +1 -0
  57. package/dist/cache/index.js +9 -0
  58. package/dist/cache/index.js.map +1 -0
  59. package/dist/cache/store.d.ts +48 -0
  60. package/dist/cache/store.d.ts.map +1 -0
  61. package/dist/cache/store.js +211 -0
  62. package/dist/cache/store.js.map +1 -0
  63. package/dist/cli/commands/build.d.ts +7 -0
  64. package/dist/cli/commands/build.d.ts.map +1 -0
  65. package/dist/cli/commands/build.js +183 -0
  66. package/dist/cli/commands/build.js.map +1 -0
  67. package/dist/cli/commands/dev.d.ts +9 -0
  68. package/dist/cli/commands/dev.d.ts.map +1 -0
  69. package/dist/cli/commands/dev.js +290 -0
  70. package/dist/cli/commands/dev.js.map +1 -0
  71. package/dist/cli/commands/exports.d.ts +2 -0
  72. package/dist/cli/commands/exports.d.ts.map +1 -0
  73. package/dist/cli/commands/exports.js +76 -0
  74. package/dist/cli/commands/exports.js.map +1 -0
  75. package/dist/cli/commands/generate.d.ts +5 -0
  76. package/dist/cli/commands/generate.d.ts.map +1 -0
  77. package/dist/cli/commands/generate.js +149 -0
  78. package/dist/cli/commands/generate.js.map +1 -0
  79. package/dist/cli/commands/init.d.ts +2 -0
  80. package/dist/cli/commands/init.d.ts.map +1 -0
  81. package/dist/cli/commands/init.js +37 -0
  82. package/dist/cli/commands/init.js.map +1 -0
  83. package/dist/cli/commands/repl.d.ts +6 -0
  84. package/dist/cli/commands/repl.d.ts.map +1 -0
  85. package/dist/cli/commands/repl.js +75 -0
  86. package/dist/cli/commands/repl.js.map +1 -0
  87. package/dist/cli/commands/start.d.ts +7 -0
  88. package/dist/cli/commands/start.d.ts.map +1 -0
  89. package/dist/cli/commands/start.js +111 -0
  90. package/dist/cli/commands/start.js.map +1 -0
  91. package/dist/cli/commands/test.d.ts +7 -0
  92. package/dist/cli/commands/test.d.ts.map +1 -0
  93. package/dist/cli/commands/test.js +170 -0
  94. package/dist/cli/commands/test.js.map +1 -0
  95. package/dist/cli/index.d.ts +3 -0
  96. package/dist/cli/index.d.ts.map +1 -0
  97. package/dist/cli/index.js +183 -0
  98. package/dist/cli/index.js.map +1 -0
  99. package/dist/cli/manifest.d.ts +2 -0
  100. package/dist/cli/manifest.d.ts.map +1 -0
  101. package/dist/cli/manifest.js +160 -0
  102. package/dist/cli/manifest.js.map +1 -0
  103. package/dist/cli/optimizers/aot-routes.d.ts +2 -0
  104. package/dist/cli/optimizers/aot-routes.d.ts.map +1 -0
  105. package/dist/cli/optimizers/aot-routes.js +59 -0
  106. package/dist/cli/optimizers/aot-routes.js.map +1 -0
  107. package/dist/cli/optimizers/precompile-serializers.d.ts +2 -0
  108. package/dist/cli/optimizers/precompile-serializers.d.ts.map +1 -0
  109. package/dist/cli/optimizers/precompile-serializers.js +68 -0
  110. package/dist/cli/optimizers/precompile-serializers.js.map +1 -0
  111. package/dist/cli/optimizers/tree-shake.d.ts +2 -0
  112. package/dist/cli/optimizers/tree-shake.d.ts.map +1 -0
  113. package/dist/cli/optimizers/tree-shake.js +64 -0
  114. package/dist/cli/optimizers/tree-shake.js.map +1 -0
  115. package/dist/cli/routes.d.ts +2 -0
  116. package/dist/cli/routes.d.ts.map +1 -0
  117. package/dist/cli/routes.js +158 -0
  118. package/dist/cli/routes.js.map +1 -0
  119. package/dist/cli/utils.d.ts +24 -0
  120. package/dist/cli/utils.d.ts.map +1 -0
  121. package/dist/cli/utils.js +54 -0
  122. package/dist/cli/utils.js.map +1 -0
  123. package/dist/config/constants.d.ts +11 -0
  124. package/dist/config/constants.d.ts.map +1 -0
  125. package/dist/config/constants.js +14 -0
  126. package/dist/config/constants.js.map +1 -0
  127. package/dist/cron/parser.d.ts +2 -0
  128. package/dist/cron/parser.d.ts.map +1 -0
  129. package/dist/cron/parser.js +52 -0
  130. package/dist/cron/parser.js.map +1 -0
  131. package/dist/cron/scheduler.d.ts +22 -0
  132. package/dist/cron/scheduler.d.ts.map +1 -0
  133. package/dist/cron/scheduler.js +102 -0
  134. package/dist/cron/scheduler.js.map +1 -0
  135. package/dist/dataloader/dataloader.d.ts +23 -0
  136. package/dist/dataloader/dataloader.d.ts.map +1 -0
  137. package/dist/dataloader/dataloader.js +98 -0
  138. package/dist/dataloader/dataloader.js.map +1 -0
  139. package/dist/dataloader/registry.d.ts +17 -0
  140. package/dist/dataloader/registry.d.ts.map +1 -0
  141. package/dist/dataloader/registry.js +47 -0
  142. package/dist/dataloader/registry.js.map +1 -0
  143. package/dist/decorators/index.d.ts +63 -0
  144. package/dist/decorators/index.d.ts.map +1 -0
  145. package/dist/decorators/index.js +460 -0
  146. package/dist/decorators/index.js.map +1 -0
  147. package/dist/di/container.d.ts +21 -0
  148. package/dist/di/container.d.ts.map +1 -0
  149. package/dist/di/container.js +81 -0
  150. package/dist/di/container.js.map +1 -0
  151. package/dist/di/inject.d.ts +3 -0
  152. package/dist/di/inject.d.ts.map +1 -0
  153. package/dist/di/inject.js +12 -0
  154. package/dist/di/inject.js.map +1 -0
  155. package/dist/exports/auth.d.ts +6 -0
  156. package/dist/exports/auth.d.ts.map +1 -0
  157. package/dist/exports/auth.js +46 -0
  158. package/dist/exports/auth.js.map +1 -0
  159. package/dist/exports/cache.d.ts +4 -0
  160. package/dist/exports/cache.d.ts.map +1 -0
  161. package/dist/exports/cache.js +20 -0
  162. package/dist/exports/cache.js.map +1 -0
  163. package/dist/exports/config.d.ts +4 -0
  164. package/dist/exports/config.d.ts.map +1 -0
  165. package/dist/exports/config.js +23 -0
  166. package/dist/exports/config.js.map +1 -0
  167. package/dist/exports/dataloader.d.ts +3 -0
  168. package/dist/exports/dataloader.d.ts.map +1 -0
  169. package/dist/exports/dataloader.js +19 -0
  170. package/dist/exports/dataloader.js.map +1 -0
  171. package/dist/exports/decorators.d.ts +2 -0
  172. package/dist/exports/decorators.d.ts.map +1 -0
  173. package/dist/exports/decorators.js +18 -0
  174. package/dist/exports/decorators.js.map +1 -0
  175. package/dist/exports/di.d.ts +4 -0
  176. package/dist/exports/di.d.ts.map +1 -0
  177. package/dist/exports/di.js +8 -0
  178. package/dist/exports/di.js.map +1 -0
  179. package/dist/exports/error.d.ts +2 -0
  180. package/dist/exports/error.d.ts.map +1 -0
  181. package/dist/exports/error.js +16 -0
  182. package/dist/exports/error.js.map +1 -0
  183. package/dist/exports/module.d.ts +3 -0
  184. package/dist/exports/module.d.ts.map +1 -0
  185. package/dist/exports/module.js +6 -0
  186. package/dist/exports/module.js.map +1 -0
  187. package/dist/exports/plugin.d.ts +3 -0
  188. package/dist/exports/plugin.d.ts.map +1 -0
  189. package/dist/exports/plugin.js +6 -0
  190. package/dist/exports/plugin.js.map +1 -0
  191. package/dist/exports/queue.d.ts +9 -0
  192. package/dist/exports/queue.d.ts.map +1 -0
  193. package/dist/exports/queue.js +16 -0
  194. package/dist/exports/queue.js.map +1 -0
  195. package/dist/exports/response.d.ts +2 -0
  196. package/dist/exports/response.d.ts.map +1 -0
  197. package/dist/exports/response.js +18 -0
  198. package/dist/exports/response.js.map +1 -0
  199. package/dist/exports/route.d.ts +14 -0
  200. package/dist/exports/route.d.ts.map +1 -0
  201. package/dist/exports/route.js +25 -0
  202. package/dist/exports/route.js.map +1 -0
  203. package/dist/exports/security.d.ts +3 -0
  204. package/dist/exports/security.d.ts.map +1 -0
  205. package/dist/exports/security.js +13 -0
  206. package/dist/exports/security.js.map +1 -0
  207. package/dist/exports/swagger.d.ts +3 -0
  208. package/dist/exports/swagger.d.ts.map +1 -0
  209. package/dist/exports/swagger.js +6 -0
  210. package/dist/exports/swagger.js.map +1 -0
  211. package/dist/exports/validation.d.ts +2 -0
  212. package/dist/exports/validation.d.ts.map +1 -0
  213. package/dist/exports/validation.js +8 -0
  214. package/dist/exports/validation.js.map +1 -0
  215. package/dist/index.d.ts +11 -0
  216. package/dist/index.d.ts.map +1 -0
  217. package/dist/index.js +71 -0
  218. package/dist/index.js.map +1 -0
  219. package/dist/integrations/drizzle.d.ts +10 -0
  220. package/dist/integrations/drizzle.d.ts.map +1 -0
  221. package/dist/integrations/drizzle.js +34 -0
  222. package/dist/integrations/drizzle.js.map +1 -0
  223. package/dist/integrations/jwt.d.ts +12 -0
  224. package/dist/integrations/jwt.d.ts.map +1 -0
  225. package/dist/integrations/jwt.js +27 -0
  226. package/dist/integrations/jwt.js.map +1 -0
  227. package/dist/integrations/mongodb.d.ts +13 -0
  228. package/dist/integrations/mongodb.d.ts.map +1 -0
  229. package/dist/integrations/mongodb.js +48 -0
  230. package/dist/integrations/mongodb.js.map +1 -0
  231. package/dist/integrations/mongoose.d.ts +13 -0
  232. package/dist/integrations/mongoose.d.ts.map +1 -0
  233. package/dist/integrations/mongoose.js +58 -0
  234. package/dist/integrations/mongoose.js.map +1 -0
  235. package/dist/integrations/openai.d.ts +12 -0
  236. package/dist/integrations/openai.d.ts.map +1 -0
  237. package/dist/integrations/openai.js +47 -0
  238. package/dist/integrations/openai.js.map +1 -0
  239. package/dist/integrations/postgres.d.ts +13 -0
  240. package/dist/integrations/postgres.d.ts.map +1 -0
  241. package/dist/integrations/postgres.js +55 -0
  242. package/dist/integrations/postgres.js.map +1 -0
  243. package/dist/integrations/posthog.d.ts +13 -0
  244. package/dist/integrations/posthog.d.ts.map +1 -0
  245. package/dist/integrations/posthog.js +49 -0
  246. package/dist/integrations/posthog.js.map +1 -0
  247. package/dist/integrations/prisma.d.ts +10 -0
  248. package/dist/integrations/prisma.d.ts.map +1 -0
  249. package/dist/integrations/prisma.js +27 -0
  250. package/dist/integrations/prisma.js.map +1 -0
  251. package/dist/integrations/redis.d.ts +12 -0
  252. package/dist/integrations/redis.d.ts.map +1 -0
  253. package/dist/integrations/redis.js +48 -0
  254. package/dist/integrations/redis.js.map +1 -0
  255. package/dist/integrations/resend.d.ts +12 -0
  256. package/dist/integrations/resend.d.ts.map +1 -0
  257. package/dist/integrations/resend.js +47 -0
  258. package/dist/integrations/resend.js.map +1 -0
  259. package/dist/integrations/s3.d.ts +15 -0
  260. package/dist/integrations/s3.d.ts.map +1 -0
  261. package/dist/integrations/s3.js +60 -0
  262. package/dist/integrations/s3.js.map +1 -0
  263. package/dist/integrations/supabase.d.ts +13 -0
  264. package/dist/integrations/supabase.d.ts.map +1 -0
  265. package/dist/integrations/supabase.js +51 -0
  266. package/dist/integrations/supabase.js.map +1 -0
  267. package/dist/lib/start-repl.d.ts +2 -0
  268. package/dist/lib/start-repl.d.ts.map +1 -0
  269. package/dist/lib/start-repl.js +122 -0
  270. package/dist/lib/start-repl.js.map +1 -0
  271. package/dist/lib/start-server.d.ts +2 -0
  272. package/dist/lib/start-server.d.ts.map +1 -0
  273. package/dist/lib/start-server.js +103 -0
  274. package/dist/lib/start-server.js.map +1 -0
  275. package/dist/middleware/backpressure.d.ts +11 -0
  276. package/dist/middleware/backpressure.d.ts.map +1 -0
  277. package/dist/middleware/backpressure.js +55 -0
  278. package/dist/middleware/backpressure.js.map +1 -0
  279. package/dist/middleware/cache.d.ts +10 -0
  280. package/dist/middleware/cache.d.ts.map +1 -0
  281. package/dist/middleware/cache.js +97 -0
  282. package/dist/middleware/cache.js.map +1 -0
  283. package/dist/middleware/compression.d.ts +3 -0
  284. package/dist/middleware/compression.d.ts.map +1 -0
  285. package/dist/middleware/compression.js +132 -0
  286. package/dist/middleware/compression.js.map +1 -0
  287. package/dist/middleware/dedupe.d.ts +10 -0
  288. package/dist/middleware/dedupe.d.ts.map +1 -0
  289. package/dist/middleware/dedupe.js +79 -0
  290. package/dist/middleware/dedupe.js.map +1 -0
  291. package/dist/middleware/exception-filter.d.ts +9 -0
  292. package/dist/middleware/exception-filter.d.ts.map +1 -0
  293. package/dist/middleware/exception-filter.js +26 -0
  294. package/dist/middleware/exception-filter.js.map +1 -0
  295. package/dist/middleware/guard.d.ts +11 -0
  296. package/dist/middleware/guard.d.ts.map +1 -0
  297. package/dist/middleware/guard.js +26 -0
  298. package/dist/middleware/guard.js.map +1 -0
  299. package/dist/middleware/interceptor.d.ts +4 -0
  300. package/dist/middleware/interceptor.d.ts.map +1 -0
  301. package/dist/middleware/interceptor.js +32 -0
  302. package/dist/middleware/interceptor.js.map +1 -0
  303. package/dist/middleware/ip-filter.d.ts +11 -0
  304. package/dist/middleware/ip-filter.d.ts.map +1 -0
  305. package/dist/middleware/ip-filter.js +27 -0
  306. package/dist/middleware/ip-filter.js.map +1 -0
  307. package/dist/middleware/middleware.d.ts +26 -0
  308. package/dist/middleware/middleware.d.ts.map +1 -0
  309. package/dist/middleware/middleware.js +271 -0
  310. package/dist/middleware/middleware.js.map +1 -0
  311. package/dist/middleware/pipe.d.ts +9 -0
  312. package/dist/middleware/pipe.d.ts.map +1 -0
  313. package/dist/middleware/pipe.js +24 -0
  314. package/dist/middleware/pipe.js.map +1 -0
  315. package/dist/middleware/security.d.ts +53 -0
  316. package/dist/middleware/security.d.ts.map +1 -0
  317. package/dist/middleware/security.js +257 -0
  318. package/dist/middleware/security.js.map +1 -0
  319. package/dist/module/module.d.ts +17 -0
  320. package/dist/module/module.d.ts.map +1 -0
  321. package/dist/module/module.js +37 -0
  322. package/dist/module/module.js.map +1 -0
  323. package/dist/observability/health.d.ts +23 -0
  324. package/dist/observability/health.d.ts.map +1 -0
  325. package/dist/observability/health.js +49 -0
  326. package/dist/observability/health.js.map +1 -0
  327. package/dist/observability/index.d.ts +4 -0
  328. package/dist/observability/index.d.ts.map +1 -0
  329. package/dist/observability/index.js +10 -0
  330. package/dist/observability/index.js.map +1 -0
  331. package/dist/observability/otel.d.ts +27 -0
  332. package/dist/observability/otel.d.ts.map +1 -0
  333. package/dist/observability/otel.js +45 -0
  334. package/dist/observability/otel.js.map +1 -0
  335. package/dist/observability/prometheus.d.ts +30 -0
  336. package/dist/observability/prometheus.d.ts.map +1 -0
  337. package/dist/observability/prometheus.js +31 -0
  338. package/dist/observability/prometheus.js.map +1 -0
  339. package/dist/queue/client.d.ts +13 -0
  340. package/dist/queue/client.d.ts.map +1 -0
  341. package/dist/queue/client.js +64 -0
  342. package/dist/queue/client.js.map +1 -0
  343. package/dist/queue/drivers/MemoryDriver.d.ts +17 -0
  344. package/dist/queue/drivers/MemoryDriver.d.ts.map +1 -0
  345. package/dist/queue/drivers/MemoryDriver.js +109 -0
  346. package/dist/queue/drivers/MemoryDriver.js.map +1 -0
  347. package/dist/queue/drivers/RedisDriver.d.ts +18 -0
  348. package/dist/queue/drivers/RedisDriver.d.ts.map +1 -0
  349. package/dist/queue/drivers/RedisDriver.js +120 -0
  350. package/dist/queue/drivers/RedisDriver.js.map +1 -0
  351. package/dist/queue/index.d.ts +12 -0
  352. package/dist/queue/index.d.ts.map +1 -0
  353. package/dist/queue/index.js +27 -0
  354. package/dist/queue/index.js.map +1 -0
  355. package/dist/queue/types.d.ts +51 -0
  356. package/dist/queue/types.d.ts.map +1 -0
  357. package/dist/queue/types.js +3 -0
  358. package/dist/queue/types.js.map +1 -0
  359. package/dist/queue/worker.d.ts +18 -0
  360. package/dist/queue/worker.d.ts.map +1 -0
  361. package/dist/queue/worker.js +160 -0
  362. package/dist/queue/worker.js.map +1 -0
  363. package/dist/response/index.d.ts +16 -0
  364. package/dist/response/index.d.ts.map +1 -0
  365. package/dist/response/index.js +19 -0
  366. package/dist/response/index.js.map +1 -0
  367. package/dist/router/gateway.d.ts +64 -0
  368. package/dist/router/gateway.d.ts.map +1 -0
  369. package/dist/router/gateway.js +11 -0
  370. package/dist/router/gateway.js.map +1 -0
  371. package/dist/router/radix.d.ts +42 -0
  372. package/dist/router/radix.d.ts.map +1 -0
  373. package/dist/router/radix.js +523 -0
  374. package/dist/router/radix.js.map +1 -0
  375. package/dist/router/router.d.ts +59 -0
  376. package/dist/router/router.d.ts.map +1 -0
  377. package/dist/router/router.js +386 -0
  378. package/dist/router/router.js.map +1 -0
  379. package/dist/server/app.d.ts +206 -0
  380. package/dist/server/app.d.ts.map +1 -0
  381. package/dist/server/app.js +2191 -0
  382. package/dist/server/app.js.map +1 -0
  383. package/dist/server/cluster.d.ts +52 -0
  384. package/dist/server/cluster.d.ts.map +1 -0
  385. package/dist/server/cluster.js +165 -0
  386. package/dist/server/cluster.js.map +1 -0
  387. package/dist/server/context.d.ts +40 -0
  388. package/dist/server/context.d.ts.map +1 -0
  389. package/dist/server/context.js +74 -0
  390. package/dist/server/context.js.map +1 -0
  391. package/dist/server/define.d.ts +14 -0
  392. package/dist/server/define.d.ts.map +1 -0
  393. package/dist/server/define.js +22 -0
  394. package/dist/server/define.js.map +1 -0
  395. package/dist/server/dep-graph.d.ts +2 -0
  396. package/dist/server/dep-graph.d.ts.map +1 -0
  397. package/dist/server/dep-graph.js +109 -0
  398. package/dist/server/dep-graph.js.map +1 -0
  399. package/dist/server/dev-error-overlay.d.ts +3 -0
  400. package/dist/server/dev-error-overlay.d.ts.map +1 -0
  401. package/dist/server/dev-error-overlay.js +116 -0
  402. package/dist/server/dev-error-overlay.js.map +1 -0
  403. package/dist/server/hot-reload.d.ts +28 -0
  404. package/dist/server/hot-reload.d.ts.map +1 -0
  405. package/dist/server/hot-reload.js +253 -0
  406. package/dist/server/hot-reload.js.map +1 -0
  407. package/dist/server/request.d.ts +71 -0
  408. package/dist/server/request.d.ts.map +1 -0
  409. package/dist/server/request.js +408 -0
  410. package/dist/server/request.js.map +1 -0
  411. package/dist/server/response.d.ts +36 -0
  412. package/dist/server/response.d.ts.map +1 -0
  413. package/dist/server/response.js +254 -0
  414. package/dist/server/response.js.map +1 -0
  415. package/dist/server/route.d.ts +148 -0
  416. package/dist/server/route.d.ts.map +1 -0
  417. package/dist/server/route.js +56 -0
  418. package/dist/server/route.js.map +1 -0
  419. package/dist/server/sse.d.ts +16 -0
  420. package/dist/server/sse.d.ts.map +1 -0
  421. package/dist/server/sse.js +51 -0
  422. package/dist/server/sse.js.map +1 -0
  423. package/dist/server/uws-adapter.d.ts +101 -0
  424. package/dist/server/uws-adapter.d.ts.map +1 -0
  425. package/dist/server/uws-adapter.js +338 -0
  426. package/dist/server/uws-adapter.js.map +1 -0
  427. package/dist/swagger/index.d.ts +9 -0
  428. package/dist/swagger/index.d.ts.map +1 -0
  429. package/dist/swagger/index.js +147 -0
  430. package/dist/swagger/index.js.map +1 -0
  431. package/dist/testing/client.d.ts +44 -0
  432. package/dist/testing/client.d.ts.map +1 -0
  433. package/dist/testing/client.js +105 -0
  434. package/dist/testing/client.js.map +1 -0
  435. package/dist/testing/index.d.ts +7 -0
  436. package/dist/testing/index.d.ts.map +1 -0
  437. package/dist/testing/index.js +128 -0
  438. package/dist/testing/index.js.map +1 -0
  439. package/dist/testing/mocks.d.ts +25 -0
  440. package/dist/testing/mocks.d.ts.map +1 -0
  441. package/dist/testing/mocks.js +117 -0
  442. package/dist/testing/mocks.js.map +1 -0
  443. package/dist/testing/reporter.d.ts +13 -0
  444. package/dist/testing/reporter.d.ts.map +1 -0
  445. package/dist/testing/reporter.js +101 -0
  446. package/dist/testing/reporter.js.map +1 -0
  447. package/dist/threads/pool.d.ts +13 -0
  448. package/dist/threads/pool.d.ts.map +1 -0
  449. package/dist/threads/pool.js +93 -0
  450. package/dist/threads/pool.js.map +1 -0
  451. package/dist/threads/worker-runner.d.ts +2 -0
  452. package/dist/threads/worker-runner.d.ts.map +1 -0
  453. package/dist/threads/worker-runner.js +71 -0
  454. package/dist/threads/worker-runner.js.map +1 -0
  455. package/dist/types.d.ts +200 -0
  456. package/dist/types.d.ts.map +1 -0
  457. package/dist/types.js +3 -0
  458. package/dist/types.js.map +1 -0
  459. package/dist/utils/circuit-breaker.d.ts +30 -0
  460. package/dist/utils/circuit-breaker.d.ts.map +1 -0
  461. package/dist/utils/circuit-breaker.js +72 -0
  462. package/dist/utils/circuit-breaker.js.map +1 -0
  463. package/dist/utils/config.d.ts +9 -0
  464. package/dist/utils/config.d.ts.map +1 -0
  465. package/dist/utils/config.js +229 -0
  466. package/dist/utils/config.js.map +1 -0
  467. package/dist/utils/env.d.ts +25 -0
  468. package/dist/utils/env.d.ts.map +1 -0
  469. package/dist/utils/env.js +155 -0
  470. package/dist/utils/env.js.map +1 -0
  471. package/dist/utils/errors.d.ts +51 -0
  472. package/dist/utils/errors.d.ts.map +1 -0
  473. package/dist/utils/errors.js +233 -0
  474. package/dist/utils/errors.js.map +1 -0
  475. package/dist/utils/logger.d.ts +6 -0
  476. package/dist/utils/logger.d.ts.map +1 -0
  477. package/dist/utils/logger.js +70 -0
  478. package/dist/utils/logger.js.map +1 -0
  479. package/dist/utils/plugin.d.ts +7 -0
  480. package/dist/utils/plugin.d.ts.map +1 -0
  481. package/dist/utils/plugin.js +30 -0
  482. package/dist/utils/plugin.js.map +1 -0
  483. package/dist/utils/validator.d.ts +300 -0
  484. package/dist/utils/validator.d.ts.map +1 -0
  485. package/dist/utils/validator.js +719 -0
  486. package/dist/utils/validator.js.map +1 -0
  487. package/dist/websocket/server.d.ts +66 -0
  488. package/dist/websocket/server.d.ts.map +1 -0
  489. package/dist/websocket/server.js +156 -0
  490. package/dist/websocket/server.js.map +1 -0
  491. package/dist/websocket/socket.d.ts +119 -0
  492. package/dist/websocket/socket.d.ts.map +1 -0
  493. package/dist/websocket/socket.js +240 -0
  494. package/dist/websocket/socket.js.map +1 -0
  495. package/package.json +270 -0
@@ -0,0 +1,20 @@
1
+ import { HttpError } from '../utils/errors';
2
+ export interface JWTOptions {
3
+ expiresIn?: number;
4
+ }
5
+ /**
6
+ * Sign a payload to create a JWT token.
7
+ * @param payload Object to encode
8
+ * @param secret The signing secret
9
+ * @param options JWTOptions (e.g. expiresIn)
10
+ */
11
+ export declare function signJWT(payload: Record<string, unknown>, secret: string, options?: JWTOptions): string;
12
+ export declare class TokenExpiredError extends HttpError {
13
+ constructor(message?: string);
14
+ }
15
+ /**
16
+ * Verify a JWT token and extract its payload.
17
+ * Throws HttpError(401) if the token is invalid or TokenExpiredError if expired.
18
+ */
19
+ export declare function verifyJWT<T = unknown>(token: string, secret: string): T;
20
+ //# sourceMappingURL=jwt.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"jwt.d.ts","sourceRoot":"","sources":["../../src/auth/jwt.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAA;AAE3C,MAAM,WAAW,UAAU;IACzB,SAAS,CAAC,EAAE,MAAM,CAAA;CACnB;AAeD;;;;;GAKG;AACH,wBAAgB,OAAO,CACrB,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAChC,MAAM,EAAE,MAAM,EACd,OAAO,CAAC,EAAE,UAAU,GACnB,MAAM,CAgBR;AAED,qBAAa,iBAAkB,SAAQ,SAAS;gBAClC,OAAO,SAAkB;CAItC;AAED;;;GAGG;AACH,wBAAgB,SAAS,CAAC,CAAC,GAAG,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,CAAC,CA2CvE"}
@@ -0,0 +1,79 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.TokenExpiredError = void 0;
4
+ exports.signJWT = signJWT;
5
+ exports.verifyJWT = verifyJWT;
6
+ const node_crypto_1 = require("node:crypto");
7
+ const errors_1 = require("../utils/errors");
8
+ function base64url(str) {
9
+ const base64 = Buffer.isBuffer(str)
10
+ ? str.toString('base64')
11
+ : Buffer.from(str).toString('base64');
12
+ return base64.replace(/=/g, '').replace(/\+/g, '-').replace(/\//g, '_');
13
+ }
14
+ function fromBase64url(str) {
15
+ const base64 = str.replace(/-/g, '+').replace(/_/g, '/');
16
+ return Buffer.from(base64, 'base64').toString('utf8');
17
+ }
18
+ /**
19
+ * Sign a payload to create a JWT token.
20
+ * @param payload Object to encode
21
+ * @param secret The signing secret
22
+ * @param options JWTOptions (e.g. expiresIn)
23
+ */
24
+ function signJWT(payload, secret, options) {
25
+ const header = { alg: 'HS256', typ: 'JWT' };
26
+ const expPayload = { ...payload };
27
+ if (options?.expiresIn) {
28
+ expPayload.exp = Math.floor(Date.now() / 1000) + options.expiresIn;
29
+ }
30
+ const encodedHeader = base64url(JSON.stringify(header));
31
+ const encodedPayload = base64url(JSON.stringify(expPayload));
32
+ const signature = (0, node_crypto_1.createHmac)('sha256', secret)
33
+ .update(`${encodedHeader}.${encodedPayload}`)
34
+ .digest();
35
+ return `${encodedHeader}.${encodedPayload}.${base64url(signature)}`;
36
+ }
37
+ class TokenExpiredError extends errors_1.HttpError {
38
+ constructor(message = 'Token expired') {
39
+ super(message, 401, 'TOKEN_EXPIRED');
40
+ this.name = 'TokenExpiredError';
41
+ }
42
+ }
43
+ exports.TokenExpiredError = TokenExpiredError;
44
+ /**
45
+ * Verify a JWT token and extract its payload.
46
+ * Throws HttpError(401) if the token is invalid or TokenExpiredError if expired.
47
+ */
48
+ function verifyJWT(token, secret) {
49
+ if (!token || typeof token !== 'string') {
50
+ throw errors_1.HttpError.unauthorized('Invalid token format');
51
+ }
52
+ const parts = token.split('.');
53
+ if (parts.length !== 3) {
54
+ throw errors_1.HttpError.unauthorized('Invalid token format');
55
+ }
56
+ const [encodedHeader, encodedPayload, encodedSignature] = parts;
57
+ const expectedSignature = base64url((0, node_crypto_1.createHmac)('sha256', secret)
58
+ .update(`${encodedHeader}.${encodedPayload}`)
59
+ .digest());
60
+ const expectedBuf = Buffer.from(expectedSignature);
61
+ const actualBuf = Buffer.from(encodedSignature);
62
+ if (expectedBuf.length !== actualBuf.length ||
63
+ !(0, node_crypto_1.timingSafeEqual)(expectedBuf, actualBuf)) {
64
+ throw errors_1.HttpError.unauthorized('Invalid token signature');
65
+ }
66
+ let payload;
67
+ try {
68
+ payload = JSON.parse(fromBase64url(encodedPayload));
69
+ }
70
+ catch {
71
+ throw errors_1.HttpError.unauthorized('Malformed token payload');
72
+ }
73
+ if (typeof payload.exp === 'number' &&
74
+ Math.floor(Date.now() / 1000) > payload.exp) {
75
+ throw new TokenExpiredError();
76
+ }
77
+ return payload;
78
+ }
79
+ //# sourceMappingURL=jwt.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"jwt.js","sourceRoot":"","sources":["../../src/auth/jwt.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,25 @@
1
+ export interface HashOptions {
2
+ /** The length of the salt in bytes. Default: 16 */
3
+ saltLength?: number;
4
+ /** The length of the derived key in bytes. Default: 64 */
5
+ keyLength?: number;
6
+ /** CPU/memory cost parameter (N). Must be a power of 2 greater than 1. Default: 16384 */
7
+ cost?: number;
8
+ /** Block size parameter (r). Default: 8 */
9
+ blockSize?: number;
10
+ /** Parallelization parameter (p). Default: 1 */
11
+ parallelization?: number;
12
+ }
13
+ /**
14
+ * Hash a password using scrypt.
15
+ * Returns a string formatted as: `scrypt:N:r:p:keylen:salt:hash`
16
+ * This ensures the options are securely stored alongside the hash for future verification.
17
+ */
18
+ export declare function hashPassword(password: string, options?: HashOptions): Promise<string>;
19
+ /**
20
+ * Verify a password against a stored scrypt hash.
21
+ * @param password The plaintext password to verify.
22
+ * @param storedHash The stored hash string generated by `hashPassword`.
23
+ */
24
+ export declare function verifyPassword(password: string, storedHash: string): Promise<boolean>;
25
+ //# sourceMappingURL=password.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"password.d.ts","sourceRoot":"","sources":["../../src/auth/password.ts"],"names":[],"mappings":"AAuBA,MAAM,WAAW,WAAW;IAC1B,mDAAmD;IACnD,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,0DAA0D;IAC1D,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,yFAAyF;IACzF,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,2CAA2C;IAC3C,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,gDAAgD;IAChD,eAAe,CAAC,EAAE,MAAM,CAAA;CACzB;AAUD;;;;GAIG;AACH,wBAAsB,YAAY,CAChC,QAAQ,EAAE,MAAM,EAChB,OAAO,CAAC,EAAE,WAAW,GACpB,OAAO,CAAC,MAAM,CAAC,CAajB;AAED;;;;GAIG;AACH,wBAAsB,cAAc,CAClC,QAAQ,EAAE,MAAM,EAChB,UAAU,EAAE,MAAM,GACjB,OAAO,CAAC,OAAO,CAAC,CAwClB"}
@@ -0,0 +1,93 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.hashPassword = hashPassword;
4
+ exports.verifyPassword = verifyPassword;
5
+ const node_crypto_1 = require("node:crypto");
6
+ const scryptAsync = (password, salt, keylen, options) => {
7
+ return new Promise((resolve, reject) => {
8
+ if (options) {
9
+ (0, node_crypto_1.scrypt)(password, salt, keylen, options, (err, derivedKey) => {
10
+ if (err)
11
+ reject(err);
12
+ else
13
+ resolve(derivedKey);
14
+ });
15
+ }
16
+ else {
17
+ (0, node_crypto_1.scrypt)(password, salt, keylen, (err, derivedKey) => {
18
+ if (err)
19
+ reject(err);
20
+ else
21
+ resolve(derivedKey);
22
+ });
23
+ }
24
+ });
25
+ };
26
+ const DEFAULT_OPTIONS = {
27
+ saltLength: 16,
28
+ keyLength: 64,
29
+ cost: 16384,
30
+ blockSize: 8,
31
+ parallelization: 1,
32
+ };
33
+ /**
34
+ * Hash a password using scrypt.
35
+ * Returns a string formatted as: `scrypt:N:r:p:keylen:salt:hash`
36
+ * This ensures the options are securely stored alongside the hash for future verification.
37
+ */
38
+ async function hashPassword(password, options) {
39
+ const opts = { ...DEFAULT_OPTIONS, ...options };
40
+ const salt = (0, node_crypto_1.randomBytes)(opts.saltLength).toString('hex');
41
+ const derivedKey = (await scryptAsync(password, salt, opts.keyLength, {
42
+ N: opts.cost,
43
+ r: opts.blockSize,
44
+ p: opts.parallelization,
45
+ }));
46
+ // Store the parameters used to create the hash so we can verify it later
47
+ // Format: scrypt:cost:blockSize:parallelization:keyLength:salt:hash
48
+ return `scrypt:${opts.cost}:${opts.blockSize}:${opts.parallelization}:${opts.keyLength}:${salt}:${derivedKey.toString('hex')}`;
49
+ }
50
+ /**
51
+ * Verify a password against a stored scrypt hash.
52
+ * @param password The plaintext password to verify.
53
+ * @param storedHash The stored hash string generated by `hashPassword`.
54
+ */
55
+ async function verifyPassword(password, storedHash) {
56
+ if (!password || !storedHash || typeof storedHash !== 'string') {
57
+ return false;
58
+ }
59
+ // Backwards compatibility with the old simple format `salt:hash`
60
+ const parts = storedHash.split(':');
61
+ if (parts.length === 2) {
62
+ const [salt, key] = parts;
63
+ if (!salt || !key)
64
+ return false;
65
+ const keyBuffer = Buffer.from(key, 'hex');
66
+ const derivedKey = (await scryptAsync(password, salt, 64));
67
+ if (keyBuffer.length !== derivedKey.length)
68
+ return false;
69
+ return (0, node_crypto_1.timingSafeEqual)(keyBuffer, derivedKey);
70
+ }
71
+ // New format: scrypt:N:r:p:keylen:salt:hash
72
+ if (parts.length === 7 && parts[0] === 'scrypt') {
73
+ const cost = parseInt(parts[1], 10);
74
+ const blockSize = parseInt(parts[2], 10);
75
+ const parallelization = parseInt(parts[3], 10);
76
+ const keyLength = parseInt(parts[4], 10);
77
+ const salt = parts[5];
78
+ const key = parts[6];
79
+ if (!salt || !key)
80
+ return false;
81
+ const keyBuffer = Buffer.from(key, 'hex');
82
+ const derivedKey = (await scryptAsync(password, salt, keyLength, {
83
+ N: cost,
84
+ r: blockSize,
85
+ p: parallelization,
86
+ }));
87
+ if (keyBuffer.length !== derivedKey.length)
88
+ return false;
89
+ return (0, node_crypto_1.timingSafeEqual)(keyBuffer, derivedKey);
90
+ }
91
+ return false;
92
+ }
93
+ //# sourceMappingURL=password.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"password.js","sourceRoot":"","sources":["../../src/auth/password.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,10 @@
1
+ import type { Request, Response, NextFunction } from '../types';
2
+ /**
3
+ * Middleware that ensures the authenticated user has one of the required roles.
4
+ * Expects `req.user` to be populated (e.g., by a previous session or JWT middleware),
5
+ * and expects `req.user.role` to be a string or array of strings.
6
+ *
7
+ * @param allowedRoles A single role string or an array of allowed roles.
8
+ */
9
+ export declare function requireRole(allowedRoles: string | string[]): (req: Request, res: Response, next: NextFunction) => void;
10
+ //# sourceMappingURL=rbac.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rbac.d.ts","sourceRoot":"","sources":["../../src/auth/rbac.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,YAAY,EAAE,MAAM,UAAU,CAAA;AAE/D;;;;;;GAMG;AACH,wBAAgB,WAAW,CAAC,YAAY,EAAE,MAAM,GAAG,MAAM,EAAE,IAGjD,KAAK,OAAO,EAAE,KAAK,QAAQ,EAAE,MAAM,YAAY,UA8BxD"}
@@ -0,0 +1,34 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.requireRole = requireRole;
4
+ const errors_1 = require("../utils/errors");
5
+ /**
6
+ * Middleware that ensures the authenticated user has one of the required roles.
7
+ * Expects `req.user` to be populated (e.g., by a previous session or JWT middleware),
8
+ * and expects `req.user.role` to be a string or array of strings.
9
+ *
10
+ * @param allowedRoles A single role string or an array of allowed roles.
11
+ */
12
+ function requireRole(allowedRoles) {
13
+ const roles = Array.isArray(allowedRoles) ? allowedRoles : [allowedRoles];
14
+ return (req, res, next) => {
15
+ // 1. Ensure user is authenticated
16
+ if (!req.user) {
17
+ return next(errors_1.HttpError.unauthorized('Authentication required to access this resource'));
18
+ }
19
+ // 2. Ensure user has a role property
20
+ if (!req.user.role) {
21
+ return next(errors_1.HttpError.forbidden('Access denied: No role assigned'));
22
+ }
23
+ const userRoles = Array.isArray(req.user.role)
24
+ ? req.user.role
25
+ : [req.user.role];
26
+ // 3. Check for intersection between user roles and allowed roles
27
+ const hasRole = userRoles.some((role) => roles.includes(role));
28
+ if (!hasRole) {
29
+ return next(errors_1.HttpError.forbidden('Access denied: Insufficient permissions'));
30
+ }
31
+ next();
32
+ };
33
+ }
34
+ //# sourceMappingURL=rbac.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rbac.js","sourceRoot":"","sources":["../../src/auth/rbac.ts"],"names":[],"mappings":";;AAUA,kCAiCC;AA3CD,4CAA2C;AAG3C;;;;;;GAMG;AACH,SAAgB,WAAW,CAAC,YAA+B;IACzD,MAAM,KAAK,GAAG,KAAK,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,CAAA;IAEzE,OAAO,CAAC,GAAY,EAAE,GAAa,EAAE,IAAkB,EAAE,EAAE;QACzD,kCAAkC;QAClC,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC;YACd,OAAO,IAAI,CACT,kBAAS,CAAC,YAAY,CACpB,iDAAiD,CAClD,CACF,CAAA;QACH,CAAC;QAED,qCAAqC;QACrC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;YACnB,OAAO,IAAI,CAAC,kBAAS,CAAC,SAAS,CAAC,iCAAiC,CAAC,CAAC,CAAA;QACrE,CAAC;QAED,MAAM,SAAS,GAAG,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC;YAC5C,CAAC,CAAE,GAAG,CAAC,IAAI,CAAC,IAAiB;YAC7B,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,IAAc,CAAC,CAAA;QAE7B,iEAAiE;QACjE,MAAM,OAAO,GAAG,SAAS,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAA;QAE9D,IAAI,CAAC,OAAO,EAAE,CAAC;YACb,OAAO,IAAI,CACT,kBAAS,CAAC,SAAS,CAAC,yCAAyC,CAAC,CAC/D,CAAA;QACH,CAAC;QAED,IAAI,EAAE,CAAA;IACR,CAAC,CAAA;AACH,CAAC"}
@@ -0,0 +1,23 @@
1
+ import type { Request, Response, NextFunction } from '../types';
2
+ export type SessionData = Record<string, unknown>;
3
+ export interface SessionStore {
4
+ get(sessionId: string): Promise<SessionData | null> | SessionData | null;
5
+ set(sessionId: string, data: SessionData, ttl?: number): Promise<void> | void;
6
+ destroy(sessionId: string): Promise<void> | void;
7
+ }
8
+ export declare class MemorySessionStore implements SessionStore {
9
+ private sessions;
10
+ get(sessionId: string): SessionData | null;
11
+ set(sessionId: string, data: SessionData, ttl?: number): void;
12
+ destroy(sessionId: string): void;
13
+ }
14
+ export interface SessionOptions {
15
+ secret: string;
16
+ store?: SessionStore;
17
+ cookieName?: string;
18
+ ttl?: number;
19
+ secure?: boolean;
20
+ sameSite?: 'Strict' | 'Lax' | 'None';
21
+ }
22
+ export declare function session(options: SessionOptions): (req: Request, res: Response, next: NextFunction) => Promise<void>;
23
+ //# sourceMappingURL=session.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"session.d.ts","sourceRoot":"","sources":["../../src/auth/session.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,YAAY,EAAE,MAAM,UAAU,CAAA;AAE/D,MAAM,MAAM,WAAW,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;AAEjD,MAAM,WAAW,YAAY;IAC3B,GAAG,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,GAAG,IAAI,CAAC,GAAG,WAAW,GAAG,IAAI,CAAA;IACxE,GAAG,CAAC,SAAS,EAAE,MAAM,EAAE,IAAI,EAAE,WAAW,EAAE,GAAG,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAA;IAC7E,OAAO,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAA;CACjD;AAED,qBAAa,kBAAmB,YAAW,YAAY;IACrD,OAAO,CAAC,QAAQ,CAA8D;IAE9E,GAAG,CAAC,SAAS,EAAE,MAAM,GAAG,WAAW,GAAG,IAAI;IAU1C,GAAG,CAAC,SAAS,EAAE,MAAM,EAAE,IAAI,EAAE,WAAW,EAAE,GAAG,GAAE,MAAqB,GAAG,IAAI;IAO3E,OAAO,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI;CAGjC;AAED,MAAM,WAAW,cAAc;IAC7B,MAAM,EAAE,MAAM,CAAA;IACd,KAAK,CAAC,EAAE,YAAY,CAAA;IACpB,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,GAAG,CAAC,EAAE,MAAM,CAAA;IACZ,MAAM,CAAC,EAAE,OAAO,CAAA;IAChB,QAAQ,CAAC,EAAE,QAAQ,GAAG,KAAK,GAAG,MAAM,CAAA;CACrC;AAuBD,wBAAgB,OAAO,CAAC,OAAO,EAAE,cAAc,IAW/B,KAAK,OAAO,EAAE,KAAK,QAAQ,EAAE,MAAM,YAAY,mBAmD9D"}
@@ -0,0 +1,105 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.MemorySessionStore = void 0;
4
+ exports.session = session;
5
+ const node_crypto_1 = require("node:crypto");
6
+ class MemorySessionStore {
7
+ constructor() {
8
+ this.sessions = new Map();
9
+ }
10
+ get(sessionId) {
11
+ const session = this.sessions.get(sessionId);
12
+ if (!session)
13
+ return null;
14
+ if (session.expiresAt < Date.now()) {
15
+ this.sessions.delete(sessionId);
16
+ return null;
17
+ }
18
+ return session.data;
19
+ }
20
+ set(sessionId, data, ttl = 86400 * 1000) {
21
+ this.sessions.set(sessionId, {
22
+ data,
23
+ expiresAt: Date.now() + ttl,
24
+ });
25
+ }
26
+ destroy(sessionId) {
27
+ this.sessions.delete(sessionId);
28
+ }
29
+ }
30
+ exports.MemorySessionStore = MemorySessionStore;
31
+ function signCookie(val, secret) {
32
+ const signature = (0, node_crypto_1.createHmac)('sha256', secret).update(val).digest('base64url');
33
+ return `${val}.${signature}`;
34
+ }
35
+ function unsignCookie(val, secret) {
36
+ const parts = val.split('.');
37
+ if (parts.length !== 2)
38
+ return false;
39
+ const [str, signature] = parts;
40
+ const expectedSignature = (0, node_crypto_1.createHmac)('sha256', secret)
41
+ .update(str)
42
+ .digest('base64url');
43
+ const sigBuf = Buffer.from(signature);
44
+ const expectedBuf = Buffer.from(expectedSignature);
45
+ if (sigBuf.length !== expectedBuf.length)
46
+ return false;
47
+ if (!(0, node_crypto_1.timingSafeEqual)(sigBuf, expectedBuf))
48
+ return false;
49
+ return str;
50
+ }
51
+ function session(options) {
52
+ if (!options.secret || options.secret.length < 32) {
53
+ throw new Error('session options.secret must be at least 32 characters long');
54
+ }
55
+ const store = options.store || new MemorySessionStore();
56
+ const cookieName = options.cookieName || 'exis_sid';
57
+ const ttl = options.ttl || 86400 * 1000; // 1 day
58
+ return async (req, res, next) => {
59
+ let sessionId;
60
+ // 1. Try to get session ID from cookie
61
+ const cookieVal = req.cookies?.[cookieName];
62
+ if (cookieVal) {
63
+ const unsigned = unsignCookie(cookieVal, options.secret);
64
+ if (unsigned) {
65
+ sessionId = unsigned;
66
+ }
67
+ }
68
+ // 2. Load session data or create new
69
+ let sessionData = {};
70
+ if (sessionId) {
71
+ const data = await store.get(sessionId);
72
+ if (data) {
73
+ sessionData = data;
74
+ }
75
+ else {
76
+ sessionId = undefined; // Invalid or expired
77
+ }
78
+ }
79
+ if (!sessionId) {
80
+ sessionId = (0, node_crypto_1.randomBytes)(24).toString('base64url');
81
+ // Only set cookie if we created a new session ID
82
+ res.cookie(cookieName, signCookie(sessionId, options.secret), {
83
+ maxAge: ttl / 1000, // cookie maxAge is typically in seconds in Exis, wait let me check (usually seconds or ms depending on framework, Exis parses it to ms in Date if not Careful, let's assume seconds based on typical node frameworks, or ms? Let's pass ms or let users deal with it. We'll use maxAge: ttl)
84
+ // Let's use expires for safety
85
+ expires: new Date(Date.now() + ttl),
86
+ httpOnly: true,
87
+ secure: options.secure ?? process.env.NODE_ENV === 'production',
88
+ sameSite: options.sameSite ?? 'Lax',
89
+ path: '/',
90
+ });
91
+ }
92
+ // 3. Attach session to request
93
+ req.session = sessionData;
94
+ // 4. Hook into res.raw.end to save the session automatically
95
+ const originalEnd = res.raw.end.bind(res.raw);
96
+ res.raw.end = function (...args) {
97
+ store.set(sessionId, sessionData, ttl);
98
+ // eslint-disable-next-line @typescript-eslint/ban-ts-comment
99
+ // @ts-ignore
100
+ return originalEnd(...args);
101
+ };
102
+ next();
103
+ };
104
+ }
105
+ //# sourceMappingURL=session.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"session.js","sourceRoot":"","sources":["../../src/auth/session.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export declare function revalidateTag(tag: string): Promise<void>;
2
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/cache/index.ts"],"names":[],"mappings":"AAEA,wBAAsB,aAAa,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAG9D"}
@@ -0,0 +1,9 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.revalidateTag = revalidateTag;
4
+ const store_1 = require("./store");
5
+ async function revalidateTag(tag) {
6
+ const store = (0, store_1.getCacheStore)();
7
+ await store.revalidateTag(tag);
8
+ }
9
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/cache/index.ts"],"names":[],"mappings":";;AAEA,sCAGC;AALD,mCAAuC;AAEhC,KAAK,UAAU,aAAa,CAAC,GAAW;IAC7C,MAAM,KAAK,GAAG,IAAA,qBAAa,GAAE,CAAA;IAC7B,MAAM,KAAK,CAAC,aAAa,CAAC,GAAG,CAAC,CAAA;AAChC,CAAC"}
@@ -0,0 +1,48 @@
1
+ export interface CacheItem {
2
+ data: any;
3
+ tags: string[];
4
+ createdAt: number;
5
+ }
6
+ export interface CacheStore {
7
+ get(key: string): Promise<CacheItem | null>;
8
+ set(key: string, data: any, tags: string[], ttlMs?: number): Promise<void>;
9
+ revalidateTag(tag: string): Promise<void>;
10
+ getTags(): Promise<Record<string, number>>;
11
+ }
12
+ export declare class FileSystemCacheStore implements CacheStore {
13
+ private cacheDir;
14
+ private tagsPath;
15
+ constructor(cwd: string);
16
+ private ensureDir;
17
+ private hashKey;
18
+ getTags(): Promise<Record<string, number>>;
19
+ get(key: string): Promise<CacheItem | null>;
20
+ set(key: string, data: any, tags: string[], _ttlMs?: number): Promise<void>;
21
+ revalidateTag(tag: string): Promise<void>;
22
+ }
23
+ export declare class MemoryCacheStore implements CacheStore {
24
+ private items;
25
+ private tags;
26
+ get(key: string): Promise<CacheItem | null>;
27
+ set(key: string, data: any, tags: string[], _ttlMs?: number): Promise<void>;
28
+ revalidateTag(tag: string): Promise<void>;
29
+ getTags(): Promise<Record<string, number>>;
30
+ }
31
+ export interface MinimalRedisClient {
32
+ get(key: string): Promise<string | null>;
33
+ set(key: string, value: string, mode: string, duration: number): Promise<unknown>;
34
+ del(key: string): Promise<number>;
35
+ flushdb(): Promise<unknown>;
36
+ }
37
+ export declare class RedisCacheStore implements CacheStore {
38
+ private client;
39
+ private prefix;
40
+ constructor(client: MinimalRedisClient, prefix?: string);
41
+ getTags(): Promise<Record<string, number>>;
42
+ get(key: string): Promise<CacheItem | null>;
43
+ set(key: string, data: any, tags: string[], ttlMs?: number): Promise<void>;
44
+ revalidateTag(tag: string): Promise<void>;
45
+ }
46
+ export declare function getCacheStore(): CacheStore;
47
+ export declare function setCacheStore(store: CacheStore): void;
48
+ //# sourceMappingURL=store.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"store.d.ts","sourceRoot":"","sources":["../../src/cache/store.ts"],"names":[],"mappings":"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"}