create-velox-app 0.6.27 ā 0.6.31
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/CHANGELOG.md +24 -0
- package/dist/cli.d.ts +0 -1
- package/dist/cli.js +74 -7
- package/dist/index.d.ts +2 -3
- package/dist/index.js +7 -8
- package/dist/templates/auth.d.ts +0 -1
- package/dist/templates/auth.js +9 -9
- package/dist/templates/compiler.d.ts +0 -1
- package/dist/templates/compiler.js +1 -2
- package/dist/templates/index.d.ts +0 -1
- package/dist/templates/index.js +0 -1
- package/dist/templates/placeholders.d.ts +31 -3
- package/dist/templates/placeholders.js +167 -4
- package/dist/templates/rsc.d.ts +0 -1
- package/dist/templates/rsc.js +9 -9
- package/dist/templates/shared/index.d.ts +0 -1
- package/dist/templates/shared/index.js +0 -1
- package/dist/templates/shared/root.d.ts +0 -1
- package/dist/templates/shared/root.js +11 -2
- package/dist/templates/shared/web-base.d.ts +0 -1
- package/dist/templates/shared/web-base.js +0 -1
- package/dist/templates/shared/web-styles.d.ts +0 -1
- package/dist/templates/shared/web-styles.js +0 -1
- package/dist/templates/shared.d.ts +0 -1
- package/dist/templates/shared.js +0 -1
- package/dist/templates/spa.d.ts +0 -1
- package/dist/templates/spa.js +9 -9
- package/dist/templates/trpc.d.ts +0 -1
- package/dist/templates/trpc.js +9 -9
- package/dist/templates/types.d.ts +0 -1
- package/dist/templates/types.js +1 -3
- package/package.json +5 -2
- package/src/templates/source/api/config/database.ts +76 -0
- package/src/templates/source/api/env.auth +1 -4
- package/src/templates/source/api/env.default +1 -4
- package/src/templates/source/api/prisma/schema.auth.prisma +1 -2
- package/src/templates/source/api/prisma/schema.default.prisma +1 -2
- package/src/templates/source/api/procedures/auth.ts +2 -2
- package/src/templates/source/api/procedures/health.ts +2 -2
- package/src/templates/source/api/procedures/users.auth.ts +2 -2
- package/src/templates/source/api/procedures/users.default.ts +2 -8
- package/src/templates/source/root/.cursorrules +3 -3
- package/src/templates/source/root/CLAUDE.auth.md +2 -2
- package/src/templates/source/root/CLAUDE.default.md +2 -2
- package/src/templates/source/root/package.json +6 -6
- package/src/templates/source/rsc/env.example +1 -1
- package/src/templates/source/rsc/prisma/schema.prisma +1 -1
- package/src/templates/source/rsc/src/api/database.ts +76 -0
- package/src/templates/source/rsc/src/api/procedures/health.ts +2 -2
- package/src/templates/source/rsc/src/api/procedures/posts.ts +2 -2
- package/src/templates/source/rsc/src/api/procedures/users.ts +2 -2
- package/dist/cli.d.ts.map +0 -1
- package/dist/cli.js.map +0 -1
- package/dist/index.d.ts.map +0 -1
- package/dist/index.js.map +0 -1
- package/dist/templates/auth.d.ts.map +0 -1
- package/dist/templates/auth.js.map +0 -1
- package/dist/templates/compiler.d.ts.map +0 -1
- package/dist/templates/compiler.js.map +0 -1
- package/dist/templates/default.d.ts +0 -12
- package/dist/templates/default.d.ts.map +0 -1
- package/dist/templates/default.js +0 -85
- package/dist/templates/default.js.map +0 -1
- package/dist/templates/fullstack.d.ts +0 -15
- package/dist/templates/fullstack.d.ts.map +0 -1
- package/dist/templates/fullstack.js +0 -110
- package/dist/templates/fullstack.js.map +0 -1
- package/dist/templates/index.d.ts.map +0 -1
- package/dist/templates/index.js.map +0 -1
- package/dist/templates/placeholders.d.ts.map +0 -1
- package/dist/templates/placeholders.js.map +0 -1
- package/dist/templates/rsc.d.ts.map +0 -1
- package/dist/templates/rsc.js.map +0 -1
- package/dist/templates/shared/index.d.ts.map +0 -1
- package/dist/templates/shared/index.js.map +0 -1
- package/dist/templates/shared/root.d.ts.map +0 -1
- package/dist/templates/shared/root.js.map +0 -1
- package/dist/templates/shared/web-base.d.ts.map +0 -1
- package/dist/templates/shared/web-base.js.map +0 -1
- package/dist/templates/shared/web-styles.d.ts.map +0 -1
- package/dist/templates/shared/web-styles.js.map +0 -1
- package/dist/templates/shared.d.ts.map +0 -1
- package/dist/templates/shared.js.map +0 -1
- package/dist/templates/source/api/config/app.d.ts +0 -13
- package/dist/templates/source/api/config/app.d.ts.map +0 -1
- package/dist/templates/source/api/config/app.js +0 -14
- package/dist/templates/source/api/config/app.js.map +0 -1
- package/dist/templates/source/api/config/auth.d.ts +0 -34
- package/dist/templates/source/api/config/auth.d.ts.map +0 -1
- package/dist/templates/source/api/config/auth.js +0 -165
- package/dist/templates/source/api/config/auth.js.map +0 -1
- package/dist/templates/source/api/config/index.auth.d.ts +0 -6
- package/dist/templates/source/api/config/index.auth.d.ts.map +0 -1
- package/dist/templates/source/api/config/index.auth.js +0 -6
- package/dist/templates/source/api/config/index.auth.js.map +0 -1
- package/dist/templates/source/api/config/index.default.d.ts +0 -5
- package/dist/templates/source/api/config/index.default.d.ts.map +0 -1
- package/dist/templates/source/api/config/index.default.js +0 -5
- package/dist/templates/source/api/config/index.default.js.map +0 -1
- package/dist/templates/source/api/database/index.d.ts +0 -9
- package/dist/templates/source/api/database/index.d.ts.map +0 -1
- package/dist/templates/source/api/database/index.js +0 -18
- package/dist/templates/source/api/database/index.js.map +0 -1
- package/dist/templates/source/api/index.auth.d.ts +0 -5
- package/dist/templates/source/api/index.auth.d.ts.map +0 -1
- package/dist/templates/source/api/index.auth.js +0 -59
- package/dist/templates/source/api/index.auth.js.map +0 -1
- package/dist/templates/source/api/index.default.d.ts +0 -5
- package/dist/templates/source/api/index.default.d.ts.map +0 -1
- package/dist/templates/source/api/index.default.js +0 -56
- package/dist/templates/source/api/index.default.js.map +0 -1
- package/dist/templates/source/api/prisma.config.d.ts +0 -9
- package/dist/templates/source/api/prisma.config.d.ts.map +0 -1
- package/dist/templates/source/api/prisma.config.js +0 -15
- package/dist/templates/source/api/prisma.config.js.map +0 -1
- package/dist/templates/source/api/procedures/auth.d.ts +0 -14
- package/dist/templates/source/api/procedures/auth.d.ts.map +0 -1
- package/dist/templates/source/api/procedures/auth.js +0 -221
- package/dist/templates/source/api/procedures/auth.js.map +0 -1
- package/dist/templates/source/api/procedures/health.d.ts +0 -5
- package/dist/templates/source/api/procedures/health.d.ts.map +0 -1
- package/dist/templates/source/api/procedures/health.js +0 -21
- package/dist/templates/source/api/procedures/health.js.map +0 -1
- package/dist/templates/source/api/procedures/index.auth.d.ts +0 -7
- package/dist/templates/source/api/procedures/index.auth.d.ts.map +0 -1
- package/dist/templates/source/api/procedures/index.auth.js +0 -7
- package/dist/templates/source/api/procedures/index.auth.js.map +0 -1
- package/dist/templates/source/api/procedures/index.default.d.ts +0 -6
- package/dist/templates/source/api/procedures/index.default.d.ts.map +0 -1
- package/dist/templates/source/api/procedures/index.default.js +0 -6
- package/dist/templates/source/api/procedures/index.default.js.map +0 -1
- package/dist/templates/source/api/procedures/users.auth.d.ts +0 -7
- package/dist/templates/source/api/procedures/users.auth.d.ts.map +0 -1
- package/dist/templates/source/api/procedures/users.auth.js +0 -111
- package/dist/templates/source/api/procedures/users.auth.js.map +0 -1
- package/dist/templates/source/api/procedures/users.default.d.ts +0 -5
- package/dist/templates/source/api/procedures/users.default.d.ts.map +0 -1
- package/dist/templates/source/api/procedures/users.default.js +0 -86
- package/dist/templates/source/api/procedures/users.default.js.map +0 -1
- package/dist/templates/source/api/schemas/index.d.ts +0 -5
- package/dist/templates/source/api/schemas/index.d.ts.map +0 -1
- package/dist/templates/source/api/schemas/index.js +0 -5
- package/dist/templates/source/api/schemas/index.js.map +0 -1
- package/dist/templates/source/api/schemas/user.d.ts +0 -11
- package/dist/templates/source/api/schemas/user.d.ts.map +0 -1
- package/dist/templates/source/api/schemas/user.js +0 -20
- package/dist/templates/source/api/schemas/user.js.map +0 -1
- package/dist/templates/source/api/tsup.config.d.ts +0 -3
- package/dist/templates/source/api/tsup.config.d.ts.map +0 -1
- package/dist/templates/source/api/tsup.config.js +0 -10
- package/dist/templates/source/api/tsup.config.js.map +0 -1
- package/dist/templates/source/web/main.d.ts +0 -9
- package/dist/templates/source/web/main.d.ts.map +0 -1
- package/dist/templates/source/web/main.js +0 -27
- package/dist/templates/source/web/main.js.map +0 -1
- package/dist/templates/source/web/routes/__root.d.ts +0 -2
- package/dist/templates/source/web/routes/__root.d.ts.map +0 -1
- package/dist/templates/source/web/routes/__root.js +0 -28
- package/dist/templates/source/web/routes/__root.js.map +0 -1
- package/dist/templates/source/web/routes/about.d.ts +0 -2
- package/dist/templates/source/web/routes/about.d.ts.map +0 -1
- package/dist/templates/source/web/routes/about.js +0 -33
- package/dist/templates/source/web/routes/about.js.map +0 -1
- package/dist/templates/source/web/routes/index.auth.d.ts +0 -2
- package/dist/templates/source/web/routes/index.auth.d.ts.map +0 -1
- package/dist/templates/source/web/routes/index.auth.js +0 -159
- package/dist/templates/source/web/routes/index.auth.js.map +0 -1
- package/dist/templates/source/web/routes/index.default.d.ts +0 -2
- package/dist/templates/source/web/routes/index.default.d.ts.map +0 -1
- package/dist/templates/source/web/routes/index.default.js +0 -60
- package/dist/templates/source/web/routes/index.default.js.map +0 -1
- package/dist/templates/source/web/vite.config.d.ts +0 -3
- package/dist/templates/source/web/vite.config.d.ts.map +0 -1
- package/dist/templates/source/web/vite.config.js +0 -22
- package/dist/templates/source/web/vite.config.js.map +0 -1
- package/dist/templates/spa.d.ts.map +0 -1
- package/dist/templates/spa.js.map +0 -1
- package/dist/templates/trpc.d.ts.map +0 -1
- package/dist/templates/trpc.js.map +0 -1
- package/dist/templates/types.d.ts.map +0 -1
- package/dist/templates/types.js.map +0 -1
|
@@ -1 +0,0 @@
|
|
|
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"}
|
|
@@ -1,14 +0,0 @@
|
|
|
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
|
|
@@ -1 +0,0 @@
|
|
|
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"}
|
|
@@ -1,34 +0,0 @@
|
|
|
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
|
|
@@ -1 +0,0 @@
|
|
|
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"}
|
|
@@ -1,165 +0,0 @@
|
|
|
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
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"auth.js","sourceRoot":"","sources":["../../../../../src/templates/source/api/config/auth.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
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"}
|
|
@@ -1 +0,0 @@
|
|
|
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"}
|
|
@@ -1 +0,0 @@
|
|
|
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"}
|
|
@@ -1 +0,0 @@
|
|
|
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"}
|
|
@@ -1 +0,0 @@
|
|
|
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"}
|
|
@@ -1,18 +0,0 @@
|
|
|
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
|
|
@@ -1 +0,0 @@
|
|
|
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"}
|
|
@@ -1 +0,0 @@
|
|
|
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"}
|
|
@@ -1,59 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Application Entry Point
|
|
3
|
-
*/
|
|
4
|
-
import 'dotenv/config';
|
|
5
|
-
import { veloxApp, VELOX_VERSION, databasePlugin, authPlugin, rest, getRouteSummary, } from '@veloxts/velox';
|
|
6
|
-
import { authConfig, config } from './config/index.js';
|
|
7
|
-
import { prisma } from './database/index.js';
|
|
8
|
-
import { authProcedures } from './procedures/auth.js';
|
|
9
|
-
import { healthProcedures } from './procedures/health.js';
|
|
10
|
-
import { userProcedures } from './procedures/users.js';
|
|
11
|
-
// ============================================================================
|
|
12
|
-
// Application Bootstrap
|
|
13
|
-
// ============================================================================
|
|
14
|
-
async function createApp() {
|
|
15
|
-
const app = await veloxApp({
|
|
16
|
-
port: config.port,
|
|
17
|
-
host: config.host,
|
|
18
|
-
logger: config.logger,
|
|
19
|
-
});
|
|
20
|
-
// Register database plugin
|
|
21
|
-
await app.register(databasePlugin({ client: prisma }));
|
|
22
|
-
// Register auth plugin
|
|
23
|
-
await app.register(authPlugin(authConfig));
|
|
24
|
-
console.log('[Auth] JWT authentication enabled');
|
|
25
|
-
// Register all procedures
|
|
26
|
-
const collections = [healthProcedures, authProcedures, userProcedures];
|
|
27
|
-
app.routes(rest(collections, { prefix: config.apiPrefix }));
|
|
28
|
-
return { app, collections };
|
|
29
|
-
}
|
|
30
|
-
function printBanner(collections) {
|
|
31
|
-
const divider = 'ā'.repeat(50);
|
|
32
|
-
console.log(`\n${divider}`);
|
|
33
|
-
console.log(` VeloxTS API v${VELOX_VERSION}`);
|
|
34
|
-
console.log(` Environment: ${config.env}`);
|
|
35
|
-
console.log(divider);
|
|
36
|
-
const routes = getRouteSummary(collections);
|
|
37
|
-
console.log('\nš Registered Routes:\n');
|
|
38
|
-
for (const route of routes) {
|
|
39
|
-
const method = route.method.padEnd(6);
|
|
40
|
-
const path = route.path.padEnd(25);
|
|
41
|
-
console.log(` ${method} ${path} ā ${route.namespace}.${route.procedure}`);
|
|
42
|
-
}
|
|
43
|
-
console.log(`\n${divider}`);
|
|
44
|
-
console.log(` API: http://localhost:${config.port}${config.apiPrefix}`);
|
|
45
|
-
console.log(`${divider}\n`);
|
|
46
|
-
}
|
|
47
|
-
async function main() {
|
|
48
|
-
try {
|
|
49
|
-
const { app, collections } = await createApp();
|
|
50
|
-
await app.start();
|
|
51
|
-
printBanner(collections);
|
|
52
|
-
}
|
|
53
|
-
catch (error) {
|
|
54
|
-
console.error('Failed to start application:', error);
|
|
55
|
-
process.exit(1);
|
|
56
|
-
}
|
|
57
|
-
}
|
|
58
|
-
main();
|
|
59
|
-
//# sourceMappingURL=index.auth.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.auth.js","sourceRoot":"","sources":["../../../../src/templates/source/api/index.auth.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.default.d.ts","sourceRoot":"","sources":["../../../../src/templates/source/api/index.default.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,eAAe,CAAC"}
|
|
@@ -1,56 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Application Entry Point
|
|
3
|
-
*/
|
|
4
|
-
import 'dotenv/config';
|
|
5
|
-
import { veloxApp, VELOX_VERSION, databasePlugin, rest, getRouteSummary, } from '@veloxts/velox';
|
|
6
|
-
import { config } from './config/index.js';
|
|
7
|
-
import { prisma } from './database/index.js';
|
|
8
|
-
import { healthProcedures } from './procedures/health.js';
|
|
9
|
-
import { userProcedures } from './procedures/users.js';
|
|
10
|
-
// ============================================================================
|
|
11
|
-
// Application Bootstrap
|
|
12
|
-
// ============================================================================
|
|
13
|
-
async function createApp() {
|
|
14
|
-
const app = await veloxApp({
|
|
15
|
-
port: config.port,
|
|
16
|
-
host: config.host,
|
|
17
|
-
logger: config.logger,
|
|
18
|
-
});
|
|
19
|
-
// Register database plugin
|
|
20
|
-
await app.register(databasePlugin({ client: prisma }));
|
|
21
|
-
// Register all procedures
|
|
22
|
-
const collections = [healthProcedures, userProcedures];
|
|
23
|
-
app.routes(rest(collections, { prefix: config.apiPrefix }));
|
|
24
|
-
return { app, collections };
|
|
25
|
-
}
|
|
26
|
-
function printBanner(collections) {
|
|
27
|
-
const divider = 'ā'.repeat(50);
|
|
28
|
-
console.log(`\n${divider}`);
|
|
29
|
-
console.log(` VeloxTS API v${VELOX_VERSION}`);
|
|
30
|
-
console.log(` Environment: ${config.env}`);
|
|
31
|
-
console.log(divider);
|
|
32
|
-
// Print registered routes
|
|
33
|
-
const routes = getRouteSummary(collections);
|
|
34
|
-
console.log('\nš Registered Routes:\n');
|
|
35
|
-
for (const route of routes) {
|
|
36
|
-
const method = route.method.padEnd(6);
|
|
37
|
-
const path = route.path.padEnd(25);
|
|
38
|
-
console.log(` ${method} ${path} ā ${route.namespace}.${route.procedure}`);
|
|
39
|
-
}
|
|
40
|
-
console.log(`\n${divider}`);
|
|
41
|
-
console.log(` API: http://localhost:${config.port}${config.apiPrefix}`);
|
|
42
|
-
console.log(`${divider}\n`);
|
|
43
|
-
}
|
|
44
|
-
async function main() {
|
|
45
|
-
try {
|
|
46
|
-
const { app, collections } = await createApp();
|
|
47
|
-
await app.start();
|
|
48
|
-
printBanner(collections);
|
|
49
|
-
}
|
|
50
|
-
catch (error) {
|
|
51
|
-
console.error('Failed to start application:', error);
|
|
52
|
-
process.exit(1);
|
|
53
|
-
}
|
|
54
|
-
}
|
|
55
|
-
main();
|
|
56
|
-
//# sourceMappingURL=index.default.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.default.js","sourceRoot":"","sources":["../../../../src/templates/source/api/index.default.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"prisma.config.d.ts","sourceRoot":"","sources":["../../../../src/templates/source/api/prisma.config.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,eAAe,CAAC;;AAGvB,wBAMG"}
|
|
@@ -1,15 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Prisma Configuration (Prisma 7.x)
|
|
3
|
-
*
|
|
4
|
-
* Database URL is configured here instead of schema.prisma.
|
|
5
|
-
*/
|
|
6
|
-
import 'dotenv/config';
|
|
7
|
-
import { defineConfig } from 'prisma/config';
|
|
8
|
-
export default defineConfig({
|
|
9
|
-
earlyAccess: true,
|
|
10
|
-
schema: './prisma/schema.prisma',
|
|
11
|
-
datasource: {
|
|
12
|
-
url: process.env.DATABASE_URL,
|
|
13
|
-
},
|
|
14
|
-
});
|
|
15
|
-
//# sourceMappingURL=prisma.config.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"prisma.config.js","sourceRoot":"","sources":["../../../../src/templates/source/api/prisma.config.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,eAAe,CAAC;AACvB,OAAO,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAE7C,eAAe,YAAY,CAAC;IAC1B,WAAW,EAAE,IAAI;IACjB,MAAM,EAAE,wBAAwB;IAChC,UAAU,EAAE;QACV,GAAG,EAAE,OAAO,CAAC,GAAG,CAAC,YAAa;KAC/B;CACF,CAAC,CAAC"}
|
|
@@ -1,14 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Auth Procedures
|
|
3
|
-
*
|
|
4
|
-
* Authentication procedures for user registration, login, and token management.
|
|
5
|
-
*
|
|
6
|
-
* REST Endpoints:
|
|
7
|
-
* - POST /auth/register - Create new account
|
|
8
|
-
* - POST /auth/login - Authenticate and get tokens
|
|
9
|
-
* - POST /auth/refresh - Refresh access token
|
|
10
|
-
* - POST /auth/logout - Revoke current token
|
|
11
|
-
* - GET /auth/me - Get current user (protected)
|
|
12
|
-
*/
|
|
13
|
-
export declare const authProcedures: any;
|
|
14
|
-
//# sourceMappingURL=auth.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"auth.d.ts","sourceRoot":"","sources":["../../../../../src/templates/source/api/procedures/auth.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAqHH,eAAO,MAAM,cAAc,KA4JzB,CAAC"}
|