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.
- 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 +242 -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 +285 -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
|
@@ -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
|
|
@@ -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
|