@elliotding/ai-agent-mcp 0.1.26 → 0.1.28
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 +330 -30
- package/dist/api/cached-client.d.ts +48 -0
- package/dist/api/cached-client.d.ts.map +1 -0
- package/dist/api/cached-client.js +126 -0
- package/dist/api/cached-client.js.map +1 -0
- package/dist/api/client.d.ts +295 -0
- package/dist/api/client.d.ts.map +1 -0
- package/dist/api/client.js +385 -0
- package/dist/api/client.js.map +1 -0
- package/dist/auth/index.d.ts +8 -0
- package/dist/auth/index.d.ts.map +1 -0
- package/dist/auth/index.js +26 -0
- package/dist/auth/index.js.map +1 -0
- package/dist/auth/middleware.d.ts +36 -0
- package/dist/auth/middleware.d.ts.map +1 -0
- package/dist/auth/middleware.js +194 -0
- package/dist/auth/middleware.js.map +1 -0
- package/dist/auth/permissions.d.ts +60 -0
- package/dist/auth/permissions.d.ts.map +1 -0
- package/dist/auth/permissions.js +262 -0
- package/dist/auth/permissions.js.map +1 -0
- package/dist/auth/token-validator.d.ts +52 -0
- package/dist/auth/token-validator.d.ts.map +1 -0
- package/dist/auth/token-validator.js +215 -0
- package/dist/auth/token-validator.js.map +1 -0
- package/dist/cache/cache-manager.d.ts +49 -0
- package/dist/cache/cache-manager.d.ts.map +1 -0
- package/dist/cache/cache-manager.js +191 -0
- package/dist/cache/cache-manager.js.map +1 -0
- package/dist/cache/index.d.ts +6 -0
- package/dist/cache/index.d.ts.map +1 -0
- package/dist/cache/index.js +12 -0
- package/dist/cache/index.js.map +1 -0
- package/dist/cache/redis-client.d.ts +45 -0
- package/dist/cache/redis-client.d.ts.map +1 -0
- package/dist/cache/redis-client.js +210 -0
- package/dist/cache/redis-client.js.map +1 -0
- package/dist/config/constants.d.ts +28 -0
- package/dist/config/constants.d.ts.map +1 -0
- package/dist/config/constants.js +31 -0
- package/dist/config/constants.js.map +1 -0
- package/dist/config/index.d.ts +71 -0
- package/dist/config/index.d.ts.map +1 -0
- package/dist/config/index.js +190 -0
- package/dist/config/index.js.map +1 -0
- package/dist/filesystem/manager.d.ts +45 -0
- package/dist/filesystem/manager.d.ts.map +1 -0
- package/dist/filesystem/manager.js +246 -0
- package/dist/filesystem/manager.js.map +1 -0
- package/dist/git/multi-source-manager.d.ts +105 -0
- package/dist/git/multi-source-manager.d.ts.map +1 -0
- package/dist/git/multi-source-manager.js +677 -0
- package/dist/git/multi-source-manager.js.map +1 -0
- package/dist/git/operations.d.ts +27 -0
- package/dist/git/operations.d.ts.map +1 -0
- package/dist/git/operations.js +83 -0
- package/dist/git/operations.js.map +1 -0
- package/dist/index.d.ts +6 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +122 -0
- package/dist/index.js.map +1 -0
- package/dist/monitoring/health.d.ts +35 -0
- package/dist/monitoring/health.d.ts.map +1 -0
- package/dist/monitoring/health.js +105 -0
- package/dist/monitoring/health.js.map +1 -0
- package/dist/prompts/cache.d.ts +69 -0
- package/dist/prompts/cache.d.ts.map +1 -0
- package/dist/prompts/cache.js +163 -0
- package/dist/prompts/cache.js.map +1 -0
- package/dist/prompts/generator.d.ts +49 -0
- package/dist/prompts/generator.d.ts.map +1 -0
- package/dist/prompts/generator.js +160 -0
- package/dist/prompts/generator.js.map +1 -0
- package/dist/prompts/index.d.ts +13 -0
- package/dist/prompts/index.d.ts.map +1 -0
- package/dist/prompts/index.js +24 -0
- package/dist/prompts/index.js.map +1 -0
- package/dist/prompts/manager.d.ts +213 -0
- package/dist/prompts/manager.d.ts.map +1 -0
- package/dist/prompts/manager.js +587 -0
- package/dist/prompts/manager.js.map +1 -0
- package/dist/resources/index.d.ts +6 -0
- package/dist/resources/index.d.ts.map +1 -0
- package/dist/resources/index.js +10 -0
- package/dist/resources/index.js.map +1 -0
- package/dist/resources/loader.d.ts +88 -0
- package/dist/resources/loader.d.ts.map +1 -0
- package/dist/resources/loader.js +492 -0
- package/dist/resources/loader.js.map +1 -0
- package/dist/server/http.d.ts +57 -0
- package/dist/server/http.d.ts.map +1 -0
- package/dist/server/http.js +435 -0
- package/dist/server/http.js.map +1 -0
- package/dist/server.d.ts +13 -0
- package/dist/server.d.ts.map +1 -0
- package/dist/server.js +201 -0
- package/dist/server.js.map +1 -0
- package/dist/session/manager.d.ts +91 -0
- package/dist/session/manager.d.ts.map +1 -0
- package/dist/session/manager.js +251 -0
- package/dist/session/manager.js.map +1 -0
- package/dist/telemetry/index.d.ts +3 -0
- package/dist/telemetry/index.d.ts.map +1 -0
- package/dist/telemetry/index.js +7 -0
- package/dist/telemetry/index.js.map +1 -0
- package/dist/telemetry/manager.d.ts +151 -0
- package/dist/telemetry/manager.d.ts.map +1 -0
- package/dist/telemetry/manager.js +367 -0
- package/dist/telemetry/manager.js.map +1 -0
- package/dist/tools/index.d.ts +13 -0
- package/dist/tools/index.d.ts.map +1 -0
- package/dist/tools/index.js +29 -0
- package/dist/tools/index.js.map +1 -0
- package/dist/tools/manage-subscription.d.ts +47 -0
- package/dist/tools/manage-subscription.d.ts.map +1 -0
- package/dist/tools/manage-subscription.js +317 -0
- package/dist/tools/manage-subscription.js.map +1 -0
- package/dist/tools/registry.d.ts +40 -0
- package/dist/tools/registry.d.ts.map +1 -0
- package/dist/tools/registry.js +85 -0
- package/dist/tools/registry.js.map +1 -0
- package/dist/tools/resolve-prompt-content.d.ts +35 -0
- package/dist/tools/resolve-prompt-content.d.ts.map +1 -0
- package/dist/tools/resolve-prompt-content.js +99 -0
- package/dist/tools/resolve-prompt-content.js.map +1 -0
- package/dist/tools/search-resources.d.ts +35 -0
- package/dist/tools/search-resources.d.ts.map +1 -0
- package/dist/tools/search-resources.js +159 -0
- package/dist/tools/search-resources.js.map +1 -0
- package/dist/tools/sync-resources.d.ts +54 -0
- package/dist/tools/sync-resources.d.ts.map +1 -0
- package/dist/tools/sync-resources.js +793 -0
- package/dist/tools/sync-resources.js.map +1 -0
- package/dist/tools/track-usage.d.ts +63 -0
- package/dist/tools/track-usage.d.ts.map +1 -0
- package/dist/tools/track-usage.js +90 -0
- package/dist/tools/track-usage.js.map +1 -0
- package/dist/tools/uninstall-resource.d.ts +30 -0
- package/dist/tools/uninstall-resource.d.ts.map +1 -0
- package/dist/tools/uninstall-resource.js +186 -0
- package/dist/tools/uninstall-resource.js.map +1 -0
- package/dist/tools/upload-resource.d.ts +81 -0
- package/dist/tools/upload-resource.d.ts.map +1 -0
- package/dist/tools/upload-resource.js +393 -0
- package/dist/tools/upload-resource.js.map +1 -0
- package/dist/transport/sse.d.ts +29 -0
- package/dist/transport/sse.d.ts.map +1 -0
- package/dist/transport/sse.js +271 -0
- package/dist/transport/sse.js.map +1 -0
- package/dist/types/errors.d.ts +60 -0
- package/dist/types/errors.d.ts.map +1 -0
- package/dist/types/errors.js +112 -0
- package/dist/types/errors.js.map +1 -0
- package/dist/types/index.d.ts +7 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/index.js +23 -0
- package/dist/types/index.js.map +1 -0
- package/dist/types/mcp.d.ts +50 -0
- package/dist/types/mcp.d.ts.map +1 -0
- package/dist/types/mcp.js +6 -0
- package/dist/types/mcp.js.map +1 -0
- package/dist/types/resources.d.ts +109 -0
- package/dist/types/resources.d.ts.map +1 -0
- package/dist/types/resources.js +7 -0
- package/dist/types/resources.js.map +1 -0
- package/dist/types/tools.d.ts +274 -0
- package/dist/types/tools.d.ts.map +1 -0
- package/dist/types/tools.js +6 -0
- package/dist/types/tools.js.map +1 -0
- package/dist/utils/cursor-paths.d.ts +84 -0
- package/dist/utils/cursor-paths.d.ts.map +1 -0
- package/dist/utils/cursor-paths.js +166 -0
- package/dist/utils/cursor-paths.js.map +1 -0
- package/dist/utils/log-cleaner.d.ts +18 -0
- package/dist/utils/log-cleaner.d.ts.map +1 -0
- package/dist/utils/log-cleaner.js +112 -0
- package/dist/utils/log-cleaner.js.map +1 -0
- package/dist/utils/logger.d.ts +59 -0
- package/dist/utils/logger.d.ts.map +1 -0
- package/dist/utils/logger.js +292 -0
- package/dist/utils/logger.js.map +1 -0
- package/dist/utils/validation.d.ts +58 -0
- package/dist/utils/validation.d.ts.map +1 -0
- package/dist/utils/validation.js +214 -0
- package/dist/utils/validation.js.map +1 -0
- package/package.json +1 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cursor-paths.js","sourceRoot":"","sources":["../../src/utils/cursor-paths.ts"],"names":[],"mappings":";AAAA;;;;;;;;;GASG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA4BH,4CAQC;AAeD,8DAGC;AAOD,8DASC;AAeD,4CASC;AAgBD,sDAEC;AAWD,oDAEC;AA3HD,uCAAyB;AACzB,2CAA6B;AAE7B,iEAAiE;AACpD,QAAA,gBAAgB,GAA2B;IACtD,KAAK,EAAI,QAAQ;IACjB,MAAM,EAAG,QAAQ;IACjB,OAAO,EAAE,UAAU;IACnB,QAAQ,EAAC,UAAU;IACnB,IAAI,EAAK,OAAO;IAChB,KAAK,EAAI,OAAO;IAChB,GAAG,EAAM,aAAa;IACtB,aAAa,EAAE,aAAa;CAC7B,CAAC;AAEF;;;;;;;;;;GAUG;AACH,SAAgB,gBAAgB;IAC9B,IAAI,OAAO,CAAC,QAAQ,KAAK,OAAO,EAAE,CAAC;QACjC,6EAA6E;QAC7E,MAAM,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC,OAAO,IAAI,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,SAAS,CAAC,CAAC;QACrF,OAAO,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,QAAQ,EAAE,MAAM,CAAC,CAAC;IAC9C,CAAC;IACD,qCAAqC;IACrC,OAAO,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,EAAE,SAAS,CAAC,CAAC;AAC5C,CAAC;AAED;;;;;;;;;;;;GAYG;AACH,SAAgB,yBAAyB;IACvC,2EAA2E;IAC3E,OAAO,WAAW,CAAC;AACrB,CAAC;AAED;;;;GAIG;AACH,SAAgB,yBAAyB,CAAC,YAAoB;IAC5D,MAAM,MAAM,GAAG,wBAAgB,CAAC,YAAY,CAAC,WAAW,EAAE,CAAC,CAAC;IAC5D,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,MAAM,IAAI,KAAK,CACb,0BAA0B,YAAY,KAAK;YAC3C,oBAAoB,MAAM,CAAC,IAAI,CAAC,wBAAgB,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAC/D,CAAC;IACJ,CAAC;IACD,OAAO,GAAG,yBAAyB,EAAE,IAAI,MAAM,EAAE,CAAC;AACpD,CAAC;AAED;;;;;;;;;;;;GAYG;AACH,SAAgB,gBAAgB,CAAC,YAAoB;IACnD,MAAM,MAAM,GAAG,wBAAgB,CAAC,YAAY,CAAC,WAAW,EAAE,CAAC,CAAC;IAC5D,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,MAAM,IAAI,KAAK,CACb,0BAA0B,YAAY,KAAK;YAC3C,oBAAoB,MAAM,CAAC,IAAI,CAAC,wBAAgB,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAC/D,CAAC;IACJ,CAAC;IACD,OAAO,IAAI,CAAC,IAAI,CAAC,gBAAgB,EAAE,EAAE,MAAM,CAAC,CAAC;AAC/C,CAAC;AAED;;;;;;;;;;;;;GAaG;AACH,SAAgB,qBAAqB,CAAC,YAAoB,EAAE,YAAoB;IAC9E,OAAO,IAAI,CAAC,IAAI,CAAC,gBAAgB,CAAC,YAAY,CAAC,EAAE,YAAY,CAAC,CAAC;AACjE,CAAC;AAED;;;;;;;;GAQG;AACH,SAAgB,oBAAoB;IAClC,OAAO,IAAI,CAAC,IAAI,CAAC,gBAAgB,EAAE,EAAE,4BAA4B,CAAC,CAAC;AACrE,CAAC"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Log Cleanup Module
|
|
3
|
+
* Automatically deletes log files older than retention period
|
|
4
|
+
*/
|
|
5
|
+
/**
|
|
6
|
+
* Delete log files older than retention days
|
|
7
|
+
*/
|
|
8
|
+
export declare function cleanupOldLogs(): Promise<void>;
|
|
9
|
+
/**
|
|
10
|
+
* Start log cleanup scheduler
|
|
11
|
+
* Runs cleanup once per day at 2 AM
|
|
12
|
+
*/
|
|
13
|
+
export declare function startLogCleanupSchedule(): NodeJS.Timeout;
|
|
14
|
+
/**
|
|
15
|
+
* Stop log cleanup scheduler
|
|
16
|
+
*/
|
|
17
|
+
export declare function stopLogCleanupSchedule(timer: NodeJS.Timeout): void;
|
|
18
|
+
//# sourceMappingURL=log-cleaner.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"log-cleaner.d.ts","sourceRoot":"","sources":["../../src/utils/log-cleaner.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAWH;;GAEG;AAEH,wBAAsB,cAAc,IAAI,OAAO,CAAC,IAAI,CAAC,CA8CpD;AAED;;;GAGG;AACH,wBAAgB,uBAAuB,IAAI,MAAM,CAAC,OAAO,CAaxD;AAED;;GAEG;AACH,wBAAgB,sBAAsB,CAAC,KAAK,EAAE,MAAM,CAAC,OAAO,GAAG,IAAI,CAGlE"}
|
|
@@ -0,0 +1,112 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Log Cleanup Module
|
|
4
|
+
* Automatically deletes log files older than retention period
|
|
5
|
+
*/
|
|
6
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
7
|
+
if (k2 === undefined) k2 = k;
|
|
8
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
9
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
10
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
11
|
+
}
|
|
12
|
+
Object.defineProperty(o, k2, desc);
|
|
13
|
+
}) : (function(o, m, k, k2) {
|
|
14
|
+
if (k2 === undefined) k2 = k;
|
|
15
|
+
o[k2] = m[k];
|
|
16
|
+
}));
|
|
17
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
18
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
19
|
+
}) : function(o, v) {
|
|
20
|
+
o["default"] = v;
|
|
21
|
+
});
|
|
22
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
23
|
+
var ownKeys = function(o) {
|
|
24
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
25
|
+
var ar = [];
|
|
26
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
27
|
+
return ar;
|
|
28
|
+
};
|
|
29
|
+
return ownKeys(o);
|
|
30
|
+
};
|
|
31
|
+
return function (mod) {
|
|
32
|
+
if (mod && mod.__esModule) return mod;
|
|
33
|
+
var result = {};
|
|
34
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
35
|
+
__setModuleDefault(result, mod);
|
|
36
|
+
return result;
|
|
37
|
+
};
|
|
38
|
+
})();
|
|
39
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
40
|
+
exports.cleanupOldLogs = cleanupOldLogs;
|
|
41
|
+
exports.startLogCleanupSchedule = startLogCleanupSchedule;
|
|
42
|
+
exports.stopLogCleanupSchedule = stopLogCleanupSchedule;
|
|
43
|
+
const fs = __importStar(require("fs"));
|
|
44
|
+
const path = __importStar(require("path"));
|
|
45
|
+
const logger_1 = require("./logger");
|
|
46
|
+
const config_1 = require("../config");
|
|
47
|
+
// Matches both the canonical name (app-YYYY-MM-DD.log) produced after the
|
|
48
|
+
// midnight rename, and the active pino-roll name (app.YYYY-MM-DD.1.log).
|
|
49
|
+
const LOG_FILE_PATTERN = /^app[.-]\d{4}-\d{2}-\d{2}[\d.]*\.log$/;
|
|
50
|
+
/**
|
|
51
|
+
* Delete log files older than retention days
|
|
52
|
+
*/
|
|
53
|
+
// eslint-disable-next-line @typescript-eslint/require-await
|
|
54
|
+
async function cleanupOldLogs() {
|
|
55
|
+
const logsDir = path.resolve(process.cwd(), config_1.config.logging.dir);
|
|
56
|
+
if (!fs.existsSync(logsDir)) {
|
|
57
|
+
logger_1.logger.debug('Logs directory does not exist, skipping cleanup');
|
|
58
|
+
return;
|
|
59
|
+
}
|
|
60
|
+
const retentionMs = config_1.config.logging.retentionDays * 24 * 60 * 60 * 1000;
|
|
61
|
+
const now = Date.now();
|
|
62
|
+
try {
|
|
63
|
+
const files = fs.readdirSync(logsDir);
|
|
64
|
+
let deletedCount = 0;
|
|
65
|
+
for (const file of files) {
|
|
66
|
+
const match = file.match(LOG_FILE_PATTERN);
|
|
67
|
+
if (!match) {
|
|
68
|
+
continue; // Skip non-log files
|
|
69
|
+
}
|
|
70
|
+
const filePath = path.join(logsDir, file);
|
|
71
|
+
const stats = fs.statSync(filePath);
|
|
72
|
+
const fileAge = now - stats.mtimeMs;
|
|
73
|
+
if (fileAge > retentionMs) {
|
|
74
|
+
fs.unlinkSync(filePath);
|
|
75
|
+
deletedCount++;
|
|
76
|
+
logger_1.logger.info({ file, agedays: Math.floor(fileAge / (24 * 60 * 60 * 1000)) }, `Deleted old log file: ${file}`);
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
if (deletedCount > 0) {
|
|
80
|
+
logger_1.logger.info({ deletedCount }, `Log cleanup completed: ${deletedCount} old log files deleted`);
|
|
81
|
+
}
|
|
82
|
+
else {
|
|
83
|
+
logger_1.logger.debug('Log cleanup completed: no old log files to delete');
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
catch (error) {
|
|
87
|
+
logger_1.logger.error({ error }, 'Failed to cleanup old log files');
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
/**
|
|
91
|
+
* Start log cleanup scheduler
|
|
92
|
+
* Runs cleanup once per day at 2 AM
|
|
93
|
+
*/
|
|
94
|
+
function startLogCleanupSchedule() {
|
|
95
|
+
// Run cleanup immediately on startup
|
|
96
|
+
void cleanupOldLogs();
|
|
97
|
+
// Schedule cleanup every 7 days
|
|
98
|
+
const interval = 7 * 24 * 60 * 60 * 1000; // 7 days
|
|
99
|
+
const timer = setInterval(() => {
|
|
100
|
+
void cleanupOldLogs();
|
|
101
|
+
}, interval);
|
|
102
|
+
logger_1.logger.info({ retentionDays: config_1.config.logging.retentionDays }, 'Log cleanup scheduler started');
|
|
103
|
+
return timer;
|
|
104
|
+
}
|
|
105
|
+
/**
|
|
106
|
+
* Stop log cleanup scheduler
|
|
107
|
+
*/
|
|
108
|
+
function stopLogCleanupSchedule(timer) {
|
|
109
|
+
clearInterval(timer);
|
|
110
|
+
logger_1.logger.info('Log cleanup scheduler stopped');
|
|
111
|
+
}
|
|
112
|
+
//# sourceMappingURL=log-cleaner.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"log-cleaner.js","sourceRoot":"","sources":["../../src/utils/log-cleaner.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Logging Module
|
|
3
|
+
* Structured logging using pino with daily file rotation.
|
|
4
|
+
*
|
|
5
|
+
* Files are named app-YYYY-MM-DD.log. Rotation is implemented by:
|
|
6
|
+
* 1. Starting pino/file pointing at today's file (fixed fd, opened at startup).
|
|
7
|
+
* 2. A midnight timer in the main thread spawns a fresh child process for the
|
|
8
|
+
* next day's file via a second pino instance — but that would mean two loggers.
|
|
9
|
+
*
|
|
10
|
+
* Practical solution used here:
|
|
11
|
+
* - Use pino-roll (daily, dateFormat: 'yyyy-MM-dd').
|
|
12
|
+
* - pino-roll produces Logs/app.YYYY-MM-DD.1.log (date + sequential counter).
|
|
13
|
+
* - At midnight + 2 s we rename the *previous* day's app.YYYY-MM-DD.1.log
|
|
14
|
+
* → app-YYYY-MM-DD.log so the canonical name is clean.
|
|
15
|
+
* - The active (today's) file keeps the pino-roll name until it rotates.
|
|
16
|
+
* - log-cleaner scans by mtime so it handles both naming conventions.
|
|
17
|
+
*/
|
|
18
|
+
export declare const logger: import("pino").Logger<never>;
|
|
19
|
+
/**
|
|
20
|
+
* Log MCP Tool call
|
|
21
|
+
*/
|
|
22
|
+
export declare function logToolCall(toolName: string, userId: string, params: Record<string, unknown>, durationMs: number): void;
|
|
23
|
+
/**
|
|
24
|
+
* Log error with context
|
|
25
|
+
*/
|
|
26
|
+
export declare function logError(error: Error, context?: Record<string, unknown>): void;
|
|
27
|
+
/**
|
|
28
|
+
* Log performance metrics
|
|
29
|
+
*/
|
|
30
|
+
export declare function logPerformance(operation: string, durationMs: number, metadata?: Record<string, unknown>): void;
|
|
31
|
+
/**
|
|
32
|
+
* Log API request with detailed information
|
|
33
|
+
*/
|
|
34
|
+
export declare function logApiRequest(method: string, url: string, statusCode: number, durationMs: number, requestData?: unknown, responseData?: unknown, headers?: Record<string, string>): void;
|
|
35
|
+
/**
|
|
36
|
+
* Log API error with full details
|
|
37
|
+
*/
|
|
38
|
+
export declare function logApiError(method: string, url: string, error: Error, requestData?: unknown, statusCode?: number): void;
|
|
39
|
+
/**
|
|
40
|
+
* Log tool execution step
|
|
41
|
+
*/
|
|
42
|
+
export declare function logToolStep(toolName: string, step: string, details?: Record<string, unknown>): void;
|
|
43
|
+
/**
|
|
44
|
+
* Log tool execution result
|
|
45
|
+
*/
|
|
46
|
+
export declare function logToolResult(toolName: string, success: boolean, result?: unknown, error?: Error): void;
|
|
47
|
+
/**
|
|
48
|
+
* Log authentication attempt
|
|
49
|
+
*/
|
|
50
|
+
export declare function logAuthAttempt(type: 'token_validation' | 'permission_check', success: boolean, details?: Record<string, unknown>): void;
|
|
51
|
+
/**
|
|
52
|
+
* Log cache operation
|
|
53
|
+
*/
|
|
54
|
+
export declare function logCacheOperation(operation: 'get' | 'set' | 'delete' | 'hit' | 'miss', key: string, details?: Record<string, unknown>): void;
|
|
55
|
+
/**
|
|
56
|
+
* Log Git operation
|
|
57
|
+
*/
|
|
58
|
+
export declare function logGitOperation(operation: string, details: Record<string, unknown>, durationMs: number): void;
|
|
59
|
+
//# sourceMappingURL=logger.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"logger.d.ts","sourceRoot":"","sources":["../../src/utils/logger.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AA+CH,eAAO,MAAM,MAAM,8BAmCjB,CAAC;AAEH;;GAEG;AACH,wBAAgB,WAAW,CACzB,QAAQ,EAAE,MAAM,EAChB,MAAM,EAAE,MAAM,EACd,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC/B,UAAU,EAAE,MAAM,GACjB,IAAI,CAWN;AAED;;GAEG;AACH,wBAAgB,QAAQ,CAAC,KAAK,EAAE,KAAK,EAAE,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAa9E;AAED;;GAEG;AACH,wBAAgB,cAAc,CAC5B,SAAS,EAAE,MAAM,EACjB,UAAU,EAAE,MAAM,EAClB,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GACjC,IAAI,CAUN;AAED;;GAEG;AACH,wBAAgB,aAAa,CAC3B,MAAM,EAAE,MAAM,EACd,GAAG,EAAE,MAAM,EACX,UAAU,EAAE,MAAM,EAClB,UAAU,EAAE,MAAM,EAClB,WAAW,CAAC,EAAE,OAAO,EACrB,YAAY,CAAC,EAAE,OAAO,EACtB,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAC/B,IAAI,CAcN;AAED;;GAEG;AACH,wBAAgB,WAAW,CACzB,MAAM,EAAE,MAAM,EACd,GAAG,EAAE,MAAM,EACX,KAAK,EAAE,KAAK,EACZ,WAAW,CAAC,EAAE,OAAO,EACrB,UAAU,CAAC,EAAE,MAAM,GAClB,IAAI,CAgBN;AAED;;GAEG;AACH,wBAAgB,WAAW,CACzB,QAAQ,EAAE,MAAM,EAChB,IAAI,EAAE,MAAM,EACZ,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAChC,IAAI,CAUN;AAED;;GAEG;AACH,wBAAgB,aAAa,CAC3B,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE,OAAO,EAChB,MAAM,CAAC,EAAE,OAAO,EAChB,KAAK,CAAC,EAAE,KAAK,GACZ,IAAI,CAgBN;AAED;;GAEG;AACH,wBAAgB,cAAc,CAC5B,IAAI,EAAE,kBAAkB,GAAG,kBAAkB,EAC7C,OAAO,EAAE,OAAO,EAChB,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAChC,IAAI,CAWN;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAC/B,SAAS,EAAE,KAAK,GAAG,KAAK,GAAG,QAAQ,GAAG,KAAK,GAAG,MAAM,EACpD,GAAG,EAAE,MAAM,EACX,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAChC,IAAI,CAUN;AAqBD;;GAEG;AACH,wBAAgB,eAAe,CAC7B,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAChC,UAAU,EAAE,MAAM,GACjB,IAAI,CAUN"}
|
|
@@ -0,0 +1,292 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Logging Module
|
|
4
|
+
* Structured logging using pino with daily file rotation.
|
|
5
|
+
*
|
|
6
|
+
* Files are named app-YYYY-MM-DD.log. Rotation is implemented by:
|
|
7
|
+
* 1. Starting pino/file pointing at today's file (fixed fd, opened at startup).
|
|
8
|
+
* 2. A midnight timer in the main thread spawns a fresh child process for the
|
|
9
|
+
* next day's file via a second pino instance — but that would mean two loggers.
|
|
10
|
+
*
|
|
11
|
+
* Practical solution used here:
|
|
12
|
+
* - Use pino-roll (daily, dateFormat: 'yyyy-MM-dd').
|
|
13
|
+
* - pino-roll produces Logs/app.YYYY-MM-DD.1.log (date + sequential counter).
|
|
14
|
+
* - At midnight + 2 s we rename the *previous* day's app.YYYY-MM-DD.1.log
|
|
15
|
+
* → app-YYYY-MM-DD.log so the canonical name is clean.
|
|
16
|
+
* - The active (today's) file keeps the pino-roll name until it rotates.
|
|
17
|
+
* - log-cleaner scans by mtime so it handles both naming conventions.
|
|
18
|
+
*/
|
|
19
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
20
|
+
if (k2 === undefined) k2 = k;
|
|
21
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
22
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
23
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
24
|
+
}
|
|
25
|
+
Object.defineProperty(o, k2, desc);
|
|
26
|
+
}) : (function(o, m, k, k2) {
|
|
27
|
+
if (k2 === undefined) k2 = k;
|
|
28
|
+
o[k2] = m[k];
|
|
29
|
+
}));
|
|
30
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
31
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
32
|
+
}) : function(o, v) {
|
|
33
|
+
o["default"] = v;
|
|
34
|
+
});
|
|
35
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
36
|
+
var ownKeys = function(o) {
|
|
37
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
38
|
+
var ar = [];
|
|
39
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
40
|
+
return ar;
|
|
41
|
+
};
|
|
42
|
+
return ownKeys(o);
|
|
43
|
+
};
|
|
44
|
+
return function (mod) {
|
|
45
|
+
if (mod && mod.__esModule) return mod;
|
|
46
|
+
var result = {};
|
|
47
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
48
|
+
__setModuleDefault(result, mod);
|
|
49
|
+
return result;
|
|
50
|
+
};
|
|
51
|
+
})();
|
|
52
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
53
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
54
|
+
};
|
|
55
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
56
|
+
exports.logger = void 0;
|
|
57
|
+
exports.logToolCall = logToolCall;
|
|
58
|
+
exports.logError = logError;
|
|
59
|
+
exports.logPerformance = logPerformance;
|
|
60
|
+
exports.logApiRequest = logApiRequest;
|
|
61
|
+
exports.logApiError = logApiError;
|
|
62
|
+
exports.logToolStep = logToolStep;
|
|
63
|
+
exports.logToolResult = logToolResult;
|
|
64
|
+
exports.logAuthAttempt = logAuthAttempt;
|
|
65
|
+
exports.logCacheOperation = logCacheOperation;
|
|
66
|
+
exports.logGitOperation = logGitOperation;
|
|
67
|
+
const pino_1 = __importDefault(require("pino"));
|
|
68
|
+
const path = __importStar(require("path"));
|
|
69
|
+
const fs = __importStar(require("fs"));
|
|
70
|
+
const config_1 = require("../config");
|
|
71
|
+
// Ensure logs directory exists (relative to project root)
|
|
72
|
+
const logsDir = path.resolve(process.cwd(), config_1.config.logging.dir);
|
|
73
|
+
if (!fs.existsSync(logsDir)) {
|
|
74
|
+
fs.mkdirSync(logsDir, { recursive: true });
|
|
75
|
+
}
|
|
76
|
+
/** ms until the next local midnight + 1 s buffer. */
|
|
77
|
+
function msUntilMidnight() {
|
|
78
|
+
const now = new Date();
|
|
79
|
+
const next = new Date(now.getFullYear(), now.getMonth(), now.getDate() + 1, 0, 0, 1);
|
|
80
|
+
return next.getTime() - now.getTime();
|
|
81
|
+
}
|
|
82
|
+
/**
|
|
83
|
+
* Rename yesterday's pino-roll file (app.YYYY-MM-DD.1.log)
|
|
84
|
+
* to the canonical name (app-YYYY-MM-DD.log) once it has been rotated away.
|
|
85
|
+
*/
|
|
86
|
+
function renameYesterdayLog() {
|
|
87
|
+
const d = new Date();
|
|
88
|
+
d.setDate(d.getDate() - 1);
|
|
89
|
+
const dateStr = [
|
|
90
|
+
d.getFullYear(),
|
|
91
|
+
String(d.getMonth() + 1).padStart(2, '0'),
|
|
92
|
+
String(d.getDate()).padStart(2, '0'),
|
|
93
|
+
].join('-');
|
|
94
|
+
const src = path.join(logsDir, `app.${dateStr}.1.log`);
|
|
95
|
+
const dst = path.join(logsDir, `app-${dateStr}.log`);
|
|
96
|
+
if (fs.existsSync(src) && !fs.existsSync(dst)) {
|
|
97
|
+
try {
|
|
98
|
+
fs.renameSync(src, dst);
|
|
99
|
+
}
|
|
100
|
+
catch { /* non-fatal */ }
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
// Fire rename at midnight + 2 s, then every 24 h.
|
|
104
|
+
setTimeout(() => {
|
|
105
|
+
renameYesterdayLog();
|
|
106
|
+
setInterval(renameYesterdayLog, 24 * 60 * 60 * 1000).unref();
|
|
107
|
+
}, msUntilMidnight() + 2000).unref();
|
|
108
|
+
// Create pino logger with multi-target transport
|
|
109
|
+
exports.logger = (0, pino_1.default)({
|
|
110
|
+
level: config_1.config.logLevel,
|
|
111
|
+
timestamp: pino_1.default.stdTimeFunctions.isoTime,
|
|
112
|
+
base: {
|
|
113
|
+
service: 'csp-ai-agent-mcp',
|
|
114
|
+
},
|
|
115
|
+
transport: {
|
|
116
|
+
targets: [
|
|
117
|
+
// Console output (pretty format in development)
|
|
118
|
+
{
|
|
119
|
+
target: 'pino-pretty',
|
|
120
|
+
level: config_1.config.logLevel,
|
|
121
|
+
options: {
|
|
122
|
+
colorize: true,
|
|
123
|
+
translateTime: 'SYS:standard',
|
|
124
|
+
ignore: 'pid,hostname',
|
|
125
|
+
singleLine: false,
|
|
126
|
+
},
|
|
127
|
+
},
|
|
128
|
+
// Daily-rotating file output.
|
|
129
|
+
// Active file: Logs/app.YYYY-MM-DD.1.log
|
|
130
|
+
// After midnight rename: Logs/app-YYYY-MM-DD.log
|
|
131
|
+
{
|
|
132
|
+
target: 'pino-roll',
|
|
133
|
+
level: config_1.config.logLevel,
|
|
134
|
+
options: {
|
|
135
|
+
file: path.join(logsDir, 'app'),
|
|
136
|
+
frequency: 'daily',
|
|
137
|
+
dateFormat: 'yyyy-MM-dd',
|
|
138
|
+
mkdir: true,
|
|
139
|
+
sync: false,
|
|
140
|
+
},
|
|
141
|
+
},
|
|
142
|
+
],
|
|
143
|
+
},
|
|
144
|
+
});
|
|
145
|
+
/**
|
|
146
|
+
* Log MCP Tool call
|
|
147
|
+
*/
|
|
148
|
+
function logToolCall(toolName, userId, params, durationMs) {
|
|
149
|
+
exports.logger.info({
|
|
150
|
+
type: 'tool_call',
|
|
151
|
+
toolName,
|
|
152
|
+
userId,
|
|
153
|
+
params,
|
|
154
|
+
durationMs,
|
|
155
|
+
}, `Tool ${toolName} called by ${userId} (${durationMs}ms)`);
|
|
156
|
+
}
|
|
157
|
+
/**
|
|
158
|
+
* Log error with context
|
|
159
|
+
*/
|
|
160
|
+
function logError(error, context) {
|
|
161
|
+
exports.logger.error({
|
|
162
|
+
type: 'error',
|
|
163
|
+
error: {
|
|
164
|
+
message: error.message,
|
|
165
|
+
stack: error.stack,
|
|
166
|
+
name: error.name,
|
|
167
|
+
},
|
|
168
|
+
...context,
|
|
169
|
+
}, error.message);
|
|
170
|
+
}
|
|
171
|
+
/**
|
|
172
|
+
* Log performance metrics
|
|
173
|
+
*/
|
|
174
|
+
function logPerformance(operation, durationMs, metadata) {
|
|
175
|
+
exports.logger.info({
|
|
176
|
+
type: 'performance',
|
|
177
|
+
operation,
|
|
178
|
+
durationMs,
|
|
179
|
+
...metadata,
|
|
180
|
+
}, `${operation} completed in ${durationMs}ms`);
|
|
181
|
+
}
|
|
182
|
+
/**
|
|
183
|
+
* Log API request with detailed information
|
|
184
|
+
*/
|
|
185
|
+
function logApiRequest(method, url, statusCode, durationMs, requestData, responseData, headers) {
|
|
186
|
+
exports.logger.info({
|
|
187
|
+
type: 'api_request',
|
|
188
|
+
method,
|
|
189
|
+
url,
|
|
190
|
+
statusCode,
|
|
191
|
+
durationMs,
|
|
192
|
+
requestData: requestData ? JSON.stringify(requestData).substring(0, 500) : undefined,
|
|
193
|
+
responseData: responseData ? JSON.stringify(responseData).substring(0, 1000) : undefined,
|
|
194
|
+
headers: headers ? sanitizeHeaders(headers) : undefined,
|
|
195
|
+
}, `${method} ${url} - ${statusCode} (${durationMs}ms)`);
|
|
196
|
+
}
|
|
197
|
+
/**
|
|
198
|
+
* Log API error with full details
|
|
199
|
+
*/
|
|
200
|
+
function logApiError(method, url, error, requestData, statusCode) {
|
|
201
|
+
exports.logger.error({
|
|
202
|
+
type: 'api_error',
|
|
203
|
+
method,
|
|
204
|
+
url,
|
|
205
|
+
statusCode,
|
|
206
|
+
requestData: requestData ? JSON.stringify(requestData).substring(0, 500) : undefined,
|
|
207
|
+
error: {
|
|
208
|
+
message: error.message,
|
|
209
|
+
stack: error.stack,
|
|
210
|
+
name: error.name,
|
|
211
|
+
},
|
|
212
|
+
}, `API Error: ${method} ${url} - ${error.message}`);
|
|
213
|
+
}
|
|
214
|
+
/**
|
|
215
|
+
* Log tool execution step
|
|
216
|
+
*/
|
|
217
|
+
function logToolStep(toolName, step, details) {
|
|
218
|
+
exports.logger.debug({
|
|
219
|
+
type: 'tool_step',
|
|
220
|
+
toolName,
|
|
221
|
+
step,
|
|
222
|
+
...details,
|
|
223
|
+
}, `[${toolName}] ${step}`);
|
|
224
|
+
}
|
|
225
|
+
/**
|
|
226
|
+
* Log tool execution result
|
|
227
|
+
*/
|
|
228
|
+
function logToolResult(toolName, success, result, error) {
|
|
229
|
+
const level = success ? 'info' : 'error';
|
|
230
|
+
exports.logger[level]({
|
|
231
|
+
type: 'tool_result',
|
|
232
|
+
toolName,
|
|
233
|
+
success,
|
|
234
|
+
result: result ? JSON.stringify(result).substring(0, 1000) : undefined,
|
|
235
|
+
error: error ? {
|
|
236
|
+
message: error.message,
|
|
237
|
+
stack: error.stack,
|
|
238
|
+
name: error.name,
|
|
239
|
+
} : undefined,
|
|
240
|
+
}, `[${toolName}] ${success ? 'Success' : 'Failed'}`);
|
|
241
|
+
}
|
|
242
|
+
/**
|
|
243
|
+
* Log authentication attempt
|
|
244
|
+
*/
|
|
245
|
+
function logAuthAttempt(type, success, details) {
|
|
246
|
+
const level = success ? 'info' : 'warn';
|
|
247
|
+
exports.logger[level]({
|
|
248
|
+
type: 'auth',
|
|
249
|
+
operation: type,
|
|
250
|
+
success,
|
|
251
|
+
...details,
|
|
252
|
+
}, `Auth ${type}: ${success ? 'Success' : 'Failed'}`);
|
|
253
|
+
}
|
|
254
|
+
/**
|
|
255
|
+
* Log cache operation
|
|
256
|
+
*/
|
|
257
|
+
function logCacheOperation(operation, key, details) {
|
|
258
|
+
exports.logger.debug({
|
|
259
|
+
type: 'cache',
|
|
260
|
+
operation,
|
|
261
|
+
key,
|
|
262
|
+
...details,
|
|
263
|
+
}, `Cache ${operation}: ${key}`);
|
|
264
|
+
}
|
|
265
|
+
/**
|
|
266
|
+
* Sanitize headers to remove sensitive information
|
|
267
|
+
*/
|
|
268
|
+
function sanitizeHeaders(headers) {
|
|
269
|
+
const sanitized = { ...headers };
|
|
270
|
+
// Mask Authorization header
|
|
271
|
+
if (sanitized['Authorization'] || sanitized['authorization']) {
|
|
272
|
+
const authKey = sanitized['Authorization'] ? 'Authorization' : 'authorization';
|
|
273
|
+
const authValue = sanitized[authKey];
|
|
274
|
+
if (authValue && authValue.startsWith('Bearer ')) {
|
|
275
|
+
const token = authValue.substring(7);
|
|
276
|
+
sanitized[authKey] = `Bearer ${token.substring(0, 10)}...${token.substring(token.length - 10)}`;
|
|
277
|
+
}
|
|
278
|
+
}
|
|
279
|
+
return sanitized;
|
|
280
|
+
}
|
|
281
|
+
/**
|
|
282
|
+
* Log Git operation
|
|
283
|
+
*/
|
|
284
|
+
function logGitOperation(operation, details, durationMs) {
|
|
285
|
+
exports.logger.info({
|
|
286
|
+
type: 'git_operation',
|
|
287
|
+
operation,
|
|
288
|
+
...details,
|
|
289
|
+
durationMs,
|
|
290
|
+
}, `Git ${operation} completed (${durationMs}ms)`);
|
|
291
|
+
}
|
|
292
|
+
//# sourceMappingURL=logger.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"logger.js","sourceRoot":"","sources":["../../src/utils/logger.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Request Validation Utilities
|
|
3
|
+
* Enhanced validation with clear error messages
|
|
4
|
+
*/
|
|
5
|
+
export interface ValidationError {
|
|
6
|
+
field: string;
|
|
7
|
+
message: string;
|
|
8
|
+
expected?: string;
|
|
9
|
+
received?: any;
|
|
10
|
+
suggestion?: string;
|
|
11
|
+
}
|
|
12
|
+
export declare class RequestValidationError extends Error {
|
|
13
|
+
errors: ValidationError[];
|
|
14
|
+
statusCode: number;
|
|
15
|
+
constructor(errors: ValidationError[], statusCode?: number);
|
|
16
|
+
toJSON(): {
|
|
17
|
+
error: string;
|
|
18
|
+
message: string;
|
|
19
|
+
details: ValidationError[];
|
|
20
|
+
};
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* Validate required field
|
|
24
|
+
*/
|
|
25
|
+
export declare function validateRequired(value: any, fieldName: string): ValidationError | null;
|
|
26
|
+
/**
|
|
27
|
+
* Validate string type
|
|
28
|
+
*/
|
|
29
|
+
export declare function validateString(value: any, fieldName: string): ValidationError | null;
|
|
30
|
+
/**
|
|
31
|
+
* Validate enum value
|
|
32
|
+
*/
|
|
33
|
+
export declare function validateEnum(value: any, fieldName: string, allowedValues: readonly string[]): ValidationError | null;
|
|
34
|
+
/**
|
|
35
|
+
* Validate array type
|
|
36
|
+
*/
|
|
37
|
+
export declare function validateArray(value: any, fieldName: string): ValidationError | null;
|
|
38
|
+
/**
|
|
39
|
+
* Validate object type
|
|
40
|
+
*/
|
|
41
|
+
export declare function validateObject(value: any, fieldName: string): ValidationError | null;
|
|
42
|
+
/**
|
|
43
|
+
* Validate boolean type
|
|
44
|
+
*/
|
|
45
|
+
export declare function validateBoolean(value: any, fieldName: string): ValidationError | null;
|
|
46
|
+
/**
|
|
47
|
+
* Validate number type
|
|
48
|
+
*/
|
|
49
|
+
export declare function validateNumber(value: any, fieldName: string): ValidationError | null;
|
|
50
|
+
/**
|
|
51
|
+
* Validate SSE connection parameters
|
|
52
|
+
*/
|
|
53
|
+
export declare function validateSSEConnectionParams(_body: any): ValidationError[];
|
|
54
|
+
/**
|
|
55
|
+
* Validate message parameters
|
|
56
|
+
*/
|
|
57
|
+
export declare function validateMessageParams(body: any): ValidationError[];
|
|
58
|
+
//# sourceMappingURL=validation.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"validation.d.ts","sourceRoot":"","sources":["../../src/utils/validation.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,MAAM,WAAW,eAAe;IAC9B,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,GAAG,CAAC;IACf,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,qBAAa,sBAAuB,SAAQ,KAAK;IACxC,MAAM,EAAE,eAAe,EAAE,CAAC;IAC1B,UAAU,EAAE,MAAM,CAAC;gBAEd,MAAM,EAAE,eAAe,EAAE,EAAE,UAAU,SAAM;IAQvD,MAAM;;;;;CAOP;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAC9B,KAAK,EAAE,GAAG,EACV,SAAS,EAAE,MAAM,GAChB,eAAe,GAAG,IAAI,CAUxB;AAED;;GAEG;AACH,wBAAgB,cAAc,CAC5B,KAAK,EAAE,GAAG,EACV,SAAS,EAAE,MAAM,GAChB,eAAe,GAAG,IAAI,CAUxB;AAED;;GAEG;AACH,wBAAgB,YAAY,CAC1B,KAAK,EAAE,GAAG,EACV,SAAS,EAAE,MAAM,EACjB,aAAa,EAAE,SAAS,MAAM,EAAE,GAC/B,eAAe,GAAG,IAAI,CAcxB;AAED;;GAEG;AACH,wBAAgB,aAAa,CAC3B,KAAK,EAAE,GAAG,EACV,SAAS,EAAE,MAAM,GAChB,eAAe,GAAG,IAAI,CAUxB;AAED;;GAEG;AACH,wBAAgB,cAAc,CAC5B,KAAK,EAAE,GAAG,EACV,SAAS,EAAE,MAAM,GAChB,eAAe,GAAG,IAAI,CAUxB;AAED;;GAEG;AACH,wBAAgB,eAAe,CAC7B,KAAK,EAAE,GAAG,EACV,SAAS,EAAE,MAAM,GAChB,eAAe,GAAG,IAAI,CAUxB;AAED;;GAEG;AACH,wBAAgB,cAAc,CAC5B,KAAK,EAAE,GAAG,EACV,SAAS,EAAE,MAAM,GAChB,eAAe,GAAG,IAAI,CAUxB;AA8DD;;GAEG;AACH,wBAAgB,2BAA2B,CAAC,KAAK,EAAE,GAAG,GAAG,eAAe,EAAE,CAOzE;AAED;;GAEG;AACH,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,GAAG,GAAG,eAAe,EAAE,CAqBlE"}
|