@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.
Files changed (44) hide show
  1. package/README.md +7 -7
  2. package/build/core/core.d.ts +18 -50
  3. package/build/core/core.js +5 -67
  4. package/build/core/handler.d.ts +37 -16
  5. package/build/core/handler.js +131 -42
  6. package/build/core/index.d.ts +0 -1
  7. package/build/core/index.js +0 -1
  8. package/build/middlewares/ConsolidatedValidationMiddleware.d.ts +126 -0
  9. package/build/middlewares/ConsolidatedValidationMiddleware.js +330 -0
  10. package/build/middlewares/ProcessingMiddleware.d.ts +138 -0
  11. package/build/middlewares/ProcessingMiddleware.js +425 -0
  12. package/build/middlewares/SecurityMiddleware.d.ts +157 -0
  13. package/build/middlewares/SecurityMiddleware.js +307 -0
  14. package/build/middlewares/bodyValidationMiddleware.d.ts +12 -10
  15. package/build/middlewares/bodyValidationMiddleware.js +10 -8
  16. package/build/middlewares/dependencyInjectionMiddleware.js +1 -1
  17. package/build/middlewares/guards/RouteGuards.d.ts +239 -4
  18. package/build/middlewares/guards/RouteGuards.js +301 -8
  19. package/build/middlewares/guards/adapters/CustomTokenVerificationPortAdapter.d.ts +271 -0
  20. package/build/middlewares/guards/adapters/CustomTokenVerificationPortAdapter.js +301 -0
  21. package/build/middlewares/guards/config/GuardConfiguration.d.ts +50 -0
  22. package/build/middlewares/guards/config/GuardConfiguration.js +59 -0
  23. package/build/middlewares/guards/guards/FastAuthGuard.d.ts +5 -5
  24. package/build/middlewares/guards/guards/PermissionGuardFactory.d.ts +5 -13
  25. package/build/middlewares/guards/guards/PermissionGuardFactory.js +4 -4
  26. package/build/middlewares/guards/index.d.ts +43 -1
  27. package/build/middlewares/guards/index.js +46 -1
  28. package/build/middlewares/guards/resolvers/ExpressionPermissionResolver.d.ts +1 -1
  29. package/build/middlewares/guards/resolvers/ExpressionPermissionResolver.js +1 -1
  30. package/build/middlewares/guards/resolvers/PermissionResolver.d.ts +1 -1
  31. package/build/middlewares/guards/resolvers/PlainPermissionResolver.d.ts +1 -1
  32. package/build/middlewares/guards/resolvers/WildcardPermissionResolver.d.ts +1 -1
  33. package/build/middlewares/guards/services/FastUserContextService.d.ts +20 -33
  34. package/build/middlewares/guards/services/FastUserContextService.js +17 -4
  35. package/build/middlewares/httpAttributesMiddleware.js +1 -1
  36. package/build/middlewares/index.d.ts +3 -1
  37. package/build/middlewares/index.js +6 -1
  38. package/build/middlewares/rateLimitingMiddleware.d.ts +492 -4
  39. package/build/middlewares/rateLimitingMiddleware.js +514 -6
  40. package/package.json +11 -9
  41. package/build/core/containerPool.d.ts +0 -44
  42. package/build/core/containerPool.js +0 -103
  43. package/build/middlewares/validationMiddleware.d.ts +0 -154
  44. 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: any): requirement is PermissionExpression;
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 = any> {
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: any): requirement is string[];
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: any): requirement is string[];
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, PermissionResolutionStrategy } from '../config/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, any>;
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, any>;
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: any, options?: PermissionCheckOptions): Promise<PermissionCheckResult>;
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: any;
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
- checkCount: number;
160
- averageResolutionTimeUs: number;
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
- // Check cache first unless forced refresh
88
- if (!forceRefresh) {
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
- await this.saveToCache(context);
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.errors));
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
- __exportStar(require("./validationMiddleware"), exports);
34
+ // NOTE: validationMiddleware export removed due to naming conflict with new ValidationMiddleware
30
35
  __exportStar(require("./guards"), exports);
31
36
  //# sourceMappingURL=index.js.map