@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":"auth.js","sourceRoot":"","sources":["../../src/auth/auth.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,104 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Smart defaults and environment validation for role-level-permission authentication
|
|
3
|
+
* @module @bloomneo/appkit/auth
|
|
4
|
+
* @file src/auth/defaults.ts
|
|
5
|
+
*
|
|
6
|
+
* @llm-rule WHEN: App startup - need to parse auth environment variables and build role hierarchy
|
|
7
|
+
* @llm-rule AVOID: Calling multiple times - expensive validation, use lazy loading in get()
|
|
8
|
+
* @llm-rule NOTE: Called once at startup, cached globally for performance
|
|
9
|
+
*/
|
|
10
|
+
export interface RoleConfig {
|
|
11
|
+
level: number;
|
|
12
|
+
inherits: string[];
|
|
13
|
+
}
|
|
14
|
+
export interface RoleHierarchy {
|
|
15
|
+
[roleLevel: string]: RoleConfig;
|
|
16
|
+
}
|
|
17
|
+
export interface PermissionDefaults {
|
|
18
|
+
[roleLevel: string]: string[];
|
|
19
|
+
}
|
|
20
|
+
export interface AuthConfig {
|
|
21
|
+
jwt: {
|
|
22
|
+
secret: string;
|
|
23
|
+
expiresIn: string;
|
|
24
|
+
algorithm: string;
|
|
25
|
+
};
|
|
26
|
+
password: {
|
|
27
|
+
saltRounds: number;
|
|
28
|
+
};
|
|
29
|
+
roles: RoleHierarchy;
|
|
30
|
+
permissions: {
|
|
31
|
+
coreActions: string[];
|
|
32
|
+
coreScopes: string[];
|
|
33
|
+
defaults: PermissionDefaults;
|
|
34
|
+
};
|
|
35
|
+
user: {
|
|
36
|
+
defaultRole: string;
|
|
37
|
+
defaultLevel: string;
|
|
38
|
+
};
|
|
39
|
+
middleware: {
|
|
40
|
+
tokenSources: string[];
|
|
41
|
+
errorMessages: {
|
|
42
|
+
noToken: string;
|
|
43
|
+
invalidToken: string;
|
|
44
|
+
expiredToken: string;
|
|
45
|
+
insufficientRole: string;
|
|
46
|
+
insufficientPermissions: string;
|
|
47
|
+
};
|
|
48
|
+
};
|
|
49
|
+
environment: {
|
|
50
|
+
isDevelopment: boolean;
|
|
51
|
+
isProduction: boolean;
|
|
52
|
+
nodeEnv: string;
|
|
53
|
+
};
|
|
54
|
+
}
|
|
55
|
+
/**
|
|
56
|
+
* Default role hierarchy with semantic level names and clear inheritance
|
|
57
|
+
*/
|
|
58
|
+
declare const DEFAULT_ROLE_HIERARCHY: RoleHierarchy;
|
|
59
|
+
/**
|
|
60
|
+
* Core permission actions
|
|
61
|
+
*/
|
|
62
|
+
declare const CORE_ACTIONS: string[];
|
|
63
|
+
/**
|
|
64
|
+
* Core permission scopes
|
|
65
|
+
*/
|
|
66
|
+
declare const CORE_SCOPES: string[];
|
|
67
|
+
/**
|
|
68
|
+
* Default permissions for each role.level
|
|
69
|
+
*/
|
|
70
|
+
declare const DEFAULT_PERMISSIONS: PermissionDefaults;
|
|
71
|
+
/**
|
|
72
|
+
* Gets smart defaults using VOILA_AUTH_* environment variables
|
|
73
|
+
* @llm-rule WHEN: App startup to get production-ready auth configuration
|
|
74
|
+
* @llm-rule AVOID: Calling repeatedly - validates environment each time, expensive operation
|
|
75
|
+
* @llm-rule AVOID: Calling in request handlers - expensive environment parsing
|
|
76
|
+
* @llm-rule NOTE: Called once at startup, cached globally for performance
|
|
77
|
+
*/
|
|
78
|
+
export declare function getSmartDefaults(): AuthConfig;
|
|
79
|
+
/**
|
|
80
|
+
* Validates JWT secret strength and format
|
|
81
|
+
* @llm-rule WHEN: Setting custom JWT secret for token security
|
|
82
|
+
* @llm-rule AVOID: Using weak secrets - minimum 32 characters required for security
|
|
83
|
+
*/
|
|
84
|
+
export declare function validateSecret(secret: string): void;
|
|
85
|
+
/**
|
|
86
|
+
* Validates bcrypt rounds for security and performance
|
|
87
|
+
* @llm-rule WHEN: Setting custom bcrypt rounds for password hashing
|
|
88
|
+
* @llm-rule AVOID: Using rounds below 8 (insecure) or above 15 (too slow)
|
|
89
|
+
*/
|
|
90
|
+
export declare function validateRounds(rounds: number): void;
|
|
91
|
+
/**
|
|
92
|
+
* Validates role.level exists in hierarchy
|
|
93
|
+
* @llm-rule WHEN: Checking if a role.level is valid before using
|
|
94
|
+
* @llm-rule AVOID: Using with undefined roles - will return false
|
|
95
|
+
*/
|
|
96
|
+
export declare function validateRoleLevel(roleLevel: string, roles: RoleHierarchy): boolean;
|
|
97
|
+
/**
|
|
98
|
+
* Validates permission format (action:scope)
|
|
99
|
+
* @llm-rule WHEN: Checking if a permission string is properly formatted
|
|
100
|
+
* @llm-rule AVOID: Using with malformed permissions - will return false
|
|
101
|
+
*/
|
|
102
|
+
export declare function validatePermission(permission: string): boolean;
|
|
103
|
+
export { DEFAULT_ROLE_HIERARCHY, DEFAULT_PERMISSIONS, CORE_ACTIONS, CORE_SCOPES, };
|
|
104
|
+
//# sourceMappingURL=defaults.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"defaults.d.ts","sourceRoot":"","sources":["../../src/auth/defaults.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,MAAM,WAAW,UAAU;IACzB,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,EAAE,CAAC;CACpB;AAED,MAAM,WAAW,aAAa;IAC5B,CAAC,SAAS,EAAE,MAAM,GAAG,UAAU,CAAC;CACjC;AAED,MAAM,WAAW,kBAAkB;IACjC,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC;CAC/B;AAED,MAAM,WAAW,UAAU;IACzB,GAAG,EAAE;QACH,MAAM,EAAE,MAAM,CAAC;QACf,SAAS,EAAE,MAAM,CAAC;QAClB,SAAS,EAAE,MAAM,CAAC;KACnB,CAAC;IACF,QAAQ,EAAE;QACR,UAAU,EAAE,MAAM,CAAC;KACpB,CAAC;IACF,KAAK,EAAE,aAAa,CAAC;IACrB,WAAW,EAAE;QACX,WAAW,EAAE,MAAM,EAAE,CAAC;QACtB,UAAU,EAAE,MAAM,EAAE,CAAC;QACrB,QAAQ,EAAE,kBAAkB,CAAC;KAC9B,CAAC;IACF,IAAI,EAAE;QACJ,WAAW,EAAE,MAAM,CAAC;QACpB,YAAY,EAAE,MAAM,CAAC;KACtB,CAAC;IACF,UAAU,EAAE;QACV,YAAY,EAAE,MAAM,EAAE,CAAC;QACvB,aAAa,EAAE;YACb,OAAO,EAAE,MAAM,CAAC;YAChB,YAAY,EAAE,MAAM,CAAC;YACrB,YAAY,EAAE,MAAM,CAAC;YACrB,gBAAgB,EAAE,MAAM,CAAC;YACzB,uBAAuB,EAAE,MAAM,CAAC;SACjC,CAAC;KACH,CAAC;IACF,WAAW,EAAE;QACX,aAAa,EAAE,OAAO,CAAC;QACvB,YAAY,EAAE,OAAO,CAAC;QACtB,OAAO,EAAE,MAAM,CAAC;KACjB,CAAC;CACH;AAED;;GAEG;AACH,QAAA,MAAM,sBAAsB,EAAE,aAqC7B,CAAC;AAEF;;GAEG;AACH,QAAA,MAAM,YAAY,UAAiD,CAAC;AAEpE;;GAEG;AACH,QAAA,MAAM,WAAW,UAAqC,CAAC;AAEvD;;GAEG;AACH,QAAA,MAAM,mBAAmB,EAAE,kBAU1B,CAAC;AAEF;;;;;;GAMG;AACH,wBAAgB,gBAAgB,IAAI,UAAU,CAyC7C;AAiHD;;;;GAIG;AACH,wBAAgB,cAAc,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAyCnD;AAED;;;;GAIG;AACH,wBAAgB,cAAc,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAQnD;AAED;;;;GAIG;AACH,wBAAgB,iBAAiB,CAAC,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE,aAAa,GAAG,OAAO,CAMlF;AAED;;;;GAIG;AACH,wBAAgB,kBAAkB,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAM9D;AA6ID,OAAO,EACL,sBAAsB,EACtB,mBAAmB,EACnB,YAAY,EACZ,WAAW,GACZ,CAAC"}
|
|
@@ -0,0 +1,374 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Smart defaults and environment validation for role-level-permission authentication
|
|
3
|
+
* @module @bloomneo/appkit/auth
|
|
4
|
+
* @file src/auth/defaults.ts
|
|
5
|
+
*
|
|
6
|
+
* @llm-rule WHEN: App startup - need to parse auth environment variables and build role hierarchy
|
|
7
|
+
* @llm-rule AVOID: Calling multiple times - expensive validation, use lazy loading in get()
|
|
8
|
+
* @llm-rule NOTE: Called once at startup, cached globally for performance
|
|
9
|
+
*/
|
|
10
|
+
/**
|
|
11
|
+
* Default role hierarchy with semantic level names and clear inheritance
|
|
12
|
+
*/
|
|
13
|
+
const DEFAULT_ROLE_HIERARCHY = {
|
|
14
|
+
'user.basic': {
|
|
15
|
+
level: 1,
|
|
16
|
+
inherits: [],
|
|
17
|
+
},
|
|
18
|
+
'user.pro': {
|
|
19
|
+
level: 2,
|
|
20
|
+
inherits: ['user.basic'],
|
|
21
|
+
},
|
|
22
|
+
'user.max': {
|
|
23
|
+
level: 3,
|
|
24
|
+
inherits: ['user.pro', 'user.basic'],
|
|
25
|
+
},
|
|
26
|
+
'moderator.review': {
|
|
27
|
+
level: 4,
|
|
28
|
+
inherits: ['user.max', 'user.pro', 'user.basic'],
|
|
29
|
+
},
|
|
30
|
+
'moderator.approve': {
|
|
31
|
+
level: 5,
|
|
32
|
+
inherits: ['moderator.review', 'user.max', 'user.pro', 'user.basic'],
|
|
33
|
+
},
|
|
34
|
+
'moderator.manage': {
|
|
35
|
+
level: 6,
|
|
36
|
+
inherits: ['moderator.approve', 'moderator.review', 'user.max', 'user.pro', 'user.basic'],
|
|
37
|
+
},
|
|
38
|
+
'admin.tenant': {
|
|
39
|
+
level: 7,
|
|
40
|
+
inherits: ['moderator.manage', 'moderator.approve', 'moderator.review', 'user.max', 'user.pro', 'user.basic'],
|
|
41
|
+
},
|
|
42
|
+
'admin.org': {
|
|
43
|
+
level: 8,
|
|
44
|
+
inherits: ['admin.tenant', 'moderator.manage', 'moderator.approve', 'moderator.review', 'user.max', 'user.pro', 'user.basic'],
|
|
45
|
+
},
|
|
46
|
+
'admin.system': {
|
|
47
|
+
level: 9,
|
|
48
|
+
inherits: ['admin.org', 'admin.tenant', 'moderator.manage', 'moderator.approve', 'moderator.review', 'user.max', 'user.pro', 'user.basic'],
|
|
49
|
+
},
|
|
50
|
+
};
|
|
51
|
+
/**
|
|
52
|
+
* Core permission actions
|
|
53
|
+
*/
|
|
54
|
+
const CORE_ACTIONS = ['view', 'create', 'edit', 'delete', 'manage'];
|
|
55
|
+
/**
|
|
56
|
+
* Core permission scopes
|
|
57
|
+
*/
|
|
58
|
+
const CORE_SCOPES = ['own', 'tenant', 'org', 'system'];
|
|
59
|
+
/**
|
|
60
|
+
* Default permissions for each role.level
|
|
61
|
+
*/
|
|
62
|
+
const DEFAULT_PERMISSIONS = {
|
|
63
|
+
'user.basic': ['manage:own'],
|
|
64
|
+
'user.pro': ['manage:own'],
|
|
65
|
+
'user.max': ['manage:own'],
|
|
66
|
+
'moderator.review': ['view:tenant'],
|
|
67
|
+
'moderator.approve': ['view:tenant', 'create:tenant', 'edit:tenant'],
|
|
68
|
+
'moderator.manage': ['view:tenant', 'create:tenant', 'edit:tenant'],
|
|
69
|
+
'admin.tenant': ['manage:tenant'],
|
|
70
|
+
'admin.org': ['manage:tenant', 'manage:org'],
|
|
71
|
+
'admin.system': ['manage:tenant', 'manage:org', 'manage:system'],
|
|
72
|
+
};
|
|
73
|
+
/**
|
|
74
|
+
* Gets smart defaults using VOILA_AUTH_* environment variables
|
|
75
|
+
* @llm-rule WHEN: App startup to get production-ready auth configuration
|
|
76
|
+
* @llm-rule AVOID: Calling repeatedly - validates environment each time, expensive operation
|
|
77
|
+
* @llm-rule AVOID: Calling in request handlers - expensive environment parsing
|
|
78
|
+
* @llm-rule NOTE: Called once at startup, cached globally for performance
|
|
79
|
+
*/
|
|
80
|
+
export function getSmartDefaults() {
|
|
81
|
+
validateEnvironment();
|
|
82
|
+
const isDevelopment = process.env.NODE_ENV === 'development';
|
|
83
|
+
const isProduction = process.env.NODE_ENV === 'production';
|
|
84
|
+
return {
|
|
85
|
+
jwt: {
|
|
86
|
+
secret: process.env.VOILA_AUTH_SECRET,
|
|
87
|
+
expiresIn: process.env.VOILA_AUTH_EXPIRES_IN || '7d',
|
|
88
|
+
algorithm: 'HS256',
|
|
89
|
+
},
|
|
90
|
+
password: {
|
|
91
|
+
saltRounds: parseInt(process.env.VOILA_AUTH_BCRYPT_ROUNDS || '10'),
|
|
92
|
+
},
|
|
93
|
+
roles: parseRoleHierarchy(),
|
|
94
|
+
permissions: {
|
|
95
|
+
coreActions: CORE_ACTIONS,
|
|
96
|
+
coreScopes: CORE_SCOPES,
|
|
97
|
+
defaults: parseDefaultPermissions(),
|
|
98
|
+
},
|
|
99
|
+
user: {
|
|
100
|
+
defaultRole: process.env.VOILA_AUTH_DEFAULT_ROLE || 'user',
|
|
101
|
+
defaultLevel: process.env.VOILA_AUTH_DEFAULT_LEVEL || 'basic',
|
|
102
|
+
},
|
|
103
|
+
middleware: {
|
|
104
|
+
tokenSources: ['header', 'cookie', 'query'],
|
|
105
|
+
errorMessages: {
|
|
106
|
+
noToken: 'Authentication required',
|
|
107
|
+
invalidToken: 'Invalid authentication. Please sign in again.',
|
|
108
|
+
expiredToken: 'Your session has expired. Please sign in again.',
|
|
109
|
+
insufficientRole: 'Access denied. Insufficient role level.',
|
|
110
|
+
insufficientPermissions: 'Access denied. Insufficient permissions.',
|
|
111
|
+
},
|
|
112
|
+
},
|
|
113
|
+
environment: {
|
|
114
|
+
isDevelopment,
|
|
115
|
+
isProduction,
|
|
116
|
+
nodeEnv: process.env.NODE_ENV || 'development',
|
|
117
|
+
},
|
|
118
|
+
};
|
|
119
|
+
}
|
|
120
|
+
/**
|
|
121
|
+
* Parses role hierarchy from environment variable or uses defaults
|
|
122
|
+
* @llm-rule WHEN: App startup to build role configuration from VOILA_AUTH_ROLES
|
|
123
|
+
* @llm-rule AVOID: Using invalid role.level format - must be role.level:number
|
|
124
|
+
* @llm-rule NOTE: Format: VOILA_AUTH_ROLES=user.basic:1,admin.tenant:5,admin.system:9
|
|
125
|
+
*/
|
|
126
|
+
function parseRoleHierarchy() {
|
|
127
|
+
const envRoles = process.env.VOILA_AUTH_ROLES;
|
|
128
|
+
if (!envRoles) {
|
|
129
|
+
return DEFAULT_ROLE_HIERARCHY;
|
|
130
|
+
}
|
|
131
|
+
const parsedRoles = {};
|
|
132
|
+
const rolePairs = envRoles.split(',');
|
|
133
|
+
for (const rolePair of rolePairs) {
|
|
134
|
+
const [roleLevel, levelStr] = rolePair.trim().split(':');
|
|
135
|
+
if (!roleLevel || !levelStr) {
|
|
136
|
+
throw new Error(`Invalid VOILA_AUTH_ROLES format: "${rolePair}". Expected format: "role.level:number"`);
|
|
137
|
+
}
|
|
138
|
+
if (!validateRoleLevelFormat(roleLevel)) {
|
|
139
|
+
throw new Error(`Invalid role.level format: "${roleLevel}". Must be "role.level" (e.g., "admin.tenant")`);
|
|
140
|
+
}
|
|
141
|
+
const level = parseInt(levelStr);
|
|
142
|
+
if (isNaN(level) || level < 1) {
|
|
143
|
+
throw new Error(`Invalid level number: "${levelStr}". Must be a positive integer`);
|
|
144
|
+
}
|
|
145
|
+
parsedRoles[roleLevel] = {
|
|
146
|
+
level,
|
|
147
|
+
inherits: [], // Inheritance calculated based on levels
|
|
148
|
+
};
|
|
149
|
+
}
|
|
150
|
+
// Calculate inheritance based on levels
|
|
151
|
+
const sortedRoles = Object.keys(parsedRoles).sort((a, b) => parsedRoles[a].level - parsedRoles[b].level);
|
|
152
|
+
for (const roleLevel of sortedRoles) {
|
|
153
|
+
const currentLevel = parsedRoles[roleLevel].level;
|
|
154
|
+
parsedRoles[roleLevel].inherits = sortedRoles.filter(other => parsedRoles[other].level < currentLevel);
|
|
155
|
+
}
|
|
156
|
+
return parsedRoles;
|
|
157
|
+
}
|
|
158
|
+
/**
|
|
159
|
+
* Parses permission defaults from environment variable or uses defaults
|
|
160
|
+
* @llm-rule WHEN: App startup to build permission configuration from VOILA_AUTH_PERMISSIONS
|
|
161
|
+
* @llm-rule AVOID: Using invalid permission format - must be action:scope
|
|
162
|
+
* @llm-rule NOTE: Format: VOILA_AUTH_PERMISSIONS=user.basic:view:own,admin.tenant:manage:tenant
|
|
163
|
+
*/
|
|
164
|
+
function parseDefaultPermissions() {
|
|
165
|
+
const envPermissions = process.env.VOILA_AUTH_PERMISSIONS;
|
|
166
|
+
if (!envPermissions) {
|
|
167
|
+
return DEFAULT_PERMISSIONS;
|
|
168
|
+
}
|
|
169
|
+
const parsedPermissions = {};
|
|
170
|
+
const permissionPairs = envPermissions.split(',');
|
|
171
|
+
for (const permissionPair of permissionPairs) {
|
|
172
|
+
const parts = permissionPair.trim().split(':');
|
|
173
|
+
if (parts.length !== 3) {
|
|
174
|
+
throw new Error(`Invalid VOILA_AUTH_PERMISSIONS format: "${permissionPair}". Expected format: "role.level:action:scope"`);
|
|
175
|
+
}
|
|
176
|
+
const [roleLevel, action, scope] = parts;
|
|
177
|
+
const permission = `${action}:${scope}`;
|
|
178
|
+
if (!validateRoleLevelFormat(roleLevel)) {
|
|
179
|
+
throw new Error(`Invalid role.level format: "${roleLevel}". Must be "role.level" (e.g., "admin.tenant")`);
|
|
180
|
+
}
|
|
181
|
+
if (!validatePermissionFormat(permission)) {
|
|
182
|
+
throw new Error(`Invalid permission format: "${permission}". Must be "action:scope" (e.g., "manage:tenant")`);
|
|
183
|
+
}
|
|
184
|
+
if (!parsedPermissions[roleLevel]) {
|
|
185
|
+
parsedPermissions[roleLevel] = [];
|
|
186
|
+
}
|
|
187
|
+
if (!parsedPermissions[roleLevel].includes(permission)) {
|
|
188
|
+
parsedPermissions[roleLevel].push(permission);
|
|
189
|
+
}
|
|
190
|
+
}
|
|
191
|
+
return parsedPermissions;
|
|
192
|
+
}
|
|
193
|
+
/**
|
|
194
|
+
* Validates JWT secret strength and format
|
|
195
|
+
* @llm-rule WHEN: Setting custom JWT secret for token security
|
|
196
|
+
* @llm-rule AVOID: Using weak secrets - minimum 32 characters required for security
|
|
197
|
+
*/
|
|
198
|
+
export function validateSecret(secret) {
|
|
199
|
+
if (!secret || typeof secret !== 'string') {
|
|
200
|
+
console.error('\n🚨 ============================================');
|
|
201
|
+
console.error('❌ CRITICAL AUTH CONFIGURATION ERROR');
|
|
202
|
+
console.error('🚨 ============================================');
|
|
203
|
+
console.error('🔑 MISSING REQUIRED ENVIRONMENT VARIABLE: VOILA_AUTH_SECRET');
|
|
204
|
+
console.error('🚨 ============================================\n');
|
|
205
|
+
throw new Error('VOILA_AUTH_SECRET is required. Set environment variable: VOILA_AUTH_SECRET=your-jwt-secret-key');
|
|
206
|
+
}
|
|
207
|
+
if (secret.length < 32) {
|
|
208
|
+
console.error('\n🚨 ============================================');
|
|
209
|
+
console.error('❌ AUTH SECRET TOO SHORT');
|
|
210
|
+
console.error('🚨 ============================================');
|
|
211
|
+
console.error(`🔑 Current length: ${secret.length} characters (minimum: 32)`);
|
|
212
|
+
console.error('🚨 ============================================\n');
|
|
213
|
+
throw new Error(`VOILA_AUTH_SECRET must be at least 32 characters for security. Current length: ${secret.length}`);
|
|
214
|
+
}
|
|
215
|
+
if (secret === 'your-jwt-secret-key' || secret === 'secret' || secret === 'supersecret') {
|
|
216
|
+
console.error('\n🚨 ============================================');
|
|
217
|
+
console.error('❌ INSECURE AUTH SECRET DETECTED');
|
|
218
|
+
console.error('🚨 ============================================');
|
|
219
|
+
console.error('🔑 VOILA_AUTH_SECRET appears to be a default/example value');
|
|
220
|
+
console.error('⚠️ This is a security risk in production!');
|
|
221
|
+
console.error('');
|
|
222
|
+
console.error('💡 SOLUTION:');
|
|
223
|
+
console.error(' Generate a strong, random secret:');
|
|
224
|
+
console.error(' VOILA_AUTH_SECRET=k8s9m2n4p7q1w3e5r8t0y2u4i6o9a1s5d7f9g2h4j6l8');
|
|
225
|
+
console.error('🚨 ============================================\n');
|
|
226
|
+
throw new Error('VOILA_AUTH_SECRET appears to be a default/example value. Use a strong, random secret');
|
|
227
|
+
}
|
|
228
|
+
}
|
|
229
|
+
/**
|
|
230
|
+
* Validates bcrypt rounds for security and performance
|
|
231
|
+
* @llm-rule WHEN: Setting custom bcrypt rounds for password hashing
|
|
232
|
+
* @llm-rule AVOID: Using rounds below 8 (insecure) or above 15 (too slow)
|
|
233
|
+
*/
|
|
234
|
+
export function validateRounds(rounds) {
|
|
235
|
+
if (rounds < 8) {
|
|
236
|
+
throw new Error('Bcrypt rounds must be at least 8 for security');
|
|
237
|
+
}
|
|
238
|
+
if (rounds > 15) {
|
|
239
|
+
throw new Error('Bcrypt rounds should not exceed 15 for performance');
|
|
240
|
+
}
|
|
241
|
+
}
|
|
242
|
+
/**
|
|
243
|
+
* Validates role.level exists in hierarchy
|
|
244
|
+
* @llm-rule WHEN: Checking if a role.level is valid before using
|
|
245
|
+
* @llm-rule AVOID: Using with undefined roles - will return false
|
|
246
|
+
*/
|
|
247
|
+
export function validateRoleLevel(roleLevel, roles) {
|
|
248
|
+
if (!roleLevel || typeof roleLevel !== 'string') {
|
|
249
|
+
return false;
|
|
250
|
+
}
|
|
251
|
+
return roles[roleLevel] !== undefined;
|
|
252
|
+
}
|
|
253
|
+
/**
|
|
254
|
+
* Validates permission format (action:scope)
|
|
255
|
+
* @llm-rule WHEN: Checking if a permission string is properly formatted
|
|
256
|
+
* @llm-rule AVOID: Using with malformed permissions - will return false
|
|
257
|
+
*/
|
|
258
|
+
export function validatePermission(permission) {
|
|
259
|
+
if (!permission || typeof permission !== 'string') {
|
|
260
|
+
return false;
|
|
261
|
+
}
|
|
262
|
+
return validatePermissionFormat(permission);
|
|
263
|
+
}
|
|
264
|
+
/**
|
|
265
|
+
* Validates role.level format
|
|
266
|
+
*/
|
|
267
|
+
function validateRoleLevelFormat(roleLevel) {
|
|
268
|
+
if (!roleLevel || typeof roleLevel !== 'string') {
|
|
269
|
+
return false;
|
|
270
|
+
}
|
|
271
|
+
// Must be in format: role.level (e.g., "admin.tenant")
|
|
272
|
+
const parts = roleLevel.split('.');
|
|
273
|
+
return parts.length === 2 && parts[0].length > 0 && parts[1].length > 0;
|
|
274
|
+
}
|
|
275
|
+
/**
|
|
276
|
+
* Validates permission format
|
|
277
|
+
*/
|
|
278
|
+
function validatePermissionFormat(permission) {
|
|
279
|
+
if (!permission || typeof permission !== 'string') {
|
|
280
|
+
return false;
|
|
281
|
+
}
|
|
282
|
+
// Must be in format: action:scope (e.g., "manage:tenant")
|
|
283
|
+
const parts = permission.split(':');
|
|
284
|
+
if (parts.length !== 2) {
|
|
285
|
+
return false;
|
|
286
|
+
}
|
|
287
|
+
const [action, scope] = parts;
|
|
288
|
+
return action.length > 0 && scope.length > 0;
|
|
289
|
+
}
|
|
290
|
+
/**
|
|
291
|
+
* Enhanced environment validation with better error messages
|
|
292
|
+
*/
|
|
293
|
+
function validateEnvironment() {
|
|
294
|
+
const secret = process.env.VOILA_AUTH_SECRET;
|
|
295
|
+
// Enhanced validation with clear console logging and better error messages
|
|
296
|
+
if (!secret) {
|
|
297
|
+
console.error('\n🚨 ============================================');
|
|
298
|
+
console.error('❌ CRITICAL AUTH CONFIGURATION ERROR');
|
|
299
|
+
console.error('🚨 ============================================');
|
|
300
|
+
console.error('🔑 MISSING REQUIRED ENVIRONMENT VARIABLE: VOILA_AUTH_SECRET');
|
|
301
|
+
console.error('');
|
|
302
|
+
console.error('💡 SOLUTION:');
|
|
303
|
+
console.error(' Add the following to your .env file:');
|
|
304
|
+
console.error(' VOILA_AUTH_SECRET=your-secure-32-character-secret-key-here');
|
|
305
|
+
console.error('');
|
|
306
|
+
console.error('📋 REQUIREMENTS:');
|
|
307
|
+
console.error(' - Must be at least 32 characters long');
|
|
308
|
+
console.error(' - Should be a strong, random string');
|
|
309
|
+
console.error(' - Do not use default values like "secret" or "supersecret"');
|
|
310
|
+
console.error('');
|
|
311
|
+
console.error('🔧 EXAMPLE:');
|
|
312
|
+
console.error(' VOILA_AUTH_SECRET=k8s9m2n4p7q1w3e5r8t0y2u4i6o9a1s5d7f9g2h4j6l8');
|
|
313
|
+
console.error('');
|
|
314
|
+
console.error('⚠️ Without this variable, authentication features will not work');
|
|
315
|
+
console.error('🚨 ============================================\n');
|
|
316
|
+
throw new Error('VOILA_AUTH_SECRET is required. Set environment variable: VOILA_AUTH_SECRET=your-jwt-secret-key');
|
|
317
|
+
}
|
|
318
|
+
if (secret.length < 32) {
|
|
319
|
+
console.error('\n🚨 ============================================');
|
|
320
|
+
console.error('❌ AUTH SECRET TOO SHORT');
|
|
321
|
+
console.error('🚨 ============================================');
|
|
322
|
+
console.error(`🔑 Current VOILA_AUTH_SECRET length: ${secret.length} characters`);
|
|
323
|
+
console.error('⚠️ Minimum required: 32 characters');
|
|
324
|
+
console.error('');
|
|
325
|
+
console.error('💡 SOLUTION:');
|
|
326
|
+
console.error(' Generate a stronger secret with at least 32 characters');
|
|
327
|
+
console.error('');
|
|
328
|
+
console.error('🔧 EXAMPLE:');
|
|
329
|
+
console.error(' VOILA_AUTH_SECRET=k8s9m2n4p7q1w3e5r8t0y2u4i6o9a1s5d7f9g2h4j6l8');
|
|
330
|
+
console.error('🚨 ============================================\n');
|
|
331
|
+
throw new Error(`VOILA_AUTH_SECRET must be at least 32 characters for security. Current length: ${secret.length}`);
|
|
332
|
+
}
|
|
333
|
+
validateSecret(secret);
|
|
334
|
+
const rounds = process.env.VOILA_AUTH_BCRYPT_ROUNDS;
|
|
335
|
+
if (rounds) {
|
|
336
|
+
const roundsNum = parseInt(rounds);
|
|
337
|
+
if (isNaN(roundsNum)) {
|
|
338
|
+
throw new Error(`Invalid VOILA_AUTH_BCRYPT_ROUNDS: "${rounds}". Must be a number between 8 and 15`);
|
|
339
|
+
}
|
|
340
|
+
validateRounds(roundsNum);
|
|
341
|
+
}
|
|
342
|
+
const expiresIn = process.env.VOILA_AUTH_EXPIRES_IN;
|
|
343
|
+
if (expiresIn && !isValidTimespan(expiresIn)) {
|
|
344
|
+
throw new Error(`Invalid VOILA_AUTH_EXPIRES_IN: "${expiresIn}". Must be a valid time span (e.g., '7d', '1h', '30m')`);
|
|
345
|
+
}
|
|
346
|
+
const defaultRole = process.env.VOILA_AUTH_DEFAULT_ROLE;
|
|
347
|
+
const defaultLevel = process.env.VOILA_AUTH_DEFAULT_LEVEL;
|
|
348
|
+
if (defaultRole && defaultLevel) {
|
|
349
|
+
const roleLevel = `${defaultRole}.${defaultLevel}`;
|
|
350
|
+
const roles = parseRoleHierarchy();
|
|
351
|
+
if (!validateRoleLevel(roleLevel, roles)) {
|
|
352
|
+
const validRoles = Object.keys(roles).join(', ');
|
|
353
|
+
throw new Error(`Invalid VOILA_AUTH_DEFAULT_ROLE.LEVEL: "${roleLevel}". Must be one of: ${validRoles}`);
|
|
354
|
+
}
|
|
355
|
+
}
|
|
356
|
+
const nodeEnv = process.env.NODE_ENV;
|
|
357
|
+
if (nodeEnv && !['development', 'production', 'test'].includes(nodeEnv)) {
|
|
358
|
+
console.warn(`Unusual NODE_ENV: "${nodeEnv}". Expected: development, production, or test`);
|
|
359
|
+
}
|
|
360
|
+
}
|
|
361
|
+
/**
|
|
362
|
+
* Validates if a string is a valid JWT timespan
|
|
363
|
+
*/
|
|
364
|
+
function isValidTimespan(timespan) {
|
|
365
|
+
if (typeof timespan === 'number') {
|
|
366
|
+
return timespan > 0;
|
|
367
|
+
}
|
|
368
|
+
if (typeof timespan === 'string') {
|
|
369
|
+
return /^\d+[smhdwy]$/.test(timespan.toLowerCase());
|
|
370
|
+
}
|
|
371
|
+
return false;
|
|
372
|
+
}
|
|
373
|
+
export { DEFAULT_ROLE_HIERARCHY, DEFAULT_PERMISSIONS, CORE_ACTIONS, CORE_SCOPES, };
|
|
374
|
+
//# sourceMappingURL=defaults.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"defaults.js","sourceRoot":"","sources":["../../src/auth/defaults.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Ultra-simple role-level-permission authentication that just works
|
|
3
|
+
* @module @bloomneo/appkit/auth
|
|
4
|
+
* @file src/auth/index.ts
|
|
5
|
+
*
|
|
6
|
+
* @llm-rule WHEN: Building apps that need authentication with user roles and permissions
|
|
7
|
+
* @llm-rule AVOID: Complex auth setups with multiple libraries - this handles JWT + bcrypt + middleware in one API
|
|
8
|
+
* @llm-rule NOTE: Uses role.level hierarchy (user.basic → admin.system) with automatic inheritance
|
|
9
|
+
* @llm-rule NOTE: Common pattern - auth.requireLoginToken() → auth.requireUserRoles() → handler
|
|
10
|
+
* @llm-rule NOTE: Safe user access - const user = auth.user(req); if (!user) return error;
|
|
11
|
+
*/
|
|
12
|
+
import { AuthenticationClass } from './auth.js';
|
|
13
|
+
import { type AuthConfig, type RoleHierarchy } from './defaults.js';
|
|
14
|
+
/**
|
|
15
|
+
* Get authentication instance - the only function you need to learn
|
|
16
|
+
* Environment variables parsed once for performance
|
|
17
|
+
* @llm-rule WHEN: Starting any auth operation - this is your main entry point
|
|
18
|
+
* @llm-rule AVOID: Calling new AuthenticationClass() directly - always use this function
|
|
19
|
+
* @llm-rule NOTE: Typical flow - get() → generateLoginToken() → middleware → user()
|
|
20
|
+
*/
|
|
21
|
+
declare function get(overrides?: Partial<AuthConfig>): AuthenticationClass;
|
|
22
|
+
/**
|
|
23
|
+
* Reset global instance (useful for testing or config changes)
|
|
24
|
+
* @llm-rule WHEN: Testing auth logic with different configurations
|
|
25
|
+
* @llm-rule AVOID: Using in production - only for tests and development
|
|
26
|
+
*/
|
|
27
|
+
declare function reset(newConfig?: Partial<AuthConfig>): AuthenticationClass;
|
|
28
|
+
/**
|
|
29
|
+
* Get current role hierarchy for inspection
|
|
30
|
+
* @llm-rule WHEN: Need to see available role.levels for debugging or UI
|
|
31
|
+
* @llm-rule AVOID: Using for authorization logic - use hasRole() method instead
|
|
32
|
+
*/
|
|
33
|
+
declare function getRoles(): RoleHierarchy;
|
|
34
|
+
/**
|
|
35
|
+
* Get current permission configuration for inspection
|
|
36
|
+
* @llm-rule WHEN: Need to see default permissions for debugging or documentation
|
|
37
|
+
* @llm-rule AVOID: Using for permission checks - use can() method instead
|
|
38
|
+
*/
|
|
39
|
+
declare function getPermissions(): {
|
|
40
|
+
coreActions: string[];
|
|
41
|
+
coreScopes: string[];
|
|
42
|
+
defaults: Record<string, string[]>;
|
|
43
|
+
};
|
|
44
|
+
/**
|
|
45
|
+
* Check if a role.level exists in current configuration
|
|
46
|
+
* @llm-rule WHEN: Validating user input or config before creating tokens
|
|
47
|
+
* @llm-rule AVOID: Using for runtime authorization - this is for validation only
|
|
48
|
+
*/
|
|
49
|
+
declare function isValidRole(roleLevel: string): boolean;
|
|
50
|
+
/**
|
|
51
|
+
* Get all available role.levels in hierarchy order
|
|
52
|
+
* @llm-rule WHEN: Building role selection UI or generating documentation
|
|
53
|
+
* @llm-rule AVOID: Hardcoding role lists - use this to stay in sync with config
|
|
54
|
+
*/
|
|
55
|
+
declare function getAllRoles(): string[];
|
|
56
|
+
/**
|
|
57
|
+
* Single authentication export with minimal functionality
|
|
58
|
+
*/
|
|
59
|
+
export declare const authClass: {
|
|
60
|
+
readonly get: typeof get;
|
|
61
|
+
readonly reset: typeof reset;
|
|
62
|
+
readonly getRoles: typeof getRoles;
|
|
63
|
+
readonly getPermissions: typeof getPermissions;
|
|
64
|
+
readonly isValidRole: typeof isValidRole;
|
|
65
|
+
readonly getAllRoles: typeof getAllRoles;
|
|
66
|
+
};
|
|
67
|
+
export type { AuthConfig, RoleConfig, RoleHierarchy, PermissionDefaults, } from './defaults.js';
|
|
68
|
+
export type { JwtPayload, LoginTokenPayload, ApiTokenPayload, ExpressRequest, ExpressResponse, MiddlewareOptions, ExpressMiddleware, } from './auth.js';
|
|
69
|
+
export { AuthenticationClass } from './auth.js';
|
|
70
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/auth/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,EAAE,mBAAmB,EAAE,MAAM,WAAW,CAAC;AAChD,OAAO,EAAoB,KAAK,UAAU,EAAE,KAAK,aAAa,EAAE,MAAM,eAAe,CAAC;AAKtF;;;;;;GAMG;AACH,iBAAS,GAAG,CAAC,SAAS,GAAE,OAAO,CAAC,UAAU,CAAM,GAAG,mBAAmB,CASrE;AAED;;;;GAIG;AACH,iBAAS,KAAK,CAAC,SAAS,GAAE,OAAO,CAAC,UAAU,CAAM,GAAG,mBAAmB,CAKvE;AAED;;;;GAIG;AACH,iBAAS,QAAQ,IAAI,aAAa,CAGjC;AAED;;;;GAIG;AACH,iBAAS,cAAc,IAAI;IAAE,WAAW,EAAE,MAAM,EAAE,CAAC;IAAC,UAAU,EAAE,MAAM,EAAE,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,CAAA;CAAE,CAG7G;AAED;;;;GAIG;AACH,iBAAS,WAAW,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAG/C;AAED;;;;GAIG;AACH,iBAAS,WAAW,IAAI,MAAM,EAAE,CAK/B;AAED;;GAEG;AACH,eAAO,MAAM,SAAS;;;;;;;CAUZ,CAAC;AAGX,YAAY,EACV,UAAU,EACV,UAAU,EACV,aAAa,EACb,kBAAkB,GACnB,MAAM,eAAe,CAAC;AAEvB,YAAY,EACV,UAAU,EACV,iBAAiB,EACjB,eAAe,EACf,cAAc,EACd,eAAe,EACf,iBAAiB,EACjB,iBAAiB,GAClB,MAAM,WAAW,CAAC;AAEnB,OAAO,EAAE,mBAAmB,EAAE,MAAM,WAAW,CAAC"}
|