@bernierllc/backoff-retry 0.1.1 → 0.3.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/CHANGELOG.md +13 -0
- package/README.md +110 -0
- package/dist/enhancement-manager.d.ts +205 -0
- package/dist/enhancement-manager.d.ts.map +1 -0
- package/dist/enhancement-manager.js +533 -0
- package/dist/enhancement-manager.js.map +1 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +4 -0
- package/dist/index.js.map +1 -1
- package/dist/memory-protection.js +1 -1
- package/dist/memory-protection.js.map +1 -1
- package/dist/neveradmin/components/RetryAnalyticsPage.d.ts +15 -0
- package/dist/neveradmin/components/RetryAnalyticsPage.d.ts.map +1 -0
- package/dist/neveradmin/components/RetryAnalyticsPage.js +28 -0
- package/dist/neveradmin/components/RetryAnalyticsPage.js.map +1 -0
- package/dist/neveradmin/components/RetryConfigurationPage.d.ts +15 -0
- package/dist/neveradmin/components/RetryConfigurationPage.d.ts.map +1 -0
- package/dist/neveradmin/components/RetryConfigurationPage.js +28 -0
- package/dist/neveradmin/components/RetryConfigurationPage.js.map +1 -0
- package/dist/neveradmin/components/RetryEnhancementsPage.d.ts +15 -0
- package/dist/neveradmin/components/RetryEnhancementsPage.d.ts.map +1 -0
- package/dist/neveradmin/components/RetryEnhancementsPage.js +28 -0
- package/dist/neveradmin/components/RetryEnhancementsPage.js.map +1 -0
- package/dist/neveradmin/components/RetryOperationsPage.d.ts +15 -0
- package/dist/neveradmin/components/RetryOperationsPage.d.ts.map +1 -0
- package/dist/neveradmin/components/RetryOperationsPage.js +28 -0
- package/dist/neveradmin/components/RetryOperationsPage.js.map +1 -0
- package/dist/neveradmin/components/RetryOverviewPage.d.ts +15 -0
- package/dist/neveradmin/components/RetryOverviewPage.d.ts.map +1 -0
- package/dist/neveradmin/components/RetryOverviewPage.js +28 -0
- package/dist/neveradmin/components/RetryOverviewPage.js.map +1 -0
- package/dist/neveradmin/components/index.d.ts +7 -0
- package/dist/neveradmin/components/index.d.ts.map +1 -0
- package/dist/neveradmin/components/index.js +32 -0
- package/dist/neveradmin/components/index.js.map +1 -0
- package/dist/neveradmin/components/types.d.ts +64 -0
- package/dist/neveradmin/components/types.d.ts.map +1 -0
- package/dist/neveradmin/components/types.js +10 -0
- package/dist/neveradmin/components/types.js.map +1 -0
- package/dist/neveradmin/hooks/index.d.ts +5 -0
- package/dist/neveradmin/hooks/index.d.ts.map +1 -0
- package/dist/neveradmin/hooks/index.js +28 -0
- package/dist/neveradmin/hooks/index.js.map +1 -0
- package/dist/neveradmin/hooks/useRetryConfiguration.d.ts +23 -0
- package/dist/neveradmin/hooks/useRetryConfiguration.d.ts.map +1 -0
- package/dist/neveradmin/hooks/useRetryConfiguration.js +162 -0
- package/dist/neveradmin/hooks/useRetryConfiguration.js.map +1 -0
- package/dist/neveradmin/hooks/useRetryEnhancements.d.ts +39 -0
- package/dist/neveradmin/hooks/useRetryEnhancements.d.ts.map +1 -0
- package/dist/neveradmin/hooks/useRetryEnhancements.js +197 -0
- package/dist/neveradmin/hooks/useRetryEnhancements.js.map +1 -0
- package/dist/neveradmin/hooks/useRetryOperations.d.ts +28 -0
- package/dist/neveradmin/hooks/useRetryOperations.d.ts.map +1 -0
- package/dist/neveradmin/hooks/useRetryOperations.js +166 -0
- package/dist/neveradmin/hooks/useRetryOperations.js.map +1 -0
- package/dist/neveradmin/hooks/useRetryStats.d.ts +19 -0
- package/dist/neveradmin/hooks/useRetryStats.d.ts.map +1 -0
- package/dist/neveradmin/hooks/useRetryStats.js +81 -0
- package/dist/neveradmin/hooks/useRetryStats.js.map +1 -0
- package/dist/neveradmin/index.d.ts +6 -0
- package/dist/neveradmin/index.d.ts.map +1 -0
- package/dist/neveradmin/index.js +29 -0
- package/dist/neveradmin/index.js.map +1 -0
- package/dist/neveradmin/registration.d.ts +33 -0
- package/dist/neveradmin/registration.d.ts.map +1 -0
- package/dist/neveradmin/registration.js +96 -0
- package/dist/neveradmin/registration.js.map +1 -0
- package/dist/neveradmin/types.d.ts +88 -0
- package/dist/neveradmin/types.d.ts.map +1 -0
- package/dist/neveradmin/types.js +10 -0
- package/dist/neveradmin/types.js.map +1 -0
- package/dist/neveradmin/utils/formatting.d.ts +41 -0
- package/dist/neveradmin/utils/formatting.d.ts.map +1 -0
- package/dist/neveradmin/utils/formatting.js +142 -0
- package/dist/neveradmin/utils/formatting.js.map +1 -0
- package/dist/neveradmin/utils/index.d.ts +4 -0
- package/dist/neveradmin/utils/index.d.ts.map +1 -0
- package/dist/neveradmin/utils/index.js +27 -0
- package/dist/neveradmin/utils/index.js.map +1 -0
- package/dist/neveradmin/utils/permissions.d.ts +74 -0
- package/dist/neveradmin/utils/permissions.d.ts.map +1 -0
- package/dist/neveradmin/utils/permissions.js +152 -0
- package/dist/neveradmin/utils/permissions.js.map +1 -0
- package/dist/neveradmin/utils/validation.d.ts +38 -0
- package/dist/neveradmin/utils/validation.d.ts.map +1 -0
- package/dist/neveradmin/utils/validation.js +142 -0
- package/dist/neveradmin/utils/validation.js.map +1 -0
- package/dist/retry-manager.d.ts +32 -11
- package/dist/retry-manager.d.ts.map +1 -1
- package/dist/retry-manager.js +128 -82
- package/dist/retry-manager.js.map +1 -1
- package/dist/security/index.d.ts +3 -0
- package/dist/security/index.d.ts.map +1 -0
- package/dist/security/index.js +26 -0
- package/dist/security/index.js.map +1 -0
- package/dist/security/secure-storage.d.ts +61 -0
- package/dist/security/secure-storage.d.ts.map +1 -0
- package/dist/security/secure-storage.js +418 -0
- package/dist/security/secure-storage.js.map +1 -0
- package/dist/security/security-manager.d.ts +172 -0
- package/dist/security/security-manager.d.ts.map +1 -0
- package/dist/security/security-manager.js +417 -0
- package/dist/security/security-manager.js.map +1 -0
- package/dist/storage/backend-selector.d.ts +96 -0
- package/dist/storage/backend-selector.d.ts.map +1 -0
- package/dist/storage/backend-selector.js +466 -0
- package/dist/storage/backend-selector.js.map +1 -0
- package/dist/storage/index.d.ts +7 -0
- package/dist/storage/index.d.ts.map +1 -0
- package/dist/storage/index.js +30 -0
- package/dist/storage/index.js.map +1 -0
- package/dist/storage/memory-storage.d.ts +55 -0
- package/dist/storage/memory-storage.d.ts.map +1 -0
- package/dist/storage/memory-storage.js +106 -0
- package/dist/storage/memory-storage.js.map +1 -0
- package/dist/storage/postgresql-storage.d.ts +77 -0
- package/dist/storage/postgresql-storage.d.ts.map +1 -0
- package/dist/storage/postgresql-storage.js +314 -0
- package/dist/storage/postgresql-storage.js.map +1 -0
- package/dist/storage/redis-cluster-storage.d.ts +88 -0
- package/dist/storage/redis-cluster-storage.d.ts.map +1 -0
- package/dist/storage/redis-cluster-storage.js +414 -0
- package/dist/storage/redis-cluster-storage.js.map +1 -0
- package/dist/storage/redis-storage.d.ts +67 -0
- package/dist/storage/redis-storage.d.ts.map +1 -0
- package/dist/storage/redis-storage.js +236 -0
- package/dist/storage/redis-storage.js.map +1 -0
- package/dist/storage/types.d.ts +55 -0
- package/dist/storage/types.d.ts.map +1 -0
- package/dist/storage/types.js +10 -0
- package/dist/storage/types.js.map +1 -0
- package/dist/types.d.ts +7 -32
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js +1 -0
- package/dist/types.js.map +1 -1
- package/package.json +16 -3
|
@@ -0,0 +1,418 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/*
|
|
3
|
+
Copyright (c) 2025 Bernier LLC
|
|
4
|
+
|
|
5
|
+
This file is licensed to the client under a limited-use license.
|
|
6
|
+
The client may use and modify this code *only within the scope of the project it was delivered for*.
|
|
7
|
+
Redistribution or use in other products or commercial offerings is not permitted without written consent from Bernier LLC.
|
|
8
|
+
*/
|
|
9
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
10
|
+
exports.SecureStorage = void 0;
|
|
11
|
+
/**
|
|
12
|
+
* Secure storage wrapper that adds encryption, access control, and audit logging
|
|
13
|
+
*/
|
|
14
|
+
class SecureStorage {
|
|
15
|
+
constructor(storage, securityManager, defaultAccessControl) {
|
|
16
|
+
this.storage = storage;
|
|
17
|
+
this.securityManager = securityManager;
|
|
18
|
+
this.defaultAccessControl = defaultAccessControl;
|
|
19
|
+
}
|
|
20
|
+
/**
|
|
21
|
+
* Store a retry state with encryption and access control
|
|
22
|
+
*/
|
|
23
|
+
async set(key, value, accessControl) {
|
|
24
|
+
const ac = accessControl || this.defaultAccessControl;
|
|
25
|
+
// Check access permissions
|
|
26
|
+
if (!this.securityManager.checkAccess(ac, 'write', key)) {
|
|
27
|
+
throw new Error('Access denied: insufficient permissions to write retry state');
|
|
28
|
+
}
|
|
29
|
+
// Check rate limiting
|
|
30
|
+
const rateLimitId = `${ac.userId || 'anonymous'}_write`;
|
|
31
|
+
if (!this.securityManager.checkRateLimit(rateLimitId)) {
|
|
32
|
+
throw new Error('Rate limit exceeded for write operations');
|
|
33
|
+
}
|
|
34
|
+
try {
|
|
35
|
+
// Encrypt the retry state data
|
|
36
|
+
const encryptedValue = await this.securityManager.encryptData(value);
|
|
37
|
+
// Store the encrypted data
|
|
38
|
+
await this.storage.set(key, { encrypted: true, data: encryptedValue });
|
|
39
|
+
// Log successful operation
|
|
40
|
+
this.securityManager.logAudit({
|
|
41
|
+
userId: ac.userId,
|
|
42
|
+
userRole: ac.userRole,
|
|
43
|
+
action: 'write',
|
|
44
|
+
resource: key,
|
|
45
|
+
success: true,
|
|
46
|
+
details: {
|
|
47
|
+
retryStateId: value.id,
|
|
48
|
+
status: value.status,
|
|
49
|
+
attempt: value.attempt
|
|
50
|
+
}
|
|
51
|
+
});
|
|
52
|
+
}
|
|
53
|
+
catch (error) {
|
|
54
|
+
// Log failed operation
|
|
55
|
+
this.securityManager.logAudit({
|
|
56
|
+
userId: ac.userId,
|
|
57
|
+
userRole: ac.userRole,
|
|
58
|
+
action: 'write',
|
|
59
|
+
resource: key,
|
|
60
|
+
success: false,
|
|
61
|
+
details: { error: error instanceof Error ? error.message : 'Unknown error' }
|
|
62
|
+
});
|
|
63
|
+
throw error;
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
/**
|
|
67
|
+
* Get a retry state with decryption and access control
|
|
68
|
+
*/
|
|
69
|
+
async get(key, accessControl) {
|
|
70
|
+
const ac = accessControl || this.defaultAccessControl;
|
|
71
|
+
// Check access permissions
|
|
72
|
+
if (!this.securityManager.checkAccess(ac, 'read', key)) {
|
|
73
|
+
throw new Error('Access denied: insufficient permissions to read retry state');
|
|
74
|
+
}
|
|
75
|
+
// Check rate limiting
|
|
76
|
+
const rateLimitId = `${ac.userId || 'anonymous'}_read`;
|
|
77
|
+
if (!this.securityManager.checkRateLimit(rateLimitId)) {
|
|
78
|
+
throw new Error('Rate limit exceeded for read operations');
|
|
79
|
+
}
|
|
80
|
+
try {
|
|
81
|
+
// Get the stored data
|
|
82
|
+
const storedData = await this.storage.get(key);
|
|
83
|
+
if (!storedData) {
|
|
84
|
+
// Log successful read (no data found)
|
|
85
|
+
this.securityManager.logAudit({
|
|
86
|
+
userId: ac.userId,
|
|
87
|
+
userRole: ac.userRole,
|
|
88
|
+
action: 'read',
|
|
89
|
+
resource: key,
|
|
90
|
+
success: true,
|
|
91
|
+
details: { result: 'not_found' }
|
|
92
|
+
});
|
|
93
|
+
return null;
|
|
94
|
+
}
|
|
95
|
+
// Check if data is encrypted
|
|
96
|
+
if (this.isEncryptedData(storedData)) {
|
|
97
|
+
// Decrypt the data
|
|
98
|
+
const decryptedData = await this.securityManager.decryptData(storedData.data);
|
|
99
|
+
// Log successful read
|
|
100
|
+
this.securityManager.logAudit({
|
|
101
|
+
userId: ac.userId,
|
|
102
|
+
userRole: ac.userRole,
|
|
103
|
+
action: 'read',
|
|
104
|
+
resource: key,
|
|
105
|
+
success: true,
|
|
106
|
+
details: {
|
|
107
|
+
retryStateId: decryptedData.id,
|
|
108
|
+
status: decryptedData.status,
|
|
109
|
+
encrypted: true
|
|
110
|
+
}
|
|
111
|
+
});
|
|
112
|
+
return decryptedData;
|
|
113
|
+
}
|
|
114
|
+
else {
|
|
115
|
+
// Data is not encrypted (legacy or plain text)
|
|
116
|
+
this.securityManager.logAudit({
|
|
117
|
+
userId: ac.userId,
|
|
118
|
+
userRole: ac.userRole,
|
|
119
|
+
action: 'read',
|
|
120
|
+
resource: key,
|
|
121
|
+
success: true,
|
|
122
|
+
details: {
|
|
123
|
+
retryStateId: storedData.id,
|
|
124
|
+
status: storedData.status,
|
|
125
|
+
encrypted: false
|
|
126
|
+
}
|
|
127
|
+
});
|
|
128
|
+
return storedData;
|
|
129
|
+
}
|
|
130
|
+
}
|
|
131
|
+
catch (error) {
|
|
132
|
+
// Log failed operation
|
|
133
|
+
this.securityManager.logAudit({
|
|
134
|
+
userId: ac.userId,
|
|
135
|
+
userRole: ac.userRole,
|
|
136
|
+
action: 'read',
|
|
137
|
+
resource: key,
|
|
138
|
+
success: false,
|
|
139
|
+
details: { error: error instanceof Error ? error.message : 'Unknown error' }
|
|
140
|
+
});
|
|
141
|
+
throw error;
|
|
142
|
+
}
|
|
143
|
+
}
|
|
144
|
+
/**
|
|
145
|
+
* Delete a retry state with access control
|
|
146
|
+
*/
|
|
147
|
+
async delete(key, accessControl) {
|
|
148
|
+
const ac = accessControl || this.defaultAccessControl;
|
|
149
|
+
// Check access permissions
|
|
150
|
+
if (!this.securityManager.checkAccess(ac, 'delete', key)) {
|
|
151
|
+
throw new Error('Access denied: insufficient permissions to delete retry state');
|
|
152
|
+
}
|
|
153
|
+
// Check rate limiting
|
|
154
|
+
const rateLimitId = `${ac.userId || 'anonymous'}_delete`;
|
|
155
|
+
if (!this.securityManager.checkRateLimit(rateLimitId)) {
|
|
156
|
+
throw new Error('Rate limit exceeded for delete operations');
|
|
157
|
+
}
|
|
158
|
+
try {
|
|
159
|
+
// Delete the data
|
|
160
|
+
await this.storage.delete(key);
|
|
161
|
+
// Log successful operation
|
|
162
|
+
this.securityManager.logAudit({
|
|
163
|
+
userId: ac.userId,
|
|
164
|
+
userRole: ac.userRole,
|
|
165
|
+
action: 'delete',
|
|
166
|
+
resource: key,
|
|
167
|
+
success: true
|
|
168
|
+
});
|
|
169
|
+
}
|
|
170
|
+
catch (error) {
|
|
171
|
+
// Log failed operation
|
|
172
|
+
this.securityManager.logAudit({
|
|
173
|
+
userId: ac.userId,
|
|
174
|
+
userRole: ac.userRole,
|
|
175
|
+
action: 'delete',
|
|
176
|
+
resource: key,
|
|
177
|
+
success: false,
|
|
178
|
+
details: { error: error instanceof Error ? error.message : 'Unknown error' }
|
|
179
|
+
});
|
|
180
|
+
throw error;
|
|
181
|
+
}
|
|
182
|
+
}
|
|
183
|
+
/**
|
|
184
|
+
* List all retry states with access control
|
|
185
|
+
*/
|
|
186
|
+
async list(accessControl) {
|
|
187
|
+
const ac = accessControl || this.defaultAccessControl;
|
|
188
|
+
// Check access permissions
|
|
189
|
+
if (!this.securityManager.checkAccess(ac, 'read', 'all')) {
|
|
190
|
+
throw new Error('Access denied: insufficient permissions to list retry states');
|
|
191
|
+
}
|
|
192
|
+
// Check rate limiting
|
|
193
|
+
const rateLimitId = `${ac.userId || 'anonymous'}_list`;
|
|
194
|
+
if (!this.securityManager.checkRateLimit(rateLimitId)) {
|
|
195
|
+
throw new Error('Rate limit exceeded for list operations');
|
|
196
|
+
}
|
|
197
|
+
try {
|
|
198
|
+
// Get all stored data
|
|
199
|
+
const storedDataList = await this.storage.list();
|
|
200
|
+
const decryptedList = [];
|
|
201
|
+
// Process each item
|
|
202
|
+
for (const storedData of storedDataList) {
|
|
203
|
+
try {
|
|
204
|
+
if (this.isEncryptedData(storedData)) {
|
|
205
|
+
// Decrypt the data
|
|
206
|
+
const decryptedData = await this.securityManager.decryptData(storedData.data);
|
|
207
|
+
decryptedList.push(decryptedData);
|
|
208
|
+
}
|
|
209
|
+
else {
|
|
210
|
+
// Data is not encrypted
|
|
211
|
+
decryptedList.push(storedData);
|
|
212
|
+
}
|
|
213
|
+
}
|
|
214
|
+
catch (decryptError) {
|
|
215
|
+
// Log decryption error but continue with other items
|
|
216
|
+
this.securityManager.logAudit({
|
|
217
|
+
userId: ac.userId,
|
|
218
|
+
userRole: ac.userRole,
|
|
219
|
+
action: 'decrypt_error',
|
|
220
|
+
resource: 'list_operation',
|
|
221
|
+
success: false,
|
|
222
|
+
details: {
|
|
223
|
+
error: decryptError instanceof Error ? decryptError.message : 'Unknown error',
|
|
224
|
+
dataType: 'encrypted_retry_state'
|
|
225
|
+
}
|
|
226
|
+
});
|
|
227
|
+
}
|
|
228
|
+
}
|
|
229
|
+
// Log successful operation
|
|
230
|
+
this.securityManager.logAudit({
|
|
231
|
+
userId: ac.userId,
|
|
232
|
+
userRole: ac.userRole,
|
|
233
|
+
action: 'list',
|
|
234
|
+
resource: 'all',
|
|
235
|
+
success: true,
|
|
236
|
+
details: { count: decryptedList.length }
|
|
237
|
+
});
|
|
238
|
+
return decryptedList;
|
|
239
|
+
}
|
|
240
|
+
catch (error) {
|
|
241
|
+
// Log failed operation
|
|
242
|
+
this.securityManager.logAudit({
|
|
243
|
+
userId: ac.userId,
|
|
244
|
+
userRole: ac.userRole,
|
|
245
|
+
action: 'list',
|
|
246
|
+
resource: 'all',
|
|
247
|
+
success: false,
|
|
248
|
+
details: { error: error instanceof Error ? error.message : 'Unknown error' }
|
|
249
|
+
});
|
|
250
|
+
throw error;
|
|
251
|
+
}
|
|
252
|
+
}
|
|
253
|
+
/**
|
|
254
|
+
* Clear all retry states with access control
|
|
255
|
+
*/
|
|
256
|
+
async clear(accessControl) {
|
|
257
|
+
const ac = accessControl || this.defaultAccessControl;
|
|
258
|
+
// Check access permissions
|
|
259
|
+
if (!this.securityManager.checkAccess(ac, 'clear', 'all')) {
|
|
260
|
+
throw new Error('Access denied: insufficient permissions to clear all retry states');
|
|
261
|
+
}
|
|
262
|
+
// Check rate limiting
|
|
263
|
+
const rateLimitId = `${ac.userId || 'anonymous'}_clear`;
|
|
264
|
+
if (!this.securityManager.checkRateLimit(rateLimitId)) {
|
|
265
|
+
throw new Error('Rate limit exceeded for clear operations');
|
|
266
|
+
}
|
|
267
|
+
try {
|
|
268
|
+
// Clear all data
|
|
269
|
+
await this.storage.clear();
|
|
270
|
+
// Log successful operation
|
|
271
|
+
this.securityManager.logAudit({
|
|
272
|
+
userId: ac.userId,
|
|
273
|
+
userRole: ac.userRole,
|
|
274
|
+
action: 'clear',
|
|
275
|
+
resource: 'all',
|
|
276
|
+
success: true,
|
|
277
|
+
details: { operation: 'clear_all_retry_states' }
|
|
278
|
+
});
|
|
279
|
+
}
|
|
280
|
+
catch (error) {
|
|
281
|
+
// Log failed operation
|
|
282
|
+
this.securityManager.logAudit({
|
|
283
|
+
userId: ac.userId,
|
|
284
|
+
userRole: ac.userRole,
|
|
285
|
+
action: 'clear',
|
|
286
|
+
resource: 'all',
|
|
287
|
+
success: false,
|
|
288
|
+
details: { error: error instanceof Error ? error.message : 'Unknown error' }
|
|
289
|
+
});
|
|
290
|
+
throw error;
|
|
291
|
+
}
|
|
292
|
+
}
|
|
293
|
+
/**
|
|
294
|
+
* Get storage statistics with access control
|
|
295
|
+
*/
|
|
296
|
+
async getStats(accessControl) {
|
|
297
|
+
const ac = accessControl || this.defaultAccessControl;
|
|
298
|
+
// Check access permissions
|
|
299
|
+
if (!this.securityManager.checkAccess(ac, 'read', 'stats')) {
|
|
300
|
+
throw new Error('Access denied: insufficient permissions to read storage statistics');
|
|
301
|
+
}
|
|
302
|
+
try {
|
|
303
|
+
// Get storage statistics
|
|
304
|
+
const stats = await this.storage.getStats();
|
|
305
|
+
// Log successful operation
|
|
306
|
+
this.securityManager.logAudit({
|
|
307
|
+
userId: ac.userId,
|
|
308
|
+
userRole: ac.userRole,
|
|
309
|
+
action: 'read_stats',
|
|
310
|
+
resource: 'storage',
|
|
311
|
+
success: true,
|
|
312
|
+
details: {
|
|
313
|
+
totalKeys: stats.totalKeys,
|
|
314
|
+
totalSize: stats.totalSize
|
|
315
|
+
}
|
|
316
|
+
});
|
|
317
|
+
return stats;
|
|
318
|
+
}
|
|
319
|
+
catch (error) {
|
|
320
|
+
// Log failed operation
|
|
321
|
+
this.securityManager.logAudit({
|
|
322
|
+
userId: ac.userId,
|
|
323
|
+
userRole: ac.userRole,
|
|
324
|
+
action: 'read_stats',
|
|
325
|
+
resource: 'storage',
|
|
326
|
+
success: false,
|
|
327
|
+
details: { error: error instanceof Error ? error.message : 'Unknown error' }
|
|
328
|
+
});
|
|
329
|
+
throw error;
|
|
330
|
+
}
|
|
331
|
+
}
|
|
332
|
+
/**
|
|
333
|
+
* Test connection with access control
|
|
334
|
+
*/
|
|
335
|
+
async testConnection(accessControl) {
|
|
336
|
+
const ac = accessControl || this.defaultAccessControl;
|
|
337
|
+
// Check access permissions
|
|
338
|
+
if (!this.securityManager.checkAccess(ac, 'read', 'connection')) {
|
|
339
|
+
throw new Error('Access denied: insufficient permissions to test connection');
|
|
340
|
+
}
|
|
341
|
+
try {
|
|
342
|
+
// Test connection
|
|
343
|
+
const result = await this.storage.testConnection();
|
|
344
|
+
// Log successful operation
|
|
345
|
+
this.securityManager.logAudit({
|
|
346
|
+
userId: ac.userId,
|
|
347
|
+
userRole: ac.userRole,
|
|
348
|
+
action: 'test_connection',
|
|
349
|
+
resource: 'storage',
|
|
350
|
+
success: true,
|
|
351
|
+
details: { result }
|
|
352
|
+
});
|
|
353
|
+
return result;
|
|
354
|
+
}
|
|
355
|
+
catch (error) {
|
|
356
|
+
// Log failed operation
|
|
357
|
+
this.securityManager.logAudit({
|
|
358
|
+
userId: ac.userId,
|
|
359
|
+
userRole: ac.userRole,
|
|
360
|
+
action: 'test_connection',
|
|
361
|
+
resource: 'storage',
|
|
362
|
+
success: false,
|
|
363
|
+
details: { error: error instanceof Error ? error.message : 'Unknown error' }
|
|
364
|
+
});
|
|
365
|
+
throw error;
|
|
366
|
+
}
|
|
367
|
+
}
|
|
368
|
+
/**
|
|
369
|
+
* Close connection
|
|
370
|
+
*/
|
|
371
|
+
async close() {
|
|
372
|
+
try {
|
|
373
|
+
await this.storage.close();
|
|
374
|
+
// Log successful operation
|
|
375
|
+
this.securityManager.logAudit({
|
|
376
|
+
action: 'close_connection',
|
|
377
|
+
resource: 'storage',
|
|
378
|
+
success: true
|
|
379
|
+
});
|
|
380
|
+
}
|
|
381
|
+
catch (error) {
|
|
382
|
+
// Log failed operation
|
|
383
|
+
this.securityManager.logAudit({
|
|
384
|
+
action: 'close_connection',
|
|
385
|
+
resource: 'storage',
|
|
386
|
+
success: false,
|
|
387
|
+
details: { error: error instanceof Error ? error.message : 'Unknown error' }
|
|
388
|
+
});
|
|
389
|
+
throw error;
|
|
390
|
+
}
|
|
391
|
+
}
|
|
392
|
+
/**
|
|
393
|
+
* Get security manager instance
|
|
394
|
+
*/
|
|
395
|
+
getSecurityManager() {
|
|
396
|
+
return this.securityManager;
|
|
397
|
+
}
|
|
398
|
+
/**
|
|
399
|
+
* Update default access control
|
|
400
|
+
*/
|
|
401
|
+
setDefaultAccessControl(accessControl) {
|
|
402
|
+
this.defaultAccessControl = accessControl;
|
|
403
|
+
}
|
|
404
|
+
/**
|
|
405
|
+
* Get security status
|
|
406
|
+
*/
|
|
407
|
+
getSecurityStatus() {
|
|
408
|
+
return this.securityManager.getSecurityStatus();
|
|
409
|
+
}
|
|
410
|
+
/**
|
|
411
|
+
* Type guard to check if data is encrypted
|
|
412
|
+
*/
|
|
413
|
+
isEncryptedData(data) {
|
|
414
|
+
return 'encrypted' in data && data.encrypted === true && 'data' in data;
|
|
415
|
+
}
|
|
416
|
+
}
|
|
417
|
+
exports.SecureStorage = SecureStorage;
|
|
418
|
+
//# sourceMappingURL=secure-storage.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"secure-storage.js","sourceRoot":"","sources":["../../src/security/secure-storage.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,172 @@
|
|
|
1
|
+
import { EventEmitter } from 'events';
|
|
2
|
+
/**
|
|
3
|
+
* Security configuration interface
|
|
4
|
+
*/
|
|
5
|
+
export interface SecurityConfig {
|
|
6
|
+
encryption?: {
|
|
7
|
+
enabled: boolean;
|
|
8
|
+
algorithm?: 'AES-256-CBC' | 'AES-256-GCM';
|
|
9
|
+
key?: string;
|
|
10
|
+
keyEnvVar?: string;
|
|
11
|
+
};
|
|
12
|
+
accessControl?: {
|
|
13
|
+
enabled: boolean;
|
|
14
|
+
roles?: string[];
|
|
15
|
+
permissions?: Record<string, string[]>;
|
|
16
|
+
defaultRole?: string;
|
|
17
|
+
};
|
|
18
|
+
auditLogging?: {
|
|
19
|
+
enabled: boolean;
|
|
20
|
+
level?: 'basic' | 'detailed' | 'verbose';
|
|
21
|
+
includeSensitiveData?: boolean;
|
|
22
|
+
maxLogSize?: number;
|
|
23
|
+
};
|
|
24
|
+
rateLimiting?: {
|
|
25
|
+
enabled: boolean;
|
|
26
|
+
maxRequestsPerMinute?: number;
|
|
27
|
+
maxRequestsPerHour?: number;
|
|
28
|
+
windowMs?: number;
|
|
29
|
+
};
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* Default security configuration
|
|
33
|
+
*/
|
|
34
|
+
export declare const DEFAULT_SECURITY_CONFIG: SecurityConfig;
|
|
35
|
+
/**
|
|
36
|
+
* Audit log entry interface
|
|
37
|
+
*/
|
|
38
|
+
export interface AuditLogEntry {
|
|
39
|
+
id: string;
|
|
40
|
+
timestamp: Date;
|
|
41
|
+
userId?: string;
|
|
42
|
+
userRole?: string;
|
|
43
|
+
action: string;
|
|
44
|
+
resource: string;
|
|
45
|
+
success: boolean;
|
|
46
|
+
details?: Record<string, any>;
|
|
47
|
+
ipAddress?: string;
|
|
48
|
+
userAgent?: string;
|
|
49
|
+
}
|
|
50
|
+
/**
|
|
51
|
+
* Access control interface
|
|
52
|
+
*/
|
|
53
|
+
export interface AccessControl {
|
|
54
|
+
userId?: string;
|
|
55
|
+
userRole: string;
|
|
56
|
+
permissions: string[];
|
|
57
|
+
ipAddress?: string;
|
|
58
|
+
userAgent?: string;
|
|
59
|
+
}
|
|
60
|
+
/**
|
|
61
|
+
* Rate limiting interface
|
|
62
|
+
*/
|
|
63
|
+
export interface RateLimitInfo {
|
|
64
|
+
userId?: string;
|
|
65
|
+
ipAddress?: string;
|
|
66
|
+
requests: number;
|
|
67
|
+
windowStart: Date;
|
|
68
|
+
limit: number;
|
|
69
|
+
}
|
|
70
|
+
/**
|
|
71
|
+
* Security Manager for handling encryption, access control, and audit logging
|
|
72
|
+
*/
|
|
73
|
+
export declare class SecurityManager extends EventEmitter {
|
|
74
|
+
private config;
|
|
75
|
+
private auditLog;
|
|
76
|
+
private rateLimitStore;
|
|
77
|
+
private encryptionKey;
|
|
78
|
+
constructor(config?: Partial<SecurityConfig>);
|
|
79
|
+
/**
|
|
80
|
+
* Validate encryption configuration synchronously
|
|
81
|
+
*/
|
|
82
|
+
private validateEncryptionConfig;
|
|
83
|
+
/**
|
|
84
|
+
* Initialize security features
|
|
85
|
+
*/
|
|
86
|
+
private initializeSecurity;
|
|
87
|
+
/**
|
|
88
|
+
* Initialize encryption
|
|
89
|
+
*/
|
|
90
|
+
private initializeEncryption;
|
|
91
|
+
/**
|
|
92
|
+
* Encrypt retry state data
|
|
93
|
+
*/
|
|
94
|
+
encryptData(data: any): Promise<string>;
|
|
95
|
+
/**
|
|
96
|
+
* Decrypt retry state data
|
|
97
|
+
*/
|
|
98
|
+
decryptData(encryptedData: string): Promise<any>;
|
|
99
|
+
/**
|
|
100
|
+
* Check access permissions
|
|
101
|
+
*/
|
|
102
|
+
checkAccess(accessControl: AccessControl, action: string, resource: string): boolean;
|
|
103
|
+
/**
|
|
104
|
+
* Check rate limiting
|
|
105
|
+
*/
|
|
106
|
+
checkRateLimit(identifier: string, limit?: number): boolean;
|
|
107
|
+
/**
|
|
108
|
+
* Log audit entry
|
|
109
|
+
*/
|
|
110
|
+
logAudit(entry: Omit<AuditLogEntry, 'id' | 'timestamp'>): void;
|
|
111
|
+
/**
|
|
112
|
+
* Get audit log entries
|
|
113
|
+
*/
|
|
114
|
+
getAuditLog(limit?: number, offset?: number): AuditLogEntry[];
|
|
115
|
+
/**
|
|
116
|
+
* Get audit log entries by user
|
|
117
|
+
*/
|
|
118
|
+
getAuditLogByUser(userId: string, limit?: number): AuditLogEntry[];
|
|
119
|
+
/**
|
|
120
|
+
* Get audit log entries by action
|
|
121
|
+
*/
|
|
122
|
+
getAuditLogByAction(action: string, limit?: number): AuditLogEntry[];
|
|
123
|
+
/**
|
|
124
|
+
* Get audit statistics
|
|
125
|
+
*/
|
|
126
|
+
getAuditStats(): Record<string, any>;
|
|
127
|
+
/**
|
|
128
|
+
* Clear audit log
|
|
129
|
+
*/
|
|
130
|
+
clearAuditLog(): void;
|
|
131
|
+
/**
|
|
132
|
+
* Get rate limit information
|
|
133
|
+
*/
|
|
134
|
+
getRateLimitInfo(identifier: string): RateLimitInfo | null;
|
|
135
|
+
/**
|
|
136
|
+
* Reset rate limit for an identifier
|
|
137
|
+
*/
|
|
138
|
+
resetRateLimit(identifier: string): void;
|
|
139
|
+
/**
|
|
140
|
+
* Get security configuration
|
|
141
|
+
*/
|
|
142
|
+
getConfig(): SecurityConfig;
|
|
143
|
+
/**
|
|
144
|
+
* Update security configuration
|
|
145
|
+
*/
|
|
146
|
+
updateConfig(newConfig: Partial<SecurityConfig>): void;
|
|
147
|
+
/**
|
|
148
|
+
* Check if encryption is enabled
|
|
149
|
+
*/
|
|
150
|
+
isEncryptionEnabled(): boolean;
|
|
151
|
+
/**
|
|
152
|
+
* Check if access control is enabled
|
|
153
|
+
*/
|
|
154
|
+
isAccessControlEnabled(): boolean;
|
|
155
|
+
/**
|
|
156
|
+
* Check if audit logging is enabled
|
|
157
|
+
*/
|
|
158
|
+
isAuditLoggingEnabled(): boolean;
|
|
159
|
+
/**
|
|
160
|
+
* Check if rate limiting is enabled
|
|
161
|
+
*/
|
|
162
|
+
isRateLimitingEnabled(): boolean;
|
|
163
|
+
/**
|
|
164
|
+
* Generate unique ID for audit entries
|
|
165
|
+
*/
|
|
166
|
+
private generateId;
|
|
167
|
+
/**
|
|
168
|
+
* Get security status
|
|
169
|
+
*/
|
|
170
|
+
getSecurityStatus(): Record<string, any>;
|
|
171
|
+
}
|
|
172
|
+
//# sourceMappingURL=security-manager.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"security-manager.d.ts","sourceRoot":"","sources":["../../src/security/security-manager.ts"],"names":[],"mappings":"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"}
|