create-fluxstack 1.0.22 → 1.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 (82) hide show
  1. package/app/server/backend-only.ts +5 -5
  2. package/app/server/index.ts +63 -54
  3. package/app/server/live/FluxStackConfig.ts +43 -39
  4. package/app/server/live/SystemMonitorIntegration.ts +2 -2
  5. package/app/server/live/register-components.ts +6 -26
  6. package/app/server/middleware/errorHandling.ts +6 -4
  7. package/app/server/routes/config.ts +145 -0
  8. package/app/server/routes/index.ts +5 -3
  9. package/config/app.config.ts +113 -0
  10. package/config/build.config.ts +24 -0
  11. package/config/database.config.ts +99 -0
  12. package/config/index.ts +68 -0
  13. package/config/logger.config.ts +27 -0
  14. package/config/runtime.config.ts +92 -0
  15. package/config/server.config.ts +46 -0
  16. package/config/services.config.ts +130 -0
  17. package/config/system.config.ts +105 -0
  18. package/core/build/bundler.ts +53 -5
  19. package/core/build/flux-plugins-generator.ts +315 -0
  20. package/core/build/index.ts +11 -7
  21. package/core/build/live-components-generator.ts +231 -0
  22. package/core/build/optimizer.ts +2 -54
  23. package/core/cli/index.ts +31 -13
  24. package/core/config/env.ts +38 -94
  25. package/core/config/runtime-config.ts +61 -58
  26. package/core/config/schema.ts +1 -0
  27. package/core/framework/server.ts +55 -11
  28. package/core/plugins/built-in/index.ts +7 -17
  29. package/core/plugins/built-in/static/index.ts +24 -10
  30. package/core/plugins/built-in/swagger/index.ts +228 -228
  31. package/core/plugins/built-in/vite/index.ts +374 -358
  32. package/core/plugins/dependency-manager.ts +5 -5
  33. package/core/plugins/manager.ts +57 -14
  34. package/core/plugins/registry.ts +3 -3
  35. package/core/server/index.ts +0 -1
  36. package/core/server/live/ComponentRegistry.ts +34 -8
  37. package/core/server/live/LiveComponentPerformanceMonitor.ts +1 -1
  38. package/core/server/live/websocket-plugin.ts +434 -434
  39. package/core/server/middleware/README.md +488 -0
  40. package/core/server/middleware/elysia-helpers.ts +227 -0
  41. package/core/server/middleware/index.ts +25 -9
  42. package/core/server/plugins/static-files-plugin.ts +231 -231
  43. package/core/utils/config-schema.ts +484 -0
  44. package/core/utils/env.ts +306 -0
  45. package/core/utils/helpers.ts +9 -3
  46. package/core/utils/logger/colors.ts +114 -0
  47. package/core/utils/logger/config.ts +35 -0
  48. package/core/utils/logger/formatter.ts +82 -0
  49. package/core/utils/logger/group-logger.ts +101 -0
  50. package/core/utils/logger/index.ts +199 -250
  51. package/core/utils/logger/stack-trace.ts +92 -0
  52. package/core/utils/logger/startup-banner.ts +92 -0
  53. package/core/utils/logger/winston-logger.ts +152 -0
  54. package/core/utils/version.ts +5 -0
  55. package/create-fluxstack.ts +1 -0
  56. package/fluxstack.config.ts +6 -12
  57. package/package.json +117 -114
  58. package/plugins/crypto-auth/README.md +238 -0
  59. package/plugins/crypto-auth/client/CryptoAuthClient.ts +325 -0
  60. package/plugins/crypto-auth/client/components/AuthProvider.tsx +190 -0
  61. package/plugins/crypto-auth/client/components/LoginButton.tsx +155 -0
  62. package/plugins/crypto-auth/client/components/ProtectedRoute.tsx +109 -0
  63. package/plugins/crypto-auth/client/components/SessionInfo.tsx +242 -0
  64. package/plugins/crypto-auth/client/components/index.ts +15 -0
  65. package/plugins/crypto-auth/client/index.ts +12 -0
  66. package/plugins/crypto-auth/index.ts +230 -0
  67. package/plugins/crypto-auth/package.json +65 -0
  68. package/plugins/crypto-auth/plugin.json +29 -0
  69. package/plugins/crypto-auth/server/AuthMiddleware.ts +237 -0
  70. package/plugins/crypto-auth/server/CryptoAuthService.ts +293 -0
  71. package/plugins/crypto-auth/server/index.ts +9 -0
  72. package/vite.config.ts +16 -0
  73. package/core/config/env-dynamic.ts +0 -326
  74. package/core/plugins/built-in/logger/index.ts +0 -180
  75. package/core/server/plugins/logger.ts +0 -47
  76. package/core/utils/env-runtime-v2.ts +0 -232
  77. package/core/utils/env-runtime.ts +0 -259
  78. package/core/utils/logger/formatters.ts +0 -222
  79. package/core/utils/logger/middleware.ts +0 -253
  80. package/core/utils/logger/performance.ts +0 -384
  81. package/core/utils/logger/transports.ts +0 -365
  82. package/core/utils/logger.ts +0 -106
@@ -1,229 +1,229 @@
1
- import { swagger } from '@elysiajs/swagger'
2
- import type { Plugin, PluginContext } from '../../types'
3
-
4
- export const swaggerPlugin: Plugin = {
5
- name: 'swagger',
6
- version: '1.0.0',
7
- description: 'Enhanced Swagger documentation plugin for FluxStack with customizable options',
8
- author: 'FluxStack Team',
9
- priority: 500,
10
- category: 'documentation',
11
- tags: ['swagger', 'documentation', 'api'],
12
- dependencies: [], // No dependencies
13
-
14
- configSchema: {
15
- type: 'object',
16
- properties: {
17
- enabled: {
18
- type: 'boolean',
19
- description: 'Enable Swagger documentation'
20
- },
21
- path: {
22
- type: 'string',
23
- description: 'Swagger UI path'
24
- },
25
- title: {
26
- type: 'string',
27
- description: 'API documentation title'
28
- },
29
- description: {
30
- type: 'string',
31
- description: 'API documentation description'
32
- },
33
- version: {
34
- type: 'string',
35
- description: 'API version'
36
- },
37
- tags: {
38
- type: 'array',
39
- items: {
40
- type: 'object',
41
- properties: {
42
- name: { type: 'string' },
43
- description: { type: 'string' }
44
- },
45
- required: ['name']
46
- },
47
- description: 'API tags for grouping endpoints'
48
- },
49
- servers: {
50
- type: 'array',
51
- items: {
52
- type: 'object',
53
- properties: {
54
- url: { type: 'string' },
55
- description: { type: 'string' }
56
- },
57
- required: ['url']
58
- },
59
- description: 'API servers'
60
- },
61
- excludePaths: {
62
- type: 'array',
63
- items: { type: 'string' },
64
- description: 'Paths to exclude from documentation'
65
- },
66
- securitySchemes: {
67
- type: 'object',
68
- description: 'Security schemes definition'
69
- },
70
- globalSecurity: {
71
- type: 'array',
72
- items: {
73
- type: 'object'
74
- },
75
- description: 'Global security requirements'
76
- }
77
- },
78
- additionalProperties: false
79
- },
80
-
81
- defaultConfig: {
82
- enabled: true,
83
- path: '/swagger',
84
- title: 'FluxStack API',
85
- description: 'Modern full-stack TypeScript framework with type-safe API endpoints',
86
- version: '1.0.0',
87
- tags: [
88
- {
89
- name: 'Health',
90
- description: 'Health check endpoints'
91
- },
92
- {
93
- name: 'API',
94
- description: 'API endpoints'
95
- }
96
- ],
97
- servers: [],
98
- excludePaths: [],
99
- securitySchemes: {},
100
- globalSecurity: []
101
- },
102
-
103
- setup: async (context: PluginContext) => {
104
- const config = getPluginConfig(context)
105
-
106
- if (!config.enabled) {
107
- context.logger.info('Swagger plugin disabled by configuration')
108
- return
109
- }
110
-
111
- try {
112
- // Build servers list
113
- const servers = config.servers.length > 0 ? config.servers : [
114
- {
115
- url: `http://${context.config.server.host}:${context.config.server.port}`,
116
- description: 'Development server'
117
- }
118
- ]
119
-
120
- // Add production server if in production
121
- if (context.utils.isProduction()) {
122
- servers.push({
123
- url: 'https://api.example.com', // This would be configured
124
- description: 'Production server'
125
- })
126
- }
127
-
128
- const swaggerConfig = {
129
- path: config.path,
130
- documentation: {
131
- info: {
132
- title: config.title || context.config.app?.name || 'FluxStack API',
133
- version: config.version || context.config.app?.version || '1.0.0',
134
- description: config.description || context.config.app?.description || 'Modern full-stack TypeScript framework with type-safe API endpoints'
135
- },
136
- tags: config.tags,
137
- servers,
138
-
139
- // Add security schemes if defined
140
- ...(Object.keys(config.securitySchemes).length > 0 && {
141
- components: {
142
- securitySchemes: config.securitySchemes
143
- }
144
- }),
145
-
146
- // Add global security if defined
147
- ...(config.globalSecurity.length > 0 && {
148
- security: config.globalSecurity
149
- })
150
- },
151
- exclude: config.excludePaths,
152
- swaggerOptions: {
153
- persistAuthorization: true,
154
- displayRequestDuration: true,
155
- filter: true,
156
- showExtensions: true,
157
- tryItOutEnabled: true
158
- }
159
- }
160
-
161
- context.app.use(swagger(swaggerConfig))
162
-
163
- context.logger.info(`Swagger documentation enabled at ${config.path}`, {
164
- title: swaggerConfig.documentation.info.title,
165
- version: swaggerConfig.documentation.info.version,
166
- servers: servers.length
167
- })
168
- } catch (error) {
169
- context.logger.error('Failed to setup Swagger plugin', { error })
170
- throw error
171
- }
172
- },
173
-
174
- onServerStart: async (context: PluginContext) => {
175
- const config = getPluginConfig(context)
176
-
177
- if (config.enabled) {
178
- const swaggerUrl = `http://${context.config.server.host}:${context.config.server.port}${config.path}`
179
- context.logger.info(`Swagger documentation available at: ${swaggerUrl}`)
180
- }
181
- }
182
- }
183
-
184
- // Helper function to get plugin config from context
185
- function getPluginConfig(context: PluginContext) {
186
- // In a real implementation, this would get the config from the plugin context
187
- // For now, merge default config with any provided config
188
- const pluginConfig = context.config.plugins.config?.swagger || {}
189
- return { ...swaggerPlugin.defaultConfig, ...pluginConfig }
190
- }
191
-
192
- // Example usage for security configuration:
193
- //
194
- // To enable security in your FluxStack app, configure like this:
195
- //
196
- // plugins: {
197
- // config: {
198
- // swagger: {
199
- // securitySchemes: {
200
- // bearerAuth: {
201
- // type: 'http',
202
- // scheme: 'bearer',
203
- // bearerFormat: 'JWT'
204
- // },
205
- // apiKeyAuth: {
206
- // type: 'apiKey',
207
- // in: 'header',
208
- // name: 'X-API-Key'
209
- // }
210
- // },
211
- // globalSecurity: [
212
- // { bearerAuth: [] } // Apply JWT auth globally
213
- // ]
214
- // }
215
- // }
216
- // }
217
- //
218
- // Then in your routes, you can override per endpoint:
219
- // app.get('/public', handler, {
220
- // detail: { security: [] } // No auth required
221
- // })
222
- //
223
- // app.get('/private', handler, {
224
- // detail: {
225
- // security: [{ apiKeyAuth: [] }] // API key required
226
- // }
227
- // })
228
-
1
+ import { swagger } from '@elysiajs/swagger'
2
+ import type { Plugin, PluginContext } from '../../types'
3
+
4
+ export const swaggerPlugin: Plugin = {
5
+ name: 'swagger',
6
+ version: '1.0.0',
7
+ description: 'Enhanced Swagger documentation plugin for FluxStack with customizable options',
8
+ author: 'FluxStack Team',
9
+ priority: 500,
10
+ category: 'documentation',
11
+ tags: ['swagger', 'documentation', 'api'],
12
+ dependencies: [], // No dependencies
13
+
14
+ configSchema: {
15
+ type: 'object',
16
+ properties: {
17
+ enabled: {
18
+ type: 'boolean',
19
+ description: 'Enable Swagger documentation'
20
+ },
21
+ path: {
22
+ type: 'string',
23
+ description: 'Swagger UI path'
24
+ },
25
+ title: {
26
+ type: 'string',
27
+ description: 'API documentation title'
28
+ },
29
+ description: {
30
+ type: 'string',
31
+ description: 'API documentation description'
32
+ },
33
+ version: {
34
+ type: 'string',
35
+ description: 'API version'
36
+ },
37
+ tags: {
38
+ type: 'array',
39
+ items: {
40
+ type: 'object',
41
+ properties: {
42
+ name: { type: 'string' },
43
+ description: { type: 'string' }
44
+ },
45
+ required: ['name']
46
+ },
47
+ description: 'API tags for grouping endpoints'
48
+ },
49
+ servers: {
50
+ type: 'array',
51
+ items: {
52
+ type: 'object',
53
+ properties: {
54
+ url: { type: 'string' },
55
+ description: { type: 'string' }
56
+ },
57
+ required: ['url']
58
+ },
59
+ description: 'API servers'
60
+ },
61
+ excludePaths: {
62
+ type: 'array',
63
+ items: { type: 'string' },
64
+ description: 'Paths to exclude from documentation'
65
+ },
66
+ securitySchemes: {
67
+ type: 'object',
68
+ description: 'Security schemes definition'
69
+ },
70
+ globalSecurity: {
71
+ type: 'array',
72
+ items: {
73
+ type: 'object'
74
+ },
75
+ description: 'Global security requirements'
76
+ }
77
+ },
78
+ additionalProperties: false
79
+ },
80
+
81
+ defaultConfig: {
82
+ enabled: true,
83
+ path: '/swagger',
84
+ title: 'FluxStack API',
85
+ description: 'Modern full-stack TypeScript framework with type-safe API endpoints',
86
+ version: '1.0.0',
87
+ tags: [
88
+ {
89
+ name: 'Health',
90
+ description: 'Health check endpoints'
91
+ },
92
+ {
93
+ name: 'API',
94
+ description: 'API endpoints'
95
+ }
96
+ ],
97
+ servers: [],
98
+ excludePaths: [],
99
+ securitySchemes: {},
100
+ globalSecurity: []
101
+ },
102
+
103
+ setup: async (context: PluginContext) => {
104
+ const config = getPluginConfig(context)
105
+
106
+ if (!config.enabled) {
107
+ context.logger.debug('Swagger plugin disabled by configuration')
108
+ return
109
+ }
110
+
111
+ try {
112
+ // Build servers list
113
+ const servers = config.servers.length > 0 ? config.servers : [
114
+ {
115
+ url: `http://${context.config.server.host}:${context.config.server.port}`,
116
+ description: 'Development server'
117
+ }
118
+ ]
119
+
120
+ // Add production server if in production
121
+ if (context.utils.isProduction()) {
122
+ servers.push({
123
+ url: 'https://api.example.com', // This would be configured
124
+ description: 'Production server'
125
+ })
126
+ }
127
+
128
+ const swaggerConfig = {
129
+ path: config.path,
130
+ documentation: {
131
+ info: {
132
+ title: config.title || context.config.app?.name || 'FluxStack API',
133
+ version: config.version || context.config.app?.version || '1.0.0',
134
+ description: config.description || context.config.app?.description || 'Modern full-stack TypeScript framework with type-safe API endpoints'
135
+ },
136
+ tags: config.tags,
137
+ servers,
138
+
139
+ // Add security schemes if defined
140
+ ...(Object.keys(config.securitySchemes).length > 0 && {
141
+ components: {
142
+ securitySchemes: config.securitySchemes
143
+ }
144
+ }),
145
+
146
+ // Add global security if defined
147
+ ...(config.globalSecurity.length > 0 && {
148
+ security: config.globalSecurity
149
+ })
150
+ },
151
+ exclude: config.excludePaths,
152
+ swaggerOptions: {
153
+ persistAuthorization: true,
154
+ displayRequestDuration: true,
155
+ filter: true,
156
+ showExtensions: true,
157
+ tryItOutEnabled: true
158
+ }
159
+ }
160
+
161
+ context.app.use(swagger(swaggerConfig))
162
+
163
+ context.logger.debug(`Swagger documentation enabled at ${config.path}`, {
164
+ title: swaggerConfig.documentation.info.title,
165
+ version: swaggerConfig.documentation.info.version,
166
+ servers: servers.length
167
+ })
168
+ } catch (error) {
169
+ context.logger.error('Failed to setup Swagger plugin', { error })
170
+ throw error
171
+ }
172
+ },
173
+
174
+ onServerStart: async (context: PluginContext) => {
175
+ const config = getPluginConfig(context)
176
+
177
+ if (config.enabled) {
178
+ const swaggerUrl = `http://${context.config.server.host}:${context.config.server.port}${config.path}`
179
+ context.logger.debug(`Swagger documentation available at: ${swaggerUrl}`)
180
+ }
181
+ }
182
+ }
183
+
184
+ // Helper function to get plugin config from context
185
+ function getPluginConfig(context: PluginContext) {
186
+ // In a real implementation, this would get the config from the plugin context
187
+ // For now, merge default config with any provided config
188
+ const pluginConfig = context.config.plugins.config?.swagger || {}
189
+ return { ...swaggerPlugin.defaultConfig, ...pluginConfig }
190
+ }
191
+
192
+ // Example usage for security configuration:
193
+ //
194
+ // To enable security in your FluxStack app, configure like this:
195
+ //
196
+ // plugins: {
197
+ // config: {
198
+ // swagger: {
199
+ // securitySchemes: {
200
+ // bearerAuth: {
201
+ // type: 'http',
202
+ // scheme: 'bearer',
203
+ // bearerFormat: 'JWT'
204
+ // },
205
+ // apiKeyAuth: {
206
+ // type: 'apiKey',
207
+ // in: 'header',
208
+ // name: 'X-API-Key'
209
+ // }
210
+ // },
211
+ // globalSecurity: [
212
+ // { bearerAuth: [] } // Apply JWT auth globally
213
+ // ]
214
+ // }
215
+ // }
216
+ // }
217
+ //
218
+ // Then in your routes, you can override per endpoint:
219
+ // app.get('/public', handler, {
220
+ // detail: { security: [] } // No auth required
221
+ // })
222
+ //
223
+ // app.get('/private', handler, {
224
+ // detail: {
225
+ // security: [{ apiKeyAuth: [] }] // API key required
226
+ // }
227
+ // })
228
+
229
229
  export default swaggerPlugin