exisjs 0.6.1 → 0.7.1

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 (564) hide show
  1. package/README.md +9 -3
  2. package/dist/cli/commands/build.d.ts.map +1 -1
  3. package/dist/cli/commands/build.js +2 -8
  4. package/dist/cli/commands/build.js.map +1 -1
  5. package/dist/cli/commands/dev.d.ts.map +1 -1
  6. package/dist/cli/commands/dev.js +33 -44
  7. package/dist/cli/commands/dev.js.map +1 -1
  8. package/dist/cli/commands/exports.d.ts.map +1 -1
  9. package/dist/cli/commands/exports.js +5 -32
  10. package/dist/cli/commands/exports.js.map +1 -1
  11. package/dist/cli/commands/generate.d.ts +2 -13
  12. package/dist/cli/commands/generate.d.ts.map +1 -1
  13. package/dist/cli/commands/generate.js +27 -60
  14. package/dist/cli/commands/generate.js.map +1 -1
  15. package/dist/cli/commands/init.d.ts.map +1 -1
  16. package/dist/cli/commands/init.js +4 -4
  17. package/dist/cli/commands/init.js.map +1 -1
  18. package/dist/cli/commands/start.d.ts.map +1 -1
  19. package/dist/cli/commands/start.js +2 -6
  20. package/dist/cli/commands/start.js.map +1 -1
  21. package/dist/cli/index.js +11 -23
  22. package/dist/cli/index.js.map +1 -1
  23. package/dist/cli/routes.d.ts.map +1 -1
  24. package/dist/cli/routes.js +20 -8
  25. package/dist/cli/routes.js.map +1 -1
  26. package/dist/config/config.d.ts +2 -1
  27. package/dist/config/config.d.ts.map +1 -1
  28. package/dist/config/config.js +7 -5
  29. package/dist/config/config.js.map +1 -1
  30. package/dist/config/env.d.ts.map +1 -1
  31. package/dist/config/env.js +3 -2
  32. package/dist/config/env.js.map +1 -1
  33. package/dist/config/types.d.ts +7 -2
  34. package/dist/config/types.d.ts.map +1 -1
  35. package/dist/decorators/constants.d.ts +9 -2
  36. package/dist/decorators/constants.d.ts.map +1 -1
  37. package/dist/decorators/constants.js +3 -2
  38. package/dist/decorators/constants.js.map +1 -1
  39. package/dist/decorators/core/metadata.d.ts +31 -0
  40. package/dist/decorators/core/metadata.d.ts.map +1 -1
  41. package/dist/decorators/core/metadata.js +110 -1
  42. package/dist/decorators/core/metadata.js.map +1 -1
  43. package/dist/decorators/core.d.ts +19 -4
  44. package/dist/decorators/core.d.ts.map +1 -1
  45. package/dist/decorators/core.js +29 -4
  46. package/dist/decorators/core.js.map +1 -1
  47. package/dist/decorators/middleware.d.ts +17 -17
  48. package/dist/decorators/middleware.d.ts.map +1 -1
  49. package/dist/decorators/middleware.js +111 -208
  50. package/dist/decorators/middleware.js.map +1 -1
  51. package/dist/decorators/params.d.ts +54 -12
  52. package/dist/decorators/params.d.ts.map +1 -1
  53. package/dist/decorators/params.js +40 -20
  54. package/dist/decorators/params.js.map +1 -1
  55. package/dist/decorators/routing.d.ts +0 -2
  56. package/dist/decorators/routing.d.ts.map +1 -1
  57. package/dist/decorators/routing.js +3 -4
  58. package/dist/decorators/routing.js.map +1 -1
  59. package/dist/di/container.d.ts +5 -1
  60. package/dist/di/container.d.ts.map +1 -1
  61. package/dist/di/container.js +56 -8
  62. package/dist/di/container.js.map +1 -1
  63. package/dist/di/decorators.d.ts +30 -0
  64. package/dist/di/decorators.d.ts.map +1 -0
  65. package/dist/di/decorators.js +59 -0
  66. package/dist/di/decorators.js.map +1 -0
  67. package/dist/di/index.d.ts +1 -0
  68. package/dist/di/index.d.ts.map +1 -1
  69. package/dist/di/index.js +4 -1
  70. package/dist/di/index.js.map +1 -1
  71. package/dist/docs/ARCHITECTURE.md +46 -285
  72. package/dist/docs/BENCHMARKS.md +5 -5
  73. package/dist/docs/README.md +8 -11
  74. package/dist/docs/content/boundaries.mdx +151 -0
  75. package/dist/docs/content/cli/commands.mdx +66 -104
  76. package/dist/docs/content/cli/overview.mdx +37 -47
  77. package/dist/docs/content/cli/usage.mdx +29 -15
  78. package/dist/docs/content/decorators.mdx +142 -81
  79. package/dist/docs/content/installation.mdx +20 -1
  80. package/dist/docs/content/middleware.mdx +65 -291
  81. package/dist/docs/content/modules.mdx +22 -1
  82. package/dist/docs/content/providers.mdx +33 -1
  83. package/dist/docs/content/security.mdx +44 -246
  84. package/dist/docs/content/structure.mdx +227 -100
  85. package/dist/docs/content/validation.mdx +0 -17
  86. package/dist/docs/reference/decorators.mdx +34 -216
  87. package/dist/docs/reference/di.mdx +35 -11
  88. package/dist/docs/reference/logger.mdx +100 -0
  89. package/dist/docs/reference/middleware.mdx +41 -217
  90. package/dist/docs/reference/router.mdx +9 -9
  91. package/dist/docs/reference/validator.mdx +2 -5
  92. package/dist/error/errors.d.ts.map +1 -1
  93. package/dist/error/errors.js +19 -5
  94. package/dist/error/errors.js.map +1 -1
  95. package/dist/index.d.ts +0 -1
  96. package/dist/index.d.ts.map +1 -1
  97. package/dist/index.js +1 -4
  98. package/dist/index.js.map +1 -1
  99. package/dist/lib/start-server.js +10 -0
  100. package/dist/lib/start-server.js.map +1 -1
  101. package/dist/logger/index.d.ts +81 -0
  102. package/dist/logger/index.d.ts.map +1 -0
  103. package/dist/logger/index.js +142 -0
  104. package/dist/logger/index.js.map +1 -0
  105. package/dist/middleware/dedupe.d.ts +1 -1
  106. package/dist/middleware/dedupe.js +1 -1
  107. package/dist/middleware/middleware.d.ts +3 -5
  108. package/dist/middleware/middleware.d.ts.map +1 -1
  109. package/dist/middleware/middleware.js +2 -6
  110. package/dist/middleware/middleware.js.map +1 -1
  111. package/dist/middleware/rate-limit.d.ts +0 -2
  112. package/dist/middleware/rate-limit.d.ts.map +1 -1
  113. package/dist/middleware/rate-limit.js +2 -14
  114. package/dist/middleware/rate-limit.js.map +1 -1
  115. package/dist/module/index.d.ts +2 -0
  116. package/dist/module/index.d.ts.map +1 -1
  117. package/dist/module/index.js +3 -1
  118. package/dist/module/index.js.map +1 -1
  119. package/dist/plugin/manager.d.ts +1 -1
  120. package/dist/plugin/manager.d.ts.map +1 -1
  121. package/dist/plugin/manager.js +47 -0
  122. package/dist/plugin/manager.js.map +1 -1
  123. package/dist/router/{gateway.d.ts → boundary.d.ts} +21 -13
  124. package/dist/router/boundary.d.ts.map +1 -0
  125. package/dist/router/boundary.js +11 -0
  126. package/dist/router/boundary.js.map +1 -0
  127. package/dist/router/controller-registrar.d.ts.map +1 -1
  128. package/dist/router/controller-registrar.js +33 -6
  129. package/dist/router/controller-registrar.js.map +1 -1
  130. package/dist/router/index.d.ts +3 -6
  131. package/dist/router/index.d.ts.map +1 -1
  132. package/dist/router/index.js +3 -7
  133. package/dist/router/index.js.map +1 -1
  134. package/dist/router/route-builder.d.ts +0 -28
  135. package/dist/router/route-builder.d.ts.map +1 -1
  136. package/dist/router/route-builder.js +2 -5
  137. package/dist/router/route-builder.js.map +1 -1
  138. package/dist/router/route-scanner.d.ts +1 -2
  139. package/dist/router/route-scanner.d.ts.map +1 -1
  140. package/dist/router/route-scanner.js +225 -203
  141. package/dist/router/route-scanner.js.map +1 -1
  142. package/dist/router/router.d.ts +4 -6
  143. package/dist/router/router.d.ts.map +1 -1
  144. package/dist/router/router.js +36 -72
  145. package/dist/router/router.js.map +1 -1
  146. package/dist/router/types.d.ts +2 -6
  147. package/dist/router/types.d.ts.map +1 -1
  148. package/dist/server/{bun-adapter.d.ts → adapters/bun-adapter.d.ts} +1 -1
  149. package/dist/server/adapters/bun-adapter.d.ts.map +1 -0
  150. package/dist/server/{bun-adapter.js → adapters/bun-adapter.js} +2 -24
  151. package/dist/server/adapters/bun-adapter.js.map +1 -0
  152. package/dist/server/{uws-adapter.d.ts → adapters/uws-adapter.d.ts} +1 -1
  153. package/dist/server/adapters/uws-adapter.d.ts.map +1 -0
  154. package/dist/server/{uws-adapter.js → adapters/uws-adapter.js} +1 -28
  155. package/dist/server/adapters/uws-adapter.js.map +1 -0
  156. package/dist/server/app.d.ts +10 -31
  157. package/dist/server/app.d.ts.map +1 -1
  158. package/dist/server/app.js +20 -135
  159. package/dist/server/app.js.map +1 -1
  160. package/dist/server/bootstrapper.d.ts +4 -15
  161. package/dist/server/bootstrapper.d.ts.map +1 -1
  162. package/dist/server/bootstrapper.js +30 -229
  163. package/dist/server/bootstrapper.js.map +1 -1
  164. package/dist/server/define.d.ts +2 -2
  165. package/dist/server/define.d.ts.map +1 -1
  166. package/dist/server/define.js +3 -3
  167. package/dist/server/define.js.map +1 -1
  168. package/dist/server/engines/bun-engine.d.ts +16 -0
  169. package/dist/server/engines/bun-engine.d.ts.map +1 -0
  170. package/dist/server/engines/bun-engine.js +41 -0
  171. package/dist/server/engines/bun-engine.js.map +1 -0
  172. package/dist/server/engines/engine.d.ts +16 -0
  173. package/dist/server/engines/engine.d.ts.map +1 -0
  174. package/dist/{queue/types.js → server/engines/engine.js} +1 -1
  175. package/dist/server/engines/engine.js.map +1 -0
  176. package/dist/server/engines/node-engine.d.ts +22 -0
  177. package/dist/server/engines/node-engine.d.ts.map +1 -0
  178. package/dist/server/engines/node-engine.js +130 -0
  179. package/dist/server/engines/node-engine.js.map +1 -0
  180. package/dist/server/engines/uws-engine.d.ts +16 -0
  181. package/dist/server/engines/uws-engine.d.ts.map +1 -0
  182. package/dist/server/engines/uws-engine.js +48 -0
  183. package/dist/server/engines/uws-engine.js.map +1 -0
  184. package/dist/server/request-handler.d.ts +0 -1
  185. package/dist/server/request-handler.d.ts.map +1 -1
  186. package/dist/server/request-handler.js +74 -48
  187. package/dist/server/request-handler.js.map +1 -1
  188. package/dist/server/request.d.ts +0 -8
  189. package/dist/server/request.d.ts.map +1 -1
  190. package/dist/server/request.js +0 -16
  191. package/dist/server/request.js.map +1 -1
  192. package/dist/server/response.d.ts.map +1 -1
  193. package/dist/server/response.js +2 -1
  194. package/dist/server/response.js.map +1 -1
  195. package/dist/utils/logger.d.ts.map +1 -1
  196. package/dist/utils/logger.js +0 -1
  197. package/dist/utils/logger.js.map +1 -1
  198. package/dist/utils/time.d.ts +6 -0
  199. package/dist/utils/time.d.ts.map +1 -0
  200. package/dist/utils/time.js +15 -0
  201. package/dist/utils/time.js.map +1 -0
  202. package/dist/validator/index.d.ts +1 -7
  203. package/dist/validator/index.d.ts.map +1 -1
  204. package/dist/validator/index.js +1 -5
  205. package/dist/validator/index.js.map +1 -1
  206. package/dist/validator/tex-types.d.ts +15 -2
  207. package/dist/validator/tex-types.d.ts.map +1 -1
  208. package/dist/validator/tex-types.js +8 -0
  209. package/dist/validator/tex-types.js.map +1 -1
  210. package/dist/validator/tex.d.ts.map +1 -1
  211. package/dist/validator/tex.js +21 -2
  212. package/dist/validator/tex.js.map +1 -1
  213. package/package.json +9 -151
  214. package/dist/adapters/aws-lambda.d.ts +0 -21
  215. package/dist/adapters/aws-lambda.d.ts.map +0 -1
  216. package/dist/adapters/aws-lambda.js +0 -125
  217. package/dist/adapters/aws-lambda.js.map +0 -1
  218. package/dist/adapters/bun.d.ts +0 -9
  219. package/dist/adapters/bun.d.ts.map +0 -1
  220. package/dist/adapters/bun.js +0 -23
  221. package/dist/adapters/bun.js.map +0 -1
  222. package/dist/adapters/cloudflare.d.ts +0 -10
  223. package/dist/adapters/cloudflare.d.ts.map +0 -1
  224. package/dist/adapters/cloudflare.js +0 -22
  225. package/dist/adapters/cloudflare.js.map +0 -1
  226. package/dist/adapters/deno.d.ts +0 -7
  227. package/dist/adapters/deno.d.ts.map +0 -1
  228. package/dist/adapters/deno.js +0 -21
  229. package/dist/adapters/deno.js.map +0 -1
  230. package/dist/adapters/fastly.d.ts +0 -6
  231. package/dist/adapters/fastly.d.ts.map +0 -1
  232. package/dist/adapters/fastly.js +0 -20
  233. package/dist/adapters/fastly.js.map +0 -1
  234. package/dist/adapters/fetch.d.ts +0 -30
  235. package/dist/adapters/fetch.d.ts.map +0 -1
  236. package/dist/adapters/fetch.js +0 -119
  237. package/dist/adapters/fetch.js.map +0 -1
  238. package/dist/adapters/index.d.ts +0 -9
  239. package/dist/adapters/index.d.ts.map +0 -1
  240. package/dist/adapters/index.js +0 -28
  241. package/dist/adapters/index.js.map +0 -1
  242. package/dist/adapters/netlify.d.ts +0 -8
  243. package/dist/adapters/netlify.d.ts.map +0 -1
  244. package/dist/adapters/netlify.js +0 -20
  245. package/dist/adapters/netlify.js.map +0 -1
  246. package/dist/adapters/vercel.d.ts +0 -17
  247. package/dist/adapters/vercel.d.ts.map +0 -1
  248. package/dist/adapters/vercel.js +0 -23
  249. package/dist/adapters/vercel.js.map +0 -1
  250. package/dist/auth/index.d.ts +0 -8
  251. package/dist/auth/index.d.ts.map +0 -1
  252. package/dist/auth/index.js +0 -49
  253. package/dist/auth/index.js.map +0 -1
  254. package/dist/auth/jwt.d.ts +0 -20
  255. package/dist/auth/jwt.d.ts.map +0 -1
  256. package/dist/auth/jwt.js +0 -59
  257. package/dist/auth/jwt.js.map +0 -1
  258. package/dist/auth/oauth/core.d.ts +0 -96
  259. package/dist/auth/oauth/core.d.ts.map +0 -1
  260. package/dist/auth/oauth/core.js +0 -203
  261. package/dist/auth/oauth/core.js.map +0 -1
  262. package/dist/auth/oauth/index.d.ts +0 -45
  263. package/dist/auth/oauth/index.d.ts.map +0 -1
  264. package/dist/auth/oauth/index.js +0 -64
  265. package/dist/auth/oauth/index.js.map +0 -1
  266. package/dist/auth/oauth/middleware.d.ts +0 -63
  267. package/dist/auth/oauth/middleware.d.ts.map +0 -1
  268. package/dist/auth/oauth/middleware.js +0 -164
  269. package/dist/auth/oauth/middleware.js.map +0 -1
  270. package/dist/auth/oauth/providers/custom.d.ts +0 -41
  271. package/dist/auth/oauth/providers/custom.d.ts.map +0 -1
  272. package/dist/auth/oauth/providers/custom.js +0 -204
  273. package/dist/auth/oauth/providers/custom.js.map +0 -1
  274. package/dist/auth/oauth/providers/discord.d.ts +0 -23
  275. package/dist/auth/oauth/providers/discord.d.ts.map +0 -1
  276. package/dist/auth/oauth/providers/discord.js +0 -130
  277. package/dist/auth/oauth/providers/discord.js.map +0 -1
  278. package/dist/auth/oauth/providers/facebook.d.ts +0 -28
  279. package/dist/auth/oauth/providers/facebook.d.ts.map +0 -1
  280. package/dist/auth/oauth/providers/facebook.js +0 -124
  281. package/dist/auth/oauth/providers/facebook.js.map +0 -1
  282. package/dist/auth/oauth/providers/github.d.ts +0 -25
  283. package/dist/auth/oauth/providers/github.d.ts.map +0 -1
  284. package/dist/auth/oauth/providers/github.js +0 -132
  285. package/dist/auth/oauth/providers/github.js.map +0 -1
  286. package/dist/auth/oauth/providers/google.d.ts +0 -23
  287. package/dist/auth/oauth/providers/google.d.ts.map +0 -1
  288. package/dist/auth/oauth/providers/google.js +0 -134
  289. package/dist/auth/oauth/providers/google.js.map +0 -1
  290. package/dist/auth/oauth/providers/microsoft.d.ts +0 -28
  291. package/dist/auth/oauth/providers/microsoft.d.ts.map +0 -1
  292. package/dist/auth/oauth/providers/microsoft.js +0 -136
  293. package/dist/auth/oauth/providers/microsoft.js.map +0 -1
  294. package/dist/auth/oauth/types.d.ts +0 -158
  295. package/dist/auth/oauth/types.d.ts.map +0 -1
  296. package/dist/auth/oauth/types.js +0 -4
  297. package/dist/auth/oauth/types.js.map +0 -1
  298. package/dist/auth/password.d.ts +0 -25
  299. package/dist/auth/password.d.ts.map +0 -1
  300. package/dist/auth/password.js +0 -93
  301. package/dist/auth/password.js.map +0 -1
  302. package/dist/auth/rbac.d.ts +0 -10
  303. package/dist/auth/rbac.d.ts.map +0 -1
  304. package/dist/auth/rbac.js +0 -34
  305. package/dist/auth/rbac.js.map +0 -1
  306. package/dist/auth/session.d.ts +0 -26
  307. package/dist/auth/session.d.ts.map +0 -1
  308. package/dist/auth/session.js +0 -134
  309. package/dist/auth/session.js.map +0 -1
  310. package/dist/cache/index.d.ts +0 -4
  311. package/dist/cache/index.d.ts.map +0 -1
  312. package/dist/cache/index.js +0 -25
  313. package/dist/cache/index.js.map +0 -1
  314. package/dist/cache/store.d.ts +0 -58
  315. package/dist/cache/store.d.ts.map +0 -1
  316. package/dist/cache/store.js +0 -298
  317. package/dist/cache/store.js.map +0 -1
  318. package/dist/cron/parser.d.ts +0 -2
  319. package/dist/cron/parser.d.ts.map +0 -1
  320. package/dist/cron/parser.js +0 -52
  321. package/dist/cron/parser.js.map +0 -1
  322. package/dist/cron/scheduler.d.ts +0 -23
  323. package/dist/cron/scheduler.d.ts.map +0 -1
  324. package/dist/cron/scheduler.js +0 -114
  325. package/dist/cron/scheduler.js.map +0 -1
  326. package/dist/database/adapters/mongodb.d.ts +0 -58
  327. package/dist/database/adapters/mongodb.d.ts.map +0 -1
  328. package/dist/database/adapters/mongodb.js +0 -264
  329. package/dist/database/adapters/mongodb.js.map +0 -1
  330. package/dist/database/adapters/mysql.d.ts +0 -27
  331. package/dist/database/adapters/mysql.d.ts.map +0 -1
  332. package/dist/database/adapters/mysql.js +0 -188
  333. package/dist/database/adapters/mysql.js.map +0 -1
  334. package/dist/database/adapters/postgres.d.ts +0 -28
  335. package/dist/database/adapters/postgres.d.ts.map +0 -1
  336. package/dist/database/adapters/postgres.js +0 -174
  337. package/dist/database/adapters/postgres.js.map +0 -1
  338. package/dist/database/adapters/sqlite.d.ts +0 -27
  339. package/dist/database/adapters/sqlite.d.ts.map +0 -1
  340. package/dist/database/adapters/sqlite.js +0 -149
  341. package/dist/database/adapters/sqlite.js.map +0 -1
  342. package/dist/database/index.d.ts +0 -42
  343. package/dist/database/index.d.ts.map +0 -1
  344. package/dist/database/index.js +0 -58
  345. package/dist/database/index.js.map +0 -1
  346. package/dist/database/manager.d.ts +0 -141
  347. package/dist/database/manager.d.ts.map +0 -1
  348. package/dist/database/manager.js +0 -337
  349. package/dist/database/manager.js.map +0 -1
  350. package/dist/database/migration.d.ts +0 -57
  351. package/dist/database/migration.d.ts.map +0 -1
  352. package/dist/database/migration.js +0 -329
  353. package/dist/database/migration.js.map +0 -1
  354. package/dist/database/query-builder.d.ts +0 -95
  355. package/dist/database/query-builder.d.ts.map +0 -1
  356. package/dist/database/query-builder.js +0 -404
  357. package/dist/database/query-builder.js.map +0 -1
  358. package/dist/database/sql/index.d.ts +0 -18
  359. package/dist/database/sql/index.d.ts.map +0 -1
  360. package/dist/database/sql/index.js +0 -74
  361. package/dist/database/sql/index.js.map +0 -1
  362. package/dist/database/sql/schema.d.ts +0 -38
  363. package/dist/database/sql/schema.d.ts.map +0 -1
  364. package/dist/database/sql/schema.js +0 -80
  365. package/dist/database/sql/schema.js.map +0 -1
  366. package/dist/database/synchronizer.d.ts +0 -12
  367. package/dist/database/synchronizer.d.ts.map +0 -1
  368. package/dist/database/synchronizer.js +0 -82
  369. package/dist/database/synchronizer.js.map +0 -1
  370. package/dist/database/types.d.ts +0 -184
  371. package/dist/database/types.d.ts.map +0 -1
  372. package/dist/database/types.js +0 -4
  373. package/dist/database/types.js.map +0 -1
  374. package/dist/dataloader/dataloader.d.ts +0 -23
  375. package/dist/dataloader/dataloader.d.ts.map +0 -1
  376. package/dist/dataloader/dataloader.js +0 -98
  377. package/dist/dataloader/dataloader.js.map +0 -1
  378. package/dist/dataloader/index.d.ts +0 -3
  379. package/dist/dataloader/index.d.ts.map +0 -1
  380. package/dist/dataloader/index.js +0 -19
  381. package/dist/dataloader/index.js.map +0 -1
  382. package/dist/dataloader/registry.d.ts +0 -17
  383. package/dist/dataloader/registry.d.ts.map +0 -1
  384. package/dist/dataloader/registry.js +0 -47
  385. package/dist/dataloader/registry.js.map +0 -1
  386. package/dist/dev/dep-graph.d.ts +0 -2
  387. package/dist/dev/dep-graph.d.ts.map +0 -1
  388. package/dist/dev/dep-graph.js +0 -111
  389. package/dist/dev/dep-graph.js.map +0 -1
  390. package/dist/dev/hot-reload.d.ts +0 -30
  391. package/dist/dev/hot-reload.d.ts.map +0 -1
  392. package/dist/dev/hot-reload.js +0 -262
  393. package/dist/dev/hot-reload.js.map +0 -1
  394. package/dist/docs/content/adapters.mdx +0 -199
  395. package/dist/docs/content/cache.mdx +0 -239
  396. package/dist/docs/content/circuit-breaker.mdx +0 -130
  397. package/dist/docs/content/cron.mdx +0 -109
  398. package/dist/docs/content/database.mdx +0 -278
  399. package/dist/docs/content/gateways.mdx +0 -376
  400. package/dist/docs/content/oauth.mdx +0 -179
  401. package/dist/docs/content/queues.mdx +0 -177
  402. package/dist/docs/content/rpc.mdx +0 -146
  403. package/dist/docs/content/sse.mdx +0 -159
  404. package/dist/docs/content/websockets.mdx +0 -289
  405. package/dist/docs/integrations/README.md +0 -23
  406. package/dist/docs/integrations/jwt.mdx +0 -151
  407. package/dist/docs/integrations/mongo.mdx +0 -183
  408. package/dist/docs/integrations/observability.mdx +0 -125
  409. package/dist/docs/integrations/openai.mdx +0 -108
  410. package/dist/docs/integrations/postgres.mdx +0 -190
  411. package/dist/docs/integrations/posthog.mdx +0 -122
  412. package/dist/docs/integrations/redis.mdx +0 -141
  413. package/dist/docs/integrations/resend.mdx +0 -117
  414. package/dist/docs/integrations/s3.mdx +0 -122
  415. package/dist/docs/integrations/swagger.mdx +0 -113
  416. package/dist/docs/reference/adapters.mdx +0 -130
  417. package/dist/docs/reference/auth.mdx +0 -183
  418. package/dist/docs/reference/cache.mdx +0 -132
  419. package/dist/docs/reference/circuit-breaker.mdx +0 -71
  420. package/dist/docs/reference/queue.mdx +0 -155
  421. package/dist/docs/reference/storage.mdx +0 -116
  422. package/dist/docs/reference/swagger.mdx +0 -132
  423. package/dist/integrations/drizzle.d.ts +0 -10
  424. package/dist/integrations/drizzle.d.ts.map +0 -1
  425. package/dist/integrations/drizzle.js +0 -34
  426. package/dist/integrations/drizzle.js.map +0 -1
  427. package/dist/integrations/jwt.d.ts +0 -12
  428. package/dist/integrations/jwt.d.ts.map +0 -1
  429. package/dist/integrations/jwt.js +0 -29
  430. package/dist/integrations/jwt.js.map +0 -1
  431. package/dist/integrations/mongodb.d.ts +0 -13
  432. package/dist/integrations/mongodb.d.ts.map +0 -1
  433. package/dist/integrations/mongodb.js +0 -48
  434. package/dist/integrations/mongodb.js.map +0 -1
  435. package/dist/integrations/mongoose.d.ts +0 -13
  436. package/dist/integrations/mongoose.d.ts.map +0 -1
  437. package/dist/integrations/mongoose.js +0 -84
  438. package/dist/integrations/mongoose.js.map +0 -1
  439. package/dist/integrations/openai.d.ts +0 -12
  440. package/dist/integrations/openai.d.ts.map +0 -1
  441. package/dist/integrations/openai.js +0 -47
  442. package/dist/integrations/openai.js.map +0 -1
  443. package/dist/integrations/postgres.d.ts +0 -13
  444. package/dist/integrations/postgres.d.ts.map +0 -1
  445. package/dist/integrations/postgres.js +0 -55
  446. package/dist/integrations/postgres.js.map +0 -1
  447. package/dist/integrations/posthog.d.ts +0 -13
  448. package/dist/integrations/posthog.d.ts.map +0 -1
  449. package/dist/integrations/posthog.js +0 -49
  450. package/dist/integrations/posthog.js.map +0 -1
  451. package/dist/integrations/prisma.d.ts +0 -10
  452. package/dist/integrations/prisma.d.ts.map +0 -1
  453. package/dist/integrations/prisma.js +0 -39
  454. package/dist/integrations/prisma.js.map +0 -1
  455. package/dist/integrations/redis.d.ts +0 -12
  456. package/dist/integrations/redis.d.ts.map +0 -1
  457. package/dist/integrations/redis.js +0 -48
  458. package/dist/integrations/redis.js.map +0 -1
  459. package/dist/integrations/resend.d.ts +0 -12
  460. package/dist/integrations/resend.d.ts.map +0 -1
  461. package/dist/integrations/resend.js +0 -47
  462. package/dist/integrations/resend.js.map +0 -1
  463. package/dist/integrations/s3.d.ts +0 -15
  464. package/dist/integrations/s3.d.ts.map +0 -1
  465. package/dist/integrations/s3.js +0 -60
  466. package/dist/integrations/s3.js.map +0 -1
  467. package/dist/integrations/supabase.d.ts +0 -13
  468. package/dist/integrations/supabase.d.ts.map +0 -1
  469. package/dist/integrations/supabase.js +0 -51
  470. package/dist/integrations/supabase.js.map +0 -1
  471. package/dist/middleware/cache.d.ts +0 -21
  472. package/dist/middleware/cache.d.ts.map +0 -1
  473. package/dist/middleware/cache.js +0 -156
  474. package/dist/middleware/cache.js.map +0 -1
  475. package/dist/observability/health.d.ts +0 -23
  476. package/dist/observability/health.d.ts.map +0 -1
  477. package/dist/observability/health.js +0 -49
  478. package/dist/observability/health.js.map +0 -1
  479. package/dist/observability/index.d.ts +0 -4
  480. package/dist/observability/index.d.ts.map +0 -1
  481. package/dist/observability/index.js +0 -10
  482. package/dist/observability/index.js.map +0 -1
  483. package/dist/observability/metrics.d.ts +0 -6
  484. package/dist/observability/metrics.d.ts.map +0 -1
  485. package/dist/observability/metrics.js +0 -60
  486. package/dist/observability/metrics.js.map +0 -1
  487. package/dist/observability/otel.d.ts +0 -27
  488. package/dist/observability/otel.d.ts.map +0 -1
  489. package/dist/observability/otel.js +0 -45
  490. package/dist/observability/otel.js.map +0 -1
  491. package/dist/observability/prometheus.d.ts +0 -30
  492. package/dist/observability/prometheus.d.ts.map +0 -1
  493. package/dist/observability/prometheus.js +0 -31
  494. package/dist/observability/prometheus.js.map +0 -1
  495. package/dist/queue/client.d.ts +0 -13
  496. package/dist/queue/client.d.ts.map +0 -1
  497. package/dist/queue/client.js +0 -83
  498. package/dist/queue/client.js.map +0 -1
  499. package/dist/queue/drivers/MemoryDriver.d.ts +0 -21
  500. package/dist/queue/drivers/MemoryDriver.d.ts.map +0 -1
  501. package/dist/queue/drivers/MemoryDriver.js +0 -176
  502. package/dist/queue/drivers/MemoryDriver.js.map +0 -1
  503. package/dist/queue/drivers/RedisDriver.d.ts +0 -19
  504. package/dist/queue/drivers/RedisDriver.d.ts.map +0 -1
  505. package/dist/queue/drivers/RedisDriver.js +0 -130
  506. package/dist/queue/drivers/RedisDriver.js.map +0 -1
  507. package/dist/queue/index.d.ts +0 -18
  508. package/dist/queue/index.d.ts.map +0 -1
  509. package/dist/queue/index.js +0 -37
  510. package/dist/queue/index.js.map +0 -1
  511. package/dist/queue/manager.d.ts +0 -18
  512. package/dist/queue/manager.d.ts.map +0 -1
  513. package/dist/queue/manager.js +0 -59
  514. package/dist/queue/manager.js.map +0 -1
  515. package/dist/queue/types.d.ts +0 -55
  516. package/dist/queue/types.d.ts.map +0 -1
  517. package/dist/queue/types.js.map +0 -1
  518. package/dist/queue/worker.d.ts +0 -18
  519. package/dist/queue/worker.d.ts.map +0 -1
  520. package/dist/queue/worker.js +0 -176
  521. package/dist/queue/worker.js.map +0 -1
  522. package/dist/router/gateway.d.ts.map +0 -1
  523. package/dist/router/gateway.js +0 -11
  524. package/dist/router/gateway.js.map +0 -1
  525. package/dist/server/bun-adapter.d.ts.map +0 -1
  526. package/dist/server/bun-adapter.js.map +0 -1
  527. package/dist/server/sse.d.ts +0 -16
  528. package/dist/server/sse.d.ts.map +0 -1
  529. package/dist/server/sse.js +0 -51
  530. package/dist/server/sse.js.map +0 -1
  531. package/dist/server/uws-adapter.d.ts.map +0 -1
  532. package/dist/server/uws-adapter.js.map +0 -1
  533. package/dist/storage/index.d.ts +0 -15
  534. package/dist/storage/index.d.ts.map +0 -1
  535. package/dist/storage/index.js +0 -7
  536. package/dist/storage/index.js.map +0 -1
  537. package/dist/swagger/index.d.ts +0 -9
  538. package/dist/swagger/index.d.ts.map +0 -1
  539. package/dist/swagger/index.js +0 -165
  540. package/dist/swagger/index.js.map +0 -1
  541. package/dist/threads/pool.d.ts +0 -14
  542. package/dist/threads/pool.d.ts.map +0 -1
  543. package/dist/threads/pool.js +0 -93
  544. package/dist/threads/pool.js.map +0 -1
  545. package/dist/threads/worker-runner.d.ts +0 -2
  546. package/dist/threads/worker-runner.d.ts.map +0 -1
  547. package/dist/threads/worker-runner.js +0 -71
  548. package/dist/threads/worker-runner.js.map +0 -1
  549. package/dist/validator/validator.d.ts +0 -360
  550. package/dist/validator/validator.d.ts.map +0 -1
  551. package/dist/validator/validator.js +0 -931
  552. package/dist/validator/validator.js.map +0 -1
  553. package/dist/websocket/orchestrator.d.ts +0 -11
  554. package/dist/websocket/orchestrator.d.ts.map +0 -1
  555. package/dist/websocket/orchestrator.js +0 -238
  556. package/dist/websocket/orchestrator.js.map +0 -1
  557. package/dist/websocket/server.d.ts +0 -66
  558. package/dist/websocket/server.d.ts.map +0 -1
  559. package/dist/websocket/server.js +0 -158
  560. package/dist/websocket/server.js.map +0 -1
  561. package/dist/websocket/socket.d.ts +0 -119
  562. package/dist/websocket/socket.d.ts.map +0 -1
  563. package/dist/websocket/socket.js +0 -242
  564. package/dist/websocket/socket.js.map +0 -1
@@ -1,289 +0,0 @@
1
- ---
2
- nextUrl: "/docs/queues"
3
- nextTitle: "Job Queues"
4
- ---
5
-
6
- # WebSockets
7
-
8
- ExisJS provides a built-in WebSocket engine. It includes an integrated Pub/Sub system (rooms), automatic JSON serialization, Socket.io-style event emitters, and built-in presence tracking.
9
-
10
- You can handle WebSockets using either the **Functional API** or the **Class-Based (OOP) API**.
11
-
12
- ---
13
-
14
- ## 1. Functional API
15
-
16
- For smaller applications or functional paradigms, you can define WebSocket routes directly on a router using `route.ws()`.
17
-
18
- ```typescript filename="src/http/route.ts"
19
- import { controller, route } from 'exisjs/router'
20
-
21
- export default controller({
22
- chatSocket: route.ws('/ws', {
23
- handle({ socket }) {
24
- console.log(`New connection: ${socket.id}`)
25
-
26
- // Listen for incoming messages
27
- socket.on('message', (rawData) => {
28
- const data = JSON.parse(rawData.toString())
29
-
30
- if (data.action === 'join') {
31
- // Join a room (Pub/Sub)
32
- socket.join(data.room)
33
-
34
- // Emit a named event back to the socket
35
- socket.emit('chat', {
36
- type: 'system',
37
- message: `You joined #${data.room}`,
38
- })
39
- } else if (data.action === 'message') {
40
- // Publish a message to everyone in the room (excluding sender by default)
41
- socket.publish(data.room, {
42
- event: 'chat',
43
- data: { message: data.message },
44
- })
45
- }
46
- })
47
-
48
- socket.on('close', () => {
49
- console.log(`Disconnected: ${socket.id}`)
50
- socket.leaveAll()
51
- })
52
- },
53
- }),
54
- })
55
- ```
56
-
57
- ---
58
-
59
- ## 2. Class-Based (OOP) API
60
-
61
- For larger applications, ExisJS provides the `@Ws()` decorator to map WebSocket endpoints inside your Controllers.
62
-
63
- ```typescript filename="src/http/chat/route.ts"
64
- import { Controller, Ws, Socket } from 'exisjs/decorators'
65
- import { ExisWebSocket } from 'exisjs/router'
66
-
67
- @Controller()
68
- export default class ChatController {
69
- @Ws('/ws')
70
- handleSocket(@Socket() socket: ExisWebSocket) {
71
- // Enable auto-presence for this server
72
- socket.server.enablePresence()
73
-
74
- // Listen for custom JSON events
75
- socket.onEvent('join', (data) => {
76
- // Attach custom state to the socket
77
- socket.data.userId = data.userId
78
-
79
- // Unsubscribe from previous rooms
80
- socket.leaveAll()
81
- socket.join(data.room)
82
-
83
- // Fetch the roster of active users in the room
84
- const roster = socket.server.getRoomRoster(data.room)
85
- socket.emit('roster', { roster })
86
- })
87
-
88
- socket.onEvent('message', (data) => {
89
- // Socket.io style broadcasting!
90
- socket.to(data.room).emit('chat', {
91
- userId: socket.data.userId,
92
- message: data.message,
93
- })
94
- })
95
- }
96
- }
97
- ```
98
-
99
- ---
100
-
101
- ## The `ExisWebSocket` API
102
-
103
- ExisJS wraps the native WebSocket with an `ExisWebSocket` instance that provides Socket.io-like ergonomics without the heavy client-side dependencies.
104
-
105
- ### Emitting & Sending
106
-
107
- - **`socket.send(data)`**: Sends raw data. Objects are automatically stringified.
108
- - **`socket.emit(event, data)`**: Emits a named JSON event (`{ event: "name", data: ... }`).
109
- - **`socket.emitWithAck(event, data, timeoutMs?)`**: Emits an event and returns a Promise that resolves when the client sends back an acknowledgment with the matching `ackId`.
110
- - **`socket.volatile.emit(event, data)`**: Emits an event that will be safely dropped if the connection is experiencing backpressure (network saturation).
111
-
112
- #### Example: Emitting Events
113
-
114
- **Functional API:**
115
-
116
- ```typescript
117
- route.ws('/ws', {
118
- handle({ socket }) {
119
- // Send a standard named event
120
- socket.emit('ping', { timestamp: Date.now() })
121
-
122
- // Send a volatile event that drops if network is busy
123
- socket.volatile.emit('stock-tick', { price: 100 })
124
- },
125
- })
126
- ```
127
-
128
- **Class-Based (OOP) API:**
129
-
130
- ```typescript
131
- @Ws('/ws')
132
- handleSocket(@Socket() socket: ExisWebSocket) {
133
- // Await an acknowledgment from the client
134
- socket.onEvent('request-data', async () => {
135
- try {
136
- const response = await socket.emitWithAck('data-ready', { id: 1 }, 5000)
137
- console.log('Client acknowledged:', response)
138
- } catch (err) {
139
- console.error('Client failed to ack in 5s')
140
- }
141
- })
142
- }
143
- ```
144
-
145
- ### Rooms (Pub/Sub)
146
-
147
- ExisJS has a built-in Pub/Sub engine that allows sockets to subscribe to topics (rooms).
148
-
149
- - **`socket.join(room)`** / **`socket.subscribe(room)`**: Subscribes the socket to a room.
150
- - **`socket.leave(room)`** / **`socket.unsubscribe(room)`**: Unsubscribes from a room.
151
- - **`socket.leaveAll()`** / **`socket.unsubscribeAll()`**: Unsubscribes from all joined rooms.
152
- - **`socket.publish(room, data, excludeSelf?)`**: Publishes data to all sockets in a room. By default, it excludes the sender.
153
-
154
- #### Example: Managing Rooms
155
-
156
- **Functional API:**
157
-
158
- ```typescript
159
- route.ws('/chat', {
160
- handle({ socket }) {
161
- socket.onEvent('join-room', (data) => {
162
- // Leave old rooms before joining a new one
163
- socket.leaveAll()
164
- socket.join(data.roomId)
165
-
166
- socket.publish(data.roomId, {
167
- event: 'system',
168
- data: 'A new user joined',
169
- })
170
- })
171
- },
172
- })
173
- ```
174
-
175
- **Class-Based (OOP) API:**
176
-
177
- ```typescript
178
- @Ws('/chat')
179
- handleSocket(@Socket() socket: ExisWebSocket) {
180
- socket.onEvent('leave-room', (data) => {
181
- socket.leave(data.roomId)
182
- })
183
- }
184
- ```
185
-
186
- ### Broadcasting (Socket.io Style)
187
-
188
- If you prefer Socket.io's chainable broadcasting syntax, ExisJS fully supports it:
189
-
190
- - **`socket.to(room).emit(event, data)`**: Emits an event to everyone in the specified room _except_ the sender.
191
- - **`socket.broadcast.emit(event, data)`**: Emits to every connected socket on the server _except_ the sender.
192
- - **`socket.broadcast.to(room).emit(event, data)`**: Same as `socket.to()`.
193
-
194
- #### Example: Broadcasting
195
-
196
- **Functional API:**
197
-
198
- ```typescript
199
- route.ws('/game', {
200
- handle({ socket }) {
201
- socket.onEvent('player-move', (position) => {
202
- // Tell everyone ELSE in 'game-1' that this player moved
203
- socket.to('game-1').emit('player-moved', { id: socket.id, position })
204
- })
205
- },
206
- })
207
- ```
208
-
209
- **Class-Based (OOP) API:**
210
-
211
- ```typescript
212
- @Ws('/global')
213
- handleSocket(@Socket() socket: ExisWebSocket) {
214
- socket.onEvent('global-alert', (alert) => {
215
- // Broadcast to EVERYONE on the server except the sender
216
- socket.broadcast.emit('alert', alert)
217
- })
218
- }
219
- ```
220
-
221
- ### Listening for Events
222
-
223
- - **`socket.on('message', cb)`**: Listens for raw WebSocket messages.
224
- - **`socket.onEvent(eventName, cb)`**: Automatically parses incoming JSON and triggers the callback _only_ if the JSON payload matches `{ event: "eventName" }`.
225
-
226
- #### Example: Event Listeners
227
-
228
- **Functional API:**
229
-
230
- ```typescript
231
- route.ws('/data', {
232
- handle({ socket }) {
233
- // Handle raw buffer/string messages manually
234
- socket.on('message', (raw) => {
235
- console.log('Raw data received:', raw.toString())
236
- })
237
- },
238
- })
239
- ```
240
-
241
- **Class-Based (OOP) API:**
242
-
243
- ```typescript
244
- @Ws('/api')
245
- handleSocket(@Socket() socket: ExisWebSocket) {
246
- // Handle specific JSON events
247
- socket.onEvent('auth', (credentials) => {
248
- console.log('Auth attempt:', credentials.username)
249
- })
250
- }
251
- ```
252
-
253
- ### State & Presence
254
-
255
- - **`socket.data`**: An empty object `Record<string, any>` where you can safely attach custom user data (like user IDs, roles, etc.) for the duration of the connection.
256
- - **`socket.server.enablePresence()`**: Turns on automatic presence tracking. When a socket joins or leaves a room, ExisJS will automatically broadcast `room:join` and `room:leave` events to the room.
257
- - **`socket.server.getRoomRoster(room)`**: Returns an array of all connected sockets currently in a specific room.
258
-
259
- #### Example: State & Roster Tracking
260
-
261
- **Functional API:**
262
-
263
- ```typescript
264
- route.ws('/collaboration', {
265
- handle({ socket }) {
266
- socket.server.enablePresence()
267
-
268
- socket.onEvent('identify', (user) => {
269
- // Safely store state on the socket instance
270
- socket.data.userId = user.id
271
- socket.data.role = 'editor'
272
- })
273
- },
274
- })
275
- ```
276
-
277
- **Class-Based (OOP) API:**
278
-
279
- ```typescript
280
- @Ws('/collaboration')
281
- handleSocket(@Socket() socket: ExisWebSocket) {
282
- socket.onEvent('get-users', (room) => {
283
- // Fetch everyone currently in the room
284
- const roster = socket.server.getRoomRoster(room)
285
-
286
- socket.emit('users-list', roster.map(s => s.data.userId))
287
- })
288
- }
289
- ```
@@ -1,23 +0,0 @@
1
- # ExisJS Integrations Blueprint
2
-
3
- This directory contains the documentation for integrating third-party services and tools with ExisJS. This `README.md` acts as a **blueprint** to help you understand what each integration guide covers.
4
-
5
- ## 🗄️ Databases & Storage
6
- * **`mongo.mdx`**: Connecting to MongoDB using Mongoose, leveraging the DI container, and data modeling.
7
- * **`postgres.mdx`**: Connecting to PostgreSQL databases (e.g., via Prisma or Drizzle ORM) in a type-safe manner.
8
- * **`redis.mdx`**: Using Redis for high-speed caching, rate limiting, and powering ExisJS queues.
9
- * **`s3.mdx`**: Integrating with AWS S3 (or compatible services like Cloudflare R2) for file uploads and object storage.
10
-
11
- ## 🔐 Auth & Security
12
- * **`jwt.mdx`**: Implementing JSON Web Token (JWT) authentication, signing, and protecting routes via middleware.
13
-
14
- ## 🤖 Artificial Intelligence
15
- * **`openai.mdx`**: Integrating the OpenAI SDK, streaming LLM responses using ExisJS SSE (Server-Sent Events), and managing API keys securely.
16
-
17
- ## 📧 Communications
18
- * **`resend.mdx`**: Sending transactional emails (like password resets or welcome emails) using the Resend API, ideally triggered via background Queues.
19
-
20
- ## 📊 Analytics & Observability
21
- * **`posthog.mdx`**: Capturing user events, feature flags, and product analytics using PostHog inside your ExisJS controllers.
22
- * **`observability.mdx`**: Setting up advanced monitoring, tracing (OpenTelemetry), and logging infrastructure.
23
- * **`swagger.mdx`**: Automatic OpenAPI/Swagger generation for your endpoints based on your validation schemas and route definitions.
@@ -1,151 +0,0 @@
1
- ---
2
- nextUrl: "/docs/integrations/swagger"
3
- nextTitle: "Swagger OpenAPI"
4
- ---
5
-
6
- # JWT Authentication
7
-
8
- ExisJS comes with a native JSON Web Token (JWT) integration. You do **not** need to install external dependencies like `jsonwebtoken`. It is built natively into the framework and optimized for edge environments.
9
-
10
- ---
11
-
12
- ## Environment Variables
13
-
14
- The JWT integration securely reads your secret key from your `.env` file.
15
- Before using the plugin, ensure you have your JWT secret set:
16
-
17
- ```bash filename=".env"
18
- # Your JWT signing secret
19
- JWT_SECRET="super_secret_key_123"
20
- ```
21
-
22
- ---
23
-
24
- ## Usage
25
-
26
- Import the `JWT` object from `exisjs/auth` and use `JWT.signJWT()` or `JWT.verifyJWT()`. You will need to explicitly pass your secret key.
27
-
28
- #### Functional Paradigm
29
-
30
- ```typescript filename="src/http/auth/route.ts"
31
- import { controller, route } from 'exisjs/router'
32
- import { JWT } from 'exisjs/auth'
33
- import { db, users } from '../../db'
34
-
35
- export default controller({
36
- login: route.post('/login', {
37
- async handle(req, res) {
38
- const user = await db.select().from(users).where({ email: req.body.email })
39
-
40
- if (!user) {
41
- res.status(401)
42
- return { error: 'Invalid credentials' }
43
- }
44
-
45
- // Sign the token using process.env.JWT_SECRET
46
- const token = JWT.signJWT({ userId: user.id }, process.env.JWT_SECRET!, { expiresIn: 604800 })
47
-
48
- return { token }
49
- }
50
- }),
51
-
52
- verify: route.get('/me', {
53
- async handle(req, res) {
54
- try {
55
- const token = req.headers.authorization?.split(' ')[1]
56
-
57
- // Verify using process.env.JWT_SECRET
58
- const decoded = JWT.verifyJWT<{ userId: string }>(token, process.env.JWT_SECRET!)
59
-
60
- return { userId: decoded.userId }
61
- } catch (err) {
62
- res.status(401)
63
- return { error: 'Invalid or expired token' }
64
- }
65
- }
66
- })
67
- })
68
- ```
69
-
70
- #### Class-Based (OOP) Paradigm
71
-
72
- ```typescript filename="src/http/auth/route.ts"
73
- import { Controller, Post, Get, Body, Req, Res } from 'exisjs/decorators'
74
- import { JWT } from 'exisjs/auth'
75
- import { db, users } from '../../db'
76
-
77
- @Controller('/auth')
78
- export default class AuthController {
79
- @Post('/login')
80
- async login(@Body() body: any, @Res() res: any) {
81
- const user = await db.select().from(users).where({ email: body.email })
82
-
83
- if (!user) {
84
- res.status(401)
85
- return { error: 'Invalid credentials' }
86
- }
87
-
88
- // Sign the token using process.env.JWT_SECRET
89
- const token = JWT.signJWT({ userId: user.id }, process.env.JWT_SECRET!, { expiresIn: 604800 })
90
-
91
- return { token }
92
- }
93
-
94
- @Get('/me')
95
- async verifyMe(@Req() req: any, @Res() res: any) {
96
- try {
97
- const token = req.headers.authorization?.split(' ')[1]
98
-
99
- // Verify using process.env.JWT_SECRET
100
- const decoded = JWT.verifyJWT<{ userId: string }>(token, process.env.JWT_SECRET!)
101
-
102
- return { userId: decoded.userId }
103
- } catch (err) {
104
- res.status(401)
105
- return { error: 'Invalid or expired token' }
106
- }
107
- }
108
- }
109
- ```
110
-
111
- ---
112
-
113
- ## Using JWT in Middleware & Gateways
114
-
115
- While you can verify tokens directly in your routes, ExisJS's JWT integration works well inside Middlewares to protect entire folders using **Gateways**.
116
-
117
- First, create your middleware outside of your routing tree:
118
-
119
- ```typescript filename="src/middlewares/auth.ts"
120
- import { JWT } from 'exisjs/auth'
121
-
122
- export function requireAuth(req: any, res: any, next: any) {
123
- const token = req.headers.authorization?.split(' ')[1]
124
-
125
- if (!token) {
126
- res.status(401).json({ error: 'Missing token' })
127
- return
128
- }
129
-
130
- try {
131
- const decoded = JWT.verifyJWT<{ userId: string }>(token, process.env.JWT_SECRET!)
132
- // Attach the decoded payload to the request for the route to use
133
- req.user = decoded
134
- next()
135
- } catch (err) {
136
- res.status(401).json({ error: 'Unauthorized' })
137
- }
138
- }
139
- ```
140
-
141
- Now, apply it to an entire domain using a Gateway. This prevents you from having to protect every route manually.
142
-
143
- ```typescript filename="src/http/api/gateway.ts"
144
- import { defineGateway } from 'exisjs/router'
145
- import { requireAuth } from '../../middlewares/auth'
146
-
147
- export default defineGateway({
148
- // Intercepts and protects every route inside the /api folder
149
- middleware: [requireAuth]
150
- })
151
- ```
@@ -1,183 +0,0 @@
1
- ---
2
- nextUrl: "/docs/integrations/redis"
3
- nextTitle: "Redis"
4
- ---
5
-
6
- # Database (NoSQL)
7
-
8
- ExisJS provides native integrations for MongoDB. You do **NOT** need to register the database in your `server.ts` file. The connection pools are lazily initialized when you first execute a query.
9
-
10
- The framework provides first-class plugins for **Mongoose** (the ODM) and the raw **MongoDB Node.js Driver** (`mongodb`).
11
-
12
- ---
13
-
14
- ## Environment Variables
15
-
16
- Both MongoDB plugins securely read your connection string from your `.env` file.
17
- Before using any of the plugins below, ensure you have your MongoDB URI set:
18
-
19
- ```bash filename=".env"
20
- # Your MongoDB connection string
21
- MONGODB_URI="mongodb://localhost:27017/my_database"
22
- ```
23
-
24
- ---
25
-
26
- ## Mongoose (ODM)
27
-
28
- The `@exisjs/mongoose` plugin automatically manages your database connection lifecycle.
29
-
30
- ### Basic Setup
31
- In your `server.ts` file, simply call `configureMongoose({})`:
32
-
33
- ```typescript filename="src/http/server.ts"
34
- import { exis } from "exisjs";
35
- import { configureMongoose } from "exisjs/mongoose";
36
-
37
- export default exis({
38
- async onStart(app) {
39
- configureMongoose({});
40
- }
41
- });
42
- ```
43
-
44
- ### Serverless Deployments (Vercel, AWS Lambda)
45
-
46
- When deploying to serverless platforms, bundlers (like `@vercel/node`) can accidentally create multiple unconnected instances of Mongoose in memory. To guarantee stability in serverless functions, we recommend importing Mongoose directly and passing it as the `client`:
47
-
48
- ```typescript filename="src/http/server.ts"
49
- import { exis } from "exisjs";
50
- import mongoose from "mongoose";
51
- import { configureMongoose } from "exisjs/mongoose";
52
-
53
- export default exis({
54
- async onStart(app) {
55
- configureMongoose({ client: mongoose });
56
- }
57
- });
58
- ```
59
-
60
- ---
61
- ## 1. Mongoose (Recommended)
62
-
63
- Mongoose provides a straight-forward, schema-based solution to model your application data.
64
-
65
- ### Installation
66
-
67
- ```bash
68
- npm install mongoose
69
- ```
70
-
71
- ### Usage
72
-
73
- Import the `mongoose` proxy from `exisjs/mongoose`. ExisJS will connect to your database behind the scenes (Mongoose natively buffers operations until connected).
74
-
75
- ```typescript filename="src/models/user.ts"
76
- import { mongoose } from 'exisjs/mongoose'
77
-
78
- const userSchema = new mongoose.Schema({
79
- name: String,
80
- email: { type: String, unique: true },
81
- })
82
-
83
- export const User = mongoose.model('User', userSchema)
84
- ```
85
-
86
- Now you can use your `User` model in your routes:
87
-
88
- #### Functional Paradigm
89
-
90
- ```typescript filename="src/http/users/route.ts"
91
- import { controller, route } from 'exisjs/router'
92
- import { User } from '../../models/user'
93
-
94
- export default controller({
95
- getUsers: route.get('/', {
96
- async handle() {
97
- return await User.find({})
98
- }
99
- })
100
- })
101
- ```
102
-
103
- #### Class-Based (OOP) Paradigm
104
-
105
- ```typescript filename="src/http/users/route.ts"
106
- import { Controller, Get } from 'exisjs/decorators'
107
- import { User } from '../../models/user'
108
-
109
- @Controller()
110
- export default class UsersController {
111
- @Get('/')
112
- async getUsers() {
113
- return await User.find({})
114
- }
115
- }
116
- ```
117
-
118
- ---
119
-
120
- ## 2. Raw MongoDB (`mongodb`)
121
-
122
- If you don't want to use an ODM and prefer working with raw BSON documents, ExisJS provides an integration for the native `mongodb` driver.
123
-
124
- ### Installation
125
-
126
- ```bash
127
- npm install mongodb
128
- ```
129
-
130
- ### Usage
131
-
132
- Import `mongo` from `exisjs/mongodb`. The first time you interact with it, ExisJS will boot up a MongoClient connection pool using your `MONGODB_URI`.
133
-
134
- #### Functional Paradigm
135
-
136
- ```typescript filename="src/http/users/route.ts"
137
- import { controller, route } from 'exisjs/router'
138
- import { mongo } from 'exisjs/mongodb'
139
-
140
- export default controller({
141
- getUsers: route.get('/', {
142
- async handle() {
143
- const db = mongo.db('my_database')
144
- return await db.collection('users').find({}).toArray()
145
- }
146
- })
147
- })
148
- ```
149
-
150
- #### Class-Based (OOP) Paradigm
151
-
152
- ```typescript filename="src/http/users/route.ts"
153
- import { Controller, Get } from 'exisjs/decorators'
154
- import { mongo } from 'exisjs/mongodb'
155
-
156
- @Controller()
157
- export default class UsersController {
158
- @Get('/')
159
- async getUsers() {
160
- const db = mongo.db('my_database')
161
- return await db.collection('users').find({}).toArray()
162
- }
163
- }
164
- ```
165
-
166
- ### Customizing Connection Options
167
-
168
- If you need to pass custom options to the MongoDB connection pool (like replica set configs or pool sizes), call `configureMongo(options)` or `configureMongoose(options)` inside your `server.ts` `onStart` hook.
169
-
170
- ```typescript filename="src/http/server.ts"
171
- import { exis } from 'exisjs'
172
- import { configureMongoose } from 'exisjs/mongoose'
173
-
174
- export default exis({
175
- async onStart() {
176
- // Initialize with custom connection options
177
- configureMongoose({
178
- maxPoolSize: 50,
179
- wtimeoutMS: 2500,
180
- })
181
- }
182
- })
183
- ```