@jagilber-org/index-server 1.19.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 +1218 -0
- package/CODE_OF_CONDUCT.md +49 -0
- package/CONTRIBUTING.md +75 -0
- package/LICENSE +21 -0
- package/README.md +523 -0
- package/SECURITY.md +50 -0
- package/dist/config/configUtils.d.ts +11 -0
- package/dist/config/configUtils.js +87 -0
- package/dist/config/dashboardConfig.d.ts +45 -0
- package/dist/config/dashboardConfig.js +63 -0
- package/dist/config/defaultValues.d.ts +61 -0
- package/dist/config/defaultValues.js +70 -0
- package/dist/config/dirConstants.d.ts +17 -0
- package/dist/config/dirConstants.js +28 -0
- package/dist/config/featureConfig.d.ts +61 -0
- package/dist/config/featureConfig.js +121 -0
- package/dist/config/runtimeConfig.d.ts +145 -0
- package/dist/config/runtimeConfig.js +334 -0
- package/dist/config/serverConfig.d.ts +90 -0
- package/dist/config/serverConfig.js +164 -0
- package/dist/dashboard/analytics/AnalyticsEngine.d.ts +142 -0
- package/dist/dashboard/analytics/AnalyticsEngine.js +373 -0
- package/dist/dashboard/analytics/BusinessIntelligence.d.ts +187 -0
- package/dist/dashboard/analytics/BusinessIntelligence.js +594 -0
- package/dist/dashboard/client/admin.html +2150 -0
- package/dist/dashboard/client/chunks/mermaid-layout-elk.esm.min/chunk-SP2CHFBE.mjs +1 -0
- package/dist/dashboard/client/chunks/mermaid-layout-elk.esm.min/render-T6MDALS3.mjs +27 -0
- package/dist/dashboard/client/css/admin.css +1466 -0
- package/dist/dashboard/client/js/admin.boot.js +359 -0
- package/dist/dashboard/client/js/admin.config.js +196 -0
- package/dist/dashboard/client/js/admin.embeddings.js +425 -0
- package/dist/dashboard/client/js/admin.graph.js +583 -0
- package/dist/dashboard/client/js/admin.instances.js +120 -0
- package/dist/dashboard/client/js/admin.instructions.js +552 -0
- package/dist/dashboard/client/js/admin.logs.js +113 -0
- package/dist/dashboard/client/js/admin.maintenance.js +354 -0
- package/dist/dashboard/client/js/admin.messaging.js +635 -0
- package/dist/dashboard/client/js/admin.monitor.js +181 -0
- package/dist/dashboard/client/js/admin.overview.js +221 -0
- package/dist/dashboard/client/js/admin.performance.js +61 -0
- package/dist/dashboard/client/js/admin.sessions.js +293 -0
- package/dist/dashboard/client/js/admin.sqlite.js +366 -0
- package/dist/dashboard/client/js/admin.utils.js +49 -0
- package/dist/dashboard/client/js/chart.umd.js +14 -0
- package/dist/dashboard/client/js/elk.bundled.js +6696 -0
- package/dist/dashboard/client/js/marked.umd.js +74 -0
- package/dist/dashboard/client/js/mermaid.min.js +3022 -0
- package/dist/dashboard/client/mermaid-layout-elk.esm.min.mjs +1 -0
- package/dist/dashboard/export/DataExporter.d.ts +169 -0
- package/dist/dashboard/export/DataExporter.js +737 -0
- package/dist/dashboard/export/exporters/csvExporter.d.ts +11 -0
- package/dist/dashboard/export/exporters/csvExporter.js +46 -0
- package/dist/dashboard/export/exporters/exportTypes.d.ts +89 -0
- package/dist/dashboard/export/exporters/exportTypes.js +5 -0
- package/dist/dashboard/export/exporters/jsonExporter.d.ts +7 -0
- package/dist/dashboard/export/exporters/jsonExporter.js +22 -0
- package/dist/dashboard/export/exporters/xmlExporter.d.ts +17 -0
- package/dist/dashboard/export/exporters/xmlExporter.js +175 -0
- package/dist/dashboard/integration/APIIntegration.d.ts +41 -0
- package/dist/dashboard/integration/APIIntegration.js +95 -0
- package/dist/dashboard/security/SecurityMonitor.d.ts +167 -0
- package/dist/dashboard/security/SecurityMonitor.js +559 -0
- package/dist/dashboard/server/AdminPanel.d.ts +183 -0
- package/dist/dashboard/server/AdminPanel.js +792 -0
- package/dist/dashboard/server/AdminPanelConfig.d.ts +42 -0
- package/dist/dashboard/server/AdminPanelConfig.js +80 -0
- package/dist/dashboard/server/AdminPanelState.d.ts +47 -0
- package/dist/dashboard/server/AdminPanelState.js +214 -0
- package/dist/dashboard/server/ApiRoutes.d.ts +17 -0
- package/dist/dashboard/server/ApiRoutes.js +149 -0
- package/dist/dashboard/server/DashboardServer.d.ts +49 -0
- package/dist/dashboard/server/DashboardServer.js +159 -0
- package/dist/dashboard/server/FileMetricsStorage.d.ts +49 -0
- package/dist/dashboard/server/FileMetricsStorage.js +195 -0
- package/dist/dashboard/server/HttpTransport.d.ts +23 -0
- package/dist/dashboard/server/HttpTransport.js +116 -0
- package/dist/dashboard/server/InstanceManager.d.ts +53 -0
- package/dist/dashboard/server/InstanceManager.js +284 -0
- package/dist/dashboard/server/KnowledgeStore.d.ts +35 -0
- package/dist/dashboard/server/KnowledgeStore.js +105 -0
- package/dist/dashboard/server/LeaderElection.d.ts +81 -0
- package/dist/dashboard/server/LeaderElection.js +268 -0
- package/dist/dashboard/server/MetricsCollector.d.ts +200 -0
- package/dist/dashboard/server/MetricsCollector.js +803 -0
- package/dist/dashboard/server/SessionPersistenceManager.d.ts +88 -0
- package/dist/dashboard/server/SessionPersistenceManager.js +457 -0
- package/dist/dashboard/server/ThinClient.d.ts +64 -0
- package/dist/dashboard/server/ThinClient.js +237 -0
- package/dist/dashboard/server/WebSocketManager.d.ts +161 -0
- package/dist/dashboard/server/WebSocketManager.js +463 -0
- package/dist/dashboard/server/httpLifecycle.d.ts +17 -0
- package/dist/dashboard/server/httpLifecycle.js +35 -0
- package/dist/dashboard/server/legacyDashboardHtml.d.ts +9 -0
- package/dist/dashboard/server/legacyDashboardHtml.js +618 -0
- package/dist/dashboard/server/legacyDashboardStyles.d.ts +5 -0
- package/dist/dashboard/server/legacyDashboardStyles.js +490 -0
- package/dist/dashboard/server/metricsAggregation.d.ts +252 -0
- package/dist/dashboard/server/metricsAggregation.js +206 -0
- package/dist/dashboard/server/metricsSerializer.d.ts +25 -0
- package/dist/dashboard/server/metricsSerializer.js +195 -0
- package/dist/dashboard/server/routes/admin.routes.d.ts +16 -0
- package/dist/dashboard/server/routes/admin.routes.js +596 -0
- package/dist/dashboard/server/routes/alerts.routes.d.ts +7 -0
- package/dist/dashboard/server/routes/alerts.routes.js +93 -0
- package/dist/dashboard/server/routes/api.feedback.routes.d.ts +73 -0
- package/dist/dashboard/server/routes/api.feedback.routes.js +171 -0
- package/dist/dashboard/server/routes/api.instructions.routes.d.ts +101 -0
- package/dist/dashboard/server/routes/api.instructions.routes.js +213 -0
- package/dist/dashboard/server/routes/api.usage.routes.d.ts +57 -0
- package/dist/dashboard/server/routes/api.usage.routes.js +374 -0
- package/dist/dashboard/server/routes/embeddings.routes.d.ts +6 -0
- package/dist/dashboard/server/routes/embeddings.routes.js +246 -0
- package/dist/dashboard/server/routes/graph.routes.d.ts +6 -0
- package/dist/dashboard/server/routes/graph.routes.js +280 -0
- package/dist/dashboard/server/routes/index.d.ts +38 -0
- package/dist/dashboard/server/routes/index.js +194 -0
- package/dist/dashboard/server/routes/instances.routes.d.ts +6 -0
- package/dist/dashboard/server/routes/instances.routes.js +35 -0
- package/dist/dashboard/server/routes/instructions.routes.d.ts +8 -0
- package/dist/dashboard/server/routes/instructions.routes.js +336 -0
- package/dist/dashboard/server/routes/knowledge.routes.d.ts +6 -0
- package/dist/dashboard/server/routes/knowledge.routes.js +82 -0
- package/dist/dashboard/server/routes/logs.routes.d.ts +6 -0
- package/dist/dashboard/server/routes/logs.routes.js +164 -0
- package/dist/dashboard/server/routes/messaging.routes.d.ts +16 -0
- package/dist/dashboard/server/routes/messaging.routes.js +293 -0
- package/dist/dashboard/server/routes/metrics.routes.d.ts +10 -0
- package/dist/dashboard/server/routes/metrics.routes.js +346 -0
- package/dist/dashboard/server/routes/scripts.routes.d.ts +9 -0
- package/dist/dashboard/server/routes/scripts.routes.js +84 -0
- package/dist/dashboard/server/routes/sqlite.routes.d.ts +9 -0
- package/dist/dashboard/server/routes/sqlite.routes.js +569 -0
- package/dist/dashboard/server/routes/status.routes.d.ts +7 -0
- package/dist/dashboard/server/routes/status.routes.js +183 -0
- package/dist/dashboard/server/routes/synthetic.routes.d.ts +7 -0
- package/dist/dashboard/server/routes/synthetic.routes.js +195 -0
- package/dist/dashboard/server/routes/tools.routes.d.ts +6 -0
- package/dist/dashboard/server/routes/tools.routes.js +46 -0
- package/dist/dashboard/server/routes/usage.routes.d.ts +6 -0
- package/dist/dashboard/server/routes/usage.routes.js +25 -0
- package/dist/dashboard/server/wsInit.d.ts +16 -0
- package/dist/dashboard/server/wsInit.js +35 -0
- package/dist/externalClientLib.d.ts +1 -0
- package/dist/externalClientLib.js +2 -0
- package/dist/minimal/index.d.ts +1 -0
- package/dist/minimal/index.js +140 -0
- package/dist/models/SessionPersistence.d.ts +115 -0
- package/dist/models/SessionPersistence.js +66 -0
- package/dist/models/instruction.d.ts +45 -0
- package/dist/models/instruction.js +2 -0
- package/dist/perf/benchmark.d.ts +1 -0
- package/dist/perf/benchmark.js +50 -0
- package/dist/portableClientWrapper.d.ts +1 -0
- package/dist/portableClientWrapper.js +2 -0
- package/dist/schemas/index.d.ts +128 -0
- package/dist/schemas/index.js +371 -0
- package/dist/scripts/runPerformanceBaseline.d.ts +1 -0
- package/dist/scripts/runPerformanceBaseline.js +17 -0
- package/dist/server/handshakeManager.d.ts +25 -0
- package/dist/server/handshakeManager.js +472 -0
- package/dist/server/index-server.d.ts +56 -0
- package/dist/server/index-server.js +822 -0
- package/dist/server/registry.d.ts +44 -0
- package/dist/server/registry.js +236 -0
- package/dist/server/sdkServer.d.ts +8 -0
- package/dist/server/sdkServer.js +299 -0
- package/dist/server/shutdownGuard.d.ts +41 -0
- package/dist/server/shutdownGuard.js +52 -0
- package/dist/server/thin-client.d.ts +22 -0
- package/dist/server/thin-client.js +111 -0
- package/dist/server/transport.d.ts +41 -0
- package/dist/server/transport.js +312 -0
- package/dist/server/transportFactory.d.ts +21 -0
- package/dist/server/transportFactory.js +429 -0
- package/dist/services/atomicFs.d.ts +22 -0
- package/dist/services/atomicFs.js +103 -0
- package/dist/services/auditLog.d.ts +38 -0
- package/dist/services/auditLog.js +142 -0
- package/dist/services/autoBackup.d.ts +14 -0
- package/dist/services/autoBackup.js +171 -0
- package/dist/services/autoSplit.d.ts +32 -0
- package/dist/services/autoSplit.js +113 -0
- package/dist/services/backupZip.d.ts +25 -0
- package/dist/services/backupZip.js +110 -0
- package/dist/services/bootstrapGating.d.ts +123 -0
- package/dist/services/bootstrapGating.js +221 -0
- package/dist/services/canonical.d.ts +23 -0
- package/dist/services/canonical.js +65 -0
- package/dist/services/categoryRules.d.ts +7 -0
- package/dist/services/categoryRules.js +37 -0
- package/dist/services/classificationService.d.ts +42 -0
- package/dist/services/classificationService.js +168 -0
- package/dist/services/embeddingService.d.ts +62 -0
- package/dist/services/embeddingService.js +259 -0
- package/dist/services/errors.d.ts +22 -0
- package/dist/services/errors.js +31 -0
- package/dist/services/featureFlags.d.ts +25 -0
- package/dist/services/featureFlags.js +89 -0
- package/dist/services/features.d.ts +13 -0
- package/dist/services/features.js +35 -0
- package/dist/services/handlers/instructions.add.d.ts +1 -0
- package/dist/services/handlers/instructions.add.js +496 -0
- package/dist/services/handlers/instructions.groom.d.ts +1 -0
- package/dist/services/handlers/instructions.groom.js +523 -0
- package/dist/services/handlers/instructions.import.d.ts +1 -0
- package/dist/services/handlers/instructions.import.js +173 -0
- package/dist/services/handlers/instructions.patch.d.ts +1 -0
- package/dist/services/handlers/instructions.patch.js +167 -0
- package/dist/services/handlers/instructions.query.d.ts +163 -0
- package/dist/services/handlers/instructions.query.js +522 -0
- package/dist/services/handlers/instructions.reload.d.ts +1 -0
- package/dist/services/handlers/instructions.reload.js +13 -0
- package/dist/services/handlers/instructions.remove.d.ts +1 -0
- package/dist/services/handlers/instructions.remove.js +118 -0
- package/dist/services/handlers/instructions.shared.d.ts +31 -0
- package/dist/services/handlers/instructions.shared.js +124 -0
- package/dist/services/handlers.activation.d.ts +1 -0
- package/dist/services/handlers.activation.js +203 -0
- package/dist/services/handlers.bootstrap.d.ts +1 -0
- package/dist/services/handlers.bootstrap.js +38 -0
- package/dist/services/handlers.dashboardConfig.d.ts +34 -0
- package/dist/services/handlers.dashboardConfig.js +108 -0
- package/dist/services/handlers.diagnostics.d.ts +1 -0
- package/dist/services/handlers.diagnostics.js +64 -0
- package/dist/services/handlers.feedback.d.ts +15 -0
- package/dist/services/handlers.feedback.js +378 -0
- package/dist/services/handlers.gates.d.ts +1 -0
- package/dist/services/handlers.gates.js +46 -0
- package/dist/services/handlers.graph.d.ts +53 -0
- package/dist/services/handlers.graph.js +231 -0
- package/dist/services/handlers.help.d.ts +1 -0
- package/dist/services/handlers.help.js +119 -0
- package/dist/services/handlers.instructionSchema.d.ts +1 -0
- package/dist/services/handlers.instructionSchema.js +227 -0
- package/dist/services/handlers.instructions.d.ts +8 -0
- package/dist/services/handlers.instructions.js +14 -0
- package/dist/services/handlers.instructionsDiagnostics.d.ts +1 -0
- package/dist/services/handlers.instructionsDiagnostics.js +14 -0
- package/dist/services/handlers.integrity.d.ts +1 -0
- package/dist/services/handlers.integrity.js +35 -0
- package/dist/services/handlers.manifest.d.ts +1 -0
- package/dist/services/handlers.manifest.js +24 -0
- package/dist/services/handlers.messaging.d.ts +12 -0
- package/dist/services/handlers.messaging.js +203 -0
- package/dist/services/handlers.metrics.d.ts +1 -0
- package/dist/services/handlers.metrics.js +43 -0
- package/dist/services/handlers.promote.d.ts +1 -0
- package/dist/services/handlers.promote.js +306 -0
- package/dist/services/handlers.prompt.d.ts +1 -0
- package/dist/services/handlers.prompt.js +7 -0
- package/dist/services/handlers.search.d.ts +69 -0
- package/dist/services/handlers.search.js +645 -0
- package/dist/services/handlers.testPrimitive.d.ts +1 -0
- package/dist/services/handlers.testPrimitive.js +5 -0
- package/dist/services/handlers.trace.d.ts +1 -0
- package/dist/services/handlers.trace.js +31 -0
- package/dist/services/handlers.usage.d.ts +1 -0
- package/dist/services/handlers.usage.js +11 -0
- package/dist/services/hotScore.d.ts +137 -0
- package/dist/services/hotScore.js +244 -0
- package/dist/services/indexContext.d.ts +117 -0
- package/dist/services/indexContext.js +968 -0
- package/dist/services/indexLoader.d.ts +44 -0
- package/dist/services/indexLoader.js +921 -0
- package/dist/services/indexRepository.d.ts +32 -0
- package/dist/services/indexRepository.js +71 -0
- package/dist/services/indexingService.d.ts +1 -0
- package/dist/services/indexingService.js +2 -0
- package/dist/services/instructions.dispatcher.d.ts +1 -0
- package/dist/services/instructions.dispatcher.js +231 -0
- package/dist/services/logPrefix.d.ts +1 -0
- package/dist/services/logPrefix.js +30 -0
- package/dist/services/logger.d.ts +52 -0
- package/dist/services/logger.js +268 -0
- package/dist/services/manifestManager.d.ts +82 -0
- package/dist/services/manifestManager.js +200 -0
- package/dist/services/messaging/agentMailbox.d.ts +60 -0
- package/dist/services/messaging/agentMailbox.js +353 -0
- package/dist/services/messaging/messagingPersistence.d.ts +20 -0
- package/dist/services/messaging/messagingPersistence.js +111 -0
- package/dist/services/messaging/messagingTypes.d.ts +150 -0
- package/dist/services/messaging/messagingTypes.js +66 -0
- package/dist/services/ownershipService.d.ts +1 -0
- package/dist/services/ownershipService.js +38 -0
- package/dist/services/performanceBaseline.d.ts +19 -0
- package/dist/services/performanceBaseline.js +210 -0
- package/dist/services/preflight.d.ts +12 -0
- package/dist/services/preflight.js +79 -0
- package/dist/services/promptReviewService.d.ts +44 -0
- package/dist/services/promptReviewService.js +101 -0
- package/dist/services/responseEnvelope.d.ts +6 -0
- package/dist/services/responseEnvelope.js +25 -0
- package/dist/services/seedBootstrap.d.ts +34 -0
- package/dist/services/seedBootstrap.js +427 -0
- package/dist/services/storage/factory.d.ts +17 -0
- package/dist/services/storage/factory.js +35 -0
- package/dist/services/storage/hashUtils.d.ts +11 -0
- package/dist/services/storage/hashUtils.js +35 -0
- package/dist/services/storage/index.d.ts +12 -0
- package/dist/services/storage/index.js +18 -0
- package/dist/services/storage/jsonFileStore.d.ts +32 -0
- package/dist/services/storage/jsonFileStore.js +241 -0
- package/dist/services/storage/migrationEngine.d.ts +35 -0
- package/dist/services/storage/migrationEngine.js +93 -0
- package/dist/services/storage/sqliteMessageStore.d.ts +53 -0
- package/dist/services/storage/sqliteMessageStore.js +146 -0
- package/dist/services/storage/sqliteSchema.d.ts +12 -0
- package/dist/services/storage/sqliteSchema.js +122 -0
- package/dist/services/storage/sqliteStore.d.ts +41 -0
- package/dist/services/storage/sqliteStore.js +339 -0
- package/dist/services/storage/sqliteUsageStore.d.ts +35 -0
- package/dist/services/storage/sqliteUsageStore.js +94 -0
- package/dist/services/storage/types.d.ts +171 -0
- package/dist/services/storage/types.js +12 -0
- package/dist/services/toolHandlers.d.ts +23 -0
- package/dist/services/toolHandlers.js +50 -0
- package/dist/services/toolRegistry.d.ts +20 -0
- package/dist/services/toolRegistry.js +490 -0
- package/dist/services/toolRegistry.zod.d.ts +10 -0
- package/dist/services/toolRegistry.zod.js +323 -0
- package/dist/services/tracing.d.ts +26 -0
- package/dist/services/tracing.js +260 -0
- package/dist/services/usageBuckets.d.ts +161 -0
- package/dist/services/usageBuckets.js +364 -0
- package/dist/services/validationService.d.ts +38 -0
- package/dist/services/validationService.js +125 -0
- package/dist/utils/BufferRing.d.ts +203 -0
- package/dist/utils/BufferRing.js +551 -0
- package/dist/utils/BufferRingExamples.d.ts +55 -0
- package/dist/utils/BufferRingExamples.js +188 -0
- package/dist/utils/envUtils.d.ts +42 -0
- package/dist/utils/envUtils.js +80 -0
- package/dist/utils/memoryMonitor.d.ts +83 -0
- package/dist/utils/memoryMonitor.js +275 -0
- package/dist/versioning/schemaVersion.d.ts +6 -0
- package/dist/versioning/schemaVersion.js +93 -0
- package/package.json +134 -0
- package/schemas/README.md +13 -0
- package/schemas/feedback-entry.schema.json +27 -0
- package/schemas/graph-export-v2.schema.json +60 -0
- package/schemas/index-server.code-schema.json +38477 -0
- package/schemas/instruction.schema.json +262 -0
- package/schemas/json-schema/SessionPersistence-persisted-admin-session.schema.json +54 -0
- package/schemas/json-schema/SessionPersistence-persisted-session-history-entry.schema.json +51 -0
- package/schemas/json-schema/SessionPersistence-persisted-web-socket-connection.schema.json +54 -0
- package/schemas/json-schema/SessionPersistence-session-persistence-config.schema.json +110 -0
- package/schemas/json-schema/SessionPersistence-session-persistence-data.schema.json +229 -0
- package/schemas/json-schema/SessionPersistence-session-persistence-manifest.schema.json +109 -0
- package/schemas/json-schema/SessionPersistence-session-persistence-metadata.schema.json +55 -0
- package/schemas/json-schema/instruction-audience-scope.schema.json +14 -0
- package/schemas/json-schema/instruction-content-type.schema.json +17 -0
- package/schemas/json-schema/instruction-instruction-entry.schema.json +206 -0
- package/schemas/json-schema/instruction-requirement-level.schema.json +16 -0
- package/schemas/manifest.json +78 -0
- package/schemas/manifest.schema.json +33 -0
- package/schemas/usage-batch.schema.json +16 -0
- package/schemas/usage-buckets.schema.json +30 -0
- package/schemas/usage-event.schema.json +17 -0
- package/scripts/copy-dashboard-assets.mjs +170 -0
- package/scripts/setup-hooks.cjs +28 -0
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* CSV and Excel format exporters for the DataExporter system.
|
|
3
|
+
*/
|
|
4
|
+
/**
|
|
5
|
+
* Write data to a CSV file, optionally compressing afterwards.
|
|
6
|
+
*/
|
|
7
|
+
export declare function exportCSV(data: unknown[], outputPath: string, compress: boolean): Promise<void>;
|
|
8
|
+
/**
|
|
9
|
+
* Export data as Excel (simplified — delegates to CSV with a .csv extension).
|
|
10
|
+
*/
|
|
11
|
+
export declare function exportExcel(data: unknown[], outputPath: string, compress: boolean): Promise<void>;
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* CSV and Excel format exporters for the DataExporter system.
|
|
4
|
+
*/
|
|
5
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
6
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
7
|
+
};
|
|
8
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
9
|
+
exports.exportCSV = exportCSV;
|
|
10
|
+
exports.exportExcel = exportExcel;
|
|
11
|
+
const fs_1 = __importDefault(require("fs"));
|
|
12
|
+
const path_1 = __importDefault(require("path"));
|
|
13
|
+
/**
|
|
14
|
+
* Write data to a CSV file, optionally compressing afterwards.
|
|
15
|
+
*/
|
|
16
|
+
async function exportCSV(data, outputPath, compress) {
|
|
17
|
+
if (!data.length) {
|
|
18
|
+
await fs_1.default.promises.writeFile(outputPath, '', 'utf8');
|
|
19
|
+
return;
|
|
20
|
+
}
|
|
21
|
+
await fs_1.default.promises.mkdir(path_1.default.dirname(outputPath), { recursive: true });
|
|
22
|
+
const headers = Object.keys(data[0]);
|
|
23
|
+
const csvRows = [
|
|
24
|
+
headers.join(','),
|
|
25
|
+
...data.map(row => {
|
|
26
|
+
const rowRecord = row;
|
|
27
|
+
return headers.map(header => {
|
|
28
|
+
const value = rowRecord[header];
|
|
29
|
+
const stringValue = String(value || '');
|
|
30
|
+
return stringValue.includes(',') || stringValue.includes('"')
|
|
31
|
+
? `"${stringValue.replace(/"/g, '""')}"`
|
|
32
|
+
: stringValue;
|
|
33
|
+
}).join(',');
|
|
34
|
+
})
|
|
35
|
+
];
|
|
36
|
+
await fs_1.default.promises.writeFile(outputPath, csvRows.join('\n'), 'utf8');
|
|
37
|
+
if (compress) {
|
|
38
|
+
console.log(`Compressing file: ${outputPath}`);
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
/**
|
|
42
|
+
* Export data as Excel (simplified — delegates to CSV with a .csv extension).
|
|
43
|
+
*/
|
|
44
|
+
async function exportExcel(data, outputPath, compress) {
|
|
45
|
+
await exportCSV(data, outputPath.replace('.excel', '.csv'), compress);
|
|
46
|
+
}
|
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Shared types for the DataExporter and format-specific exporter modules.
|
|
3
|
+
*/
|
|
4
|
+
export interface ExportConfig {
|
|
5
|
+
id: string;
|
|
6
|
+
name: string;
|
|
7
|
+
format: 'json' | 'csv' | 'excel' | 'pdf' | 'xml';
|
|
8
|
+
dataSource: 'metrics' | 'analytics' | 'security' | 'feedback' | 'instructions' | 'custom';
|
|
9
|
+
filters: ExportFilter[];
|
|
10
|
+
columns: ExportColumn[];
|
|
11
|
+
schedule?: ExportSchedule;
|
|
12
|
+
template?: string;
|
|
13
|
+
compression: boolean;
|
|
14
|
+
encryption: boolean;
|
|
15
|
+
destination: ExportDestination;
|
|
16
|
+
}
|
|
17
|
+
export interface ExportFilter {
|
|
18
|
+
field: string;
|
|
19
|
+
operator: 'equals' | 'not_equals' | 'contains' | 'not_contains' | 'greater_than' | 'less_than' | 'between' | 'in' | 'not_in';
|
|
20
|
+
value: unknown;
|
|
21
|
+
values?: unknown[];
|
|
22
|
+
}
|
|
23
|
+
export interface ExportColumn {
|
|
24
|
+
field: string;
|
|
25
|
+
header: string;
|
|
26
|
+
type: 'string' | 'number' | 'date' | 'boolean' | 'json';
|
|
27
|
+
format?: string;
|
|
28
|
+
aggregation?: 'sum' | 'avg' | 'count' | 'min' | 'max' | 'group';
|
|
29
|
+
}
|
|
30
|
+
export interface ExportSchedule {
|
|
31
|
+
enabled: boolean;
|
|
32
|
+
frequency: 'hourly' | 'daily' | 'weekly' | 'monthly' | 'custom';
|
|
33
|
+
interval: number;
|
|
34
|
+
time?: string;
|
|
35
|
+
dayOfWeek?: number;
|
|
36
|
+
dayOfMonth?: number;
|
|
37
|
+
timezone: string;
|
|
38
|
+
lastRun?: number;
|
|
39
|
+
nextRun?: number;
|
|
40
|
+
}
|
|
41
|
+
export interface ExportDestination {
|
|
42
|
+
type: 'local' | 'email' | 'ftp' | 'sftp' | 's3' | 'azure_blob' | 'webhook';
|
|
43
|
+
config: Record<string, unknown>;
|
|
44
|
+
}
|
|
45
|
+
export interface ExportJob {
|
|
46
|
+
id: string;
|
|
47
|
+
configId: string;
|
|
48
|
+
status: 'pending' | 'running' | 'completed' | 'failed' | 'cancelled';
|
|
49
|
+
progress: number;
|
|
50
|
+
recordsProcessed: number;
|
|
51
|
+
totalRecords: number;
|
|
52
|
+
startTime: number;
|
|
53
|
+
endTime?: number;
|
|
54
|
+
error?: string;
|
|
55
|
+
outputPath?: string;
|
|
56
|
+
fileSize?: number;
|
|
57
|
+
}
|
|
58
|
+
export interface ReportTemplate {
|
|
59
|
+
id: string;
|
|
60
|
+
name: string;
|
|
61
|
+
description: string;
|
|
62
|
+
type: 'dashboard_summary' | 'security_report' | 'performance_analysis' | 'custom';
|
|
63
|
+
sections: ReportSection[];
|
|
64
|
+
formatting: ReportFormatting;
|
|
65
|
+
}
|
|
66
|
+
export interface ReportSection {
|
|
67
|
+
id: string;
|
|
68
|
+
title: string;
|
|
69
|
+
type: 'text' | 'table' | 'chart' | 'metrics' | 'raw_data';
|
|
70
|
+
dataSource: string;
|
|
71
|
+
config: Record<string, unknown>;
|
|
72
|
+
order: number;
|
|
73
|
+
}
|
|
74
|
+
export interface ReportFormatting {
|
|
75
|
+
pageSize: 'A4' | 'Letter' | 'Legal' | 'A3';
|
|
76
|
+
orientation: 'portrait' | 'landscape';
|
|
77
|
+
margins: {
|
|
78
|
+
top: number;
|
|
79
|
+
right: number;
|
|
80
|
+
bottom: number;
|
|
81
|
+
left: number;
|
|
82
|
+
};
|
|
83
|
+
fontSize: number;
|
|
84
|
+
fontFamily: string;
|
|
85
|
+
includeHeader: boolean;
|
|
86
|
+
includeFooter: boolean;
|
|
87
|
+
headerText?: string;
|
|
88
|
+
footerText?: string;
|
|
89
|
+
}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* JSON format exporter for the DataExporter system.
|
|
4
|
+
*/
|
|
5
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
6
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
7
|
+
};
|
|
8
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
9
|
+
exports.exportJSON = exportJSON;
|
|
10
|
+
const fs_1 = __importDefault(require("fs"));
|
|
11
|
+
const path_1 = __importDefault(require("path"));
|
|
12
|
+
/**
|
|
13
|
+
* Write data to a JSON file, optionally compressing afterwards.
|
|
14
|
+
*/
|
|
15
|
+
async function exportJSON(data, outputPath, compress) {
|
|
16
|
+
await fs_1.default.promises.mkdir(path_1.default.dirname(outputPath), { recursive: true });
|
|
17
|
+
const jsonData = JSON.stringify(data, null, 2);
|
|
18
|
+
await fs_1.default.promises.writeFile(outputPath, jsonData, 'utf8');
|
|
19
|
+
if (compress) {
|
|
20
|
+
console.log(`Compressing file: ${outputPath}`);
|
|
21
|
+
}
|
|
22
|
+
}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* XML and PDF (HTML) format exporters for the DataExporter system.
|
|
3
|
+
* Handles structured document output including template-based report rendering.
|
|
4
|
+
*/
|
|
5
|
+
import type { ReportTemplate } from './exportTypes.js';
|
|
6
|
+
/**
|
|
7
|
+
* Write data to an XML file, optionally compressing afterwards.
|
|
8
|
+
*/
|
|
9
|
+
export declare function exportXML(data: unknown[], outputPath: string, compress: boolean): Promise<void>;
|
|
10
|
+
/**
|
|
11
|
+
* Write data as a PDF-placeholder HTML file.
|
|
12
|
+
* When a resolved ReportTemplate is provided the output uses the full template;
|
|
13
|
+
* otherwise a simple tabular layout is generated.
|
|
14
|
+
*/
|
|
15
|
+
export declare function exportPDF(data: unknown[], outputPath: string, template?: ReportTemplate): Promise<void>;
|
|
16
|
+
export declare function generateReportHTML(template: ReportTemplate, data: unknown[]): string;
|
|
17
|
+
export declare function generateSimplePDFContent(data: unknown[]): string;
|
|
@@ -0,0 +1,175 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* XML and PDF (HTML) format exporters for the DataExporter system.
|
|
4
|
+
* Handles structured document output including template-based report rendering.
|
|
5
|
+
*/
|
|
6
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
7
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
8
|
+
};
|
|
9
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
10
|
+
exports.exportXML = exportXML;
|
|
11
|
+
exports.exportPDF = exportPDF;
|
|
12
|
+
exports.generateReportHTML = generateReportHTML;
|
|
13
|
+
exports.generateSimplePDFContent = generateSimplePDFContent;
|
|
14
|
+
const fs_1 = __importDefault(require("fs"));
|
|
15
|
+
const path_1 = __importDefault(require("path"));
|
|
16
|
+
/**
|
|
17
|
+
* Write data to an XML file, optionally compressing afterwards.
|
|
18
|
+
*/
|
|
19
|
+
async function exportXML(data, outputPath, compress) {
|
|
20
|
+
await fs_1.default.promises.mkdir(path_1.default.dirname(outputPath), { recursive: true });
|
|
21
|
+
const xmlContent = convertToXML(data);
|
|
22
|
+
await fs_1.default.promises.writeFile(outputPath, xmlContent, 'utf8');
|
|
23
|
+
if (compress) {
|
|
24
|
+
console.log(`Compressing file: ${outputPath}`);
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
/**
|
|
28
|
+
* Write data as a PDF-placeholder HTML file.
|
|
29
|
+
* When a resolved ReportTemplate is provided the output uses the full template;
|
|
30
|
+
* otherwise a simple tabular layout is generated.
|
|
31
|
+
*/
|
|
32
|
+
async function exportPDF(data, outputPath, template) {
|
|
33
|
+
await fs_1.default.promises.mkdir(path_1.default.dirname(outputPath), { recursive: true });
|
|
34
|
+
const content = template
|
|
35
|
+
? generateReportHTML(template, data)
|
|
36
|
+
: generateSimplePDFContent(data);
|
|
37
|
+
// In a real implementation a PDF library (puppeteer, pdfkit) would be used.
|
|
38
|
+
await fs_1.default.promises.writeFile(outputPath.replace('.pdf', '.html'), content, 'utf8');
|
|
39
|
+
}
|
|
40
|
+
// ---------------------------------------------------------------------------
|
|
41
|
+
// Internal helpers
|
|
42
|
+
// ---------------------------------------------------------------------------
|
|
43
|
+
function convertToXML(data) {
|
|
44
|
+
const xmlRows = data.map(item => {
|
|
45
|
+
const itemRecord = item;
|
|
46
|
+
const xmlFields = Object.entries(itemRecord)
|
|
47
|
+
.map(([key, value]) => ` <${key}>${escapeXML(String(value))}</${key}>`)
|
|
48
|
+
.join('\n');
|
|
49
|
+
return ` <record>\n${xmlFields}\n </record>`;
|
|
50
|
+
});
|
|
51
|
+
return `<?xml version="1.0" encoding="UTF-8"?>\n<data>\n${xmlRows.join('\n')}\n</data>`;
|
|
52
|
+
}
|
|
53
|
+
function escapeXML(text) {
|
|
54
|
+
return text
|
|
55
|
+
.replace(/&/g, '&')
|
|
56
|
+
.replace(/</g, '<')
|
|
57
|
+
.replace(/>/g, '>')
|
|
58
|
+
.replace(/"/g, '"')
|
|
59
|
+
.replace(/'/g, ''');
|
|
60
|
+
}
|
|
61
|
+
function generateReportHTML(template, data) {
|
|
62
|
+
let html = `<!DOCTYPE html>
|
|
63
|
+
<html>
|
|
64
|
+
<head>
|
|
65
|
+
<title>${template.name}</title>
|
|
66
|
+
<meta charset="UTF-8">
|
|
67
|
+
<style>
|
|
68
|
+
body { font-family: ${template.formatting.fontFamily}; font-size: ${template.formatting.fontSize}px; }
|
|
69
|
+
.header { text-align: center; border-bottom: 1px solid #ccc; padding-bottom: 10px; margin-bottom: 20px; }
|
|
70
|
+
.footer { text-align: center; border-top: 1px solid #ccc; padding-top: 10px; margin-top: 20px; }
|
|
71
|
+
.section { margin-bottom: 30px; }
|
|
72
|
+
.section-title { font-size: 16px; font-weight: bold; margin-bottom: 10px; }
|
|
73
|
+
table { width: 100%; border-collapse: collapse; margin-bottom: 15px; }
|
|
74
|
+
th, td { border: 1px solid #ddd; padding: 8px; text-align: left; }
|
|
75
|
+
th { background-color: #f2f2f2; }
|
|
76
|
+
</style>
|
|
77
|
+
</head>
|
|
78
|
+
<body>`;
|
|
79
|
+
if (template.formatting.includeHeader) {
|
|
80
|
+
const headerText = replaceTemplateVariables(template.formatting.headerText || '');
|
|
81
|
+
html += `<div class="header">${headerText}</div>`;
|
|
82
|
+
}
|
|
83
|
+
const sortedSections = template.sections.sort((a, b) => a.order - b.order);
|
|
84
|
+
for (const section of sortedSections) {
|
|
85
|
+
html += `<div class="section">`;
|
|
86
|
+
html += `<div class="section-title">${section.title}</div>`;
|
|
87
|
+
switch (section.type) {
|
|
88
|
+
case 'table':
|
|
89
|
+
html += generateTableSection(data, section);
|
|
90
|
+
break;
|
|
91
|
+
case 'metrics':
|
|
92
|
+
html += generateMetricsSection(data, section);
|
|
93
|
+
break;
|
|
94
|
+
case 'text':
|
|
95
|
+
html += generateTextSection(data, section);
|
|
96
|
+
break;
|
|
97
|
+
default:
|
|
98
|
+
html += `<p>Section type "${section.type}" not implemented</p>`;
|
|
99
|
+
}
|
|
100
|
+
html += `</div>`;
|
|
101
|
+
}
|
|
102
|
+
if (template.formatting.includeFooter) {
|
|
103
|
+
const footerText = replaceTemplateVariables(template.formatting.footerText || '');
|
|
104
|
+
html += `<div class="footer">${footerText}</div>`;
|
|
105
|
+
}
|
|
106
|
+
html += `</body></html>`;
|
|
107
|
+
return html;
|
|
108
|
+
}
|
|
109
|
+
function generateSimplePDFContent(data) {
|
|
110
|
+
if (!data.length)
|
|
111
|
+
return '<html><body><p>No data to export</p></body></html>';
|
|
112
|
+
const headers = Object.keys(data[0]);
|
|
113
|
+
let html = `<!DOCTYPE html>
|
|
114
|
+
<html>
|
|
115
|
+
<head>
|
|
116
|
+
<title>Data Export</title>
|
|
117
|
+
<style>
|
|
118
|
+
body { font-family: Arial, sans-serif; }
|
|
119
|
+
table { width: 100%; border-collapse: collapse; }
|
|
120
|
+
th, td { border: 1px solid #ddd; padding: 8px; text-align: left; }
|
|
121
|
+
th { background-color: #f2f2f2; }
|
|
122
|
+
</style>
|
|
123
|
+
</head>
|
|
124
|
+
<body>
|
|
125
|
+
<h1>Data Export</h1>
|
|
126
|
+
<table>
|
|
127
|
+
<thead>
|
|
128
|
+
<tr>${headers.map(h => `<th>${h}</th>`).join('')}</tr>
|
|
129
|
+
</thead>
|
|
130
|
+
<tbody>`;
|
|
131
|
+
data.forEach(row => {
|
|
132
|
+
const rowRecord = row;
|
|
133
|
+
html += `<tr>${headers.map(h => `<td>${String(rowRecord[h] || '')}</td>`).join('')}</tr>`;
|
|
134
|
+
});
|
|
135
|
+
html += ` </tbody>
|
|
136
|
+
</table>
|
|
137
|
+
</body>
|
|
138
|
+
</html>`;
|
|
139
|
+
return html;
|
|
140
|
+
}
|
|
141
|
+
function generateTableSection(data, _section) {
|
|
142
|
+
if (!data.length)
|
|
143
|
+
return '<p>No data available</p>';
|
|
144
|
+
const headers = Object.keys(data[0]);
|
|
145
|
+
let html = '<table><thead><tr>';
|
|
146
|
+
headers.forEach(header => { html += `<th>${header}</th>`; });
|
|
147
|
+
html += '</tr></thead><tbody>';
|
|
148
|
+
data.forEach(row => {
|
|
149
|
+
const rowRecord = row;
|
|
150
|
+
html += '<tr>';
|
|
151
|
+
headers.forEach(header => { html += `<td>${String(rowRecord[header] || '')}</td>`; });
|
|
152
|
+
html += '</tr>';
|
|
153
|
+
});
|
|
154
|
+
html += '</tbody></table>';
|
|
155
|
+
return html;
|
|
156
|
+
}
|
|
157
|
+
function generateMetricsSection(data, _section) {
|
|
158
|
+
return `<div>
|
|
159
|
+
<p><strong>Total Records:</strong> ${data.length}</p>
|
|
160
|
+
<p><strong>Generated:</strong> ${new Date().toLocaleString()}</p>
|
|
161
|
+
</div>`;
|
|
162
|
+
}
|
|
163
|
+
function generateTextSection(data, section) {
|
|
164
|
+
return `<p>This is a ${section.dataSource} section with ${data.length} records.</p>`;
|
|
165
|
+
}
|
|
166
|
+
function replaceTemplateVariables(text) {
|
|
167
|
+
const now = new Date();
|
|
168
|
+
return text
|
|
169
|
+
.replace(/\{\{date\}\}/g, now.toLocaleDateString())
|
|
170
|
+
.replace(/\{\{time\}\}/g, now.toLocaleTimeString())
|
|
171
|
+
.replace(/\{\{datetime\}\}/g, now.toLocaleString())
|
|
172
|
+
.replace(/\{\{page\}\}/g, '1')
|
|
173
|
+
.replace(/\{\{totalPages\}\}/g, '1')
|
|
174
|
+
.replace(/\{\{dateRange\}\}/g, 'Last 7 days');
|
|
175
|
+
}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* APIIntegration - Phase 4 API Integration & External Connectors
|
|
3
|
+
*
|
|
4
|
+
* Thin coordinator that composes three domain modules:
|
|
5
|
+
* - EndpointManager (api.instructions.routes) — endpoint configuration & rate-limiting
|
|
6
|
+
* - UsageManager (api.usage.routes) — request execution & monitoring
|
|
7
|
+
* - FeedbackManager (api.feedback.routes) — webhooks & external connectors
|
|
8
|
+
*/
|
|
9
|
+
import type { APIEndpoint } from '../server/routes/api.instructions.routes.js';
|
|
10
|
+
import type { APIRequest, APIResponse, APIMonitoringEvent } from '../server/routes/api.usage.routes.js';
|
|
11
|
+
import type { WebhookConfig, ExternalConnector } from '../server/routes/api.feedback.routes.js';
|
|
12
|
+
export type { APIEndpoint, APIRequest, APIResponse, APIMonitoringEvent, WebhookConfig, ExternalConnector };
|
|
13
|
+
export declare class APIIntegration {
|
|
14
|
+
private readonly endpointMgr;
|
|
15
|
+
private readonly usageMgr;
|
|
16
|
+
private readonly feedbackMgr;
|
|
17
|
+
constructor();
|
|
18
|
+
private startBackgroundTasks;
|
|
19
|
+
executeRequest(endpointId: string, data?: unknown, overrides?: Partial<APIRequest>): Promise<APIResponse>;
|
|
20
|
+
createEndpoint(endpoint: Omit<APIEndpoint, 'id'>): string;
|
|
21
|
+
getEndpoint(id: string): APIEndpoint | undefined;
|
|
22
|
+
listEndpoints(): APIEndpoint[];
|
|
23
|
+
updateEndpoint(id: string, updates: Partial<APIEndpoint>): boolean;
|
|
24
|
+
deleteEndpoint(id: string): boolean;
|
|
25
|
+
getConfiguredEndpoints(): APIEndpoint[];
|
|
26
|
+
createWebhook(webhook: Omit<WebhookConfig, 'id'>): string;
|
|
27
|
+
triggerWebhook(id: string, event: string, data: unknown): Promise<boolean>;
|
|
28
|
+
createConnector(connector: Omit<ExternalConnector, 'id' | 'status' | 'metrics'>): string;
|
|
29
|
+
getConnectorStatus(id: string): ExternalConnector | undefined;
|
|
30
|
+
listConnectors(): ExternalConnector[];
|
|
31
|
+
onAPIEvent(callback: (event: APIMonitoringEvent) => void): void;
|
|
32
|
+
getAPIStatistics(): {
|
|
33
|
+
endpoints: number;
|
|
34
|
+
webhooks: number;
|
|
35
|
+
connectors: number;
|
|
36
|
+
activeConnections: number;
|
|
37
|
+
totalRequests: number;
|
|
38
|
+
errorRate: number;
|
|
39
|
+
};
|
|
40
|
+
}
|
|
41
|
+
export declare function getAPIIntegration(): APIIntegration;
|
|
@@ -0,0 +1,95 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* APIIntegration - Phase 4 API Integration & External Connectors
|
|
4
|
+
*
|
|
5
|
+
* Thin coordinator that composes three domain modules:
|
|
6
|
+
* - EndpointManager (api.instructions.routes) — endpoint configuration & rate-limiting
|
|
7
|
+
* - UsageManager (api.usage.routes) — request execution & monitoring
|
|
8
|
+
* - FeedbackManager (api.feedback.routes) — webhooks & external connectors
|
|
9
|
+
*/
|
|
10
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
11
|
+
exports.APIIntegration = void 0;
|
|
12
|
+
exports.getAPIIntegration = getAPIIntegration;
|
|
13
|
+
const api_instructions_routes_js_1 = require("../server/routes/api.instructions.routes.js");
|
|
14
|
+
const api_usage_routes_js_1 = require("../server/routes/api.usage.routes.js");
|
|
15
|
+
const api_feedback_routes_js_1 = require("../server/routes/api.feedback.routes.js");
|
|
16
|
+
class APIIntegration {
|
|
17
|
+
endpointMgr;
|
|
18
|
+
usageMgr;
|
|
19
|
+
feedbackMgr;
|
|
20
|
+
constructor() {
|
|
21
|
+
this.endpointMgr = new api_instructions_routes_js_1.EndpointManager();
|
|
22
|
+
this.usageMgr = new api_usage_routes_js_1.UsageManager(this.endpointMgr);
|
|
23
|
+
this.feedbackMgr = new api_feedback_routes_js_1.FeedbackManager(this.usageMgr);
|
|
24
|
+
this.startBackgroundTasks();
|
|
25
|
+
}
|
|
26
|
+
startBackgroundTasks() {
|
|
27
|
+
setInterval(() => { this.usageMgr.processRequestQueues(); }, 100);
|
|
28
|
+
setInterval(() => { this.endpointMgr.cleanupCache(); }, 60000);
|
|
29
|
+
setInterval(() => { this.endpointMgr.resetRateLimiters(); }, 60000);
|
|
30
|
+
setInterval(() => { this.feedbackMgr.performHealthChecks(); }, 30000);
|
|
31
|
+
}
|
|
32
|
+
// ── Endpoint management ──────────────────────────────────────────────────────────
|
|
33
|
+
async executeRequest(endpointId, data, overrides) {
|
|
34
|
+
return this.usageMgr.executeRequest(endpointId, data, overrides);
|
|
35
|
+
}
|
|
36
|
+
createEndpoint(endpoint) {
|
|
37
|
+
return this.endpointMgr.createEndpoint(endpoint);
|
|
38
|
+
}
|
|
39
|
+
getEndpoint(id) {
|
|
40
|
+
return this.endpointMgr.getEndpoint(id);
|
|
41
|
+
}
|
|
42
|
+
listEndpoints() {
|
|
43
|
+
return this.endpointMgr.listEndpoints();
|
|
44
|
+
}
|
|
45
|
+
updateEndpoint(id, updates) {
|
|
46
|
+
return this.endpointMgr.updateEndpoint(id, updates);
|
|
47
|
+
}
|
|
48
|
+
deleteEndpoint(id) {
|
|
49
|
+
return this.endpointMgr.deleteEndpoint(id);
|
|
50
|
+
}
|
|
51
|
+
getConfiguredEndpoints() {
|
|
52
|
+
return this.endpointMgr.getConfiguredEndpoints();
|
|
53
|
+
}
|
|
54
|
+
// ── Webhook management ───────────────────────────────────────────────────────────
|
|
55
|
+
createWebhook(webhook) {
|
|
56
|
+
return this.feedbackMgr.createWebhook(webhook);
|
|
57
|
+
}
|
|
58
|
+
async triggerWebhook(id, event, data) {
|
|
59
|
+
return this.feedbackMgr.triggerWebhook(id, event, data);
|
|
60
|
+
}
|
|
61
|
+
// ── Connector management ─────────────────────────────────────────────────────────
|
|
62
|
+
createConnector(connector) {
|
|
63
|
+
return this.feedbackMgr.createConnector(connector);
|
|
64
|
+
}
|
|
65
|
+
getConnectorStatus(id) {
|
|
66
|
+
return this.feedbackMgr.getConnectorStatus(id);
|
|
67
|
+
}
|
|
68
|
+
listConnectors() {
|
|
69
|
+
return this.feedbackMgr.listConnectors();
|
|
70
|
+
}
|
|
71
|
+
// ── Monitoring ───────────────────────────────────────────────────────────────────
|
|
72
|
+
onAPIEvent(callback) {
|
|
73
|
+
this.usageMgr.onAPIEvent(callback);
|
|
74
|
+
}
|
|
75
|
+
getAPIStatistics() {
|
|
76
|
+
const stats = this.feedbackMgr.getStats();
|
|
77
|
+
return {
|
|
78
|
+
endpoints: this.endpointMgr.endpoints.size,
|
|
79
|
+
webhooks: stats.webhookCount,
|
|
80
|
+
connectors: stats.connectorCount,
|
|
81
|
+
activeConnections: stats.activeConnections,
|
|
82
|
+
totalRequests: stats.totalRequests,
|
|
83
|
+
errorRate: stats.totalRequests > 0 ? stats.totalErrors / stats.totalRequests : 0
|
|
84
|
+
};
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
exports.APIIntegration = APIIntegration;
|
|
88
|
+
// Singleton instance
|
|
89
|
+
let apiIntegration = null;
|
|
90
|
+
function getAPIIntegration() {
|
|
91
|
+
if (!apiIntegration) {
|
|
92
|
+
apiIntegration = new APIIntegration();
|
|
93
|
+
}
|
|
94
|
+
return apiIntegration;
|
|
95
|
+
}
|
|
@@ -0,0 +1,167 @@
|
|
|
1
|
+
interface SecurityThreat {
|
|
2
|
+
id: string;
|
|
3
|
+
type: 'authentication_failure' | 'rate_limit_exceeded' | 'suspicious_activity' | 'data_breach_attempt' | 'injection_attack';
|
|
4
|
+
severity: 'low' | 'medium' | 'high' | 'critical';
|
|
5
|
+
source: string;
|
|
6
|
+
timestamp: number;
|
|
7
|
+
details: Record<string, unknown>;
|
|
8
|
+
status: 'active' | 'mitigated' | 'resolved';
|
|
9
|
+
actionTaken?: string;
|
|
10
|
+
}
|
|
11
|
+
interface PerformanceMetric {
|
|
12
|
+
id: string;
|
|
13
|
+
type: 'cpu' | 'memory' | 'disk' | 'network' | 'database' | 'api_latency';
|
|
14
|
+
value: number;
|
|
15
|
+
unit: string;
|
|
16
|
+
timestamp: number;
|
|
17
|
+
threshold: {
|
|
18
|
+
warning: number;
|
|
19
|
+
critical: number;
|
|
20
|
+
};
|
|
21
|
+
trend: 'increasing' | 'decreasing' | 'stable';
|
|
22
|
+
}
|
|
23
|
+
interface SystemHealth {
|
|
24
|
+
overall: 'healthy' | 'warning' | 'critical' | 'down';
|
|
25
|
+
services: Array<{
|
|
26
|
+
name: string;
|
|
27
|
+
status: 'up' | 'down' | 'degraded';
|
|
28
|
+
latency: number;
|
|
29
|
+
uptime: number;
|
|
30
|
+
lastCheck: number;
|
|
31
|
+
}>;
|
|
32
|
+
alerts: SecurityThreat[];
|
|
33
|
+
performance: PerformanceMetric[];
|
|
34
|
+
}
|
|
35
|
+
interface SecurityRule {
|
|
36
|
+
id: string;
|
|
37
|
+
name: string;
|
|
38
|
+
type: 'rate_limit' | 'ip_blocking' | 'pattern_detection' | 'anomaly_detection';
|
|
39
|
+
enabled: boolean;
|
|
40
|
+
config: Record<string, unknown>;
|
|
41
|
+
lastTriggered?: number;
|
|
42
|
+
triggerCount: number;
|
|
43
|
+
}
|
|
44
|
+
export declare class SecurityMonitor {
|
|
45
|
+
private threats;
|
|
46
|
+
private performanceMetrics;
|
|
47
|
+
private securityRules;
|
|
48
|
+
private monitoringInterval;
|
|
49
|
+
private alertCallbacks;
|
|
50
|
+
constructor();
|
|
51
|
+
/**
|
|
52
|
+
* Anonymize a real user identifier (IP, username, etc.) for PH-3 compliance.
|
|
53
|
+
* Returns the first 16 hex characters of the SHA-256 hash of the identifier.
|
|
54
|
+
* @param identifier - Raw user identifier to anonymize
|
|
55
|
+
* @returns Anonymized identifier string (not reversible)
|
|
56
|
+
*/
|
|
57
|
+
private anonymize;
|
|
58
|
+
/**
|
|
59
|
+
* Initialize default security rules
|
|
60
|
+
*/
|
|
61
|
+
private initializeSecurityRules;
|
|
62
|
+
/**
|
|
63
|
+
* Start continuous monitoring
|
|
64
|
+
*/
|
|
65
|
+
private startMonitoring;
|
|
66
|
+
/**
|
|
67
|
+
* Stop monitoring
|
|
68
|
+
*/
|
|
69
|
+
stopMonitoring(): void;
|
|
70
|
+
/**
|
|
71
|
+
* Collect system performance metrics
|
|
72
|
+
*/
|
|
73
|
+
private collectPerformanceMetrics;
|
|
74
|
+
/**
|
|
75
|
+
* Add performance metric and analyze trends
|
|
76
|
+
*/
|
|
77
|
+
private addPerformanceMetric;
|
|
78
|
+
/**
|
|
79
|
+
* Calculate trend from values
|
|
80
|
+
*/
|
|
81
|
+
private calculateTrend;
|
|
82
|
+
/**
|
|
83
|
+
* Check performance thresholds and create alerts
|
|
84
|
+
*/
|
|
85
|
+
private checkPerformanceThresholds;
|
|
86
|
+
/**
|
|
87
|
+
* Analyze current security threats
|
|
88
|
+
*/
|
|
89
|
+
private analyzeSecurityThreats;
|
|
90
|
+
/**
|
|
91
|
+
* Detect anomalous patterns in system activity
|
|
92
|
+
*/
|
|
93
|
+
private detectAnomalousPatterns;
|
|
94
|
+
/**
|
|
95
|
+
* Check rate limiting violations
|
|
96
|
+
*/
|
|
97
|
+
private checkRateLimits;
|
|
98
|
+
/**
|
|
99
|
+
* Validate authentication attempts
|
|
100
|
+
*/
|
|
101
|
+
private validateAuthenticationAttempts;
|
|
102
|
+
/**
|
|
103
|
+
* Report a security threat
|
|
104
|
+
*/
|
|
105
|
+
reportThreat(threat: SecurityThreat): void;
|
|
106
|
+
/**
|
|
107
|
+
* Log security event to audit trail
|
|
108
|
+
*/
|
|
109
|
+
private logSecurityEvent;
|
|
110
|
+
/**
|
|
111
|
+
* Get current system health status
|
|
112
|
+
*/
|
|
113
|
+
getSystemHealth(): SystemHealth;
|
|
114
|
+
/**
|
|
115
|
+
* Get service statuses
|
|
116
|
+
*/
|
|
117
|
+
private getServiceStatuses;
|
|
118
|
+
/**
|
|
119
|
+
* Get recent performance metrics
|
|
120
|
+
*/
|
|
121
|
+
private getRecentPerformanceMetrics;
|
|
122
|
+
/**
|
|
123
|
+
* Register alert callback
|
|
124
|
+
*/
|
|
125
|
+
onThreatDetected(callback: (threat: SecurityThreat) => void): void;
|
|
126
|
+
/**
|
|
127
|
+
* Mitigate a threat
|
|
128
|
+
*/
|
|
129
|
+
mitigateThreat(threatId: string, action: string): boolean;
|
|
130
|
+
/**
|
|
131
|
+
* Resolve a threat
|
|
132
|
+
*/
|
|
133
|
+
resolveThreat(threatId: string): boolean;
|
|
134
|
+
/**
|
|
135
|
+
* Get list of active threats
|
|
136
|
+
*/
|
|
137
|
+
getActiveThreats(): SecurityThreat[];
|
|
138
|
+
/**
|
|
139
|
+
* Clean up old data
|
|
140
|
+
*/
|
|
141
|
+
private cleanupOldData;
|
|
142
|
+
private getCPUUsage;
|
|
143
|
+
private getAverageAPILatency;
|
|
144
|
+
private checkForSuspiciousPatterns;
|
|
145
|
+
private checkRateLimitViolation;
|
|
146
|
+
private checkAuthenticationAnomaly;
|
|
147
|
+
/**
|
|
148
|
+
* Get security rules configuration
|
|
149
|
+
*/
|
|
150
|
+
getSecurityRules(): SecurityRule[];
|
|
151
|
+
/**
|
|
152
|
+
* Update security rule
|
|
153
|
+
*/
|
|
154
|
+
updateSecurityRule(ruleId: string, updates: Partial<SecurityRule>): boolean;
|
|
155
|
+
/**
|
|
156
|
+
* Get threat statistics
|
|
157
|
+
*/
|
|
158
|
+
getThreatStatistics(): {
|
|
159
|
+
total: number;
|
|
160
|
+
active: number;
|
|
161
|
+
resolved: number;
|
|
162
|
+
byType: Record<string, number>;
|
|
163
|
+
bySeverity: Record<string, number>;
|
|
164
|
+
};
|
|
165
|
+
}
|
|
166
|
+
export declare function getSecurityMonitor(): SecurityMonitor;
|
|
167
|
+
export {};
|