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
@@ -3,13 +3,10 @@
3
3
  <div class="auth col-12 col-sm-9 col-md-7 col-lg-5 col-xl-4 mx-auto py-5">
4
4
  <div class="card card-body border-0">
5
5
  <div class="d-block mb-2 text-center">
6
- <img src="@/assets/images/logo.png" alt="nexwire" style="max-height: 60px;" />
6
+ <img src="@/assets/images/logo.png" alt="nexwire" style="max-height: 60px;">
7
7
  </div>
8
8
  <h4 class="text-center">Forget Password</h4>
9
- <p
10
- v-if="message"
11
- class="text-center alert py-1 mt-2"
12
- :class="isError ? 'alert-danger text-danger' : 'alert-success text-success'">
9
+ <p v-if="message" class="text-center alert py-1 mt-2" :class="isError ? 'alert-danger text-danger' : 'alert-success text-success'">
13
10
  {{ message }}
14
11
  </p>
15
12
  <form id="formAuthentication" @submit.prevent="onSubmit">
@@ -22,14 +19,10 @@
22
19
  placeholder="Enter your email..."
23
20
  :err="form.errors.email"
24
21
  focus
25
- must />
22
+ must
23
+ />
26
24
  </div>
27
- <Button
28
- type="submit"
29
- label="Send Reset Link"
30
- class="btn btn-primary w-100"
31
- icon="bi bi-send ms-2"
32
- :disabled="processing" />
25
+ <Button type="submit" label="Send Reset Link" class="btn btn-primary w-100" icon="bi bi-send ms-2" :disabled="processing" />
33
26
  </form>
34
27
  <div class="text-center mt-2">
35
28
  <router-link to="/login">
@@ -47,11 +40,14 @@ import { useHead } from "@unhead/vue";
47
40
  import { ref } from "vue";
48
41
  import Button from "@/components/Button.vue";
49
42
  import Input from "@/components/Input.vue";
50
- import { useGumForm } from "@/plugins/gum";
43
+ import { useGum } from "@/plugins/gum";
44
+ import { type ForgotPayload, useAuthStore } from "@/stores/auth";
51
45
 
52
46
  useHead({ title: "Forget Password" });
53
47
 
54
- const form = useGumForm({ email: "" });
48
+ const auth = useAuthStore();
49
+ const gum = useGum({ email: "" });
50
+ const form = gum.form;
55
51
  const processing = form.processing;
56
52
  const message = ref("");
57
53
  const isError = ref(false);
@@ -59,23 +55,21 @@ const isError = ref(false);
59
55
  const onSubmit = async () => {
60
56
  message.value = "";
61
57
  isError.value = false;
62
- await form.post(
63
- "/api/auth/forgot-password",
64
- {
65
- email: String(form.data.email || "").trim()
58
+ await form.postWith({
59
+ fetcher: (body) => auth.forgotPassword(body as ForgotPayload),
60
+ transform: (data) => ({
61
+ email: String(data.email || "").trim()
62
+ }),
63
+ onSuccess: (res) => {
64
+ isError.value = false;
65
+ message.value = String(res.data || "If this email exists, a reset link has been sent");
66
+ form.reset();
66
67
  },
67
- {
68
- onSuccess: (res) => {
69
- isError.value = false;
70
- message.value = res.data.message;
71
- form.reset();
72
- },
73
- onError: (_errors, error) => {
74
- isError.value = true;
75
- message.value = error instanceof Error ? error.message : "Failed to process request";
76
- }
68
+ onError: (_errors, error) => {
69
+ isError.value = true;
70
+ message.value = error instanceof Error ? error.message : "Failed to process request";
77
71
  }
78
- );
72
+ });
79
73
  };
80
74
  </script>
81
75
 
@@ -3,7 +3,7 @@
3
3
  <div class="auth col-12 col-sm-9 col-md-7 col-lg-5 col-xl-4 mx-auto py-5">
4
4
  <div class="card card-body border-0">
5
5
  <div class="d-block mb-2 text-center">
6
- <img src="@/assets/images/logo.png" alt="nexwire" style="max-height: 60px;" />
6
+ <img src="@/assets/images/logo.png" alt="nexwire" style="max-height: 60px;">
7
7
  </div>
8
8
  <p v-if="errorMessage" class="text-center alert alert-danger text-danger py-1 mt-2">
9
9
  {{ errorMessage }}
@@ -18,7 +18,8 @@
18
18
  placeholder="Enter your email..."
19
19
  :err="form.errors.email"
20
20
  focus
21
- must />
21
+ must
22
+ />
22
23
  </div>
23
24
  <div class="mb-4">
24
25
  <input-password-toggle
@@ -27,15 +28,14 @@
27
28
  label="password"
28
29
  placeholder="Enter your password..."
29
30
  :err="form.errors.password"
30
- must />
31
+ must
32
+ />
31
33
  </div>
32
34
  <div class="mb-4 d-flex align-items-center justify-content-between">
33
35
  <Checkbox id="remember-me" v-model="form.data.remember" label="Remember me" />
34
- <router-link to="/forget-password" class="text-decoration-none mb-1">Forget
35
- Password?</router-link>
36
+ <router-link to="/forget-password" class="text-decoration-none mb-1">Forget Password?</router-link>
36
37
  </div>
37
- <Button type="submit" class="btn btn-primary w-100" label="Login"
38
- icon="bi bi-box-arrow-in-right" :disabled="processing" />
38
+ <Button type="submit" class="btn btn-primary w-100" label="Login" icon="bi bi-box-arrow-in-right" :disabled="processing" />
39
39
  <div class="text-center mt-3">
40
40
  <span class="text-muted">Don't have an account?</span>
41
41
  <router-link to="/register" class="ms-1 text-decoration-none">Register</router-link>
@@ -50,12 +50,12 @@
50
50
  import { useHead } from "@unhead/vue";
51
51
  import { ref } from "vue";
52
52
  import { useRouter } from "vue-router";
53
+ import Button from "@/components/Button.vue";
53
54
  import Checkbox from "@/components/Checkbox.vue";
54
55
  import Input from "@/components/Input.vue";
55
56
  import InputPasswordToggle from "@/components/InputPasswordToggle.vue";
56
- import Button from "@/components/Button.vue";
57
- import { useGumForm } from "@/plugins/gum";
58
- import { useAuthStore } from "@/stores/auth";
57
+ import { useGum } from "@/plugins/gum";
58
+ import { type LoginPayload, useAuthStore } from "@/stores/auth";
59
59
 
60
60
  useHead({ title: "Login" });
61
61
 
@@ -63,36 +63,33 @@ const router = useRouter();
63
63
  const auth = useAuthStore();
64
64
  const errorMessage = ref("");
65
65
 
66
- const form = useGumForm({
66
+ const gum = useGum({
67
67
  email: "",
68
68
  password: "",
69
69
  remember: false
70
70
  });
71
71
 
72
+ const form = gum.form;
72
73
  const processing = form.processing;
73
74
 
74
75
  const onSubmit = async () => {
75
76
  errorMessage.value = "";
76
- await form.post(
77
- "/api/auth/login",
78
- {
79
- email: String(form.data.email || "").trim(),
80
- password: form.data.password,
81
- remember: !!form.data.remember
77
+ await form.postWith({
78
+ fetcher: (body) => auth.login(body as LoginPayload),
79
+ transform: (data) => ({
80
+ email: String(data.email || "").trim(),
81
+ password: data.password,
82
+ remember: !!data.remember
83
+ }),
84
+ onSuccess: async () => {
85
+ form.reset("password");
86
+ await router.push("/");
82
87
  },
83
- {
84
- onSuccess: async () => {
85
- auth.initialized = false;
86
- await auth.bootstrap();
87
- form.reset("password");
88
- await router.push("/");
89
- },
90
- onError: (_errors, error) => {
91
- errorMessage.value = error instanceof Error ? error.message : "Unable to login right now";
92
- form.reset("password");
93
- }
88
+ onError: (_errors, error) => {
89
+ errorMessage.value = error instanceof Error ? error.message : "Unable to login right now";
90
+ form.reset("password");
94
91
  }
95
- );
92
+ });
96
93
  };
97
94
  </script>
98
95
 
@@ -3,13 +3,10 @@
3
3
  <div class="auth col-12 col-sm-9 col-md-7 col-lg-5 col-xl-4 mx-auto py-5">
4
4
  <div class="card card-body border-0">
5
5
  <div class="d-block mb-2 text-center">
6
- <img src="@/assets/images/logo.png" alt="nexwire" style="max-height: 60px;" />
6
+ <img src="@/assets/images/logo.png" alt="nexwire" style="max-height: 60px;">
7
7
  </div>
8
8
  <h4 class="text-center">Create Account</h4>
9
- <p
10
- v-if="message"
11
- class="text-center alert py-1 mt-2"
12
- :class="isError ? 'alert-danger text-danger' : 'alert-success text-success'">
9
+ <p v-if="message" class="text-center alert py-1 mt-2" :class="isError ? 'alert-danger text-danger' : 'alert-success text-success'">
13
10
  {{ message }}
14
11
  </p>
15
12
  <form @submit.prevent="onSubmit">
@@ -22,7 +19,8 @@
22
19
  placeholder="Enter your name..."
23
20
  :err="form.errors.name"
24
21
  focus
25
- must />
22
+ must
23
+ />
26
24
  </div>
27
25
  <div class="mb-4">
28
26
  <Input
@@ -32,7 +30,8 @@
32
30
  label="email"
33
31
  placeholder="Enter your email..."
34
32
  :err="form.errors.email"
35
- must />
33
+ must
34
+ />
36
35
  </div>
37
36
  <div class="mb-4">
38
37
  <InputPasswordToggle
@@ -41,7 +40,8 @@
41
40
  label="password"
42
41
  placeholder="Create a password..."
43
42
  :err="form.errors.password"
44
- must />
43
+ must
44
+ />
45
45
  </div>
46
46
  <div class="mb-4">
47
47
  <InputPasswordToggle
@@ -50,10 +50,10 @@
50
50
  label="confirm password"
51
51
  placeholder="Confirm your password..."
52
52
  :err="form.errors.password_confirmation"
53
- must />
53
+ must
54
+ />
54
55
  </div>
55
- <Button type="submit" class="btn btn-primary w-100" label="Create Account"
56
- icon="bi bi-person-plus" :disabled="processing" />
56
+ <Button type="submit" class="btn btn-primary w-100" label="Create Account" icon="bi bi-person-plus" :disabled="processing" />
57
57
  </form>
58
58
  <div class="text-center mt-3">
59
59
  <span class="text-muted">Already have an account?</span>
@@ -68,24 +68,25 @@
68
68
  import { useHead } from "@unhead/vue";
69
69
  import { ref } from "vue";
70
70
  import { useRouter } from "vue-router";
71
+ import Button from "@/components/Button.vue";
71
72
  import Input from "@/components/Input.vue";
72
73
  import InputPasswordToggle from "@/components/InputPasswordToggle.vue";
73
- import Button from "@/components/Button.vue";
74
- import { useGumForm } from "@/plugins/gum";
75
- import { useAuthStore } from "@/stores/auth";
74
+ import { useGum } from "@/plugins/gum";
75
+ import { type RegisterPayload, useAuthStore } from "@/stores/auth";
76
76
 
77
77
  useHead({ title: "Register" });
78
78
 
79
79
  const router = useRouter();
80
80
  const auth = useAuthStore();
81
81
 
82
- const form = useGumForm({
82
+ const gum = useGum({
83
83
  name: "",
84
84
  email: "",
85
85
  password: "",
86
86
  password_confirmation: ""
87
87
  });
88
88
 
89
+ const form = gum.form;
89
90
  const processing = form.processing;
90
91
  const message = ref("");
91
92
  const isError = ref(false);
@@ -100,33 +101,28 @@ const onSubmit = async () => {
100
101
  return;
101
102
  }
102
103
 
103
- await form.post(
104
- "/api/auth/register",
105
- {
106
- name: String(form.data.name || "").trim(),
107
- email: String(form.data.email || "").trim(),
108
- password: form.data.password,
109
- password_confirmation: form.data.password_confirmation
110
- },
111
- {
112
- onSuccess: async () => {
113
- auth.initialized = false;
114
- await auth.bootstrap();
115
-
116
- if (auth.isAuthenticated) {
117
- await router.push("/");
118
- return;
119
- }
120
-
121
- message.value = "Registration successful. Please verify your email.";
122
- form.reset();
123
- },
124
- onError: (_errors, error) => {
125
- isError.value = true;
126
- message.value = error instanceof Error ? error.message : "Unable to register right now";
104
+ await form.postWith({
105
+ fetcher: (body) => auth.register(body as RegisterPayload),
106
+ transform: (data) => ({
107
+ name: String(data.name || "").trim(),
108
+ email: String(data.email || "").trim(),
109
+ password: data.password,
110
+ password_confirmation: data.password_confirmation
111
+ }),
112
+ onSuccess: async () => {
113
+ if (auth.isAuthenticated) {
114
+ await router.push("/");
115
+ return;
127
116
  }
117
+
118
+ message.value = "Registration successful. Please verify your email.";
119
+ form.reset();
120
+ },
121
+ onError: (_errors, error) => {
122
+ isError.value = true;
123
+ message.value = error instanceof Error ? error.message : "Unable to register right now";
128
124
  }
129
- );
125
+ });
130
126
  };
131
127
  </script>
132
128
 
@@ -3,19 +3,13 @@
3
3
  <div class="auth col-12 col-sm-9 col-md-7 col-lg-5 col-xl-4 mx-auto py-5">
4
4
  <div class="card card-body border-0">
5
5
  <div class="d-block mb-2 text-center">
6
- <img src="@/assets/images/logo.png" alt="nexwire" style="max-height: 60px;" />
6
+ <img src="@/assets/images/logo.png" alt="nexwire" style="max-height: 60px;">
7
7
  </div>
8
8
  <h4 class="text-center">Reset Password</h4>
9
- <p
10
- v-if="message"
11
- class="text-center alert py-1 mt-2"
12
- :class="isError ? 'alert-danger text-danger' : 'alert-success text-success'">
9
+ <p v-if="message" class="text-center alert py-1 mt-2" :class="isError ? 'alert-danger text-danger' : 'alert-success text-success'">
13
10
  {{ message }}
14
11
  </p>
15
- <form
16
- id="formAuthentication"
17
- :class="{ 'pe-none opacity-50': !isLinkValid }"
18
- @submit.prevent="onSubmit">
12
+ <form id="formAuthentication" :class="{ 'pe-none opacity-50': !isLinkValid }" @submit.prevent="onSubmit">
19
13
  <div class="mb-4">
20
14
  <input-password-toggle
21
15
  id="password"
@@ -23,7 +17,8 @@
23
17
  label="new password"
24
18
  placeholder="Enter your password..."
25
19
  :err="form.errors.password"
26
- must />
20
+ must
21
+ />
27
22
  </div>
28
23
  <div class="mb-4">
29
24
  <input-password-toggle
@@ -32,14 +27,10 @@
32
27
  label="confirm password"
33
28
  placeholder="Confirm new password..."
34
29
  :err="form.errors.password_confirmation"
35
- must />
30
+ must
31
+ />
36
32
  </div>
37
- <Button
38
- type="submit"
39
- label="Reset Password"
40
- class="btn btn-primary w-100"
41
- icon="bi bi-key ms-2"
42
- :disabled="processing" />
33
+ <Button type="submit" label="Reset Password" class="btn btn-primary w-100" icon="bi bi-key ms-2" :disabled="processing" />
43
34
  </form>
44
35
  <div class="text-center mt-2">
45
36
  <router-link to="/login">
@@ -58,23 +49,26 @@ import { ref } from "vue";
58
49
  import { useRoute, useRouter } from "vue-router";
59
50
  import Button from "@/components/Button.vue";
60
51
  import InputPasswordToggle from "@/components/InputPasswordToggle.vue";
61
- import { useGumForm } from "@/plugins/gum";
52
+ import { useGum } from "@/plugins/gum";
53
+ import { type ResetPayload, useAuthStore } from "@/stores/auth";
62
54
 
63
55
  useHead({ title: "Reset Password" });
64
56
 
65
57
  const route = useRoute();
66
58
  const router = useRouter();
59
+ const auth = useAuthStore();
67
60
 
68
61
  const email = String(route.query.email || "");
69
62
  const token = String(route.query.token || "");
70
63
 
71
- const form = useGumForm({
64
+ const gum = useGum({
72
65
  email,
73
66
  token,
74
67
  password: "",
75
68
  password_confirmation: ""
76
69
  });
77
70
 
71
+ const form = gum.form;
78
72
  const processing = form.processing;
79
73
  const isLinkValid = !!(token && email);
80
74
  const message = ref(isLinkValid ? "Set your new password" : "Invalid reset link. Please request a new one.");
@@ -92,26 +86,24 @@ const onSubmit = async () => {
92
86
  return;
93
87
  }
94
88
 
95
- await form.post(
96
- "/api/auth/reset-password",
97
- {
98
- email: String(form.data.email || "").trim(),
99
- token: String(form.data.token || "").trim(),
100
- password: form.data.password,
101
- password_confirmation: form.data.password_confirmation
89
+ await form.postWith({
90
+ fetcher: (body) => auth.resetPassword(body as ResetPayload),
91
+ transform: (data) => ({
92
+ email: String(data.email || "").trim(),
93
+ token: String(data.token || "").trim(),
94
+ password: data.password,
95
+ password_confirmation: data.password_confirmation
96
+ }),
97
+ onSuccess: (res) => {
98
+ isError.value = false;
99
+ message.value = String(res.data || "Password reset successfully");
100
+ void router.push("/login");
102
101
  },
103
- {
104
- onSuccess: (res) => {
105
- isError.value = false;
106
- message.value = res.data.message;
107
- router.push("/login");
108
- },
109
- onError: (_errors, error) => {
110
- isError.value = true;
111
- message.value = error instanceof Error ? error.message : "Failed to reset password";
112
- }
102
+ onError: (_errors, error) => {
103
+ isError.value = true;
104
+ message.value = error instanceof Error ? error.message : "Failed to reset password";
113
105
  }
114
- );
106
+ });
115
107
  };
116
108
  </script>
117
109
 
@@ -3,13 +3,10 @@
3
3
  <div class="auth col-12 col-sm-9 col-md-7 col-lg-5 col-xl-4 mx-auto py-5">
4
4
  <div class="card card-body border-0">
5
5
  <div class="d-block mb-2 text-center">
6
- <img src="@/assets/images/logo.png" alt="nexwire" style="max-height: 60px;" />
6
+ <img src="@/assets/images/logo.png" alt="nexwire" style="max-height: 60px;">
7
7
  </div>
8
8
  <h4 class="text-center">Email Verification</h4>
9
- <p
10
- v-if="message"
11
- class="text-center alert py-2 mt-2"
12
- :class="isError ? 'alert-danger text-danger' : 'alert-success text-success'">
9
+ <p v-if="message" class="text-center alert py-2 mt-2" :class="isError ? 'alert-danger text-danger' : 'alert-success text-success'">
13
10
  {{ message }}
14
11
  </p>
15
12
  <div class="text-center mt-2">
@@ -27,17 +24,19 @@ import { useHead } from "@unhead/vue";
27
24
  import { ref } from "vue";
28
25
  import { useRoute } from "vue-router";
29
26
  import { useGum } from "@/plugins/gum";
27
+ import { useAuthStore } from "@/stores/auth";
30
28
 
31
29
  useHead({ title: "Verify Email" });
32
30
 
33
31
  const route = useRoute();
32
+ const auth = useAuthStore();
34
33
 
35
34
  const email = String(route.query.email || "").trim();
36
35
  const token = String(route.query.token || "").trim();
37
36
  const message = ref("Verifying your email...");
38
37
  const isError = ref(false);
39
38
 
40
- const { post } = useGum();
39
+ const gum = useGum();
41
40
 
42
41
  const verify = async () => {
43
42
  if (!email || !token) {
@@ -46,20 +45,17 @@ const verify = async () => {
46
45
  return;
47
46
  }
48
47
 
49
- await post(
50
- "/api/auth/verify-email",
51
- { email, token },
52
- {
53
- onSuccess: () => {
54
- isError.value = false;
55
- message.value = "Email verified successfully. You can now login.";
56
- },
57
- onError: (_errors, error) => {
58
- isError.value = true;
59
- message.value = error instanceof Error ? error.message : "Failed to verify email";
60
- }
48
+ await gum.postWith({
49
+ fetcher: () => auth.verifyEmail({ email, token }),
50
+ onSuccess: (res) => {
51
+ isError.value = false;
52
+ message.value = String(res.data || "Email verified successfully. You can now login.");
53
+ },
54
+ onError: (_errors, error) => {
55
+ isError.value = true;
56
+ message.value = error instanceof Error ? error.message : "Failed to verify email";
61
57
  }
62
- );
58
+ });
63
59
  };
64
60
 
65
61
  void verify();