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,117 +0,0 @@
1
- ---
2
- nextUrl: "/docs/integrations/openai"
3
- nextTitle: "OpenAI"
4
- ---
5
-
6
- # Resend (Email) Integration
7
-
8
- ExisJS provides an integration for Resend to send emails.
9
-
10
- Just like all our other integrations, ExisJS treats the `resend` SDK as an optional dependency. You only install it if you need it, keeping your core application lightweight.
11
-
12
- ---
13
-
14
- ## Environment Variables
15
-
16
- The Resend plugin securely reads your API key directly from your `.env` file.
17
-
18
- Before using the plugin, ensure you have your API key set:
19
-
20
- ```bash filename=".env"
21
- RESEND_API_KEY="re_123456789"
22
- ```
23
-
24
- ---
25
-
26
- ## Installation
27
-
28
- ExisJS wraps the official `resend` Node.js SDK.
29
-
30
- ```bash
31
- npm install resend
32
- ```
33
-
34
- ---
35
-
36
- ## Usage
37
-
38
- Simply import the `resend` proxy from `exisjs/resend`. ExisJS will boot the client behind the scenes the first time you attempt to send an email.
39
-
40
- #### Functional Paradigm
41
-
42
- ```typescript filename="src/http/emails/route.ts"
43
- import { controller, route } from 'exisjs/router'
44
- import { resend } from 'exisjs/resend'
45
-
46
- export default controller({
47
- sendWelcomeEmail: route.post('/welcome', {
48
- async handle(req) {
49
- const { email, name } = req.body
50
-
51
- // The resend client lazy-loads here
52
- const { data, error } = await resend.emails.send({
53
- from: 'Acme <onboarding@resend.dev>',
54
- to: [email],
55
- subject: 'Welcome to Acme!',
56
- html: `<strong>Hello ${name}, welcome aboard!</strong>`
57
- })
58
-
59
- if (error) {
60
- return { success: false, error }
61
- }
62
-
63
- return { success: true, data }
64
- }
65
- })
66
- })
67
- ```
68
-
69
- #### Class-Based (OOP) Paradigm
70
-
71
- ```typescript filename="src/http/emails/route.ts"
72
- import { Controller, Post, Body } from 'exisjs/decorators'
73
- import { resend } from 'exisjs/resend'
74
-
75
- @Controller('/emails')
76
- export default class EmailsController {
77
-
78
- @Post('/welcome')
79
- async sendWelcomeEmail(@Body() body: any) {
80
- // The resend client automatically lazy-loads here!
81
- const { data, error } = await resend.emails.send({
82
- from: 'Acme <onboarding@resend.dev>',
83
- to: [body.email],
84
- subject: 'Welcome to Acme!',
85
- html: `<strong>Hello ${body.name}, welcome aboard!</strong>`
86
- })
87
-
88
- if (error) {
89
- return { success: false, error }
90
- }
91
-
92
- return { success: true, data }
93
- }
94
- }
95
- ```
96
-
97
- ---
98
-
99
- ## Customizing Connection Options
100
-
101
- If you need to pass custom options to the Resend Client, call `configureResend(options)` inside your `server.ts` `onStart` hook.
102
-
103
- ```typescript filename="src/http/server.ts"
104
- import { exis } from 'exisjs'
105
- import { configureResend } from 'exisjs/resend'
106
-
107
- export default exis({
108
- async onStart() {
109
- // Inject custom fetch options or headers
110
- configureResend({
111
- headers: {
112
- 'X-Custom-Header': 'ExisJS'
113
- }
114
- })
115
- }
116
- })
117
- ```
@@ -1,122 +0,0 @@
1
- ---
2
- nextUrl: "/docs/integrations/resend"
3
- nextTitle: "Resend"
4
- ---
5
-
6
- # AWS S3 Integration
7
-
8
- ExisJS provides an integration for AWS S3 via the official `@aws-sdk/client-s3` package.
9
-
10
- You do **NOT** need to write boilerplate to initialize the AWS SDK. The S3 client is lazily initialized when you execute your first `PutObject` or `GetObject` command.
11
-
12
- ---
13
-
14
- ## Environment Variables
15
-
16
- The AWS S3 plugin securely reads your credentials directly from your `.env` file using the industry-standard AWS variable names.
17
-
18
- Before using the plugin, ensure you have your credentials set:
19
-
20
- ```bash filename=".env"
21
- AWS_ACCESS_KEY_ID="your_access_key"
22
- AWS_SECRET_ACCESS_KEY="your_secret_key"
23
- AWS_REGION="us-east-1"
24
- ```
25
-
26
- ---
27
-
28
- ## Installation
29
-
30
- ExisJS wraps the `@aws-sdk/client-s3` library.
31
-
32
- ```bash
33
- npm install @aws-sdk/client-s3
34
- ```
35
-
36
- ---
37
-
38
- ## Usage
39
-
40
- Simply import the `s3` proxy from `exisjs/s3` and use standard AWS SDK commands. ExisJS will boot the client behind the scenes.
41
-
42
- #### Functional Paradigm
43
-
44
- ```typescript filename="src/http/uploads/route.ts"
45
- import { controller, route } from 'exisjs/router'
46
- import { s3 } from 'exisjs/s3'
47
- import { PutObjectCommand, GetObjectCommand } from '@aws-sdk/client-s3'
48
-
49
- export default controller({
50
- // ExisJS parses multipart/form-data when you access req.files
51
- uploadFile: route.post('/', {
52
- async handle(req) {
53
- // req.files is automatically populated natively by ExisJS
54
- const file = req.files[0]
55
-
56
- const command = new PutObjectCommand({
57
- Bucket: 'my-exis-bucket',
58
- Key: file.filename,
59
- Body: file.data, // Buffer
60
- ContentType: file.mimetype,
61
- })
62
-
63
- // The s3 client lazy-loads here
64
- await s3.send(command)
65
-
66
- return { success: true, url: `https://my-exis-bucket.s3.amazonaws.com/${file.filename}` }
67
- }
68
- })
69
- })
70
- ```
71
-
72
- #### Class-Based (OOP) Paradigm
73
-
74
- ```typescript filename="src/http/uploads/route.ts"
75
- import { Controller, Post, UploadedFile, type ExisFile } from 'exisjs/decorators'
76
- import { s3 } from 'exisjs/s3'
77
- import { PutObjectCommand } from '@aws-sdk/client-s3'
78
-
79
- @Controller('/uploads')
80
- export default class UploadsController {
81
-
82
- @Post('/')
83
- async uploadFile(@UploadedFile('avatar') file: ExisFile) {
84
- const command = new PutObjectCommand({
85
- Bucket: 'my-exis-bucket',
86
- Key: file.filename,
87
- Body: file.data, // Buffer
88
- ContentType: file.mimetype,
89
- })
90
-
91
- // The s3 client automatically lazy-loads here!
92
- await s3.send(command)
93
-
94
- return { success: true, url: `https://my-exis-bucket.s3.amazonaws.com/${file.filename}` }
95
- }
96
- }
97
- ```
98
-
99
- ---
100
-
101
- ## Customizing Connection Options
102
-
103
- If you need to pass custom options to the S3 Client (like a custom Endpoint URL for Cloudflare R2 or DigitalOcean Spaces), call `configureS3(options)` inside your `server.ts` `onStart` hook.
104
-
105
- ```typescript filename="src/http/server.ts"
106
- import { exis } from 'exisjs'
107
- import { configureS3 } from 'exisjs/s3'
108
-
109
- export default exis({
110
- async onStart() {
111
- // Compatible with S3 APIs like Cloudflare R2
112
- configureS3({
113
- endpoint: 'https://<ACCOUNT_ID>.r2.cloudflarestorage.com',
114
- forcePathStyle: true
115
- })
116
- }
117
- })
118
- ```
119
-
120
- <Hint>
121
- Because ExisJS uses the official AWS SDK under the hood, the S3 integration works with Cloudflare R2, DigitalOcean Spaces, MinIO, and any other S3-compatible storage provider.
122
- </Hint>
@@ -1,113 +0,0 @@
1
- ---
2
- nextUrl: "/docs/integrations/s3"
3
- nextTitle: "AWS S3"
4
- ---
5
-
6
- # Swagger OpenAPI
7
-
8
- ExisJS comes with a native **Swagger UI & OpenAPI 3.0** generator built directly into the framework. It parses your routes, path parameters, and schema validations to generate an API explorer.
9
-
10
- You do **not** need to maintain OpenAPI YAML files or write decorators.
11
-
12
- ---
13
-
14
- ## Usage
15
-
16
- To enable Swagger UI, simply import `serveSwagger` and call it inside the `onStart` hook in your `server.ts`.
17
-
18
- ```typescript filename="src/http/server.ts"
19
- import { exis } from 'exisjs'
20
- import { serveSwagger } from 'exisjs/swagger'
21
-
22
- export default exis({
23
- async onStart(app) {
24
- // Generate and mount Swagger UI
25
- serveSwagger(app, {
26
- path: '/api-docs', // Defaults to '/docs'
27
- title: 'My Startup API',
28
- version: '1.0.0',
29
- components: {
30
- securitySchemes: {
31
- bearerAuth: {
32
- type: 'http',
33
- scheme: 'bearer',
34
- bearerFormat: 'JWT'
35
- }
36
- }
37
- }
38
- })
39
- }
40
- })
41
- ```
42
-
43
- Once your server starts, navigate to `http://localhost:4000/api-docs` to see your auto-generated Swagger UI. The raw OpenAPI JSON payload will be available at `/api-docs/json`.
44
-
45
- ---
46
-
47
- ## Automatic Schema Generation
48
-
49
- ExisJS integrates with its internal `v` validator. Any validation schemas attached to your routes (whether Functional or OOP) are automatically translated into OpenAPI specifications.
50
-
51
- #### Functional Paradigm
52
-
53
- ```typescript filename="src/http/users/route.ts"
54
- import { controller, route } from 'exisjs/router'
55
- import { tex } from 'exisjs/validator'
56
-
57
- export default controller({
58
- createUser: route.post('/', {
59
- // This schema is automatically translated to OpenAPI request body definitions
60
- body: tex.object({
61
- name: tex.string(),
62
- age: tex.number({ optional: true })
63
- }),
64
- async handle(req) {
65
- return { success: true, name: req.body.name }
66
- }
67
- })
68
- })
69
- ```
70
-
71
- #### Class-Based (OOP) Paradigm
72
-
73
- ```typescript filename="src/http/users/route.ts"
74
- import { Controller, Post, Body } from 'exisjs/decorators'
75
- import { tex } from 'exisjs/validator'
76
-
77
- const CreateUserSchema = tex.object({
78
- name: tex.string(),
79
- age: tex.number({ optional: true })
80
- })
81
-
82
- @Controller('/users')
83
- export default class UsersController {
84
- @Post('/', { body: CreateUserSchema })
85
- async createUser(@Body() body: any) {
86
- return { success: true, name: body.name }
87
- }
88
- }
89
- ```
90
-
91
- When you view Swagger UI, the `POST /users` endpoint will show the JSON body required, properly displaying the string/number types and required/optional flags.
92
-
93
- ---
94
-
95
- ## Gateway Cascading Metadata
96
-
97
- If you want to apply OpenAPI tags or security schemas to an entire folder of routes without decorating every endpoint, you can use ExisJS Gateways.
98
-
99
- ```typescript filename="src/http/admin/gateway.ts"
100
- import { defineGateway } from 'exisjs/router'
101
-
102
- export default defineGateway({
103
- // Every route in the /admin folder automatically inherits these OpenAPI tags
104
- metadata: {
105
- openapi: {
106
- tags: ['Admin Management API'],
107
- security: ['bearerAuth']
108
- }
109
- }
110
- })
111
- ```
112
-
113
- Now, every route under `/admin/*` will be grouped under the "Admin Management API" section in your Swagger UI.
@@ -1,130 +0,0 @@
1
- ---
2
- title: "Adapters"
3
- description: "Strict API Reference for all Serverless and Edge adapters."
4
- ---
5
-
6
- # Adapters (`exisjs/adapters`)
7
-
8
- This document provides the strict API signatures and TypeScript interfaces exported by the `exisjs/adapters` module. For high-level deployment guides, see the [Adapters Guide](/docs/adapters).
9
-
10
- ---
11
-
12
- ## `aws`
13
-
14
- Converts API Gateway events into a native Node.js HTTP stream.
15
-
16
- ```typescript
17
- function aws(app: App): (event: APIGatewayEvent) => Promise<APIGatewayResult>
18
- ```
19
-
20
- ### `APIGatewayEvent`
21
- ```typescript
22
- interface APIGatewayEvent {
23
- httpMethod: string;
24
- path: string;
25
- headers: Record<string, string | undefined>;
26
- body: string | null;
27
- isBase64Encoded: boolean;
28
- queryStringParameters?: Record<string, string | undefined>;
29
- }
30
- ```
31
-
32
- ### `APIGatewayResult`
33
- ```typescript
34
- interface APIGatewayResult {
35
- statusCode: number;
36
- headers: Record<string, string>;
37
- body: string;
38
- isBase64Encoded: boolean;
39
- }
40
- ```
41
-
42
- ---
43
-
44
- ## `vercel`
45
-
46
- Provides a bridge between Vercel's Node.js Serverless runtime and ExisJS.
47
-
48
- ```typescript
49
- function vercel(
50
- app: App,
51
- options?: { cwd?: string }
52
- ): (req: VercelRequest, res: VercelResponse) => void | Promise<void>
53
- ```
54
-
55
- ### `VercelRequest` & `VercelResponse`
56
- These are re-exported from `@vercel/node`. The adapter intercepts these and patches the internal socket state to satisfy the ExisJS pipeline.
57
-
58
- ---
59
-
60
- ## `fetch`
61
-
62
- The universal Web Standard adapter. Converts standard Web `Request` objects into internal HTTP pipelines and resolves back to a Web `Response`.
63
-
64
- ```typescript
65
- function fetch(
66
- app: App
67
- ): (request: Request, env?: any, ctx?: any) => Promise<Response>
68
- ```
69
-
70
- *Note: The `env` and `ctx` arguments are seamlessly injected into the ExisJS routing context, allowing you to access platform-specific bindings (e.g. Cloudflare KV).*
71
-
72
- ---
73
-
74
- ## `cloudflare`
75
-
76
- A dedicated wrapper for Cloudflare Workers that returns the expected ES Module format.
77
-
78
- ```typescript
79
- function cloudflare(
80
- app: App
81
- ): { fetch: (request: Request, env: any, ctx: ExecutionContext) => Promise<Response> }
82
- ```
83
-
84
- ---
85
-
86
- ## `bun`
87
-
88
- A dedicated wrapper for the `Bun.serve()` configuration object.
89
-
90
- ```typescript
91
- function bun(
92
- app: App
93
- ): { fetch: (request: Request) => Promise<Response> }
94
- ```
95
-
96
- ---
97
-
98
- ## `deno`
99
-
100
- A dedicated wrapper for `Deno.serve()`.
101
-
102
- ```typescript
103
- function deno(
104
- app: App
105
- ): (request: Request) => Promise<Response>
106
- ```
107
-
108
- ---
109
-
110
- ## `netlify`
111
-
112
- A dedicated wrapper for Netlify Edge Functions.
113
-
114
- ```typescript
115
- function netlify(
116
- app: App
117
- ): (request: Request, context: NetlifyContext) => Promise<Response>
118
- ```
119
-
120
- ---
121
-
122
- ## `fastly`
123
-
124
- A dedicated wrapper for Fastly Compute@Edge which binds to the global `addEventListener` fetch event.
125
-
126
- ```typescript
127
- function fastly(
128
- app: App
129
- ): (event: FetchEvent) => void
130
- ```
@@ -1,183 +0,0 @@
1
- ---
2
- title: "Authentication"
3
- description: "API Reference for ExisJS Authentication utilities (`exisjs/auth`)."
4
- ---
5
-
6
- # Authentication (`exisjs/auth`)
7
-
8
- ExisJS ships with a completely native, dependency-free `auth` module that covers the most critical security implementations: Scrypt Password Hashing, JWT (JSON Web Tokens), Session Management, and Role-Based Access Control (RBAC).
9
-
10
- ---
11
-
12
- ## 1. Password Hashing (Scrypt)
13
-
14
- ExisJS natively uses Node's highly secure `scrypt` algorithm to hash passwords. It automatically generates a cryptographically secure salt and stores the parameters in a single string format (`scrypt:N:r:p:keylen:salt:hash`) so you never have to manage them separately.
15
-
16
- ```typescript filename="src/services/AuthService.ts"
17
- import { Password } from 'exisjs/auth'
18
-
19
- // Hashing a new password
20
- const hashedPassword = await Password.hashPassword('my-super-secret-password', {
21
- cost: 16384, // Higher cost = harder to brute force, but slower to compute
22
- })
23
-
24
- // Verifying a login attempt
25
- const isValid = await Password.verifyPassword('my-super-secret-password', hashedPassword)
26
- ```
27
-
28
- ---
29
-
30
- ## 2. JSON Web Tokens (JWT)
31
-
32
- You can instantly sign and verify JWTs without needing third-party libraries like `jsonwebtoken`.
33
-
34
- ```typescript
35
- import { JWT } from 'exisjs/auth'
36
-
37
- // Sign a token valid for 2 hours
38
- const token = JWT.signJWT(
39
- { userId: '123', role: 'admin' },
40
- process.env.JWT_SECRET,
41
- { expiresIn: 2 * 60 * 60 }
42
- )
43
-
44
- try {
45
- // Verifying token returns the exact typed payload
46
- const payload = JWT.verifyJWT<{ userId: string, role: string }>(token, process.env.JWT_SECRET)
47
- console.log(payload.userId)
48
- } catch (err) {
49
- if (err.name === 'TokenExpiredError') {
50
- // Handle expired token
51
- }
52
- }
53
- ```
54
-
55
- ---
56
-
57
- ## 3. Session Middleware
58
-
59
- If you prefer stateful authentication, ExisJS provides extremely robust session middleware out of the box. It leverages signed HTTP-only cookies to track users and automatically synchronizes session state back to the store (Memory, Redis, etc.) when the request ends.
60
-
61
- ### Global Setup via Plugin (`exis.config.ts`)
62
-
63
- Because ExisJS utilizes a file-based architecture with no manual server entry point, global middlewares like `session` should be attached using a Plugin.
64
-
65
- ```typescript filename="src/plugins/session.ts"
66
- import { definePlugin } from 'exisjs/plugin'
67
- import { session } from 'exisjs/auth'
68
-
69
- export const sessionPlugin = definePlugin({
70
- name: 'global-session',
71
- register(app) {
72
- app.use(session({
73
- secret: process.env.SESSION_SECRET || 'fallback-secret-minimum-32-chars-long!',
74
- cookieName: 'exis_sid',
75
- ttl: 86400 * 1000, // 1 day in milliseconds
76
- // store: new RedisSessionStore(...)
77
- }))
78
- }
79
- })
80
- ```
81
-
82
- Then, natively register your plugin in `exis.config.ts`:
83
-
84
- ```typescript filename="exis.config.ts"
85
- import { defineConfig } from 'exisjs/config'
86
- import { sessionPlugin } from './src/plugins/session'
87
-
88
- export default defineConfig({
89
- plugins: [
90
- sessionPlugin()
91
- ]
92
- })
93
- ```
94
-
95
- Once registered, you can read and write to `req.session` anywhere in your application!
96
-
97
- ### Functional Example
98
-
99
- ```typescript filename="src/http/auth/route.ts"
100
- import { controller, route } from 'exisjs/router'
101
- import { HttpError } from 'exisjs/error'
102
-
103
- export default controller({
104
- login: route.post('/login', {
105
- async handle(ctx) {
106
- const user = await db.users.findByEmail(ctx.body.email)
107
- if (!user) throw HttpError.unauthorized('Invalid credentials')
108
-
109
- // Login the user by attaching data to the session
110
- ctx.req.session.userId = user.id
111
- ctx.req.session.role = user.role
112
-
113
- return { success: true }
114
- }
115
- })
116
- })
117
- ```
118
-
119
- ### Class-Based (OOP) Example
120
-
121
- ```typescript filename="src/http/auth/route.ts"
122
- import { Controller, Post, Body, Req } from 'exisjs/decorators'
123
- import type { Request } from 'exisjs'
124
-
125
- @Controller('/auth')
126
- export default class AuthController {
127
-
128
- @Post('/login')
129
- async login(@Body() body: any, @Req() req: Request) {
130
- const user = await db.users.findByEmail(body.email)
131
-
132
- // Attach to session
133
- req.session.userId = user.id
134
- req.session.role = user.role
135
-
136
- return { success: true }
137
- }
138
- }
139
- ```
140
-
141
- ---
142
-
143
- ## 4. Role-Based Access Control (RBAC)
144
-
145
- The `requireRole` middleware checks if the current authenticated user has the necessary permissions to access a route.
146
-
147
- *Note: This middleware expects that `req.user.role` was populated by an earlier authentication middleware (like a JWT Verifier or a Session Restorer).*
148
-
149
- ### Functional Example
150
-
151
- ```typescript filename="src/http/admin/route.ts"
152
- import { controller, route } from 'exisjs/router'
153
- import { requireRole } from 'exisjs/auth'
154
-
155
- export default controller({
156
- getDashboard: route.get('/dashboard', {
157
- middleware: [
158
- // Only users with 'admin' or 'superadmin' roles can access this route
159
- requireRole(['admin', 'superadmin'])
160
- ],
161
- async handle() {
162
- return { metrics: [] }
163
- }
164
- })
165
- })
166
- ```
167
-
168
- ### Class-Based (OOP) Example
169
-
170
- ```typescript filename="src/http/admin/route.ts"
171
- import { Controller, Get, Use } from 'exisjs/decorators'
172
- import { requireRole } from 'exisjs/auth'
173
-
174
- @Controller('/admin')
175
- export default class AdminController {
176
-
177
- @Get('/dashboard')
178
- @Use(requireRole(['admin', 'superadmin']))
179
- async getDashboard() {
180
- return { metrics: [] }
181
- }
182
- }
183
- ```