@structured-world/gitlab-mcp 6.43.1 → 6.45.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.
@@ -0,0 +1,101 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.ConnectionTracker = void 0;
4
+ exports.getConnectionTracker = getConnectionTracker;
5
+ exports.resetConnectionTracker = resetConnectionTracker;
6
+ const access_log_js_1 = require("./access-log.js");
7
+ const logger_js_1 = require("../logger.js");
8
+ class ConnectionTracker {
9
+ connections = new Map();
10
+ enabled;
11
+ constructor(enabled = true) {
12
+ this.enabled = enabled;
13
+ }
14
+ isEnabled() {
15
+ return this.enabled;
16
+ }
17
+ setEnabled(enabled) {
18
+ this.enabled = enabled;
19
+ }
20
+ openConnection(sessionId, clientIp) {
21
+ if (!this.enabled)
22
+ return;
23
+ const stats = {
24
+ connectedAt: Date.now(),
25
+ clientIp,
26
+ sessionId,
27
+ requestCount: 0,
28
+ toolCount: 0,
29
+ errorCount: 0,
30
+ };
31
+ this.connections.set(sessionId, stats);
32
+ logger_js_1.logger.debug({ sessionId, clientIp }, "Connection opened for tracking");
33
+ }
34
+ getStats(sessionId) {
35
+ return this.connections.get(sessionId);
36
+ }
37
+ incrementRequests(sessionId) {
38
+ const stats = this.connections.get(sessionId);
39
+ if (!stats)
40
+ return;
41
+ stats.requestCount++;
42
+ }
43
+ incrementTools(sessionId) {
44
+ const stats = this.connections.get(sessionId);
45
+ if (!stats)
46
+ return;
47
+ stats.toolCount++;
48
+ }
49
+ recordError(sessionId, error) {
50
+ const stats = this.connections.get(sessionId);
51
+ if (!stats)
52
+ return;
53
+ stats.errorCount++;
54
+ stats.lastError = error;
55
+ }
56
+ closeConnection(sessionId, reason) {
57
+ const stats = this.connections.get(sessionId);
58
+ if (!stats) {
59
+ if (this.enabled) {
60
+ logger_js_1.logger.debug({ sessionId }, "Connection not found on close");
61
+ }
62
+ return undefined;
63
+ }
64
+ this.connections.delete(sessionId);
65
+ if (!this.enabled) {
66
+ return undefined;
67
+ }
68
+ const entry = (0, access_log_js_1.createConnectionCloseEntry)(stats, reason);
69
+ const logLine = (0, access_log_js_1.formatConnectionClose)(entry);
70
+ logger_js_1.logger.info({ connectionClose: entry }, logLine);
71
+ return logLine;
72
+ }
73
+ hasConnection(sessionId) {
74
+ return this.connections.has(sessionId);
75
+ }
76
+ getActiveConnectionCount() {
77
+ return this.connections.size;
78
+ }
79
+ getAllSessionIds() {
80
+ return Array.from(this.connections.keys());
81
+ }
82
+ closeAllConnections(reason = "server_shutdown") {
83
+ const sessionIds = this.getAllSessionIds();
84
+ for (const sessionId of sessionIds) {
85
+ this.closeConnection(sessionId, reason);
86
+ }
87
+ }
88
+ clear() {
89
+ this.connections.clear();
90
+ }
91
+ }
92
+ exports.ConnectionTracker = ConnectionTracker;
93
+ let globalConnectionTracker = null;
94
+ function getConnectionTracker() {
95
+ globalConnectionTracker ??= new ConnectionTracker();
96
+ return globalConnectionTracker;
97
+ }
98
+ function resetConnectionTracker() {
99
+ globalConnectionTracker = null;
100
+ }
101
+ //# sourceMappingURL=connection-tracker.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"connection-tracker.js","sourceRoot":"","sources":["../../../src/logging/connection-tracker.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ export type { RequestStack, ConnectionStats, AccessLogEntry, ConnectionCloseEntry, ConnectionCloseReason, LogFormat, } from "./types.js";
2
+ export { DEFAULT_LOG_FORMAT } from "./types.js";
3
+ export { AccessLogFormatter, truncateSessionId, formatDuration, formatGitLabStatus, formatDetails, formatAccessLog, formatConnectionClose, createAccessLogEntry, createConnectionCloseEntry, } from "./access-log.js";
4
+ export { RequestTracker, getRequestTracker, resetRequestTracker, getCurrentRequestId, runWithRequestContext, runWithRequestContextAsync, type RequestContext, } from "./request-tracker.js";
5
+ export { ConnectionTracker, getConnectionTracker, resetConnectionTracker, } from "./connection-tracker.js";
@@ -0,0 +1,27 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.resetConnectionTracker = exports.getConnectionTracker = exports.ConnectionTracker = exports.runWithRequestContextAsync = exports.runWithRequestContext = exports.getCurrentRequestId = exports.resetRequestTracker = exports.getRequestTracker = exports.RequestTracker = exports.createConnectionCloseEntry = exports.createAccessLogEntry = exports.formatConnectionClose = exports.formatAccessLog = exports.formatDetails = exports.formatGitLabStatus = exports.formatDuration = exports.truncateSessionId = exports.AccessLogFormatter = exports.DEFAULT_LOG_FORMAT = void 0;
4
+ var types_js_1 = require("./types.js");
5
+ Object.defineProperty(exports, "DEFAULT_LOG_FORMAT", { enumerable: true, get: function () { return types_js_1.DEFAULT_LOG_FORMAT; } });
6
+ var access_log_js_1 = require("./access-log.js");
7
+ Object.defineProperty(exports, "AccessLogFormatter", { enumerable: true, get: function () { return access_log_js_1.AccessLogFormatter; } });
8
+ Object.defineProperty(exports, "truncateSessionId", { enumerable: true, get: function () { return access_log_js_1.truncateSessionId; } });
9
+ Object.defineProperty(exports, "formatDuration", { enumerable: true, get: function () { return access_log_js_1.formatDuration; } });
10
+ Object.defineProperty(exports, "formatGitLabStatus", { enumerable: true, get: function () { return access_log_js_1.formatGitLabStatus; } });
11
+ Object.defineProperty(exports, "formatDetails", { enumerable: true, get: function () { return access_log_js_1.formatDetails; } });
12
+ Object.defineProperty(exports, "formatAccessLog", { enumerable: true, get: function () { return access_log_js_1.formatAccessLog; } });
13
+ Object.defineProperty(exports, "formatConnectionClose", { enumerable: true, get: function () { return access_log_js_1.formatConnectionClose; } });
14
+ Object.defineProperty(exports, "createAccessLogEntry", { enumerable: true, get: function () { return access_log_js_1.createAccessLogEntry; } });
15
+ Object.defineProperty(exports, "createConnectionCloseEntry", { enumerable: true, get: function () { return access_log_js_1.createConnectionCloseEntry; } });
16
+ var request_tracker_js_1 = require("./request-tracker.js");
17
+ Object.defineProperty(exports, "RequestTracker", { enumerable: true, get: function () { return request_tracker_js_1.RequestTracker; } });
18
+ Object.defineProperty(exports, "getRequestTracker", { enumerable: true, get: function () { return request_tracker_js_1.getRequestTracker; } });
19
+ Object.defineProperty(exports, "resetRequestTracker", { enumerable: true, get: function () { return request_tracker_js_1.resetRequestTracker; } });
20
+ Object.defineProperty(exports, "getCurrentRequestId", { enumerable: true, get: function () { return request_tracker_js_1.getCurrentRequestId; } });
21
+ Object.defineProperty(exports, "runWithRequestContext", { enumerable: true, get: function () { return request_tracker_js_1.runWithRequestContext; } });
22
+ Object.defineProperty(exports, "runWithRequestContextAsync", { enumerable: true, get: function () { return request_tracker_js_1.runWithRequestContextAsync; } });
23
+ var connection_tracker_js_1 = require("./connection-tracker.js");
24
+ Object.defineProperty(exports, "ConnectionTracker", { enumerable: true, get: function () { return connection_tracker_js_1.ConnectionTracker; } });
25
+ Object.defineProperty(exports, "getConnectionTracker", { enumerable: true, get: function () { return connection_tracker_js_1.getConnectionTracker; } });
26
+ Object.defineProperty(exports, "resetConnectionTracker", { enumerable: true, get: function () { return connection_tracker_js_1.resetConnectionTracker; } });
27
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/logging/index.ts"],"names":[],"mappings":";;;AAiBA,uCAAgD;AAAvC,8GAAA,kBAAkB,OAAA;AAG3B,iDAUyB;AATvB,mHAAA,kBAAkB,OAAA;AAClB,kHAAA,iBAAiB,OAAA;AACjB,+GAAA,cAAc,OAAA;AACd,mHAAA,kBAAkB,OAAA;AAClB,8GAAA,aAAa,OAAA;AACb,gHAAA,eAAe,OAAA;AACf,sHAAA,qBAAqB,OAAA;AACrB,qHAAA,oBAAoB,OAAA;AACpB,2HAAA,0BAA0B,OAAA;AAI5B,2DAQ8B;AAP5B,oHAAA,cAAc,OAAA;AACd,uHAAA,iBAAiB,OAAA;AACjB,yHAAA,mBAAmB,OAAA;AACnB,yHAAA,mBAAmB,OAAA;AACnB,2HAAA,qBAAqB,OAAA;AACrB,gIAAA,0BAA0B,OAAA;AAK5B,iEAIiC;AAH/B,0HAAA,iBAAiB,OAAA;AACjB,6HAAA,oBAAoB,OAAA;AACpB,+HAAA,sBAAsB,OAAA"}
@@ -0,0 +1,39 @@
1
+ import type { RequestStack } from "./types.js";
2
+ export interface RequestContext {
3
+ requestId: string;
4
+ }
5
+ export declare function getCurrentRequestId(): string | undefined;
6
+ export declare function runWithRequestContext<T>(requestId: string, fn: () => T): T;
7
+ export declare function runWithRequestContextAsync<T>(requestId: string, fn: () => Promise<T>): Promise<T>;
8
+ export declare class RequestTracker {
9
+ private stacks;
10
+ private enabled;
11
+ constructor(enabled?: boolean);
12
+ isEnabled(): boolean;
13
+ setEnabled(enabled: boolean): void;
14
+ openStack(requestId: string, clientIp: string, method: string, path: string, sessionId?: string): void;
15
+ getStack(requestId: string): RequestStack | undefined;
16
+ setTool(requestId: string, tool: string, action?: string): void;
17
+ setGitLabResponse(requestId: string, status: number | "timeout" | "error", durationMs?: number): void;
18
+ addDetail(requestId: string, key: string, value: string | number | boolean): void;
19
+ addDetails(requestId: string, details: Record<string, string | number | boolean>): void;
20
+ setError(requestId: string, error: string): void;
21
+ setContext(requestId: string, context: string): void;
22
+ setReadOnly(requestId: string, readOnly: boolean): void;
23
+ setSessionId(requestId: string, sessionId: string): void;
24
+ closeStack(requestId: string, status: number): string | undefined;
25
+ closeStackWithError(requestId: string, error: string): string | undefined;
26
+ hasStack(requestId: string): boolean;
27
+ getOpenStackCount(): number;
28
+ clear(): void;
29
+ setToolForCurrentRequest(tool: string, action?: string): void;
30
+ setGitLabResponseForCurrentRequest(status: number | "timeout" | "error", durationMs?: number): void;
31
+ addDetailForCurrentRequest(key: string, value: string | number | boolean): void;
32
+ addDetailsForCurrentRequest(details: Record<string, string | number | boolean>): void;
33
+ setErrorForCurrentRequest(error: string): void;
34
+ setContextForCurrentRequest(context: string): void;
35
+ setReadOnlyForCurrentRequest(readOnly: boolean): void;
36
+ setSessionIdForCurrentRequest(sessionId: string): void;
37
+ }
38
+ export declare function getRequestTracker(): RequestTracker;
39
+ export declare function resetRequestTracker(): void;
@@ -0,0 +1,199 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.RequestTracker = void 0;
4
+ exports.getCurrentRequestId = getCurrentRequestId;
5
+ exports.runWithRequestContext = runWithRequestContext;
6
+ exports.runWithRequestContextAsync = runWithRequestContextAsync;
7
+ exports.getRequestTracker = getRequestTracker;
8
+ exports.resetRequestTracker = resetRequestTracker;
9
+ const async_hooks_1 = require("async_hooks");
10
+ const access_log_js_1 = require("./access-log.js");
11
+ const logger_js_1 = require("../logger.js");
12
+ const requestContext = new async_hooks_1.AsyncLocalStorage();
13
+ function getCurrentRequestId() {
14
+ return requestContext.getStore()?.requestId;
15
+ }
16
+ function runWithRequestContext(requestId, fn) {
17
+ return requestContext.run({ requestId }, fn);
18
+ }
19
+ async function runWithRequestContextAsync(requestId, fn) {
20
+ return requestContext.run({ requestId }, fn);
21
+ }
22
+ class RequestTracker {
23
+ stacks = new Map();
24
+ enabled;
25
+ constructor(enabled = true) {
26
+ this.enabled = enabled;
27
+ }
28
+ isEnabled() {
29
+ return this.enabled;
30
+ }
31
+ setEnabled(enabled) {
32
+ this.enabled = enabled;
33
+ }
34
+ openStack(requestId, clientIp, method, path, sessionId) {
35
+ if (!this.enabled)
36
+ return;
37
+ const stack = {
38
+ startTime: Date.now(),
39
+ clientIp,
40
+ method,
41
+ path,
42
+ sessionId,
43
+ details: {},
44
+ };
45
+ this.stacks.set(requestId, stack);
46
+ logger_js_1.logger.debug({ requestId, clientIp, method, path }, "Request stack opened");
47
+ }
48
+ getStack(requestId) {
49
+ return this.stacks.get(requestId);
50
+ }
51
+ setTool(requestId, tool, action) {
52
+ const stack = this.stacks.get(requestId);
53
+ if (!stack)
54
+ return;
55
+ stack.tool = tool;
56
+ if (action) {
57
+ stack.action = action;
58
+ }
59
+ logger_js_1.logger.debug({ requestId, tool, action }, "Tool set on request stack");
60
+ }
61
+ setGitLabResponse(requestId, status, durationMs) {
62
+ const stack = this.stacks.get(requestId);
63
+ if (!stack)
64
+ return;
65
+ stack.gitlabStatus = status;
66
+ if (durationMs !== undefined) {
67
+ stack.gitlabDuration = durationMs;
68
+ }
69
+ logger_js_1.logger.debug({ requestId, gitlabStatus: status, gitlabDuration: durationMs }, "GitLab response set on request stack");
70
+ }
71
+ addDetail(requestId, key, value) {
72
+ const stack = this.stacks.get(requestId);
73
+ if (!stack)
74
+ return;
75
+ stack.details[key] = value;
76
+ }
77
+ addDetails(requestId, details) {
78
+ const stack = this.stacks.get(requestId);
79
+ if (!stack)
80
+ return;
81
+ Object.assign(stack.details, details);
82
+ }
83
+ setError(requestId, error) {
84
+ const stack = this.stacks.get(requestId);
85
+ if (!stack)
86
+ return;
87
+ stack.error = error;
88
+ stack.details.err = error;
89
+ }
90
+ setContext(requestId, context) {
91
+ const stack = this.stacks.get(requestId);
92
+ if (!stack)
93
+ return;
94
+ stack.context = context;
95
+ }
96
+ setReadOnly(requestId, readOnly) {
97
+ const stack = this.stacks.get(requestId);
98
+ if (!stack)
99
+ return;
100
+ stack.readOnly = readOnly;
101
+ }
102
+ setSessionId(requestId, sessionId) {
103
+ const stack = this.stacks.get(requestId);
104
+ if (!stack)
105
+ return;
106
+ stack.sessionId = sessionId;
107
+ }
108
+ closeStack(requestId, status) {
109
+ const stack = this.stacks.get(requestId);
110
+ if (!stack) {
111
+ logger_js_1.logger.debug({ requestId }, "Request stack not found on close");
112
+ return undefined;
113
+ }
114
+ this.stacks.delete(requestId);
115
+ stack.status = status;
116
+ if (!this.enabled) {
117
+ return undefined;
118
+ }
119
+ const entry = (0, access_log_js_1.createAccessLogEntry)(stack);
120
+ const logLine = (0, access_log_js_1.formatAccessLog)(entry);
121
+ logger_js_1.logger.info({ accessLog: entry }, logLine);
122
+ return logLine;
123
+ }
124
+ closeStackWithError(requestId, error) {
125
+ const stack = this.stacks.get(requestId);
126
+ if (!stack)
127
+ return undefined;
128
+ stack.error = error;
129
+ stack.details.err = error;
130
+ return this.closeStack(requestId, 0);
131
+ }
132
+ hasStack(requestId) {
133
+ return this.stacks.has(requestId);
134
+ }
135
+ getOpenStackCount() {
136
+ return this.stacks.size;
137
+ }
138
+ clear() {
139
+ this.stacks.clear();
140
+ }
141
+ setToolForCurrentRequest(tool, action) {
142
+ const requestId = getCurrentRequestId();
143
+ if (requestId) {
144
+ this.setTool(requestId, tool, action);
145
+ }
146
+ }
147
+ setGitLabResponseForCurrentRequest(status, durationMs) {
148
+ const requestId = getCurrentRequestId();
149
+ if (requestId) {
150
+ this.setGitLabResponse(requestId, status, durationMs);
151
+ }
152
+ }
153
+ addDetailForCurrentRequest(key, value) {
154
+ const requestId = getCurrentRequestId();
155
+ if (requestId) {
156
+ this.addDetail(requestId, key, value);
157
+ }
158
+ }
159
+ addDetailsForCurrentRequest(details) {
160
+ const requestId = getCurrentRequestId();
161
+ if (requestId) {
162
+ this.addDetails(requestId, details);
163
+ }
164
+ }
165
+ setErrorForCurrentRequest(error) {
166
+ const requestId = getCurrentRequestId();
167
+ if (requestId) {
168
+ this.setError(requestId, error);
169
+ }
170
+ }
171
+ setContextForCurrentRequest(context) {
172
+ const requestId = getCurrentRequestId();
173
+ if (requestId) {
174
+ this.setContext(requestId, context);
175
+ }
176
+ }
177
+ setReadOnlyForCurrentRequest(readOnly) {
178
+ const requestId = getCurrentRequestId();
179
+ if (requestId) {
180
+ this.setReadOnly(requestId, readOnly);
181
+ }
182
+ }
183
+ setSessionIdForCurrentRequest(sessionId) {
184
+ const requestId = getCurrentRequestId();
185
+ if (requestId) {
186
+ this.setSessionId(requestId, sessionId);
187
+ }
188
+ }
189
+ }
190
+ exports.RequestTracker = RequestTracker;
191
+ let globalTracker = null;
192
+ function getRequestTracker() {
193
+ globalTracker ??= new RequestTracker();
194
+ return globalTracker;
195
+ }
196
+ function resetRequestTracker() {
197
+ globalTracker = null;
198
+ }
199
+ //# sourceMappingURL=request-tracker.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"request-tracker.js","sourceRoot":"","sources":["../../../src/logging/request-tracker.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,55 @@
1
+ export interface RequestStack {
2
+ startTime: number;
3
+ clientIp: string;
4
+ sessionId?: string;
5
+ context?: string;
6
+ readOnly?: boolean;
7
+ method: string;
8
+ path: string;
9
+ tool?: string;
10
+ action?: string;
11
+ gitlabStatus?: number | "timeout" | "error";
12
+ gitlabDuration?: number;
13
+ details: Record<string, string | number | boolean>;
14
+ status?: number;
15
+ error?: string;
16
+ }
17
+ export type ConnectionCloseReason = "client_disconnect" | "idle_timeout" | "server_shutdown" | "transport_error" | "auth_expired";
18
+ export interface ConnectionStats {
19
+ connectedAt: number;
20
+ clientIp: string;
21
+ sessionId: string;
22
+ requestCount: number;
23
+ toolCount: number;
24
+ errorCount: number;
25
+ lastError?: string;
26
+ }
27
+ export interface AccessLogEntry {
28
+ timestamp: string;
29
+ clientIp: string;
30
+ session: string;
31
+ ctx: string;
32
+ ro: string;
33
+ method: string;
34
+ path: string;
35
+ status: number;
36
+ durationMs: number;
37
+ tool: string;
38
+ action: string;
39
+ gitlabStatus: string;
40
+ gitlabDurationMs: string;
41
+ details: string;
42
+ }
43
+ export interface ConnectionCloseEntry {
44
+ timestamp: string;
45
+ clientIp: string;
46
+ session: string;
47
+ duration: string;
48
+ reason: ConnectionCloseReason;
49
+ requests: number;
50
+ tools: number;
51
+ errors: number;
52
+ lastError?: string;
53
+ }
54
+ export type LogFormat = "condensed" | "verbose";
55
+ export declare const DEFAULT_LOG_FORMAT: LogFormat;
@@ -0,0 +1,5 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.DEFAULT_LOG_FORMAT = void 0;
4
+ exports.DEFAULT_LOG_FORMAT = "condensed";
5
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/logging/types.ts"],"names":[],"mappings":";;;AA0La,QAAA,kBAAkB,GAAc,WAAW,CAAC"}