mcp-wordpress 2.4.2 → 2.5.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/README.md +114 -48
- package/dist/ajv-patch.js +34 -0
- package/dist/cache/CacheInvalidation.d.ts +3 -1
- package/dist/cache/CacheInvalidation.d.ts.map +1 -1
- package/dist/cache/CacheInvalidation.js +10 -4
- package/dist/cache/CacheInvalidation.js.map +1 -1
- package/dist/cache/CacheManager.d.ts +3 -2
- package/dist/cache/CacheManager.d.ts.map +1 -1
- package/dist/cache/CacheManager.js +11 -3
- package/dist/cache/CacheManager.js.map +1 -1
- package/dist/cache/HttpCacheWrapper.d.ts +7 -6
- package/dist/cache/HttpCacheWrapper.d.ts.map +1 -1
- package/dist/cache/HttpCacheWrapper.js +8 -5
- package/dist/cache/HttpCacheWrapper.js.map +1 -1
- package/dist/cache/__tests__/HttpCacheWrapper.test.js +6 -5
- package/dist/cache/__tests__/HttpCacheWrapper.test.js.map +1 -1
- package/dist/cache/index.d.ts +3 -3
- package/dist/cache/index.d.ts.map +1 -1
- package/dist/cache/index.js +1 -1
- package/dist/cache/index.js.map +1 -1
- package/dist/client/CachedWordPressClient.d.ts +23 -9
- package/dist/client/CachedWordPressClient.d.ts.map +1 -1
- package/dist/client/CachedWordPressClient.js +4 -1
- package/dist/client/CachedWordPressClient.js.map +1 -1
- package/dist/client/MockWordPressClient.d.ts +2 -1
- package/dist/client/MockWordPressClient.d.ts.map +1 -1
- package/dist/client/MockWordPressClient.js +3 -1
- package/dist/client/MockWordPressClient.js.map +1 -1
- package/dist/client/api.d.ts +17 -13
- package/dist/client/api.d.ts.map +1 -1
- package/dist/client/api.js +135 -30
- package/dist/client/api.js.map +1 -1
- package/dist/client/auth.d.ts.map +1 -1
- package/dist/client/auth.js +2 -3
- package/dist/client/auth.js.map +1 -1
- package/dist/client/managers/AuthenticationManager.d.ts +55 -2
- package/dist/client/managers/AuthenticationManager.d.ts.map +1 -1
- package/dist/client/managers/AuthenticationManager.js +269 -71
- package/dist/client/managers/AuthenticationManager.js.map +1 -1
- package/dist/client/managers/BaseManager.d.ts +3 -3
- package/dist/client/managers/BaseManager.d.ts.map +1 -1
- package/dist/client/managers/BaseManager.js +11 -5
- package/dist/client/managers/BaseManager.js.map +1 -1
- package/dist/client/managers/RequestManager.d.ts +2 -2
- package/dist/client/managers/RequestManager.d.ts.map +1 -1
- package/dist/client/managers/RequestManager.js +25 -12
- package/dist/client/managers/RequestManager.js.map +1 -1
- package/dist/config/Config.d.ts +155 -0
- package/dist/config/Config.d.ts.map +1 -0
- package/dist/config/Config.js +215 -0
- package/dist/config/Config.js.map +1 -0
- package/dist/config/ConfigurationSchema.d.ts +21 -21
- package/dist/config/ConfigurationSchema.d.ts.map +1 -1
- package/dist/config/ConfigurationSchema.js +19 -2
- package/dist/config/ConfigurationSchema.js.map +1 -1
- package/dist/config/ServerConfiguration.d.ts +2 -1
- package/dist/config/ServerConfiguration.d.ts.map +1 -1
- package/dist/config/ServerConfiguration.js +50 -41
- package/dist/config/ServerConfiguration.js.map +1 -1
- package/dist/docs/DocumentationGenerator.d.ts +9 -8
- package/dist/docs/DocumentationGenerator.d.ts.map +1 -1
- package/dist/docs/DocumentationGenerator.js +10 -7
- package/dist/docs/DocumentationGenerator.js.map +1 -1
- package/dist/docs/MarkdownFormatter.d.ts.map +1 -1
- package/dist/docs/MarkdownFormatter.js +3 -2
- package/dist/docs/MarkdownFormatter.js.map +1 -1
- package/dist/dxt-entry.cjs +81 -0
- package/dist/dxt-entry.js +15 -14
- package/dist/dxt-entry.js.map +1 -1
- package/dist/index.d.ts +3 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +37 -21
- package/dist/index.js.map +1 -1
- package/dist/performance/MetricsCollector.d.ts +13 -7
- package/dist/performance/MetricsCollector.d.ts.map +1 -1
- package/dist/performance/MetricsCollector.js +69 -27
- package/dist/performance/MetricsCollector.js.map +1 -1
- package/dist/performance/PerformanceAnalytics.d.ts +8 -2
- package/dist/performance/PerformanceAnalytics.d.ts.map +1 -1
- package/dist/performance/PerformanceAnalytics.js +17 -47
- package/dist/performance/PerformanceAnalytics.js.map +1 -1
- package/dist/performance/PerformanceMonitor.d.ts +2 -1
- package/dist/performance/PerformanceMonitor.d.ts.map +1 -1
- package/dist/performance/PerformanceMonitor.js +12 -13
- package/dist/performance/PerformanceMonitor.js.map +1 -1
- package/dist/performance/index.d.ts +2 -2
- package/dist/performance/index.d.ts.map +1 -1
- package/dist/security/AISecurityScanner.d.ts +1 -0
- package/dist/security/AISecurityScanner.d.ts.map +1 -1
- package/dist/security/AISecurityScanner.js +22 -12
- package/dist/security/AISecurityScanner.js.map +1 -1
- package/dist/security/AutomatedRemediation.d.ts +4 -3
- package/dist/security/AutomatedRemediation.d.ts.map +1 -1
- package/dist/security/AutomatedRemediation.js +46 -15
- package/dist/security/AutomatedRemediation.js.map +1 -1
- package/dist/security/InputValidator.d.ts +13 -9
- package/dist/security/InputValidator.d.ts.map +1 -1
- package/dist/security/InputValidator.js +4 -2
- package/dist/security/InputValidator.js.map +1 -1
- package/dist/security/SecurityCIPipeline.d.ts +1 -1
- package/dist/security/SecurityCIPipeline.d.ts.map +1 -1
- package/dist/security/SecurityCIPipeline.js +38 -29
- package/dist/security/SecurityCIPipeline.js.map +1 -1
- package/dist/security/SecurityConfig.d.ts +3 -3
- package/dist/security/SecurityConfig.d.ts.map +1 -1
- package/dist/security/SecurityConfig.js +13 -9
- package/dist/security/SecurityConfig.js.map +1 -1
- package/dist/security/SecurityConfigManager.d.ts +2 -2
- package/dist/security/SecurityConfigManager.d.ts.map +1 -1
- package/dist/security/SecurityConfigManager.js +20 -15
- package/dist/security/SecurityConfigManager.js.map +1 -1
- package/dist/security/SecurityMonitoring.d.ts +2 -2
- package/dist/security/SecurityMonitoring.d.ts.map +1 -1
- package/dist/security/SecurityMonitoring.js +19 -17
- package/dist/security/SecurityMonitoring.js.map +1 -1
- package/dist/security/SecurityReviewer.d.ts.map +1 -1
- package/dist/security/SecurityReviewer.js +10 -7
- package/dist/security/SecurityReviewer.js.map +1 -1
- package/dist/security/index.d.ts +24 -23
- package/dist/security/index.d.ts.map +1 -1
- package/dist/security/index.js +52 -23
- package/dist/security/index.js.map +1 -1
- package/dist/server/ConnectionTester.d.ts +12 -4
- package/dist/server/ConnectionTester.d.ts.map +1 -1
- package/dist/server/ConnectionTester.js +96 -22
- package/dist/server/ConnectionTester.js.map +1 -1
- package/dist/server/ToolRegistry.d.ts +2 -2
- package/dist/server/ToolRegistry.d.ts.map +1 -1
- package/dist/server/ToolRegistry.js +10 -5
- package/dist/server/ToolRegistry.js.map +1 -1
- package/dist/tools/BaseToolManager.d.ts +47 -11
- package/dist/tools/BaseToolManager.d.ts.map +1 -1
- package/dist/tools/BaseToolManager.js +168 -29
- package/dist/tools/BaseToolManager.js.map +1 -1
- package/dist/tools/auth.d.ts +16 -10
- package/dist/tools/auth.d.ts.map +1 -1
- package/dist/tools/auth.js +3 -2
- package/dist/tools/auth.js.map +1 -1
- package/dist/tools/cache.d.ts +30 -30
- package/dist/tools/cache.d.ts.map +1 -1
- package/dist/tools/cache.js +1 -6
- package/dist/tools/cache.js.map +1 -1
- package/dist/tools/comments.d.ts +20 -20
- package/dist/tools/comments.d.ts.map +1 -1
- package/dist/tools/comments.js +16 -9
- package/dist/tools/comments.js.map +1 -1
- package/dist/tools/media.d.ts +18 -16
- package/dist/tools/media.d.ts.map +1 -1
- package/dist/tools/media.js +16 -15
- package/dist/tools/media.js.map +1 -1
- package/dist/tools/pages.d.ts +19 -17
- package/dist/tools/pages.d.ts.map +1 -1
- package/dist/tools/pages.js +16 -12
- package/dist/tools/pages.js.map +1 -1
- package/dist/tools/performance.d.ts +11 -1
- package/dist/tools/performance.d.ts.map +1 -1
- package/dist/tools/performance.js +67 -34
- package/dist/tools/performance.js.map +1 -1
- package/dist/tools/posts/PostHandlers.d.ts +46 -0
- package/dist/tools/posts/PostHandlers.d.ts.map +1 -0
- package/dist/tools/posts/PostHandlers.js +400 -0
- package/dist/tools/posts/PostHandlers.js.map +1 -0
- package/dist/tools/posts/PostToolDefinitions.d.ts +37 -0
- package/dist/tools/posts/PostToolDefinitions.d.ts.map +1 -0
- package/dist/tools/posts/PostToolDefinitions.js +236 -0
- package/dist/tools/posts/PostToolDefinitions.js.map +1 -0
- package/dist/tools/posts/index.d.ts +138 -0
- package/dist/tools/posts/index.d.ts.map +1 -0
- package/dist/tools/posts/index.js +163 -0
- package/dist/tools/posts/index.js.map +1 -0
- package/dist/tools/posts.d.ts +10 -246
- package/dist/tools/posts.d.ts.map +1 -1
- package/dist/tools/posts.js +11 -723
- package/dist/tools/posts.js.map +1 -1
- package/dist/tools/site.d.ts +19 -18
- package/dist/tools/site.d.ts.map +1 -1
- package/dist/tools/site.js +14 -10
- package/dist/tools/site.js.map +1 -1
- package/dist/tools/taxonomies.d.ts +23 -24
- package/dist/tools/taxonomies.d.ts.map +1 -1
- package/dist/tools/taxonomies.js +24 -18
- package/dist/tools/taxonomies.js.map +1 -1
- package/dist/tools/users.d.ts +20 -15
- package/dist/tools/users.d.ts.map +1 -1
- package/dist/tools/users.js +12 -8
- package/dist/tools/users.js.map +1 -1
- package/dist/types/client.d.ts +48 -41
- package/dist/types/client.d.ts.map +1 -1
- package/dist/types/client.js +30 -5
- package/dist/types/client.js.map +1 -1
- package/dist/types/enhanced.d.ts +237 -0
- package/dist/types/enhanced.d.ts.map +1 -0
- package/dist/types/enhanced.js +49 -0
- package/dist/types/enhanced.js.map +1 -0
- package/dist/types/index.d.ts +15 -12
- package/dist/types/index.d.ts.map +1 -1
- package/dist/types/index.js +2 -0
- package/dist/types/index.js.map +1 -1
- package/dist/types/mcp.d.ts +12 -12
- package/dist/types/mcp.d.ts.map +1 -1
- package/dist/types/requests.d.ts +322 -0
- package/dist/types/requests.d.ts.map +1 -0
- package/dist/types/requests.js +8 -0
- package/dist/types/requests.js.map +1 -0
- package/dist/types/tools.d.ts +506 -0
- package/dist/types/tools.d.ts.map +1 -0
- package/dist/types/tools.js +8 -0
- package/dist/types/tools.js.map +1 -0
- package/dist/types/wordpress.d.ts +43 -15
- package/dist/types/wordpress.d.ts.map +1 -1
- package/dist/types/wordpress.js +8 -1
- package/dist/types/wordpress.js.map +1 -1
- package/dist/utils/debug.d.ts +19 -11
- package/dist/utils/debug.d.ts.map +1 -1
- package/dist/utils/debug.js +46 -10
- package/dist/utils/debug.js.map +1 -1
- package/dist/utils/enhancedError.d.ts +8 -8
- package/dist/utils/enhancedError.d.ts.map +1 -1
- package/dist/utils/enhancedError.js.map +1 -1
- package/dist/utils/error.d.ts +2 -4
- package/dist/utils/error.d.ts.map +1 -1
- package/dist/utils/error.js +42 -5
- package/dist/utils/error.js.map +1 -1
- package/dist/utils/logger.d.ts +106 -0
- package/dist/utils/logger.d.ts.map +1 -0
- package/dist/utils/logger.js +280 -0
- package/dist/utils/logger.js.map +1 -0
- package/dist/utils/streaming.d.ts +9 -9
- package/dist/utils/streaming.d.ts.map +1 -1
- package/dist/utils/streaming.js +71 -52
- package/dist/utils/streaming.js.map +1 -1
- package/dist/utils/toolWrapper.d.ts +9 -7
- package/dist/utils/toolWrapper.d.ts.map +1 -1
- package/dist/utils/toolWrapper.js.map +1 -1
- package/dist/utils/validation/core.d.ts +21 -0
- package/dist/utils/validation/core.d.ts.map +1 -0
- package/dist/utils/validation/core.js +71 -0
- package/dist/utils/validation/core.js.map +1 -0
- package/dist/utils/validation/index.d.ts +25 -0
- package/dist/utils/validation/index.d.ts.map +1 -0
- package/dist/utils/validation/index.js +29 -0
- package/dist/utils/validation/index.js.map +1 -0
- package/dist/utils/validation/network.d.ts +19 -0
- package/dist/utils/validation/network.d.ts.map +1 -0
- package/dist/utils/validation/network.js +93 -0
- package/dist/utils/validation/network.js.map +1 -0
- package/dist/utils/validation/rateLimit.d.ts +21 -0
- package/dist/utils/validation/rateLimit.d.ts.map +1 -0
- package/dist/utils/validation/rateLimit.js +43 -0
- package/dist/utils/validation/rateLimit.js.map +1 -0
- package/dist/utils/validation/security.d.ts +29 -0
- package/dist/utils/validation/security.d.ts.map +1 -0
- package/dist/utils/validation/security.js +327 -0
- package/dist/utils/validation/security.js.map +1 -0
- package/dist/utils/validation/wordpress.d.ts +31 -0
- package/dist/utils/validation/wordpress.d.ts.map +1 -0
- package/dist/utils/validation/wordpress.js +146 -0
- package/dist/utils/validation/wordpress.js.map +1 -0
- package/dist/utils/validation.d.ts +13 -82
- package/dist/utils/validation.d.ts.map +1 -1
- package/dist/utils/validation.js +25 -343
- package/dist/utils/validation.js.map +1 -1
- package/docs/BADGE_UPDATES.md +132 -0
- package/docs/CI_CD_IMPROVEMENTS.md +191 -0
- package/docs/INCREMENTAL_COVERAGE.md +183 -0
- package/docs/api/README.md +3 -1
- package/docs/api/openapi.json +5 -1
- package/docs/api/summary.json +1 -1
- package/docs/api/tools/wp_create_post.md +12 -14
- package/docs/examples/claude-desktop-config.md +1 -1
- package/docs/examples/docker-production.md +100 -93
- package/docs/examples/multi-site-setup.md +5 -4
- package/docs/examples/single-site-setup.md +3 -4
- package/docs/examples/use-case-workflows.md +4 -5
- package/docs/integrations/claude-desktop.md +31 -31
- package/docs/integrations/cline.md +4 -4
- package/docs/integrations/vs-code.md +9 -8
- package/docs/user-guides/SMITHERY_SETUP.md +10 -10
- package/package.json +44 -25
- package/src/cache/CacheInvalidation.ts +12 -5
- package/src/cache/CacheManager.ts +18 -15
- package/src/cache/HttpCacheWrapper.ts +30 -59
- package/src/cache/__tests__/HttpCacheWrapper.test.ts +6 -5
- package/src/cache/index.ts +3 -14
- package/src/client/CachedWordPressClient.ts +32 -30
- package/src/client/MockWordPressClient.ts +4 -2
- package/src/client/api.ts +186 -64
- package/src/client/auth.ts +15 -40
- package/src/client/managers/AuthenticationManager.ts +337 -77
- package/src/client/managers/BaseManager.ts +18 -30
- package/src/client/managers/RequestManager.ts +39 -44
- package/src/config/Config.ts +308 -0
- package/src/config/ConfigurationSchema.ts +23 -2
- package/src/config/ServerConfiguration.ts +51 -47
- package/src/docs/DocumentationGenerator.ts +50 -39
- package/src/docs/MarkdownFormatter.ts +19 -29
- package/src/dxt-entry.cjs +26 -16
- package/src/dxt-entry.ts +17 -27
- package/src/index.ts +42 -28
- package/src/performance/MetricsCollector.ts +108 -86
- package/src/performance/PerformanceAnalytics.ts +69 -164
- package/src/performance/PerformanceMonitor.ts +32 -47
- package/src/performance/index.ts +2 -10
- package/src/security/AISecurityScanner.ts +22 -12
- package/src/security/AutomatedRemediation.ts +49 -18
- package/src/security/InputValidator.ts +9 -6
- package/src/security/SecurityCIPipeline.ts +53 -37
- package/src/security/SecurityConfig.ts +22 -22
- package/src/security/SecurityConfigManager.ts +23 -19
- package/src/security/SecurityMonitoring.ts +24 -21
- package/src/security/SecurityReviewer.ts +10 -7
- package/src/security/index.ts +64 -29
- package/src/server/ConnectionTester.ts +120 -31
- package/src/server/ToolRegistry.ts +31 -21
- package/src/tools/BaseToolManager.ts +286 -33
- package/src/tools/auth.ts +20 -8
- package/src/tools/cache.ts +5 -15
- package/src/tools/comments.ts +34 -48
- package/src/tools/media.ts +41 -53
- package/src/tools/pages.ts +32 -54
- package/src/tools/performance.ts +141 -176
- package/src/tools/posts/PostHandlers.ts +474 -0
- package/src/tools/posts/PostToolDefinitions.ts +250 -0
- package/src/tools/posts/index.ts +192 -0
- package/src/tools/posts.ts +24 -780
- package/src/tools/site.ts +34 -19
- package/src/tools/taxonomies.ts +41 -57
- package/src/tools/users.ts +28 -16
- package/src/types/client.ts +114 -138
- package/src/types/enhanced.ts +318 -0
- package/src/types/index.ts +51 -30
- package/src/types/mcp.ts +20 -42
- package/src/types/requests.ts +378 -0
- package/src/types/tools.ts +608 -0
- package/src/types/wordpress.ts +56 -34
- package/src/utils/debug.ts +77 -59
- package/src/utils/enhancedError.ts +8 -8
- package/src/utils/error.ts +53 -31
- package/src/utils/logger.ts +351 -0
- package/src/utils/streaming.ts +86 -68
- package/src/utils/toolWrapper.ts +10 -12
- package/src/utils/validation/core.ts +108 -0
- package/src/utils/validation/index.ts +36 -0
- package/src/utils/validation/network.ts +132 -0
- package/src/utils/validation/rateLimit.ts +54 -0
- package/src/utils/validation/security.ts +361 -0
- package/src/utils/validation/wordpress.ts +180 -0
- package/src/utils/validation.ts +47 -470
|
@@ -6,8 +6,11 @@
|
|
|
6
6
|
import * as fs from "fs/promises";
|
|
7
7
|
import * as path from "path";
|
|
8
8
|
import { z } from "zod";
|
|
9
|
-
import { SecurityUtils } from "./SecurityConfig";
|
|
10
|
-
import { SecurityValidationError } from "./InputValidator";
|
|
9
|
+
import { SecurityUtils } from "./SecurityConfig.js";
|
|
10
|
+
import { SecurityValidationError } from "./InputValidator.js";
|
|
11
|
+
import { LoggerFactory } from "../utils/logger.js";
|
|
12
|
+
|
|
13
|
+
const logger = LoggerFactory.security();
|
|
11
14
|
|
|
12
15
|
interface SecurityPolicy {
|
|
13
16
|
id: string;
|
|
@@ -40,7 +43,7 @@ interface SecurityPolicyRule {
|
|
|
40
43
|
paths?: string[];
|
|
41
44
|
userRoles?: string[];
|
|
42
45
|
};
|
|
43
|
-
parameters: Record<string,
|
|
46
|
+
parameters: Record<string, unknown>;
|
|
44
47
|
exceptions: string[];
|
|
45
48
|
}
|
|
46
49
|
|
|
@@ -58,7 +61,7 @@ interface SecurityConfiguration {
|
|
|
58
61
|
logging: LoggingSettings;
|
|
59
62
|
monitoring: MonitoringSettings;
|
|
60
63
|
};
|
|
61
|
-
overrides: Record<string,
|
|
64
|
+
overrides: Record<string, unknown>;
|
|
62
65
|
metadata: {
|
|
63
66
|
lastUpdated: Date;
|
|
64
67
|
checksum: string;
|
|
@@ -244,7 +247,7 @@ const SecurityPolicySchema = z.object({
|
|
|
244
247
|
paths: z.array(z.string()).optional(),
|
|
245
248
|
userRoles: z.array(z.string()).optional(),
|
|
246
249
|
}),
|
|
247
|
-
parameters: z.record(z.
|
|
250
|
+
parameters: z.record(z.unknown()),
|
|
248
251
|
exceptions: z.array(z.string()),
|
|
249
252
|
}),
|
|
250
253
|
),
|
|
@@ -276,15 +279,16 @@ export class SecurityConfigManager {
|
|
|
276
279
|
* Initialize security configuration manager
|
|
277
280
|
*/
|
|
278
281
|
async initialize(): Promise<void> {
|
|
279
|
-
|
|
282
|
+
logger.info("Initializing security configuration manager");
|
|
280
283
|
|
|
281
284
|
await this.ensureConfigDirectory();
|
|
282
285
|
await this.loadConfigurations();
|
|
283
286
|
await this.loadPolicies();
|
|
284
287
|
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
|
|
288
|
+
logger.info("Loaded configurations and policies", {
|
|
289
|
+
configurationCount: this.configurations.size,
|
|
290
|
+
policyCount: this.policies.size
|
|
291
|
+
});
|
|
288
292
|
}
|
|
289
293
|
|
|
290
294
|
/**
|
|
@@ -312,7 +316,7 @@ export class SecurityConfigManager {
|
|
|
312
316
|
this.policies.set(policy.id, policy);
|
|
313
317
|
await this.savePolicyToFile(policy);
|
|
314
318
|
|
|
315
|
-
|
|
319
|
+
logger.info(`Created policy: ${policy.name}`, { policyId: policy.id });
|
|
316
320
|
return policy;
|
|
317
321
|
}
|
|
318
322
|
|
|
@@ -345,7 +349,7 @@ export class SecurityConfigManager {
|
|
|
345
349
|
this.policies.set(policyId, updatedPolicy);
|
|
346
350
|
await this.savePolicyToFile(updatedPolicy);
|
|
347
351
|
|
|
348
|
-
|
|
352
|
+
logger.info(`Updated policy: ${updatedPolicy.name}`, { policyId });
|
|
349
353
|
return updatedPolicy;
|
|
350
354
|
}
|
|
351
355
|
|
|
@@ -375,7 +379,7 @@ export class SecurityConfigManager {
|
|
|
375
379
|
this.configurations.set(environment, config);
|
|
376
380
|
await this.saveConfigurationToFile(config);
|
|
377
381
|
|
|
378
|
-
|
|
382
|
+
logger.info(`Created configuration for environment: ${environment}`, { environment });
|
|
379
383
|
return config;
|
|
380
384
|
}
|
|
381
385
|
|
|
@@ -411,7 +415,7 @@ export class SecurityConfigManager {
|
|
|
411
415
|
throw new SecurityValidationError("Policy not found", [{ message: `Policy ${policyId} not found` }]);
|
|
412
416
|
}
|
|
413
417
|
if (!policy.enabled) {
|
|
414
|
-
|
|
418
|
+
logger.warn(`Skipping disabled policy: ${policy.name}`, { policyName: policy.name });
|
|
415
419
|
continue;
|
|
416
420
|
}
|
|
417
421
|
policies.push(policy);
|
|
@@ -424,7 +428,7 @@ export class SecurityConfigManager {
|
|
|
424
428
|
this.configurations.set(environment, config);
|
|
425
429
|
await this.saveConfigurationToFile(config);
|
|
426
430
|
|
|
427
|
-
|
|
431
|
+
logger.info(`Applied policies to ${environment}`, { policyCount: policies.length, environment });
|
|
428
432
|
return config;
|
|
429
433
|
}
|
|
430
434
|
|
|
@@ -673,7 +677,7 @@ export class SecurityConfigManager {
|
|
|
673
677
|
}
|
|
674
678
|
}
|
|
675
679
|
} catch (_error) {
|
|
676
|
-
|
|
680
|
+
logger.info("No existing configurations found, will create new ones");
|
|
677
681
|
}
|
|
678
682
|
}
|
|
679
683
|
|
|
@@ -701,7 +705,7 @@ export class SecurityConfigManager {
|
|
|
701
705
|
}
|
|
702
706
|
}
|
|
703
707
|
} catch (_error) {
|
|
704
|
-
|
|
708
|
+
logger.info("No existing policies found");
|
|
705
709
|
}
|
|
706
710
|
}
|
|
707
711
|
|
|
@@ -780,10 +784,10 @@ export class SecurityConfigManager {
|
|
|
780
784
|
try {
|
|
781
785
|
const filePath = path.join(this.configPath, "policies", `${policyId}.json`);
|
|
782
786
|
await fs.unlink(filePath);
|
|
783
|
-
|
|
787
|
+
logger.info(`Deleted policy: ${policy.name}`, { policyId });
|
|
784
788
|
return true;
|
|
785
789
|
} catch (error) {
|
|
786
|
-
|
|
790
|
+
logger.warn("Failed to delete policy file", { error });
|
|
787
791
|
return false;
|
|
788
792
|
}
|
|
789
793
|
}
|
|
@@ -820,7 +824,7 @@ export class SecurityConfigManager {
|
|
|
820
824
|
this.configurations.set(config.environment, config);
|
|
821
825
|
await this.saveConfigurationToFile(config);
|
|
822
826
|
|
|
823
|
-
|
|
827
|
+
logger.info(`Imported configuration for environment: ${config.environment}`, { environment: config.environment });
|
|
824
828
|
return config;
|
|
825
829
|
} catch (error) {
|
|
826
830
|
throw new SecurityValidationError("Failed to import configuration", [{ message: String(error) }]);
|
|
@@ -4,7 +4,10 @@
|
|
|
4
4
|
*/
|
|
5
5
|
|
|
6
6
|
import { EventEmitter } from "events";
|
|
7
|
-
import { SecurityUtils } from "./SecurityConfig";
|
|
7
|
+
import { SecurityUtils } from "./SecurityConfig.js";
|
|
8
|
+
import { LoggerFactory } from "../utils/logger.js";
|
|
9
|
+
|
|
10
|
+
const logger = LoggerFactory.security();
|
|
8
11
|
|
|
9
12
|
export interface SecurityEvent {
|
|
10
13
|
id: string;
|
|
@@ -19,9 +22,9 @@ export interface SecurityEvent {
|
|
|
19
22
|
userAgent?: string;
|
|
20
23
|
endpoint?: string;
|
|
21
24
|
method?: string;
|
|
22
|
-
payload?:
|
|
25
|
+
payload?: unknown;
|
|
23
26
|
error?: string;
|
|
24
|
-
metadata?: Record<string,
|
|
27
|
+
metadata?: Record<string, unknown>;
|
|
25
28
|
};
|
|
26
29
|
description: string;
|
|
27
30
|
riskScore: number;
|
|
@@ -131,12 +134,12 @@ export class SecurityMonitor extends EventEmitter {
|
|
|
131
134
|
*/
|
|
132
135
|
start(): void {
|
|
133
136
|
if (this.isMonitoring) {
|
|
134
|
-
|
|
137
|
+
logger.warn("Already monitoring");
|
|
135
138
|
return;
|
|
136
139
|
}
|
|
137
140
|
|
|
138
141
|
this.isMonitoring = true;
|
|
139
|
-
|
|
142
|
+
logger.info("Starting security monitoring");
|
|
140
143
|
|
|
141
144
|
// Start metrics collection
|
|
142
145
|
this.metricsInterval = setInterval(() => {
|
|
@@ -151,7 +154,7 @@ export class SecurityMonitor extends EventEmitter {
|
|
|
151
154
|
*/
|
|
152
155
|
stop(): void {
|
|
153
156
|
if (!this.isMonitoring) {
|
|
154
|
-
|
|
157
|
+
logger.warn("Not currently monitoring");
|
|
155
158
|
return;
|
|
156
159
|
}
|
|
157
160
|
|
|
@@ -162,7 +165,7 @@ export class SecurityMonitor extends EventEmitter {
|
|
|
162
165
|
this.metricsInterval = undefined;
|
|
163
166
|
}
|
|
164
167
|
|
|
165
|
-
|
|
168
|
+
logger.info("Stopped security monitoring");
|
|
166
169
|
this.emit("monitoring-stopped");
|
|
167
170
|
}
|
|
168
171
|
|
|
@@ -191,7 +194,7 @@ export class SecurityMonitor extends EventEmitter {
|
|
|
191
194
|
// Emit event for real-time processing
|
|
192
195
|
this.emit("security-event", event);
|
|
193
196
|
|
|
194
|
-
|
|
197
|
+
logger.info(`Logged ${event.severity} event: ${event.type} - ${event.description}`);
|
|
195
198
|
|
|
196
199
|
return event;
|
|
197
200
|
}
|
|
@@ -274,7 +277,7 @@ export class SecurityMonitor extends EventEmitter {
|
|
|
274
277
|
await this.executeLogAction(event);
|
|
275
278
|
break;
|
|
276
279
|
default:
|
|
277
|
-
|
|
280
|
+
logger.info(`Action ${type} queued for manual processing`, { type });
|
|
278
281
|
}
|
|
279
282
|
|
|
280
283
|
action.result = "success";
|
|
@@ -282,7 +285,7 @@ export class SecurityMonitor extends EventEmitter {
|
|
|
282
285
|
} catch (error) {
|
|
283
286
|
action.result = "failure";
|
|
284
287
|
action.details += ` - failed: ${error instanceof Error ? error.message : String(error)}`;
|
|
285
|
-
|
|
288
|
+
logger.error(`Action ${type} failed`, { type, error });
|
|
286
289
|
}
|
|
287
290
|
|
|
288
291
|
return action;
|
|
@@ -293,7 +296,7 @@ export class SecurityMonitor extends EventEmitter {
|
|
|
293
296
|
*/
|
|
294
297
|
private async executeBlockAction(event: SecurityEvent): Promise<void> {
|
|
295
298
|
if (event.details.ipAddress) {
|
|
296
|
-
|
|
299
|
+
logger.info(`Blocking IP: ${event.details.ipAddress}`);
|
|
297
300
|
// In a real implementation, this would interface with firewall/load balancer
|
|
298
301
|
this.emit("ip-blocked", { ip: event.details.ipAddress, reason: event.description });
|
|
299
302
|
}
|
|
@@ -304,7 +307,7 @@ export class SecurityMonitor extends EventEmitter {
|
|
|
304
307
|
*/
|
|
305
308
|
private async executeThrottleAction(event: SecurityEvent): Promise<void> {
|
|
306
309
|
if (event.details.userId) {
|
|
307
|
-
|
|
310
|
+
logger.info(`Throttling user: ${event.details.userId}`);
|
|
308
311
|
// In a real implementation, this would apply rate limiting
|
|
309
312
|
this.emit("user-throttled", { userId: event.details.userId, reason: event.description });
|
|
310
313
|
}
|
|
@@ -314,7 +317,7 @@ export class SecurityMonitor extends EventEmitter {
|
|
|
314
317
|
* Execute alert action
|
|
315
318
|
*/
|
|
316
319
|
private async executeAlertAction(event: SecurityEvent): Promise<void> {
|
|
317
|
-
|
|
320
|
+
logger.info(`Alert triggered for event: ${event.id}`);
|
|
318
321
|
this.emit("security-alert", event);
|
|
319
322
|
}
|
|
320
323
|
|
|
@@ -322,7 +325,7 @@ export class SecurityMonitor extends EventEmitter {
|
|
|
322
325
|
* Execute log action
|
|
323
326
|
*/
|
|
324
327
|
private async executeLogAction(event: SecurityEvent): Promise<void> {
|
|
325
|
-
|
|
328
|
+
logger.info(`Enhanced logging for event: ${event.id}`);
|
|
326
329
|
// Additional detailed logging would go here
|
|
327
330
|
}
|
|
328
331
|
|
|
@@ -346,7 +349,7 @@ export class SecurityMonitor extends EventEmitter {
|
|
|
346
349
|
|
|
347
350
|
this.alerts.push(alert);
|
|
348
351
|
|
|
349
|
-
|
|
352
|
+
logger.info(`Created ${alert.severity} alert: ${alert.title}`);
|
|
350
353
|
this.emit("alert-created", alert);
|
|
351
354
|
|
|
352
355
|
return alert;
|
|
@@ -611,9 +614,9 @@ export class SecurityMonitor extends EventEmitter {
|
|
|
611
614
|
/**
|
|
612
615
|
* Group array by property
|
|
613
616
|
*/
|
|
614
|
-
private groupBy(array:
|
|
615
|
-
return array.reduce((acc, item) => {
|
|
616
|
-
const key = item[property] || "unknown";
|
|
617
|
+
private groupBy(array: Array<Record<string, any>>, property: string): Record<string, number> { // eslint-disable-line @typescript-eslint/no-explicit-any
|
|
618
|
+
return array.reduce<Record<string, number>>((acc, item) => {
|
|
619
|
+
const key = (item && item[property]) || "unknown";
|
|
617
620
|
acc[key] = (acc[key] || 0) + 1;
|
|
618
621
|
return acc;
|
|
619
622
|
}, {});
|
|
@@ -664,7 +667,7 @@ export class SecurityMonitor extends EventEmitter {
|
|
|
664
667
|
*/
|
|
665
668
|
addThreatIntelligence(threat: ThreatIntelligence): void {
|
|
666
669
|
this.threatIntel.set(threat.value, threat);
|
|
667
|
-
|
|
670
|
+
logger.info(`Added threat intelligence: ${threat.type} - ${threat.value}`);
|
|
668
671
|
}
|
|
669
672
|
|
|
670
673
|
/**
|
|
@@ -673,7 +676,7 @@ export class SecurityMonitor extends EventEmitter {
|
|
|
673
676
|
removeThreatIntelligence(value: string): boolean {
|
|
674
677
|
const removed = this.threatIntel.delete(value);
|
|
675
678
|
if (removed) {
|
|
676
|
-
|
|
679
|
+
logger.info(`Removed threat intelligence: ${value}`);
|
|
677
680
|
}
|
|
678
681
|
return removed;
|
|
679
682
|
}
|
|
@@ -700,7 +703,7 @@ export class SecurityMonitor extends EventEmitter {
|
|
|
700
703
|
};
|
|
701
704
|
}
|
|
702
705
|
|
|
703
|
-
|
|
706
|
+
logger.info(`Updated alert ${alertId} status to ${status}`);
|
|
704
707
|
this.emit("alert-updated", alert);
|
|
705
708
|
return true;
|
|
706
709
|
}
|
|
@@ -5,8 +5,9 @@
|
|
|
5
5
|
|
|
6
6
|
import * as fs from "fs/promises";
|
|
7
7
|
import * as path from "path";
|
|
8
|
-
import { SecurityUtils } from "./SecurityConfig";
|
|
9
|
-
import { SecurityValidationError } from "./InputValidator";
|
|
8
|
+
import { SecurityUtils } from "./SecurityConfig.js";
|
|
9
|
+
import { SecurityValidationError } from "./InputValidator.js";
|
|
10
|
+
import { LoggerFactory } from "../utils/logger.js";
|
|
10
11
|
|
|
11
12
|
interface SecurityReviewRule {
|
|
12
13
|
id: string;
|
|
@@ -345,7 +346,8 @@ export class SecurityReviewer {
|
|
|
345
346
|
} = {},
|
|
346
347
|
): Promise<CodeReviewResult> {
|
|
347
348
|
const reviewId = SecurityUtils.generateSecureToken(16);
|
|
348
|
-
|
|
349
|
+
const logger = LoggerFactory.security();
|
|
350
|
+
logger.info("Reviewing file", { filePath, reviewId });
|
|
349
351
|
|
|
350
352
|
try {
|
|
351
353
|
const content = await fs.readFile(filePath, "utf-8");
|
|
@@ -376,11 +378,11 @@ export class SecurityReviewer {
|
|
|
376
378
|
};
|
|
377
379
|
|
|
378
380
|
this.reviewHistory.push(result);
|
|
379
|
-
|
|
381
|
+
logger.info("Review completed", { filePath, findingsCount: findings.length, reviewId });
|
|
380
382
|
|
|
381
383
|
return result;
|
|
382
384
|
} catch (error) {
|
|
383
|
-
|
|
385
|
+
logger.error("Review failed", { filePath, reviewId, error: error instanceof Error ? error.message : String(error) });
|
|
384
386
|
throw new SecurityValidationError("Security review failed", [{ message: String(error) }]);
|
|
385
387
|
}
|
|
386
388
|
}
|
|
@@ -398,7 +400,8 @@ export class SecurityReviewer {
|
|
|
398
400
|
aiAnalysis?: boolean;
|
|
399
401
|
} = {},
|
|
400
402
|
): Promise<CodeReviewResult[]> {
|
|
401
|
-
|
|
403
|
+
const logger = LoggerFactory.security();
|
|
404
|
+
logger.info("Reviewing directory", { dirPath });
|
|
402
405
|
|
|
403
406
|
const results: CodeReviewResult[] = [];
|
|
404
407
|
const filePattern = options.filePattern || /\.(ts|js|jsx|tsx)$/;
|
|
@@ -420,7 +423,7 @@ export class SecurityReviewer {
|
|
|
420
423
|
|
|
421
424
|
return results;
|
|
422
425
|
} catch (error) {
|
|
423
|
-
|
|
426
|
+
logger.error("Directory review failed", { dirPath, error: error instanceof Error ? error.message : String(error) });
|
|
424
427
|
throw new SecurityValidationError("Directory review failed", [{ message: String(error) }]);
|
|
425
428
|
}
|
|
426
429
|
}
|
package/src/security/index.ts
CHANGED
|
@@ -4,8 +4,9 @@
|
|
|
4
4
|
*/
|
|
5
5
|
|
|
6
6
|
// Core Security Components
|
|
7
|
-
export { SecurityConfig, SecurityUtils, createSecureError, getEnvironmentSecurity } from "./SecurityConfig";
|
|
8
|
-
import { SecurityValidationError } from "./InputValidator";
|
|
7
|
+
export { SecurityConfig, SecurityUtils, createSecureError, getEnvironmentSecurity } from "./SecurityConfig.js";
|
|
8
|
+
import { SecurityValidationError } from "./InputValidator.js";
|
|
9
|
+
import { LoggerFactory } from "../utils/logger.js";
|
|
9
10
|
export {
|
|
10
11
|
InputSanitizer,
|
|
11
12
|
SecuritySchemas,
|
|
@@ -13,31 +14,32 @@ export {
|
|
|
13
14
|
SecurityValidationError,
|
|
14
15
|
validateSecurity,
|
|
15
16
|
ToolSchemas,
|
|
16
|
-
} from "./InputValidator";
|
|
17
|
+
} from "./InputValidator.js";
|
|
17
18
|
|
|
18
19
|
// AI-Powered Security Scanner
|
|
19
|
-
import { AISecurityScanner } from "./AISecurityScanner";
|
|
20
|
-
|
|
20
|
+
import { AISecurityScanner } from "./AISecurityScanner.js";
|
|
21
|
+
import type { SecurityScanResult } from "./AISecurityScanner.js";
|
|
22
|
+
export { AISecurityScanner } from "./AISecurityScanner.js";
|
|
21
23
|
|
|
22
24
|
// Automated Remediation System
|
|
23
|
-
import { AutomatedRemediation, RemediationResult as _RemediationResult } from "./AutomatedRemediation";
|
|
24
|
-
export { AutomatedRemediation, RemediationResult } from "./AutomatedRemediation";
|
|
25
|
+
import { AutomatedRemediation, RemediationResult as _RemediationResult } from "./AutomatedRemediation.js";
|
|
26
|
+
export { AutomatedRemediation, RemediationResult } from "./AutomatedRemediation.js";
|
|
25
27
|
|
|
26
28
|
// Security Code Reviewer
|
|
27
|
-
import { SecurityReviewer, CodeReviewResult as _CodeReviewResult } from "./SecurityReviewer";
|
|
28
|
-
export { SecurityReviewer, CodeReviewResult } from "./SecurityReviewer";
|
|
29
|
+
import { SecurityReviewer, CodeReviewResult as _CodeReviewResult } from "./SecurityReviewer.js";
|
|
30
|
+
export { SecurityReviewer, CodeReviewResult } from "./SecurityReviewer.js";
|
|
29
31
|
|
|
30
32
|
// Security Configuration Manager
|
|
31
|
-
import { SecurityConfigManager } from "./SecurityConfigManager";
|
|
32
|
-
export { SecurityConfigManager } from "./SecurityConfigManager";
|
|
33
|
+
import { SecurityConfigManager } from "./SecurityConfigManager.js";
|
|
34
|
+
export { SecurityConfigManager } from "./SecurityConfigManager.js";
|
|
33
35
|
|
|
34
36
|
// Security Monitoring and Alerting
|
|
35
|
-
import { SecurityMonitor, SecurityEvent as _SecurityEvent } from "./SecurityMonitoring";
|
|
36
|
-
export { SecurityMonitor, SecurityEvent } from "./SecurityMonitoring";
|
|
37
|
+
import { SecurityMonitor, SecurityEvent as _SecurityEvent } from "./SecurityMonitoring.js";
|
|
38
|
+
export { SecurityMonitor, SecurityEvent } from "./SecurityMonitoring.js";
|
|
37
39
|
|
|
38
40
|
// CI/CD Pipeline Integration
|
|
39
|
-
import { SecurityCIPipeline, PipelineSecurityReport as _PipelineSecurityReport } from "./SecurityCIPipeline";
|
|
40
|
-
export { SecurityCIPipeline, PipelineSecurityReport } from "./SecurityCIPipeline";
|
|
41
|
+
import { SecurityCIPipeline, PipelineSecurityReport as _PipelineSecurityReport } from "./SecurityCIPipeline.js";
|
|
42
|
+
export { SecurityCIPipeline, PipelineSecurityReport } from "./SecurityCIPipeline.js";
|
|
41
43
|
|
|
42
44
|
// Type definitions for external use
|
|
43
45
|
export interface SecurityScanOptions {
|
|
@@ -87,11 +89,13 @@ export class SecuritySystem {
|
|
|
87
89
|
*/
|
|
88
90
|
async initialize(): Promise<void> {
|
|
89
91
|
if (this.initialized) {
|
|
90
|
-
|
|
92
|
+
const logger = LoggerFactory.security();
|
|
93
|
+
logger.info("Security system already initialized");
|
|
91
94
|
return;
|
|
92
95
|
}
|
|
93
96
|
|
|
94
|
-
|
|
97
|
+
const logger = LoggerFactory.security();
|
|
98
|
+
logger.info("Initializing comprehensive security system");
|
|
95
99
|
|
|
96
100
|
try {
|
|
97
101
|
// Initialize all components
|
|
@@ -102,9 +106,11 @@ export class SecuritySystem {
|
|
|
102
106
|
this.monitor.start();
|
|
103
107
|
|
|
104
108
|
this.initialized = true;
|
|
105
|
-
|
|
109
|
+
logger.info("Security system initialized successfully");
|
|
106
110
|
} catch (error) {
|
|
107
|
-
|
|
111
|
+
logger.error("Security system initialization failed", {
|
|
112
|
+
error: error instanceof Error ? error.message : String(error),
|
|
113
|
+
});
|
|
108
114
|
throw new SecurityValidationError("Security system initialization failed", [{ message: String(error) }]);
|
|
109
115
|
}
|
|
110
116
|
}
|
|
@@ -128,26 +134,54 @@ export class SecuritySystem {
|
|
|
128
134
|
/**
|
|
129
135
|
* Create and execute remediation plan
|
|
130
136
|
*/
|
|
131
|
-
async remediate(scanResult:
|
|
137
|
+
async remediate(scanResult: unknown, dryRun = false): Promise<_RemediationResult[]> {
|
|
132
138
|
this.ensureInitialized();
|
|
133
|
-
const plan = await this.remediation.createRemediationPlan(scanResult);
|
|
139
|
+
const plan = await this.remediation.createRemediationPlan(scanResult as SecurityScanResult);
|
|
134
140
|
return await this.remediation.executeRemediationPlan(plan, { dryRun });
|
|
135
141
|
}
|
|
136
142
|
|
|
137
143
|
/**
|
|
138
144
|
* Execute security gates for CI/CD
|
|
139
145
|
*/
|
|
140
|
-
async executeGates(stage: string, context:
|
|
146
|
+
async executeGates(stage: string, context: unknown, options?: SecurityGateOptions): Promise<_PipelineSecurityReport> {
|
|
141
147
|
this.ensureInitialized();
|
|
142
|
-
|
|
148
|
+
const validStages = ["pre-commit", "pre-build", "pre-deploy", "post-deploy"] as const;
|
|
149
|
+
type ValidStage = (typeof validStages)[number];
|
|
150
|
+
const validStage = validStages.includes(stage as ValidStage) ? (stage as ValidStage) : "pre-commit";
|
|
151
|
+
|
|
152
|
+
// Create a minimal PipelineContext from unknown input
|
|
153
|
+
const pipelineContext = {
|
|
154
|
+
repositoryUrl: "",
|
|
155
|
+
branch: "",
|
|
156
|
+
commit: "",
|
|
157
|
+
author: "",
|
|
158
|
+
environment: "development",
|
|
159
|
+
buildNumber: "",
|
|
160
|
+
artifacts: [],
|
|
161
|
+
...(typeof context === "object" && context !== null ? context : {}),
|
|
162
|
+
};
|
|
163
|
+
|
|
164
|
+
return await this.pipeline.executeSecurityGates(validStage, pipelineContext, options);
|
|
143
165
|
}
|
|
144
166
|
|
|
145
167
|
/**
|
|
146
168
|
* Log security event
|
|
147
169
|
*/
|
|
148
|
-
async logEvent(eventData:
|
|
170
|
+
async logEvent(eventData: unknown): Promise<_SecurityEvent> {
|
|
149
171
|
this.ensureInitialized();
|
|
150
|
-
|
|
172
|
+
|
|
173
|
+
// Create a minimal SecurityEvent from unknown input
|
|
174
|
+
const securityEventData = {
|
|
175
|
+
type: "system" as const,
|
|
176
|
+
description: "Security event",
|
|
177
|
+
severity: "low" as const,
|
|
178
|
+
source: "unknown",
|
|
179
|
+
details: {},
|
|
180
|
+
riskScore: 0,
|
|
181
|
+
...(typeof eventData === "object" && eventData !== null ? eventData : {}),
|
|
182
|
+
};
|
|
183
|
+
|
|
184
|
+
return await this.monitor.logSecurityEvent(securityEventData);
|
|
151
185
|
}
|
|
152
186
|
|
|
153
187
|
/**
|
|
@@ -171,12 +205,13 @@ export class SecuritySystem {
|
|
|
171
205
|
return;
|
|
172
206
|
}
|
|
173
207
|
|
|
174
|
-
|
|
208
|
+
const logger = LoggerFactory.security();
|
|
209
|
+
logger.info("Shutting down security system");
|
|
175
210
|
|
|
176
211
|
this.monitor.stop();
|
|
177
212
|
this.initialized = false;
|
|
178
213
|
|
|
179
|
-
|
|
214
|
+
logger.info("Security system shutdown complete");
|
|
180
215
|
}
|
|
181
216
|
|
|
182
217
|
/**
|
|
@@ -225,12 +260,12 @@ export const security = {
|
|
|
225
260
|
/**
|
|
226
261
|
* Quick remediation
|
|
227
262
|
*/
|
|
228
|
-
remediate: (scanResult:
|
|
263
|
+
remediate: (scanResult: unknown, dryRun = true) => securitySystem.remediate(scanResult, dryRun),
|
|
229
264
|
|
|
230
265
|
/**
|
|
231
266
|
* Log security event
|
|
232
267
|
*/
|
|
233
|
-
logEvent: (eventData:
|
|
268
|
+
logEvent: (eventData: unknown) => securitySystem.logEvent(eventData),
|
|
234
269
|
|
|
235
270
|
/**
|
|
236
271
|
* Get security status
|