create-fluxstack 1.10.1 → 1.12.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.dockerignore +1 -2
- package/Dockerfile +8 -8
- package/LLMD/INDEX.md +64 -0
- package/LLMD/MAINTENANCE.md +197 -0
- package/LLMD/MIGRATION.md +156 -0
- package/LLMD/config/.gitkeep +1 -0
- package/LLMD/config/declarative-system.md +268 -0
- package/LLMD/config/environment-vars.md +327 -0
- package/LLMD/config/runtime-reload.md +401 -0
- package/LLMD/core/.gitkeep +1 -0
- package/LLMD/core/build-system.md +599 -0
- package/LLMD/core/framework-lifecycle.md +229 -0
- package/LLMD/core/plugin-system.md +451 -0
- package/LLMD/patterns/.gitkeep +1 -0
- package/LLMD/patterns/anti-patterns.md +297 -0
- package/LLMD/patterns/project-structure.md +264 -0
- package/LLMD/patterns/type-safety.md +440 -0
- package/LLMD/reference/.gitkeep +1 -0
- package/LLMD/reference/cli-commands.md +250 -0
- package/LLMD/reference/plugin-hooks.md +357 -0
- package/LLMD/reference/routing.md +39 -0
- package/LLMD/reference/troubleshooting.md +364 -0
- package/LLMD/resources/.gitkeep +1 -0
- package/LLMD/resources/controllers.md +465 -0
- package/LLMD/resources/live-components.md +703 -0
- package/LLMD/resources/live-rooms.md +482 -0
- package/LLMD/resources/live-upload.md +130 -0
- package/LLMD/resources/plugins-external.md +617 -0
- package/LLMD/resources/routes-eden.md +254 -0
- package/README.md +37 -17
- package/app/client/index.html +0 -1
- package/app/client/src/App.tsx +107 -150
- package/app/client/src/components/AppLayout.tsx +68 -0
- package/app/client/src/components/BackButton.tsx +13 -0
- package/app/client/src/components/DemoPage.tsx +20 -0
- package/app/client/src/components/LiveUploadWidget.tsx +204 -0
- package/app/client/src/lib/eden-api.ts +85 -60
- package/app/client/src/live/ChatDemo.tsx +107 -0
- package/app/client/src/live/CounterDemo.tsx +206 -0
- package/app/client/src/live/FormDemo.tsx +119 -0
- package/app/client/src/live/RoomChatDemo.tsx +161 -0
- package/app/client/src/live/UploadDemo.tsx +21 -0
- package/app/client/src/main.tsx +4 -1
- package/app/client/src/pages/ApiTestPage.tsx +108 -0
- package/app/client/src/pages/HomePage.tsx +76 -0
- package/app/server/app.ts +1 -4
- package/app/server/controllers/users.controller.ts +36 -44
- package/app/server/index.ts +25 -35
- package/app/server/live/LiveChat.ts +77 -0
- package/app/server/live/LiveCounter.ts +67 -0
- package/app/server/live/LiveForm.ts +63 -0
- package/app/server/live/LiveLocalCounter.ts +32 -0
- package/app/server/live/LiveRoomChat.ts +127 -0
- package/app/server/live/LiveUpload.ts +81 -0
- package/app/server/routes/index.ts +3 -1
- package/app/server/routes/room.routes.ts +117 -0
- package/app/server/routes/users.routes.ts +35 -27
- package/app/shared/types/index.ts +14 -2
- package/config/app.config.ts +2 -62
- package/config/client.config.ts +2 -95
- package/config/database.config.ts +2 -99
- package/config/fluxstack.config.ts +25 -45
- package/config/index.ts +57 -38
- package/config/monitoring.config.ts +2 -114
- package/config/plugins.config.ts +2 -80
- package/config/server.config.ts +2 -68
- package/config/services.config.ts +2 -130
- package/config/system/app.config.ts +29 -0
- package/config/system/build.config.ts +49 -0
- package/config/system/client.config.ts +68 -0
- package/config/system/database.config.ts +17 -0
- package/config/system/fluxstack.config.ts +114 -0
- package/config/{logger.config.ts → system/logger.config.ts} +3 -1
- package/config/system/monitoring.config.ts +114 -0
- package/config/system/plugins.config.ts +84 -0
- package/config/{runtime.config.ts → system/runtime.config.ts} +1 -1
- package/config/system/server.config.ts +68 -0
- package/config/system/services.config.ts +46 -0
- package/config/{system.config.ts → system/system.config.ts} +1 -1
- package/core/build/flux-plugins-generator.ts +325 -325
- package/core/build/index.ts +39 -27
- package/core/build/live-components-generator.ts +3 -3
- package/core/build/optimizer.ts +235 -235
- package/core/cli/command-registry.ts +6 -4
- package/core/cli/commands/build.ts +79 -0
- package/core/cli/commands/create.ts +54 -0
- package/core/cli/commands/dev.ts +101 -0
- package/core/cli/commands/help.ts +34 -0
- package/core/cli/commands/index.ts +34 -0
- package/core/cli/commands/make-plugin.ts +90 -0
- package/core/cli/commands/plugin-add.ts +197 -0
- package/core/cli/commands/plugin-deps.ts +2 -2
- package/core/cli/commands/plugin-list.ts +208 -0
- package/core/cli/commands/plugin-remove.ts +170 -0
- package/core/cli/generators/component.ts +769 -769
- package/core/cli/generators/controller.ts +1 -1
- package/core/cli/generators/index.ts +146 -146
- package/core/cli/generators/interactive.ts +227 -227
- package/core/cli/generators/plugin.ts +2 -2
- package/core/cli/generators/prompts.ts +82 -82
- package/core/cli/generators/route.ts +6 -6
- package/core/cli/generators/service.ts +2 -2
- package/core/cli/generators/template-engine.ts +4 -3
- package/core/cli/generators/types.ts +2 -2
- package/core/cli/generators/utils.ts +191 -191
- package/core/cli/index.ts +115 -686
- package/core/cli/plugin-discovery.ts +2 -2
- package/core/client/LiveComponentsProvider.tsx +60 -8
- package/core/client/api/eden.ts +183 -0
- package/core/client/api/index.ts +11 -0
- package/core/client/components/Live.tsx +104 -0
- package/core/client/fluxstack.ts +1 -9
- package/core/client/hooks/AdaptiveChunkSizer.ts +215 -215
- package/core/client/hooks/state-validator.ts +1 -1
- package/core/client/hooks/useAuth.ts +48 -48
- package/core/client/hooks/useChunkedUpload.ts +85 -35
- package/core/client/hooks/useLiveChunkedUpload.ts +87 -0
- package/core/client/hooks/useLiveComponent.ts +800 -0
- package/core/client/hooks/useLiveUpload.ts +71 -0
- package/core/client/hooks/useRoom.ts +409 -0
- package/core/client/hooks/useRoomProxy.ts +382 -0
- package/core/client/index.ts +17 -68
- package/core/client/standalone-entry.ts +8 -0
- package/core/client/standalone.ts +74 -53
- package/core/client/state/createStore.ts +192 -192
- package/core/client/state/index.ts +14 -14
- package/core/config/index.ts +70 -291
- package/core/config/schema.ts +42 -723
- package/core/framework/client.ts +131 -131
- package/core/framework/index.ts +7 -7
- package/core/framework/server.ts +47 -40
- package/core/framework/types.ts +2 -2
- package/core/index.ts +23 -4
- package/core/live/ComponentRegistry.ts +3 -3
- package/core/live/types.ts +77 -0
- package/core/plugins/built-in/index.ts +134 -134
- package/core/plugins/built-in/live-components/commands/create-live-component.ts +242 -1066
- package/core/plugins/built-in/live-components/index.ts +1 -1
- package/core/plugins/built-in/monitoring/index.ts +111 -47
- package/core/plugins/built-in/static/index.ts +1 -1
- package/core/plugins/built-in/swagger/index.ts +68 -265
- package/core/plugins/built-in/vite/index.ts +85 -185
- package/core/plugins/built-in/vite/vite-dev.ts +10 -16
- package/core/plugins/config.ts +9 -7
- package/core/plugins/dependency-manager.ts +31 -1
- package/core/plugins/discovery.ts +19 -7
- package/core/plugins/executor.ts +2 -2
- package/core/plugins/index.ts +203 -203
- package/core/plugins/manager.ts +27 -39
- package/core/plugins/module-resolver.ts +19 -8
- package/core/plugins/registry.ts +255 -19
- package/core/plugins/types.ts +20 -53
- package/core/server/framework.ts +66 -43
- package/core/server/index.ts +15 -15
- package/core/server/live/ComponentRegistry.ts +78 -71
- package/core/server/live/FileUploadManager.ts +23 -10
- package/core/server/live/LiveComponentPerformanceMonitor.ts +1 -1
- package/core/server/live/LiveRoomManager.ts +261 -0
- package/core/server/live/RoomEventBus.ts +234 -0
- package/core/server/live/RoomStateManager.ts +172 -0
- package/core/server/live/StateSignature.ts +643 -643
- package/core/server/live/WebSocketConnectionManager.ts +30 -19
- package/core/server/live/auto-generated-components.ts +21 -9
- package/core/server/live/index.ts +14 -0
- package/core/server/live/websocket-plugin.ts +214 -67
- package/core/server/middleware/elysia-helpers.ts +7 -2
- package/core/server/middleware/errorHandling.ts +1 -1
- package/core/server/middleware/index.ts +31 -31
- package/core/server/plugins/database.ts +180 -180
- package/core/server/plugins/static-files-plugin.ts +69 -69
- package/core/server/plugins/swagger.ts +1 -1
- package/core/server/rooms/RoomBroadcaster.ts +357 -0
- package/core/server/rooms/RoomSystem.ts +463 -0
- package/core/server/rooms/index.ts +13 -0
- package/core/server/services/BaseService.ts +1 -1
- package/core/server/services/ServiceContainer.ts +1 -1
- package/core/server/services/index.ts +8 -8
- package/core/templates/create-project.ts +12 -12
- package/core/testing/index.ts +9 -9
- package/core/testing/setup.ts +73 -73
- package/core/types/api.ts +168 -168
- package/core/types/build.ts +219 -219
- package/core/types/config.ts +56 -26
- package/core/types/index.ts +4 -4
- package/core/types/plugin.ts +107 -107
- package/core/types/types.ts +353 -14
- package/core/utils/build-logger.ts +324 -324
- package/core/utils/config-schema.ts +480 -480
- package/core/utils/env.ts +2 -8
- package/core/utils/errors/codes.ts +114 -114
- package/core/utils/errors/handlers.ts +36 -1
- package/core/utils/errors/index.ts +49 -5
- package/core/utils/errors/middleware.ts +113 -113
- package/core/utils/helpers.ts +6 -16
- package/core/utils/index.ts +17 -17
- package/core/utils/logger/colors.ts +114 -114
- package/core/utils/logger/config.ts +13 -9
- package/core/utils/logger/formatter.ts +82 -82
- package/core/utils/logger/group-logger.ts +101 -101
- package/core/utils/logger/index.ts +6 -1
- package/core/utils/logger/stack-trace.ts +3 -1
- package/core/utils/logger/startup-banner.ts +82 -82
- package/core/utils/logger/winston-logger.ts +152 -152
- package/core/utils/monitoring/index.ts +211 -211
- package/core/utils/sync-version.ts +66 -66
- package/core/utils/version.ts +1 -1
- package/create-fluxstack.ts +8 -7
- package/package.json +12 -13
- package/plugins/crypto-auth/cli/make-protected-route.command.ts +1 -1
- package/plugins/crypto-auth/client/CryptoAuthClient.ts +302 -302
- package/plugins/crypto-auth/client/components/index.ts +11 -11
- package/plugins/crypto-auth/client/index.ts +11 -11
- package/plugins/crypto-auth/config/index.ts +1 -1
- package/plugins/crypto-auth/index.ts +4 -4
- package/plugins/crypto-auth/package.json +65 -65
- package/plugins/crypto-auth/server/AuthMiddleware.ts +1 -1
- package/plugins/crypto-auth/server/CryptoAuthService.ts +185 -185
- package/plugins/crypto-auth/server/index.ts +21 -21
- package/plugins/crypto-auth/server/middlewares/cryptoAuthAdmin.ts +3 -3
- package/plugins/crypto-auth/server/middlewares/cryptoAuthOptional.ts +1 -1
- package/plugins/crypto-auth/server/middlewares/cryptoAuthPermissions.ts +2 -2
- package/plugins/crypto-auth/server/middlewares/cryptoAuthRequired.ts +2 -2
- package/plugins/crypto-auth/server/middlewares/helpers.ts +1 -1
- package/plugins/crypto-auth/server/middlewares/index.ts +22 -22
- package/tsconfig.api-strict.json +16 -0
- package/tsconfig.json +48 -52
- package/{app/client/tsconfig.node.json → tsconfig.node.json} +25 -25
- package/types/global.d.ts +29 -29
- package/types/vitest.d.ts +8 -8
- package/vite.config.ts +38 -62
- package/vitest.config.live.ts +10 -9
- package/vitest.config.ts +29 -17
- package/app/client/README.md +0 -69
- package/app/client/SIMPLIFICATION.md +0 -140
- package/app/client/frontend-only.ts +0 -12
- package/app/client/src/live/FileUploadExample.tsx +0 -359
- package/app/client/src/live/MinimalLiveClock.tsx +0 -47
- package/app/client/src/live/QuickUploadTest.tsx +0 -193
- package/app/client/tsconfig.app.json +0 -45
- package/app/client/tsconfig.json +0 -7
- package/app/client/zustand-setup.md +0 -65
- package/app/server/backend-only.ts +0 -18
- package/app/server/live/LiveClockComponent.ts +0 -215
- package/app/server/live/LiveFileUploadComponent.ts +0 -77
- package/app/server/routes/env-test.ts +0 -110
- package/core/client/hooks/index.ts +0 -7
- package/core/client/hooks/useHybridLiveComponent.ts +0 -685
- package/core/client/hooks/useTypedLiveComponent.ts +0 -133
- package/core/client/hooks/useWebSocket.ts +0 -361
- package/core/config/env.ts +0 -546
- package/core/config/loader.ts +0 -522
- package/core/config/runtime-config.ts +0 -327
- package/core/config/validator.ts +0 -540
- package/core/server/backend-entry.ts +0 -51
- package/core/server/standalone.ts +0 -106
- package/core/utils/regenerate-files.ts +0 -69
- package/fluxstack.config.ts +0 -354
|
@@ -1,48 +1,28 @@
|
|
|
1
1
|
/**
|
|
2
|
-
*
|
|
3
|
-
*
|
|
4
|
-
*
|
|
2
|
+
* FluxStack Configuration - Main Entry Point
|
|
3
|
+
* Re-exports the complete FluxStack configuration from system/
|
|
4
|
+
*
|
|
5
|
+
* ✨ 100% modular configuration using defineConfig
|
|
6
|
+
* ✨ No composer needed - direct config composition
|
|
7
|
+
* ✨ All configs are type-safe with automatic validation
|
|
8
|
+
*
|
|
9
|
+
* To customize configuration, edit the individual config files:
|
|
10
|
+
* - system/app.config.ts - Application metadata
|
|
11
|
+
* - system/server.config.ts - Server and CORS settings
|
|
12
|
+
* - system/client.config.ts - Vite, proxy, and client build
|
|
13
|
+
* - system/build.config.ts - Server build and optimization
|
|
14
|
+
* - system/logger.config.ts - Logging configuration
|
|
15
|
+
* - system/plugins.config.ts - Plugin management
|
|
16
|
+
* - system/monitoring.config.ts - Monitoring and metrics
|
|
17
|
+
* - system/runtime.config.ts - Runtime-reloadable settings
|
|
18
|
+
* - system/system.config.ts - System information
|
|
19
|
+
* - database.config.ts - Database connection (optional)
|
|
20
|
+
* - services.config.ts - JWT, Email, Storage (optional)
|
|
5
21
|
*/
|
|
6
22
|
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
// Create legacy configuration format for backward compatibility
|
|
14
|
-
const legacyConfig = createLegacyConfig(newConfig)
|
|
15
|
-
|
|
16
|
-
// Export in the old format
|
|
17
|
-
export const config = legacyConfig
|
|
18
|
-
|
|
19
|
-
// Also export the environment config for backward compatibility
|
|
20
|
-
export const envConfig = {
|
|
21
|
-
NODE_ENV: process.env.NODE_ENV || 'development',
|
|
22
|
-
HOST: newConfig.server.host,
|
|
23
|
-
PORT: newConfig.server.port,
|
|
24
|
-
FRONTEND_PORT: newConfig.client.port,
|
|
25
|
-
BACKEND_PORT: newConfig.server.port,
|
|
26
|
-
VITE_API_URL: newConfig.client.proxy.target,
|
|
27
|
-
API_URL: newConfig.client.proxy.target,
|
|
28
|
-
CORS_ORIGINS: newConfig.server.cors.origins,
|
|
29
|
-
CORS_METHODS: newConfig.server.cors.methods,
|
|
30
|
-
CORS_HEADERS: newConfig.server.cors.headers,
|
|
31
|
-
LOG_LEVEL: newConfig.logging.level,
|
|
32
|
-
BUILD_TARGET: newConfig.build.target,
|
|
33
|
-
BUILD_OUTDIR: newConfig.build.outDir,
|
|
34
|
-
// Add other legacy environment variables as needed
|
|
35
|
-
}
|
|
36
|
-
|
|
37
|
-
// Warn about deprecated usage in development
|
|
38
|
-
if (process.env.NODE_ENV === 'development') {
|
|
39
|
-
console.warn(
|
|
40
|
-
'⚠️ DEPRECATED: Importing from config/fluxstack.config.ts is deprecated.\n' +
|
|
41
|
-
' Please update your imports to use the new configuration system:\n' +
|
|
42
|
-
' import { getConfig } from "./core/config"\n' +
|
|
43
|
-
' or import config from "./fluxstack.config.ts"'
|
|
44
|
-
)
|
|
45
|
-
}
|
|
46
|
-
|
|
47
|
-
// Export types for backward compatibility
|
|
48
|
-
export type { FluxStackConfig }
|
|
23
|
+
export {
|
|
24
|
+
fluxStackConfig,
|
|
25
|
+
fluxStackConfig as config,
|
|
26
|
+
fluxStackConfig as default,
|
|
27
|
+
type FluxStackConfig
|
|
28
|
+
} from './system/fluxstack.config'
|
package/config/index.ts
CHANGED
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
*
|
|
6
6
|
* @example
|
|
7
7
|
* ```ts
|
|
8
|
-
* import { appConfig, serverConfig, databaseConfig } from '
|
|
8
|
+
* import { appConfig, serverConfig, databaseConfig } from '@config'
|
|
9
9
|
*
|
|
10
10
|
* // All configs are type-safe and validated!
|
|
11
11
|
* console.log(appConfig.name) // string
|
|
@@ -16,22 +16,33 @@
|
|
|
16
16
|
* console.log(servicesConfig.email.host) // string
|
|
17
17
|
* console.log(monitoringConfig.metrics.enabled) // boolean
|
|
18
18
|
* ```
|
|
19
|
+
*
|
|
20
|
+
* ✨ For type safety with optional features (database, auth, email, storage):
|
|
21
|
+
* Import types from this file instead of core:
|
|
22
|
+
* ```ts
|
|
23
|
+
* import type { DatabaseConfig, JWTConfig, EmailConfig, StorageConfig } from '@config'
|
|
24
|
+
* ```
|
|
19
25
|
*/
|
|
20
26
|
|
|
21
27
|
// ============================================================================
|
|
22
28
|
// 📦 CONFIG EXPORTS
|
|
23
29
|
// ============================================================================
|
|
24
30
|
|
|
25
|
-
|
|
26
|
-
export {
|
|
27
|
-
export {
|
|
28
|
-
export {
|
|
29
|
-
export {
|
|
30
|
-
export { loggerConfig } from './logger.config'
|
|
31
|
-
export { pluginsConfig } from './plugins.config'
|
|
32
|
-
export { monitoringConfig } from './monitoring.config'
|
|
33
|
-
export { appRuntimeConfig } from './runtime.config'
|
|
34
|
-
export { systemConfig, systemRuntimeInfo } from './system.config'
|
|
31
|
+
// System configs (from config/system/)
|
|
32
|
+
export { appConfig } from './system/app.config'
|
|
33
|
+
export { serverConfig } from './system/server.config'
|
|
34
|
+
export { clientConfig } from './system/client.config'
|
|
35
|
+
export { buildConfig } from './system/build.config'
|
|
36
|
+
export { loggerConfig } from './system/logger.config'
|
|
37
|
+
export { pluginsConfig } from './system/plugins.config'
|
|
38
|
+
export { monitoringConfig } from './system/monitoring.config'
|
|
39
|
+
export { appRuntimeConfig } from './system/runtime.config'
|
|
40
|
+
export { systemConfig, systemRuntimeInfo } from './system/system.config'
|
|
41
|
+
export { databaseConfig } from './system/database.config'
|
|
42
|
+
export { servicesConfig } from './system/services.config'
|
|
43
|
+
|
|
44
|
+
// Main FluxStack config (composed)
|
|
45
|
+
export { fluxStackConfig, config as fluxConfig, type FluxStackConfig } from './fluxstack.config'
|
|
35
46
|
|
|
36
47
|
// Plugin configs (re-exported for convenience)
|
|
37
48
|
export { cryptoAuthConfig } from '../plugins/crypto-auth/config'
|
|
@@ -40,35 +51,35 @@ export { cryptoAuthConfig } from '../plugins/crypto-auth/config'
|
|
|
40
51
|
// 📝 TYPE EXPORTS
|
|
41
52
|
// ============================================================================
|
|
42
53
|
|
|
43
|
-
//
|
|
44
|
-
export type { AppConfig
|
|
54
|
+
// System config types
|
|
55
|
+
export type { AppConfig } from './system/app.config'
|
|
45
56
|
export type {
|
|
46
57
|
ServerConfig,
|
|
47
58
|
CorsConfig,
|
|
48
59
|
ServerFullConfig
|
|
49
|
-
} from './server.config'
|
|
60
|
+
} from './system/server.config'
|
|
50
61
|
export type {
|
|
51
62
|
ClientConfig,
|
|
52
63
|
ViteConfig,
|
|
53
|
-
ProxyConfig,
|
|
54
64
|
ClientBuildConfig
|
|
55
|
-
} from './client.config'
|
|
56
|
-
export type { DatabaseConfig } from './database.config'
|
|
65
|
+
} from './system/client.config'
|
|
57
66
|
export type {
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
} from './
|
|
63
|
-
export type {
|
|
64
|
-
export type { PluginsConfig } from './plugins.config'
|
|
67
|
+
BuildConfig,
|
|
68
|
+
OptimizationConfig,
|
|
69
|
+
BuildFullConfig
|
|
70
|
+
} from './system/build.config'
|
|
71
|
+
export type { LoggerConfig } from './system/logger.config'
|
|
72
|
+
export type { PluginsConfig } from './system/plugins.config'
|
|
65
73
|
export type {
|
|
66
74
|
MonitoringConfig,
|
|
67
75
|
MetricsConfig,
|
|
68
76
|
ProfilingConfig,
|
|
69
77
|
MonitoringFullConfig
|
|
70
|
-
} from './monitoring.config'
|
|
71
|
-
export type { SystemConfig, SystemRuntimeInfo } from './system.config'
|
|
78
|
+
} from './system/monitoring.config'
|
|
79
|
+
export type { SystemConfig, SystemRuntimeInfo } from './system/system.config'
|
|
80
|
+
export type { AppRuntimeConfig } from './system/runtime.config'
|
|
81
|
+
export type { DatabaseConfig } from './system/database.config'
|
|
82
|
+
export type { ServicesConfig } from './system/services.config'
|
|
72
83
|
|
|
73
84
|
// Plugin types
|
|
74
85
|
export type { CryptoAuthConfig } from '../plugins/crypto-auth/config'
|
|
@@ -77,34 +88,42 @@ export type { CryptoAuthConfig } from '../plugins/crypto-auth/config'
|
|
|
77
88
|
// 🎯 UNIFIED CONFIG OBJECT
|
|
78
89
|
// ============================================================================
|
|
79
90
|
|
|
80
|
-
import { appConfig } from './app.config'
|
|
81
|
-
import { serverConfig } from './server.config'
|
|
82
|
-
import { clientConfig } from './client.config'
|
|
83
|
-
import {
|
|
84
|
-
import {
|
|
85
|
-
import {
|
|
86
|
-
import {
|
|
87
|
-
import {
|
|
88
|
-
import {
|
|
89
|
-
import {
|
|
91
|
+
import { appConfig } from './system/app.config'
|
|
92
|
+
import { serverConfig } from './system/server.config'
|
|
93
|
+
import { clientConfig } from './system/client.config'
|
|
94
|
+
import { buildConfig } from './system/build.config'
|
|
95
|
+
import { loggerConfig } from './system/logger.config'
|
|
96
|
+
import { pluginsConfig } from './system/plugins.config'
|
|
97
|
+
import { monitoringConfig } from './system/monitoring.config'
|
|
98
|
+
import { appRuntimeConfig } from './system/runtime.config'
|
|
99
|
+
import { systemConfig, systemRuntimeInfo } from './system/system.config'
|
|
100
|
+
import { databaseConfig } from './system/database.config'
|
|
101
|
+
import { servicesConfig } from './system/services.config'
|
|
90
102
|
import { cryptoAuthConfig } from '../plugins/crypto-auth/config'
|
|
91
103
|
|
|
92
104
|
/**
|
|
93
105
|
* All configs in one object
|
|
94
106
|
* Use this when you need access to multiple configs at once
|
|
107
|
+
*
|
|
108
|
+
* For the complete FluxStack configuration with proper structure,
|
|
109
|
+
* use `fluxStackConfig` from './fluxstack.config'
|
|
95
110
|
*/
|
|
96
111
|
export const config = {
|
|
112
|
+
// System configs
|
|
97
113
|
app: appConfig,
|
|
98
114
|
server: serverConfig,
|
|
99
115
|
client: clientConfig,
|
|
100
|
-
|
|
101
|
-
services: servicesConfig,
|
|
116
|
+
build: buildConfig,
|
|
102
117
|
logger: loggerConfig,
|
|
103
118
|
plugins: pluginsConfig,
|
|
104
119
|
monitoring: monitoringConfig,
|
|
105
120
|
runtime: appRuntimeConfig,
|
|
106
121
|
system: systemConfig,
|
|
107
122
|
systemRuntime: systemRuntimeInfo,
|
|
123
|
+
database: databaseConfig,
|
|
124
|
+
services: servicesConfig,
|
|
125
|
+
|
|
126
|
+
// Plugin configs
|
|
108
127
|
cryptoAuth: cryptoAuthConfig
|
|
109
128
|
} as const
|
|
110
129
|
|
|
@@ -1,114 +1,2 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
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
|
|
1
|
+
export { monitoringConfig as default, monitoringConfig } from './system/monitoring.config'
|
|
2
|
+
export type { MonitoringConfig, MetricsConfig, ProfilingConfig, MonitoringFullConfig } from './system/monitoring.config'
|
package/config/plugins.config.ts
CHANGED
|
@@ -1,80 +1,2 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
* Declarative plugin management configuration
|
|
4
|
-
*/
|
|
5
|
-
|
|
6
|
-
import { defineConfig, config } from '@/core/utils/config-schema'
|
|
7
|
-
import { env } from '@/core/utils/env'
|
|
8
|
-
import { FLUXSTACK_VERSION } from '@/core/utils/version'
|
|
9
|
-
|
|
10
|
-
/**
|
|
11
|
-
* Plugins configuration schema
|
|
12
|
-
*/
|
|
13
|
-
const pluginsConfigSchema = {
|
|
14
|
-
// Plugin management
|
|
15
|
-
enabled: config.array(
|
|
16
|
-
'FLUXSTACK_PLUGINS_ENABLED',
|
|
17
|
-
['logger', 'swagger', 'vite', 'cors', 'static-files', 'crypto-auth']
|
|
18
|
-
),
|
|
19
|
-
|
|
20
|
-
disabled: config.array('FLUXSTACK_PLUGINS_DISABLED', []),
|
|
21
|
-
|
|
22
|
-
// Auto-discovery
|
|
23
|
-
autoDiscover: config.boolean('PLUGINS_AUTO_DISCOVER', true),
|
|
24
|
-
|
|
25
|
-
pluginsDir: config.string('PLUGINS_DIR', 'plugins'),
|
|
26
|
-
|
|
27
|
-
// Plugin-specific configurations
|
|
28
|
-
// Logger plugin (handled by logger.config.ts)
|
|
29
|
-
loggerEnabled: config.boolean('LOGGER_PLUGIN_ENABLED', true),
|
|
30
|
-
|
|
31
|
-
// Swagger plugin
|
|
32
|
-
swaggerEnabled: config.boolean('SWAGGER_ENABLED', true),
|
|
33
|
-
swaggerTitle: config.string('SWAGGER_TITLE', 'FluxStack API'),
|
|
34
|
-
swaggerVersion: config.string('SWAGGER_VERSION', FLUXSTACK_VERSION),
|
|
35
|
-
swaggerDescription: config.string(
|
|
36
|
-
'SWAGGER_DESCRIPTION',
|
|
37
|
-
'API documentation for FluxStack application'
|
|
38
|
-
),
|
|
39
|
-
swaggerPath: config.string('SWAGGER_PATH', '/swagger'),
|
|
40
|
-
|
|
41
|
-
// Swagger advanced options
|
|
42
|
-
swaggerExcludePaths: config.array('SWAGGER_EXCLUDE_PATHS', []),
|
|
43
|
-
|
|
44
|
-
// Swagger servers (comma-separated list of URLs)
|
|
45
|
-
// Format: "url1|description1,url2|description2"
|
|
46
|
-
// Example: "https://api.prod.com|Production,https://api.staging.com|Staging"
|
|
47
|
-
swaggerServers: config.string('SWAGGER_SERVERS', ''),
|
|
48
|
-
|
|
49
|
-
// Swagger UI options
|
|
50
|
-
swaggerPersistAuthorization: config.boolean('SWAGGER_PERSIST_AUTH', true),
|
|
51
|
-
swaggerDisplayRequestDuration: config.boolean('SWAGGER_DISPLAY_DURATION', true),
|
|
52
|
-
swaggerEnableFilter: config.boolean('SWAGGER_ENABLE_FILTER', true),
|
|
53
|
-
swaggerShowExtensions: config.boolean('SWAGGER_SHOW_EXTENSIONS', true),
|
|
54
|
-
swaggerTryItOutEnabled: config.boolean('SWAGGER_TRY_IT_OUT', true),
|
|
55
|
-
|
|
56
|
-
// Swagger authentication (Basic Auth)
|
|
57
|
-
swaggerAuthEnabled: config.boolean('SWAGGER_AUTH_ENABLED', false),
|
|
58
|
-
swaggerAuthUsername: config.string('SWAGGER_AUTH_USERNAME', 'admin'),
|
|
59
|
-
swaggerAuthPassword: config.string('SWAGGER_AUTH_PASSWORD', ''),
|
|
60
|
-
|
|
61
|
-
// Static files plugin
|
|
62
|
-
staticFilesEnabled: config.boolean('STATIC_FILES_ENABLED', true),
|
|
63
|
-
staticPublicDir: config.string('STATIC_PUBLIC_DIR', 'public'),
|
|
64
|
-
staticUploadsDir: config.string('STATIC_UPLOADS_DIR', 'uploads'),
|
|
65
|
-
staticCacheMaxAge: config.number('STATIC_CACHE_MAX_AGE', 31536000), // 1 year
|
|
66
|
-
staticEnableUploads: config.boolean('STATIC_ENABLE_UPLOADS', true),
|
|
67
|
-
staticEnablePublic: config.boolean('STATIC_ENABLE_PUBLIC', true),
|
|
68
|
-
|
|
69
|
-
// CORS plugin (configuration via server.config.ts)
|
|
70
|
-
// Vite plugin
|
|
71
|
-
viteEnabled: config.boolean('VITE_PLUGIN_ENABLED', true)
|
|
72
|
-
} as const
|
|
73
|
-
|
|
74
|
-
export const pluginsConfig = defineConfig(pluginsConfigSchema)
|
|
75
|
-
|
|
76
|
-
// Export type
|
|
77
|
-
export type PluginsConfig = typeof pluginsConfig
|
|
78
|
-
|
|
79
|
-
// Export default
|
|
80
|
-
export default pluginsConfig
|
|
1
|
+
export { pluginsConfig as default, pluginsConfig } from './system/plugins.config'
|
|
2
|
+
export type { PluginsConfig } from './system/plugins.config'
|
package/config/server.config.ts
CHANGED
|
@@ -1,68 +1,2 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
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
|
|
1
|
+
export { serverConfig as default, serverConfig } from './system/server.config'
|
|
2
|
+
export type { ServerConfig, CorsConfig, ServerFullConfig } from './system/server.config'
|
|
@@ -1,130 +1,2 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
* Laravel-style declarative config for third-party services
|
|
4
|
-
*/
|
|
5
|
-
|
|
6
|
-
import { defineConfig, defineNestedConfig, config } from '@/core/utils/config-schema'
|
|
7
|
-
|
|
8
|
-
/**
|
|
9
|
-
* Email service configuration
|
|
10
|
-
*/
|
|
11
|
-
const emailSchema = {
|
|
12
|
-
// SMTP
|
|
13
|
-
host: config.string('SMTP_HOST'),
|
|
14
|
-
|
|
15
|
-
port: {
|
|
16
|
-
type: 'number' as const,
|
|
17
|
-
env: 'SMTP_PORT',
|
|
18
|
-
default: 587,
|
|
19
|
-
validate: (value: number) => value > 0 || 'SMTP port must be positive'
|
|
20
|
-
},
|
|
21
|
-
|
|
22
|
-
user: config.string('SMTP_USER'),
|
|
23
|
-
password: config.string('SMTP_PASSWORD'),
|
|
24
|
-
|
|
25
|
-
secure: config.boolean('SMTP_SECURE', false),
|
|
26
|
-
|
|
27
|
-
from: {
|
|
28
|
-
type: 'string' as const,
|
|
29
|
-
env: 'SMTP_FROM',
|
|
30
|
-
default: 'noreply@example.com',
|
|
31
|
-
validate: (value: string) => {
|
|
32
|
-
const emailRegex = /^[^\s@]+@[^\s@]+\.[^\s@]+$/
|
|
33
|
-
return emailRegex.test(value) || 'From email must be valid'
|
|
34
|
-
}
|
|
35
|
-
},
|
|
36
|
-
|
|
37
|
-
replyTo: config.string('SMTP_REPLY_TO')
|
|
38
|
-
}
|
|
39
|
-
|
|
40
|
-
/**
|
|
41
|
-
* JWT authentication configuration
|
|
42
|
-
*/
|
|
43
|
-
const jwtSchema = {
|
|
44
|
-
secret: {
|
|
45
|
-
type: 'string' as const,
|
|
46
|
-
env: 'JWT_SECRET',
|
|
47
|
-
default: undefined,
|
|
48
|
-
required: false,
|
|
49
|
-
validate: (value: string) => {
|
|
50
|
-
if (!value) return true // Optional
|
|
51
|
-
if (value.length < 32) {
|
|
52
|
-
return 'JWT secret must be at least 32 characters for security'
|
|
53
|
-
}
|
|
54
|
-
return true
|
|
55
|
-
}
|
|
56
|
-
},
|
|
57
|
-
|
|
58
|
-
expiresIn: config.string('JWT_EXPIRES_IN', '24h'),
|
|
59
|
-
|
|
60
|
-
algorithm: config.enum(
|
|
61
|
-
'JWT_ALGORITHM',
|
|
62
|
-
['HS256', 'HS384', 'HS512', 'RS256', 'RS384', 'RS512'] as const,
|
|
63
|
-
'HS256'
|
|
64
|
-
),
|
|
65
|
-
|
|
66
|
-
issuer: config.string('JWT_ISSUER', 'fluxstack'),
|
|
67
|
-
|
|
68
|
-
audience: config.string('JWT_AUDIENCE')
|
|
69
|
-
}
|
|
70
|
-
|
|
71
|
-
/**
|
|
72
|
-
* Storage configuration
|
|
73
|
-
*/
|
|
74
|
-
const storageSchema = {
|
|
75
|
-
provider: config.enum(
|
|
76
|
-
'STORAGE_PROVIDER',
|
|
77
|
-
['local', 's3', 'gcs', 'azure'] as const,
|
|
78
|
-
'local'
|
|
79
|
-
),
|
|
80
|
-
|
|
81
|
-
uploadPath: config.string('UPLOAD_PATH', './uploads'),
|
|
82
|
-
|
|
83
|
-
maxFileSize: {
|
|
84
|
-
type: 'number' as const,
|
|
85
|
-
env: 'MAX_FILE_SIZE',
|
|
86
|
-
default: 10485760, // 10MB
|
|
87
|
-
validate: (value: number) => value > 0 || 'Max file size must be positive'
|
|
88
|
-
},
|
|
89
|
-
|
|
90
|
-
allowedTypes: config.array('ALLOWED_FILE_TYPES', ['image/*', 'application/pdf']),
|
|
91
|
-
|
|
92
|
-
// S3 specific
|
|
93
|
-
s3Bucket: config.string('S3_BUCKET'),
|
|
94
|
-
s3Region: config.string('S3_REGION', 'us-east-1'),
|
|
95
|
-
s3AccessKey: config.string('S3_ACCESS_KEY'),
|
|
96
|
-
s3SecretKey: config.string('S3_SECRET_KEY')
|
|
97
|
-
}
|
|
98
|
-
|
|
99
|
-
/**
|
|
100
|
-
* Redis configuration
|
|
101
|
-
*/
|
|
102
|
-
const redisSchema = {
|
|
103
|
-
host: config.string('REDIS_HOST', 'localhost'),
|
|
104
|
-
port: config.number('REDIS_PORT', 6379),
|
|
105
|
-
password: config.string('REDIS_PASSWORD'),
|
|
106
|
-
db: config.number('REDIS_DB', 0),
|
|
107
|
-
|
|
108
|
-
keyPrefix: config.string('REDIS_KEY_PREFIX', 'fluxstack:'),
|
|
109
|
-
|
|
110
|
-
enableTls: config.boolean('REDIS_TLS', false)
|
|
111
|
-
}
|
|
112
|
-
|
|
113
|
-
/**
|
|
114
|
-
* Export all service configs as nested object
|
|
115
|
-
*/
|
|
116
|
-
export const servicesConfig = defineNestedConfig({
|
|
117
|
-
email: emailSchema,
|
|
118
|
-
jwt: jwtSchema,
|
|
119
|
-
storage: storageSchema,
|
|
120
|
-
redis: redisSchema
|
|
121
|
-
})
|
|
122
|
-
|
|
123
|
-
// Export types
|
|
124
|
-
export type EmailConfig = typeof servicesConfig.email
|
|
125
|
-
export type JWTConfig = typeof servicesConfig.jwt
|
|
126
|
-
export type StorageConfig = typeof servicesConfig.storage
|
|
127
|
-
export type RedisConfig = typeof servicesConfig.redis
|
|
128
|
-
|
|
129
|
-
// Export default
|
|
130
|
-
export default servicesConfig
|
|
1
|
+
export { servicesConfig as default, servicesConfig } from './system/services.config'
|
|
2
|
+
export type { ServicesConfig } from './system/services.config'
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Application Configuration
|
|
3
|
+
* Core application settings and metadata
|
|
4
|
+
*/
|
|
5
|
+
|
|
6
|
+
import { defineConfig, config } from '@core/utils/config-schema'
|
|
7
|
+
|
|
8
|
+
/**
|
|
9
|
+
* App configuration schema
|
|
10
|
+
*/
|
|
11
|
+
export const appConfig = defineConfig({
|
|
12
|
+
// Application metadata
|
|
13
|
+
name: config.string('APP_NAME', 'fluxstack-app', true),
|
|
14
|
+
version: config.string('APP_VERSION', '1.0.0', true),
|
|
15
|
+
description: config.string('APP_DESCRIPTION', 'A FluxStack application', false),
|
|
16
|
+
env: config.enum('NODE_ENV', ['development', 'production', 'test'] as const, 'development', false),
|
|
17
|
+
|
|
18
|
+
// Runtime mode (set by CLI: --backend-only, --frontend-only)
|
|
19
|
+
mode: config.enum('FLUXSTACK_MODE', ['full-stack', 'backend-only', 'frontend-only'] as const, 'full-stack', false),
|
|
20
|
+
|
|
21
|
+
// Security
|
|
22
|
+
trustProxy: config.boolean('APP_TRUST_PROXY', false),
|
|
23
|
+
sessionSecret: config.string('APP_SESSION_SECRET', '')
|
|
24
|
+
})
|
|
25
|
+
|
|
26
|
+
// Export type
|
|
27
|
+
export type AppConfig = typeof appConfig
|
|
28
|
+
|
|
29
|
+
export default appConfig
|