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,74 @@
1
+ import type { FastifyReply, FastifyRequest } from "fastify";
2
+ import { HttpStatusCodes } from "@/framework/facade.js";
3
+ import { {{ServiceName}} } from "@/modules/{{module}}/services/{{controller}}.js";
4
+
5
+ type IdRequest = FastifyRequest<{ Params: { id: number } }>;
6
+ type BodyRequest = FastifyRequest<{ Body: Record<string, unknown> }>;
7
+ type UpdateRequest = FastifyRequest<{ Params: { id: number }; Body: Record<string, unknown> }>;
8
+
9
+ /**
10
+ * Why: Returns every {{controller}} row for list screens.
11
+ * When: Used by GET list endpoint.
12
+ * Where: GET /{{controller}} route.
13
+ */
14
+ export const index = async (_request: FastifyRequest, reply: FastifyReply) => {
15
+ const data = await {{ServiceName}}.list();
16
+
17
+ return reply.code(HttpStatusCodes.OK).send({ message: "{{controller}} list fetched successfully", data });
18
+ };
19
+
20
+ /**
21
+ * Why: Returns one {{controller}} row by validated route id.
22
+ * When: Used by detail screens or fetch-by-id calls.
23
+ * Where: GET /{{controller}}/:id route.
24
+ */
25
+ export const show = async (request: IdRequest, reply: FastifyReply) => {
26
+ const data = await {{ServiceName}}.findOne(request.params.id);
27
+
28
+ if (!data) {
29
+ return reply.code(HttpStatusCodes.NOT_FOUND).send({ message: "{{controller}} not found" });
30
+ }
31
+
32
+ return reply.code(HttpStatusCodes.OK).send({ message: "{{controller}} fetched successfully", data });
33
+ };
34
+
35
+ /**
36
+ * Why: Creates a new {{controller}} row from a validated request body.
37
+ * When: Used by create form submissions.
38
+ * Where: POST /{{controller}} route.
39
+ */
40
+ export const store = async (request: BodyRequest, reply: FastifyReply) => {
41
+ const data = await {{ServiceName}}.create(request.body);
42
+
43
+ return reply.code(HttpStatusCodes.CREATED).send({ message: "{{controller}} created successfully", data });
44
+ };
45
+
46
+ /**
47
+ * Why: Updates an existing {{controller}} row using id + body validation.
48
+ * When: Used by edit/update form submissions.
49
+ * Where: PUT/PATCH /{{controller}}/:id route.
50
+ */
51
+ export const update = async (request: UpdateRequest, reply: FastifyReply) => {
52
+ const data = await {{ServiceName}}.update(request.params.id, request.body);
53
+
54
+ if (!data) {
55
+ return reply.code(HttpStatusCodes.NOT_FOUND).send({ message: "{{controller}} not found" });
56
+ }
57
+
58
+ return reply.code(HttpStatusCodes.OK).send({ message: "{{controller}} updated successfully", data });
59
+ };
60
+
61
+ /**
62
+ * Why: Deletes one {{controller}} row by validated route id.
63
+ * When: Used by delete actions.
64
+ * Where: DELETE /{{controller}}/:id route.
65
+ */
66
+ export const destroy = async (request: IdRequest, reply: FastifyReply) => {
67
+ const data = await {{ServiceName}}.remove(request.params.id);
68
+
69
+ if (!data) {
70
+ return reply.code(HttpStatusCodes.NOT_FOUND).send({ message: "{{controller}} not found" });
71
+ }
72
+
73
+ return reply.code(HttpStatusCodes.OK).send({ message: "{{controller}} deleted successfully" });
74
+ };
@@ -0,0 +1,77 @@
1
+ import type { FastifyReply, FastifyRequest } from "fastify";
2
+ import { HttpStatusCodes } from "@/framework/facade.js";
3
+ import { validate } from "@/framework/facade.js";
4
+ import { Create{{ClassName}}Schema, Update{{ClassName}}Schema, {{ClassName}}IdParamsSchema } from "@/modules/{{module}}/schemas/{{controller}}.js";
5
+ import { {{ServiceName}} } from "@/modules/{{module}}/services/{{controller}}.js";
6
+
7
+ /**
8
+ * Why: Returns every {{controller}} row for list screens.
9
+ * When: Used by GET list endpoint.
10
+ * Where: GET /{{controller}} route.
11
+ */
12
+ export const index = async (_request: FastifyRequest, reply: FastifyReply) => {
13
+ const data = await {{ServiceName}}.list();
14
+
15
+ return reply.code(HttpStatusCodes.OK).send({ message: "{{controller}} list fetched successfully", data });
16
+ };
17
+
18
+ /**
19
+ * Why: Returns one {{controller}} row by validated route id.
20
+ * When: Used by detail screens or fetch-by-id calls.
21
+ * Where: GET /{{controller}}/:id route.
22
+ */
23
+ export const show = async (request: FastifyRequest, reply: FastifyReply) => {
24
+ const params = await validate({{ClassName}}IdParamsSchema, request.params);
25
+ const data = await {{ServiceName}}.findOne(params.id);
26
+
27
+ if (!data) {
28
+ return reply.code(HttpStatusCodes.NOT_FOUND).send({ message: "{{controller}} not found" });
29
+ }
30
+
31
+ return reply.code(HttpStatusCodes.OK).send({ message: "{{controller}} fetched successfully", data });
32
+ };
33
+
34
+ /**
35
+ * Why: Creates a new {{controller}} row from a validated request body.
36
+ * When: Used by create form submissions.
37
+ * Where: POST /{{controller}} route.
38
+ */
39
+ export const store = async (request: FastifyRequest, reply: FastifyReply) => {
40
+ const body = await validate(Create{{ClassName}}Schema, request.body);
41
+ const data = await {{ServiceName}}.create(body);
42
+
43
+ return reply.code(HttpStatusCodes.CREATED).send({ message: "{{controller}} created successfully", data });
44
+ };
45
+
46
+ /**
47
+ * Why: Updates an existing {{controller}} row using id + body validation.
48
+ * When: Used by edit/update form submissions.
49
+ * Where: PUT/PATCH /{{controller}}/:id route.
50
+ */
51
+ export const update = async (request: FastifyRequest, reply: FastifyReply) => {
52
+ const params = await validate({{ClassName}}IdParamsSchema, request.params);
53
+ const body = await validate(Update{{ClassName}}Schema, request.body);
54
+ const data = await {{ServiceName}}.update(params.id, body);
55
+
56
+ if (!data) {
57
+ return reply.code(HttpStatusCodes.NOT_FOUND).send({ message: "{{controller}} not found" });
58
+ }
59
+
60
+ return reply.code(HttpStatusCodes.OK).send({ message: "{{controller}} updated successfully", data });
61
+ };
62
+
63
+ /**
64
+ * Why: Deletes one {{controller}} row by validated route id.
65
+ * When: Used by delete actions.
66
+ * Where: DELETE /{{controller}}/:id route.
67
+ */
68
+ export const destroy = async (request: FastifyRequest, reply: FastifyReply) => {
69
+ const params = await validate({{ClassName}}IdParamsSchema, request.params);
70
+ const data = await {{ServiceName}}.remove(params.id);
71
+
72
+ if (!data) {
73
+ return reply.code(HttpStatusCodes.NOT_FOUND).send({ message: "{{controller}} not found" });
74
+ }
75
+
76
+ return reply.code(HttpStatusCodes.OK).send({ message: "{{controller}} deleted successfully" });
77
+ };
@@ -0,0 +1,51 @@
1
+ import type { FastifyReply, FastifyRequest } from "fastify";
2
+ import { HttpStatusCodes } from "@/framework/facade.js";
3
+
4
+ type IdRequest = FastifyRequest<{ Params: { id: number } }>;
5
+
6
+ /**
7
+ * Why: Returns collection response shape for list pages.
8
+ * When: Used by GET list endpoint.
9
+ * Where: GET /{{controller}} route.
10
+ */
11
+ export const index = async (_request: FastifyRequest, reply: FastifyReply) => {
12
+ return reply.code(HttpStatusCodes.OK).send({ message: "{{controller}} list fetched successfully", data: [] });
13
+ };
14
+
15
+ /**
16
+ * Why: Returns one resource by validated route id.
17
+ * When: Used by detail screens or fetch-by-id calls.
18
+ * Where: GET /{{controller}}/:id route.
19
+ */
20
+ export const show = async (request: IdRequest, reply: FastifyReply) => {
21
+ return reply
22
+ .code(HttpStatusCodes.OK)
23
+ .send({ message: "{{controller}} fetched successfully", data: { id: request.params.id, name: "" } });
24
+ };
25
+
26
+ /**
27
+ * Why: Creates a new resource from validated request body.
28
+ * When: Used by create form submissions.
29
+ * Where: POST /{{controller}} route.
30
+ */
31
+ export const store = async (_request: FastifyRequest, reply: FastifyReply) => {
32
+ return reply.code(HttpStatusCodes.CREATED).send({ message: "{{controller}} created successfully" });
33
+ };
34
+
35
+ /**
36
+ * Why: Updates an existing resource using id + body validation.
37
+ * When: Used by edit/update form submissions.
38
+ * Where: PUT/PATCH /{{controller}}/:id route.
39
+ */
40
+ export const update = async (_request: FastifyRequest, reply: FastifyReply) => {
41
+ return reply.code(HttpStatusCodes.OK).send({ message: "{{controller}} updated successfully" });
42
+ };
43
+
44
+ /**
45
+ * Why: Deletes one resource by validated route id.
46
+ * When: Used by delete actions.
47
+ * Where: DELETE /{{controller}}/:id route.
48
+ */
49
+ export const destroy = async (_request: FastifyRequest, reply: FastifyReply) => {
50
+ return reply.code(HttpStatusCodes.OK).send({ message: "{{controller}} deleted successfully" });
51
+ };
@@ -0,0 +1,52 @@
1
+ ARG BUN_VERSION=1.4.0
2
+ FROM oven/bun:${BUN_VERSION}-slim AS builder
3
+
4
+ WORKDIR /app
5
+
6
+ ENV APP_URL=http://localhost:3000
7
+ ARG UI=true
8
+ ENV UI=${UI}
9
+
10
+ RUN apt-get update && apt-get install -y --no-install-recommends \
11
+ ca-certificates \
12
+ python3 \
13
+ make \
14
+ g++ \
15
+ && rm -rf /var/lib/apt/lists/*
16
+
17
+ COPY package.json bun.lockb* bun.lock* package-lock.json* ./
18
+ RUN bun install --frozen-lockfile
19
+
20
+ COPY . .
21
+ RUN cp deploy/.env .env || true
22
+ RUN bun src/framework/maker-cli/index.mjs db:schema
23
+ RUN bun run build
24
+
25
+ FROM oven/bun:${BUN_VERSION}-slim AS runner
26
+
27
+ WORKDIR /app
28
+
29
+ ENV NODE_ENV=production
30
+ ENV APP_URL=http://localhost:3000
31
+
32
+ RUN apt-get update && apt-get install -y --no-install-recommends \
33
+ supervisor \
34
+ ca-certificates \
35
+ && rm -rf /var/lib/apt/lists/*
36
+
37
+ COPY --from=builder /app/node_modules ./node_modules
38
+ COPY --from=builder /app/package.json ./package.json
39
+ COPY --from=builder /app/drizzle.config.ts ./drizzle.config.ts
40
+ COPY --from=builder /app/tsconfig.json ./tsconfig.json
41
+ COPY --from=builder /app/dist ./dist
42
+ COPY --from=builder /app/public ./public
43
+ COPY --from=builder /app/src ./src
44
+ COPY --from=builder /app/deploy/scripts ./deploy/scripts
45
+ COPY --from=builder /app/deploy/.env ./.env
46
+
47
+ COPY deploy/supervisor/supervisord.conf /etc/supervisor/conf.d/supervisord.conf
48
+
49
+ EXPOSE 3000
50
+
51
+ CMD ["/usr/bin/supervisord", "-c", "/etc/supervisor/conf.d/supervisord.conf"]
52
+
@@ -0,0 +1,55 @@
1
+ ARG NODE_VERSION=24
2
+ FROM node:${NODE_VERSION}-bookworm-slim AS builder
3
+
4
+ ARG PNPM_VERSION=10.33.2
5
+ ARG UI=true
6
+ ENV UI=${UI}
7
+
8
+ WORKDIR /app
9
+
10
+ ENV APP_URL=http://localhost:3000
11
+
12
+ RUN apt-get update && apt-get install -y --no-install-recommends \
13
+ ca-certificates \
14
+ python3 \
15
+ make \
16
+ g++ \
17
+ && rm -rf /var/lib/apt/lists/*
18
+
19
+ RUN corepack enable && corepack prepare pnpm@${PNPM_VERSION} --activate
20
+
21
+ COPY package.json pnpm-lock.yaml* ./
22
+ RUN if [ -f pnpm-lock.yaml ]; then pnpm install --frozen-lockfile; else pnpm install --no-frozen-lockfile; fi
23
+
24
+ COPY . .
25
+ RUN node src/framework/maker-cli/index.mjs db:schema
26
+ RUN pnpm run build
27
+
28
+ FROM node:${NODE_VERSION}-bookworm-slim AS runner
29
+
30
+ WORKDIR /app
31
+
32
+ ENV NODE_ENV=production
33
+ ENV APP_URL=http://localhost:3000
34
+
35
+ RUN apt-get update && apt-get install -y --no-install-recommends \
36
+ supervisor \
37
+ ca-certificates \
38
+ && rm -rf /var/lib/apt/lists/*
39
+
40
+ COPY --from=builder /app/node_modules ./node_modules
41
+ COPY --from=builder /app/package.json ./package.json
42
+ COPY --from=builder /app/drizzle.config.ts ./drizzle.config.ts
43
+ COPY --from=builder /app/tsconfig.json ./tsconfig.json
44
+ COPY --from=builder /app/dist ./dist
45
+ COPY --from=builder /app/public ./public
46
+ COPY --from=builder /app/src ./src
47
+ COPY --from=builder /app/deploy/scripts ./deploy/scripts
48
+ COPY --from=builder /app/deploy/.env ./.env
49
+
50
+ COPY deploy/supervisor/supervisord.conf /etc/supervisor/conf.d/supervisord.conf
51
+
52
+ EXPOSE 3000
53
+
54
+ CMD ["/usr/bin/supervisord", "-c", "/etc/supervisor/conf.d/supervisord.conf"]
55
+
@@ -0,0 +1,51 @@
1
+ ARG NODE_VERSION=24
2
+ FROM node:${NODE_VERSION}-bookworm-slim AS builder
3
+
4
+ WORKDIR /app
5
+
6
+ ENV APP_URL=http://localhost:3000
7
+ ARG UI=true
8
+ ENV UI=${UI}
9
+
10
+ RUN apt-get update && apt-get install -y --no-install-recommends \
11
+ ca-certificates \
12
+ python3 \
13
+ make \
14
+ g++ \
15
+ && rm -rf /var/lib/apt/lists/*
16
+
17
+ COPY package.json package-lock.json* ./
18
+ RUN if [ -f package-lock.json ]; then npm ci --legacy-peer-deps || npm install --legacy-peer-deps; else npm install --legacy-peer-deps; fi
19
+
20
+ COPY . .
21
+ RUN node src/framework/maker-cli/index.mjs db:schema
22
+ RUN npm run build
23
+
24
+ FROM node:${NODE_VERSION}-bookworm-slim AS runner
25
+
26
+ WORKDIR /app
27
+
28
+ ENV NODE_ENV=production
29
+ ENV APP_URL=http://localhost:3000
30
+
31
+ RUN apt-get update && apt-get install -y --no-install-recommends \
32
+ supervisor \
33
+ ca-certificates \
34
+ && rm -rf /var/lib/apt/lists/*
35
+
36
+ COPY --from=builder /app/node_modules ./node_modules
37
+ COPY --from=builder /app/package.json ./package.json
38
+ COPY --from=builder /app/drizzle.config.ts ./drizzle.config.ts
39
+ COPY --from=builder /app/tsconfig.json ./tsconfig.json
40
+ COPY --from=builder /app/dist ./dist
41
+ COPY --from=builder /app/public ./public
42
+ COPY --from=builder /app/src ./src
43
+ COPY --from=builder /app/deploy/scripts ./deploy/scripts
44
+ COPY --from=builder /app/deploy/.env ./.env
45
+
46
+ COPY deploy/supervisor/supervisord.conf /etc/supervisor/conf.d/supervisord.conf
47
+
48
+ EXPOSE 3000
49
+
50
+ CMD ["/usr/bin/supervisord", "-c", "/etc/supervisor/conf.d/supervisord.conf"]
51
+
@@ -0,0 +1,55 @@
1
+ ARG NODE_VERSION=24
2
+ FROM node:${NODE_VERSION}-bookworm-slim AS builder
3
+
4
+ ARG YARN_VERSION=1.22.22
5
+ ARG UI=true
6
+ ENV UI=${UI}
7
+
8
+ WORKDIR /app
9
+
10
+ ENV APP_URL=http://localhost:3000
11
+
12
+ RUN apt-get update && apt-get install -y --no-install-recommends \
13
+ ca-certificates \
14
+ python3 \
15
+ make \
16
+ g++ \
17
+ && rm -rf /var/lib/apt/lists/*
18
+
19
+ RUN corepack enable && corepack prepare yarn@${YARN_VERSION} --activate
20
+
21
+ COPY package.json yarn.lock* ./
22
+ RUN yarn install --immutable
23
+
24
+ COPY . .
25
+ RUN node src/framework/maker-cli/index.mjs db:schema
26
+ RUN yarn build
27
+
28
+ FROM node:${NODE_VERSION}-bookworm-slim AS runner
29
+
30
+ WORKDIR /app
31
+
32
+ ENV NODE_ENV=production
33
+ ENV APP_URL=http://localhost:3000
34
+
35
+ RUN apt-get update && apt-get install -y --no-install-recommends \
36
+ supervisor \
37
+ ca-certificates \
38
+ && rm -rf /var/lib/apt/lists/*
39
+
40
+ COPY --from=builder /app/node_modules ./node_modules
41
+ COPY --from=builder /app/package.json ./package.json
42
+ COPY --from=builder /app/drizzle.config.ts ./drizzle.config.ts
43
+ COPY --from=builder /app/tsconfig.json ./tsconfig.json
44
+ COPY --from=builder /app/dist ./dist
45
+ COPY --from=builder /app/public ./public
46
+ COPY --from=builder /app/src ./src
47
+ COPY --from=builder /app/deploy/scripts ./deploy/scripts
48
+ COPY --from=builder /app/deploy/.env ./.env
49
+
50
+ COPY deploy/supervisor/supervisord.conf /etc/supervisor/conf.d/supervisord.conf
51
+
52
+ EXPOSE 3000
53
+
54
+ CMD ["/usr/bin/supervisord", "-c", "/etc/supervisor/conf.d/supervisord.conf"]
55
+
@@ -0,0 +1,59 @@
1
+ # Deploy
2
+
3
+ Generated from current project .env.
4
+
5
+ - Database mode: {{DATABASE_MODE}}
6
+ - Redis enabled: {{REDIS_STATUS}}
7
+ - Runtime: {{RUNTIME_NAME}}
8
+
9
+ ## Prerequisites
10
+
11
+ - External docker networks exist:
12
+
13
+ ```bash
14
+ docker network create nginx-proxy || true
15
+ docker network create infra || true
16
+ ```
17
+
18
+ - Proxy stack from `server-setup` is running (jwilder + letsencrypt companion).
19
+
20
+ ## Start app stack
21
+
22
+ ```bash
23
+ docker compose --env-file deploy/server/.env --env-file deploy/.env -f deploy/docker-compose.yml up -d --build
24
+ ```
25
+
26
+ Equivalent maker command:
27
+
28
+ ```bash
29
+ bun maker deploy:workflow --app-only
30
+ ```
31
+
32
+ ## DB Import
33
+
34
+ Import SQL dump into local Docker container (auto-detects MySQL or PostgreSQL):
35
+
36
+ ```bash
37
+ bun maker deploy:db:import --file=deploy/nexwire.sql --database=nexwire
38
+ ```
39
+
40
+ PostgreSQL restores into a fresh database by default (drops and recreates the
41
+ target database first). Pass `--no-drop` to keep the existing database.
42
+
43
+ Import SQL dump into remote Docker container (auto-detects MySQL or PostgreSQL):
44
+
45
+ ```bash
46
+ bun maker deploy:db:import:remote --config=deploy/workflow.remote.json --file=deploy/nexwire.sql --database=nexwire
47
+ ```
48
+
49
+ ## Runtime
50
+
51
+ Supervisor starts:
52
+
53
+ - API: `maker serve --prod --runtime={{RUNTIME_NAME}}`
54
+ {{QUEUE_LINE}}- Scheduler: `maker schedule:work --prod --runtime={{RUNTIME_NAME}}`
55
+
56
+ {{REDIS_NOTE}}
57
+
58
+ This deploy style follows `server-setup` and `statistic_postgre` patterns (external `nginx-proxy` + `infra` networks).
59
+
@@ -0,0 +1,45 @@
1
+ name: ${COMPOSE_PROJECT_NAME:-nexwire}
2
+
3
+ services:
4
+ app:
5
+ build:
6
+ context: ..
7
+ dockerfile: deploy/Dockerfile
8
+ args:
9
+ UI: ${UI}
10
+ container_name: ${APP_NAME:-nexwire}-app
11
+ restart: unless-stopped
12
+ working_dir: /app
13
+ ports:
14
+ - "${APP_PORT:-3000}:3000"
15
+ expose:
16
+ - "3000"
17
+ env_file:
18
+ - .env
19
+ environment:
20
+ APP_ENV: production
21
+ APP_PORT: 3000
22
+ APP_URL: ${APP_URL:-http://localhost:3000}
23
+ DATABASE_URL: ${DATABASE_URL}
24
+ {{REDIS_ENV_LINE}} APP_HOST: ${APP_HOST:-localhost}
25
+ VIRTUAL_HOST: ${VIRTUAL_HOST:-}
26
+ VIRTUAL_PORT: ${VIRTUAL_PORT:-3000}
27
+ LETSENCRYPT_HOST: ${LETSENCRYPT_HOST:-}
28
+ LETSENCRYPT_EMAIL: ${LETSENCRYPT_EMAIL:-}
29
+ volumes:
30
+ - app-storage:/app/src/storage
31
+ networks:
32
+ - infra
33
+ - nginx-proxy
34
+
35
+ volumes:
36
+ app-storage:
37
+
38
+ networks:
39
+ infra:
40
+ external: true
41
+ name: infra
42
+ nginx-proxy:
43
+ external: true
44
+ name: nginx-proxy
45
+
@@ -0,0 +1,45 @@
1
+ name: ${COMPOSE_PROJECT_NAME:-nexwire}
2
+
3
+ services:
4
+ app:
5
+ build:
6
+ context: ..
7
+ dockerfile: deploy/Dockerfile
8
+ args:
9
+ UI: ${UI}
10
+ container_name: ${APP_NAME:-nexwire}-app
11
+ restart: unless-stopped
12
+ working_dir: /app
13
+ ports:
14
+ - "${APP_PORT:-3000}:3000"
15
+ expose:
16
+ - "3000"
17
+ env_file:
18
+ - .env
19
+ environment:
20
+ APP_ENV: production
21
+ APP_PORT: 3000
22
+ APP_URL: ${APP_URL:-http://localhost:3000}
23
+ DATABASE_URL: ${DATABASE_URL}
24
+ {{REDIS_ENV_LINE}} APP_HOST: ${APP_HOST:-localhost}
25
+ VIRTUAL_HOST: ${VIRTUAL_HOST:-}
26
+ VIRTUAL_PORT: ${VIRTUAL_PORT:-3000}
27
+ LETSENCRYPT_HOST: ${LETSENCRYPT_HOST:-}
28
+ LETSENCRYPT_EMAIL: ${LETSENCRYPT_EMAIL:-}
29
+ volumes:
30
+ - app-storage:/app/src/storage
31
+ networks:
32
+ - infra
33
+ - nginx-proxy
34
+
35
+ volumes:
36
+ app-storage:
37
+
38
+ networks:
39
+ infra:
40
+ external: true
41
+ name: infra
42
+ nginx-proxy:
43
+ external: true
44
+ name: nginx-proxy
45
+
@@ -0,0 +1,45 @@
1
+ name: ${COMPOSE_PROJECT_NAME:-nexwire}
2
+
3
+ services:
4
+ app:
5
+ build:
6
+ context: ..
7
+ dockerfile: deploy/Dockerfile
8
+ args:
9
+ UI: ${UI}
10
+ container_name: ${APP_NAME:-nexwire}-app
11
+ restart: unless-stopped
12
+ working_dir: /app
13
+ ports:
14
+ - "${APP_PORT:-3000}:3000"
15
+ expose:
16
+ - "3000"
17
+ env_file:
18
+ - .env
19
+ environment:
20
+ APP_ENV: production
21
+ APP_PORT: 3000
22
+ APP_URL: ${APP_URL:-http://localhost:3000}
23
+ DATABASE_URL: ${DATABASE_URL}
24
+ {{REDIS_ENV_LINE}} APP_HOST: ${APP_HOST:-localhost}
25
+ VIRTUAL_HOST: ${VIRTUAL_HOST:-}
26
+ VIRTUAL_PORT: ${VIRTUAL_PORT:-3000}
27
+ LETSENCRYPT_HOST: ${LETSENCRYPT_HOST:-}
28
+ LETSENCRYPT_EMAIL: ${LETSENCRYPT_EMAIL:-}
29
+ volumes:
30
+ - app-storage:/app/src/storage
31
+ networks:
32
+ - infra
33
+ - nginx-proxy
34
+
35
+ volumes:
36
+ app-storage:
37
+
38
+ networks:
39
+ infra:
40
+ external: true
41
+ name: infra
42
+ nginx-proxy:
43
+ external: true
44
+ name: nginx-proxy
45
+
@@ -0,0 +1,68 @@
1
+ # App deploy env template (shared for local + remote)
2
+ # Local: use this as deploy/.env
3
+ # Remote: use this as deploy/.env
4
+ # Runtime settings (mail, storage, cors, log level, toggles, expiries) live in
5
+ # src/config/*. Only app basics, secrets, and infra vars belong in this file.
6
+ # ── App ────────────────────────────────────────────
7
+ APP_ENV=production
8
+ APP_NAME=nexwire
9
+ APP_HOST=localhost
10
+ APP_PORT=3000
11
+
12
+ # Full public URL the app is served at (used for links, redirects, CORS)
13
+ # Local: http://localhost:3000 | Remote: https://your-domain.com
14
+ APP_URL=http://localhost:3000
15
+
16
+ # Run "db:migrate --seed" automatically on container start (true/false)
17
+ AUTO_MIGRATE=true
18
+
19
+ # UI origin (only needed when UI is on a different domain than API)
20
+ # Leave empty if UI is served from the same APP_URL or UI=false
21
+ FRONTEND_URL={{FRONTEND_URL}}
22
+
23
+ # ── Reverse Proxy (nginx-proxy) ────────────────────
24
+ # Remote only: nginx-proxy routes by VIRTUAL_HOST and auto-issues Let's Encrypt certs.
25
+ # Leave empty for local-only deploys.
26
+ VIRTUAL_HOST=
27
+ VIRTUAL_PORT=3000
28
+ LETSENCRYPT_HOST=
29
+ LETSENCRYPT_EMAIL=
30
+
31
+ # ── Database ───────────────────────────────────────
32
+ # Set the password and database name to match deploy/server/.env
33
+ DATABASE_URL=mysql://root:change-me-root@mysql-global:3306/nexwire
34
+
35
+ # ── JWT Auth (expiries live in src/config/jwt.ts) ──
36
+ JWT_ACCESS_SECRET={{JWT_ACCESS_SECRET}}
37
+ JWT_REFRESH_SECRET={{JWT_REFRESH_SECRET}}
38
+
39
+ # ── Cookie (name lives in src/config/cookie.ts) ────
40
+ COOKIE_SECRET={{COOKIE_SECRET}}
41
+
42
+ # ── Storage credentials (driver/disk/bucket live in src/config/storage.ts) ──
43
+ STORAGE_ACCESS_KEY_ID={{STORAGE_ACCESS_KEY_ID}}
44
+ STORAGE_SECRET_ACCESS_KEY={{STORAGE_SECRET_ACCESS_KEY}}
45
+
46
+ # ── Mail credentials (host/port/encryption live in src/config/mail.ts) ──
47
+ MAIL_USERNAME=
48
+ MAIL_PASSWORD=
49
+
50
+ # ── Redis ──────────────────────────────────────────
51
+ # Enables/disables cache, session, queue, events, Queue Dashboard (all Redis-backed services)
52
+ REDIS={{REDIS_ENABLED}}
53
+ REDIS_URL=redis://redis-global:6379
54
+ REDIS_PREFIX={{REDIS_PREFIX}}
55
+
56
+ # ── Feature Toggle (build) ─────────────────────────
57
+ # Enable/disable UI build and serving. Set false for API-only mode
58
+ UI={{UI}}
59
+
60
+ # ── Feature Toggle ─────────────────────────────────
61
+ # OpenAPI / Scalar docs at /api-docs. Set true to enable.
62
+ OPEN_API={{OPEN_API}}
63
+ # Socket.IO realtime server. Set false to disable.
64
+ SOCKET={{SOCKET}}
65
+ # Security headers (CSP, HSTS, X-Frame). Set false to disable.
66
+ SECURITY_HEADERS={{SECURITY_HEADERS}}
67
+
68
+