@noony-serverless/core 0.1.1 → 0.2.0

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 (62) hide show
  1. package/build/core/core.d.ts +16 -48
  2. package/build/core/core.js +2 -61
  3. package/build/core/handler.d.ts +37 -16
  4. package/build/core/handler.js +131 -42
  5. package/build/core/index.d.ts +0 -1
  6. package/build/core/index.js +0 -1
  7. package/build/middlewares/ConsolidatedValidationMiddleware.d.ts +126 -0
  8. package/build/middlewares/ConsolidatedValidationMiddleware.js +330 -0
  9. package/build/middlewares/ProcessingMiddleware.d.ts +138 -0
  10. package/build/middlewares/ProcessingMiddleware.js +425 -0
  11. package/build/middlewares/SecurityMiddleware.d.ts +157 -0
  12. package/build/middlewares/SecurityMiddleware.js +307 -0
  13. package/build/middlewares/authenticationMiddleware.d.ts +379 -0
  14. package/build/middlewares/authenticationMiddleware.js +216 -0
  15. package/build/middlewares/bodyParserMiddleware.d.ts +99 -0
  16. package/build/middlewares/bodyParserMiddleware.js +99 -0
  17. package/build/middlewares/bodyValidationMiddleware.d.ts +69 -3
  18. package/build/middlewares/bodyValidationMiddleware.js +68 -2
  19. package/build/middlewares/dependencyInjectionMiddleware.d.ts +238 -0
  20. package/build/middlewares/dependencyInjectionMiddleware.js +238 -0
  21. package/build/middlewares/errorHandlerMiddleware.d.ts +94 -0
  22. package/build/middlewares/errorHandlerMiddleware.js +105 -0
  23. package/build/middlewares/guards/RouteGuards.d.ts +476 -21
  24. package/build/middlewares/guards/RouteGuards.js +418 -21
  25. package/build/middlewares/guards/adapters/CustomTokenVerificationPortAdapter.d.ts +271 -0
  26. package/build/middlewares/guards/adapters/CustomTokenVerificationPortAdapter.js +301 -0
  27. package/build/middlewares/guards/cache/CacheAdapter.d.ts +369 -28
  28. package/build/middlewares/guards/cache/CacheAdapter.js +124 -5
  29. package/build/middlewares/guards/cache/MemoryCacheAdapter.d.ts +113 -4
  30. package/build/middlewares/guards/cache/MemoryCacheAdapter.js +113 -4
  31. package/build/middlewares/guards/config/GuardConfiguration.d.ts +568 -18
  32. package/build/middlewares/guards/config/GuardConfiguration.js +266 -10
  33. package/build/middlewares/guards/guards/FastAuthGuard.d.ts +5 -5
  34. package/build/middlewares/guards/guards/PermissionGuardFactory.d.ts +5 -13
  35. package/build/middlewares/guards/guards/PermissionGuardFactory.js +4 -4
  36. package/build/middlewares/guards/index.d.ts +43 -1
  37. package/build/middlewares/guards/index.js +46 -1
  38. package/build/middlewares/guards/resolvers/ExpressionPermissionResolver.d.ts +1 -1
  39. package/build/middlewares/guards/resolvers/ExpressionPermissionResolver.js +1 -1
  40. package/build/middlewares/guards/resolvers/PermissionResolver.d.ts +1 -1
  41. package/build/middlewares/guards/resolvers/PlainPermissionResolver.d.ts +1 -1
  42. package/build/middlewares/guards/resolvers/WildcardPermissionResolver.d.ts +1 -1
  43. package/build/middlewares/guards/services/FastUserContextService.d.ts +20 -33
  44. package/build/middlewares/guards/services/FastUserContextService.js +19 -5
  45. package/build/middlewares/headerVariablesMiddleware.d.ts +118 -0
  46. package/build/middlewares/headerVariablesMiddleware.js +118 -0
  47. package/build/middlewares/httpAttributesMiddleware.d.ts +235 -0
  48. package/build/middlewares/httpAttributesMiddleware.js +236 -1
  49. package/build/middlewares/index.d.ts +3 -1
  50. package/build/middlewares/index.js +6 -1
  51. package/build/middlewares/queryParametersMiddleware.d.ts +105 -0
  52. package/build/middlewares/queryParametersMiddleware.js +105 -0
  53. package/build/middlewares/rateLimitingMiddleware.d.ts +601 -9
  54. package/build/middlewares/rateLimitingMiddleware.js +623 -11
  55. package/build/middlewares/responseWrapperMiddleware.d.ts +170 -1
  56. package/build/middlewares/responseWrapperMiddleware.js +170 -1
  57. package/build/middlewares/securityAuditMiddleware.js +5 -5
  58. package/package.json +11 -9
  59. package/build/core/containerPool.d.ts +0 -44
  60. package/build/core/containerPool.js +0 -103
  61. package/build/middlewares/validationMiddleware.d.ts +0 -9
  62. package/build/middlewares/validationMiddleware.js +0 -40
@@ -18,11 +18,61 @@
18
18
  */
19
19
  import { CacheAdapter, CacheStats, CacheConfiguration } from './CacheAdapter';
20
20
  /**
21
- * Memory cache adapter with LRU eviction policy
21
+ * Memory cache adapter with LRU eviction policy.
22
22
  *
23
23
  * Uses a combination of Map for O(1) key lookups and a doubly-linked list
24
24
  * for O(1) LRU operations. TTL is implemented with lazy expiration checking
25
25
  * to avoid timer overhead.
26
+ *
27
+ * @example
28
+ * Basic usage:
29
+ * ```typescript
30
+ * import { MemoryCacheAdapter } from '@noony/core';
31
+ *
32
+ * const cache = new MemoryCacheAdapter({
33
+ * maxSize: 10000, // Store up to 10,000 entries
34
+ * defaultTTL: 300000, // 5 minutes default TTL
35
+ * name: 'UserCache' // For debugging/monitoring
36
+ * });
37
+ *
38
+ * // Store user permissions
39
+ * await cache.set('user:123:permissions', ['read', 'write'], 600000);
40
+ *
41
+ * // Retrieve from cache
42
+ * const permissions = await cache.get<string[]>('user:123:permissions');
43
+ * if (permissions) {
44
+ * console.log('Found in cache:', permissions);
45
+ * }
46
+ * ```
47
+ *
48
+ * @example
49
+ * Performance monitoring:
50
+ * ```typescript
51
+ * // Get cache statistics
52
+ * const stats = await cache.getStats();
53
+ * console.log(`Cache performance:
54
+ * Hit rate: ${stats.hitRate}%
55
+ * Total entries: ${stats.totalEntries}
56
+ * Memory usage: ${(stats.memoryUsage || 0) / 1024 / 1024} MB`);
57
+ *
58
+ * // Monitor cache health
59
+ * if (stats.hitRate < 80) {
60
+ * console.warn('Cache hit rate is low - consider increasing TTL');
61
+ * }
62
+ * ```
63
+ *
64
+ * @example
65
+ * Cache invalidation patterns:
66
+ * ```typescript
67
+ * // Clear all cache entries for a specific user
68
+ * await cache.deletePattern('user:123:*');
69
+ *
70
+ * // Clear all permission caches
71
+ * await cache.deletePattern('permissions:*');
72
+ *
73
+ * // Clear everything (emergency invalidation)
74
+ * await cache.flush();
75
+ * ```
26
76
  */
27
77
  export declare class MemoryCacheAdapter implements CacheAdapter {
28
78
  private readonly cache;
@@ -32,20 +82,79 @@ export declare class MemoryCacheAdapter implements CacheAdapter {
32
82
  private head?;
33
83
  private tail?;
34
84
  private stats;
85
+ /**
86
+ * Creates a new memory cache adapter instance.
87
+ *
88
+ * @param config - Cache configuration with size, TTL, and name settings
89
+ * @throws Error if maxSize or defaultTTL are invalid
90
+ *
91
+ * @example
92
+ * ```typescript
93
+ * // Create cache for user authentication
94
+ * const authCache = new MemoryCacheAdapter({
95
+ * maxSize: 5000, // Store up to 5k user sessions
96
+ * defaultTTL: 900000, // 15 minutes default TTL
97
+ * name: 'AuthCache' // For monitoring and debugging
98
+ * });
99
+ * ```
100
+ *
101
+ * @example
102
+ * ```typescript
103
+ * // Create cache for permission data
104
+ * const permissionCache = new MemoryCacheAdapter({
105
+ * maxSize: 10000, // Higher capacity for permissions
106
+ * defaultTTL: 300000, // 5 minutes default TTL
107
+ * name: 'PermissionCache' // Descriptive name for logs
108
+ * });
109
+ * ```
110
+ */
35
111
  constructor(config: CacheConfiguration);
36
112
  /**
37
- * Retrieve a value from cache
113
+ * Retrieve a value from cache.
114
+ * Implements LRU behavior by moving accessed entries to the head of the list.
115
+ * Performs lazy expiration checking for better performance.
38
116
  *
39
117
  * @param key - Cache key to retrieve
40
118
  * @returns Promise resolving to cached value or null if not found/expired
119
+ *
120
+ * @example
121
+ * ```typescript
122
+ * // Retrieve user permissions with type safety
123
+ * const permissions = await cache.get<string[]>('user:123:permissions');
124
+ * if (permissions) {
125
+ * console.log('Found permissions:', permissions);
126
+ * } else {
127
+ * console.log('Cache miss - loading from database');
128
+ * const dbPermissions = await loadFromDatabase('123');
129
+ * await cache.set('user:123:permissions', dbPermissions);
130
+ * }
131
+ * ```
41
132
  */
42
133
  get<T>(key: string): Promise<T | null>;
43
134
  /**
44
- * Store a value in cache with optional TTL
135
+ * Store a value in cache with optional TTL.
136
+ * If the key already exists, updates the value and moves to head.
137
+ * Triggers LRU eviction if cache size exceeds maxSize.
45
138
  *
46
139
  * @param key - Cache key to store under
47
- * @param value - Value to cache
140
+ * @param value - Value to cache (must be serializable)
48
141
  * @param ttlMs - Time to live in milliseconds (defaults to defaultTTL)
142
+ *
143
+ * @example
144
+ * ```typescript
145
+ * // Store user data with custom TTL
146
+ * await cache.set('user:123:profile', {
147
+ * id: 123,
148
+ * name: 'John Doe',
149
+ * roles: ['admin', 'user']
150
+ * }, 1800000); // 30 minutes
151
+ *
152
+ * // Store with default TTL
153
+ * await cache.set('session:abc123', { userId: 123, active: true });
154
+ *
155
+ * // Store permission data
156
+ * await cache.set('user:123:permissions', ['read', 'write'], 600000);
157
+ * ```
49
158
  */
50
159
  set<T>(key: string, value: T, ttlMs?: number): Promise<void>;
51
160
  /**
@@ -20,11 +20,61 @@
20
20
  Object.defineProperty(exports, "__esModule", { value: true });
21
21
  exports.MemoryCacheAdapter = void 0;
22
22
  /**
23
- * Memory cache adapter with LRU eviction policy
23
+ * Memory cache adapter with LRU eviction policy.
24
24
  *
25
25
  * Uses a combination of Map for O(1) key lookups and a doubly-linked list
26
26
  * for O(1) LRU operations. TTL is implemented with lazy expiration checking
27
27
  * to avoid timer overhead.
28
+ *
29
+ * @example
30
+ * Basic usage:
31
+ * ```typescript
32
+ * import { MemoryCacheAdapter } from '@noony/core';
33
+ *
34
+ * const cache = new MemoryCacheAdapter({
35
+ * maxSize: 10000, // Store up to 10,000 entries
36
+ * defaultTTL: 300000, // 5 minutes default TTL
37
+ * name: 'UserCache' // For debugging/monitoring
38
+ * });
39
+ *
40
+ * // Store user permissions
41
+ * await cache.set('user:123:permissions', ['read', 'write'], 600000);
42
+ *
43
+ * // Retrieve from cache
44
+ * const permissions = await cache.get<string[]>('user:123:permissions');
45
+ * if (permissions) {
46
+ * console.log('Found in cache:', permissions);
47
+ * }
48
+ * ```
49
+ *
50
+ * @example
51
+ * Performance monitoring:
52
+ * ```typescript
53
+ * // Get cache statistics
54
+ * const stats = await cache.getStats();
55
+ * console.log(`Cache performance:
56
+ * Hit rate: ${stats.hitRate}%
57
+ * Total entries: ${stats.totalEntries}
58
+ * Memory usage: ${(stats.memoryUsage || 0) / 1024 / 1024} MB`);
59
+ *
60
+ * // Monitor cache health
61
+ * if (stats.hitRate < 80) {
62
+ * console.warn('Cache hit rate is low - consider increasing TTL');
63
+ * }
64
+ * ```
65
+ *
66
+ * @example
67
+ * Cache invalidation patterns:
68
+ * ```typescript
69
+ * // Clear all cache entries for a specific user
70
+ * await cache.deletePattern('user:123:*');
71
+ *
72
+ * // Clear all permission caches
73
+ * await cache.deletePattern('permissions:*');
74
+ *
75
+ * // Clear everything (emergency invalidation)
76
+ * await cache.flush();
77
+ * ```
28
78
  */
29
79
  class MemoryCacheAdapter {
30
80
  cache = new Map();
@@ -41,6 +91,32 @@ class MemoryCacheAdapter {
41
91
  evictions: 0,
42
92
  startTime: Date.now(),
43
93
  };
94
+ /**
95
+ * Creates a new memory cache adapter instance.
96
+ *
97
+ * @param config - Cache configuration with size, TTL, and name settings
98
+ * @throws Error if maxSize or defaultTTL are invalid
99
+ *
100
+ * @example
101
+ * ```typescript
102
+ * // Create cache for user authentication
103
+ * const authCache = new MemoryCacheAdapter({
104
+ * maxSize: 5000, // Store up to 5k user sessions
105
+ * defaultTTL: 900000, // 15 minutes default TTL
106
+ * name: 'AuthCache' // For monitoring and debugging
107
+ * });
108
+ * ```
109
+ *
110
+ * @example
111
+ * ```typescript
112
+ * // Create cache for permission data
113
+ * const permissionCache = new MemoryCacheAdapter({
114
+ * maxSize: 10000, // Higher capacity for permissions
115
+ * defaultTTL: 300000, // 5 minutes default TTL
116
+ * name: 'PermissionCache' // Descriptive name for logs
117
+ * });
118
+ * ```
119
+ */
44
120
  constructor(config) {
45
121
  this.maxSize = config.maxSize;
46
122
  this.defaultTTL = config.defaultTTL;
@@ -54,10 +130,25 @@ class MemoryCacheAdapter {
54
130
  }
55
131
  }
56
132
  /**
57
- * Retrieve a value from cache
133
+ * Retrieve a value from cache.
134
+ * Implements LRU behavior by moving accessed entries to the head of the list.
135
+ * Performs lazy expiration checking for better performance.
58
136
  *
59
137
  * @param key - Cache key to retrieve
60
138
  * @returns Promise resolving to cached value or null if not found/expired
139
+ *
140
+ * @example
141
+ * ```typescript
142
+ * // Retrieve user permissions with type safety
143
+ * const permissions = await cache.get<string[]>('user:123:permissions');
144
+ * if (permissions) {
145
+ * console.log('Found permissions:', permissions);
146
+ * } else {
147
+ * console.log('Cache miss - loading from database');
148
+ * const dbPermissions = await loadFromDatabase('123');
149
+ * await cache.set('user:123:permissions', dbPermissions);
150
+ * }
151
+ * ```
61
152
  */
62
153
  async get(key) {
63
154
  const entry = this.cache.get(key);
@@ -77,11 +168,29 @@ class MemoryCacheAdapter {
77
168
  return entry.value;
78
169
  }
79
170
  /**
80
- * Store a value in cache with optional TTL
171
+ * Store a value in cache with optional TTL.
172
+ * If the key already exists, updates the value and moves to head.
173
+ * Triggers LRU eviction if cache size exceeds maxSize.
81
174
  *
82
175
  * @param key - Cache key to store under
83
- * @param value - Value to cache
176
+ * @param value - Value to cache (must be serializable)
84
177
  * @param ttlMs - Time to live in milliseconds (defaults to defaultTTL)
178
+ *
179
+ * @example
180
+ * ```typescript
181
+ * // Store user data with custom TTL
182
+ * await cache.set('user:123:profile', {
183
+ * id: 123,
184
+ * name: 'John Doe',
185
+ * roles: ['admin', 'user']
186
+ * }, 1800000); // 30 minutes
187
+ *
188
+ * // Store with default TTL
189
+ * await cache.set('session:abc123', { userId: 123, active: true });
190
+ *
191
+ * // Store permission data
192
+ * await cache.set('user:123:permissions', ['read', 'write'], 600000);
193
+ * ```
85
194
  */
86
195
  async set(key, value, ttlMs) {
87
196
  const ttl = ttlMs ?? this.defaultTTL;