@dimzxzzx07/file-watcher 1.0.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/.env +13 -0
- package/.eslintrc.json +128 -0
- package/.prettierrc +18 -0
- package/Dimzxzzx07.png +0 -0
- package/README.md +1024 -0
- package/dist/core/BackupManager.d.ts +25 -0
- package/dist/core/BackupManager.d.ts.map +1 -0
- package/dist/core/BackupManager.js +290 -0
- package/dist/core/BackupManager.js.map +1 -0
- package/dist/core/IntegrityValidator.d.ts +18 -0
- package/dist/core/IntegrityValidator.d.ts.map +1 -0
- package/dist/core/IntegrityValidator.js +212 -0
- package/dist/core/IntegrityValidator.js.map +1 -0
- package/dist/core/SecurityManager.d.ts +40 -0
- package/dist/core/SecurityManager.d.ts.map +1 -0
- package/dist/core/SecurityManager.js +320 -0
- package/dist/core/SecurityManager.js.map +1 -0
- package/dist/core/WatcherEngine.d.ts +44 -0
- package/dist/core/WatcherEngine.d.ts.map +1 -0
- package/dist/core/WatcherEngine.js +470 -0
- package/dist/core/WatcherEngine.js.map +1 -0
- package/dist/crypto/HashGenerator.d.ts +26 -0
- package/dist/crypto/HashGenerator.d.ts.map +1 -0
- package/dist/crypto/HashGenerator.js +220 -0
- package/dist/crypto/HashGenerator.js.map +1 -0
- package/dist/crypto/KeyManager.d.ts +30 -0
- package/dist/crypto/KeyManager.d.ts.map +1 -0
- package/dist/crypto/KeyManager.js +235 -0
- package/dist/crypto/KeyManager.js.map +1 -0
- package/dist/crypto/SignatureValidator.d.ts +11 -0
- package/dist/crypto/SignatureValidator.d.ts.map +1 -0
- package/dist/crypto/SignatureValidator.js +102 -0
- package/dist/crypto/SignatureValidator.js.map +1 -0
- package/dist/detectors/AnomalyDetector.d.ts +24 -0
- package/dist/detectors/AnomalyDetector.d.ts.map +1 -0
- package/dist/detectors/AnomalyDetector.js +209 -0
- package/dist/detectors/AnomalyDetector.js.map +1 -0
- package/dist/detectors/InjectionDetector.d.ts +14 -0
- package/dist/detectors/InjectionDetector.d.ts.map +1 -0
- package/dist/detectors/InjectionDetector.js +204 -0
- package/dist/detectors/InjectionDetector.js.map +1 -0
- package/dist/detectors/PatternMatcher.d.ts +28 -0
- package/dist/detectors/PatternMatcher.d.ts.map +1 -0
- package/dist/detectors/PatternMatcher.js +283 -0
- package/dist/detectors/PatternMatcher.js.map +1 -0
- package/dist/guards/FileGuard.d.ts +35 -0
- package/dist/guards/FileGuard.d.ts.map +1 -0
- package/dist/guards/FileGuard.js +357 -0
- package/dist/guards/FileGuard.js.map +1 -0
- package/dist/guards/MemoryGuard.d.ts +28 -0
- package/dist/guards/MemoryGuard.d.ts.map +1 -0
- package/dist/guards/MemoryGuard.js +256 -0
- package/dist/guards/MemoryGuard.js.map +1 -0
- package/dist/guards/ProcessGuard.d.ts +25 -0
- package/dist/guards/ProcessGuard.d.ts.map +1 -0
- package/dist/guards/ProcessGuard.js +221 -0
- package/dist/guards/ProcessGuard.js.map +1 -0
- package/dist/index.d.ts +19 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +186 -0
- package/dist/index.js.map +1 -0
- package/dist/types/index.d.ts +69 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/index.js +3 -0
- package/dist/types/index.js.map +1 -0
- package/dist/utils/Constants.d.ts +407 -0
- package/dist/utils/Constants.d.ts.map +1 -0
- package/dist/utils/Constants.js +505 -0
- package/dist/utils/Constants.js.map +1 -0
- package/dist/utils/Logger.d.ts +45 -0
- package/dist/utils/Logger.d.ts.map +1 -0
- package/dist/utils/Logger.js +285 -0
- package/dist/utils/Logger.js.map +1 -0
- package/dist/utils/Validator.d.ts +27 -0
- package/dist/utils/Validator.d.ts.map +1 -0
- package/dist/utils/Validator.js +245 -0
- package/dist/utils/Validator.js.map +1 -0
- package/favicon.png +0 -0
- package/jest.config.js +69 -0
- package/package.json +69 -0
- package/src/core/BackupManager.ts +305 -0
- package/src/core/IntegrityValidator.ts +200 -0
- package/src/core/SecurityManager.ts +348 -0
- package/src/core/WatcherEngine.ts +537 -0
- package/src/crypto/HashGenerator.ts +234 -0
- package/src/crypto/KeyManager.ts +249 -0
- package/src/crypto/SignatureValidator.ts +76 -0
- package/src/detectors/AnomalyDetector.ts +247 -0
- package/src/detectors/InjectionDetector.ts +233 -0
- package/src/detectors/PatternMatcher.ts +319 -0
- package/src/guards/FileGuard.ts +385 -0
- package/src/guards/MemoryGuard.ts +263 -0
- package/src/guards/ProcessGuard.ts +219 -0
- package/src/index.ts +189 -0
- package/src/types/index.ts +72 -0
- package/src/utils/Constants.ts +532 -0
- package/src/utils/Logger.ts +279 -0
- package/src/utils/Validator.ts +248 -0
- package/tests/setup.ts +80 -0
- package/tsconfig.json +42 -0
|
@@ -0,0 +1,256 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
+
var ownKeys = function(o) {
|
|
20
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
+
var ar = [];
|
|
22
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
+
return ar;
|
|
24
|
+
};
|
|
25
|
+
return ownKeys(o);
|
|
26
|
+
};
|
|
27
|
+
return function (mod) {
|
|
28
|
+
if (mod && mod.__esModule) return mod;
|
|
29
|
+
var result = {};
|
|
30
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
+
__setModuleDefault(result, mod);
|
|
32
|
+
return result;
|
|
33
|
+
};
|
|
34
|
+
})();
|
|
35
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
|
+
exports.MemoryGuard = void 0;
|
|
37
|
+
const crypto = __importStar(require("crypto"));
|
|
38
|
+
const v8 = __importStar(require("v8"));
|
|
39
|
+
const Logger_1 = require("../utils/Logger");
|
|
40
|
+
class MemoryGuard {
|
|
41
|
+
static instance;
|
|
42
|
+
logger;
|
|
43
|
+
memorySnapshots;
|
|
44
|
+
secureHeap;
|
|
45
|
+
isCompromised = false;
|
|
46
|
+
encryptionKey;
|
|
47
|
+
constructor() {
|
|
48
|
+
this.logger = Logger_1.Logger.getInstance();
|
|
49
|
+
this.memorySnapshots = new Map();
|
|
50
|
+
this.secureHeap = new Map();
|
|
51
|
+
this.encryptionKey = crypto.randomBytes(32);
|
|
52
|
+
this.initializeSecureHeap();
|
|
53
|
+
this.startMemoryMonitoring();
|
|
54
|
+
}
|
|
55
|
+
static getInstance() {
|
|
56
|
+
if (!MemoryGuard.instance) {
|
|
57
|
+
MemoryGuard.instance = new MemoryGuard();
|
|
58
|
+
}
|
|
59
|
+
return MemoryGuard.instance;
|
|
60
|
+
}
|
|
61
|
+
initializeSecureHeap() {
|
|
62
|
+
const secureSize = 64 * 1024 * 1024;
|
|
63
|
+
const secureBuffer = Buffer.alloc(secureSize);
|
|
64
|
+
crypto.randomFillSync(secureBuffer);
|
|
65
|
+
this.secureHeap.set('secure_region', secureBuffer);
|
|
66
|
+
this.lockMemory(secureBuffer);
|
|
67
|
+
}
|
|
68
|
+
lockMemory(buffer) {
|
|
69
|
+
try {
|
|
70
|
+
if (process.platform === 'linux') {
|
|
71
|
+
const mlock = require('mlock');
|
|
72
|
+
mlock(buffer);
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
catch (error) {
|
|
76
|
+
this.logger.warning('Failed to lock memory', { error });
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
startMemoryMonitoring() {
|
|
80
|
+
this.takeMemorySnapshot('baseline');
|
|
81
|
+
setInterval(() => {
|
|
82
|
+
this.checkMemoryIntegrity();
|
|
83
|
+
}, 30000);
|
|
84
|
+
}
|
|
85
|
+
takeMemorySnapshot(name) {
|
|
86
|
+
try {
|
|
87
|
+
const snapshot = v8.getHeapSnapshot();
|
|
88
|
+
const chunks = [];
|
|
89
|
+
snapshot.on('data', (chunk) => chunks.push(chunk));
|
|
90
|
+
snapshot.on('end', () => {
|
|
91
|
+
const fullSnapshot = Buffer.concat(chunks);
|
|
92
|
+
const encrypted = this.encryptSnapshot(fullSnapshot);
|
|
93
|
+
this.memorySnapshots.set(name, encrypted);
|
|
94
|
+
if (this.memorySnapshots.size > 5) {
|
|
95
|
+
const oldest = Array.from(this.memorySnapshots.keys())[0];
|
|
96
|
+
if (oldest) {
|
|
97
|
+
this.memorySnapshots.delete(oldest);
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
});
|
|
101
|
+
snapshot.on('error', (error) => {
|
|
102
|
+
this.logger.error('Failed to take memory snapshot', { error });
|
|
103
|
+
});
|
|
104
|
+
}
|
|
105
|
+
catch (error) {
|
|
106
|
+
this.logger.error('Error taking memory snapshot', { error });
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
encryptSnapshot(snapshot) {
|
|
110
|
+
const iv = crypto.randomBytes(16);
|
|
111
|
+
const cipher = crypto.createCipheriv('aes-256-gcm', this.encryptionKey, iv);
|
|
112
|
+
const encrypted = Buffer.concat([
|
|
113
|
+
cipher.update(snapshot),
|
|
114
|
+
cipher.final()
|
|
115
|
+
]);
|
|
116
|
+
const authTag = cipher.getAuthTag();
|
|
117
|
+
return Buffer.concat([iv, authTag, encrypted]);
|
|
118
|
+
}
|
|
119
|
+
checkMemoryIntegrity() {
|
|
120
|
+
const currentMemory = process.memoryUsage();
|
|
121
|
+
this.checkHeapAnomalies(currentMemory);
|
|
122
|
+
this.checkStackIntegrity();
|
|
123
|
+
this.checkSecureHeap();
|
|
124
|
+
this.checkForDebugger();
|
|
125
|
+
}
|
|
126
|
+
checkHeapAnomalies(memory) {
|
|
127
|
+
const heapUsed = memory.heapUsed;
|
|
128
|
+
const heapTotal = memory.heapTotal;
|
|
129
|
+
const ratio = heapUsed / heapTotal;
|
|
130
|
+
if (ratio > 0.95) {
|
|
131
|
+
this.logger.warning('Critical heap usage detected', {
|
|
132
|
+
used: heapUsed,
|
|
133
|
+
total: heapTotal,
|
|
134
|
+
ratio
|
|
135
|
+
});
|
|
136
|
+
}
|
|
137
|
+
}
|
|
138
|
+
checkStackIntegrity() {
|
|
139
|
+
try {
|
|
140
|
+
const stack = new Error().stack;
|
|
141
|
+
if (!stack) {
|
|
142
|
+
this.logger.warning('Stack trace unavailable');
|
|
143
|
+
return;
|
|
144
|
+
}
|
|
145
|
+
const frames = stack.split('\n');
|
|
146
|
+
const hasEval = frames.some(frame => frame.includes('eval'));
|
|
147
|
+
if (hasEval) {
|
|
148
|
+
this.logger.warning('Eval detected in stack trace');
|
|
149
|
+
}
|
|
150
|
+
if (frames.length > 100) {
|
|
151
|
+
this.logger.warning('Excessive stack depth', { depth: frames.length });
|
|
152
|
+
}
|
|
153
|
+
}
|
|
154
|
+
catch (error) {
|
|
155
|
+
this.logger.error('Stack integrity check failed', { error });
|
|
156
|
+
}
|
|
157
|
+
}
|
|
158
|
+
checkSecureHeap() {
|
|
159
|
+
const secureRegion = this.secureHeap.get('secure_region');
|
|
160
|
+
if (!secureRegion) {
|
|
161
|
+
this.logger.critical('Secure heap region missing!');
|
|
162
|
+
this.terminateCompromised();
|
|
163
|
+
return;
|
|
164
|
+
}
|
|
165
|
+
const checksum = this.calculateChecksum(secureRegion);
|
|
166
|
+
const storedChecksum = this.secureHeap.get('secure_checksum')?.toString();
|
|
167
|
+
if (storedChecksum && checksum !== storedChecksum) {
|
|
168
|
+
this.logger.critical('Secure heap tampering detected!');
|
|
169
|
+
this.terminateCompromised();
|
|
170
|
+
}
|
|
171
|
+
else {
|
|
172
|
+
this.secureHeap.set('secure_checksum', Buffer.from(checksum));
|
|
173
|
+
}
|
|
174
|
+
}
|
|
175
|
+
checkForDebugger() {
|
|
176
|
+
const debugIndicators = [
|
|
177
|
+
process.execArgv.some(arg => arg.includes('--inspect')),
|
|
178
|
+
process.execArgv.some(arg => arg.includes('--debug')),
|
|
179
|
+
process.env.NODE_OPTIONS?.includes('--inspect'),
|
|
180
|
+
process.env.NODE_OPTIONS?.includes('--debug'),
|
|
181
|
+
process.argv.some(arg => arg.includes('--inspect')),
|
|
182
|
+
process.argv.some(arg => arg.includes('--debug'))
|
|
183
|
+
];
|
|
184
|
+
if (debugIndicators.some(Boolean)) {
|
|
185
|
+
this.logger.warning('Debugger detected in memory check');
|
|
186
|
+
}
|
|
187
|
+
}
|
|
188
|
+
protectSensitiveData(data) {
|
|
189
|
+
const id = crypto.randomBytes(16).toString('hex');
|
|
190
|
+
const iv = crypto.randomBytes(16);
|
|
191
|
+
const cipher = crypto.createCipheriv('aes-256-gcm', this.encryptionKey, iv);
|
|
192
|
+
const encrypted = Buffer.concat([cipher.update(data), cipher.final()]);
|
|
193
|
+
const authTag = cipher.getAuthTag();
|
|
194
|
+
const protectedData = Buffer.concat([iv, authTag, encrypted]);
|
|
195
|
+
this.secureHeap.set(id, protectedData);
|
|
196
|
+
return Buffer.from(id);
|
|
197
|
+
}
|
|
198
|
+
retrieveSensitiveData(id) {
|
|
199
|
+
const protectedData = this.secureHeap.get(id.toString());
|
|
200
|
+
if (!protectedData)
|
|
201
|
+
return null;
|
|
202
|
+
const iv = protectedData.subarray(0, 16);
|
|
203
|
+
const authTag = protectedData.subarray(16, 32);
|
|
204
|
+
const encrypted = protectedData.subarray(32);
|
|
205
|
+
try {
|
|
206
|
+
const decipher = crypto.createDecipheriv('aes-256-gcm', this.encryptionKey, iv);
|
|
207
|
+
decipher.setAuthTag(authTag);
|
|
208
|
+
return Buffer.concat([
|
|
209
|
+
decipher.update(encrypted),
|
|
210
|
+
decipher.final()
|
|
211
|
+
]);
|
|
212
|
+
}
|
|
213
|
+
catch {
|
|
214
|
+
return null;
|
|
215
|
+
}
|
|
216
|
+
}
|
|
217
|
+
wipeSensitiveData(id) {
|
|
218
|
+
const key = id.toString();
|
|
219
|
+
const data = this.secureHeap.get(key);
|
|
220
|
+
if (data) {
|
|
221
|
+
crypto.randomFillSync(data);
|
|
222
|
+
this.secureHeap.delete(key);
|
|
223
|
+
}
|
|
224
|
+
}
|
|
225
|
+
forceGarbageCollection() {
|
|
226
|
+
if (global.gc) {
|
|
227
|
+
global.gc();
|
|
228
|
+
this.logger.debug('Garbage collection forced');
|
|
229
|
+
}
|
|
230
|
+
}
|
|
231
|
+
calculateChecksum(data) {
|
|
232
|
+
return crypto.createHash('sha256')
|
|
233
|
+
.update(data)
|
|
234
|
+
.digest('hex');
|
|
235
|
+
}
|
|
236
|
+
terminateCompromised() {
|
|
237
|
+
if (this.isCompromised)
|
|
238
|
+
return;
|
|
239
|
+
this.isCompromised = true;
|
|
240
|
+
this.logger.emergency('Memory compromised - terminating process');
|
|
241
|
+
this.secureHeap.clear();
|
|
242
|
+
this.forceGarbageCollection();
|
|
243
|
+
process.kill(process.pid, 'SIGKILL');
|
|
244
|
+
}
|
|
245
|
+
getStatus() {
|
|
246
|
+
return {
|
|
247
|
+
isCompromised: this.isCompromised,
|
|
248
|
+
secureHeapSize: this.secureHeap.size,
|
|
249
|
+
snapshotsCount: this.memorySnapshots.size,
|
|
250
|
+
memoryUsage: process.memoryUsage(),
|
|
251
|
+
heapStats: v8.getHeapStatistics()
|
|
252
|
+
};
|
|
253
|
+
}
|
|
254
|
+
}
|
|
255
|
+
exports.MemoryGuard = MemoryGuard;
|
|
256
|
+
//# sourceMappingURL=MemoryGuard.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"MemoryGuard.js","sourceRoot":"","sources":["../../src/guards/MemoryGuard.ts"],"names":[],"mappings":"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","sourcesContent":["import * as crypto from 'crypto';\nimport * as v8 from 'v8';\nimport { Logger } from '../utils/Logger';\n\nexport class MemoryGuard {\n private static instance: MemoryGuard;\n private readonly logger: Logger;\n private readonly memorySnapshots: Map<string, Buffer>;\n private readonly secureHeap: Map<string, Buffer>;\n private isCompromised: boolean = false;\n private readonly encryptionKey: Buffer;\n\n private constructor() {\n this.logger = Logger.getInstance();\n this.memorySnapshots = new Map();\n this.secureHeap = new Map();\n this.encryptionKey = crypto.randomBytes(32);\n \n this.initializeSecureHeap();\n this.startMemoryMonitoring();\n }\n\n public static getInstance(): MemoryGuard {\n if (!MemoryGuard.instance) {\n MemoryGuard.instance = new MemoryGuard();\n }\n return MemoryGuard.instance;\n }\n\n private initializeSecureHeap(): void {\n const secureSize = 64 * 1024 * 1024;\n const secureBuffer = Buffer.alloc(secureSize);\n \n crypto.randomFillSync(secureBuffer);\n \n this.secureHeap.set('secure_region', secureBuffer);\n \n this.lockMemory(secureBuffer);\n }\n\n private lockMemory(buffer: Buffer): void {\n try {\n if (process.platform === 'linux') {\n const mlock = require('mlock');\n mlock(buffer);\n }\n } catch (error) {\n this.logger.warning('Failed to lock memory', { error });\n }\n }\n\n private startMemoryMonitoring(): void {\n this.takeMemorySnapshot('baseline');\n \n setInterval(() => {\n this.checkMemoryIntegrity();\n }, 30000);\n }\n\n public takeMemorySnapshot(name: string): void {\n try {\n const snapshot = v8.getHeapSnapshot();\n const chunks: Buffer[] = [];\n \n snapshot.on('data', (chunk) => chunks.push(chunk));\n snapshot.on('end', () => {\n const fullSnapshot = Buffer.concat(chunks);\n \n const encrypted = this.encryptSnapshot(fullSnapshot);\n this.memorySnapshots.set(name, encrypted);\n \n if (this.memorySnapshots.size > 5) {\n const oldest = Array.from(this.memorySnapshots.keys())[0];\n if (oldest) {\n this.memorySnapshots.delete(oldest);\n }\n }\n });\n \n snapshot.on('error', (error) => {\n this.logger.error('Failed to take memory snapshot', { error });\n });\n } catch (error) {\n this.logger.error('Error taking memory snapshot', { error });\n }\n }\n\n private encryptSnapshot(snapshot: Buffer): Buffer {\n const iv = crypto.randomBytes(16);\n const cipher = crypto.createCipheriv('aes-256-gcm', this.encryptionKey, iv);\n \n const encrypted = Buffer.concat([\n cipher.update(snapshot),\n cipher.final()\n ]);\n \n const authTag = cipher.getAuthTag();\n \n return Buffer.concat([iv, authTag, encrypted]);\n }\n\n private checkMemoryIntegrity(): void {\n const currentMemory = process.memoryUsage();\n \n this.checkHeapAnomalies(currentMemory);\n this.checkStackIntegrity();\n this.checkSecureHeap();\n this.checkForDebugger();\n }\n\n private checkHeapAnomalies(memory: NodeJS.MemoryUsage): void {\n const heapUsed = memory.heapUsed;\n const heapTotal = memory.heapTotal;\n const ratio = heapUsed / heapTotal;\n\n if (ratio > 0.95) {\n this.logger.warning('Critical heap usage detected', {\n used: heapUsed,\n total: heapTotal,\n ratio\n });\n }\n }\n\n private checkStackIntegrity(): void {\n try {\n const stack = new Error().stack;\n \n if (!stack) {\n this.logger.warning('Stack trace unavailable');\n return;\n }\n\n const frames = stack.split('\\n');\n \n const hasEval = frames.some(frame => frame.includes('eval'));\n if (hasEval) {\n this.logger.warning('Eval detected in stack trace');\n }\n\n if (frames.length > 100) {\n this.logger.warning('Excessive stack depth', { depth: frames.length });\n }\n } catch (error) {\n this.logger.error('Stack integrity check failed', { error });\n }\n }\n\n private checkSecureHeap(): void {\n const secureRegion = this.secureHeap.get('secure_region');\n if (!secureRegion) {\n this.logger.critical('Secure heap region missing!');\n this.terminateCompromised();\n return;\n }\n\n const checksum = this.calculateChecksum(secureRegion);\n const storedChecksum = this.secureHeap.get('secure_checksum')?.toString();\n \n if (storedChecksum && checksum !== storedChecksum) {\n this.logger.critical('Secure heap tampering detected!');\n this.terminateCompromised();\n } else {\n this.secureHeap.set('secure_checksum', Buffer.from(checksum));\n }\n }\n\n private checkForDebugger(): void {\n const debugIndicators = [\n process.execArgv.some(arg => arg.includes('--inspect')),\n process.execArgv.some(arg => arg.includes('--debug')),\n process.env.NODE_OPTIONS?.includes('--inspect'),\n process.env.NODE_OPTIONS?.includes('--debug'),\n process.argv.some(arg => arg.includes('--inspect')),\n process.argv.some(arg => arg.includes('--debug'))\n ];\n\n if (debugIndicators.some(Boolean)) {\n this.logger.warning('Debugger detected in memory check');\n }\n }\n\n public protectSensitiveData(data: Buffer): Buffer {\n const id = crypto.randomBytes(16).toString('hex');\n const iv = crypto.randomBytes(16);\n \n const cipher = crypto.createCipheriv('aes-256-gcm', this.encryptionKey, iv);\n const encrypted = Buffer.concat([cipher.update(data), cipher.final()]);\n const authTag = cipher.getAuthTag();\n \n const protectedData = Buffer.concat([iv, authTag, encrypted]);\n this.secureHeap.set(id, protectedData);\n \n return Buffer.from(id);\n }\n\n public retrieveSensitiveData(id: Buffer): Buffer | null {\n const protectedData = this.secureHeap.get(id.toString());\n if (!protectedData) return null;\n\n const iv = protectedData.subarray(0, 16);\n const authTag = protectedData.subarray(16, 32);\n const encrypted = protectedData.subarray(32);\n\n try {\n const decipher = crypto.createDecipheriv('aes-256-gcm', this.encryptionKey, iv);\n decipher.setAuthTag(authTag);\n \n return Buffer.concat([\n decipher.update(encrypted),\n decipher.final()\n ]);\n } catch {\n return null;\n }\n }\n\n public wipeSensitiveData(id: Buffer): void {\n const key = id.toString();\n const data = this.secureHeap.get(key);\n \n if (data) {\n crypto.randomFillSync(data);\n this.secureHeap.delete(key);\n }\n }\n\n public forceGarbageCollection(): void {\n if (global.gc) {\n global.gc();\n this.logger.debug('Garbage collection forced');\n }\n }\n\n private calculateChecksum(data: Buffer): string {\n return crypto.createHash('sha256')\n .update(data)\n .digest('hex');\n }\n\n private terminateCompromised(): void {\n if (this.isCompromised) return;\n \n this.isCompromised = true;\n this.logger.emergency('Memory compromised - terminating process');\n \n this.secureHeap.clear();\n \n this.forceGarbageCollection();\n \n process.kill(process.pid, 'SIGKILL');\n }\n\n public getStatus(): any {\n return {\n isCompromised: this.isCompromised,\n secureHeapSize: this.secureHeap.size,\n snapshotsCount: this.memorySnapshots.size,\n memoryUsage: process.memoryUsage(),\n heapStats: v8.getHeapStatistics()\n };\n }\n}"]}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
export declare class ProcessGuard {
|
|
2
|
+
private static instance;
|
|
3
|
+
private readonly logger;
|
|
4
|
+
private readonly originalEnv;
|
|
5
|
+
private readonly protectedProperties;
|
|
6
|
+
private memorySnapshots;
|
|
7
|
+
private isCompromised;
|
|
8
|
+
private constructor();
|
|
9
|
+
static getInstance(): ProcessGuard;
|
|
10
|
+
protectProcess(): void;
|
|
11
|
+
private freezeProcess;
|
|
12
|
+
private preventDebugger;
|
|
13
|
+
detectDebugger(): boolean;
|
|
14
|
+
private protectEnvironment;
|
|
15
|
+
private monitorMemory;
|
|
16
|
+
private takeMemorySnapshot;
|
|
17
|
+
validateMemoryIntegrity(): void;
|
|
18
|
+
private hookSystemCalls;
|
|
19
|
+
private monitorAnomalies;
|
|
20
|
+
private getProcessStats;
|
|
21
|
+
private getProcesses;
|
|
22
|
+
private terminateCompromised;
|
|
23
|
+
getStatus(): any;
|
|
24
|
+
}
|
|
25
|
+
//# sourceMappingURL=ProcessGuard.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ProcessGuard.d.ts","sourceRoot":"","sources":["../../src/guards/ProcessGuard.ts"],"names":[],"mappings":"AAGA,qBAAa,YAAY;IACrB,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAe;IACtC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAS;IAChC,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAoB;IAChD,OAAO,CAAC,QAAQ,CAAC,mBAAmB,CAAc;IAClD,OAAO,CAAC,eAAe,CAAsB;IAC7C,OAAO,CAAC,aAAa,CAAkB;IAEvC,OAAO;WAeO,WAAW,IAAI,YAAY;IAOlC,cAAc,IAAI,IAAI;IAU7B,OAAO,CAAC,aAAa;IAkBrB,OAAO,CAAC,eAAe;IAYhB,cAAc,IAAI,OAAO;IAchC,OAAO,CAAC,kBAAkB;IA8B1B,OAAO,CAAC,aAAa;IAUrB,OAAO,CAAC,kBAAkB;IAInB,uBAAuB,IAAI,IAAI;IAYtC,OAAO,CAAC,eAAe;YAuBT,gBAAgB;YAsBhB,eAAe;YAIf,YAAY;IAI1B,OAAO,CAAC,oBAAoB;IAWrB,SAAS,IAAI,GAAG;CAW1B"}
|
|
@@ -0,0 +1,221 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
+
var ownKeys = function(o) {
|
|
20
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
+
var ar = [];
|
|
22
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
+
return ar;
|
|
24
|
+
};
|
|
25
|
+
return ownKeys(o);
|
|
26
|
+
};
|
|
27
|
+
return function (mod) {
|
|
28
|
+
if (mod && mod.__esModule) return mod;
|
|
29
|
+
var result = {};
|
|
30
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
+
__setModuleDefault(result, mod);
|
|
32
|
+
return result;
|
|
33
|
+
};
|
|
34
|
+
})();
|
|
35
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
|
+
exports.ProcessGuard = void 0;
|
|
37
|
+
const process = __importStar(require("process"));
|
|
38
|
+
const Logger_1 = require("../utils/Logger");
|
|
39
|
+
class ProcessGuard {
|
|
40
|
+
static instance;
|
|
41
|
+
logger;
|
|
42
|
+
originalEnv;
|
|
43
|
+
protectedProperties;
|
|
44
|
+
memorySnapshots;
|
|
45
|
+
isCompromised = false;
|
|
46
|
+
constructor() {
|
|
47
|
+
this.logger = Logger_1.Logger.getInstance();
|
|
48
|
+
this.originalEnv = { ...process.env };
|
|
49
|
+
this.protectedProperties = new Set([
|
|
50
|
+
'argv', 'execPath', 'execArgv', 'pid', 'ppid',
|
|
51
|
+
'title', 'version', 'versions', 'arch', 'platform',
|
|
52
|
+
'release', 'features', 'moduleLoadList'
|
|
53
|
+
]);
|
|
54
|
+
this.memorySnapshots = new Map();
|
|
55
|
+
this.freezeProcess();
|
|
56
|
+
this.monitorMemory();
|
|
57
|
+
this.hookSystemCalls();
|
|
58
|
+
}
|
|
59
|
+
static getInstance() {
|
|
60
|
+
if (!ProcessGuard.instance) {
|
|
61
|
+
ProcessGuard.instance = new ProcessGuard();
|
|
62
|
+
}
|
|
63
|
+
return ProcessGuard.instance;
|
|
64
|
+
}
|
|
65
|
+
protectProcess() {
|
|
66
|
+
this.logger.info('ProcessGuard initialized');
|
|
67
|
+
this.preventDebugger();
|
|
68
|
+
this.protectEnvironment();
|
|
69
|
+
this.monitorAnomalies();
|
|
70
|
+
}
|
|
71
|
+
freezeProcess() {
|
|
72
|
+
Object.keys(process).forEach(key => {
|
|
73
|
+
if (this.protectedProperties.has(key)) {
|
|
74
|
+
try {
|
|
75
|
+
Object.defineProperty(process, key, {
|
|
76
|
+
configurable: false,
|
|
77
|
+
enumerable: true,
|
|
78
|
+
writable: false
|
|
79
|
+
});
|
|
80
|
+
}
|
|
81
|
+
catch (error) {
|
|
82
|
+
this.logger.warning(`Failed to freeze process.${key}`, { error });
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
});
|
|
86
|
+
Object.seal(process);
|
|
87
|
+
}
|
|
88
|
+
preventDebugger() {
|
|
89
|
+
const checkDebugger = () => {
|
|
90
|
+
if (this.detectDebugger()) {
|
|
91
|
+
this.logger.critical('Debugger detected!');
|
|
92
|
+
this.terminateCompromised();
|
|
93
|
+
}
|
|
94
|
+
};
|
|
95
|
+
setInterval(checkDebugger, 1000);
|
|
96
|
+
checkDebugger();
|
|
97
|
+
}
|
|
98
|
+
detectDebugger() {
|
|
99
|
+
const debugIndicators = [
|
|
100
|
+
process.execArgv.some(arg => arg.includes('--inspect')),
|
|
101
|
+
process.execArgv.some(arg => arg.includes('--debug')),
|
|
102
|
+
process.env.NODE_OPTIONS?.includes('--inspect'),
|
|
103
|
+
process.env.NODE_OPTIONS?.includes('--debug'),
|
|
104
|
+
process.argv.some(arg => arg.includes('--inspect')),
|
|
105
|
+
process.argv.some(arg => arg.includes('--debug')),
|
|
106
|
+
process.argv.some(arg => arg.includes('debug'))
|
|
107
|
+
];
|
|
108
|
+
return debugIndicators.some(Boolean);
|
|
109
|
+
}
|
|
110
|
+
protectEnvironment() {
|
|
111
|
+
Object.keys(process.env).forEach(key => {
|
|
112
|
+
try {
|
|
113
|
+
Object.defineProperty(process.env, key, {
|
|
114
|
+
configurable: false,
|
|
115
|
+
writable: false
|
|
116
|
+
});
|
|
117
|
+
}
|
|
118
|
+
catch (error) {
|
|
119
|
+
}
|
|
120
|
+
});
|
|
121
|
+
setInterval(() => {
|
|
122
|
+
const currentEnv = { ...process.env };
|
|
123
|
+
for (const [key, value] of Object.entries(currentEnv)) {
|
|
124
|
+
if (this.originalEnv[key] !== value) {
|
|
125
|
+
this.logger.critical('Environment variable modified!', { key });
|
|
126
|
+
this.terminateCompromised();
|
|
127
|
+
}
|
|
128
|
+
}
|
|
129
|
+
for (const key of Object.keys(currentEnv)) {
|
|
130
|
+
if (!this.originalEnv.hasOwnProperty(key)) {
|
|
131
|
+
this.logger.critical('New environment variable detected!', { key });
|
|
132
|
+
this.terminateCompromised();
|
|
133
|
+
}
|
|
134
|
+
}
|
|
135
|
+
}, 5000);
|
|
136
|
+
}
|
|
137
|
+
monitorMemory() {
|
|
138
|
+
setInterval(() => {
|
|
139
|
+
this.takeMemorySnapshot();
|
|
140
|
+
}, 60000);
|
|
141
|
+
setInterval(() => {
|
|
142
|
+
this.validateMemoryIntegrity();
|
|
143
|
+
}, 10000);
|
|
144
|
+
}
|
|
145
|
+
takeMemorySnapshot() {
|
|
146
|
+
return;
|
|
147
|
+
}
|
|
148
|
+
validateMemoryIntegrity() {
|
|
149
|
+
const memoryUsage = process.memoryUsage();
|
|
150
|
+
const heapUsed = memoryUsage.heapUsed;
|
|
151
|
+
const heapTotal = memoryUsage.heapTotal;
|
|
152
|
+
const ratio = heapUsed / heapTotal;
|
|
153
|
+
if (ratio > 0.95) {
|
|
154
|
+
this.logger.warning('High memory usage detected', { ratio });
|
|
155
|
+
}
|
|
156
|
+
}
|
|
157
|
+
hookSystemCalls() {
|
|
158
|
+
const fs = require('fs');
|
|
159
|
+
const originalReadFile = fs.readFile;
|
|
160
|
+
const originalWriteFile = fs.writeFile;
|
|
161
|
+
fs.readFile = function (...args) {
|
|
162
|
+
Logger_1.Logger.getInstance().debug('File read', { file: args[0] });
|
|
163
|
+
return originalReadFile.apply(this, args);
|
|
164
|
+
};
|
|
165
|
+
fs.writeFile = function (...args) {
|
|
166
|
+
Logger_1.Logger.getInstance().debug('File write', { file: args[0] });
|
|
167
|
+
const filePath = args[0];
|
|
168
|
+
if (filePath.includes(__filename) || filePath.includes('node_modules')) {
|
|
169
|
+
Logger_1.Logger.getInstance().critical('Critical file modification attempt!', { filePath });
|
|
170
|
+
throw new Error('Critical file modification blocked');
|
|
171
|
+
}
|
|
172
|
+
return originalWriteFile.apply(this, args);
|
|
173
|
+
};
|
|
174
|
+
}
|
|
175
|
+
async monitorAnomalies() {
|
|
176
|
+
setInterval(async () => {
|
|
177
|
+
try {
|
|
178
|
+
const stats = await this.getProcessStats();
|
|
179
|
+
if (stats.cpu > 80) {
|
|
180
|
+
this.logger.warning('High CPU usage detected', { cpu: stats.cpu });
|
|
181
|
+
}
|
|
182
|
+
const processes = await this.getProcesses();
|
|
183
|
+
const nodeProcesses = processes.length || 0;
|
|
184
|
+
if (nodeProcesses > 10) {
|
|
185
|
+
this.logger.critical('Too many Node.js processes detected!', { count: nodeProcesses });
|
|
186
|
+
this.terminateCompromised();
|
|
187
|
+
}
|
|
188
|
+
}
|
|
189
|
+
catch (error) {
|
|
190
|
+
this.logger.error('Anomaly monitoring error', { error });
|
|
191
|
+
}
|
|
192
|
+
}, 30000);
|
|
193
|
+
}
|
|
194
|
+
async getProcessStats() {
|
|
195
|
+
return { cpu: 0 };
|
|
196
|
+
}
|
|
197
|
+
async getProcesses() {
|
|
198
|
+
return [];
|
|
199
|
+
}
|
|
200
|
+
terminateCompromised() {
|
|
201
|
+
if (this.isCompromised)
|
|
202
|
+
return;
|
|
203
|
+
this.isCompromised = true;
|
|
204
|
+
this.logger.emergency('Process compromised - terminating');
|
|
205
|
+
this.memorySnapshots.clear();
|
|
206
|
+
process.kill(process.pid, 'SIGKILL');
|
|
207
|
+
}
|
|
208
|
+
getStatus() {
|
|
209
|
+
return {
|
|
210
|
+
pid: process.pid,
|
|
211
|
+
uptime: process.uptime(),
|
|
212
|
+
memoryUsage: process.memoryUsage(),
|
|
213
|
+
cpuUsage: process.cpuUsage(),
|
|
214
|
+
debuggerDetected: this.detectDebugger(),
|
|
215
|
+
isCompromised: this.isCompromised,
|
|
216
|
+
protectedProperties: Array.from(this.protectedProperties)
|
|
217
|
+
};
|
|
218
|
+
}
|
|
219
|
+
}
|
|
220
|
+
exports.ProcessGuard = ProcessGuard;
|
|
221
|
+
//# sourceMappingURL=ProcessGuard.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ProcessGuard.js","sourceRoot":"","sources":["../../src/guards/ProcessGuard.ts"],"names":[],"mappings":"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","sourcesContent":["import * as process from 'process';\nimport { Logger } from '../utils/Logger';\n\nexport class ProcessGuard {\n private static instance: ProcessGuard;\n private readonly logger: Logger;\n private readonly originalEnv: NodeJS.ProcessEnv;\n private readonly protectedProperties: Set<string>;\n private memorySnapshots: Map<string, Buffer>;\n private isCompromised: boolean = false;\n\n private constructor() {\n this.logger = Logger.getInstance();\n this.originalEnv = { ...process.env };\n this.protectedProperties = new Set([\n 'argv', 'execPath', 'execArgv', 'pid', 'ppid',\n 'title', 'version', 'versions', 'arch', 'platform',\n 'release', 'features', 'moduleLoadList'\n ]);\n this.memorySnapshots = new Map();\n \n this.freezeProcess();\n this.monitorMemory();\n this.hookSystemCalls();\n }\n\n public static getInstance(): ProcessGuard {\n if (!ProcessGuard.instance) {\n ProcessGuard.instance = new ProcessGuard();\n }\n return ProcessGuard.instance;\n }\n\n public protectProcess(): void {\n this.logger.info('ProcessGuard initialized');\n \n this.preventDebugger();\n \n this.protectEnvironment();\n \n this.monitorAnomalies();\n }\n\n private freezeProcess(): void {\n Object.keys(process).forEach(key => {\n if (this.protectedProperties.has(key)) {\n try {\n Object.defineProperty(process, key, {\n configurable: false,\n enumerable: true,\n writable: false\n });\n } catch (error) {\n this.logger.warning(`Failed to freeze process.${key}`, { error });\n }\n }\n });\n\n Object.seal(process);\n }\n\n private preventDebugger(): void {\n const checkDebugger = () => {\n if (this.detectDebugger()) {\n this.logger.critical('Debugger detected!');\n this.terminateCompromised();\n }\n };\n\n setInterval(checkDebugger, 1000);\n checkDebugger();\n }\n\n public detectDebugger(): boolean {\n const debugIndicators = [\n process.execArgv.some(arg => arg.includes('--inspect')),\n process.execArgv.some(arg => arg.includes('--debug')),\n process.env.NODE_OPTIONS?.includes('--inspect'),\n process.env.NODE_OPTIONS?.includes('--debug'),\n process.argv.some(arg => arg.includes('--inspect')),\n process.argv.some(arg => arg.includes('--debug')),\n process.argv.some(arg => arg.includes('debug'))\n ];\n\n return debugIndicators.some(Boolean);\n }\n\n private protectEnvironment(): void {\n Object.keys(process.env).forEach(key => {\n try {\n Object.defineProperty(process.env, key, {\n configurable: false,\n writable: false\n });\n } catch (error) {\n }\n });\n\n setInterval(() => {\n const currentEnv = { ...process.env };\n \n for (const [key, value] of Object.entries(currentEnv)) {\n if (this.originalEnv[key] !== value) {\n this.logger.critical('Environment variable modified!', { key });\n this.terminateCompromised();\n }\n }\n \n for (const key of Object.keys(currentEnv)) {\n if (!this.originalEnv.hasOwnProperty(key)) {\n this.logger.critical('New environment variable detected!', { key });\n this.terminateCompromised();\n }\n }\n }, 5000);\n }\n\n private monitorMemory(): void {\n setInterval(() => {\n this.takeMemorySnapshot();\n }, 60000);\n\n setInterval(() => {\n this.validateMemoryIntegrity();\n }, 10000);\n }\n\n private takeMemorySnapshot(): void {\n return;\n }\n\n public validateMemoryIntegrity(): void {\n const memoryUsage = process.memoryUsage();\n \n const heapUsed = memoryUsage.heapUsed;\n const heapTotal = memoryUsage.heapTotal;\n const ratio = heapUsed / heapTotal;\n \n if (ratio > 0.95) {\n this.logger.warning('High memory usage detected', { ratio });\n }\n }\n\n private hookSystemCalls(): void {\n const fs = require('fs');\n const originalReadFile = fs.readFile;\n const originalWriteFile = fs.writeFile;\n \n fs.readFile = function(...args: any[]) {\n Logger.getInstance().debug('File read', { file: args[0] });\n return originalReadFile.apply(this, args);\n };\n \n fs.writeFile = function(...args: any[]) {\n Logger.getInstance().debug('File write', { file: args[0] });\n \n const filePath = args[0];\n if (filePath.includes(__filename) || filePath.includes('node_modules')) {\n Logger.getInstance().critical('Critical file modification attempt!', { filePath });\n throw new Error('Critical file modification blocked');\n }\n \n return originalWriteFile.apply(this, args);\n };\n }\n\n private async monitorAnomalies(): Promise<void> {\n setInterval(async () => {\n try {\n const stats = await this.getProcessStats();\n if (stats.cpu > 80) {\n this.logger.warning('High CPU usage detected', { cpu: stats.cpu });\n }\n \n const processes = await this.getProcesses();\n const nodeProcesses = processes.length || 0;\n \n if (nodeProcesses > 10) {\n this.logger.critical('Too many Node.js processes detected!', { count: nodeProcesses });\n this.terminateCompromised();\n }\n \n } catch (error) {\n this.logger.error('Anomaly monitoring error', { error });\n }\n }, 30000);\n }\n\n private async getProcessStats(): Promise<any> {\n return { cpu: 0 };\n }\n\n private async getProcesses(): Promise<any[]> {\n return [];\n }\n\n private terminateCompromised(): void {\n if (this.isCompromised) return;\n \n this.isCompromised = true;\n this.logger.emergency('Process compromised - terminating');\n \n this.memorySnapshots.clear();\n \n process.kill(process.pid, 'SIGKILL');\n }\n\n public getStatus(): any {\n return {\n pid: process.pid,\n uptime: process.uptime(),\n memoryUsage: process.memoryUsage(),\n cpuUsage: process.cpuUsage(),\n debuggerDetected: this.detectDebugger(),\n isCompromised: this.isCompromised,\n protectedProperties: Array.from(this.protectedProperties)\n };\n }\n}"]}
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
import { WatcherEngine } from './core/WatcherEngine';
|
|
3
|
+
import { SecurityConfig } from './types';
|
|
4
|
+
declare class SecureFileWatcher {
|
|
5
|
+
private watcher;
|
|
6
|
+
private readonly logger;
|
|
7
|
+
private readonly processGuard;
|
|
8
|
+
constructor();
|
|
9
|
+
private initialize;
|
|
10
|
+
private displayBanner;
|
|
11
|
+
private validateEnvironment;
|
|
12
|
+
private loadConfiguration;
|
|
13
|
+
private setupEventHandlers;
|
|
14
|
+
private handleCriticalViolation;
|
|
15
|
+
private handleCriticalEvent;
|
|
16
|
+
getStatus(): any;
|
|
17
|
+
}
|
|
18
|
+
export { SecureFileWatcher, WatcherEngine, SecurityConfig };
|
|
19
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAGA,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,EAAE,cAAc,EAAE,MAAM,SAAS,CAAC;AAKzC,cAAM,iBAAiB;IACnB,OAAO,CAAC,OAAO,CAA8B;IAC7C,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAS;IAChC,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAe;;YAS9B,UAAU;IA0BxB,OAAO,CAAC,aAAa;YAQP,mBAAmB;IAoBjC,OAAO,CAAC,iBAAiB;IA2BzB,OAAO,CAAC,kBAAkB;IAyC1B,OAAO,CAAC,uBAAuB;IAI/B,OAAO,CAAC,mBAAmB;IAIpB,SAAS,IAAI,GAAG;CAa1B;AAwBD,OAAO,EAAE,iBAAiB,EAAE,aAAa,EAAE,cAAc,EAAE,CAAC"}
|