create-nexwire 4.3.0 → 4.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (326) hide show
  1. package/README.md +10 -5
  2. package/express/src/framework/facade.ts +1 -0
  3. package/express/src/framework/http/logger.ts +13 -4
  4. package/express/src/framework/maker-cli/runtime/core.mjs +1 -2
  5. package/express/src/framework/notification/channels/mail.ts +8 -6
  6. package/express/src/middlewares/auth-middleware.ts +1 -2
  7. package/express/src/middlewares/role-middleware.ts +3 -13
  8. package/express/src/modules/auth/routes/index.ts +1 -2
  9. package/express/src/providers/notification.ts +2 -2
  10. package/express/src/resources/src/components/Switch.vue +60 -65
  11. package/express/src/resources/src/pages/auth/forgetPassword.vue +23 -30
  12. package/express/src/resources/src/pages/auth/login.vue +25 -28
  13. package/express/src/resources/src/pages/auth/register.vue +35 -39
  14. package/express/src/resources/src/pages/auth/resetPassword.vue +29 -37
  15. package/express/src/resources/src/pages/auth/verifyEmail.vue +15 -19
  16. package/express/src/resources/src/plugins/gum.ts +519 -203
  17. package/express/src/resources/src/stores/auth.ts +9 -6
  18. package/express/src/storage/database/nexwire.sqlite +0 -0
  19. package/fastify/.dockerignore +14 -0
  20. package/fastify/.env +44 -0
  21. package/fastify/.env.example +42 -0
  22. package/fastify/.vscode/extensions.json +6 -0
  23. package/fastify/.vscode/settings.json +37 -0
  24. package/fastify/LICENSE +21 -0
  25. package/fastify/README.md +232 -0
  26. package/fastify/biome.json +99 -0
  27. package/fastify/drizzle.config.ts +25 -0
  28. package/fastify/gitignore-stub +31 -0
  29. package/fastify/package.json +130 -0
  30. package/fastify/public/.gitkeep +0 -0
  31. package/fastify/src/config/app.ts +41 -0
  32. package/fastify/src/config/auth.ts +12 -0
  33. package/fastify/src/config/cache.ts +16 -0
  34. package/fastify/src/config/cookie.ts +15 -0
  35. package/fastify/src/config/cors.ts +12 -0
  36. package/fastify/src/config/database.ts +48 -0
  37. package/fastify/src/config/index.ts +83 -0
  38. package/fastify/src/config/jwt.ts +19 -0
  39. package/fastify/src/config/logging.ts +13 -0
  40. package/fastify/src/config/mail.ts +24 -0
  41. package/fastify/src/config/openapi.ts +36 -0
  42. package/fastify/src/config/queue.ts +30 -0
  43. package/fastify/src/config/rateLimit.ts +17 -0
  44. package/fastify/src/config/realtime.ts +15 -0
  45. package/fastify/src/config/redis.ts +18 -0
  46. package/fastify/src/config/security.ts +44 -0
  47. package/fastify/src/config/session.ts +17 -0
  48. package/fastify/src/config/storage.ts +22 -0
  49. package/fastify/src/config/validate.ts +50 -0
  50. package/fastify/src/database/migrations/sqlite/0000_init.sql +48 -0
  51. package/fastify/src/database/migrations/sqlite/meta/0000_snapshot.json +324 -0
  52. package/fastify/src/database/migrations/sqlite/meta/_journal.json +13 -0
  53. package/fastify/src/database/schema.ts +2 -0
  54. package/fastify/src/env.ts +76 -0
  55. package/fastify/src/framework/cache/cache.ts +114 -0
  56. package/fastify/src/framework/circuit-breaker/cb.ts +88 -0
  57. package/fastify/src/framework/database/app-schema.ts +37 -0
  58. package/fastify/src/framework/database/connection.ts +223 -0
  59. package/fastify/src/framework/database/migrate-hooks.ts +87 -0
  60. package/fastify/src/framework/database/paginate.ts +226 -0
  61. package/fastify/src/framework/database/schema.ts +20 -0
  62. package/fastify/src/framework/database/seed.ts +152 -0
  63. package/fastify/src/framework/events/dispatcher.ts +61 -0
  64. package/fastify/src/framework/facade.ts +96 -0
  65. package/fastify/src/framework/http/app.ts +176 -0
  66. package/fastify/src/framework/http/cors.ts +13 -0
  67. package/fastify/src/framework/http/fastify.d.ts +13 -0
  68. package/fastify/src/framework/http/logger.ts +110 -0
  69. package/fastify/src/framework/http/metrics.ts +22 -0
  70. package/fastify/src/framework/http/openapi.ts +48 -0
  71. package/fastify/src/framework/http/ratelimiter.ts +47 -0
  72. package/fastify/src/framework/http/security.ts +25 -0
  73. package/fastify/src/framework/http/static.ts +83 -0
  74. package/fastify/src/framework/http/validation.ts +49 -0
  75. package/fastify/src/framework/kernel.ts +43 -0
  76. package/fastify/src/framework/maker-cli/db/core.mjs +291 -0
  77. package/fastify/src/framework/maker-cli/db/index.mjs +204 -0
  78. package/fastify/src/framework/maker-cli/deploy/core.mjs +1046 -0
  79. package/fastify/src/framework/maker-cli/deploy/index.mjs +91 -0
  80. package/fastify/src/framework/maker-cli/index.mjs +65 -0
  81. package/fastify/src/framework/maker-cli/middleware/core.mjs +41 -0
  82. package/fastify/src/framework/maker-cli/middleware/index.mjs +17 -0
  83. package/fastify/src/framework/maker-cli/module/core.mjs +1066 -0
  84. package/fastify/src/framework/maker-cli/module/index.mjs +211 -0
  85. package/fastify/src/framework/maker-cli/provider/core.mjs +49 -0
  86. package/fastify/src/framework/maker-cli/provider/index.mjs +12 -0
  87. package/fastify/src/framework/maker-cli/runtime/build-ui.mjs +16 -0
  88. package/fastify/src/framework/maker-cli/runtime/core.mjs +560 -0
  89. package/fastify/src/framework/maker-cli/runtime/index.mjs +120 -0
  90. package/fastify/src/framework/maker-cli/runtime/redis-commander-patch.cjs +20 -0
  91. package/fastify/src/framework/maker-cli/stubs/controller/openapi.ts.stub +74 -0
  92. package/fastify/src/framework/maker-cli/stubs/controller/plain.ts.stub +77 -0
  93. package/fastify/src/framework/maker-cli/stubs/controller/standalone.ts.stub +51 -0
  94. package/fastify/src/framework/maker-cli/stubs/deploy/Dockerfile.bun.stub +52 -0
  95. package/fastify/src/framework/maker-cli/stubs/deploy/Dockerfile.pnpm.stub +55 -0
  96. package/fastify/src/framework/maker-cli/stubs/deploy/Dockerfile.stub +51 -0
  97. package/fastify/src/framework/maker-cli/stubs/deploy/Dockerfile.yarn.stub +55 -0
  98. package/fastify/src/framework/maker-cli/stubs/deploy/README.stub +59 -0
  99. package/fastify/src/framework/maker-cli/stubs/deploy/compose/mysql.server.stub +45 -0
  100. package/fastify/src/framework/maker-cli/stubs/deploy/compose/postgres.server.stub +45 -0
  101. package/fastify/src/framework/maker-cli/stubs/deploy/compose/sqlite.stub +45 -0
  102. package/fastify/src/framework/maker-cli/stubs/deploy/env/mysql.server.stub +68 -0
  103. package/fastify/src/framework/maker-cli/stubs/deploy/env/postgres.server.stub +68 -0
  104. package/fastify/src/framework/maker-cli/stubs/deploy/env/sqlite.stub +67 -0
  105. package/fastify/src/framework/maker-cli/stubs/deploy/scripts/auto-migrate.sh.stub +41 -0
  106. package/fastify/src/framework/maker-cli/stubs/deploy/server/README.stub +78 -0
  107. package/fastify/src/framework/maker-cli/stubs/deploy/server/compose/noredis.stub +120 -0
  108. package/fastify/src/framework/maker-cli/stubs/deploy/server/compose/redis.dev.stub +133 -0
  109. package/fastify/src/framework/maker-cli/stubs/deploy/server/compose/redis.stub +131 -0
  110. package/fastify/src/framework/maker-cli/stubs/deploy/server/env/local.example.stub +11 -0
  111. package/fastify/src/framework/maker-cli/stubs/deploy/server/env/noredis.stub +25 -0
  112. package/fastify/src/framework/maker-cli/stubs/deploy/server/env/redis.stub +25 -0
  113. package/fastify/src/framework/maker-cli/stubs/deploy/server/nginx-vhost/README.stub +16 -0
  114. package/fastify/src/framework/maker-cli/stubs/deploy/server/nginx-vhost/app.example.com.stub +13 -0
  115. package/fastify/src/framework/maker-cli/stubs/deploy/server/pgadmin/servers.stub +14 -0
  116. package/fastify/src/framework/maker-cli/stubs/deploy/server/redis/redis.conf.stub +7 -0
  117. package/fastify/src/framework/maker-cli/stubs/deploy/supervisor/noredis.stub +54 -0
  118. package/fastify/src/framework/maker-cli/stubs/deploy/supervisor/redis.stub +70 -0
  119. package/fastify/src/framework/maker-cli/stubs/deploy/workflow/local.json.stub +25 -0
  120. package/fastify/src/framework/maker-cli/stubs/deploy/workflow/remote.json.stub +24 -0
  121. package/fastify/src/framework/maker-cli/stubs/facade/name.ts.stub +12 -0
  122. package/fastify/src/framework/maker-cli/stubs/helper/name.ts.stub +14 -0
  123. package/fastify/src/framework/maker-cli/stubs/job/name.ts.stub +25 -0
  124. package/fastify/src/framework/maker-cli/stubs/middleware/name.local.ts.stub +15 -0
  125. package/fastify/src/framework/maker-cli/stubs/middleware/name.ts.stub +15 -0
  126. package/fastify/src/framework/maker-cli/stubs/model/name.mysql.ts.stub +10 -0
  127. package/fastify/src/framework/maker-cli/stubs/model/name.postgresql.ts.stub +10 -0
  128. package/fastify/src/framework/maker-cli/stubs/model/name.sqlite.ts.stub +10 -0
  129. package/fastify/src/framework/maker-cli/stubs/notification/controller.ts.stub +79 -0
  130. package/fastify/src/framework/maker-cli/stubs/notification/job.ts.stub +11 -0
  131. package/fastify/src/framework/maker-cli/stubs/notification/model.ts.stub +29 -0
  132. package/fastify/src/framework/maker-cli/stubs/notification/provider.ts.stub +174 -0
  133. package/fastify/src/framework/maker-cli/stubs/notification/route.api.ts.stub +71 -0
  134. package/fastify/src/framework/maker-cli/stubs/notification/route.plain.ts.stub +15 -0
  135. package/fastify/src/framework/maker-cli/stubs/notification/schema.plain.ts.stub +26 -0
  136. package/fastify/src/framework/maker-cli/stubs/notification/schema.ts.stub +26 -0
  137. package/fastify/src/framework/maker-cli/stubs/provider/module-barrel.ts.stub +19 -0
  138. package/fastify/src/framework/maker-cli/stubs/provider/module.ts.stub +21 -0
  139. package/fastify/src/framework/maker-cli/stubs/provider/name.ts.stub +21 -0
  140. package/fastify/src/framework/maker-cli/stubs/route/api.ts.stub +101 -0
  141. package/fastify/src/framework/maker-cli/stubs/route/plain.ts.stub +23 -0
  142. package/fastify/src/framework/maker-cli/stubs/route/standalone.api.ts.stub +120 -0
  143. package/fastify/src/framework/maker-cli/stubs/route/standalone.plain.ts.stub +50 -0
  144. package/fastify/src/framework/maker-cli/stubs/schedule/name.ts.stub +36 -0
  145. package/fastify/src/framework/maker-cli/stubs/schema/name.plain.ts.stub +14 -0
  146. package/fastify/src/framework/maker-cli/stubs/schema/name.ts.stub +33 -0
  147. package/fastify/src/framework/maker-cli/stubs/seeder/name.ts.stub +18 -0
  148. package/fastify/src/framework/maker-cli/stubs/seeder/standalone.ts.stub +22 -0
  149. package/fastify/src/framework/maker-cli/stubs/service/name.plain.ts.stub +67 -0
  150. package/fastify/src/framework/maker-cli/stubs/service/name.ts.stub +65 -0
  151. package/fastify/src/framework/maker-cli/stubs/test/unit.ts.stub +22 -0
  152. package/fastify/src/framework/maker-cli/stubs/type/name.ts.stub +22 -0
  153. package/fastify/src/framework/maker-cli/utils/env-config.mjs +44 -0
  154. package/fastify/src/framework/maker-cli/utils/env-db.mjs +61 -0
  155. package/fastify/src/framework/maker-cli/utils/file-ops.mjs +30 -0
  156. package/fastify/src/framework/maker-cli/utils/flags.mjs +14 -0
  157. package/fastify/src/framework/maker-cli/utils/help.mjs +379 -0
  158. package/fastify/src/framework/maker-cli/utils/naming.mjs +119 -0
  159. package/fastify/src/framework/maker-cli/utils/process.mjs +52 -0
  160. package/fastify/src/framework/maker-cli/utils/project-commands.mjs +201 -0
  161. package/fastify/src/framework/modules/discover.ts +57 -0
  162. package/fastify/src/framework/modules/routes.ts +31 -0
  163. package/fastify/src/framework/notification/channels/broadcast.ts +15 -0
  164. package/fastify/src/framework/notification/channels/mail.ts +42 -0
  165. package/fastify/src/framework/notification/contracts.ts +29 -0
  166. package/fastify/src/framework/notification/index.ts +59 -0
  167. package/fastify/src/framework/notification/registry.ts +15 -0
  168. package/fastify/src/framework/providers/adapter.ts +149 -0
  169. package/fastify/src/framework/providers/contracts.ts +126 -0
  170. package/fastify/src/framework/providers/loader.ts +105 -0
  171. package/fastify/src/framework/providers/registry.ts +88 -0
  172. package/fastify/src/framework/queue/clear.ts +22 -0
  173. package/fastify/src/framework/queue/queue.ts +401 -0
  174. package/fastify/src/framework/queue/ui.ts +194 -0
  175. package/fastify/src/framework/queue/worker.ts +61 -0
  176. package/fastify/src/framework/realtime/broadcast.ts +70 -0
  177. package/fastify/src/framework/realtime/index.ts +2 -0
  178. package/fastify/src/framework/realtime/socket-cookie.ts +72 -0
  179. package/fastify/src/framework/realtime/socket.ts +149 -0
  180. package/fastify/src/framework/realtime/types.ts +6 -0
  181. package/fastify/src/framework/realtime/ui.ts +16 -0
  182. package/fastify/src/framework/redis/client.ts +148 -0
  183. package/fastify/src/framework/runtime/runtime.ts +23 -0
  184. package/fastify/src/framework/runtime/server-adapter.ts +33 -0
  185. package/fastify/src/framework/scheduler/lock.ts +128 -0
  186. package/fastify/src/framework/scheduler/run.ts +48 -0
  187. package/fastify/src/framework/scheduler/scheduler.ts +155 -0
  188. package/fastify/src/framework/server.ts +162 -0
  189. package/fastify/src/framework/session/session.ts +160 -0
  190. package/fastify/src/framework/storage/storage.ts +744 -0
  191. package/fastify/src/framework/support/cookie.ts +71 -0
  192. package/fastify/src/framework/support/jwt.ts +33 -0
  193. package/fastify/src/framework/support/lifecycle.ts +35 -0
  194. package/fastify/src/framework/support/logger.ts +148 -0
  195. package/fastify/src/framework/support/mail.ts +56 -0
  196. package/fastify/src/framework/support/password.ts +23 -0
  197. package/fastify/src/framework/support/status-codes.ts +75 -0
  198. package/fastify/src/framework/support/upload.ts +181 -0
  199. package/fastify/src/framework/support/url.ts +41 -0
  200. package/fastify/src/middlewares/auth-middleware.ts +134 -0
  201. package/fastify/src/middlewares/role-middleware.ts +19 -0
  202. package/fastify/src/modules/auth/__tests__/forgetpass.test.ts +200 -0
  203. package/fastify/src/modules/auth/__tests__/login.test.ts +171 -0
  204. package/fastify/src/modules/auth/__tests__/logout.test.ts +60 -0
  205. package/fastify/src/modules/auth/__tests__/logoutalldevices.test.ts +49 -0
  206. package/fastify/src/modules/auth/__tests__/me.test.ts +91 -0
  207. package/fastify/src/modules/auth/__tests__/refreshtoken.test.ts +305 -0
  208. package/fastify/src/modules/auth/__tests__/register.test.ts +291 -0
  209. package/fastify/src/modules/auth/__tests__/resetpass.test.ts +206 -0
  210. package/fastify/src/modules/auth/__tests__/verifyemail.test.ts +183 -0
  211. package/fastify/src/modules/auth/controllers/auth.ts +252 -0
  212. package/fastify/src/modules/auth/controllers/role.ts +35 -0
  213. package/fastify/src/modules/auth/database/models/role.ts +14 -0
  214. package/fastify/src/modules/auth/database/models/user.ts +46 -0
  215. package/fastify/src/modules/auth/database/seeders/role.ts +18 -0
  216. package/fastify/src/modules/auth/database/seeders/user.ts +35 -0
  217. package/fastify/src/modules/auth/facade.ts +12 -0
  218. package/fastify/src/modules/auth/helpers/auth.ts +115 -0
  219. package/fastify/src/modules/auth/jobs/forgetpass.ts +20 -0
  220. package/fastify/src/modules/auth/jobs/registeruser.ts +23 -0
  221. package/fastify/src/modules/auth/jobs/verifyemail.ts +18 -0
  222. package/fastify/src/modules/auth/routes/index.ts +185 -0
  223. package/fastify/src/modules/auth/routes/role.ts +56 -0
  224. package/fastify/src/modules/auth/schemas/auth.ts +116 -0
  225. package/fastify/src/modules/auth/services/forgetpassword.ts +66 -0
  226. package/fastify/src/modules/auth/services/login.ts +63 -0
  227. package/fastify/src/modules/auth/services/logout.ts +25 -0
  228. package/fastify/src/modules/auth/services/logoutalldevices.ts +19 -0
  229. package/fastify/src/modules/auth/services/me.ts +31 -0
  230. package/fastify/src/modules/auth/services/refreshtoken.ts +110 -0
  231. package/fastify/src/modules/auth/services/register.ts +141 -0
  232. package/fastify/src/modules/auth/services/resetpassword.ts +69 -0
  233. package/fastify/src/modules/auth/services/verifyemail.ts +77 -0
  234. package/fastify/src/modules/auth/types/auth.ts +31 -0
  235. package/fastify/src/providers/README.md +107 -0
  236. package/fastify/src/providers/notification.ts +4 -0
  237. package/fastify/src/resources/index.html +17 -0
  238. package/fastify/src/resources/src/App.vue +5 -0
  239. package/fastify/src/resources/src/assets/css/styles.css +14761 -0
  240. package/fastify/src/resources/src/assets/css/styles.css.map +1 -0
  241. package/fastify/src/resources/src/assets/fonts/public-sans/public-sans-latin-ext.woff2 +0 -0
  242. package/fastify/src/resources/src/assets/fonts/public-sans/public-sans-latin.woff2 +0 -0
  243. package/fastify/src/resources/src/assets/images/favicon/favicon.ico +0 -0
  244. package/fastify/src/resources/src/assets/images/logo.png +0 -0
  245. package/fastify/src/resources/src/assets/scss/custom.css +217 -0
  246. package/fastify/src/resources/src/assets/scss/custom.css.map +1 -0
  247. package/fastify/src/resources/src/assets/scss/custom.scss +1346 -0
  248. package/fastify/src/resources/src/components/Button.vue +32 -0
  249. package/fastify/src/resources/src/components/Checkbox.vue +32 -0
  250. package/fastify/src/resources/src/components/Datepicker.vue +106 -0
  251. package/fastify/src/resources/src/components/FeatureButton.vue +53 -0
  252. package/fastify/src/resources/src/components/FloatButton.vue +33 -0
  253. package/fastify/src/resources/src/components/Href.vue +32 -0
  254. package/fastify/src/resources/src/components/Input.vue +243 -0
  255. package/fastify/src/resources/src/components/InputGroup.vue +147 -0
  256. package/fastify/src/resources/src/components/InputPasswordToggle.vue +229 -0
  257. package/fastify/src/resources/src/components/Modal.vue +71 -0
  258. package/fastify/src/resources/src/components/Pagebar.vue +26 -0
  259. package/fastify/src/resources/src/components/Refresh.vue +19 -0
  260. package/fastify/src/resources/src/components/Select.vue +384 -0
  261. package/fastify/src/resources/src/components/Spinner.vue +42 -0
  262. package/fastify/src/resources/src/components/Switch.vue +60 -0
  263. package/fastify/src/resources/src/components/TextArea.vue +117 -0
  264. package/fastify/src/resources/src/components/Toast.vue +56 -0
  265. package/fastify/src/resources/src/components/datatable/DataTableSkeleton.vue +98 -0
  266. package/fastify/src/resources/src/components/datatable/Pagination.vue +147 -0
  267. package/fastify/src/resources/src/components/datatable/SelectOpption.vue +64 -0
  268. package/fastify/src/resources/src/components/datatable/index.vue +199 -0
  269. package/fastify/src/resources/src/composables/useAuth.ts +52 -0
  270. package/fastify/src/resources/src/helpers/assets.ts +51 -0
  271. package/fastify/src/resources/src/helpers/nformatter.ts +10 -0
  272. package/fastify/src/resources/src/helpers/utils.ts +75 -0
  273. package/fastify/src/resources/src/layouts/AuthLayout.vue +20 -0
  274. package/fastify/src/resources/src/layouts/Layout/Footer.vue +23 -0
  275. package/fastify/src/resources/src/layouts/Layout/Header.vue +124 -0
  276. package/fastify/src/resources/src/layouts/Layout/Sidebar.vue +137 -0
  277. package/fastify/src/resources/src/layouts/Layout/index.vue +87 -0
  278. package/fastify/src/resources/src/main.ts +28 -0
  279. package/fastify/src/resources/src/pages/auth/forgetPassword.vue +76 -0
  280. package/fastify/src/resources/src/pages/auth/login.vue +96 -0
  281. package/fastify/src/resources/src/pages/auth/register.vue +129 -0
  282. package/fastify/src/resources/src/pages/auth/resetPassword.vue +110 -0
  283. package/fastify/src/resources/src/pages/auth/verifyEmail.vue +64 -0
  284. package/fastify/src/resources/src/pages/dashboard/index.vue +66 -0
  285. package/fastify/src/resources/src/plugins/axios.ts +31 -0
  286. package/fastify/src/resources/src/plugins/browserDetect.ts +55 -0
  287. package/fastify/src/resources/src/plugins/dialog.ts +216 -0
  288. package/fastify/src/resources/src/plugins/gum.ts +683 -0
  289. package/fastify/src/resources/src/plugins/pulse.ts +157 -0
  290. package/fastify/src/resources/src/plugins/routeProgress.ts +87 -0
  291. package/fastify/src/resources/src/router/index.ts +85 -0
  292. package/fastify/src/resources/src/stores/admin-ui.ts +148 -0
  293. package/fastify/src/resources/src/stores/auth.ts +187 -0
  294. package/fastify/src/resources/tsconfig.json +19 -0
  295. package/fastify/src/resources/vite.config.ts +64 -0
  296. package/fastify/src/storage/app/private/.gitkeep +0 -0
  297. package/fastify/src/storage/app/public/.gitkeep +0 -0
  298. package/fastify/src/storage/app/tmp/generated/.gitkeep +0 -0
  299. package/fastify/src/storage/database/nexwire.sqlite +0 -0
  300. package/fastify/src/storage/logs/.gitkeep +0 -0
  301. package/fastify/src/storage/logs/app.log +0 -0
  302. package/fastify/src/storage/logs/fatal.log +0 -0
  303. package/fastify/src/storage/tmp/.gitkeep +0 -0
  304. package/fastify/src/storage/trash/modules/.gitkeep +0 -0
  305. package/fastify/src/types/global.d.ts +32 -0
  306. package/fastify/tsconfig.json +19 -0
  307. package/fastify/vitest.config.ts +38 -0
  308. package/hono/src/framework/facade.ts +1 -0
  309. package/hono/src/framework/http/logger.ts +86 -81
  310. package/hono/src/framework/maker-cli/runtime/core.mjs +1 -2
  311. package/hono/src/framework/notification/channels/mail.ts +8 -6
  312. package/hono/src/middlewares/auth-middleware.ts +1 -2
  313. package/hono/src/middlewares/role-middleware.ts +3 -13
  314. package/hono/src/modules/auth/routes/index.ts +1 -2
  315. package/hono/src/providers/notification.ts +2 -2
  316. package/hono/src/resources/src/components/Switch.vue +60 -65
  317. package/hono/src/resources/src/pages/auth/forgetPassword.vue +23 -29
  318. package/hono/src/resources/src/pages/auth/login.vue +26 -29
  319. package/hono/src/resources/src/pages/auth/register.vue +36 -40
  320. package/hono/src/resources/src/pages/auth/resetPassword.vue +29 -37
  321. package/hono/src/resources/src/pages/auth/verifyEmail.vue +15 -19
  322. package/hono/src/resources/src/plugins/gum.ts +519 -203
  323. package/hono/src/resources/src/stores/auth.ts +9 -6
  324. package/hono/src/storage/database/nexwire.sqlite +0 -0
  325. package/package.json +3 -2
  326. package/src/index.js +11 -8
@@ -0,0 +1,126 @@
1
+ /**
2
+ * Why: Defines the shapes a pluggable provider has to satisfy.
3
+ * When: A developer replaces a framework default (auth, notifications, payments later).
4
+ * Where: Imported through the framework facade, never from framework internals.
5
+ * How: Interfaces stay deliberately loose so custom user shapes pass through.
6
+ */
7
+
8
+ /** Registry key of the built-in auth provider contract. */
9
+ export const AUTH_PROVIDER_KEY = "auth";
10
+
11
+ /** Registry key of the built-in notification storage provider. */
12
+ export const NOTIFICATION_PROVIDER_KEY = "notification";
13
+
14
+ /**
15
+ * Registry key for any provider implementation.
16
+ *
17
+ * `string & {}` keeps the literal keys above discoverable by editors while
18
+ * still accepting any custom key, so a project can register its own contracts
19
+ * (payments, otp, storage, ...) without the framework having to know them.
20
+ */
21
+ export type ProviderKey = typeof AUTH_PROVIDER_KEY | typeof NOTIFICATION_PROVIDER_KEY | (string & {});
22
+
23
+ export interface AuthProviderUser {
24
+ id: number | string;
25
+ email?: string | null;
26
+ [key: string]: any;
27
+ }
28
+
29
+ export interface AuthProviderRefreshToken {
30
+ id: number | string;
31
+ jti: string;
32
+ revoked?: boolean | null;
33
+ expiresAt?: Date | string | null;
34
+ userId?: number | string | null;
35
+ [key: string]: any;
36
+ }
37
+
38
+ export interface AuthUserContext {
39
+ id: number | string;
40
+ email?: string | null;
41
+ roleId?: number | null;
42
+ role?: string | null;
43
+ [key: string]: any;
44
+ }
45
+
46
+ export interface AuthUserContact {
47
+ email?: string | null;
48
+ name?: string | null;
49
+ phone?: string | null;
50
+ }
51
+
52
+ export interface AuthProvider {
53
+ getUserById(id: number | string): Promise<AuthProviderUser | null>;
54
+ findRefreshToken(jti: string): Promise<AuthProviderRefreshToken | null>;
55
+ revokeRefreshToken?(tokenId: number | string): Promise<void>;
56
+ deleteRefreshToken?(tokenId: number | string): Promise<void>;
57
+ getAuthContext?(user: AuthProviderUser, payload?: any): Promise<AuthUserContext | any>;
58
+ getUserContact?(userId: number | string): Promise<AuthUserContact | null>;
59
+ }
60
+
61
+ /**
62
+ * Who a notification belongs to. `id` accepts a numeric auth id and a string
63
+ * id (UUID, ULID, ...) so replacing auth does not force a notification change.
64
+ * The provider always stores the id as text.
65
+ */
66
+ export interface NotifiableTarget {
67
+ /** Notifiable class. Defaults to "user". */
68
+ type?: string;
69
+ id: number | string;
70
+ }
71
+
72
+ /** Payload accepted by `NotificationProvider.create()`. */
73
+ export interface NotificationCreateInput {
74
+ type?: string;
75
+ title: string;
76
+ body?: string | null;
77
+ link?: string | null;
78
+ data?: Record<string, unknown> | null;
79
+ }
80
+
81
+ /** Normalized notification returned by every provider operation. */
82
+ export interface NotificationRecord {
83
+ id: string;
84
+ notifiableType: string;
85
+ notifiableId: string;
86
+ type: string;
87
+ title: string;
88
+ body: string | null;
89
+ data: Record<string, unknown> | null;
90
+ link: string | null;
91
+ readAt: string | null;
92
+ createdAt: string;
93
+ }
94
+
95
+ export interface NotificationListOptions {
96
+ page?: number;
97
+ perPage?: number;
98
+ }
99
+
100
+ export interface NotificationPage {
101
+ data: NotificationRecord[];
102
+ total: number;
103
+ unread: number;
104
+ page: number;
105
+ perPage: number;
106
+ }
107
+
108
+ /**
109
+ * Why: Keeps notification storage replaceable without touching `notify()` or
110
+ * the generated HTTP routes.
111
+ * When: The default `src/modules/notification` store is replaced by a custom
112
+ * implementation (a different table, another service, ...).
113
+ * Where: Registered through `registerNotificationProvider()`.
114
+ * How: The framework only reads through this contract; mail and realtime
115
+ * delivery stay in the runtime so a storage swap cannot disable them.
116
+ */
117
+ export interface NotificationProvider {
118
+ create(target: NotifiableTarget, input: NotificationCreateInput): Promise<NotificationRecord>;
119
+ list(target: NotifiableTarget, options?: NotificationListOptions): Promise<NotificationPage>;
120
+ unreadCount(target: NotifiableTarget): Promise<number>;
121
+ markRead(target: NotifiableTarget, id: number | string): Promise<boolean>;
122
+ markAllRead(target: NotifiableTarget): Promise<number>;
123
+ remove(target: NotifiableTarget, id: number | string): Promise<boolean>;
124
+ /** Optional bulk cleanup when a notifiable target is deleted. */
125
+ deleteForTarget?(target: NotifiableTarget): Promise<number>;
126
+ }
@@ -0,0 +1,105 @@
1
+ import fs from "node:fs";
2
+ import path from "node:path";
3
+ import { pathToFileURL } from "node:url";
4
+ import { glob } from "glob";
5
+ import { discoverModuleFiles } from "@/framework/modules/discover.js";
6
+ import { logger } from "@/framework/support/logger.js";
7
+
8
+ /**
9
+ * Why: Finds the app-level provider folder for the running code.
10
+ * When: Providers are loaded at boot.
11
+ * Where: Provider loader.
12
+ * How: Mirrors the module discovery rule — `src/providers` in development,
13
+ * `dist/src/providers` when the compiled server is the entrypoint.
14
+ */
15
+ function resolveProvidersPath() {
16
+ const cwd = process.cwd();
17
+ const srcProviders = path.resolve(cwd, "src/providers");
18
+ const distProviders = path.resolve(cwd, "dist/src/providers");
19
+ const entry = String(process.argv[1] || "");
20
+ const runningDist = /[\\/]dist[\\/]/.test(entry);
21
+
22
+ if (runningDist && fs.existsSync(distProviders)) return distProviders;
23
+ return srcProviders;
24
+ }
25
+
26
+ export const providersPath = resolveProvidersPath();
27
+
28
+ let loadPromise: Promise<number> | null = null;
29
+ let loading = false;
30
+
31
+ /**
32
+ * Why: Collects every provider file that should run at boot.
33
+ * When: The loader runs.
34
+ * Where: Provider loader.
35
+ * How: Globs `src/providers/**` for app-wide providers, and
36
+ * `src/modules/**\/providers.ts` plus `src/modules/**\/providers/*.ts` for
37
+ * module-scoped ones. Tests and declaration files are ignored.
38
+ */
39
+ async function collectProviderFiles(): Promise<string[]> {
40
+ const files: string[] = [];
41
+
42
+ if (fs.existsSync(providersPath)) {
43
+ const appFiles = await glob("**/*.{ts,js,mjs}", {
44
+ cwd: providersPath,
45
+ absolute: true,
46
+ nodir: true,
47
+ ignore: ["**/__tests__/**", "**/*.d.ts", "**/*.test.*", "**/*.spec.*"],
48
+ windowsPathsNoEscape: true
49
+ });
50
+ files.push(...appFiles);
51
+ }
52
+
53
+ try {
54
+ // A module plugs its own implementation in either from a single file
55
+ // (providers.ts) or from a folder (providers/*.ts). Both are imported.
56
+ const moduleFiles = await discoverModuleFiles("**/providers.{ts,js}");
57
+ const moduleProviderFiles = await discoverModuleFiles("**/providers/*.{ts,js}");
58
+ files.push(...moduleFiles, ...moduleProviderFiles);
59
+ } catch {}
60
+
61
+ return [...new Set(files)].sort();
62
+ }
63
+
64
+ /**
65
+ * Why: Imports each discovered provider file so its registration runs.
66
+ * When: The loader runs.
67
+ * Where: Provider loader.
68
+ * How: Imports in sorted order; a broken file is logged and skipped instead of
69
+ * taking the whole application down.
70
+ */
71
+ async function loadProviderFiles(): Promise<number> {
72
+ const files = await collectProviderFiles();
73
+
74
+ for (const file of files) {
75
+ try {
76
+ await import(pathToFileURL(file).href);
77
+ } catch (error) {
78
+ logger.warn("Provider file failed to load", {
79
+ file,
80
+ error: error instanceof Error ? error.message : String(error)
81
+ });
82
+ }
83
+ }
84
+
85
+ return files.length;
86
+ }
87
+
88
+ /**
89
+ * Why: Runs the application's provider files exactly once.
90
+ * When: The kernel boots, and on the first provider lookup.
91
+ * Where: Kernel startup and the auth provider adapter.
92
+ * How: Caches the promise so repeated lookups cost nothing. A provider file
93
+ * that itself asks for a provider during load gets an immediate answer
94
+ * instead of deadlocking on its own load.
95
+ */
96
+ export async function loadProviders(): Promise<number> {
97
+ if (loading) return 0;
98
+ if (!loadPromise) {
99
+ loading = true;
100
+ loadPromise = loadProviderFiles().finally(() => {
101
+ loading = false;
102
+ });
103
+ }
104
+ return loadPromise;
105
+ }
@@ -0,0 +1,88 @@
1
+ import {
2
+ AUTH_PROVIDER_KEY,
3
+ type AuthProvider,
4
+ NOTIFICATION_PROVIDER_KEY,
5
+ type NotificationProvider,
6
+ type ProviderKey
7
+ } from "./contracts.js";
8
+
9
+ /**
10
+ * Why: Holds the app-wide provider implementations in one place.
11
+ * When: A provider file in `src/providers/` (or a module's `providers.ts`)
12
+ * registers its implementation at boot.
13
+ * Where: Read by the framework through `resolve*Provider()` helpers.
14
+ * How: A plain key/value map. No container, no decorators, no auto-wiring.
15
+ */
16
+ const registry = new Map<string, unknown>();
17
+
18
+ /**
19
+ * Why: Registers a provider implementation under a key.
20
+ * When: A provider file runs at boot and claims a contract.
21
+ * Where: Application code, through the framework facade.
22
+ * How: Stores the implementation and returns it so it can be inlined.
23
+ */
24
+ export function registerProvider<T>(key: ProviderKey, implementation: T): T {
25
+ registry.set(key, implementation);
26
+ return implementation;
27
+ }
28
+
29
+ /** Returns the registered implementation for a key, or null when absent. */
30
+ export function getProvider<T = unknown>(key: ProviderKey): T | null {
31
+ const found = registry.get(key);
32
+ return (found as T) ?? null;
33
+ }
34
+
35
+ /** Reports whether a provider is registered for a key. */
36
+ export function hasProvider(key: ProviderKey): boolean {
37
+ return registry.has(key);
38
+ }
39
+
40
+ /** Removes a registered provider. Mainly useful in tests. */
41
+ export function clearProvider(key: ProviderKey): void {
42
+ registry.delete(key);
43
+ }
44
+
45
+ /** Lists every registered provider key, sorted for stable output. */
46
+ export function listProviders(): string[] {
47
+ return [...registry.keys()].sort();
48
+ }
49
+
50
+ /** Registers the auth provider that the framework's auth middleware uses. */
51
+ export function registerAuthProvider(provider: AuthProvider): AuthProvider {
52
+ return registerProvider(AUTH_PROVIDER_KEY, provider);
53
+ }
54
+
55
+ /** Returns the registered auth provider, or null when none was registered. */
56
+ export function getAuthProvider(): AuthProvider | null {
57
+ return getProvider<AuthProvider>(AUTH_PROVIDER_KEY);
58
+ }
59
+
60
+ /** Reports whether a custom auth provider is registered. */
61
+ export function hasAuthProvider(): boolean {
62
+ return hasProvider(AUTH_PROVIDER_KEY);
63
+ }
64
+
65
+ /** Removes the registered auth provider. Mainly useful in tests. */
66
+ export function clearAuthProvider(): void {
67
+ clearProvider(AUTH_PROVIDER_KEY);
68
+ }
69
+
70
+ /** Registers the storage provider `notify()` and `/api/notification/*` use. */
71
+ export function registerNotificationProvider(provider: NotificationProvider): NotificationProvider {
72
+ return registerProvider(NOTIFICATION_PROVIDER_KEY, provider);
73
+ }
74
+
75
+ /** Returns the registered notification provider, or null when none was registered. */
76
+ export function getNotificationProvider(): NotificationProvider | null {
77
+ return getProvider<NotificationProvider>(NOTIFICATION_PROVIDER_KEY);
78
+ }
79
+
80
+ /** Reports whether a notification provider is registered. */
81
+ export function hasNotificationProvider(): boolean {
82
+ return hasProvider(NOTIFICATION_PROVIDER_KEY);
83
+ }
84
+
85
+ /** Removes the registered notification provider. Mainly useful in tests. */
86
+ export function clearNotificationProvider(): void {
87
+ clearProvider(NOTIFICATION_PROVIDER_KEY);
88
+ }
@@ -0,0 +1,22 @@
1
+ import { clearQueue } from "@/framework/queue/queue.js";
2
+ import { closeRedis, initRedis, redisError, redisReady } from "@/framework/redis/client.js";
3
+ import { logger } from "@/framework/support/logger.js";
4
+
5
+ /**
6
+ * Why: Clears Redis queue keys used by BullMQ runtime.
7
+ * When: CLI executes `queue:clear` maintenance command.
8
+ * Where: Framework queue maintenance script.
9
+ * How: Initializes Redis, skips safely if unavailable, then deletes prefixed keys.
10
+ */
11
+ await initRedis();
12
+ if (!redisReady()) {
13
+ logger.warn("Queue clear skipped because Redis is unavailable", {
14
+ error: redisError()
15
+ });
16
+ process.exit(0);
17
+ }
18
+
19
+ await clearQueue();
20
+ console.log("Queue cleared");
21
+ await closeRedis();
22
+ process.exit(0);