@posthog/mcp 0.10.4 → 0.10.5
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/dist/extensions/capture.d.ts +2 -1
- package/dist/extensions/capture.d.ts.map +1 -1
- package/dist/extensions/capture.js +2 -3
- package/dist/extensions/capture.mjs +2 -3
- package/dist/extensions/compatibility.d.ts +3 -2
- package/dist/extensions/compatibility.d.ts.map +1 -1
- package/dist/extensions/compatibility.js +19 -20
- package/dist/extensions/compatibility.mjs +15 -16
- package/dist/extensions/context-parameters.d.ts +3 -2
- package/dist/extensions/context-parameters.d.ts.map +1 -1
- package/dist/extensions/context-parameters.js +4 -5
- package/dist/extensions/context-parameters.mjs +4 -4
- package/dist/extensions/conversation-id.d.ts +3 -2
- package/dist/extensions/conversation-id.d.ts.map +1 -1
- package/dist/extensions/conversation-id.js +4 -5
- package/dist/extensions/conversation-id.mjs +4 -4
- package/dist/extensions/instrument-highlevel.d.ts +2 -1
- package/dist/extensions/instrument-highlevel.d.ts.map +1 -1
- package/dist/extensions/instrument-highlevel.js +24 -25
- package/dist/extensions/instrument-highlevel.mjs +24 -25
- package/dist/extensions/instrument-lowlevel.d.ts +2 -1
- package/dist/extensions/instrument-lowlevel.d.ts.map +1 -1
- package/dist/extensions/instrument-lowlevel.js +8 -9
- package/dist/extensions/instrument-lowlevel.mjs +8 -9
- package/dist/extensions/instrumentation.d.ts +3 -2
- package/dist/extensions/instrumentation.d.ts.map +1 -1
- package/dist/extensions/instrumentation.js +25 -26
- package/dist/extensions/instrumentation.mjs +25 -26
- package/dist/extensions/intent.d.ts.map +1 -1
- package/dist/extensions/intent.js +1 -2
- package/dist/extensions/intent.mjs +1 -2
- package/dist/extensions/internal.d.ts.map +1 -1
- package/dist/extensions/internal.js +5 -6
- package/dist/extensions/internal.mjs +5 -6
- package/dist/extensions/logger.d.ts +12 -4
- package/dist/extensions/logger.d.ts.map +1 -1
- package/dist/extensions/logger.js +12 -3
- package/dist/extensions/logger.mjs +10 -4
- package/dist/extensions/sink.d.ts +4 -2
- package/dist/extensions/sink.d.ts.map +1 -1
- package/dist/extensions/sink.js +11 -10
- package/dist/extensions/sink.mjs +11 -10
- package/dist/extensions/tools.d.ts +2 -1
- package/dist/extensions/tools.d.ts.map +1 -1
- package/dist/extensions/tools.js +2 -2
- package/dist/extensions/tools.mjs +2 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +18 -16
- package/dist/index.mjs +19 -17
- package/dist/types.d.ts +2 -0
- package/dist/types.d.ts.map +1 -1
- package/dist/version.d.ts +1 -1
- package/dist/version.js +1 -1
- package/dist/version.mjs +1 -1
- package/package.json +1 -1
- package/src/extensions/capture.ts +3 -3
- package/src/extensions/compatibility.ts +16 -16
- package/src/extensions/context-parameters.ts +8 -6
- package/src/extensions/conversation-id.ts +12 -6
- package/src/extensions/instrument-highlevel.ts +37 -31
- package/src/extensions/instrument-lowlevel.ts +14 -10
- package/src/extensions/instrumentation.ts +30 -25
- package/src/extensions/intent.ts +1 -2
- package/src/extensions/internal.ts +7 -6
- package/src/extensions/logger.ts +22 -7
- package/src/extensions/sink.ts +17 -12
- package/src/extensions/tools.ts +3 -3
- package/src/index.ts +21 -19
- package/src/types.ts +2 -0
- package/src/version.ts +1 -1
|
@@ -7,7 +7,6 @@ import { MCPAnalyticsEventType } from "./event-types.mjs";
|
|
|
7
7
|
import { captureException } from "./exceptions.mjs";
|
|
8
8
|
import { resolveToolCallIntent, setEventIntent, setExplicitContextIntent } from "./intent.mjs";
|
|
9
9
|
import { getServerTrackingData, handleIdentify, setServerTrackingData } from "./internal.mjs";
|
|
10
|
-
import { log } from "./logger.mjs";
|
|
11
10
|
import { buildCapturedMcpParameters } from "./mcp-payloads.mjs";
|
|
12
11
|
import { getLiteralValue, getObjectShape } from "./mcp-sdk-compat.mjs";
|
|
13
12
|
import { getSessionId, newSessionId } from "./session.mjs";
|
|
@@ -26,11 +25,11 @@ async function captureToolCall(params) {
|
|
|
26
25
|
try {
|
|
27
26
|
result = await execute(downstreamRequest);
|
|
28
27
|
} catch (error) {
|
|
29
|
-
publishFailedToolEvent(server, event, error, startTime, conversation);
|
|
28
|
+
publishFailedToolEvent(server, event, error, startTime, conversation, data.logger);
|
|
30
29
|
throw error;
|
|
31
30
|
}
|
|
32
31
|
const finalResult = applyConversationPromptBack(event, result, conversation);
|
|
33
|
-
publishSuccessfulToolEvent(server, event, finalResult, startTime, takeCapturedError);
|
|
32
|
+
publishSuccessfulToolEvent(server, event, finalResult, startTime, data.logger, takeCapturedError);
|
|
34
33
|
return finalResult;
|
|
35
34
|
}
|
|
36
35
|
function getActiveAnalyticsParameterOwnership(data, toolName, override) {
|
|
@@ -73,7 +72,7 @@ async function prepareToolCallEvent(server, data, request, downstreamRequest, ex
|
|
|
73
72
|
setEventIntent(event, await resolveToolCallIntent(data, request, ownership.context, extra));
|
|
74
73
|
return event;
|
|
75
74
|
} catch (error) {
|
|
76
|
-
|
|
75
|
+
data.logger(`Warning: PostHog MCP analytics instrumentation failed for tool ${request.params?.name}, the tool will still run - ${error}`);
|
|
77
76
|
return null;
|
|
78
77
|
}
|
|
79
78
|
}
|
|
@@ -83,7 +82,7 @@ function applyConversationPromptBack(event, result, conversation) {
|
|
|
83
82
|
if (event) event.conversationId = void 0;
|
|
84
83
|
return result;
|
|
85
84
|
}
|
|
86
|
-
function publishSuccessfulToolEvent(server, event, result, startTime, takeCapturedError) {
|
|
85
|
+
function publishSuccessfulToolEvent(server, event, result, startTime, logger, takeCapturedError) {
|
|
87
86
|
if (!event) return;
|
|
88
87
|
try {
|
|
89
88
|
if (isToolResultError(result)) {
|
|
@@ -93,21 +92,21 @@ function publishSuccessfulToolEvent(server, event, result, startTime, takeCaptur
|
|
|
93
92
|
} else event.isError = false;
|
|
94
93
|
event.response = result;
|
|
95
94
|
event.duration = Date.now() - startTime.getTime();
|
|
96
|
-
captureEvent(server, event);
|
|
95
|
+
captureEvent(server, event, logger);
|
|
97
96
|
} catch (error) {
|
|
98
|
-
|
|
97
|
+
logger(`Warning: PostHog MCP analytics failed to publish tool event - ${error}`);
|
|
99
98
|
}
|
|
100
99
|
}
|
|
101
|
-
function publishFailedToolEvent(server, event, error, startTime, conversation) {
|
|
100
|
+
function publishFailedToolEvent(server, event, error, startTime, conversation, logger) {
|
|
102
101
|
if (!event) return;
|
|
103
102
|
try {
|
|
104
103
|
if (conversation.minted) event.conversationId = void 0;
|
|
105
104
|
event.isError = true;
|
|
106
105
|
event.error = captureException(error);
|
|
107
106
|
event.duration = Date.now() - startTime.getTime();
|
|
108
|
-
captureEvent(server, event);
|
|
107
|
+
captureEvent(server, event, logger);
|
|
109
108
|
} catch (publishError) {
|
|
110
|
-
|
|
109
|
+
logger(`Warning: PostHog MCP analytics failed to publish failed tool event - ${publishError}`);
|
|
111
110
|
}
|
|
112
111
|
}
|
|
113
112
|
function patchRequestHandlers(server, patches) {
|
|
@@ -124,7 +123,7 @@ function patchRequestHandlers(server, patches) {
|
|
|
124
123
|
return originalSetRequestHandler(requestSchema, (request, extra)=>patch(server, originalHandler, request, extra));
|
|
125
124
|
};
|
|
126
125
|
}
|
|
127
|
-
async function handleListToolsRequest(server, originalListToolsHandler, request, extra) {
|
|
126
|
+
async function handleListToolsRequest(server, originalListToolsHandler, request, extra, logger) {
|
|
128
127
|
const data = getServerTrackingData(server);
|
|
129
128
|
const startTime = new Date();
|
|
130
129
|
const event = {
|
|
@@ -135,19 +134,19 @@ async function handleListToolsRequest(server, originalListToolsHandler, request,
|
|
|
135
134
|
};
|
|
136
135
|
stampMetaClientInfo(event, request);
|
|
137
136
|
if (data) await applyResolvedMetadata(event, data, request, extra);
|
|
138
|
-
const tools = await getTracedToolsList(server, originalListToolsHandler, request, extra, event);
|
|
137
|
+
const tools = await getTracedToolsList(server, originalListToolsHandler, request, extra, event, logger);
|
|
139
138
|
if (!data) {
|
|
140
|
-
|
|
139
|
+
logger('Warning: PostHog MCP analytics is unable to find server tracking data. Please ensure you have called instrument(server, options) before using tool calls.');
|
|
141
140
|
return {
|
|
142
141
|
tools
|
|
143
142
|
};
|
|
144
143
|
}
|
|
145
144
|
if (0 === tools.length) {
|
|
146
|
-
|
|
145
|
+
data.logger('Warning: No tools found in the original list. This is likely due to the tools not being registered before PostHog MCP analytics.instrument().');
|
|
147
146
|
event.error = captureException('No tools were sent to MCP client.');
|
|
148
147
|
event.isError = true;
|
|
149
148
|
event.duration = Date.now() - startTime.getTime();
|
|
150
|
-
captureEvent(server, event);
|
|
149
|
+
captureEvent(server, event, data.logger);
|
|
151
150
|
return {
|
|
152
151
|
tools
|
|
153
152
|
};
|
|
@@ -158,7 +157,7 @@ async function handleListToolsRequest(server, originalListToolsHandler, request,
|
|
|
158
157
|
event.listedToolNames = collectListedToolNames(tools);
|
|
159
158
|
event.isError = false;
|
|
160
159
|
event.duration = Date.now() - startTime.getTime();
|
|
161
|
-
captureEvent(server, event);
|
|
160
|
+
captureEvent(server, event, data.logger);
|
|
162
161
|
return {
|
|
163
162
|
tools
|
|
164
163
|
};
|
|
@@ -171,14 +170,14 @@ function collectListedToolNames(tools) {
|
|
|
171
170
|
const names = tools.map((tool)=>tool?.name).filter((name)=>'string' == typeof name);
|
|
172
171
|
return names.length > 0 ? names : void 0;
|
|
173
172
|
}
|
|
174
|
-
async function getTracedToolsList(server, originalListToolsHandler, request, extra, event) {
|
|
173
|
+
async function getTracedToolsList(server, originalListToolsHandler, request, extra, event, logger) {
|
|
175
174
|
try {
|
|
176
175
|
const data = getServerTrackingData(server);
|
|
177
176
|
const originalResponse = await originalListToolsHandler(request, extra);
|
|
178
177
|
let tools = originalResponse.tools || [];
|
|
179
178
|
if (data) cacheToolAnalyticsParameterOwnership(data.toolAnalyticsParameterOwnership, tools);
|
|
180
|
-
if (data && isContextEnabled(data.options.context)) tools = addContextParameterToTools(tools, getContextDescription(data.options.context));
|
|
181
|
-
if (data?.options.enableConversationId) tools = addConversationIdToTools(tools, resolveMissingCapabilityToolName(data.options));
|
|
179
|
+
if (data && isContextEnabled(data.options.context)) tools = addContextParameterToTools(tools, getContextDescription(data.options.context), data.logger);
|
|
180
|
+
if (data?.options.enableConversationId) tools = addConversationIdToTools(tools, resolveMissingCapabilityToolName(data.options), data.logger);
|
|
182
181
|
if (data?.options.reportMissing) {
|
|
183
182
|
const missingToolName = resolveMissingCapabilityToolName(data.options);
|
|
184
183
|
const alreadyPresent = tools.some((tool)=>tool?.name === missingToolName);
|
|
@@ -190,11 +189,11 @@ async function getTracedToolsList(server, originalListToolsHandler, request, ext
|
|
|
190
189
|
}
|
|
191
190
|
return tools;
|
|
192
191
|
} catch (error) {
|
|
193
|
-
|
|
192
|
+
logger(`Warning: Original list tools handler failed, this suggests an error PostHog MCP analytics did not cause - ${error}`);
|
|
194
193
|
event.error = captureException(error);
|
|
195
194
|
event.isError = true;
|
|
196
195
|
event.duration = event.timestamp ? Date.now() - event.timestamp.getTime() : 0;
|
|
197
|
-
captureEvent(server, event);
|
|
196
|
+
captureEvent(server, event, logger);
|
|
198
197
|
throw error;
|
|
199
198
|
}
|
|
200
199
|
}
|
|
@@ -239,7 +238,7 @@ function mintStatelessSessionOnInitialize(server, data, request, extra) {
|
|
|
239
238
|
setServerTrackingData(server, data);
|
|
240
239
|
return sessionId;
|
|
241
240
|
} catch (error) {
|
|
242
|
-
|
|
241
|
+
data.logger(`Warning: PostHog MCP analytics failed to mint a stateless session id - ${error}`);
|
|
243
242
|
return;
|
|
244
243
|
}
|
|
245
244
|
}
|
|
@@ -255,7 +254,7 @@ function upgradeMintedTokenToNegotiated(server, data, mintedSessionId, negotiate
|
|
|
255
254
|
});
|
|
256
255
|
writeSessionIdToTransport(transport, token);
|
|
257
256
|
} catch (error) {
|
|
258
|
-
|
|
257
|
+
data.logger(`Warning: PostHog MCP analytics failed to upgrade the stateless session token - ${error}`);
|
|
259
258
|
}
|
|
260
259
|
}
|
|
261
260
|
function readInitializeClientInfo(request) {
|
|
@@ -267,10 +266,10 @@ function readInitializeClientInfo(request) {
|
|
|
267
266
|
version: 'string' == typeof version ? version : void 0
|
|
268
267
|
};
|
|
269
268
|
}
|
|
270
|
-
async function handleInitializeRequest(server, originalInitializeHandler, request, extra) {
|
|
269
|
+
async function handleInitializeRequest(server, originalInitializeHandler, request, extra, logger) {
|
|
271
270
|
const data = getServerTrackingData(server);
|
|
272
271
|
if (!data) {
|
|
273
|
-
|
|
272
|
+
logger('Warning: PostHog MCP analytics is unable to find server tracking data. Please ensure you have called instrument(server, options) before using tool calls.');
|
|
274
273
|
return await originalInitializeHandler(request, extra);
|
|
275
274
|
}
|
|
276
275
|
const mintedSessionId = mintStatelessSessionOnInitialize(server, data, request, extra);
|
|
@@ -292,7 +291,7 @@ async function handleInitializeRequest(server, originalInitializeHandler, reques
|
|
|
292
291
|
data.sessionInfo.protocolVersion = negotiatedProtocolVersion;
|
|
293
292
|
setServerTrackingData(server, data);
|
|
294
293
|
if (mintedSessionId) upgradeMintedTokenToNegotiated(server, data, mintedSessionId, negotiatedProtocolVersion);
|
|
295
|
-
captureEvent(server, event);
|
|
294
|
+
captureEvent(server, event, data.logger);
|
|
296
295
|
return result;
|
|
297
296
|
}
|
|
298
297
|
function readProtocolVersion(result, request) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"intent.d.ts","sourceRoot":"","sources":["../../src/extensions/intent.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EACV,6BAA6B,EAC7B,gBAAgB,EAChB,wBAAwB,EACxB,cAAc,EACd,QAAQ,EACT,MAAM,UAAU,CAAA;
|
|
1
|
+
{"version":3,"file":"intent.d.ts","sourceRoot":"","sources":["../../src/extensions/intent.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EACV,6BAA6B,EAC7B,gBAAgB,EAChB,wBAAwB,EACxB,cAAc,EACd,QAAQ,EACT,MAAM,UAAU,CAAA;AAGjB,UAAU,cAAc;IACtB,MAAM,EAAE,MAAM,CAAA;IACd,MAAM,EAAE,wBAAwB,CAAA;CACjC;AAkCD,wBAAsB,qBAAqB,CACzC,IAAI,EAAE,gBAAgB,EACtB,OAAO,EAAE,cAAc,EACvB,oBAAoB,EAAE,OAAO,EAC7B,KAAK,CAAC,EAAE,6BAA6B,GACpC,OAAO,CAAC,cAAc,GAAG,IAAI,CAAC,CAYhC;AAED,wBAAgB,cAAc,CAAC,KAAK,EAAE,QAAQ,EAAE,cAAc,EAAE,cAAc,GAAG,IAAI,GAAG,IAAI,CAO3F;AAED,wBAAgB,wBAAwB,CAAC,KAAK,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,GAAG,IAAI,CAQ/E"}
|
|
@@ -29,7 +29,6 @@ __webpack_require__.d(__webpack_exports__, {
|
|
|
29
29
|
setEventIntent: ()=>setEventIntent
|
|
30
30
|
});
|
|
31
31
|
const external_context_parameters_js_namespaceObject = require("./context-parameters.js");
|
|
32
|
-
const external_logger_js_namespaceObject = require("./logger.js");
|
|
33
32
|
function getContextArgument(request) {
|
|
34
33
|
const context = request.params?.arguments?.context;
|
|
35
34
|
return 'string' == typeof context && context.trim() ? context : void 0;
|
|
@@ -48,7 +47,7 @@ async function runIntentFallback(data, request, extra) {
|
|
|
48
47
|
source: 'inferred'
|
|
49
48
|
} : null;
|
|
50
49
|
} catch (error) {
|
|
51
|
-
|
|
50
|
+
data.logger(`intentFallback callback error: ${error}`);
|
|
52
51
|
return null;
|
|
53
52
|
}
|
|
54
53
|
}
|
|
@@ -1,5 +1,4 @@
|
|
|
1
1
|
import { isContextEnabled } from "./context-parameters.mjs";
|
|
2
|
-
import { log } from "./logger.mjs";
|
|
3
2
|
function getContextArgument(request) {
|
|
4
3
|
const context = request.params?.arguments?.context;
|
|
5
4
|
return 'string' == typeof context && context.trim() ? context : void 0;
|
|
@@ -18,7 +17,7 @@ async function runIntentFallback(data, request, extra) {
|
|
|
18
17
|
source: 'inferred'
|
|
19
18
|
} : null;
|
|
20
19
|
} catch (error) {
|
|
21
|
-
|
|
20
|
+
data.logger(`intentFallback callback error: ${error}`);
|
|
22
21
|
return null;
|
|
23
22
|
}
|
|
24
23
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"internal.d.ts","sourceRoot":"","sources":["../../src/extensions/internal.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EACV,6BAA6B,EAC7B,gBAAgB,EAChB,cAAc,EACd,aAAa,EAEb,YAAY,EACb,MAAM,UAAU,CAAA;
|
|
1
|
+
{"version":3,"file":"internal.d.ts","sourceRoot":"","sources":["../../src/extensions/internal.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EACV,6BAA6B,EAC7B,gBAAgB,EAChB,cAAc,EACd,aAAa,EAEb,YAAY,EACb,MAAM,UAAU,CAAA;AAKjB;;;;;GAKG;AACH,qBAAa,aAAa;IACxB,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAkC;IACzD,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAQ;gBAErB,OAAO,SAAO;IAI1B,GAAG,CAAC,SAAS,EAAE,MAAM,GAAG,YAAY,GAAG,SAAS;IAWhD,GAAG,CAAC,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,YAAY,GAAG,IAAI;IAapD,GAAG,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO;IAI/B,IAAI,IAAI,MAAM;CAGf;AAID,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,aAAa,GAAG,gBAAgB,GAAG,SAAS,CAEzF;AAED,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,aAAa,EAAE,IAAI,EAAE,gBAAgB,GAAG,IAAI,CAEzF;AAED,wBAAgB,kBAAkB,CAAC,CAAC,EAAE,YAAY,EAAE,CAAC,EAAE,YAAY,GAAG,OAAO,CA4B5E;AAED,wBAAgB,eAAe,CAAC,QAAQ,EAAE,YAAY,GAAG,SAAS,EAAE,IAAI,EAAE,YAAY,GAAG,YAAY,CAapG;AAED;;;;;GAKG;AACH,wBAAsB,cAAc,CAClC,MAAM,EAAE,aAAa,EACrB,IAAI,EAAE,gBAAgB,EACtB,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE,cAAc,EACvB,KAAK,CAAC,EAAE,6BAA6B,GACpC,OAAO,CAAC,IAAI,CAAC,CAkDf;AAED;;;;GAIG;AACH,wBAAsB,sBAAsB,CAC1C,IAAI,EAAE,gBAAgB,EACtB,OAAO,EAAE,cAAc,EACvB,KAAK,CAAC,EAAE,6BAA6B,GACpC,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAAC,CAUzC"}
|
|
@@ -33,7 +33,6 @@ __webpack_require__.d(__webpack_exports__, {
|
|
|
33
33
|
setServerTrackingData: ()=>setServerTrackingData
|
|
34
34
|
});
|
|
35
35
|
const external_event_types_js_namespaceObject = require("./event-types.js");
|
|
36
|
-
const external_logger_js_namespaceObject = require("./logger.js");
|
|
37
36
|
const external_capture_js_namespaceObject = require("./capture.js");
|
|
38
37
|
const external_client_identity_js_namespaceObject = require("./client-identity.js");
|
|
39
38
|
class IdentityCache {
|
|
@@ -119,12 +118,12 @@ async function handleIdentify(server, data, sessionId, request, extra) {
|
|
|
119
118
|
const shouldPublish = changed || firstSeen && !announcedAtInitialize;
|
|
120
119
|
data.identifiedSessions.set(sessionId, mergedIdentity);
|
|
121
120
|
if (shouldPublish) {
|
|
122
|
-
|
|
123
|
-
(0, external_capture_js_namespaceObject.captureEvent)(server, identifyEvent);
|
|
121
|
+
data.logger(`Identified session ${sessionId}`);
|
|
122
|
+
(0, external_capture_js_namespaceObject.captureEvent)(server, identifyEvent, data.logger);
|
|
124
123
|
}
|
|
125
|
-
} else
|
|
124
|
+
} else data.logger(`Warning: Supplied identify function returned null for session ${sessionId}`);
|
|
126
125
|
} catch (error) {
|
|
127
|
-
|
|
126
|
+
data.logger(`Error: User supplied identify function threw an error while identifying session ${sessionId} - ${error}`);
|
|
128
127
|
}
|
|
129
128
|
}
|
|
130
129
|
async function resolveEventProperties(data, request, extra) {
|
|
@@ -132,7 +131,7 @@ async function resolveEventProperties(data, request, extra) {
|
|
|
132
131
|
try {
|
|
133
132
|
return await data.options.eventProperties(request, extra) ?? null;
|
|
134
133
|
} catch (e) {
|
|
135
|
-
|
|
134
|
+
data.logger(`eventProperties callback error: ${e}`);
|
|
136
135
|
return null;
|
|
137
136
|
}
|
|
138
137
|
}
|
|
@@ -1,5 +1,4 @@
|
|
|
1
1
|
import { MCPAnalyticsEventType } from "./event-types.mjs";
|
|
2
|
-
import { log } from "./logger.mjs";
|
|
3
2
|
import { captureEvent } from "./capture.mjs";
|
|
4
3
|
import { stampMetaClientInfo } from "./client-identity.mjs";
|
|
5
4
|
class IdentityCache {
|
|
@@ -85,12 +84,12 @@ async function handleIdentify(server, data, sessionId, request, extra) {
|
|
|
85
84
|
const shouldPublish = changed || firstSeen && !announcedAtInitialize;
|
|
86
85
|
data.identifiedSessions.set(sessionId, mergedIdentity);
|
|
87
86
|
if (shouldPublish) {
|
|
88
|
-
|
|
89
|
-
captureEvent(server, identifyEvent);
|
|
87
|
+
data.logger(`Identified session ${sessionId}`);
|
|
88
|
+
captureEvent(server, identifyEvent, data.logger);
|
|
90
89
|
}
|
|
91
|
-
} else
|
|
90
|
+
} else data.logger(`Warning: Supplied identify function returned null for session ${sessionId}`);
|
|
92
91
|
} catch (error) {
|
|
93
|
-
|
|
92
|
+
data.logger(`Error: User supplied identify function threw an error while identifying session ${sessionId} - ${error}`);
|
|
94
93
|
}
|
|
95
94
|
}
|
|
96
95
|
async function resolveEventProperties(data, request, extra) {
|
|
@@ -98,7 +97,7 @@ async function resolveEventProperties(data, request, extra) {
|
|
|
98
97
|
try {
|
|
99
98
|
return await data.options.eventProperties(request, extra) ?? null;
|
|
100
99
|
} catch (e) {
|
|
101
|
-
|
|
100
|
+
data.logger(`eventProperties callback error: ${e}`);
|
|
102
101
|
return null;
|
|
103
102
|
}
|
|
104
103
|
}
|
|
@@ -3,12 +3,20 @@
|
|
|
3
3
|
*
|
|
4
4
|
* MCP servers running over the STDIO transport use stdout/stderr to exchange
|
|
5
5
|
* protocol messages, so we cannot use the default `console.log`. We accept a
|
|
6
|
-
* `logger` option on the public API
|
|
7
|
-
*
|
|
8
|
-
*
|
|
9
|
-
*
|
|
6
|
+
* `logger` option on the public API or the legacy logger configured through
|
|
7
|
+
* `setLogger`; when neither is configured, log calls are silently dropped.
|
|
8
|
+
* Errors that affect tracking should still be observable in apps that want
|
|
9
|
+
* them, so the consumer can plug in any function (e.g. `console.error` for
|
|
10
|
+
* non-STDIO transports, a file logger, etc.).
|
|
10
11
|
*/
|
|
11
12
|
export type LoggerFn = (message: string) => void;
|
|
12
13
|
export declare function setLogger(logger: LoggerFn | undefined): void;
|
|
14
|
+
/**
|
|
15
|
+
* Creates a safe logger for one instrumented server. A server-specific logger
|
|
16
|
+
* remains isolated, while an omitted logger preserves the legacy `setLogger`
|
|
17
|
+
* fallback.
|
|
18
|
+
*/
|
|
19
|
+
export declare function createLogger(logger: LoggerFn | undefined): LoggerFn;
|
|
20
|
+
/** Logs through the legacy module-level logger configured by {@link setLogger}. */
|
|
13
21
|
export declare function log(message: string): void;
|
|
14
22
|
//# sourceMappingURL=logger.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"logger.d.ts","sourceRoot":"","sources":["../../src/extensions/logger.ts"],"names":[],"mappings":"AAKA
|
|
1
|
+
{"version":3,"file":"logger.d.ts","sourceRoot":"","sources":["../../src/extensions/logger.ts"],"names":[],"mappings":"AAKA;;;;;;;;;;GAUG;AACH,MAAM,MAAM,QAAQ,GAAG,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAA;AAIhD,wBAAgB,SAAS,CAAC,MAAM,EAAE,QAAQ,GAAG,SAAS,GAAG,IAAI,CAE5D;AAYD;;;;GAIG;AACH,wBAAgB,YAAY,CAAC,MAAM,EAAE,QAAQ,GAAG,SAAS,GAAG,QAAQ,CAEnE;AAED,mFAAmF;AACnF,wBAAgB,GAAG,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAEzC"}
|
|
@@ -24,6 +24,7 @@ var __webpack_require__ = {};
|
|
|
24
24
|
var __webpack_exports__ = {};
|
|
25
25
|
__webpack_require__.r(__webpack_exports__);
|
|
26
26
|
__webpack_require__.d(__webpack_exports__, {
|
|
27
|
+
createLogger: ()=>createLogger,
|
|
27
28
|
log: ()=>log,
|
|
28
29
|
setLogger: ()=>setLogger
|
|
29
30
|
});
|
|
@@ -31,14 +32,22 @@ let activeLogger;
|
|
|
31
32
|
function setLogger(logger) {
|
|
32
33
|
activeLogger = logger;
|
|
33
34
|
}
|
|
34
|
-
function
|
|
35
|
-
if (
|
|
36
|
-
|
|
35
|
+
function writeLog(logger, message) {
|
|
36
|
+
if (logger) try {
|
|
37
|
+
logger(message);
|
|
37
38
|
} catch {}
|
|
38
39
|
}
|
|
40
|
+
function createLogger(logger) {
|
|
41
|
+
return logger ? (message)=>writeLog(logger, message) : log;
|
|
42
|
+
}
|
|
43
|
+
function log(message) {
|
|
44
|
+
writeLog(activeLogger, message);
|
|
45
|
+
}
|
|
46
|
+
exports.createLogger = __webpack_exports__.createLogger;
|
|
39
47
|
exports.log = __webpack_exports__.log;
|
|
40
48
|
exports.setLogger = __webpack_exports__.setLogger;
|
|
41
49
|
for(var __webpack_i__ in __webpack_exports__)if (-1 === [
|
|
50
|
+
"createLogger",
|
|
42
51
|
"log",
|
|
43
52
|
"setLogger"
|
|
44
53
|
].indexOf(__webpack_i__)) exports[__webpack_i__] = __webpack_exports__[__webpack_i__];
|
|
@@ -2,9 +2,15 @@ let activeLogger;
|
|
|
2
2
|
function setLogger(logger) {
|
|
3
3
|
activeLogger = logger;
|
|
4
4
|
}
|
|
5
|
-
function
|
|
6
|
-
if (
|
|
7
|
-
|
|
5
|
+
function writeLog(logger, message) {
|
|
6
|
+
if (logger) try {
|
|
7
|
+
logger(message);
|
|
8
8
|
} catch {}
|
|
9
9
|
}
|
|
10
|
-
|
|
10
|
+
function createLogger(logger) {
|
|
11
|
+
return logger ? (message)=>writeLog(logger, message) : log;
|
|
12
|
+
}
|
|
13
|
+
function log(message) {
|
|
14
|
+
writeLog(activeLogger, message);
|
|
15
|
+
}
|
|
16
|
+
export { createLogger, log, setLogger };
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import type { PostHog } from 'posthog-node';
|
|
2
2
|
import type { BeforeSendFn, Event, McpEvent } from '../types';
|
|
3
|
+
import { type LoggerFn } from './logger';
|
|
3
4
|
import { type PostHogCaptureEvent } from './posthog-events';
|
|
4
5
|
/** Per-event toggles consulted by the sink when fanning out an event. */
|
|
5
6
|
export interface McpCaptureOptions {
|
|
@@ -18,7 +19,7 @@ export interface McpCaptureOptions {
|
|
|
18
19
|
* and the test harness call it, so tests assert on exactly the payloads that
|
|
19
20
|
* reach `posthog.capture()`.
|
|
20
21
|
*/
|
|
21
|
-
export declare function processMcpEvent(event: McpEvent, options: McpCaptureOptions): Promise<{
|
|
22
|
+
export declare function processMcpEvent(event: McpEvent, options: McpCaptureOptions, logger?: LoggerFn): Promise<{
|
|
22
23
|
event: Event;
|
|
23
24
|
captures: PostHogCaptureEvent[];
|
|
24
25
|
} | null>;
|
|
@@ -33,7 +34,8 @@ export declare function processMcpEvent(event: McpEvent, options: McpCaptureOpti
|
|
|
33
34
|
*/
|
|
34
35
|
export declare class McpEventSink {
|
|
35
36
|
private readonly posthog;
|
|
36
|
-
|
|
37
|
+
private readonly logger;
|
|
38
|
+
constructor(posthog: PostHog, logger?: LoggerFn);
|
|
37
39
|
/**
|
|
38
40
|
* Push an MCP event through the pipeline (sanitize → truncate → fan out →
|
|
39
41
|
* beforeSend → capture). Errors at any stage are logged and the event is
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sink.d.ts","sourceRoot":"","sources":["../../src/extensions/sink.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,cAAc,CAAA;AAG3C,OAAO,KAAK,EAAE,YAAY,EAAE,KAAK,EAAE,QAAQ,EAAE,MAAM,UAAU,CAAA;
|
|
1
|
+
{"version":3,"file":"sink.d.ts","sourceRoot":"","sources":["../../src/extensions/sink.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,cAAc,CAAA;AAG3C,OAAO,KAAK,EAAE,YAAY,EAAE,KAAK,EAAE,QAAQ,EAAE,MAAM,UAAU,CAAA;AAC7D,OAAO,EAAO,KAAK,QAAQ,EAAE,MAAM,UAAU,CAAA;AAC7C,OAAO,EAAE,KAAK,mBAAmB,EAA6B,MAAM,kBAAkB,CAAA;AAKtF,yEAAyE;AACzE,MAAM,WAAW,iBAAiB;IAChC,0BAA0B,EAAE,OAAO,CAAA;IACnC,kFAAkF;IAClF,UAAU,CAAC,EAAE,YAAY,CAAA;CAC1B;AAED;;;;;;;;;;GAUG;AACH,wBAAsB,eAAe,CACnC,KAAK,EAAE,QAAQ,EACf,OAAO,EAAE,iBAAiB,EAC1B,MAAM,GAAE,QAAc,GACrB,OAAO,CAAC;IAAE,KAAK,EAAE,KAAK,CAAC;IAAC,QAAQ,EAAE,mBAAmB,EAAE,CAAA;CAAE,GAAG,IAAI,CAAC,CA2BnE;AA6BD;;;;;;;;GAQG;AACH,qBAAa,YAAY;IAErB,OAAO,CAAC,QAAQ,CAAC,OAAO;IACxB,OAAO,CAAC,QAAQ,CAAC,MAAM;gBADN,OAAO,EAAE,OAAO,EAChB,MAAM,GAAE,QAAc;IAGzC;;;;OAIG;IACG,OAAO,CAAC,KAAK,EAAE,QAAQ,EAAE,OAAO,EAAE,iBAAiB,GAAG,OAAO,CAAC,IAAI,CAAC;CAmC1E"}
|
package/dist/extensions/sink.js
CHANGED
|
@@ -33,18 +33,18 @@ const external_posthog_events_js_namespaceObject = require("./posthog-events.js"
|
|
|
33
33
|
const external_ids_js_namespaceObject = require("./ids.js");
|
|
34
34
|
const external_sanitization_js_namespaceObject = require("./sanitization.js");
|
|
35
35
|
const external_truncation_js_namespaceObject = require("./truncation.js");
|
|
36
|
-
async function processMcpEvent(event, options) {
|
|
36
|
+
async function processMcpEvent(event, options, logger = external_logger_js_namespaceObject.log) {
|
|
37
37
|
let processed = event;
|
|
38
38
|
try {
|
|
39
39
|
processed = (0, external_sanitization_js_namespaceObject.sanitizeEvent)(processed);
|
|
40
40
|
} catch (err) {
|
|
41
|
-
(
|
|
41
|
+
logger(`Failed to sanitize event: ${err}`);
|
|
42
42
|
return null;
|
|
43
43
|
}
|
|
44
44
|
try {
|
|
45
45
|
processed = (0, external_truncation_js_namespaceObject.truncateEvent)(processed);
|
|
46
46
|
} catch (err) {
|
|
47
|
-
(
|
|
47
|
+
logger(`Failed to truncate event: ${err}`);
|
|
48
48
|
return null;
|
|
49
49
|
}
|
|
50
50
|
processed.id = processed.id || (0, external_ids_js_namespaceObject.newPrefixedId)('evt');
|
|
@@ -52,29 +52,30 @@ async function processMcpEvent(event, options) {
|
|
|
52
52
|
const built = (0, external_posthog_events_js_namespaceObject.buildPostHogCaptureEvents)(fullEvent, {
|
|
53
53
|
enableExceptionAutocapture: options.enableExceptionAutocapture
|
|
54
54
|
});
|
|
55
|
-
const captures = await applyBeforeSend(built, options.beforeSend);
|
|
55
|
+
const captures = await applyBeforeSend(built, options.beforeSend, logger);
|
|
56
56
|
return {
|
|
57
57
|
event: fullEvent,
|
|
58
58
|
captures
|
|
59
59
|
};
|
|
60
60
|
}
|
|
61
|
-
async function applyBeforeSend(captures, beforeSend) {
|
|
61
|
+
async function applyBeforeSend(captures, beforeSend, logger) {
|
|
62
62
|
if (!beforeSend) return captures;
|
|
63
63
|
const kept = [];
|
|
64
64
|
for (const capture of captures)try {
|
|
65
65
|
const result = await beforeSend(capture);
|
|
66
66
|
if (result) kept.push(result);
|
|
67
67
|
} catch (err) {
|
|
68
|
-
(
|
|
68
|
+
logger(`beforeSend threw for event ${capture.event}; dropping it: ${err}`);
|
|
69
69
|
}
|
|
70
70
|
return kept;
|
|
71
71
|
}
|
|
72
72
|
class McpEventSink {
|
|
73
|
-
constructor(posthog){
|
|
73
|
+
constructor(posthog, logger = external_logger_js_namespaceObject.log){
|
|
74
74
|
this.posthog = posthog;
|
|
75
|
+
this.logger = logger;
|
|
75
76
|
}
|
|
76
77
|
async capture(event, options) {
|
|
77
|
-
const result = await processMcpEvent(event, options);
|
|
78
|
+
const result = await processMcpEvent(event, options, this.logger);
|
|
78
79
|
if (!result) return;
|
|
79
80
|
const { event: fullEvent, captures } = result;
|
|
80
81
|
try {
|
|
@@ -91,9 +92,9 @@ class McpEventSink {
|
|
|
91
92
|
uuid: (0, core_namespaceObject.uuidv7)()
|
|
92
93
|
});
|
|
93
94
|
}
|
|
94
|
-
|
|
95
|
+
this.logger(`Captured PostHog event ${fullEvent.id} | ${fullEvent.eventType} | ${fullEvent.duration} ms | ${fullEvent.identifyActorGivenId ? 'identified' : 'anonymous'}`);
|
|
95
96
|
} catch (err) {
|
|
96
|
-
|
|
97
|
+
this.logger(`Failed to capture PostHog event ${fullEvent.id}: ${err}`);
|
|
97
98
|
}
|
|
98
99
|
}
|
|
99
100
|
}
|
package/dist/extensions/sink.mjs
CHANGED
|
@@ -4,18 +4,18 @@ import { buildPostHogCaptureEvents } from "./posthog-events.mjs";
|
|
|
4
4
|
import { newPrefixedId } from "./ids.mjs";
|
|
5
5
|
import { sanitizeEvent } from "./sanitization.mjs";
|
|
6
6
|
import { truncateEvent } from "./truncation.mjs";
|
|
7
|
-
async function processMcpEvent(event, options) {
|
|
7
|
+
async function processMcpEvent(event, options, logger = log) {
|
|
8
8
|
let processed = event;
|
|
9
9
|
try {
|
|
10
10
|
processed = sanitizeEvent(processed);
|
|
11
11
|
} catch (err) {
|
|
12
|
-
|
|
12
|
+
logger(`Failed to sanitize event: ${err}`);
|
|
13
13
|
return null;
|
|
14
14
|
}
|
|
15
15
|
try {
|
|
16
16
|
processed = truncateEvent(processed);
|
|
17
17
|
} catch (err) {
|
|
18
|
-
|
|
18
|
+
logger(`Failed to truncate event: ${err}`);
|
|
19
19
|
return null;
|
|
20
20
|
}
|
|
21
21
|
processed.id = processed.id || newPrefixedId('evt');
|
|
@@ -23,29 +23,30 @@ async function processMcpEvent(event, options) {
|
|
|
23
23
|
const built = buildPostHogCaptureEvents(fullEvent, {
|
|
24
24
|
enableExceptionAutocapture: options.enableExceptionAutocapture
|
|
25
25
|
});
|
|
26
|
-
const captures = await applyBeforeSend(built, options.beforeSend);
|
|
26
|
+
const captures = await applyBeforeSend(built, options.beforeSend, logger);
|
|
27
27
|
return {
|
|
28
28
|
event: fullEvent,
|
|
29
29
|
captures
|
|
30
30
|
};
|
|
31
31
|
}
|
|
32
|
-
async function applyBeforeSend(captures, beforeSend) {
|
|
32
|
+
async function applyBeforeSend(captures, beforeSend, logger) {
|
|
33
33
|
if (!beforeSend) return captures;
|
|
34
34
|
const kept = [];
|
|
35
35
|
for (const capture of captures)try {
|
|
36
36
|
const result = await beforeSend(capture);
|
|
37
37
|
if (result) kept.push(result);
|
|
38
38
|
} catch (err) {
|
|
39
|
-
|
|
39
|
+
logger(`beforeSend threw for event ${capture.event}; dropping it: ${err}`);
|
|
40
40
|
}
|
|
41
41
|
return kept;
|
|
42
42
|
}
|
|
43
43
|
class McpEventSink {
|
|
44
|
-
constructor(posthog){
|
|
44
|
+
constructor(posthog, logger = log){
|
|
45
45
|
this.posthog = posthog;
|
|
46
|
+
this.logger = logger;
|
|
46
47
|
}
|
|
47
48
|
async capture(event, options) {
|
|
48
|
-
const result = await processMcpEvent(event, options);
|
|
49
|
+
const result = await processMcpEvent(event, options, this.logger);
|
|
49
50
|
if (!result) return;
|
|
50
51
|
const { event: fullEvent, captures } = result;
|
|
51
52
|
try {
|
|
@@ -62,9 +63,9 @@ class McpEventSink {
|
|
|
62
63
|
uuid: uuidv7()
|
|
63
64
|
});
|
|
64
65
|
}
|
|
65
|
-
|
|
66
|
+
this.logger(`Captured PostHog event ${fullEvent.id} | ${fullEvent.eventType} | ${fullEvent.duration} ms | ${fullEvent.identifyActorGivenId ? 'identified' : 'anonymous'}`);
|
|
66
67
|
} catch (err) {
|
|
67
|
-
|
|
68
|
+
this.logger(`Failed to capture PostHog event ${fullEvent.id}: ${err}`);
|
|
68
69
|
}
|
|
69
70
|
}
|
|
70
71
|
}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { type CallToolResult, type ListToolsResult } from '@modelcontextprotocol/sdk/types.js';
|
|
2
|
+
import { type LoggerFn } from './logger';
|
|
2
3
|
export declare const GET_MORE_TOOLS_NAME: "get_more_tools";
|
|
3
4
|
/**
|
|
4
5
|
* The configured name of the `get_more_tools` virtual tool, falling back to the
|
|
@@ -19,6 +20,6 @@ export declare function getReportMissingToolDescriptor(name?: string): ReportMis
|
|
|
19
20
|
export declare function getMoreToolsResult(): CallToolResult;
|
|
20
21
|
export declare function handleReportMissing(args: {
|
|
21
22
|
context: string;
|
|
22
|
-
}): CallToolResult;
|
|
23
|
+
}, logger?: LoggerFn): CallToolResult;
|
|
23
24
|
export {};
|
|
24
25
|
//# sourceMappingURL=tools.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tools.d.ts","sourceRoot":"","sources":["../../src/extensions/tools.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,KAAK,cAAc,EAAE,KAAK,eAAe,EAAE,MAAM,oCAAoC,CAAA;
|
|
1
|
+
{"version":3,"file":"tools.d.ts","sourceRoot":"","sources":["../../src/extensions/tools.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,KAAK,cAAc,EAAE,KAAK,eAAe,EAAE,MAAM,oCAAoC,CAAA;AAC9F,OAAO,EAAO,KAAK,QAAQ,EAAE,MAAM,UAAU,CAAA;AAE7C,eAAO,MAAM,mBAAmB,EAAG,gBAAyB,CAAA;AAE5D;;;;GAIG;AACH,wBAAgB,gCAAgC,CAAC,OAAO,CAAC,EAAE;IAAE,yBAAyB,CAAC,EAAE,MAAM,CAAA;CAAE,GAAG,MAAM,CAEzG;AAED,KAAK,2BAA2B,GAAG,eAAe,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC,CAAA;AAEnE,wBAAgB,8BAA8B,CAAC,IAAI,GAAE,MAA4B,GAAG,2BAA2B,CA6B9G;AAED;;;;;GAKG;AACH,wBAAgB,kBAAkB,IAAI,cAAc,CASnD;AAED,wBAAgB,mBAAmB,CAAC,IAAI,EAAE;IAAE,OAAO,EAAE,MAAM,CAAA;CAAE,EAAE,MAAM,GAAE,QAAc,GAAG,cAAc,CAGrG"}
|
package/dist/extensions/tools.js
CHANGED
|
@@ -70,8 +70,8 @@ function getMoreToolsResult() {
|
|
|
70
70
|
]
|
|
71
71
|
};
|
|
72
72
|
}
|
|
73
|
-
function handleReportMissing(args) {
|
|
74
|
-
(
|
|
73
|
+
function handleReportMissing(args, logger = external_logger_js_namespaceObject.log) {
|
|
74
|
+
logger(`Missing tool reported: ${JSON.stringify(args)}`);
|
|
75
75
|
return getMoreToolsResult();
|
|
76
76
|
}
|
|
77
77
|
exports.GET_MORE_TOOLS_NAME = __webpack_exports__.GET_MORE_TOOLS_NAME;
|
|
@@ -38,8 +38,8 @@ function getMoreToolsResult() {
|
|
|
38
38
|
]
|
|
39
39
|
};
|
|
40
40
|
}
|
|
41
|
-
function handleReportMissing(args) {
|
|
42
|
-
|
|
41
|
+
function handleReportMissing(args, logger = log) {
|
|
42
|
+
logger(`Missing tool reported: ${JSON.stringify(args)}`);
|
|
43
43
|
return getMoreToolsResult();
|
|
44
44
|
}
|
|
45
45
|
export { GET_MORE_TOOLS_NAME, getMoreToolsResult, getReportMissingToolDescriptor, handleReportMissing, resolveMissingCapabilityToolName };
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,cAAc,CAAA;AAQ3C,OAAO,EAAE,6BAA6B,EAAkB,YAAY,EAAE,MAAM,sBAAsB,CAAA;AAGlG,OAAO,KAAK,EAGV,YAAY,EAEZ,mBAAmB,EAGpB,MAAM,SAAS,CAAA;AAEhB;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AACH,iBAAS,UAAU,CAAC,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,GAAE,mBAAwB,GAAG,YAAY,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,cAAc,CAAA;AAQ3C,OAAO,EAAE,6BAA6B,EAAkB,YAAY,EAAE,MAAM,sBAAsB,CAAA;AAGlG,OAAO,KAAK,EAGV,YAAY,EAEZ,mBAAmB,EAGpB,MAAM,SAAS,CAAA;AAEhB;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AACH,iBAAS,UAAU,CAAC,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,GAAE,mBAAwB,GAAG,YAAY,CAiCtG;AAED;;;;;;;;;;;;;;;;;GAiBG;AACH,iBAAS,iBAAiB,CAAC,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,CAAC,EAAE,mBAAmB,GAAG,CAAC,MAAM,EAAE,OAAO,KAAK,OAAO,CAKjH;AAuFD,OAAO,EAAE,6BAA6B,EAAE,YAAY,EAAE,CAAA;AAItD,OAAO,EACL,kBAAkB,EAClB,eAAe,EACf,eAAe,EACf,KAAK,mBAAmB,GACzB,MAAM,4BAA4B,CAAA;AACnC,OAAO,EACL,4BAA4B,EAC5B,wBAAwB,EACxB,2BAA2B,GAC5B,MAAM,wBAAwB,CAAA;AAC/B,OAAO,EAAE,UAAU,EAAE,KAAK,iBAAiB,EAAE,MAAM,0BAA0B,CAAA;AAC7E,OAAO,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAA;AACvD,OAAO,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAA;AAI/C,OAAO,EAAE,OAAO,EAAE,KAAK,cAAc,EAAE,MAAM,cAAc,CAAA;AAC3D,YAAY,EACV,YAAY,EACZ,gBAAgB,EAChB,qBAAqB,EACrB,YAAY,EACZ,gBAAgB,EAChB,0BAA0B,EAC1B,wBAAwB,EACxB,mBAAmB,EACnB,4BAA4B,EAC5B,gBAAgB,EAChB,sBAAsB,EACtB,mBAAmB,EACnB,oBAAoB,EACpB,YAAY,GACb,MAAM,SAAS,CAAA;AAChB,MAAM,MAAM,gBAAgB,GAAG,mBAAmB,CAAC,UAAU,CAAC,CAAA;AAC9D,OAAO,EAAE,UAAU,EAAE,iBAAiB,EAAE,CAAA"}
|