create-velox-app 0.4.2 → 0.4.4

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 (174) hide show
  1. package/dist/cli.js +0 -0
  2. package/dist/index.js +21 -14
  3. package/dist/index.js.map +1 -1
  4. package/dist/templates/auth.d.ts +6 -3
  5. package/dist/templates/auth.d.ts.map +1 -1
  6. package/dist/templates/auth.js +56 -1110
  7. package/dist/templates/auth.js.map +1 -1
  8. package/dist/templates/compiler.d.ts +68 -0
  9. package/dist/templates/compiler.d.ts.map +1 -0
  10. package/dist/templates/compiler.js +149 -0
  11. package/dist/templates/compiler.js.map +1 -0
  12. package/dist/templates/default.d.ts +5 -2
  13. package/dist/templates/default.d.ts.map +1 -1
  14. package/dist/templates/default.js +51 -508
  15. package/dist/templates/default.js.map +1 -1
  16. package/dist/templates/index.d.ts.map +1 -1
  17. package/dist/templates/index.js +19 -10
  18. package/dist/templates/index.js.map +1 -1
  19. package/dist/templates/placeholders.d.ts +70 -0
  20. package/dist/templates/placeholders.d.ts.map +1 -0
  21. package/dist/templates/placeholders.js +145 -0
  22. package/dist/templates/placeholders.js.map +1 -0
  23. package/dist/templates/shared/index.d.ts +9 -0
  24. package/dist/templates/shared/index.d.ts.map +1 -0
  25. package/dist/templates/shared/index.js +9 -0
  26. package/dist/templates/shared/index.js.map +1 -0
  27. package/dist/templates/shared/root.d.ts +14 -0
  28. package/dist/templates/shared/root.d.ts.map +1 -0
  29. package/dist/templates/shared/root.js +43 -0
  30. package/dist/templates/shared/root.js.map +1 -0
  31. package/dist/templates/shared/web-base.d.ts +18 -0
  32. package/dist/templates/shared/web-base.d.ts.map +1 -0
  33. package/dist/templates/shared/web-base.js +63 -0
  34. package/dist/templates/shared/web-base.js.map +1 -0
  35. package/dist/templates/shared/web-styles.d.ts +10 -0
  36. package/dist/templates/shared/web-styles.d.ts.map +1 -0
  37. package/dist/templates/shared/web-styles.js +26 -0
  38. package/dist/templates/shared/web-styles.js.map +1 -0
  39. package/dist/templates/shared.d.ts +3 -14
  40. package/dist/templates/shared.d.ts.map +1 -1
  41. package/dist/templates/shared.js +7 -290
  42. package/dist/templates/shared.js.map +1 -1
  43. package/dist/templates/source/api/config/app.d.ts +13 -0
  44. package/dist/templates/source/api/config/app.d.ts.map +1 -0
  45. package/dist/templates/source/api/config/app.js +14 -0
  46. package/dist/templates/source/api/config/app.js.map +1 -0
  47. package/dist/templates/source/api/config/auth.d.ts +34 -0
  48. package/dist/templates/source/api/config/auth.d.ts.map +1 -0
  49. package/dist/templates/source/api/config/auth.js +165 -0
  50. package/dist/templates/source/api/config/auth.js.map +1 -0
  51. package/dist/templates/source/api/config/index.auth.d.ts +6 -0
  52. package/dist/templates/source/api/config/index.auth.d.ts.map +1 -0
  53. package/dist/templates/source/api/config/index.auth.js +6 -0
  54. package/dist/templates/source/api/config/index.auth.js.map +1 -0
  55. package/dist/templates/source/api/config/index.default.d.ts +5 -0
  56. package/dist/templates/source/api/config/index.default.d.ts.map +1 -0
  57. package/dist/templates/source/api/config/index.default.js +5 -0
  58. package/dist/templates/source/api/config/index.default.js.map +1 -0
  59. package/dist/templates/source/api/database/index.d.ts +9 -0
  60. package/dist/templates/source/api/database/index.d.ts.map +1 -0
  61. package/dist/templates/source/api/database/index.js +18 -0
  62. package/dist/templates/source/api/database/index.js.map +1 -0
  63. package/dist/templates/source/api/index.auth.d.ts +5 -0
  64. package/dist/templates/source/api/index.auth.d.ts.map +1 -0
  65. package/dist/templates/source/api/index.auth.js +59 -0
  66. package/dist/templates/source/api/index.auth.js.map +1 -0
  67. package/dist/templates/source/api/index.default.d.ts +5 -0
  68. package/dist/templates/source/api/index.default.d.ts.map +1 -0
  69. package/dist/templates/source/api/index.default.js +56 -0
  70. package/dist/templates/source/api/index.default.js.map +1 -0
  71. package/dist/templates/source/api/prisma.config.d.ts +9 -0
  72. package/dist/templates/source/api/prisma.config.d.ts.map +1 -0
  73. package/dist/templates/source/api/prisma.config.js +15 -0
  74. package/dist/templates/source/api/prisma.config.js.map +1 -0
  75. package/dist/templates/source/api/procedures/auth.d.ts +14 -0
  76. package/dist/templates/source/api/procedures/auth.d.ts.map +1 -0
  77. package/dist/templates/source/api/procedures/auth.js +221 -0
  78. package/dist/templates/source/api/procedures/auth.js.map +1 -0
  79. package/dist/templates/source/api/procedures/health.d.ts +5 -0
  80. package/dist/templates/source/api/procedures/health.d.ts.map +1 -0
  81. package/dist/templates/source/api/procedures/health.js +21 -0
  82. package/dist/templates/source/api/procedures/health.js.map +1 -0
  83. package/dist/templates/source/api/procedures/index.auth.d.ts +7 -0
  84. package/dist/templates/source/api/procedures/index.auth.d.ts.map +1 -0
  85. package/dist/templates/source/api/procedures/index.auth.js +7 -0
  86. package/dist/templates/source/api/procedures/index.auth.js.map +1 -0
  87. package/dist/templates/source/api/procedures/index.default.d.ts +6 -0
  88. package/dist/templates/source/api/procedures/index.default.d.ts.map +1 -0
  89. package/dist/templates/source/api/procedures/index.default.js +6 -0
  90. package/dist/templates/source/api/procedures/index.default.js.map +1 -0
  91. package/dist/templates/source/api/procedures/users.auth.d.ts +7 -0
  92. package/dist/templates/source/api/procedures/users.auth.d.ts.map +1 -0
  93. package/dist/templates/source/api/procedures/users.auth.js +111 -0
  94. package/dist/templates/source/api/procedures/users.auth.js.map +1 -0
  95. package/dist/templates/source/api/procedures/users.default.d.ts +5 -0
  96. package/dist/templates/source/api/procedures/users.default.d.ts.map +1 -0
  97. package/dist/templates/source/api/procedures/users.default.js +86 -0
  98. package/dist/templates/source/api/procedures/users.default.js.map +1 -0
  99. package/dist/templates/source/api/schemas/index.d.ts +5 -0
  100. package/dist/templates/source/api/schemas/index.d.ts.map +1 -0
  101. package/dist/templates/source/api/schemas/index.js +5 -0
  102. package/dist/templates/source/api/schemas/index.js.map +1 -0
  103. package/dist/templates/source/api/schemas/user.d.ts +11 -0
  104. package/dist/templates/source/api/schemas/user.d.ts.map +1 -0
  105. package/dist/templates/source/api/schemas/user.js +20 -0
  106. package/dist/templates/source/api/schemas/user.js.map +1 -0
  107. package/dist/templates/source/api/tsup.config.d.ts +3 -0
  108. package/dist/templates/source/api/tsup.config.d.ts.map +1 -0
  109. package/dist/templates/source/api/tsup.config.js +10 -0
  110. package/dist/templates/source/api/tsup.config.js.map +1 -0
  111. package/dist/templates/source/web/main.d.ts +9 -0
  112. package/dist/templates/source/web/main.d.ts.map +1 -0
  113. package/dist/templates/source/web/main.js +27 -0
  114. package/dist/templates/source/web/main.js.map +1 -0
  115. package/dist/templates/source/web/routes/__root.d.ts +2 -0
  116. package/dist/templates/source/web/routes/__root.d.ts.map +1 -0
  117. package/dist/templates/source/web/routes/__root.js +28 -0
  118. package/dist/templates/source/web/routes/__root.js.map +1 -0
  119. package/dist/templates/source/web/routes/about.d.ts +2 -0
  120. package/dist/templates/source/web/routes/about.d.ts.map +1 -0
  121. package/dist/templates/source/web/routes/about.js +33 -0
  122. package/dist/templates/source/web/routes/about.js.map +1 -0
  123. package/dist/templates/source/web/routes/index.auth.d.ts +2 -0
  124. package/dist/templates/source/web/routes/index.auth.d.ts.map +1 -0
  125. package/dist/templates/source/web/routes/index.auth.js +159 -0
  126. package/dist/templates/source/web/routes/index.auth.js.map +1 -0
  127. package/dist/templates/source/web/routes/index.default.d.ts +2 -0
  128. package/dist/templates/source/web/routes/index.default.d.ts.map +1 -0
  129. package/dist/templates/source/web/routes/index.default.js +60 -0
  130. package/dist/templates/source/web/routes/index.default.js.map +1 -0
  131. package/dist/templates/source/web/vite.config.d.ts +3 -0
  132. package/dist/templates/source/web/vite.config.d.ts.map +1 -0
  133. package/dist/templates/source/web/vite.config.js +22 -0
  134. package/dist/templates/source/web/vite.config.js.map +1 -0
  135. package/package.json +11 -9
  136. package/src/templates/source/api/config/app.ts +13 -0
  137. package/src/templates/source/api/config/auth.ts +202 -0
  138. package/src/templates/source/api/config/database.ts +22 -0
  139. package/src/templates/source/api/env.auth +22 -0
  140. package/src/templates/source/api/env.default +13 -0
  141. package/src/templates/source/api/index.auth.ts +30 -0
  142. package/src/templates/source/api/index.default.ts +27 -0
  143. package/src/templates/source/api/package.auth.json +40 -0
  144. package/src/templates/source/api/package.default.json +38 -0
  145. package/src/templates/source/api/prisma/schema.auth.prisma +30 -0
  146. package/src/templates/source/api/prisma/schema.default.prisma +28 -0
  147. package/src/templates/source/api/prisma.config.ts +15 -0
  148. package/src/templates/source/api/procedures/auth.ts +285 -0
  149. package/src/templates/source/api/procedures/health.ts +24 -0
  150. package/src/templates/source/api/procedures/users.auth.ts +170 -0
  151. package/src/templates/source/api/procedures/users.default.ts +119 -0
  152. package/src/templates/source/api/schemas/user.ts +29 -0
  153. package/src/templates/source/api/tsconfig.json +12 -0
  154. package/src/templates/source/api/tsup.config.ts +10 -0
  155. package/src/templates/source/root/CLAUDE.auth.md +148 -0
  156. package/src/templates/source/root/CLAUDE.default.md +128 -0
  157. package/src/templates/source/root/README.md +72 -0
  158. package/src/templates/source/root/gitignore +37 -0
  159. package/src/templates/source/root/package.json +17 -0
  160. package/src/templates/source/root/pnpm-workspace.yaml +2 -0
  161. package/src/templates/source/root/tsconfig.json +19 -0
  162. package/src/templates/source/web/App.module.css +282 -0
  163. package/src/templates/source/web/favicon.svg +12 -0
  164. package/src/templates/source/web/index.html +13 -0
  165. package/src/templates/source/web/main.tsx +38 -0
  166. package/src/templates/source/web/package.json +26 -0
  167. package/src/templates/source/web/routes/__root.tsx +31 -0
  168. package/src/templates/source/web/routes/about.tsx +36 -0
  169. package/src/templates/source/web/routes/index.auth.tsx +230 -0
  170. package/src/templates/source/web/routes/index.default.tsx +79 -0
  171. package/src/templates/source/web/styles/global.css +90 -0
  172. package/src/templates/source/web/tsconfig.json +24 -0
  173. package/src/templates/source/web/vite.config.ts +22 -0
  174. package/LICENSE +0 -21
@@ -1,8 +1,12 @@
1
1
  /**
2
- * Shared Template Files
2
+ * Shared Template Constants
3
3
  *
4
- * Common files used by all templates (config, gitignore, etc.)
4
+ * Common constants used across all templates.
5
5
  */
6
+ import { createRequire } from 'node:module';
7
+ // Read version from package.json dynamically
8
+ const require = createRequire(import.meta.url);
9
+ const packageJson = require('../../package.json');
6
10
  // ============================================================================
7
11
  // Version Constant
8
12
  // ============================================================================
@@ -10,292 +14,5 @@
10
14
  * VeloxTS framework version for generated projects.
11
15
  * This is automatically updated during releases via changesets.
12
16
  */
13
- export const VELOXTS_VERSION = '0.3.1';
14
- // ============================================================================
15
- // TypeScript Config
16
- // ============================================================================
17
- export function generateTsConfig() {
18
- return JSON.stringify({
19
- $schema: 'https://json.schemastore.org/tsconfig',
20
- compilerOptions: {
21
- target: 'ES2022',
22
- module: 'ES2022',
23
- moduleResolution: 'bundler',
24
- lib: ['ES2022'],
25
- strict: true,
26
- esModuleInterop: true,
27
- skipLibCheck: true,
28
- resolveJsonModule: true,
29
- allowSyntheticDefaultImports: true,
30
- forceConsistentCasingInFileNames: true,
31
- isolatedModules: true,
32
- noUnusedLocals: true,
33
- noUnusedParameters: true,
34
- noFallthroughCasesInSwitch: true,
35
- declaration: false,
36
- declarationMap: false,
37
- rootDir: './src',
38
- outDir: './dist',
39
- },
40
- include: ['src/**/*'],
41
- exclude: ['node_modules', 'dist', '**/*.test.ts', '**/*.spec.ts'],
42
- }, null, 2);
43
- }
44
- // ============================================================================
45
- // tsup Config
46
- // ============================================================================
47
- export function generateTsupConfig() {
48
- return `import { defineConfig } from 'tsup';
49
-
50
- export default defineConfig({
51
- entry: ['src/index.ts'],
52
- format: ['esm'],
53
- target: 'node18',
54
- clean: true,
55
- dts: false,
56
- sourcemap: true,
57
- });
58
- `;
59
- }
60
- // ============================================================================
61
- // Environment Files
62
- // ============================================================================
63
- export function generateGitignore() {
64
- return `# Dependencies
65
- node_modules/
66
-
67
- # Build output
68
- dist/
69
- *.tsbuildinfo
70
-
71
- # Environment variables
72
- .env
73
- .env.local
74
-
75
- # Database
76
- *.db
77
- *.db-journal
78
-
79
- # Generated Prisma client
80
- src/generated/
81
-
82
- # Logs
83
- logs/
84
- *.log
85
-
86
- # OS
87
- .DS_Store
88
- Thumbs.db
89
-
90
- # IDE
91
- .vscode/
92
- .idea/
93
- *.swp
94
- *.swo
95
-
96
- # Turbo
97
- .turbo/
98
- `;
99
- }
100
- // ============================================================================
101
- // Prisma Config (Prisma 7.x)
102
- // ============================================================================
103
- export function generatePrismaConfig() {
104
- return `/**
105
- * Prisma Configuration (Prisma 7.x)
106
- *
107
- * Database URL is now configured here instead of schema.prisma.
108
- * See: https://www.prisma.io/docs/orm/more/upgrade-guides/upgrading-versions/upgrading-to-prisma-7
109
- */
110
-
111
- import 'dotenv/config';
112
- import { defineConfig } from 'prisma/config';
113
-
114
- export default defineConfig({
115
- earlyAccess: true,
116
- schema: './prisma/schema.prisma',
117
- datasource: {
118
- url: process.env.DATABASE_URL!,
119
- },
120
- });
121
- `;
122
- }
123
- // ============================================================================
124
- // Config Files
125
- // ============================================================================
126
- export function generateConfigIndex() {
127
- return `/**
128
- * Configuration Exports
129
- */
130
-
131
- export * from './app.js';
132
- `;
133
- }
134
- export function generateConfigApp() {
135
- return `/**
136
- * Application Configuration
137
- */
138
-
139
- export interface AppConfig {
140
- port: number;
141
- host: string;
142
- logger: boolean;
143
- apiPrefix: string;
144
- env: 'development' | 'production' | 'test';
145
- }
146
-
147
- export function createConfig(): AppConfig {
148
- return {
149
- port: Number(process.env.PORT) || 3210,
150
- host: process.env.HOST || '0.0.0.0',
151
- logger: process.env.LOG_LEVEL !== 'silent',
152
- apiPrefix: process.env.API_PREFIX || '/api',
153
- env: (process.env.NODE_ENV as AppConfig['env']) || 'development',
154
- };
155
- }
156
-
157
- export const config = createConfig();
158
- `;
159
- }
160
- // ============================================================================
161
- // Health Procedures
162
- // ============================================================================
163
- export function generateHealthProcedures() {
164
- return `/**
165
- * Health Check Procedures
166
- */
167
-
168
- import { VELOX_VERSION, defineProcedures, procedure, z } from '@veloxts/velox';
169
-
170
- export const healthProcedures = defineProcedures('health', {
171
- getHealth: procedure()
172
- .rest({ method: 'GET', path: '/health' })
173
- .output(
174
- z.object({
175
- status: z.literal('ok'),
176
- version: z.string(),
177
- timestamp: z.string().datetime(),
178
- uptime: z.number(),
179
- })
180
- )
181
- .query(async () => ({
182
- status: 'ok' as const,
183
- version: VELOX_VERSION,
184
- timestamp: new Date().toISOString(),
185
- uptime: process.uptime(),
186
- })),
187
- });
188
- `;
189
- }
190
- // ============================================================================
191
- // Static Files
192
- // ============================================================================
193
- export function generateIndexHtml() {
194
- return `<!DOCTYPE html>
195
- <html lang="en">
196
- <head>
197
- <meta charset="UTF-8">
198
- <meta name="viewport" content="width=device-width, initial-scale=1.0">
199
- <title>VeloxTS App</title>
200
- <style>
201
- * { box-sizing: border-box; margin: 0; padding: 0; }
202
- body { font-family: system-ui, sans-serif; background: #f5f5f5; padding: 20px; }
203
- .container { max-width: 800px; margin: 0 auto; }
204
- h1 { margin-bottom: 20px; color: #333; }
205
- .card { background: white; border-radius: 8px; padding: 20px; margin-bottom: 20px; box-shadow: 0 1px 3px rgba(0,0,0,0.1); }
206
- .card h2 { margin-bottom: 15px; color: #555; font-size: 1.1rem; }
207
- button { background: #007bff; color: white; border: none; padding: 8px 16px; border-radius: 4px; cursor: pointer; }
208
- button:hover { background: #0056b3; }
209
- </style>
210
- </head>
211
- <body>
212
- <div class="container">
213
- <h1>Welcome to VeloxTS</h1>
214
- <div class="card">
215
- <h2>Your app is running!</h2>
216
- <p>Visit <code>/api/health</code> to check the API status.</p>
217
- <p>Visit <code>/api/users</code> to see the users endpoint.</p>
218
- </div>
219
- </div>
220
- </body>
221
- </html>
222
- `;
223
- }
224
- // ============================================================================
225
- // README
226
- // ============================================================================
227
- export function generateReadme(config) {
228
- return `# ${config.projectName}
229
-
230
- A VeloxTS application - TypeScript full-stack framework.
231
-
232
- ## Getting Started
233
-
234
- ### Install Dependencies
235
-
236
- \`\`\`bash
237
- ${config.packageManager} install
238
- \`\`\`
239
-
240
- ### Setup Database
241
-
242
- \`\`\`bash
243
- ${config.packageManager} db:push
244
- \`\`\`
245
-
246
- ### Start Development Server
247
-
248
- \`\`\`bash
249
- ${config.packageManager} dev
250
- \`\`\`
251
-
252
- The app will start at http://localhost:3210
253
-
254
- ## Project Structure
255
-
256
- \`\`\`
257
- src/
258
- ├── config/ # Application configuration
259
- ├── database/ # Database client
260
- ├── procedures/ # API procedures (business logic)
261
- ├── schemas/ # Zod validation schemas
262
- └── index.ts # Application entry point
263
- \`\`\`
264
-
265
- ## Available Scripts
266
-
267
- - \`${config.packageManager} dev\` - Start development server with hot reload
268
- - \`${config.packageManager} build\` - Build for production
269
- - \`${config.packageManager} start\` - Start production server
270
- - \`${config.packageManager} db:push\` - Sync database schema
271
- - \`${config.packageManager} db:studio\` - Open Prisma Studio
272
-
273
- ## Learn More
274
-
275
- - [VeloxTS Documentation](https://veloxts.dev)
276
- - [TypeScript](https://www.typescriptlang.org/)
277
- - [Fastify](https://fastify.dev/)
278
- - [Prisma](https://www.prisma.io/)
279
-
280
- ## License
281
-
282
- MIT
283
- `;
284
- }
285
- // ============================================================================
286
- // Shared Files Generator
287
- // ============================================================================
288
- export function generateSharedFiles(config) {
289
- return [
290
- { path: 'tsconfig.json', content: generateTsConfig() },
291
- { path: 'tsup.config.ts', content: generateTsupConfig() },
292
- { path: '.gitignore', content: generateGitignore() },
293
- { path: 'prisma.config.ts', content: generatePrismaConfig() },
294
- { path: 'README.md', content: generateReadme(config) },
295
- { path: 'src/config/index.ts', content: generateConfigIndex() },
296
- { path: 'src/config/app.ts', content: generateConfigApp() },
297
- { path: 'src/procedures/health.ts', content: generateHealthProcedures() },
298
- { path: 'public/index.html', content: generateIndexHtml() },
299
- ];
300
- }
17
+ export const VELOXTS_VERSION = packageJson.version ?? '0.0.0-unknown';
301
18
  //# sourceMappingURL=shared.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"shared.js","sourceRoot":"","sources":["../../src/templates/shared.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"shared.js","sourceRoot":"","sources":["../../src/templates/shared.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAE5C,6CAA6C;AAC7C,MAAM,OAAO,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAC/C,MAAM,WAAW,GAAG,OAAO,CAAC,oBAAoB,CAAwB,CAAC;AAEzE,+EAA+E;AAC/E,mBAAmB;AACnB,+EAA+E;AAE/E;;;GAGG;AACH,MAAM,CAAC,MAAM,eAAe,GAAW,WAAW,CAAC,OAAO,IAAI,eAAe,CAAC"}
@@ -0,0 +1,13 @@
1
+ /**
2
+ * Application Configuration
3
+ */
4
+ export interface AppConfig {
5
+ port: number;
6
+ host: string;
7
+ logger: boolean;
8
+ apiPrefix: string;
9
+ env: 'development' | 'production' | 'test';
10
+ }
11
+ export declare function createConfig(): AppConfig;
12
+ export declare const config: AppConfig;
13
+ //# sourceMappingURL=app.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"app.d.ts","sourceRoot":"","sources":["../../../../../src/templates/source/api/config/app.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,MAAM,WAAW,SAAS;IACxB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,OAAO,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,GAAG,EAAE,aAAa,GAAG,YAAY,GAAG,MAAM,CAAC;CAC5C;AAED,wBAAgB,YAAY,IAAI,SAAS,CAQxC;AAED,eAAO,MAAM,MAAM,WAAiB,CAAC"}
@@ -0,0 +1,14 @@
1
+ /**
2
+ * Application Configuration
3
+ */
4
+ export function createConfig() {
5
+ return {
6
+ port: Number(process.env.PORT) || __API_PORT__,
7
+ host: process.env.HOST || '0.0.0.0',
8
+ logger: process.env.LOG_LEVEL !== 'silent',
9
+ apiPrefix: process.env.API_PREFIX || '/api',
10
+ env: process.env.NODE_ENV || 'development',
11
+ };
12
+ }
13
+ export const config = createConfig();
14
+ //# sourceMappingURL=app.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"app.js","sourceRoot":"","sources":["../../../../../src/templates/source/api/config/app.ts"],"names":[],"mappings":"AAAA;;GAEG;AAUH,MAAM,UAAU,YAAY;IAC1B,OAAO;QACL,IAAI,EAAE,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,YAAY;QAC9C,IAAI,EAAE,OAAO,CAAC,GAAG,CAAC,IAAI,IAAI,SAAS;QACnC,MAAM,EAAE,OAAO,CAAC,GAAG,CAAC,SAAS,KAAK,QAAQ;QAC1C,SAAS,EAAE,OAAO,CAAC,GAAG,CAAC,UAAU,IAAI,MAAM;QAC3C,GAAG,EAAG,OAAO,CAAC,GAAG,CAAC,QAA6B,IAAI,aAAa;KACjE,CAAC;AACJ,CAAC;AAED,MAAM,CAAC,MAAM,MAAM,GAAG,YAAY,EAAE,CAAC"}
@@ -0,0 +1,34 @@
1
+ /**
2
+ * Authentication Configuration
3
+ *
4
+ * JWT-based authentication configuration.
5
+ *
6
+ * SECURITY: JWT secrets are required from environment variables.
7
+ * The app will fail to start in production without them.
8
+ */
9
+ import type { AuthPluginOptions } from '@veloxts/velox';
10
+ /**
11
+ * In-memory token revocation store.
12
+ *
13
+ * PRODUCTION NOTE: Replace with Redis or database-backed store for:
14
+ * - Persistence across server restarts
15
+ * - Horizontal scaling (multiple server instances)
16
+ */
17
+ declare class InMemoryTokenStore {
18
+ private revokedTokens;
19
+ private usedRefreshTokens;
20
+ private cleanupInterval;
21
+ constructor();
22
+ revoke(jti: string, expiresInMs?: number): void;
23
+ isRevoked(jti: string): boolean;
24
+ markRefreshTokenUsed(jti: string, userId: string): void;
25
+ isRefreshTokenUsed(jti: string): string | undefined;
26
+ revokeAllUserTokens(userId: string): void;
27
+ private cleanup;
28
+ }
29
+ export declare const tokenStore: InMemoryTokenStore;
30
+ export declare function parseUserRoles(rolesJson: string | null): string[];
31
+ export declare function createAuthConfig(): AuthPluginOptions;
32
+ export declare const authConfig: AuthPluginOptions;
33
+ export {};
34
+ //# sourceMappingURL=auth.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"auth.d.ts","sourceRoot":"","sources":["../../../../../src/templates/source/api/config/auth.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAC;AAgExD;;;;;;GAMG;AACH,cAAM,kBAAkB;IACtB,OAAO,CAAC,aAAa,CAAkC;IACvD,OAAO,CAAC,iBAAiB,CAAkC;IAC3D,OAAO,CAAC,eAAe,CAA+B;;IAMtD,MAAM,CAAC,GAAG,EAAE,MAAM,EAAE,WAAW,GAAE,MAAgC,GAAG,IAAI;IAIxE,SAAS,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO;IAU/B,oBAAoB,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI;IAKvD,kBAAkB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS;IAInD,mBAAmB,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI;IAOzC,OAAO,CAAC,OAAO;CAQhB;AAED,eAAO,MAAM,UAAU,oBAA2B,CAAC;AAQnD,wBAAgB,cAAc,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI,GAAG,MAAM,EAAE,CAkBjE;AAyBD,wBAAgB,gBAAgB,IAAI,iBAAiB,CAmBpD;AAED,eAAO,MAAM,UAAU,mBAAqB,CAAC"}
@@ -0,0 +1,165 @@
1
+ /**
2
+ * Authentication Configuration
3
+ *
4
+ * JWT-based authentication configuration.
5
+ *
6
+ * SECURITY: JWT secrets are required from environment variables.
7
+ * The app will fail to start in production without them.
8
+ */
9
+ import { prisma } from '../database/index.js';
10
+ // ============================================================================
11
+ // Environment Variable Validation
12
+ // ============================================================================
13
+ /**
14
+ * Gets required JWT secrets from environment variables.
15
+ * Throws a clear error in production if secrets are not configured.
16
+ */
17
+ function getRequiredSecrets() {
18
+ const jwtSecret = process.env.JWT_SECRET;
19
+ const refreshSecret = process.env.JWT_REFRESH_SECRET;
20
+ const isDevelopment = process.env.NODE_ENV !== 'production';
21
+ if (!jwtSecret || !refreshSecret) {
22
+ if (isDevelopment) {
23
+ console.warn('\n' +
24
+ '='.repeat(70) +
25
+ '\n' +
26
+ ' WARNING: JWT secrets not configured!\n' +
27
+ ' Using temporary development secrets. DO NOT USE IN PRODUCTION!\n' +
28
+ '\n' +
29
+ ' To configure secrets, add to .env:\n' +
30
+ ' JWT_SECRET=<generate with: openssl rand -base64 64>\n' +
31
+ ' JWT_REFRESH_SECRET=<generate with: openssl rand -base64 64>\n' +
32
+ '='.repeat(70) +
33
+ '\n');
34
+ return {
35
+ jwtSecret: jwtSecret || `dev-only-jwt-secret-${Math.random().toString(36).substring(2).repeat(4)}`,
36
+ refreshSecret: refreshSecret ||
37
+ `dev-only-refresh-secret-${Math.random().toString(36).substring(2).repeat(4)}`,
38
+ };
39
+ }
40
+ throw new Error('\n' +
41
+ 'CRITICAL: JWT secrets are required but not configured.\n' +
42
+ '\n' +
43
+ 'Required environment variables:\n' +
44
+ ' - JWT_SECRET: Secret for signing access tokens (64+ characters)\n' +
45
+ ' - JWT_REFRESH_SECRET: Secret for signing refresh tokens (64+ characters)\n' +
46
+ '\n' +
47
+ 'Generate secure secrets with:\n' +
48
+ ' openssl rand -base64 64\n' +
49
+ '\n' +
50
+ 'Add them to your environment or .env file before starting the server.\n');
51
+ }
52
+ return { jwtSecret, refreshSecret };
53
+ }
54
+ // ============================================================================
55
+ // Token Revocation Store
56
+ // ============================================================================
57
+ /**
58
+ * In-memory token revocation store.
59
+ *
60
+ * PRODUCTION NOTE: Replace with Redis or database-backed store for:
61
+ * - Persistence across server restarts
62
+ * - Horizontal scaling (multiple server instances)
63
+ */
64
+ class InMemoryTokenStore {
65
+ revokedTokens = new Map();
66
+ usedRefreshTokens = new Map();
67
+ cleanupInterval = null;
68
+ constructor() {
69
+ this.cleanupInterval = setInterval(() => this.cleanup(), 5 * 60 * 1000);
70
+ }
71
+ revoke(jti, expiresInMs = 7 * 24 * 60 * 60 * 1000) {
72
+ this.revokedTokens.set(jti, Date.now() + expiresInMs);
73
+ }
74
+ isRevoked(jti) {
75
+ const expiry = this.revokedTokens.get(jti);
76
+ if (!expiry)
77
+ return false;
78
+ if (Date.now() > expiry) {
79
+ this.revokedTokens.delete(jti);
80
+ return false;
81
+ }
82
+ return true;
83
+ }
84
+ markRefreshTokenUsed(jti, userId) {
85
+ this.usedRefreshTokens.set(jti, userId);
86
+ setTimeout(() => this.usedRefreshTokens.delete(jti), 7 * 24 * 60 * 60 * 1000);
87
+ }
88
+ isRefreshTokenUsed(jti) {
89
+ return this.usedRefreshTokens.get(jti);
90
+ }
91
+ revokeAllUserTokens(userId) {
92
+ console.warn(`[Security] Token reuse detected for user ${userId}. ` +
93
+ 'All tokens should be revoked. Implement proper user->token mapping for production.');
94
+ }
95
+ cleanup() {
96
+ const now = Date.now();
97
+ for (const [jti, expiry] of this.revokedTokens.entries()) {
98
+ if (now > expiry) {
99
+ this.revokedTokens.delete(jti);
100
+ }
101
+ }
102
+ }
103
+ }
104
+ export const tokenStore = new InMemoryTokenStore();
105
+ // ============================================================================
106
+ // Role Parsing
107
+ // ============================================================================
108
+ const ALLOWED_ROLES = ['user', 'admin', 'moderator', 'editor'];
109
+ export function parseUserRoles(rolesJson) {
110
+ if (!rolesJson)
111
+ return ['user'];
112
+ try {
113
+ const parsed = JSON.parse(rolesJson);
114
+ if (!Array.isArray(parsed)) {
115
+ return ['user'];
116
+ }
117
+ const validRoles = parsed
118
+ .filter((role) => typeof role === 'string')
119
+ .filter((role) => ALLOWED_ROLES.includes(role));
120
+ return validRoles.length > 0 ? validRoles : ['user'];
121
+ }
122
+ catch {
123
+ return ['user'];
124
+ }
125
+ }
126
+ // ============================================================================
127
+ // User Loader
128
+ // ============================================================================
129
+ async function userLoader(userId) {
130
+ const user = await prisma.user.findUnique({
131
+ where: { id: userId },
132
+ });
133
+ if (!user)
134
+ return null;
135
+ return {
136
+ id: user.id,
137
+ email: user.email,
138
+ name: user.name,
139
+ roles: parseUserRoles(user.roles),
140
+ };
141
+ }
142
+ // ============================================================================
143
+ // Auth Configuration
144
+ // ============================================================================
145
+ export function createAuthConfig() {
146
+ const { jwtSecret, refreshSecret } = getRequiredSecrets();
147
+ return {
148
+ jwt: {
149
+ secret: jwtSecret,
150
+ refreshSecret: refreshSecret,
151
+ accessTokenExpiry: '15m',
152
+ refreshTokenExpiry: '7d',
153
+ issuer: 'velox-app',
154
+ audience: 'velox-app-client',
155
+ },
156
+ userLoader,
157
+ isTokenRevoked: async (jti) => tokenStore.isRevoked(jti),
158
+ rateLimit: {
159
+ max: 100,
160
+ windowMs: 60000,
161
+ },
162
+ };
163
+ }
164
+ export const authConfig = createAuthConfig();
165
+ //# sourceMappingURL=auth.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"auth.js","sourceRoot":"","sources":["../../../../../src/templates/source/api/config/auth.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ /**
2
+ * Configuration Exports
3
+ */
4
+ export * from './app.js';
5
+ export * from './auth.js';
6
+ //# sourceMappingURL=index.auth.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.auth.d.ts","sourceRoot":"","sources":["../../../../../src/templates/source/api/config/index.auth.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,cAAc,UAAU,CAAC;AACzB,cAAc,WAAW,CAAC"}
@@ -0,0 +1,6 @@
1
+ /**
2
+ * Configuration Exports
3
+ */
4
+ export * from './app.js';
5
+ export * from './auth.js';
6
+ //# sourceMappingURL=index.auth.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.auth.js","sourceRoot":"","sources":["../../../../../src/templates/source/api/config/index.auth.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,cAAc,UAAU,CAAC;AACzB,cAAc,WAAW,CAAC"}
@@ -0,0 +1,5 @@
1
+ /**
2
+ * Configuration Exports
3
+ */
4
+ export * from './app.js';
5
+ //# sourceMappingURL=index.default.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.default.d.ts","sourceRoot":"","sources":["../../../../../src/templates/source/api/config/index.default.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,cAAc,UAAU,CAAC"}
@@ -0,0 +1,5 @@
1
+ /**
2
+ * Configuration Exports
3
+ */
4
+ export * from './app.js';
5
+ //# sourceMappingURL=index.default.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.default.js","sourceRoot":"","sources":["../../../../../src/templates/source/api/config/index.default.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,cAAc,UAAU,CAAC"}
@@ -0,0 +1,9 @@
1
+ /**
2
+ * Database Client (Prisma 7.x)
3
+ *
4
+ * Prisma 7 requires:
5
+ * - Generated client from custom output path
6
+ * - Driver adapter for database connections
7
+ */
8
+ export declare const prisma: any;
9
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../src/templates/source/api/database/index.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAeH,eAAO,MAAM,MAAM,KAAgC,CAAC"}
@@ -0,0 +1,18 @@
1
+ /**
2
+ * Database Client (Prisma 7.x)
3
+ *
4
+ * Prisma 7 requires:
5
+ * - Generated client from custom output path
6
+ * - Driver adapter for database connections
7
+ */
8
+ import { PrismaBetterSqlite3 } from '@prisma/adapter-better-sqlite3';
9
+ import { PrismaClient } from '../generated/prisma/client.js';
10
+ // Validate DATABASE_URL is set
11
+ if (!process.env.DATABASE_URL) {
12
+ throw new Error('DATABASE_URL environment variable is required');
13
+ }
14
+ // Create SQLite adapter with database URL from environment
15
+ const adapter = new PrismaBetterSqlite3({ url: process.env.DATABASE_URL });
16
+ // Export configured Prisma client
17
+ export const prisma = new PrismaClient({ adapter });
18
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../src/templates/source/api/database/index.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,mBAAmB,EAAE,MAAM,gCAAgC,CAAC;AAErE,OAAO,EAAE,YAAY,EAAE,MAAM,+BAA+B,CAAC;AAE7D,+BAA+B;AAC/B,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,YAAY,EAAE,CAAC;IAC9B,MAAM,IAAI,KAAK,CAAC,+CAA+C,CAAC,CAAC;AACnE,CAAC;AAED,2DAA2D;AAC3D,MAAM,OAAO,GAAG,IAAI,mBAAmB,CAAC,EAAE,GAAG,EAAE,OAAO,CAAC,GAAG,CAAC,YAAY,EAAE,CAAC,CAAC;AAE3E,kCAAkC;AAClC,MAAM,CAAC,MAAM,MAAM,GAAG,IAAI,YAAY,CAAC,EAAE,OAAO,EAAE,CAAC,CAAC"}
@@ -0,0 +1,5 @@
1
+ /**
2
+ * Application Entry Point
3
+ */
4
+ import 'dotenv/config';
5
+ //# sourceMappingURL=index.auth.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.auth.d.ts","sourceRoot":"","sources":["../../../../src/templates/source/api/index.auth.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,eAAe,CAAC"}