@bloomneo/appkit 1.2.9
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/LICENSE +21 -0
- package/README.md +902 -0
- package/bin/appkit.js +71 -0
- package/bin/commands/generate.js +1050 -0
- package/bin/templates/backend/README.md.template +39 -0
- package/bin/templates/backend/api.http.template +0 -0
- package/bin/templates/backend/docs/APPKIT_CLI.md +507 -0
- package/bin/templates/backend/docs/APPKIT_COMMENTS_GUIDELINES.md +61 -0
- package/bin/templates/backend/docs/APPKIT_LLM_GUIDE.md +2539 -0
- package/bin/templates/backend/package.json.template +34 -0
- package/bin/templates/backend/src/api/features/welcome/welcome.http.template +29 -0
- package/bin/templates/backend/src/api/features/welcome/welcome.route.ts.template +36 -0
- package/bin/templates/backend/src/api/features/welcome/welcome.service.ts.template +88 -0
- package/bin/templates/backend/src/api/features/welcome/welcome.types.ts.template +18 -0
- package/bin/templates/backend/src/api/lib/api-router.ts.template +84 -0
- package/bin/templates/backend/src/api/server.ts.template +188 -0
- package/bin/templates/backend/tsconfig.api.json.template +24 -0
- package/bin/templates/backend/tsconfig.json.template +40 -0
- package/bin/templates/feature/feature.http.template +63 -0
- package/bin/templates/feature/feature.route.ts.template +36 -0
- package/bin/templates/feature/feature.service.ts.template +81 -0
- package/bin/templates/feature/feature.types.ts.template +23 -0
- package/bin/templates/feature-db/feature.http.template +63 -0
- package/bin/templates/feature-db/feature.model.ts.template +74 -0
- package/bin/templates/feature-db/feature.route.ts.template +58 -0
- package/bin/templates/feature-db/feature.service.ts.template +231 -0
- package/bin/templates/feature-db/feature.types.ts.template +25 -0
- package/bin/templates/feature-db/schema-addition.prisma.template +9 -0
- package/bin/templates/feature-db/seeding/README.md.template +57 -0
- package/bin/templates/feature-db/seeding/feature.seed.js.template +67 -0
- package/bin/templates/feature-user/schema-addition.prisma.template +19 -0
- package/bin/templates/feature-user/user.http.template +157 -0
- package/bin/templates/feature-user/user.model.ts.template +244 -0
- package/bin/templates/feature-user/user.route.ts.template +379 -0
- package/bin/templates/feature-user/user.seed.js.template +182 -0
- package/bin/templates/feature-user/user.service.ts.template +426 -0
- package/bin/templates/feature-user/user.types.ts.template +127 -0
- package/dist/auth/auth.d.ts +182 -0
- package/dist/auth/auth.d.ts.map +1 -0
- package/dist/auth/auth.js +477 -0
- package/dist/auth/auth.js.map +1 -0
- package/dist/auth/defaults.d.ts +104 -0
- package/dist/auth/defaults.d.ts.map +1 -0
- package/dist/auth/defaults.js +374 -0
- package/dist/auth/defaults.js.map +1 -0
- package/dist/auth/index.d.ts +70 -0
- package/dist/auth/index.d.ts.map +1 -0
- package/dist/auth/index.js +94 -0
- package/dist/auth/index.js.map +1 -0
- package/dist/cache/cache.d.ts +118 -0
- package/dist/cache/cache.d.ts.map +1 -0
- package/dist/cache/cache.js +249 -0
- package/dist/cache/cache.js.map +1 -0
- package/dist/cache/defaults.d.ts +63 -0
- package/dist/cache/defaults.d.ts.map +1 -0
- package/dist/cache/defaults.js +193 -0
- package/dist/cache/defaults.js.map +1 -0
- package/dist/cache/index.d.ts +101 -0
- package/dist/cache/index.d.ts.map +1 -0
- package/dist/cache/index.js +203 -0
- package/dist/cache/index.js.map +1 -0
- package/dist/cache/strategies/memory.d.ts +138 -0
- package/dist/cache/strategies/memory.d.ts.map +1 -0
- package/dist/cache/strategies/memory.js +348 -0
- package/dist/cache/strategies/memory.js.map +1 -0
- package/dist/cache/strategies/redis.d.ts +105 -0
- package/dist/cache/strategies/redis.d.ts.map +1 -0
- package/dist/cache/strategies/redis.js +318 -0
- package/dist/cache/strategies/redis.js.map +1 -0
- package/dist/config/config.d.ts +62 -0
- package/dist/config/config.d.ts.map +1 -0
- package/dist/config/config.js +107 -0
- package/dist/config/config.js.map +1 -0
- package/dist/config/defaults.d.ts +44 -0
- package/dist/config/defaults.d.ts.map +1 -0
- package/dist/config/defaults.js +217 -0
- package/dist/config/defaults.js.map +1 -0
- package/dist/config/index.d.ts +105 -0
- package/dist/config/index.d.ts.map +1 -0
- package/dist/config/index.js +163 -0
- package/dist/config/index.js.map +1 -0
- package/dist/database/adapters/mongoose.d.ts +106 -0
- package/dist/database/adapters/mongoose.d.ts.map +1 -0
- package/dist/database/adapters/mongoose.js +480 -0
- package/dist/database/adapters/mongoose.js.map +1 -0
- package/dist/database/adapters/prisma.d.ts +106 -0
- package/dist/database/adapters/prisma.d.ts.map +1 -0
- package/dist/database/adapters/prisma.js +494 -0
- package/dist/database/adapters/prisma.js.map +1 -0
- package/dist/database/defaults.d.ts +87 -0
- package/dist/database/defaults.d.ts.map +1 -0
- package/dist/database/defaults.js +271 -0
- package/dist/database/defaults.js.map +1 -0
- package/dist/database/index.d.ts +137 -0
- package/dist/database/index.d.ts.map +1 -0
- package/dist/database/index.js +490 -0
- package/dist/database/index.js.map +1 -0
- package/dist/email/defaults.d.ts +100 -0
- package/dist/email/defaults.d.ts.map +1 -0
- package/dist/email/defaults.js +400 -0
- package/dist/email/defaults.js.map +1 -0
- package/dist/email/email.d.ts +139 -0
- package/dist/email/email.d.ts.map +1 -0
- package/dist/email/email.js +316 -0
- package/dist/email/email.js.map +1 -0
- package/dist/email/index.d.ts +176 -0
- package/dist/email/index.d.ts.map +1 -0
- package/dist/email/index.js +251 -0
- package/dist/email/index.js.map +1 -0
- package/dist/email/strategies/console.d.ts +90 -0
- package/dist/email/strategies/console.d.ts.map +1 -0
- package/dist/email/strategies/console.js +268 -0
- package/dist/email/strategies/console.js.map +1 -0
- package/dist/email/strategies/resend.d.ts +84 -0
- package/dist/email/strategies/resend.d.ts.map +1 -0
- package/dist/email/strategies/resend.js +266 -0
- package/dist/email/strategies/resend.js.map +1 -0
- package/dist/email/strategies/smtp.d.ts +77 -0
- package/dist/email/strategies/smtp.d.ts.map +1 -0
- package/dist/email/strategies/smtp.js +286 -0
- package/dist/email/strategies/smtp.js.map +1 -0
- package/dist/error/defaults.d.ts +40 -0
- package/dist/error/defaults.d.ts.map +1 -0
- package/dist/error/defaults.js +75 -0
- package/dist/error/defaults.js.map +1 -0
- package/dist/error/error.d.ts +140 -0
- package/dist/error/error.d.ts.map +1 -0
- package/dist/error/error.js +200 -0
- package/dist/error/error.js.map +1 -0
- package/dist/error/index.d.ts +145 -0
- package/dist/error/index.d.ts.map +1 -0
- package/dist/error/index.js +145 -0
- package/dist/error/index.js.map +1 -0
- package/dist/event/defaults.d.ts +111 -0
- package/dist/event/defaults.d.ts.map +1 -0
- package/dist/event/defaults.js +378 -0
- package/dist/event/defaults.js.map +1 -0
- package/dist/event/event.d.ts +171 -0
- package/dist/event/event.d.ts.map +1 -0
- package/dist/event/event.js +391 -0
- package/dist/event/event.js.map +1 -0
- package/dist/event/index.d.ts +173 -0
- package/dist/event/index.d.ts.map +1 -0
- package/dist/event/index.js +302 -0
- package/dist/event/index.js.map +1 -0
- package/dist/event/strategies/memory.d.ts +122 -0
- package/dist/event/strategies/memory.d.ts.map +1 -0
- package/dist/event/strategies/memory.js +331 -0
- package/dist/event/strategies/memory.js.map +1 -0
- package/dist/event/strategies/redis.d.ts +115 -0
- package/dist/event/strategies/redis.d.ts.map +1 -0
- package/dist/event/strategies/redis.js +434 -0
- package/dist/event/strategies/redis.js.map +1 -0
- package/dist/index.d.ts +58 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +72 -0
- package/dist/index.js.map +1 -0
- package/dist/logger/defaults.d.ts +67 -0
- package/dist/logger/defaults.d.ts.map +1 -0
- package/dist/logger/defaults.js +213 -0
- package/dist/logger/defaults.js.map +1 -0
- package/dist/logger/index.d.ts +84 -0
- package/dist/logger/index.d.ts.map +1 -0
- package/dist/logger/index.js +101 -0
- package/dist/logger/index.js.map +1 -0
- package/dist/logger/logger.d.ts +165 -0
- package/dist/logger/logger.d.ts.map +1 -0
- package/dist/logger/logger.js +843 -0
- package/dist/logger/logger.js.map +1 -0
- package/dist/logger/transports/console.d.ts +102 -0
- package/dist/logger/transports/console.d.ts.map +1 -0
- package/dist/logger/transports/console.js +276 -0
- package/dist/logger/transports/console.js.map +1 -0
- package/dist/logger/transports/database.d.ts +153 -0
- package/dist/logger/transports/database.d.ts.map +1 -0
- package/dist/logger/transports/database.js +539 -0
- package/dist/logger/transports/database.js.map +1 -0
- package/dist/logger/transports/file.d.ts +146 -0
- package/dist/logger/transports/file.d.ts.map +1 -0
- package/dist/logger/transports/file.js +464 -0
- package/dist/logger/transports/file.js.map +1 -0
- package/dist/logger/transports/http.d.ts +128 -0
- package/dist/logger/transports/http.d.ts.map +1 -0
- package/dist/logger/transports/http.js +401 -0
- package/dist/logger/transports/http.js.map +1 -0
- package/dist/logger/transports/webhook.d.ts +152 -0
- package/dist/logger/transports/webhook.d.ts.map +1 -0
- package/dist/logger/transports/webhook.js +485 -0
- package/dist/logger/transports/webhook.js.map +1 -0
- package/dist/queue/defaults.d.ts +66 -0
- package/dist/queue/defaults.d.ts.map +1 -0
- package/dist/queue/defaults.js +205 -0
- package/dist/queue/defaults.js.map +1 -0
- package/dist/queue/index.d.ts +124 -0
- package/dist/queue/index.d.ts.map +1 -0
- package/dist/queue/index.js +116 -0
- package/dist/queue/index.js.map +1 -0
- package/dist/queue/queue.d.ts +156 -0
- package/dist/queue/queue.d.ts.map +1 -0
- package/dist/queue/queue.js +387 -0
- package/dist/queue/queue.js.map +1 -0
- package/dist/queue/transports/database.d.ts +165 -0
- package/dist/queue/transports/database.d.ts.map +1 -0
- package/dist/queue/transports/database.js +595 -0
- package/dist/queue/transports/database.js.map +1 -0
- package/dist/queue/transports/memory.d.ts +143 -0
- package/dist/queue/transports/memory.d.ts.map +1 -0
- package/dist/queue/transports/memory.js +415 -0
- package/dist/queue/transports/memory.js.map +1 -0
- package/dist/queue/transports/redis.d.ts +203 -0
- package/dist/queue/transports/redis.d.ts.map +1 -0
- package/dist/queue/transports/redis.js +744 -0
- package/dist/queue/transports/redis.js.map +1 -0
- package/dist/security/defaults.d.ts +64 -0
- package/dist/security/defaults.d.ts.map +1 -0
- package/dist/security/defaults.js +159 -0
- package/dist/security/defaults.js.map +1 -0
- package/dist/security/index.d.ts +110 -0
- package/dist/security/index.d.ts.map +1 -0
- package/dist/security/index.js +160 -0
- package/dist/security/index.js.map +1 -0
- package/dist/security/security.d.ts +138 -0
- package/dist/security/security.d.ts.map +1 -0
- package/dist/security/security.js +419 -0
- package/dist/security/security.js.map +1 -0
- package/dist/storage/defaults.d.ts +79 -0
- package/dist/storage/defaults.d.ts.map +1 -0
- package/dist/storage/defaults.js +358 -0
- package/dist/storage/defaults.js.map +1 -0
- package/dist/storage/index.d.ts +153 -0
- package/dist/storage/index.d.ts.map +1 -0
- package/dist/storage/index.js +242 -0
- package/dist/storage/index.js.map +1 -0
- package/dist/storage/storage.d.ts +151 -0
- package/dist/storage/storage.d.ts.map +1 -0
- package/dist/storage/storage.js +439 -0
- package/dist/storage/storage.js.map +1 -0
- package/dist/storage/strategies/local.d.ts +117 -0
- package/dist/storage/strategies/local.d.ts.map +1 -0
- package/dist/storage/strategies/local.js +368 -0
- package/dist/storage/strategies/local.js.map +1 -0
- package/dist/storage/strategies/r2.d.ts +130 -0
- package/dist/storage/strategies/r2.d.ts.map +1 -0
- package/dist/storage/strategies/r2.js +470 -0
- package/dist/storage/strategies/r2.js.map +1 -0
- package/dist/storage/strategies/s3.d.ts +121 -0
- package/dist/storage/strategies/s3.d.ts.map +1 -0
- package/dist/storage/strategies/s3.js +461 -0
- package/dist/storage/strategies/s3.js.map +1 -0
- package/dist/util/defaults.d.ts +77 -0
- package/dist/util/defaults.d.ts.map +1 -0
- package/dist/util/defaults.js +193 -0
- package/dist/util/defaults.js.map +1 -0
- package/dist/util/index.d.ts +97 -0
- package/dist/util/index.d.ts.map +1 -0
- package/dist/util/index.js +165 -0
- package/dist/util/index.js.map +1 -0
- package/dist/util/util.d.ts +145 -0
- package/dist/util/util.d.ts.map +1 -0
- package/dist/util/util.js +481 -0
- package/dist/util/util.js.map +1 -0
- package/package.json +234 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"redis.js","sourceRoot":"","sources":["../../../src/queue/transports/redis.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Smart defaults and environment validation for security
|
|
3
|
+
* @module @bloomneo/appkit/security
|
|
4
|
+
* @file src/security/defaults.ts
|
|
5
|
+
*
|
|
6
|
+
* @llm-rule WHEN: App startup - need to configure security behavior and encryption keys
|
|
7
|
+
* @llm-rule AVOID: Calling multiple times - expensive environment parsing, use lazy loading in get()
|
|
8
|
+
* @llm-rule NOTE: Called once at startup, cached globally for performance
|
|
9
|
+
*/
|
|
10
|
+
export interface CSRFConfig {
|
|
11
|
+
secret: string;
|
|
12
|
+
tokenField: string;
|
|
13
|
+
headerField: string;
|
|
14
|
+
expiryMinutes: number;
|
|
15
|
+
}
|
|
16
|
+
export interface RateLimitConfig {
|
|
17
|
+
maxRequests: number;
|
|
18
|
+
windowMs: number;
|
|
19
|
+
message: string;
|
|
20
|
+
}
|
|
21
|
+
export interface SanitizationConfig {
|
|
22
|
+
maxLength: number;
|
|
23
|
+
allowedTags: string[];
|
|
24
|
+
stripAllTags: boolean;
|
|
25
|
+
}
|
|
26
|
+
export interface EncryptionConfig {
|
|
27
|
+
key?: string;
|
|
28
|
+
algorithm: string;
|
|
29
|
+
ivLength: number;
|
|
30
|
+
tagLength: number;
|
|
31
|
+
keyLength: number;
|
|
32
|
+
}
|
|
33
|
+
export interface EnvironmentConfig {
|
|
34
|
+
isDevelopment: boolean;
|
|
35
|
+
isProduction: boolean;
|
|
36
|
+
isTest: boolean;
|
|
37
|
+
nodeEnv: string;
|
|
38
|
+
}
|
|
39
|
+
export interface SecurityConfig {
|
|
40
|
+
csrf: CSRFConfig;
|
|
41
|
+
rateLimit: RateLimitConfig;
|
|
42
|
+
sanitization: SanitizationConfig;
|
|
43
|
+
encryption: EncryptionConfig;
|
|
44
|
+
environment: EnvironmentConfig;
|
|
45
|
+
}
|
|
46
|
+
export interface SecurityError extends Error {
|
|
47
|
+
statusCode: number;
|
|
48
|
+
[key: string]: any;
|
|
49
|
+
}
|
|
50
|
+
/**
|
|
51
|
+
* Gets smart defaults using VOILA_SECURITY_* environment variables
|
|
52
|
+
* @llm-rule WHEN: App startup to get production-ready security configuration
|
|
53
|
+
* @llm-rule AVOID: Calling repeatedly - expensive validation, cache the result
|
|
54
|
+
* @llm-rule NOTE: Automatically configures CSRF, rate limiting, and encryption from environment
|
|
55
|
+
*/
|
|
56
|
+
export declare function getSmartDefaults(): SecurityConfig;
|
|
57
|
+
/**
|
|
58
|
+
* Creates security error with status code and additional details
|
|
59
|
+
* @llm-rule WHEN: Creating errors in security functions for proper HTTP status codes
|
|
60
|
+
* @llm-rule AVOID: Using generic Error objects - security errors need status codes
|
|
61
|
+
* @llm-rule NOTE: Use 400 for client errors, 401 for auth failures, 403 for access denied, 500 for server errors
|
|
62
|
+
*/
|
|
63
|
+
export declare function createSecurityError(message: string, statusCode?: number, details?: Record<string, any>): SecurityError;
|
|
64
|
+
//# sourceMappingURL=defaults.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"defaults.d.ts","sourceRoot":"","sources":["../../src/security/defaults.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,MAAM,WAAW,UAAU;IACzB,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,MAAM,CAAC;IACpB,aAAa,EAAE,MAAM,CAAC;CACvB;AAED,MAAM,WAAW,eAAe;IAC9B,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,kBAAkB;IACjC,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,MAAM,EAAE,CAAC;IACtB,YAAY,EAAE,OAAO,CAAC;CACvB;AAED,MAAM,WAAW,gBAAgB;IAC/B,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,iBAAiB;IAChC,aAAa,EAAE,OAAO,CAAC;IACvB,YAAY,EAAE,OAAO,CAAC;IACtB,MAAM,EAAE,OAAO,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,UAAU,CAAC;IACjB,SAAS,EAAE,eAAe,CAAC;IAC3B,YAAY,EAAE,kBAAkB,CAAC;IACjC,UAAU,EAAE,gBAAgB,CAAC;IAC7B,WAAW,EAAE,iBAAiB,CAAC;CAChC;AAED,MAAM,WAAW,aAAc,SAAQ,KAAK;IAC1C,UAAU,EAAE,MAAM,CAAC;IACnB,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAC;CACpB;AAED;;;;;GAKG;AACH,wBAAgB,gBAAgB,IAAI,cAAc,CAkDjD;AAsHD;;;;;GAKG;AACH,wBAAgB,mBAAmB,CACjC,OAAO,EAAE,MAAM,EACf,UAAU,GAAE,MAAY,EACxB,OAAO,GAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAM,GAChC,aAAa,CAKf"}
|
|
@@ -0,0 +1,159 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Smart defaults and environment validation for security
|
|
3
|
+
* @module @bloomneo/appkit/security
|
|
4
|
+
* @file src/security/defaults.ts
|
|
5
|
+
*
|
|
6
|
+
* @llm-rule WHEN: App startup - need to configure security behavior and encryption keys
|
|
7
|
+
* @llm-rule AVOID: Calling multiple times - expensive environment parsing, use lazy loading in get()
|
|
8
|
+
* @llm-rule NOTE: Called once at startup, cached globally for performance
|
|
9
|
+
*/
|
|
10
|
+
/**
|
|
11
|
+
* Gets smart defaults using VOILA_SECURITY_* environment variables
|
|
12
|
+
* @llm-rule WHEN: App startup to get production-ready security configuration
|
|
13
|
+
* @llm-rule AVOID: Calling repeatedly - expensive validation, cache the result
|
|
14
|
+
* @llm-rule NOTE: Automatically configures CSRF, rate limiting, and encryption from environment
|
|
15
|
+
*/
|
|
16
|
+
export function getSmartDefaults() {
|
|
17
|
+
validateEnvironment();
|
|
18
|
+
const nodeEnv = process.env.NODE_ENV || 'development';
|
|
19
|
+
const isDevelopment = nodeEnv === 'development';
|
|
20
|
+
const isProduction = nodeEnv === 'production';
|
|
21
|
+
const isTest = nodeEnv === 'test';
|
|
22
|
+
return {
|
|
23
|
+
// CSRF configuration with fallback to auth secret
|
|
24
|
+
csrf: {
|
|
25
|
+
secret: process.env.VOILA_SECURITY_CSRF_SECRET || process.env.VOILA_AUTH_SECRET || '',
|
|
26
|
+
tokenField: process.env.VOILA_SECURITY_CSRF_FIELD || '_csrf',
|
|
27
|
+
headerField: process.env.VOILA_SECURITY_CSRF_HEADER || 'x-csrf-token',
|
|
28
|
+
expiryMinutes: parseInt(process.env.VOILA_SECURITY_CSRF_EXPIRY || '60'),
|
|
29
|
+
},
|
|
30
|
+
// Rate limiting with production-ready defaults
|
|
31
|
+
rateLimit: {
|
|
32
|
+
maxRequests: parseInt(process.env.VOILA_SECURITY_RATE_LIMIT || '100'),
|
|
33
|
+
windowMs: parseInt(process.env.VOILA_SECURITY_RATE_WINDOW || String(15 * 60 * 1000)), // 15 minutes
|
|
34
|
+
message: process.env.VOILA_SECURITY_RATE_MESSAGE || 'Too many requests, please try again later',
|
|
35
|
+
},
|
|
36
|
+
// Input sanitization configuration
|
|
37
|
+
sanitization: {
|
|
38
|
+
maxLength: parseInt(process.env.VOILA_SECURITY_MAX_INPUT_LENGTH || '1000'),
|
|
39
|
+
allowedTags: process.env.VOILA_SECURITY_ALLOWED_TAGS
|
|
40
|
+
? process.env.VOILA_SECURITY_ALLOWED_TAGS.split(',').map(tag => tag.trim())
|
|
41
|
+
: [],
|
|
42
|
+
stripAllTags: process.env.VOILA_SECURITY_STRIP_ALL_TAGS === 'true',
|
|
43
|
+
},
|
|
44
|
+
// Encryption configuration with AES-256-GCM
|
|
45
|
+
encryption: {
|
|
46
|
+
key: process.env.VOILA_SECURITY_ENCRYPTION_KEY,
|
|
47
|
+
algorithm: 'aes-256-gcm',
|
|
48
|
+
ivLength: 16,
|
|
49
|
+
tagLength: 16,
|
|
50
|
+
keyLength: 32,
|
|
51
|
+
},
|
|
52
|
+
// Environment information
|
|
53
|
+
environment: {
|
|
54
|
+
isDevelopment,
|
|
55
|
+
isProduction,
|
|
56
|
+
isTest,
|
|
57
|
+
nodeEnv,
|
|
58
|
+
},
|
|
59
|
+
};
|
|
60
|
+
}
|
|
61
|
+
/**
|
|
62
|
+
* Validates environment variables for security configuration
|
|
63
|
+
* @llm-rule WHEN: App startup to ensure proper security environment configuration
|
|
64
|
+
* @llm-rule AVOID: Skipping validation - improper config causes security vulnerabilities
|
|
65
|
+
* @llm-rule NOTE: Validates CSRF secrets, encryption keys, and rate limit values
|
|
66
|
+
*/
|
|
67
|
+
function validateEnvironment() {
|
|
68
|
+
const nodeEnv = process.env.NODE_ENV || 'development';
|
|
69
|
+
// Validate CSRF secret in production
|
|
70
|
+
const csrfSecret = process.env.VOILA_SECURITY_CSRF_SECRET || process.env.VOILA_AUTH_SECRET;
|
|
71
|
+
if (!csrfSecret && nodeEnv === 'production') {
|
|
72
|
+
console.warn('[VoilaJSX AppKit] VOILA_SECURITY_CSRF_SECRET not set. ' +
|
|
73
|
+
'CSRF protection will not work in production. ' +
|
|
74
|
+
'Set VOILA_SECURITY_CSRF_SECRET or VOILA_AUTH_SECRET environment variable.');
|
|
75
|
+
}
|
|
76
|
+
// Validate encryption key if provided
|
|
77
|
+
const encryptionKey = process.env.VOILA_SECURITY_ENCRYPTION_KEY;
|
|
78
|
+
if (encryptionKey) {
|
|
79
|
+
validateEncryptionKey(encryptionKey);
|
|
80
|
+
}
|
|
81
|
+
// Validate rate limit values
|
|
82
|
+
const rateLimit = process.env.VOILA_SECURITY_RATE_LIMIT;
|
|
83
|
+
if (rateLimit) {
|
|
84
|
+
const rateLimitNum = parseInt(rateLimit);
|
|
85
|
+
if (isNaN(rateLimitNum) || rateLimitNum <= 0) {
|
|
86
|
+
throw new Error(`Invalid VOILA_SECURITY_RATE_LIMIT: "${rateLimit}". Must be a positive number.`);
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
const rateWindow = process.env.VOILA_SECURITY_RATE_WINDOW;
|
|
90
|
+
if (rateWindow) {
|
|
91
|
+
const rateWindowNum = parseInt(rateWindow);
|
|
92
|
+
if (isNaN(rateWindowNum) || rateWindowNum <= 0) {
|
|
93
|
+
throw new Error(`Invalid VOILA_SECURITY_RATE_WINDOW: "${rateWindow}". Must be a positive number (milliseconds).`);
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
// Validate max input length
|
|
97
|
+
const maxLength = process.env.VOILA_SECURITY_MAX_INPUT_LENGTH;
|
|
98
|
+
if (maxLength) {
|
|
99
|
+
const maxLengthNum = parseInt(maxLength);
|
|
100
|
+
if (isNaN(maxLengthNum) || maxLengthNum <= 0) {
|
|
101
|
+
throw new Error(`Invalid VOILA_SECURITY_MAX_INPUT_LENGTH: "${maxLength}". Must be a positive number.`);
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
// Validate CSRF expiry
|
|
105
|
+
const csrfExpiry = process.env.VOILA_SECURITY_CSRF_EXPIRY;
|
|
106
|
+
if (csrfExpiry) {
|
|
107
|
+
const csrfExpiryNum = parseInt(csrfExpiry);
|
|
108
|
+
if (isNaN(csrfExpiryNum) || csrfExpiryNum <= 0) {
|
|
109
|
+
throw new Error(`Invalid VOILA_SECURITY_CSRF_EXPIRY: "${csrfExpiry}". Must be a positive number (minutes).`);
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
// Production-specific warnings
|
|
113
|
+
if (nodeEnv === 'production') {
|
|
114
|
+
if (!encryptionKey) {
|
|
115
|
+
console.warn('[VoilaJSX AppKit] VOILA_SECURITY_ENCRYPTION_KEY not set. ' +
|
|
116
|
+
'Data encryption will not be available in production.');
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
// Validate NODE_ENV
|
|
120
|
+
if (nodeEnv && !['development', 'production', 'test', 'staging'].includes(nodeEnv)) {
|
|
121
|
+
console.warn(`[VoilaJSX AppKit] Unusual NODE_ENV: "${nodeEnv}". ` +
|
|
122
|
+
`Expected: development, production, test, or staging`);
|
|
123
|
+
}
|
|
124
|
+
}
|
|
125
|
+
/**
|
|
126
|
+
* Validates encryption key format and length for AES-256-GCM
|
|
127
|
+
* @llm-rule WHEN: Setting or validating encryption keys for data protection
|
|
128
|
+
* @llm-rule AVOID: Using weak or incorrectly formatted keys - causes encryption failures
|
|
129
|
+
* @llm-rule NOTE: Requires 64-character hex string (32 bytes) for AES-256
|
|
130
|
+
*/
|
|
131
|
+
function validateEncryptionKey(key) {
|
|
132
|
+
if (typeof key !== 'string') {
|
|
133
|
+
throw new Error('VOILA_SECURITY_ENCRYPTION_KEY must be a string.');
|
|
134
|
+
}
|
|
135
|
+
// Check if it's a valid hex string
|
|
136
|
+
if (!/^[0-9a-fA-F]+$/.test(key)) {
|
|
137
|
+
throw new Error('VOILA_SECURITY_ENCRYPTION_KEY must be a valid hexadecimal string. ' +
|
|
138
|
+
'Generate one using: node -e "console.log(require(\'crypto\').randomBytes(32).toString(\'hex\'))"');
|
|
139
|
+
}
|
|
140
|
+
// Check length (should be 64 hex characters for 32 bytes)
|
|
141
|
+
if (key.length !== 64) {
|
|
142
|
+
throw new Error(`VOILA_SECURITY_ENCRYPTION_KEY must be 64 hex characters (32 bytes). ` +
|
|
143
|
+
`Current length: ${key.length}. ` +
|
|
144
|
+
`Generate one using: node -e "console.log(require('crypto').randomBytes(32).toString('hex'))"`);
|
|
145
|
+
}
|
|
146
|
+
}
|
|
147
|
+
/**
|
|
148
|
+
* Creates security error with status code and additional details
|
|
149
|
+
* @llm-rule WHEN: Creating errors in security functions for proper HTTP status codes
|
|
150
|
+
* @llm-rule AVOID: Using generic Error objects - security errors need status codes
|
|
151
|
+
* @llm-rule NOTE: Use 400 for client errors, 401 for auth failures, 403 for access denied, 500 for server errors
|
|
152
|
+
*/
|
|
153
|
+
export function createSecurityError(message, statusCode = 400, details = {}) {
|
|
154
|
+
const error = new Error(message);
|
|
155
|
+
error.statusCode = statusCode;
|
|
156
|
+
Object.assign(error, details);
|
|
157
|
+
return error;
|
|
158
|
+
}
|
|
159
|
+
//# sourceMappingURL=defaults.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"defaults.js","sourceRoot":"","sources":["../../src/security/defaults.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,110 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Ultra-simple enterprise security that just works
|
|
3
|
+
* @module @bloomneo/appkit/security
|
|
4
|
+
* @file src/security/index.ts
|
|
5
|
+
*
|
|
6
|
+
* @llm-rule WHEN: Building apps that need security protection (CSRF, rate limiting, input sanitization, encryption)
|
|
7
|
+
* @llm-rule AVOID: Manual security implementation - this provides enterprise-grade protection automatically
|
|
8
|
+
* @llm-rule NOTE: Common pattern - securityClass.get() → security.forms() → security.requests() → security.input()
|
|
9
|
+
* @llm-rule NOTE: Use middleware first: forms() for CSRF, requests() for rate limiting, then input() for sanitization
|
|
10
|
+
*/
|
|
11
|
+
import { SecurityClass } from './security.js';
|
|
12
|
+
import { type SecurityConfig } from './defaults.js';
|
|
13
|
+
/**
|
|
14
|
+
* Get security instance - the only function you need to learn
|
|
15
|
+
* Environment variables parsed once for performance
|
|
16
|
+
* @llm-rule WHEN: Starting any operation that needs security protection - this is your main entry point
|
|
17
|
+
* @llm-rule AVOID: Calling new SecurityClass() directly - always use this function
|
|
18
|
+
* @llm-rule NOTE: Typical flow - get() → security.forms() → security.requests() → security.input()
|
|
19
|
+
*/
|
|
20
|
+
declare function get(overrides?: Partial<SecurityConfig>): SecurityClass;
|
|
21
|
+
/**
|
|
22
|
+
* Reset global instance (useful for testing or config changes)
|
|
23
|
+
* @llm-rule WHEN: Testing security logic with different configurations
|
|
24
|
+
* @llm-rule AVOID: Using in production - only for tests and development
|
|
25
|
+
*/
|
|
26
|
+
declare function reset(newConfig?: Partial<SecurityConfig>): SecurityClass;
|
|
27
|
+
/**
|
|
28
|
+
* Clear the cached security instance
|
|
29
|
+
* @llm-rule WHEN: Testing or when you need to reload environment variables
|
|
30
|
+
* @llm-rule AVOID: Using in production - only for tests and development
|
|
31
|
+
*/
|
|
32
|
+
declare function clearCache(): void;
|
|
33
|
+
/**
|
|
34
|
+
* Get current security configuration for inspection
|
|
35
|
+
* @llm-rule WHEN: Debugging security behavior or documenting security configuration
|
|
36
|
+
* @llm-rule AVOID: Using for runtime security decisions - use get() instead
|
|
37
|
+
*/
|
|
38
|
+
declare function getConfig(): SecurityConfig;
|
|
39
|
+
/**
|
|
40
|
+
* Check if running in development mode (affects security logging)
|
|
41
|
+
* @llm-rule WHEN: Need to conditionally add debug information to security logs
|
|
42
|
+
* @llm-rule AVOID: Manual NODE_ENV checks - use this for consistency
|
|
43
|
+
*/
|
|
44
|
+
declare function isDevelopment(): boolean;
|
|
45
|
+
/**
|
|
46
|
+
* Check if running in production mode (affects security strictness)
|
|
47
|
+
* @llm-rule WHEN: Need to conditionally enable strict security measures
|
|
48
|
+
* @llm-rule AVOID: Manual NODE_ENV checks - use this for consistency
|
|
49
|
+
*/
|
|
50
|
+
declare function isProduction(): boolean;
|
|
51
|
+
/**
|
|
52
|
+
* Generate a secure encryption key for production use
|
|
53
|
+
* @llm-rule WHEN: Setting up encryption for the first time or rotating keys
|
|
54
|
+
* @llm-rule AVOID: Using weak or predictable keys - always use this for key generation
|
|
55
|
+
* @llm-rule NOTE: Returns 64-character hex string suitable for VOILA_SECURITY_ENCRYPTION_KEY
|
|
56
|
+
*/
|
|
57
|
+
declare function generateKey(): string;
|
|
58
|
+
/**
|
|
59
|
+
* Quick security setup helper for common Express app patterns
|
|
60
|
+
* @llm-rule WHEN: Setting up basic security for Express apps quickly
|
|
61
|
+
* @llm-rule AVOID: Using without understanding - review each middleware for your needs
|
|
62
|
+
* @llm-rule NOTE: Returns array of middleware: [CSRF protection, rate limiting]
|
|
63
|
+
*/
|
|
64
|
+
declare function quickSetup(options?: {
|
|
65
|
+
csrf?: boolean;
|
|
66
|
+
rateLimit?: boolean;
|
|
67
|
+
maxRequests?: number;
|
|
68
|
+
windowMs?: number;
|
|
69
|
+
}): Array<any>;
|
|
70
|
+
/**
|
|
71
|
+
* Validate security configuration at startup
|
|
72
|
+
* @llm-rule WHEN: App startup to ensure required security config is present
|
|
73
|
+
* @llm-rule AVOID: Using in request handlers - expensive validation
|
|
74
|
+
* @llm-rule NOTE: Throws descriptive errors with environment variable names
|
|
75
|
+
*/
|
|
76
|
+
declare function validateRequired(checks?: {
|
|
77
|
+
csrf?: boolean;
|
|
78
|
+
encryption?: boolean;
|
|
79
|
+
rateLimit?: boolean;
|
|
80
|
+
}): void;
|
|
81
|
+
/**
|
|
82
|
+
* Get security status for health checks and monitoring
|
|
83
|
+
* @llm-rule WHEN: Building health check endpoints or security monitoring
|
|
84
|
+
* @llm-rule AVOID: Exposing sensitive security details - this only shows availability
|
|
85
|
+
*/
|
|
86
|
+
declare function getStatus(): {
|
|
87
|
+
csrf: boolean;
|
|
88
|
+
encryption: boolean;
|
|
89
|
+
rateLimit: boolean;
|
|
90
|
+
environment: string;
|
|
91
|
+
};
|
|
92
|
+
/**
|
|
93
|
+
* Single security export with enhanced functionality
|
|
94
|
+
*/
|
|
95
|
+
export declare const securityClass: {
|
|
96
|
+
readonly get: typeof get;
|
|
97
|
+
readonly reset: typeof reset;
|
|
98
|
+
readonly clearCache: typeof clearCache;
|
|
99
|
+
readonly getConfig: typeof getConfig;
|
|
100
|
+
readonly isDevelopment: typeof isDevelopment;
|
|
101
|
+
readonly isProduction: typeof isProduction;
|
|
102
|
+
readonly generateKey: typeof generateKey;
|
|
103
|
+
readonly quickSetup: typeof quickSetup;
|
|
104
|
+
readonly validateRequired: typeof validateRequired;
|
|
105
|
+
readonly getStatus: typeof getStatus;
|
|
106
|
+
};
|
|
107
|
+
export type { SecurityConfig, CSRFConfig, RateLimitConfig, SanitizationConfig, EncryptionConfig, EnvironmentConfig, SecurityError, } from './defaults.js';
|
|
108
|
+
export type { ExpressRequest, ExpressResponse, ExpressNextFunction, ExpressMiddleware, CSRFOptions, RateLimitOptions, InputOptions, HTMLOptions, } from './security.js';
|
|
109
|
+
export { SecurityClass } from './security.js';
|
|
110
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/security/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAC9C,OAAO,EAAoB,KAAK,cAAc,EAAE,MAAM,eAAe,CAAC;AAKtE;;;;;;GAMG;AACH,iBAAS,GAAG,CAAC,SAAS,GAAE,OAAO,CAAC,cAAc,CAAM,GAAG,aAAa,CASnE;AAED;;;;GAIG;AACH,iBAAS,KAAK,CAAC,SAAS,GAAE,OAAO,CAAC,cAAc,CAAM,GAAG,aAAa,CAKrE;AAED;;;;GAIG;AACH,iBAAS,UAAU,IAAI,IAAI,CAE1B;AAED;;;;GAIG;AACH,iBAAS,SAAS,IAAI,cAAc,CAGnC;AAED;;;;GAIG;AACH,iBAAS,aAAa,IAAI,OAAO,CAGhC;AAED;;;;GAIG;AACH,iBAAS,YAAY,IAAI,OAAO,CAG/B;AAED;;;;;GAKG;AACH,iBAAS,WAAW,IAAI,MAAM,CAG7B;AAED;;;;;GAKG;AACH,iBAAS,UAAU,CAAC,OAAO,GAAE;IAC3B,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACd,GAAG,KAAK,CAAC,GAAG,CAAC,CAkBlB;AAED;;;;;GAKG;AACH,iBAAS,gBAAgB,CAAC,MAAM,GAAE;IAChC,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,SAAS,CAAC,EAAE,OAAO,CAAC;CAChB,GAAG,IAAI,CAkBZ;AAED;;;;GAIG;AACH,iBAAS,SAAS,IAAI;IACpB,IAAI,EAAE,OAAO,CAAC;IACd,UAAU,EAAE,OAAO,CAAC;IACpB,SAAS,EAAE,OAAO,CAAC;IACnB,WAAW,EAAE,MAAM,CAAC;CACrB,CASA;AAED;;GAEG;AACH,eAAO,MAAM,aAAa;;;;;;;;;;;CAkBhB,CAAC;AAGX,YAAY,EACV,cAAc,EACd,UAAU,EACV,eAAe,EACf,kBAAkB,EAClB,gBAAgB,EAChB,iBAAiB,EACjB,aAAa,GACd,MAAM,eAAe,CAAC;AAEvB,YAAY,EACV,cAAc,EACd,eAAe,EACf,mBAAmB,EACnB,iBAAiB,EACjB,WAAW,EACX,gBAAgB,EAChB,YAAY,EACZ,WAAW,GACZ,MAAM,eAAe,CAAC;AAEvB,OAAO,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC"}
|
|
@@ -0,0 +1,160 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Ultra-simple enterprise security that just works
|
|
3
|
+
* @module @bloomneo/appkit/security
|
|
4
|
+
* @file src/security/index.ts
|
|
5
|
+
*
|
|
6
|
+
* @llm-rule WHEN: Building apps that need security protection (CSRF, rate limiting, input sanitization, encryption)
|
|
7
|
+
* @llm-rule AVOID: Manual security implementation - this provides enterprise-grade protection automatically
|
|
8
|
+
* @llm-rule NOTE: Common pattern - securityClass.get() → security.forms() → security.requests() → security.input()
|
|
9
|
+
* @llm-rule NOTE: Use middleware first: forms() for CSRF, requests() for rate limiting, then input() for sanitization
|
|
10
|
+
*/
|
|
11
|
+
import { SecurityClass } from './security.js';
|
|
12
|
+
import { getSmartDefaults } from './defaults.js';
|
|
13
|
+
// Global security instance for performance
|
|
14
|
+
let globalSecurity = null;
|
|
15
|
+
/**
|
|
16
|
+
* Get security instance - the only function you need to learn
|
|
17
|
+
* Environment variables parsed once for performance
|
|
18
|
+
* @llm-rule WHEN: Starting any operation that needs security protection - this is your main entry point
|
|
19
|
+
* @llm-rule AVOID: Calling new SecurityClass() directly - always use this function
|
|
20
|
+
* @llm-rule NOTE: Typical flow - get() → security.forms() → security.requests() → security.input()
|
|
21
|
+
*/
|
|
22
|
+
function get(overrides = {}) {
|
|
23
|
+
// Lazy initialization - parse environment once
|
|
24
|
+
if (!globalSecurity) {
|
|
25
|
+
const defaults = getSmartDefaults();
|
|
26
|
+
const config = { ...defaults, ...overrides };
|
|
27
|
+
globalSecurity = new SecurityClass(config);
|
|
28
|
+
}
|
|
29
|
+
return globalSecurity;
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* Reset global instance (useful for testing or config changes)
|
|
33
|
+
* @llm-rule WHEN: Testing security logic with different configurations
|
|
34
|
+
* @llm-rule AVOID: Using in production - only for tests and development
|
|
35
|
+
*/
|
|
36
|
+
function reset(newConfig = {}) {
|
|
37
|
+
const defaults = getSmartDefaults();
|
|
38
|
+
const config = { ...defaults, ...newConfig };
|
|
39
|
+
globalSecurity = new SecurityClass(config);
|
|
40
|
+
return globalSecurity;
|
|
41
|
+
}
|
|
42
|
+
/**
|
|
43
|
+
* Clear the cached security instance
|
|
44
|
+
* @llm-rule WHEN: Testing or when you need to reload environment variables
|
|
45
|
+
* @llm-rule AVOID: Using in production - only for tests and development
|
|
46
|
+
*/
|
|
47
|
+
function clearCache() {
|
|
48
|
+
globalSecurity = null;
|
|
49
|
+
}
|
|
50
|
+
/**
|
|
51
|
+
* Get current security configuration for inspection
|
|
52
|
+
* @llm-rule WHEN: Debugging security behavior or documenting security configuration
|
|
53
|
+
* @llm-rule AVOID: Using for runtime security decisions - use get() instead
|
|
54
|
+
*/
|
|
55
|
+
function getConfig() {
|
|
56
|
+
const security = get();
|
|
57
|
+
return security.config;
|
|
58
|
+
}
|
|
59
|
+
/**
|
|
60
|
+
* Check if running in development mode (affects security logging)
|
|
61
|
+
* @llm-rule WHEN: Need to conditionally add debug information to security logs
|
|
62
|
+
* @llm-rule AVOID: Manual NODE_ENV checks - use this for consistency
|
|
63
|
+
*/
|
|
64
|
+
function isDevelopment() {
|
|
65
|
+
const config = getConfig();
|
|
66
|
+
return config.environment.isDevelopment;
|
|
67
|
+
}
|
|
68
|
+
/**
|
|
69
|
+
* Check if running in production mode (affects security strictness)
|
|
70
|
+
* @llm-rule WHEN: Need to conditionally enable strict security measures
|
|
71
|
+
* @llm-rule AVOID: Manual NODE_ENV checks - use this for consistency
|
|
72
|
+
*/
|
|
73
|
+
function isProduction() {
|
|
74
|
+
const config = getConfig();
|
|
75
|
+
return config.environment.isProduction;
|
|
76
|
+
}
|
|
77
|
+
/**
|
|
78
|
+
* Generate a secure encryption key for production use
|
|
79
|
+
* @llm-rule WHEN: Setting up encryption for the first time or rotating keys
|
|
80
|
+
* @llm-rule AVOID: Using weak or predictable keys - always use this for key generation
|
|
81
|
+
* @llm-rule NOTE: Returns 64-character hex string suitable for VOILA_SECURITY_ENCRYPTION_KEY
|
|
82
|
+
*/
|
|
83
|
+
function generateKey() {
|
|
84
|
+
const security = get();
|
|
85
|
+
return security.generateKey();
|
|
86
|
+
}
|
|
87
|
+
/**
|
|
88
|
+
* Quick security setup helper for common Express app patterns
|
|
89
|
+
* @llm-rule WHEN: Setting up basic security for Express apps quickly
|
|
90
|
+
* @llm-rule AVOID: Using without understanding - review each middleware for your needs
|
|
91
|
+
* @llm-rule NOTE: Returns array of middleware: [CSRF protection, rate limiting]
|
|
92
|
+
*/
|
|
93
|
+
function quickSetup(options = {}) {
|
|
94
|
+
const security = get();
|
|
95
|
+
const middleware = [];
|
|
96
|
+
// Add CSRF protection if requested (default: true)
|
|
97
|
+
if (options.csrf !== false) {
|
|
98
|
+
middleware.push(security.forms());
|
|
99
|
+
}
|
|
100
|
+
// Add rate limiting if requested (default: true)
|
|
101
|
+
if (options.rateLimit !== false) {
|
|
102
|
+
middleware.push(security.requests(options.maxRequests, options.windowMs));
|
|
103
|
+
}
|
|
104
|
+
return middleware;
|
|
105
|
+
}
|
|
106
|
+
/**
|
|
107
|
+
* Validate security configuration at startup
|
|
108
|
+
* @llm-rule WHEN: App startup to ensure required security config is present
|
|
109
|
+
* @llm-rule AVOID: Using in request handlers - expensive validation
|
|
110
|
+
* @llm-rule NOTE: Throws descriptive errors with environment variable names
|
|
111
|
+
*/
|
|
112
|
+
function validateRequired(checks = {}) {
|
|
113
|
+
const config = getConfig();
|
|
114
|
+
const missing = [];
|
|
115
|
+
if (checks.csrf && !config.csrf.secret) {
|
|
116
|
+
missing.push('VOILA_SECURITY_CSRF_SECRET or VOILA_AUTH_SECRET');
|
|
117
|
+
}
|
|
118
|
+
if (checks.encryption && !config.encryption.key) {
|
|
119
|
+
missing.push('VOILA_SECURITY_ENCRYPTION_KEY');
|
|
120
|
+
}
|
|
121
|
+
if (missing.length > 0) {
|
|
122
|
+
throw new Error(`Missing required security configuration: ${missing.join(', ')}\n` +
|
|
123
|
+
`Set environment variables for production security.`);
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
/**
|
|
127
|
+
* Get security status for health checks and monitoring
|
|
128
|
+
* @llm-rule WHEN: Building health check endpoints or security monitoring
|
|
129
|
+
* @llm-rule AVOID: Exposing sensitive security details - this only shows availability
|
|
130
|
+
*/
|
|
131
|
+
function getStatus() {
|
|
132
|
+
const config = getConfig();
|
|
133
|
+
return {
|
|
134
|
+
csrf: !!config.csrf.secret,
|
|
135
|
+
encryption: !!config.encryption.key,
|
|
136
|
+
rateLimit: true, // Always available
|
|
137
|
+
environment: config.environment.nodeEnv,
|
|
138
|
+
};
|
|
139
|
+
}
|
|
140
|
+
/**
|
|
141
|
+
* Single security export with enhanced functionality
|
|
142
|
+
*/
|
|
143
|
+
export const securityClass = {
|
|
144
|
+
// Core method
|
|
145
|
+
get,
|
|
146
|
+
// Utility methods
|
|
147
|
+
reset,
|
|
148
|
+
clearCache,
|
|
149
|
+
getConfig,
|
|
150
|
+
// Environment helpers
|
|
151
|
+
isDevelopment,
|
|
152
|
+
isProduction,
|
|
153
|
+
// Security helpers
|
|
154
|
+
generateKey,
|
|
155
|
+
quickSetup,
|
|
156
|
+
validateRequired,
|
|
157
|
+
getStatus,
|
|
158
|
+
};
|
|
159
|
+
export { SecurityClass } from './security.js';
|
|
160
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/security/index.ts"],"names":[],"mappings":"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"}
|