@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.
- package/build/core/core.d.ts +16 -48
- package/build/core/core.js +2 -61
- 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/authenticationMiddleware.d.ts +379 -0
- package/build/middlewares/authenticationMiddleware.js +216 -0
- package/build/middlewares/bodyParserMiddleware.d.ts +99 -0
- package/build/middlewares/bodyParserMiddleware.js +99 -0
- package/build/middlewares/bodyValidationMiddleware.d.ts +69 -3
- package/build/middlewares/bodyValidationMiddleware.js +68 -2
- package/build/middlewares/dependencyInjectionMiddleware.d.ts +238 -0
- package/build/middlewares/dependencyInjectionMiddleware.js +238 -0
- package/build/middlewares/errorHandlerMiddleware.d.ts +94 -0
- package/build/middlewares/errorHandlerMiddleware.js +105 -0
- package/build/middlewares/guards/RouteGuards.d.ts +476 -21
- package/build/middlewares/guards/RouteGuards.js +418 -21
- package/build/middlewares/guards/adapters/CustomTokenVerificationPortAdapter.d.ts +271 -0
- package/build/middlewares/guards/adapters/CustomTokenVerificationPortAdapter.js +301 -0
- package/build/middlewares/guards/cache/CacheAdapter.d.ts +369 -28
- package/build/middlewares/guards/cache/CacheAdapter.js +124 -5
- package/build/middlewares/guards/cache/MemoryCacheAdapter.d.ts +113 -4
- package/build/middlewares/guards/cache/MemoryCacheAdapter.js +113 -4
- package/build/middlewares/guards/config/GuardConfiguration.d.ts +568 -18
- package/build/middlewares/guards/config/GuardConfiguration.js +266 -10
- 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 +19 -5
- package/build/middlewares/headerVariablesMiddleware.d.ts +118 -0
- package/build/middlewares/headerVariablesMiddleware.js +118 -0
- package/build/middlewares/httpAttributesMiddleware.d.ts +235 -0
- package/build/middlewares/httpAttributesMiddleware.js +236 -1
- package/build/middlewares/index.d.ts +3 -1
- package/build/middlewares/index.js +6 -1
- package/build/middlewares/queryParametersMiddleware.d.ts +105 -0
- package/build/middlewares/queryParametersMiddleware.js +105 -0
- package/build/middlewares/rateLimitingMiddleware.d.ts +601 -9
- package/build/middlewares/rateLimitingMiddleware.js +623 -11
- package/build/middlewares/responseWrapperMiddleware.d.ts +170 -1
- package/build/middlewares/responseWrapperMiddleware.js +170 -1
- package/build/middlewares/securityAuditMiddleware.js +5 -5
- 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 -9
- 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;
|