proofscan 0.1.1 → 0.2.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 +172 -24
- package/dist/cli.js +4 -2
- package/dist/cli.js.map +1 -1
- package/dist/commands/archive.d.ts +6 -0
- package/dist/commands/archive.d.ts.map +1 -0
- package/dist/commands/archive.js +245 -0
- package/dist/commands/archive.js.map +1 -0
- package/dist/commands/index.d.ts +2 -0
- package/dist/commands/index.d.ts.map +1 -1
- package/dist/commands/index.js +2 -0
- package/dist/commands/index.js.map +1 -1
- package/dist/commands/monitor.d.ts +1 -1
- package/dist/commands/monitor.d.ts.map +1 -1
- package/dist/commands/monitor.js +33 -21
- package/dist/commands/monitor.js.map +1 -1
- package/dist/commands/scan.d.ts.map +1 -1
- package/dist/commands/scan.js +4 -0
- package/dist/commands/scan.js.map +1 -1
- package/dist/commands/sessions.d.ts +6 -0
- package/dist/commands/sessions.d.ts.map +1 -0
- package/dist/commands/sessions.js +203 -0
- package/dist/commands/sessions.js.map +1 -0
- package/dist/db/connection.d.ts +28 -0
- package/dist/db/connection.d.ts.map +1 -0
- package/dist/db/connection.js +123 -0
- package/dist/db/connection.js.map +1 -0
- package/dist/db/events-store.d.ts +56 -0
- package/dist/db/events-store.d.ts.map +1 -0
- package/dist/db/events-store.js +269 -0
- package/dist/db/events-store.js.map +1 -0
- package/dist/db/index.d.ts +6 -0
- package/dist/db/index.d.ts.map +1 -0
- package/dist/db/index.js +6 -0
- package/dist/db/index.js.map +1 -0
- package/dist/db/proofs-store.d.ts +56 -0
- package/dist/db/proofs-store.d.ts.map +1 -0
- package/dist/db/proofs-store.js +116 -0
- package/dist/db/proofs-store.js.map +1 -0
- package/dist/db/schema.d.ts +8 -0
- package/dist/db/schema.d.ts.map +1 -0
- package/dist/db/schema.js +76 -0
- package/dist/db/schema.js.map +1 -0
- package/dist/db/types.d.ts +64 -0
- package/dist/db/types.d.ts.map +1 -0
- package/dist/db/types.js +5 -0
- package/dist/db/types.js.map +1 -0
- package/dist/index.d.ts +14 -6
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +15 -6
- package/dist/index.js.map +1 -1
- package/dist/scanner/index.d.ts +3 -2
- package/dist/scanner/index.d.ts.map +1 -1
- package/dist/scanner/index.js +66 -51
- package/dist/scanner/index.js.map +1 -1
- package/dist/types/config.d.ts +7 -0
- package/dist/types/config.d.ts.map +1 -1
- package/dist/types/config.js +5 -0
- package/dist/types/config.js.map +1 -1
- package/dist/types/events.d.ts +1 -17
- package/dist/types/events.d.ts.map +1 -1
- package/dist/types/events.js +1 -0
- package/dist/types/events.js.map +1 -1
- package/package.json +3 -1
- package/dist/events/index.d.ts +0 -2
- package/dist/events/index.d.ts.map +0 -1
- package/dist/events/index.js +0 -2
- package/dist/events/index.js.map +0 -1
- package/dist/events/store.d.ts +0 -25
- package/dist/events/store.d.ts.map +0 -1
- package/dist/events/store.js +0 -91
- package/dist/events/store.js.map +0 -1
package/dist/index.d.ts
CHANGED
|
@@ -2,10 +2,18 @@
|
|
|
2
2
|
* proofscan - MCP Server scanner
|
|
3
3
|
* Programmatic API exports
|
|
4
4
|
*/
|
|
5
|
-
export
|
|
6
|
-
export
|
|
7
|
-
export
|
|
8
|
-
export
|
|
9
|
-
export
|
|
10
|
-
export
|
|
5
|
+
export type { TransportType, StdioTransport, HttpTransport, SseTransport, Transport, ConnectorPlugins, Connector, RetentionConfig, Config, } from './types/config.js';
|
|
6
|
+
export { DEFAULT_CONFIG, DEFAULT_RETENTION } from './types/config.js';
|
|
7
|
+
export type { ExitReason, EventDirection, EventKind, Session, RpcCall, Event, Proof, SessionWithStats, PruneCandidate, ArchivePlan, } from './db/types.js';
|
|
8
|
+
export { ConfigManager, parseConfig, validateConfig } from './config/index.js';
|
|
9
|
+
export { parseMcpServers, readStdin } from './config/import.js';
|
|
10
|
+
export { StdioConnection } from './transports/stdio.js';
|
|
11
|
+
export type { JsonRpcRequest, JsonRpcResponse, JsonRpcNotification, JsonRpcMessage } from './transports/stdio.js';
|
|
12
|
+
export { EventsStore } from './db/events-store.js';
|
|
13
|
+
export { ProofsStore } from './db/proofs-store.js';
|
|
14
|
+
export { getEventsDb, getProofsDb, closeAllDbs, getDbSizes } from './db/connection.js';
|
|
15
|
+
export { Scanner } from './scanner/index.js';
|
|
16
|
+
export type { ScanResult, ScanOptions } from './scanner/index.js';
|
|
17
|
+
export { resolveConfigPath, getDefaultConfigDir, getDefaultConfigPath, getEventsDir } from './utils/config-path.js';
|
|
18
|
+
export { atomicWriteFile, readFileSafe, fileExists, appendLine, readLastLines } from './utils/fs.js';
|
|
11
19
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,YAAY,EACV,aAAa,EACb,cAAc,EACd,aAAa,EACb,YAAY,EACZ,SAAS,EACT,gBAAgB,EAChB,SAAS,EACT,eAAe,EACf,MAAM,GACP,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EAAE,cAAc,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AAGtE,YAAY,EACV,UAAU,EACV,cAAc,EACd,SAAS,EACT,OAAO,EACP,OAAO,EACP,KAAK,EACL,KAAK,EACL,gBAAgB,EAChB,cAAc,EACd,WAAW,GACZ,MAAM,eAAe,CAAC;AAGvB,OAAO,EAAE,aAAa,EAAE,WAAW,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAC/E,OAAO,EAAE,eAAe,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAGhE,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AACxD,YAAY,EAAE,cAAc,EAAE,eAAe,EAAE,mBAAmB,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAGlH,OAAO,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AACnD,OAAO,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AACnD,OAAO,EAAE,WAAW,EAAE,WAAW,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAGvF,OAAO,EAAE,OAAO,EAAE,MAAM,oBAAoB,CAAC;AAC7C,YAAY,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAGlE,OAAO,EAAE,iBAAiB,EAAE,mBAAmB,EAAE,oBAAoB,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;AACpH,OAAO,EAAE,eAAe,EAAE,YAAY,EAAE,UAAU,EAAE,UAAU,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -2,10 +2,19 @@
|
|
|
2
2
|
* proofscan - MCP Server scanner
|
|
3
3
|
* Programmatic API exports
|
|
4
4
|
*/
|
|
5
|
-
export
|
|
6
|
-
|
|
7
|
-
export
|
|
8
|
-
export
|
|
9
|
-
|
|
10
|
-
export
|
|
5
|
+
export { DEFAULT_CONFIG, DEFAULT_RETENTION } from './types/config.js';
|
|
6
|
+
// Config
|
|
7
|
+
export { ConfigManager, parseConfig, validateConfig } from './config/index.js';
|
|
8
|
+
export { parseMcpServers, readStdin } from './config/import.js';
|
|
9
|
+
// Transports
|
|
10
|
+
export { StdioConnection } from './transports/stdio.js';
|
|
11
|
+
// Database (Phase2)
|
|
12
|
+
export { EventsStore } from './db/events-store.js';
|
|
13
|
+
export { ProofsStore } from './db/proofs-store.js';
|
|
14
|
+
export { getEventsDb, getProofsDb, closeAllDbs, getDbSizes } from './db/connection.js';
|
|
15
|
+
// Scanner
|
|
16
|
+
export { Scanner } from './scanner/index.js';
|
|
17
|
+
// Utils
|
|
18
|
+
export { resolveConfigPath, getDefaultConfigDir, getDefaultConfigPath, getEventsDir } from './utils/config-path.js';
|
|
19
|
+
export { atomicWriteFile, readFileSafe, fileExists, appendLine, readLastLines } from './utils/fs.js';
|
|
11
20
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAcH,OAAO,EAAE,cAAc,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AAgBtE,SAAS;AACT,OAAO,EAAE,aAAa,EAAE,WAAW,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAC/E,OAAO,EAAE,eAAe,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAEhE,aAAa;AACb,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAGxD,oBAAoB;AACpB,OAAO,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AACnD,OAAO,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AACnD,OAAO,EAAE,WAAW,EAAE,WAAW,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAEvF,UAAU;AACV,OAAO,EAAE,OAAO,EAAE,MAAM,oBAAoB,CAAC;AAG7C,QAAQ;AACR,OAAO,EAAE,iBAAiB,EAAE,mBAAmB,EAAE,oBAAoB,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;AACpH,OAAO,EAAE,eAAe,EAAE,YAAY,EAAE,UAAU,EAAE,UAAU,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC"}
|
package/dist/scanner/index.d.ts
CHANGED
|
@@ -1,11 +1,12 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Scanner - orchestrates MCP server scanning
|
|
3
|
-
* Connects, performs handshake, calls tools/list, logs events
|
|
3
|
+
* Connects, performs handshake, calls tools/list, logs events to SQLite
|
|
4
4
|
*/
|
|
5
5
|
import type { Connector } from '../types/index.js';
|
|
6
6
|
export interface ScanResult {
|
|
7
7
|
success: boolean;
|
|
8
8
|
connectorId: string;
|
|
9
|
+
sessionId: string;
|
|
9
10
|
tools?: unknown[];
|
|
10
11
|
error?: string;
|
|
11
12
|
eventCount: number;
|
|
@@ -14,7 +15,7 @@ export interface ScanOptions {
|
|
|
14
15
|
timeout?: number;
|
|
15
16
|
}
|
|
16
17
|
export declare class Scanner {
|
|
17
|
-
private
|
|
18
|
+
private eventsStore;
|
|
18
19
|
private configDir;
|
|
19
20
|
constructor(configDir: string);
|
|
20
21
|
scan(connector: Connector, options?: ScanOptions): Promise<ScanResult>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/scanner/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAkB,MAAM,mBAAmB,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/scanner/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAkB,MAAM,mBAAmB,CAAC;AAKnE,MAAM,WAAW,UAAU;IACzB,OAAO,EAAE,OAAO,CAAC;IACjB,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,CAAC,EAAE,OAAO,EAAE,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,WAAW;IAC1B,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,qBAAa,OAAO;IAClB,OAAO,CAAC,WAAW,CAAc;IACjC,OAAO,CAAC,SAAS,CAAS;gBAEd,SAAS,EAAE,MAAM;IAKvB,IAAI,CAAC,SAAS,EAAE,SAAS,EAAE,OAAO,GAAE,WAAgB,GAAG,OAAO,CAAC,UAAU,CAAC;CAiNjF"}
|
package/dist/scanner/index.js
CHANGED
|
@@ -1,35 +1,45 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Scanner - orchestrates MCP server scanning
|
|
3
|
-
* Connects, performs handshake, calls tools/list, logs events
|
|
3
|
+
* Connects, performs handshake, calls tools/list, logs events to SQLite
|
|
4
4
|
*/
|
|
5
5
|
import { StdioConnection } from '../transports/stdio.js';
|
|
6
|
-
import {
|
|
6
|
+
import { EventsStore } from '../db/events-store.js';
|
|
7
7
|
export class Scanner {
|
|
8
|
-
|
|
8
|
+
eventsStore;
|
|
9
9
|
configDir;
|
|
10
10
|
constructor(configDir) {
|
|
11
11
|
this.configDir = configDir;
|
|
12
|
-
this.
|
|
12
|
+
this.eventsStore = new EventsStore(configDir);
|
|
13
13
|
}
|
|
14
14
|
async scan(connector, options = {}) {
|
|
15
15
|
const timeout = (options.timeout || 30) * 1000;
|
|
16
16
|
let eventCount = 0;
|
|
17
17
|
if (connector.transport.type !== 'stdio') {
|
|
18
|
+
// Create a session even for unsupported transport to record the failure
|
|
19
|
+
const session = this.eventsStore.createSession(connector.id);
|
|
20
|
+
this.eventsStore.saveEvent(session.session_id, 'client_to_server', 'transport_event', {
|
|
21
|
+
rawJson: JSON.stringify({ type: 'error', message: `Unsupported transport type: ${connector.transport.type}` }),
|
|
22
|
+
});
|
|
23
|
+
this.eventsStore.endSession(session.session_id, 'error');
|
|
18
24
|
return {
|
|
19
25
|
success: false,
|
|
20
26
|
connectorId: connector.id,
|
|
27
|
+
sessionId: session.session_id,
|
|
21
28
|
error: `Unsupported transport type: ${connector.transport.type}`,
|
|
22
|
-
eventCount:
|
|
29
|
+
eventCount: 1,
|
|
23
30
|
};
|
|
24
31
|
}
|
|
25
32
|
const transport = connector.transport;
|
|
26
33
|
const connection = new StdioConnection(transport);
|
|
27
|
-
//
|
|
28
|
-
|
|
34
|
+
// Create new session
|
|
35
|
+
const session = this.eventsStore.createSession(connector.id);
|
|
36
|
+
const sessionId = session.session_id;
|
|
37
|
+
// Track RPC calls
|
|
38
|
+
const rpcIdMap = new Map(); // Maps JSON-RPC id to our rpc_id
|
|
29
39
|
try {
|
|
30
40
|
// Log connection attempt
|
|
31
|
-
|
|
32
|
-
|
|
41
|
+
this.eventsStore.saveEvent(sessionId, 'client_to_server', 'transport_event', {
|
|
42
|
+
rawJson: JSON.stringify({
|
|
33
43
|
type: 'connect_attempt',
|
|
34
44
|
command: transport.command,
|
|
35
45
|
args: transport.args,
|
|
@@ -37,13 +47,11 @@ export class Scanner {
|
|
|
37
47
|
});
|
|
38
48
|
eventCount++;
|
|
39
49
|
// Set up message logging
|
|
40
|
-
connection.on('message',
|
|
50
|
+
connection.on('message', (msg, raw) => {
|
|
41
51
|
const isRequest = 'method' in msg && 'id' in msg && msg.id !== null;
|
|
42
52
|
const isNotification = 'method' in msg && !('id' in msg);
|
|
43
53
|
const isResponse = 'id' in msg && !('method' in msg);
|
|
44
|
-
// Determine direction based on
|
|
45
|
-
// Requests/responses from server come through stdout
|
|
46
|
-
// We already emit our own requests when we send them
|
|
54
|
+
// Determine direction based on message type
|
|
47
55
|
const direction = isResponse ? 'server_to_client' :
|
|
48
56
|
(isRequest || isNotification) && !('id' in msg && 'result' in msg) ? 'client_to_server' : 'server_to_client';
|
|
49
57
|
let kind;
|
|
@@ -55,55 +63,55 @@ export class Scanner {
|
|
|
55
63
|
kind = 'response';
|
|
56
64
|
else
|
|
57
65
|
kind = 'transport_event';
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
66
|
+
let rpcId;
|
|
67
|
+
// Handle RPC tracking
|
|
68
|
+
if (isRequest && 'id' in msg && msg.id !== null && 'method' in msg) {
|
|
69
|
+
// New request - create RPC call record
|
|
70
|
+
const rpcCall = this.eventsStore.saveRpcCall(sessionId, String(msg.id), msg.method);
|
|
71
|
+
rpcIdMap.set(msg.id, rpcCall.rpc_id);
|
|
72
|
+
rpcId = rpcCall.rpc_id;
|
|
63
73
|
}
|
|
64
|
-
if ('id' in msg && msg.id !== null) {
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
if (resp.error) {
|
|
71
|
-
eventOpts.error = {
|
|
72
|
-
code: resp.error.code,
|
|
73
|
-
message: resp.error.message,
|
|
74
|
-
};
|
|
74
|
+
else if (isResponse && 'id' in msg && msg.id !== null) {
|
|
75
|
+
// Response - complete RPC call
|
|
76
|
+
rpcId = rpcIdMap.get(msg.id);
|
|
77
|
+
if (rpcId) {
|
|
78
|
+
const resp = msg;
|
|
79
|
+
this.eventsStore.completeRpcCall(sessionId, String(msg.id), !resp.error, resp.error?.code);
|
|
75
80
|
}
|
|
76
81
|
}
|
|
77
|
-
|
|
82
|
+
this.eventsStore.saveEvent(sessionId, direction, kind, {
|
|
83
|
+
rpcId: rpcId || (('id' in msg && msg.id !== null) ? String(msg.id) : undefined),
|
|
84
|
+
rawJson: raw,
|
|
85
|
+
});
|
|
78
86
|
eventCount++;
|
|
79
87
|
});
|
|
80
|
-
connection.on('stderr',
|
|
81
|
-
|
|
82
|
-
|
|
88
|
+
connection.on('stderr', (data) => {
|
|
89
|
+
this.eventsStore.saveEvent(sessionId, 'server_to_client', 'transport_event', {
|
|
90
|
+
rawJson: JSON.stringify({ type: 'stderr', data: data.trim() }),
|
|
83
91
|
});
|
|
84
92
|
eventCount++;
|
|
85
93
|
});
|
|
86
|
-
connection.on('error',
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
raw: JSON.stringify({ type: 'error', message: error.message }),
|
|
94
|
+
connection.on('error', (error) => {
|
|
95
|
+
this.eventsStore.saveEvent(sessionId, 'server_to_client', 'transport_event', {
|
|
96
|
+
rawJson: JSON.stringify({ type: 'error', message: error.message }),
|
|
90
97
|
});
|
|
91
98
|
eventCount++;
|
|
92
99
|
});
|
|
93
100
|
// Connect
|
|
94
101
|
await connection.connect();
|
|
95
|
-
|
|
96
|
-
|
|
102
|
+
this.eventsStore.saveEvent(sessionId, 'server_to_client', 'transport_event', {
|
|
103
|
+
rawJson: JSON.stringify({ type: 'connected' }),
|
|
97
104
|
});
|
|
98
105
|
eventCount++;
|
|
99
106
|
// MCP handshake: initialize
|
|
107
|
+
let initializeResponse;
|
|
100
108
|
try {
|
|
101
109
|
initializeResponse = await connection.sendRequest('initialize', {
|
|
102
110
|
protocolVersion: '2024-11-05',
|
|
103
111
|
capabilities: {},
|
|
104
112
|
clientInfo: {
|
|
105
113
|
name: 'proofscan',
|
|
106
|
-
version: '0.
|
|
114
|
+
version: '0.2.0',
|
|
107
115
|
},
|
|
108
116
|
}, timeout);
|
|
109
117
|
// Send initialized notification
|
|
@@ -111,14 +119,16 @@ export class Scanner {
|
|
|
111
119
|
}
|
|
112
120
|
catch (error) {
|
|
113
121
|
const errMsg = error instanceof Error ? error.message : String(error);
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
raw: JSON.stringify({ type: 'initialize_failed', error: errMsg }),
|
|
122
|
+
this.eventsStore.saveEvent(sessionId, 'client_to_server', 'transport_event', {
|
|
123
|
+
rawJson: JSON.stringify({ type: 'initialize_failed', error: errMsg }),
|
|
117
124
|
});
|
|
118
125
|
eventCount++;
|
|
126
|
+
this.eventsStore.endSession(sessionId, 'error');
|
|
127
|
+
connection.close();
|
|
119
128
|
return {
|
|
120
129
|
success: false,
|
|
121
130
|
connectorId: connector.id,
|
|
131
|
+
sessionId,
|
|
122
132
|
error: `Initialize failed: ${errMsg}`,
|
|
123
133
|
eventCount,
|
|
124
134
|
};
|
|
@@ -130,14 +140,16 @@ export class Scanner {
|
|
|
130
140
|
}
|
|
131
141
|
catch (error) {
|
|
132
142
|
const errMsg = error instanceof Error ? error.message : String(error);
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
raw: JSON.stringify({ type: 'tools_list_failed', error: errMsg }),
|
|
143
|
+
this.eventsStore.saveEvent(sessionId, 'client_to_server', 'transport_event', {
|
|
144
|
+
rawJson: JSON.stringify({ type: 'tools_list_failed', error: errMsg }),
|
|
136
145
|
});
|
|
137
146
|
eventCount++;
|
|
147
|
+
this.eventsStore.endSession(sessionId, 'error');
|
|
148
|
+
connection.close();
|
|
138
149
|
return {
|
|
139
150
|
success: false,
|
|
140
151
|
connectorId: connector.id,
|
|
152
|
+
sessionId,
|
|
141
153
|
error: `tools/list failed: ${errMsg}`,
|
|
142
154
|
eventCount,
|
|
143
155
|
};
|
|
@@ -148,28 +160,31 @@ export class Scanner {
|
|
|
148
160
|
: undefined;
|
|
149
161
|
// Close connection gracefully
|
|
150
162
|
connection.close();
|
|
151
|
-
|
|
152
|
-
|
|
163
|
+
this.eventsStore.saveEvent(sessionId, 'client_to_server', 'transport_event', {
|
|
164
|
+
rawJson: JSON.stringify({ type: 'disconnected' }),
|
|
153
165
|
});
|
|
154
166
|
eventCount++;
|
|
167
|
+
this.eventsStore.endSession(sessionId, 'normal');
|
|
155
168
|
return {
|
|
156
169
|
success: true,
|
|
157
170
|
connectorId: connector.id,
|
|
171
|
+
sessionId,
|
|
158
172
|
tools: tools || [],
|
|
159
173
|
eventCount,
|
|
160
174
|
};
|
|
161
175
|
}
|
|
162
176
|
catch (error) {
|
|
163
177
|
const errMsg = error instanceof Error ? error.message : String(error);
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
raw: JSON.stringify({ type: 'scan_error', error: errMsg }),
|
|
178
|
+
this.eventsStore.saveEvent(sessionId, 'client_to_server', 'transport_event', {
|
|
179
|
+
rawJson: JSON.stringify({ type: 'scan_error', error: errMsg }),
|
|
167
180
|
});
|
|
168
181
|
eventCount++;
|
|
182
|
+
this.eventsStore.endSession(sessionId, 'error');
|
|
169
183
|
connection.close();
|
|
170
184
|
return {
|
|
171
185
|
success: false,
|
|
172
186
|
connectorId: connector.id,
|
|
187
|
+
sessionId,
|
|
173
188
|
error: errMsg,
|
|
174
189
|
eventCount,
|
|
175
190
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/scanner/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,EAAE,eAAe,EAAmC,MAAM,wBAAwB,CAAC;AAC1F,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/scanner/index.ts"],"names":[],"mappings":"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"}
|
package/dist/types/config.d.ts
CHANGED
|
@@ -30,9 +30,16 @@ export interface Connector {
|
|
|
30
30
|
transport: Transport;
|
|
31
31
|
plugins?: ConnectorPlugins;
|
|
32
32
|
}
|
|
33
|
+
export interface RetentionConfig {
|
|
34
|
+
keep_last_sessions?: number;
|
|
35
|
+
raw_days?: number;
|
|
36
|
+
max_db_mb?: number;
|
|
37
|
+
}
|
|
33
38
|
export interface Config {
|
|
34
39
|
version: 1;
|
|
35
40
|
connectors: Connector[];
|
|
41
|
+
retention?: RetentionConfig;
|
|
36
42
|
}
|
|
37
43
|
export declare const DEFAULT_CONFIG: Config;
|
|
44
|
+
export declare const DEFAULT_RETENTION: RetentionConfig;
|
|
38
45
|
//# sourceMappingURL=config.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/types/config.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,MAAM,MAAM,aAAa,GAAG,OAAO,GAAG,UAAU,GAAG,SAAS,CAAC;AAE7D,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,OAAO,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;IAChB,GAAG,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC7B,GAAG,CAAC,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,UAAU,CAAC;IACjB,GAAG,EAAE,MAAM,CAAC;IACZ,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CAClC;AAED,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,SAAS,CAAC;IAChB,GAAG,EAAE,MAAM,CAAC;IACZ,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CAClC;AAED,MAAM,MAAM,SAAS,GAAG,cAAc,GAAG,aAAa,GAAG,YAAY,CAAC;AAEtE,MAAM,WAAW,gBAAgB;IAC/B,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAED,MAAM,WAAW,SAAS;IACxB,EAAE,EAAE,MAAM,CAAC;IACX,OAAO,EAAE,OAAO,CAAC;IACjB,SAAS,EAAE,SAAS,CAAC;IACrB,OAAO,CAAC,EAAE,gBAAgB,CAAC;CAC5B;AAED,MAAM,WAAW,MAAM;IACrB,OAAO,EAAE,CAAC,CAAC;IACX,UAAU,EAAE,SAAS,EAAE,CAAC;
|
|
1
|
+
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/types/config.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,MAAM,MAAM,aAAa,GAAG,OAAO,GAAG,UAAU,GAAG,SAAS,CAAC;AAE7D,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,OAAO,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;IAChB,GAAG,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC7B,GAAG,CAAC,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,UAAU,CAAC;IACjB,GAAG,EAAE,MAAM,CAAC;IACZ,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CAClC;AAED,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,SAAS,CAAC;IAChB,GAAG,EAAE,MAAM,CAAC;IACZ,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CAClC;AAED,MAAM,MAAM,SAAS,GAAG,cAAc,GAAG,aAAa,GAAG,YAAY,CAAC;AAEtE,MAAM,WAAW,gBAAgB;IAC/B,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAED,MAAM,WAAW,SAAS;IACxB,EAAE,EAAE,MAAM,CAAC;IACX,OAAO,EAAE,OAAO,CAAC;IACjB,SAAS,EAAE,SAAS,CAAC;IACrB,OAAO,CAAC,EAAE,gBAAgB,CAAC;CAC5B;AAED,MAAM,WAAW,eAAe;IAC9B,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,MAAM;IACrB,OAAO,EAAE,CAAC,CAAC;IACX,UAAU,EAAE,SAAS,EAAE,CAAC;IACxB,SAAS,CAAC,EAAE,eAAe,CAAC;CAC7B;AAED,eAAO,MAAM,cAAc,EAAE,MAG5B,CAAC;AAEF,eAAO,MAAM,iBAAiB,EAAE,eAI/B,CAAC"}
|
package/dist/types/config.js
CHANGED
package/dist/types/config.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/types/config.ts"],"names":[],"mappings":"AAAA;;GAEG;
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/types/config.ts"],"names":[],"mappings":"AAAA;;GAEG;AAkDH,MAAM,CAAC,MAAM,cAAc,GAAW;IACpC,OAAO,EAAE,CAAC;IACV,UAAU,EAAE,EAAE;CACf,CAAC;AAEF,MAAM,CAAC,MAAM,iBAAiB,GAAoB;IAChD,kBAAkB,EAAE,EAAE;IACtB,QAAQ,EAAE,CAAC;IACX,SAAS,EAAE,GAAG;CACf,CAAC"}
|
package/dist/types/events.d.ts
CHANGED
|
@@ -1,23 +1,7 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Event types for proofscan
|
|
3
|
+
* Legacy - Phase2 uses db/types.ts
|
|
3
4
|
*/
|
|
4
|
-
export type EventDirection = 'client_to_server' | 'server_to_client';
|
|
5
|
-
export type EventKind = 'request' | 'response' | 'notification' | 'transport_event';
|
|
6
|
-
export interface ScanEvent {
|
|
7
|
-
event_id: string;
|
|
8
|
-
ts: string;
|
|
9
|
-
connector_id: string;
|
|
10
|
-
direction: EventDirection;
|
|
11
|
-
kind: EventKind;
|
|
12
|
-
method?: string;
|
|
13
|
-
rpc_id?: string | number;
|
|
14
|
-
ok?: boolean;
|
|
15
|
-
error?: {
|
|
16
|
-
code: number;
|
|
17
|
-
message: string;
|
|
18
|
-
};
|
|
19
|
-
raw?: string;
|
|
20
|
-
}
|
|
21
5
|
export declare const MAX_RAW_SIZE = 10000;
|
|
22
6
|
export declare function truncateRaw(raw: string): string;
|
|
23
7
|
//# sourceMappingURL=events.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"events.d.ts","sourceRoot":"","sources":["../../src/types/events.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"events.d.ts","sourceRoot":"","sources":["../../src/types/events.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,eAAO,MAAM,YAAY,QAAQ,CAAC;AAElC,wBAAgB,WAAW,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAG/C"}
|
package/dist/types/events.js
CHANGED
package/dist/types/events.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"events.js","sourceRoot":"","sources":["../../src/types/events.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"events.js","sourceRoot":"","sources":["../../src/types/events.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,MAAM,CAAC,MAAM,YAAY,GAAG,KAAK,CAAC,CAAC,wCAAwC;AAE3E,MAAM,UAAU,WAAW,CAAC,GAAW;IACrC,IAAI,GAAG,CAAC,MAAM,IAAI,YAAY;QAAE,OAAO,GAAG,CAAC;IAC3C,OAAO,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,YAAY,CAAC,GAAG,iBAAiB,CAAC;AACxD,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "proofscan",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.2.0",
|
|
4
4
|
"description": "MCP Server scanner - eliminate black boxes by capturing JSON-RPC from connection to tools/list",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "dist/index.js",
|
|
@@ -46,12 +46,14 @@
|
|
|
46
46
|
},
|
|
47
47
|
"homepage": "https://github.com/proofofprotocol/proofscan#readme",
|
|
48
48
|
"devDependencies": {
|
|
49
|
+
"@types/better-sqlite3": "^7.6.8",
|
|
49
50
|
"@types/node": "^20.10.0",
|
|
50
51
|
"@types/uuid": "^9.0.7",
|
|
51
52
|
"typescript": "^5.3.0",
|
|
52
53
|
"vitest": "^1.0.0"
|
|
53
54
|
},
|
|
54
55
|
"dependencies": {
|
|
56
|
+
"better-sqlite3": "^11.0.0",
|
|
55
57
|
"commander": "^12.0.0",
|
|
56
58
|
"uuid": "^9.0.1"
|
|
57
59
|
},
|
package/dist/events/index.d.ts
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/events/index.ts"],"names":[],"mappings":"AAAA,cAAc,YAAY,CAAC"}
|
package/dist/events/index.js
DELETED
package/dist/events/index.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/events/index.ts"],"names":[],"mappings":"AAAA,cAAc,YAAY,CAAC"}
|
package/dist/events/store.d.ts
DELETED
|
@@ -1,25 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Event storage - JSONL file based
|
|
3
|
-
* Stores scan events in events/<connector_id>/<YYYYMMDD>.jsonl
|
|
4
|
-
*/
|
|
5
|
-
import type { ScanEvent, EventDirection, EventKind } from '../types/index.js';
|
|
6
|
-
export declare class EventStore {
|
|
7
|
-
private eventsDir;
|
|
8
|
-
constructor(configDir?: string);
|
|
9
|
-
private getDateString;
|
|
10
|
-
private getEventFilePath;
|
|
11
|
-
saveEvent(event: Omit<ScanEvent, 'event_id' | 'ts'>): Promise<ScanEvent>;
|
|
12
|
-
createEvent(connectorId: string, direction: EventDirection, kind: EventKind, options?: {
|
|
13
|
-
method?: string;
|
|
14
|
-
rpc_id?: string | number;
|
|
15
|
-
ok?: boolean;
|
|
16
|
-
error?: {
|
|
17
|
-
code: number;
|
|
18
|
-
message: string;
|
|
19
|
-
};
|
|
20
|
-
raw?: string;
|
|
21
|
-
}): Promise<ScanEvent>;
|
|
22
|
-
getRecentEvents(connectorId: string, count?: number): Promise<ScanEvent[]>;
|
|
23
|
-
listConnectorDates(connectorId: string): Promise<string[]>;
|
|
24
|
-
}
|
|
25
|
-
//# sourceMappingURL=store.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"store.d.ts","sourceRoot":"","sources":["../../src/events/store.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAKH,OAAO,KAAK,EAAE,SAAS,EAAE,cAAc,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AAK9E,qBAAa,UAAU;IACrB,OAAO,CAAC,SAAS,CAAS;gBAEd,SAAS,CAAC,EAAE,MAAM;IAI9B,OAAO,CAAC,aAAa;IAQrB,OAAO,CAAC,gBAAgB;IAKlB,SAAS,CAAC,KAAK,EAAE,IAAI,CAAC,SAAS,EAAE,UAAU,GAAG,IAAI,CAAC,GAAG,OAAO,CAAC,SAAS,CAAC;IAcxE,WAAW,CACf,WAAW,EAAE,MAAM,EACnB,SAAS,EAAE,cAAc,EACzB,IAAI,EAAE,SAAS,EACf,OAAO,GAAE;QACP,MAAM,CAAC,EAAE,MAAM,CAAC;QAChB,MAAM,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;QACzB,EAAE,CAAC,EAAE,OAAO,CAAC;QACb,KAAK,CAAC,EAAE;YAAE,IAAI,EAAE,MAAM,CAAC;YAAC,OAAO,EAAE,MAAM,CAAA;SAAE,CAAC;QAC1C,GAAG,CAAC,EAAE,MAAM,CAAC;KACT,GACL,OAAO,CAAC,SAAS,CAAC;IASf,eAAe,CAAC,WAAW,EAAE,MAAM,EAAE,KAAK,GAAE,MAAW,GAAG,OAAO,CAAC,SAAS,EAAE,CAAC;IAmC9E,kBAAkB,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;CAajE"}
|
package/dist/events/store.js
DELETED
|
@@ -1,91 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Event storage - JSONL file based
|
|
3
|
-
* Stores scan events in events/<connector_id>/<YYYYMMDD>.jsonl
|
|
4
|
-
*/
|
|
5
|
-
import { join } from 'path';
|
|
6
|
-
import { promises as fs } from 'fs';
|
|
7
|
-
import { randomUUID } from 'crypto';
|
|
8
|
-
import { truncateRaw } from '../types/events.js';
|
|
9
|
-
import { appendLine, readLastLines } from '../utils/fs.js';
|
|
10
|
-
import { getEventsDir } from '../utils/config-path.js';
|
|
11
|
-
export class EventStore {
|
|
12
|
-
eventsDir;
|
|
13
|
-
constructor(configDir) {
|
|
14
|
-
this.eventsDir = getEventsDir(configDir);
|
|
15
|
-
}
|
|
16
|
-
getDateString() {
|
|
17
|
-
const now = new Date();
|
|
18
|
-
const year = now.getFullYear();
|
|
19
|
-
const month = String(now.getMonth() + 1).padStart(2, '0');
|
|
20
|
-
const day = String(now.getDate()).padStart(2, '0');
|
|
21
|
-
return `${year}${month}${day}`;
|
|
22
|
-
}
|
|
23
|
-
getEventFilePath(connectorId, date) {
|
|
24
|
-
const dateStr = date || this.getDateString();
|
|
25
|
-
return join(this.eventsDir, connectorId, `${dateStr}.jsonl`);
|
|
26
|
-
}
|
|
27
|
-
async saveEvent(event) {
|
|
28
|
-
const fullEvent = {
|
|
29
|
-
event_id: randomUUID(),
|
|
30
|
-
ts: new Date().toISOString(),
|
|
31
|
-
...event,
|
|
32
|
-
raw: event.raw ? truncateRaw(event.raw) : undefined,
|
|
33
|
-
};
|
|
34
|
-
const filePath = this.getEventFilePath(event.connector_id);
|
|
35
|
-
await appendLine(filePath, JSON.stringify(fullEvent));
|
|
36
|
-
return fullEvent;
|
|
37
|
-
}
|
|
38
|
-
async createEvent(connectorId, direction, kind, options = {}) {
|
|
39
|
-
return this.saveEvent({
|
|
40
|
-
connector_id: connectorId,
|
|
41
|
-
direction,
|
|
42
|
-
kind,
|
|
43
|
-
...options,
|
|
44
|
-
});
|
|
45
|
-
}
|
|
46
|
-
async getRecentEvents(connectorId, count = 20) {
|
|
47
|
-
// List all event files for this connector
|
|
48
|
-
const connectorDir = join(this.eventsDir, connectorId);
|
|
49
|
-
try {
|
|
50
|
-
const files = await fs.readdir(connectorDir);
|
|
51
|
-
const jsonlFiles = files.filter(f => f.endsWith('.jsonl')).sort().reverse();
|
|
52
|
-
const events = [];
|
|
53
|
-
for (const file of jsonlFiles) {
|
|
54
|
-
if (events.length >= count)
|
|
55
|
-
break;
|
|
56
|
-
const filePath = join(connectorDir, file);
|
|
57
|
-
const remaining = count - events.length;
|
|
58
|
-
const lines = await readLastLines(filePath, remaining);
|
|
59
|
-
for (const line of lines.reverse()) {
|
|
60
|
-
try {
|
|
61
|
-
events.unshift(JSON.parse(line));
|
|
62
|
-
}
|
|
63
|
-
catch {
|
|
64
|
-
// Skip invalid lines
|
|
65
|
-
}
|
|
66
|
-
}
|
|
67
|
-
}
|
|
68
|
-
return events.slice(-count);
|
|
69
|
-
}
|
|
70
|
-
catch (error) {
|
|
71
|
-
if (error instanceof Error && 'code' in error && error.code === 'ENOENT') {
|
|
72
|
-
return [];
|
|
73
|
-
}
|
|
74
|
-
throw error;
|
|
75
|
-
}
|
|
76
|
-
}
|
|
77
|
-
async listConnectorDates(connectorId) {
|
|
78
|
-
const connectorDir = join(this.eventsDir, connectorId);
|
|
79
|
-
try {
|
|
80
|
-
const files = await fs.readdir(connectorDir);
|
|
81
|
-
return files
|
|
82
|
-
.filter(f => f.endsWith('.jsonl'))
|
|
83
|
-
.map(f => f.replace('.jsonl', ''))
|
|
84
|
-
.sort();
|
|
85
|
-
}
|
|
86
|
-
catch {
|
|
87
|
-
return [];
|
|
88
|
-
}
|
|
89
|
-
}
|
|
90
|
-
}
|
|
91
|
-
//# sourceMappingURL=store.js.map
|
package/dist/events/store.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"store.js","sourceRoot":"","sources":["../../src/events/store.ts"],"names":[],"mappings":"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"}
|