create-velox-app 0.4.3 → 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 -1112
  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 -509
  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 +2 -13
  40. package/dist/templates/shared.d.ts.map +1 -1
  41. package/dist/templates/shared.js +2 -289
  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,7 +1,7 @@
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
6
  import { createRequire } from 'node:module';
7
7
  // Read version from package.json dynamically
@@ -15,291 +15,4 @@ const packageJson = require('../../package.json');
15
15
  * This is automatically updated during releases via changesets.
16
16
  */
17
17
  export const VELOXTS_VERSION = packageJson.version ?? '0.0.0-unknown';
18
- // ============================================================================
19
- // TypeScript Config
20
- // ============================================================================
21
- export function generateTsConfig() {
22
- return JSON.stringify({
23
- $schema: 'https://json.schemastore.org/tsconfig',
24
- compilerOptions: {
25
- target: 'ES2022',
26
- module: 'ES2022',
27
- moduleResolution: 'bundler',
28
- lib: ['ES2022'],
29
- strict: true,
30
- esModuleInterop: true,
31
- skipLibCheck: true,
32
- resolveJsonModule: true,
33
- allowSyntheticDefaultImports: true,
34
- forceConsistentCasingInFileNames: true,
35
- isolatedModules: true,
36
- noUnusedLocals: true,
37
- noUnusedParameters: true,
38
- noFallthroughCasesInSwitch: true,
39
- declaration: false,
40
- declarationMap: false,
41
- rootDir: './src',
42
- outDir: './dist',
43
- },
44
- include: ['src/**/*'],
45
- exclude: ['node_modules', 'dist', '**/*.test.ts', '**/*.spec.ts'],
46
- }, null, 2);
47
- }
48
- // ============================================================================
49
- // tsup Config
50
- // ============================================================================
51
- export function generateTsupConfig() {
52
- return `import { defineConfig } from 'tsup';
53
-
54
- export default defineConfig({
55
- entry: ['src/index.ts'],
56
- format: ['esm'],
57
- target: 'node18',
58
- clean: true,
59
- dts: false,
60
- sourcemap: true,
61
- });
62
- `;
63
- }
64
- // ============================================================================
65
- // Environment Files
66
- // ============================================================================
67
- export function generateGitignore() {
68
- return `# Dependencies
69
- node_modules/
70
-
71
- # Build output
72
- dist/
73
- *.tsbuildinfo
74
-
75
- # Environment variables
76
- .env
77
- .env.local
78
-
79
- # Database
80
- *.db
81
- *.db-journal
82
-
83
- # Generated Prisma client
84
- src/generated/
85
-
86
- # Logs
87
- logs/
88
- *.log
89
-
90
- # OS
91
- .DS_Store
92
- Thumbs.db
93
-
94
- # IDE
95
- .vscode/
96
- .idea/
97
- *.swp
98
- *.swo
99
-
100
- # Turbo
101
- .turbo/
102
- `;
103
- }
104
- // ============================================================================
105
- // Prisma Config (Prisma 7.x)
106
- // ============================================================================
107
- export function generatePrismaConfig() {
108
- return `/**
109
- * Prisma Configuration (Prisma 7.x)
110
- *
111
- * Database URL is now configured here instead of schema.prisma.
112
- * See: https://www.prisma.io/docs/orm/more/upgrade-guides/upgrading-versions/upgrading-to-prisma-7
113
- */
114
-
115
- import 'dotenv/config';
116
- import { defineConfig } from 'prisma/config';
117
-
118
- export default defineConfig({
119
- earlyAccess: true,
120
- schema: './prisma/schema.prisma',
121
- datasource: {
122
- url: process.env.DATABASE_URL!,
123
- },
124
- });
125
- `;
126
- }
127
- // ============================================================================
128
- // Config Files
129
- // ============================================================================
130
- export function generateConfigIndex() {
131
- return `/**
132
- * Configuration Exports
133
- */
134
-
135
- export * from './app.js';
136
- `;
137
- }
138
- export function generateConfigApp() {
139
- return `/**
140
- * Application Configuration
141
- */
142
-
143
- export interface AppConfig {
144
- port: number;
145
- host: string;
146
- logger: boolean;
147
- apiPrefix: string;
148
- env: 'development' | 'production' | 'test';
149
- }
150
-
151
- export function createConfig(): AppConfig {
152
- return {
153
- port: Number(process.env.PORT) || 3210,
154
- host: process.env.HOST || '0.0.0.0',
155
- logger: process.env.LOG_LEVEL !== 'silent',
156
- apiPrefix: process.env.API_PREFIX || '/api',
157
- env: (process.env.NODE_ENV as AppConfig['env']) || 'development',
158
- };
159
- }
160
-
161
- export const config = createConfig();
162
- `;
163
- }
164
- // ============================================================================
165
- // Health Procedures
166
- // ============================================================================
167
- export function generateHealthProcedures() {
168
- return `/**
169
- * Health Check Procedures
170
- */
171
-
172
- import { VELOX_VERSION, defineProcedures, procedure, z } from '@veloxts/velox';
173
-
174
- export const healthProcedures = defineProcedures('health', {
175
- getHealth: procedure()
176
- .rest({ method: 'GET', path: '/health' })
177
- .output(
178
- z.object({
179
- status: z.literal('ok'),
180
- version: z.string(),
181
- timestamp: z.string().datetime(),
182
- uptime: z.number(),
183
- })
184
- )
185
- .query(async () => ({
186
- status: 'ok' as const,
187
- version: VELOX_VERSION,
188
- timestamp: new Date().toISOString(),
189
- uptime: process.uptime(),
190
- })),
191
- });
192
- `;
193
- }
194
- // ============================================================================
195
- // Static Files
196
- // ============================================================================
197
- export function generateIndexHtml() {
198
- return `<!DOCTYPE html>
199
- <html lang="en">
200
- <head>
201
- <meta charset="UTF-8">
202
- <meta name="viewport" content="width=device-width, initial-scale=1.0">
203
- <title>VeloxTS App</title>
204
- <style>
205
- * { box-sizing: border-box; margin: 0; padding: 0; }
206
- body { font-family: system-ui, sans-serif; background: #f5f5f5; padding: 20px; }
207
- .container { max-width: 800px; margin: 0 auto; }
208
- h1 { margin-bottom: 20px; color: #333; }
209
- .card { background: white; border-radius: 8px; padding: 20px; margin-bottom: 20px; box-shadow: 0 1px 3px rgba(0,0,0,0.1); }
210
- .card h2 { margin-bottom: 15px; color: #555; font-size: 1.1rem; }
211
- button { background: #007bff; color: white; border: none; padding: 8px 16px; border-radius: 4px; cursor: pointer; }
212
- button:hover { background: #0056b3; }
213
- </style>
214
- </head>
215
- <body>
216
- <div class="container">
217
- <h1>Welcome to VeloxTS</h1>
218
- <div class="card">
219
- <h2>Your app is running!</h2>
220
- <p>Visit <code>/api/health</code> to check the API status.</p>
221
- <p>Visit <code>/api/users</code> to see the users endpoint.</p>
222
- </div>
223
- </div>
224
- </body>
225
- </html>
226
- `;
227
- }
228
- // ============================================================================
229
- // README
230
- // ============================================================================
231
- export function generateReadme(config) {
232
- return `# ${config.projectName}
233
-
234
- A VeloxTS application - TypeScript full-stack framework.
235
-
236
- ## Getting Started
237
-
238
- ### Install Dependencies
239
-
240
- \`\`\`bash
241
- ${config.packageManager} install
242
- \`\`\`
243
-
244
- ### Setup Database
245
-
246
- \`\`\`bash
247
- ${config.packageManager} db:push
248
- \`\`\`
249
-
250
- ### Start Development Server
251
-
252
- \`\`\`bash
253
- ${config.packageManager} dev
254
- \`\`\`
255
-
256
- The app will start at http://localhost:3210
257
-
258
- ## Project Structure
259
-
260
- \`\`\`
261
- src/
262
- ├── config/ # Application configuration
263
- ├── database/ # Database client
264
- ├── procedures/ # API procedures (business logic)
265
- ├── schemas/ # Zod validation schemas
266
- └── index.ts # Application entry point
267
- \`\`\`
268
-
269
- ## Available Scripts
270
-
271
- - \`${config.packageManager} dev\` - Start development server with hot reload
272
- - \`${config.packageManager} build\` - Build for production
273
- - \`${config.packageManager} start\` - Start production server
274
- - \`${config.packageManager} db:push\` - Sync database schema
275
- - \`${config.packageManager} db:studio\` - Open Prisma Studio
276
-
277
- ## Learn More
278
-
279
- - [VeloxTS Documentation](https://veloxts.dev)
280
- - [TypeScript](https://www.typescriptlang.org/)
281
- - [Fastify](https://fastify.dev/)
282
- - [Prisma](https://www.prisma.io/)
283
-
284
- ## License
285
-
286
- MIT
287
- `;
288
- }
289
- // ============================================================================
290
- // Shared Files Generator
291
- // ============================================================================
292
- export function generateSharedFiles(config) {
293
- return [
294
- { path: 'tsconfig.json', content: generateTsConfig() },
295
- { path: 'tsup.config.ts', content: generateTsupConfig() },
296
- { path: '.gitignore', content: generateGitignore() },
297
- { path: 'prisma.config.ts', content: generatePrismaConfig() },
298
- { path: 'README.md', content: generateReadme(config) },
299
- { path: 'src/config/index.ts', content: generateConfigIndex() },
300
- { path: 'src/config/app.ts', content: generateConfigApp() },
301
- { path: 'src/procedures/health.ts', content: generateHealthProcedures() },
302
- { path: 'public/index.html', content: generateIndexHtml() },
303
- ];
304
- }
305
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"}