create-fluxstack 1.10.1 → 1.12.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 (257) hide show
  1. package/.dockerignore +1 -2
  2. package/Dockerfile +8 -8
  3. package/LLMD/INDEX.md +64 -0
  4. package/LLMD/MAINTENANCE.md +197 -0
  5. package/LLMD/MIGRATION.md +156 -0
  6. package/LLMD/config/.gitkeep +1 -0
  7. package/LLMD/config/declarative-system.md +268 -0
  8. package/LLMD/config/environment-vars.md +327 -0
  9. package/LLMD/config/runtime-reload.md +401 -0
  10. package/LLMD/core/.gitkeep +1 -0
  11. package/LLMD/core/build-system.md +599 -0
  12. package/LLMD/core/framework-lifecycle.md +229 -0
  13. package/LLMD/core/plugin-system.md +451 -0
  14. package/LLMD/patterns/.gitkeep +1 -0
  15. package/LLMD/patterns/anti-patterns.md +297 -0
  16. package/LLMD/patterns/project-structure.md +264 -0
  17. package/LLMD/patterns/type-safety.md +440 -0
  18. package/LLMD/reference/.gitkeep +1 -0
  19. package/LLMD/reference/cli-commands.md +250 -0
  20. package/LLMD/reference/plugin-hooks.md +357 -0
  21. package/LLMD/reference/routing.md +39 -0
  22. package/LLMD/reference/troubleshooting.md +364 -0
  23. package/LLMD/resources/.gitkeep +1 -0
  24. package/LLMD/resources/controllers.md +465 -0
  25. package/LLMD/resources/live-components.md +703 -0
  26. package/LLMD/resources/live-rooms.md +482 -0
  27. package/LLMD/resources/live-upload.md +130 -0
  28. package/LLMD/resources/plugins-external.md +617 -0
  29. package/LLMD/resources/routes-eden.md +254 -0
  30. package/README.md +37 -17
  31. package/app/client/index.html +0 -1
  32. package/app/client/src/App.tsx +107 -150
  33. package/app/client/src/components/AppLayout.tsx +68 -0
  34. package/app/client/src/components/BackButton.tsx +13 -0
  35. package/app/client/src/components/DemoPage.tsx +20 -0
  36. package/app/client/src/components/LiveUploadWidget.tsx +204 -0
  37. package/app/client/src/lib/eden-api.ts +85 -60
  38. package/app/client/src/live/ChatDemo.tsx +107 -0
  39. package/app/client/src/live/CounterDemo.tsx +206 -0
  40. package/app/client/src/live/FormDemo.tsx +119 -0
  41. package/app/client/src/live/RoomChatDemo.tsx +242 -0
  42. package/app/client/src/live/UploadDemo.tsx +21 -0
  43. package/app/client/src/main.tsx +4 -1
  44. package/app/client/src/pages/ApiTestPage.tsx +108 -0
  45. package/app/client/src/pages/HomePage.tsx +76 -0
  46. package/app/server/app.ts +1 -4
  47. package/app/server/controllers/users.controller.ts +36 -44
  48. package/app/server/index.ts +25 -35
  49. package/app/server/live/LiveChat.ts +77 -0
  50. package/app/server/live/LiveCounter.ts +67 -0
  51. package/app/server/live/LiveForm.ts +63 -0
  52. package/app/server/live/LiveLocalCounter.ts +32 -0
  53. package/app/server/live/LiveRoomChat.ts +285 -0
  54. package/app/server/live/LiveUpload.ts +81 -0
  55. package/app/server/routes/index.ts +3 -1
  56. package/app/server/routes/room.routes.ts +117 -0
  57. package/app/server/routes/users.routes.ts +35 -27
  58. package/app/shared/types/index.ts +14 -2
  59. package/config/app.config.ts +2 -62
  60. package/config/client.config.ts +2 -95
  61. package/config/database.config.ts +2 -99
  62. package/config/fluxstack.config.ts +25 -45
  63. package/config/index.ts +57 -38
  64. package/config/monitoring.config.ts +2 -114
  65. package/config/plugins.config.ts +2 -80
  66. package/config/server.config.ts +2 -68
  67. package/config/services.config.ts +2 -130
  68. package/config/system/app.config.ts +29 -0
  69. package/config/system/build.config.ts +49 -0
  70. package/config/system/client.config.ts +68 -0
  71. package/config/system/database.config.ts +17 -0
  72. package/config/system/fluxstack.config.ts +114 -0
  73. package/config/{logger.config.ts → system/logger.config.ts} +3 -1
  74. package/config/system/monitoring.config.ts +114 -0
  75. package/config/system/plugins.config.ts +84 -0
  76. package/config/{runtime.config.ts → system/runtime.config.ts} +1 -1
  77. package/config/system/server.config.ts +68 -0
  78. package/config/system/services.config.ts +46 -0
  79. package/config/{system.config.ts → system/system.config.ts} +1 -1
  80. package/core/build/flux-plugins-generator.ts +325 -325
  81. package/core/build/index.ts +39 -27
  82. package/core/build/live-components-generator.ts +3 -3
  83. package/core/build/optimizer.ts +235 -235
  84. package/core/cli/command-registry.ts +6 -4
  85. package/core/cli/commands/build.ts +79 -0
  86. package/core/cli/commands/create.ts +54 -0
  87. package/core/cli/commands/dev.ts +101 -0
  88. package/core/cli/commands/help.ts +34 -0
  89. package/core/cli/commands/index.ts +34 -0
  90. package/core/cli/commands/make-plugin.ts +90 -0
  91. package/core/cli/commands/plugin-add.ts +197 -0
  92. package/core/cli/commands/plugin-deps.ts +2 -2
  93. package/core/cli/commands/plugin-list.ts +208 -0
  94. package/core/cli/commands/plugin-remove.ts +170 -0
  95. package/core/cli/generators/component.ts +769 -769
  96. package/core/cli/generators/controller.ts +1 -1
  97. package/core/cli/generators/index.ts +146 -146
  98. package/core/cli/generators/interactive.ts +227 -227
  99. package/core/cli/generators/plugin.ts +2 -2
  100. package/core/cli/generators/prompts.ts +82 -82
  101. package/core/cli/generators/route.ts +6 -6
  102. package/core/cli/generators/service.ts +2 -2
  103. package/core/cli/generators/template-engine.ts +4 -3
  104. package/core/cli/generators/types.ts +2 -2
  105. package/core/cli/generators/utils.ts +191 -191
  106. package/core/cli/index.ts +115 -686
  107. package/core/cli/plugin-discovery.ts +2 -2
  108. package/core/client/LiveComponentsProvider.tsx +60 -8
  109. package/core/client/api/eden.ts +183 -0
  110. package/core/client/api/index.ts +11 -0
  111. package/core/client/components/Live.tsx +104 -0
  112. package/core/client/fluxstack.ts +1 -9
  113. package/core/client/hooks/AdaptiveChunkSizer.ts +215 -215
  114. package/core/client/hooks/state-validator.ts +1 -1
  115. package/core/client/hooks/useAuth.ts +48 -48
  116. package/core/client/hooks/useChunkedUpload.ts +85 -35
  117. package/core/client/hooks/useLiveChunkedUpload.ts +87 -0
  118. package/core/client/hooks/useLiveComponent.ts +800 -0
  119. package/core/client/hooks/useLiveUpload.ts +71 -0
  120. package/core/client/hooks/useRoom.ts +409 -0
  121. package/core/client/hooks/useRoomProxy.ts +382 -0
  122. package/core/client/index.ts +17 -68
  123. package/core/client/standalone-entry.ts +8 -0
  124. package/core/client/standalone.ts +74 -53
  125. package/core/client/state/createStore.ts +192 -192
  126. package/core/client/state/index.ts +14 -14
  127. package/core/config/index.ts +70 -291
  128. package/core/config/schema.ts +42 -723
  129. package/core/framework/client.ts +131 -131
  130. package/core/framework/index.ts +7 -7
  131. package/core/framework/server.ts +47 -40
  132. package/core/framework/types.ts +2 -2
  133. package/core/index.ts +23 -4
  134. package/core/live/ComponentRegistry.ts +3 -3
  135. package/core/live/types.ts +77 -0
  136. package/core/plugins/built-in/index.ts +134 -134
  137. package/core/plugins/built-in/live-components/commands/create-live-component.ts +242 -1066
  138. package/core/plugins/built-in/live-components/index.ts +1 -1
  139. package/core/plugins/built-in/monitoring/index.ts +111 -47
  140. package/core/plugins/built-in/static/index.ts +1 -1
  141. package/core/plugins/built-in/swagger/index.ts +68 -265
  142. package/core/plugins/built-in/vite/index.ts +85 -185
  143. package/core/plugins/built-in/vite/vite-dev.ts +10 -16
  144. package/core/plugins/config.ts +9 -7
  145. package/core/plugins/dependency-manager.ts +31 -1
  146. package/core/plugins/discovery.ts +19 -7
  147. package/core/plugins/executor.ts +2 -2
  148. package/core/plugins/index.ts +203 -203
  149. package/core/plugins/manager.ts +27 -39
  150. package/core/plugins/module-resolver.ts +19 -8
  151. package/core/plugins/registry.ts +255 -19
  152. package/core/plugins/types.ts +20 -53
  153. package/core/server/framework.ts +66 -43
  154. package/core/server/index.ts +15 -15
  155. package/core/server/live/ComponentRegistry.ts +78 -71
  156. package/core/server/live/FileUploadManager.ts +23 -10
  157. package/core/server/live/LiveComponentPerformanceMonitor.ts +1 -1
  158. package/core/server/live/LiveRoomManager.ts +261 -0
  159. package/core/server/live/RoomEventBus.ts +234 -0
  160. package/core/server/live/RoomStateManager.ts +172 -0
  161. package/core/server/live/StateSignature.ts +643 -643
  162. package/core/server/live/WebSocketConnectionManager.ts +30 -19
  163. package/core/server/live/auto-generated-components.ts +21 -9
  164. package/core/server/live/index.ts +14 -0
  165. package/core/server/live/websocket-plugin.ts +214 -67
  166. package/core/server/middleware/elysia-helpers.ts +7 -2
  167. package/core/server/middleware/errorHandling.ts +1 -1
  168. package/core/server/middleware/index.ts +31 -31
  169. package/core/server/plugins/database.ts +180 -180
  170. package/core/server/plugins/static-files-plugin.ts +69 -69
  171. package/core/server/plugins/swagger.ts +1 -1
  172. package/core/server/rooms/RoomBroadcaster.ts +357 -0
  173. package/core/server/rooms/RoomSystem.ts +463 -0
  174. package/core/server/rooms/index.ts +13 -0
  175. package/core/server/services/BaseService.ts +1 -1
  176. package/core/server/services/ServiceContainer.ts +1 -1
  177. package/core/server/services/index.ts +8 -8
  178. package/core/templates/create-project.ts +12 -12
  179. package/core/testing/index.ts +9 -9
  180. package/core/testing/setup.ts +73 -73
  181. package/core/types/api.ts +168 -168
  182. package/core/types/build.ts +219 -219
  183. package/core/types/config.ts +56 -26
  184. package/core/types/index.ts +4 -4
  185. package/core/types/plugin.ts +107 -107
  186. package/core/types/types.ts +353 -14
  187. package/core/utils/build-logger.ts +324 -324
  188. package/core/utils/config-schema.ts +480 -480
  189. package/core/utils/env.ts +2 -8
  190. package/core/utils/errors/codes.ts +114 -114
  191. package/core/utils/errors/handlers.ts +36 -1
  192. package/core/utils/errors/index.ts +49 -5
  193. package/core/utils/errors/middleware.ts +113 -113
  194. package/core/utils/helpers.ts +6 -16
  195. package/core/utils/index.ts +17 -17
  196. package/core/utils/logger/colors.ts +114 -114
  197. package/core/utils/logger/config.ts +13 -9
  198. package/core/utils/logger/formatter.ts +82 -82
  199. package/core/utils/logger/group-logger.ts +101 -101
  200. package/core/utils/logger/index.ts +6 -1
  201. package/core/utils/logger/stack-trace.ts +3 -1
  202. package/core/utils/logger/startup-banner.ts +82 -82
  203. package/core/utils/logger/winston-logger.ts +152 -152
  204. package/core/utils/monitoring/index.ts +211 -211
  205. package/core/utils/sync-version.ts +66 -66
  206. package/core/utils/version.ts +1 -1
  207. package/create-fluxstack.ts +8 -7
  208. package/package.json +12 -13
  209. package/plugins/crypto-auth/cli/make-protected-route.command.ts +1 -1
  210. package/plugins/crypto-auth/client/CryptoAuthClient.ts +302 -302
  211. package/plugins/crypto-auth/client/components/index.ts +11 -11
  212. package/plugins/crypto-auth/client/index.ts +11 -11
  213. package/plugins/crypto-auth/config/index.ts +1 -1
  214. package/plugins/crypto-auth/index.ts +4 -4
  215. package/plugins/crypto-auth/package.json +65 -65
  216. package/plugins/crypto-auth/server/AuthMiddleware.ts +1 -1
  217. package/plugins/crypto-auth/server/CryptoAuthService.ts +185 -185
  218. package/plugins/crypto-auth/server/index.ts +21 -21
  219. package/plugins/crypto-auth/server/middlewares/cryptoAuthAdmin.ts +3 -3
  220. package/plugins/crypto-auth/server/middlewares/cryptoAuthOptional.ts +1 -1
  221. package/plugins/crypto-auth/server/middlewares/cryptoAuthPermissions.ts +2 -2
  222. package/plugins/crypto-auth/server/middlewares/cryptoAuthRequired.ts +2 -2
  223. package/plugins/crypto-auth/server/middlewares/helpers.ts +1 -1
  224. package/plugins/crypto-auth/server/middlewares/index.ts +22 -22
  225. package/tsconfig.api-strict.json +16 -0
  226. package/tsconfig.json +48 -52
  227. package/{app/client/tsconfig.node.json → tsconfig.node.json} +25 -25
  228. package/types/global.d.ts +29 -29
  229. package/types/vitest.d.ts +8 -8
  230. package/vite.config.ts +38 -62
  231. package/vitest.config.live.ts +10 -9
  232. package/vitest.config.ts +29 -17
  233. package/app/client/README.md +0 -69
  234. package/app/client/SIMPLIFICATION.md +0 -140
  235. package/app/client/frontend-only.ts +0 -12
  236. package/app/client/src/live/FileUploadExample.tsx +0 -359
  237. package/app/client/src/live/MinimalLiveClock.tsx +0 -47
  238. package/app/client/src/live/QuickUploadTest.tsx +0 -193
  239. package/app/client/tsconfig.app.json +0 -45
  240. package/app/client/tsconfig.json +0 -7
  241. package/app/client/zustand-setup.md +0 -65
  242. package/app/server/backend-only.ts +0 -18
  243. package/app/server/live/LiveClockComponent.ts +0 -215
  244. package/app/server/live/LiveFileUploadComponent.ts +0 -77
  245. package/app/server/routes/env-test.ts +0 -110
  246. package/core/client/hooks/index.ts +0 -7
  247. package/core/client/hooks/useHybridLiveComponent.ts +0 -685
  248. package/core/client/hooks/useTypedLiveComponent.ts +0 -133
  249. package/core/client/hooks/useWebSocket.ts +0 -361
  250. package/core/config/env.ts +0 -546
  251. package/core/config/loader.ts +0 -522
  252. package/core/config/runtime-config.ts +0 -327
  253. package/core/config/validator.ts +0 -540
  254. package/core/server/backend-entry.ts +0 -51
  255. package/core/server/standalone.ts +0 -106
  256. package/core/utils/regenerate-files.ts +0 -69
  257. package/fluxstack.config.ts +0 -354
@@ -0,0 +1,114 @@
1
+ /**
2
+ * Monitoring Configuration
3
+ * Declarative monitoring, metrics and profiling configuration
4
+ */
5
+
6
+ import { defineConfig, defineNestedConfig, config } from '@core/utils/config-schema'
7
+ import { helpers } from '@core/utils/env'
8
+
9
+ /**
10
+ * Metrics Configuration Schema
11
+ */
12
+ const metricsSchema = {
13
+ enabled: config.boolean('ENABLE_METRICS', false),
14
+
15
+ collectInterval: {
16
+ type: 'number' as const,
17
+ env: 'METRICS_INTERVAL',
18
+ default: 5000,
19
+ validate: (value: number) => {
20
+ if (value < 1000) {
21
+ return 'Metrics interval must be at least 1000ms'
22
+ }
23
+ return true
24
+ }
25
+ },
26
+
27
+ httpMetrics: config.boolean('HTTP_METRICS', true),
28
+
29
+ systemMetrics: config.boolean('SYSTEM_METRICS', true),
30
+
31
+ customMetrics: config.boolean('CUSTOM_METRICS', false),
32
+
33
+ // Metric exporters
34
+ exportToConsole: config.boolean('METRICS_EXPORT_CONSOLE', helpers.isDevelopment()),
35
+
36
+ exportToFile: config.boolean('METRICS_EXPORT_FILE', false),
37
+
38
+ exportToHttp: config.boolean('METRICS_EXPORT_HTTP', false),
39
+
40
+ exportHttpUrl: config.string('METRICS_EXPORT_URL'),
41
+
42
+ // Metric storage
43
+ retentionPeriod: config.number('METRICS_RETENTION_PERIOD', 3600000), // 1 hour in ms
44
+
45
+ maxDataPoints: config.number('METRICS_MAX_DATA_POINTS', 1000)
46
+ } as const
47
+
48
+ /**
49
+ * Profiling Configuration Schema
50
+ */
51
+ const profilingSchema = {
52
+ enabled: config.boolean('PROFILING_ENABLED', false),
53
+
54
+ sampleRate: {
55
+ type: 'number' as const,
56
+ env: 'PROFILING_SAMPLE_RATE',
57
+ default: helpers.isProduction() ? 0.01 : 0.1,
58
+ validate: (value: number) => {
59
+ if (value < 0 || value > 1) {
60
+ return 'Sample rate must be between 0 and 1'
61
+ }
62
+ return true
63
+ }
64
+ },
65
+
66
+ memoryProfiling: config.boolean('MEMORY_PROFILING', false),
67
+
68
+ cpuProfiling: config.boolean('CPU_PROFILING', false),
69
+
70
+ heapSnapshot: config.boolean('HEAP_SNAPSHOT', false),
71
+
72
+ // Profiling output
73
+ outputDir: config.string('PROFILING_OUTPUT_DIR', 'profiling'),
74
+
75
+ maxProfiles: config.number('PROFILING_MAX_PROFILES', 10)
76
+ } as const
77
+
78
+ /**
79
+ * Monitoring Configuration Schema
80
+ */
81
+ const monitoringSchema = {
82
+ enabled: config.boolean('ENABLE_MONITORING', false),
83
+
84
+ // Exporters
85
+ exporters: config.array('MONITORING_EXPORTERS', []),
86
+
87
+ // Health checks
88
+ enableHealthChecks: config.boolean('ENABLE_HEALTH_CHECKS', true),
89
+
90
+ healthCheckInterval: config.number('HEALTH_CHECK_INTERVAL', 30000), // 30s
91
+
92
+ // Alerting
93
+ enableAlerts: config.boolean('ENABLE_ALERTS', false),
94
+
95
+ alertWebhook: config.string('ALERT_WEBHOOK')
96
+ } as const
97
+
98
+ /**
99
+ * Export monitoring config (nested)
100
+ */
101
+ export const monitoringConfig = defineNestedConfig({
102
+ monitoring: monitoringSchema,
103
+ metrics: metricsSchema,
104
+ profiling: profilingSchema
105
+ })
106
+
107
+ // Export types
108
+ export type MonitoringConfig = typeof monitoringConfig.monitoring
109
+ export type MetricsConfig = typeof monitoringConfig.metrics
110
+ export type ProfilingConfig = typeof monitoringConfig.profiling
111
+ export type MonitoringFullConfig = typeof monitoringConfig
112
+
113
+ // Export default
114
+ export default monitoringConfig
@@ -0,0 +1,84 @@
1
+ /**
2
+ * Plugins Configuration
3
+ * Declarative plugin management configuration
4
+ */
5
+
6
+ import { defineConfig, config } from '@core/utils/config-schema'
7
+ import { FLUXSTACK_VERSION } from '@core/utils/version'
8
+
9
+ const defaultPluginConfigs = {
10
+ swagger: {
11
+ title: 'FluxStack API',
12
+ version: FLUXSTACK_VERSION,
13
+ description: 'API documentation for FluxStack application',
14
+ path: '/swagger'
15
+ },
16
+ staticFiles: {
17
+ publicDir: 'public',
18
+ uploadsDir: 'uploads'
19
+ }
20
+ }
21
+
22
+ export const pluginsConfig = defineConfig({
23
+ enabled: config.array(
24
+ 'FLUXSTACK_PLUGINS_ENABLED',
25
+ ['logger', 'swagger', 'vite', 'cors', 'static-files']
26
+ ),
27
+
28
+ disabled: config.array('FLUXSTACK_PLUGINS_DISABLED', []),
29
+
30
+ autoDiscover: config.boolean('PLUGINS_AUTO_DISCOVER', true),
31
+
32
+ pluginsDir: config.string('PLUGINS_DIR', 'plugins'),
33
+
34
+ discoverNpmPlugins: config.boolean('PLUGINS_DISCOVER_NPM', false),
35
+ discoverProjectPlugins: config.boolean('PLUGINS_DISCOVER_PROJECT', true),
36
+
37
+ allowedPlugins: config.array('PLUGINS_ALLOWED', []),
38
+ config: {
39
+ type: 'object' as const,
40
+ default: defaultPluginConfigs
41
+ },
42
+
43
+ loggerEnabled: config.boolean('LOGGER_PLUGIN_ENABLED', true),
44
+
45
+ swaggerEnabled: config.boolean('SWAGGER_ENABLED', true),
46
+ swaggerTitle: config.string('SWAGGER_TITLE', 'FluxStack API'),
47
+ swaggerVersion: config.string('SWAGGER_VERSION', FLUXSTACK_VERSION),
48
+ swaggerDescription: config.string(
49
+ 'SWAGGER_DESCRIPTION',
50
+ 'API documentation for FluxStack application'
51
+ ),
52
+ swaggerPath: config.string('SWAGGER_PATH', '/swagger'),
53
+
54
+ swaggerExcludePaths: config.array('SWAGGER_EXCLUDE_PATHS', []),
55
+
56
+ swaggerServers: config.string('SWAGGER_SERVERS', ''),
57
+
58
+ swaggerPersistAuthorization: config.boolean('SWAGGER_PERSIST_AUTH', true),
59
+ swaggerDisplayRequestDuration: config.boolean('SWAGGER_DISPLAY_DURATION', true),
60
+ swaggerEnableFilter: config.boolean('SWAGGER_ENABLE_FILTER', true),
61
+ swaggerShowExtensions: config.boolean('SWAGGER_SHOW_EXTENSIONS', true),
62
+ swaggerTryItOutEnabled: config.boolean('SWAGGER_TRY_IT_OUT', true),
63
+
64
+ swaggerAuthEnabled: config.boolean('SWAGGER_AUTH_ENABLED', false),
65
+ swaggerAuthUsername: config.string('SWAGGER_AUTH_USERNAME', 'admin'),
66
+ swaggerAuthPassword: config.string('SWAGGER_AUTH_PASSWORD', ''),
67
+
68
+ staticFilesEnabled: config.boolean('STATIC_FILES_ENABLED', true),
69
+ staticPublicDir: config.string('STATIC_PUBLIC_DIR', 'public'),
70
+ staticUploadsDir: config.string('STATIC_UPLOADS_DIR', 'uploads'),
71
+ staticCacheMaxAge: config.number('STATIC_CACHE_MAX_AGE', 31536000),
72
+ staticEnableUploads: config.boolean('STATIC_ENABLE_UPLOADS', true),
73
+ staticEnablePublic: config.boolean('STATIC_ENABLE_PUBLIC', true),
74
+
75
+ viteEnabled: config.boolean('VITE_PLUGIN_ENABLED', true),
76
+ viteExcludePaths: config.array('VITE_EXCLUDE_PATHS', [
77
+ '/api',
78
+ '/swagger'
79
+ ])
80
+ })
81
+
82
+ export type PluginsConfig = typeof pluginsConfig
83
+
84
+ export default pluginsConfig
@@ -3,7 +3,7 @@
3
3
  * Configs that can be reloaded without server restart
4
4
  */
5
5
 
6
- import { defineReactiveConfig, config } from '@/core/utils/config-schema'
6
+ import { defineReactiveConfig, config } from '@core/utils/config-schema'
7
7
 
8
8
  /**
9
9
  * Runtime app configuration
@@ -0,0 +1,68 @@
1
+ /**
2
+ * Server Configuration
3
+ * Server-specific settings (port, host, CORS, middleware)
4
+ */
5
+
6
+ import { defineConfig, defineNestedConfig, config } from '@core/utils/config-schema'
7
+
8
+ /**
9
+ * CORS configuration schema
10
+ */
11
+ const corsSchema = {
12
+ origins: config.array('CORS_ORIGINS', ['http://localhost:3000', 'http://localhost:5173']),
13
+ methods: config.array('CORS_METHODS', ['GET', 'POST', 'PUT', 'DELETE', 'OPTIONS']),
14
+ headers: config.array('CORS_HEADERS', ['Content-Type', 'Authorization']),
15
+ credentials: config.boolean('CORS_CREDENTIALS', false),
16
+ maxAge: config.number('CORS_MAX_AGE', 86400)
17
+ } as const
18
+
19
+ /**
20
+ * Server configuration schema
21
+ */
22
+ const serverSchema = {
23
+ // Server basics
24
+ port: {
25
+ type: 'number' as const,
26
+ env: 'PORT',
27
+ default: 3000,
28
+ required: true,
29
+ validate: (value: number) => {
30
+ if (value < 1 || value > 65535) {
31
+ return 'Port must be between 1 and 65535'
32
+ }
33
+ return true
34
+ }
35
+ },
36
+
37
+ host: config.string('HOST', 'localhost', true),
38
+
39
+ apiPrefix: {
40
+ type: 'string' as const,
41
+ env: 'API_PREFIX',
42
+ default: '/api',
43
+ validate: (value: string) => value.startsWith('/') || 'API prefix must start with /'
44
+ },
45
+
46
+ // Backend-only mode
47
+ backendPort: config.number('BACKEND_PORT', 3001),
48
+
49
+ // Features
50
+ enableRequestLogging: config.boolean('ENABLE_REQUEST_LOGGING', true),
51
+ showBanner: config.boolean('SHOW_SERVER_BANNER', true)
52
+ } as const
53
+
54
+ /**
55
+ * Export server config (nested with CORS)
56
+ */
57
+ export const serverConfig = defineNestedConfig({
58
+ server: serverSchema,
59
+ cors: corsSchema
60
+ })
61
+
62
+ // Export types
63
+ export type ServerConfig = typeof serverConfig.server
64
+ export type CorsConfig = typeof serverConfig.cors
65
+ export type ServerFullConfig = typeof serverConfig
66
+
67
+ // Export default
68
+ export default serverConfig
@@ -0,0 +1,46 @@
1
+ /**
2
+ * Services Configuration
3
+ * Optional service settings (email, JWT, storage, redis) for compatibility
4
+ */
5
+
6
+ import { defineNestedConfig, config } from '@core/utils/config-schema'
7
+
8
+ const emailSchema = {
9
+ host: config.string('MAIL_HOST', 'smtp.example.com'),
10
+ port: config.number('MAIL_PORT', 587),
11
+ username: config.string('MAIL_USERNAME', ''),
12
+ password: config.string('MAIL_PASSWORD', ''),
13
+ fromAddress: config.string('MAIL_FROM_ADDRESS', 'no-reply@example.com'),
14
+ secure: config.boolean('MAIL_SECURE', false)
15
+ } as const
16
+
17
+ const jwtSchema = {
18
+ secret: config.string('JWT_SECRET', 'change-me'),
19
+ expiresIn: config.string('JWT_EXPIRES_IN', '1h'),
20
+ audience: config.string('JWT_AUDIENCE', 'fluxstack'),
21
+ issuer: config.string('JWT_ISSUER', 'fluxstack')
22
+ } as const
23
+
24
+ const storageSchema = {
25
+ driver: config.enum('STORAGE_DRIVER', ['local', 's3'] as const, 'local'),
26
+ localDir: config.string('STORAGE_LOCAL_DIR', 'uploads'),
27
+ s3Bucket: config.string('STORAGE_S3_BUCKET', ''),
28
+ s3Region: config.string('STORAGE_S3_REGION', ''),
29
+ s3Endpoint: config.string('STORAGE_S3_ENDPOINT', '')
30
+ } as const
31
+
32
+ const redisSchema = {
33
+ enabled: config.boolean('REDIS_ENABLED', false),
34
+ url: config.string('REDIS_URL', 'redis://localhost:6379')
35
+ } as const
36
+
37
+ export const servicesConfig = defineNestedConfig({
38
+ email: emailSchema,
39
+ jwt: jwtSchema,
40
+ storage: storageSchema,
41
+ redis: redisSchema
42
+ })
43
+
44
+ export type ServicesConfig = typeof servicesConfig
45
+
46
+ export default servicesConfig
@@ -3,7 +3,7 @@
3
3
  * System information and environment variables
4
4
  */
5
5
 
6
- import { defineConfig, config } from '@/core/utils/config-schema'
6
+ import { defineConfig, config } from '@core/utils/config-schema'
7
7
 
8
8
  /**
9
9
  * System environment variables config