@noony-serverless/core 0.1.5 → 0.2.1
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/README.md +7 -7
- package/build/core/core.d.ts +18 -50
- package/build/core/core.js +5 -67
- package/build/core/handler.d.ts +37 -16
- package/build/core/handler.js +131 -42
- package/build/core/index.d.ts +0 -1
- package/build/core/index.js +0 -1
- package/build/middlewares/ConsolidatedValidationMiddleware.d.ts +126 -0
- package/build/middlewares/ConsolidatedValidationMiddleware.js +330 -0
- package/build/middlewares/ProcessingMiddleware.d.ts +138 -0
- package/build/middlewares/ProcessingMiddleware.js +425 -0
- package/build/middlewares/SecurityMiddleware.d.ts +157 -0
- package/build/middlewares/SecurityMiddleware.js +307 -0
- package/build/middlewares/bodyValidationMiddleware.d.ts +12 -10
- package/build/middlewares/bodyValidationMiddleware.js +10 -8
- package/build/middlewares/dependencyInjectionMiddleware.js +1 -1
- package/build/middlewares/guards/RouteGuards.d.ts +239 -4
- package/build/middlewares/guards/RouteGuards.js +301 -8
- package/build/middlewares/guards/adapters/CustomTokenVerificationPortAdapter.d.ts +271 -0
- package/build/middlewares/guards/adapters/CustomTokenVerificationPortAdapter.js +301 -0
- package/build/middlewares/guards/config/GuardConfiguration.d.ts +50 -0
- package/build/middlewares/guards/config/GuardConfiguration.js +59 -0
- package/build/middlewares/guards/guards/FastAuthGuard.d.ts +5 -5
- package/build/middlewares/guards/guards/PermissionGuardFactory.d.ts +5 -13
- package/build/middlewares/guards/guards/PermissionGuardFactory.js +4 -4
- package/build/middlewares/guards/index.d.ts +43 -1
- package/build/middlewares/guards/index.js +46 -1
- package/build/middlewares/guards/resolvers/ExpressionPermissionResolver.d.ts +1 -1
- package/build/middlewares/guards/resolvers/ExpressionPermissionResolver.js +1 -1
- package/build/middlewares/guards/resolvers/PermissionResolver.d.ts +1 -1
- package/build/middlewares/guards/resolvers/PlainPermissionResolver.d.ts +1 -1
- package/build/middlewares/guards/resolvers/WildcardPermissionResolver.d.ts +1 -1
- package/build/middlewares/guards/services/FastUserContextService.d.ts +20 -33
- package/build/middlewares/guards/services/FastUserContextService.js +17 -4
- package/build/middlewares/httpAttributesMiddleware.js +1 -1
- package/build/middlewares/index.d.ts +3 -1
- package/build/middlewares/index.js +6 -1
- package/build/middlewares/rateLimitingMiddleware.d.ts +492 -4
- package/build/middlewares/rateLimitingMiddleware.js +514 -6
- package/package.json +11 -9
- package/build/core/containerPool.d.ts +0 -44
- package/build/core/containerPool.js +0 -103
- package/build/middlewares/validationMiddleware.d.ts +0 -154
- package/build/middlewares/validationMiddleware.js +0 -185
|
@@ -118,7 +118,7 @@ export declare class ExpressionPermissionResolver extends PermissionResolver<Per
|
|
|
118
118
|
/**
|
|
119
119
|
* Check if this resolver can handle the given requirement type
|
|
120
120
|
*/
|
|
121
|
-
canHandle(requirement:
|
|
121
|
+
canHandle(requirement: unknown): requirement is PermissionExpression;
|
|
122
122
|
/**
|
|
123
123
|
* Normalize expression for consistent cache keys
|
|
124
124
|
*
|
|
@@ -412,7 +412,7 @@ class ExpressionPermissionResolver extends PermissionResolver_1.PermissionResolv
|
|
|
412
412
|
* Check if this resolver can handle the given requirement type
|
|
413
413
|
*/
|
|
414
414
|
canHandle(requirement) {
|
|
415
|
-
return (requirement &&
|
|
415
|
+
return Boolean(requirement &&
|
|
416
416
|
typeof requirement === 'object' &&
|
|
417
417
|
PermissionResolver_1.PermissionUtils.isValidExpression(requirement));
|
|
418
418
|
}
|
|
@@ -19,7 +19,7 @@
|
|
|
19
19
|
* different types of permission requirements. The generic type T represents
|
|
20
20
|
* the specific requirement format for each resolver.
|
|
21
21
|
*/
|
|
22
|
-
export declare abstract class PermissionResolver<T =
|
|
22
|
+
export declare abstract class PermissionResolver<T = unknown> {
|
|
23
23
|
/**
|
|
24
24
|
* Check if user permissions satisfy the requirement
|
|
25
25
|
*
|
|
@@ -96,6 +96,6 @@ export declare class PlainPermissionResolver extends PermissionResolver<string[]
|
|
|
96
96
|
* @param requirement - The requirement to check
|
|
97
97
|
* @returns true if this resolver can handle the requirement
|
|
98
98
|
*/
|
|
99
|
-
canHandle(requirement:
|
|
99
|
+
canHandle(requirement: unknown): requirement is string[];
|
|
100
100
|
}
|
|
101
101
|
//# sourceMappingURL=PlainPermissionResolver.d.ts.map
|
|
@@ -141,6 +141,6 @@ export declare class WildcardPermissionResolver extends PermissionResolver<strin
|
|
|
141
141
|
/**
|
|
142
142
|
* Check if this resolver can handle the given requirement type
|
|
143
143
|
*/
|
|
144
|
-
canHandle(requirement:
|
|
144
|
+
canHandle(requirement: unknown): requirement is string[];
|
|
145
145
|
}
|
|
146
146
|
//# sourceMappingURL=WildcardPermissionResolver.d.ts.map
|
|
@@ -23,9 +23,13 @@
|
|
|
23
23
|
* @version 1.0.0
|
|
24
24
|
*/
|
|
25
25
|
import { CacheAdapter } from '../cache/CacheAdapter';
|
|
26
|
-
import { GuardConfiguration
|
|
26
|
+
import { GuardConfiguration } from '../config/GuardConfiguration';
|
|
27
27
|
import { PermissionRegistry } from '../registry/PermissionRegistry';
|
|
28
|
-
import { PermissionResolverType, PermissionCheckResult } from '../resolvers/PermissionResolver';
|
|
28
|
+
import { PermissionResolverType, PermissionCheckResult, PermissionExpression } from '../resolvers/PermissionResolver';
|
|
29
|
+
/**
|
|
30
|
+
* Type alias for permission requirements that can be strings, string arrays, or complex expressions
|
|
31
|
+
*/
|
|
32
|
+
type PermissionRequirement = string | string[] | PermissionExpression | Record<string, unknown>;
|
|
29
33
|
/**
|
|
30
34
|
* User context with cached permissions and metadata
|
|
31
35
|
*/
|
|
@@ -33,7 +37,7 @@ export interface UserContext {
|
|
|
33
37
|
userId: string;
|
|
34
38
|
permissions: Set<string>;
|
|
35
39
|
roles: string[];
|
|
36
|
-
metadata: Record<string,
|
|
40
|
+
metadata: Record<string, unknown>;
|
|
37
41
|
expandedPermissions?: Set<string>;
|
|
38
42
|
lastUpdated: string;
|
|
39
43
|
expiresAt?: string;
|
|
@@ -48,7 +52,7 @@ export interface UserPermissionSource {
|
|
|
48
52
|
getUserPermissions(userId: string): Promise<{
|
|
49
53
|
permissions: string[];
|
|
50
54
|
roles: string[];
|
|
51
|
-
metadata?: Record<string,
|
|
55
|
+
metadata?: Record<string, unknown>;
|
|
52
56
|
} | null>;
|
|
53
57
|
/**
|
|
54
58
|
* Get role-based permissions for expansion
|
|
@@ -85,6 +89,12 @@ export declare class FastUserContextService {
|
|
|
85
89
|
private permissionChecks;
|
|
86
90
|
private totalResolutionTimeUs;
|
|
87
91
|
constructor(cache: CacheAdapter, config: GuardConfiguration, permissionSource: UserPermissionSource, permissionRegistry: PermissionRegistry);
|
|
92
|
+
/**
|
|
93
|
+
* Check if caching is effectively disabled
|
|
94
|
+
*
|
|
95
|
+
* @returns true if caching is disabled (either by environment variable or NoopCacheAdapter)
|
|
96
|
+
*/
|
|
97
|
+
private isCachingDisabled;
|
|
88
98
|
/**
|
|
89
99
|
* Get or load user context with permissions
|
|
90
100
|
*
|
|
@@ -107,7 +117,7 @@ export declare class FastUserContextService {
|
|
|
107
117
|
* @param options - Check options
|
|
108
118
|
* @returns Detailed permission check result
|
|
109
119
|
*/
|
|
110
|
-
checkPermission(userId: string, requirement:
|
|
120
|
+
checkPermission(userId: string, requirement: PermissionRequirement, options?: PermissionCheckOptions): Promise<PermissionCheckResult>;
|
|
111
121
|
/**
|
|
112
122
|
* Batch check multiple permissions for a user
|
|
113
123
|
*
|
|
@@ -120,7 +130,7 @@ export declare class FastUserContextService {
|
|
|
120
130
|
* @returns Array of permission check results
|
|
121
131
|
*/
|
|
122
132
|
checkPermissions(userId: string, requirements: Array<{
|
|
123
|
-
requirement:
|
|
133
|
+
requirement: PermissionRequirement;
|
|
124
134
|
resolverType?: PermissionResolverType;
|
|
125
135
|
}>, options?: PermissionCheckOptions): Promise<PermissionCheckResult[]>;
|
|
126
136
|
/**
|
|
@@ -155,33 +165,9 @@ export declare class FastUserContextService {
|
|
|
155
165
|
averageResolutionTimeUs: number;
|
|
156
166
|
totalResolutionTimeUs: number;
|
|
157
167
|
resolverStats: {
|
|
158
|
-
plain:
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
totalResolutionTimeUs: number;
|
|
162
|
-
};
|
|
163
|
-
wildcard: {
|
|
164
|
-
strategy: PermissionResolutionStrategy;
|
|
165
|
-
checkCount: number;
|
|
166
|
-
averageResolutionTimeUs: number;
|
|
167
|
-
totalResolutionTimeUs: number;
|
|
168
|
-
cacheHitRate: number;
|
|
169
|
-
cacheHits: number;
|
|
170
|
-
cacheMisses: number;
|
|
171
|
-
};
|
|
172
|
-
expression: {
|
|
173
|
-
checkCount: number;
|
|
174
|
-
averageResolutionTimeUs: number;
|
|
175
|
-
totalResolutionTimeUs: number;
|
|
176
|
-
cacheHitRate: number;
|
|
177
|
-
cacheHits: number;
|
|
178
|
-
cacheMisses: number;
|
|
179
|
-
complexityDistribution: {
|
|
180
|
-
simple: number;
|
|
181
|
-
moderate: number;
|
|
182
|
-
complex: number;
|
|
183
|
-
};
|
|
184
|
-
};
|
|
168
|
+
plain: Record<string, unknown>;
|
|
169
|
+
wildcard: Record<string, unknown>;
|
|
170
|
+
expression: Record<string, unknown>;
|
|
185
171
|
};
|
|
186
172
|
};
|
|
187
173
|
/**
|
|
@@ -213,4 +199,5 @@ export declare class FastUserContextService {
|
|
|
213
199
|
*/
|
|
214
200
|
private recordAuditTrail;
|
|
215
201
|
}
|
|
202
|
+
export {};
|
|
216
203
|
//# sourceMappingURL=FastUserContextService.d.ts.map
|
|
@@ -41,6 +41,7 @@ const PlainPermissionResolver_1 = require("../resolvers/PlainPermissionResolver"
|
|
|
41
41
|
const WildcardPermissionResolver_1 = require("../resolvers/WildcardPermissionResolver");
|
|
42
42
|
const ExpressionPermissionResolver_1 = require("../resolvers/ExpressionPermissionResolver");
|
|
43
43
|
const PermissionResolver_1 = require("../resolvers/PermissionResolver");
|
|
44
|
+
const NoopCacheAdapter_1 = require("../cache/NoopCacheAdapter");
|
|
44
45
|
/**
|
|
45
46
|
* Fast User Context Service Implementation
|
|
46
47
|
*/
|
|
@@ -70,6 +71,15 @@ let FastUserContextService = class FastUserContextService {
|
|
|
70
71
|
GuardConfiguration_1.PermissionResolutionStrategy.PRE_EXPANSION, this._permissionRegistry, cache);
|
|
71
72
|
this.expressionResolver = new ExpressionPermissionResolver_1.ExpressionPermissionResolver(cache);
|
|
72
73
|
}
|
|
74
|
+
/**
|
|
75
|
+
* Check if caching is effectively disabled
|
|
76
|
+
*
|
|
77
|
+
* @returns true if caching is disabled (either by environment variable or NoopCacheAdapter)
|
|
78
|
+
*/
|
|
79
|
+
isCachingDisabled() {
|
|
80
|
+
return (!GuardConfiguration_1.GuardConfiguration.isCachingEnabled() ||
|
|
81
|
+
this.cache instanceof NoopCacheAdapter_1.NoopCacheAdapter);
|
|
82
|
+
}
|
|
73
83
|
/**
|
|
74
84
|
* Get or load user context with permissions
|
|
75
85
|
*
|
|
@@ -84,8 +94,9 @@ let FastUserContextService = class FastUserContextService {
|
|
|
84
94
|
const startTime = process.hrtime.bigint();
|
|
85
95
|
this.contextLoads++;
|
|
86
96
|
try {
|
|
87
|
-
|
|
88
|
-
|
|
97
|
+
const cachingDisabled = this.isCachingDisabled();
|
|
98
|
+
// Check cache first unless forced refresh or caching is disabled
|
|
99
|
+
if (!forceRefresh && !cachingDisabled) {
|
|
89
100
|
const cachedContext = await this.loadFromCache(userId);
|
|
90
101
|
if (cachedContext) {
|
|
91
102
|
this.cacheHits++;
|
|
@@ -100,8 +111,10 @@ let FastUserContextService = class FastUserContextService {
|
|
|
100
111
|
}
|
|
101
112
|
// Build user context
|
|
102
113
|
const context = await this.buildUserContext(userId, userData);
|
|
103
|
-
// Cache the context
|
|
104
|
-
|
|
114
|
+
// Cache the context only if caching is enabled
|
|
115
|
+
if (!cachingDisabled) {
|
|
116
|
+
await this.saveToCache(context);
|
|
117
|
+
}
|
|
105
118
|
return context;
|
|
106
119
|
}
|
|
107
120
|
finally {
|
|
@@ -296,7 +296,7 @@ const validatedQueryParameters = (schema) => ({
|
|
|
296
296
|
}
|
|
297
297
|
catch (error) {
|
|
298
298
|
if (error instanceof zod_1.z.ZodError) {
|
|
299
|
-
throw new errors_1.ValidationError('Validation error', JSON.stringify(error.
|
|
299
|
+
throw new errors_1.ValidationError('Validation error', JSON.stringify(error.issues));
|
|
300
300
|
}
|
|
301
301
|
throw error;
|
|
302
302
|
}
|
|
@@ -1,3 +1,6 @@
|
|
|
1
|
+
export * from './SecurityMiddleware';
|
|
2
|
+
export * from './ConsolidatedValidationMiddleware';
|
|
3
|
+
export * from './ProcessingMiddleware';
|
|
1
4
|
export * from './authenticationMiddleware';
|
|
2
5
|
export * from './bodyParserMiddleware';
|
|
3
6
|
export * from './bodyValidationMiddleware';
|
|
@@ -10,6 +13,5 @@ export * from './rateLimitingMiddleware';
|
|
|
10
13
|
export * from './responseWrapperMiddleware';
|
|
11
14
|
export * from './securityAuditMiddleware';
|
|
12
15
|
export * from './securityHeadersMiddleware';
|
|
13
|
-
export * from './validationMiddleware';
|
|
14
16
|
export * from './guards';
|
|
15
17
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -14,6 +14,11 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
|
14
14
|
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
15
15
|
};
|
|
16
16
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
|
+
// === NEW CONSOLIDATED MIDDLEWARES ===
|
|
18
|
+
__exportStar(require("./SecurityMiddleware"), exports);
|
|
19
|
+
__exportStar(require("./ConsolidatedValidationMiddleware"), exports);
|
|
20
|
+
__exportStar(require("./ProcessingMiddleware"), exports);
|
|
21
|
+
// === EXISTING INDIVIDUAL MIDDLEWARES (for backward compatibility) ===
|
|
17
22
|
__exportStar(require("./authenticationMiddleware"), exports);
|
|
18
23
|
__exportStar(require("./bodyParserMiddleware"), exports);
|
|
19
24
|
__exportStar(require("./bodyValidationMiddleware"), exports);
|
|
@@ -26,6 +31,6 @@ __exportStar(require("./rateLimitingMiddleware"), exports);
|
|
|
26
31
|
__exportStar(require("./responseWrapperMiddleware"), exports);
|
|
27
32
|
__exportStar(require("./securityAuditMiddleware"), exports);
|
|
28
33
|
__exportStar(require("./securityHeadersMiddleware"), exports);
|
|
29
|
-
|
|
34
|
+
// NOTE: validationMiddleware export removed due to naming conflict with new ValidationMiddleware
|
|
30
35
|
__exportStar(require("./guards"), exports);
|
|
31
36
|
//# sourceMappingURL=index.js.map
|