@posthog/mcp 0.0.9 → 0.1.16
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/LICENSE +307 -3
- package/README.md +182 -90
- package/dist/extensions/capture.d.ts +13 -0
- package/dist/extensions/capture.d.ts.map +1 -0
- package/dist/extensions/capture.js +80 -0
- package/dist/extensions/capture.mjs +46 -0
- package/dist/extensions/compatibility.d.ts +23 -0
- package/dist/extensions/compatibility.d.ts.map +1 -0
- package/dist/extensions/compatibility.js +113 -0
- package/dist/extensions/compatibility.mjs +67 -0
- package/dist/extensions/constants.d.ts +39 -0
- package/dist/extensions/constants.d.ts.map +1 -0
- package/dist/extensions/constants.js +86 -0
- package/dist/extensions/constants.mjs +37 -0
- package/dist/extensions/context-parameters.d.ts +31 -0
- package/dist/extensions/context-parameters.d.ts.map +1 -0
- package/dist/extensions/context-parameters.js +93 -0
- package/dist/extensions/context-parameters.mjs +50 -0
- package/dist/extensions/conversation-id.d.ts +52 -0
- package/dist/extensions/conversation-id.d.ts.map +1 -0
- package/dist/extensions/conversation-id.js +164 -0
- package/dist/extensions/conversation-id.mjs +103 -0
- package/dist/extensions/event-types.d.ts +21 -0
- package/dist/extensions/event-types.d.ts.map +1 -0
- package/dist/extensions/event-types.js +47 -0
- package/dist/extensions/event-types.mjs +13 -0
- package/dist/extensions/exceptions.d.ts +13 -0
- package/dist/extensions/exceptions.d.ts.map +1 -0
- package/dist/extensions/exceptions.js +58 -0
- package/dist/extensions/exceptions.mjs +24 -0
- package/dist/extensions/ids.d.ts +13 -0
- package/dist/extensions/ids.d.ts.map +1 -0
- package/dist/extensions/ids.js +55 -0
- package/dist/extensions/ids.mjs +18 -0
- package/dist/extensions/instrument-highlevel.d.ts +3 -0
- package/dist/extensions/instrument-highlevel.d.ts.map +1 -0
- package/dist/extensions/instrument-highlevel.js +229 -0
- package/dist/extensions/instrument-highlevel.mjs +195 -0
- package/dist/extensions/instrument-lowlevel.d.ts +8 -0
- package/dist/extensions/instrument-lowlevel.d.ts.map +1 -0
- package/dist/extensions/instrument-lowlevel.js +85 -0
- package/dist/extensions/instrument-lowlevel.mjs +51 -0
- package/dist/extensions/instrumentation.d.ts +59 -0
- package/dist/extensions/instrumentation.d.ts.map +1 -0
- package/dist/extensions/instrumentation.js +237 -0
- package/dist/extensions/instrumentation.mjs +194 -0
- package/dist/extensions/intent.d.ts +10 -0
- package/dist/extensions/intent.d.ts.map +1 -0
- package/dist/extensions/intent.js +84 -0
- package/dist/extensions/intent.mjs +44 -0
- package/dist/extensions/internal.d.ts +32 -0
- package/dist/extensions/internal.d.ts.map +1 -0
- package/dist/extensions/internal.js +158 -0
- package/dist/extensions/internal.mjs +106 -0
- package/dist/extensions/logger.d.ts +14 -0
- package/dist/extensions/logger.d.ts.map +1 -0
- package/dist/extensions/logger.js +47 -0
- package/dist/extensions/logger.mjs +10 -0
- package/dist/extensions/mcp-payloads.d.ts +5 -0
- package/dist/extensions/mcp-payloads.d.ts.map +1 -0
- package/dist/extensions/mcp-payloads.js +91 -0
- package/dist/extensions/mcp-payloads.mjs +54 -0
- package/dist/extensions/mcp-sdk-compat.d.ts +33 -0
- package/dist/extensions/mcp-sdk-compat.d.ts.map +1 -0
- package/dist/extensions/mcp-sdk-compat.js +112 -0
- package/dist/extensions/mcp-sdk-compat.mjs +60 -0
- package/dist/extensions/posthog-events.d.ts +14 -0
- package/dist/extensions/posthog-events.d.ts.map +1 -0
- package/dist/extensions/posthog-events.js +143 -0
- package/dist/extensions/posthog-events.mjs +109 -0
- package/dist/extensions/sanitization.d.ts +10 -0
- package/dist/extensions/sanitization.d.ts.map +1 -0
- package/dist/extensions/sanitization.js +96 -0
- package/dist/extensions/sanitization.mjs +62 -0
- package/dist/extensions/session.d.ts +20 -0
- package/dist/extensions/session.d.ts.map +1 -0
- package/dist/extensions/session.js +113 -0
- package/dist/extensions/session.mjs +67 -0
- package/dist/extensions/sink.d.ts +44 -0
- package/dist/extensions/sink.d.ts.map +1 -0
- package/dist/extensions/sink.js +102 -0
- package/dist/extensions/sink.mjs +65 -0
- package/dist/extensions/tools.d.ts +9 -0
- package/dist/extensions/tools.d.ts.map +1 -0
- package/dist/extensions/tools.js +79 -0
- package/dist/extensions/tools.mjs +39 -0
- package/dist/extensions/tracing-helpers.d.ts +29 -0
- package/dist/extensions/tracing-helpers.d.ts.map +1 -0
- package/dist/extensions/tracing-helpers.js +59 -0
- package/dist/extensions/tracing-helpers.mjs +16 -0
- package/dist/extensions/truncation.d.ts +25 -0
- package/dist/extensions/truncation.d.ts.map +1 -0
- package/dist/extensions/truncation.js +277 -0
- package/dist/extensions/truncation.mjs +228 -0
- package/dist/index.d.ts +36 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +132 -0
- package/dist/index.mjs +83 -2929
- package/dist/types.d.ts +220 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +18 -0
- package/dist/types.mjs +0 -0
- package/dist/version.d.ts +2 -0
- package/dist/version.d.ts.map +1 -0
- package/dist/version.js +36 -0
- package/dist/version.mjs +2 -0
- package/package.json +55 -87
- package/src/extensions/capture.ts +68 -0
- package/src/extensions/compatibility.ts +138 -0
- package/src/extensions/constants.ts +48 -0
- package/src/extensions/context-parameters.ts +119 -0
- package/src/extensions/conversation-id.ts +177 -0
- package/src/extensions/event-types.ts +21 -0
- package/src/extensions/exceptions.ts +83 -0
- package/src/extensions/ids.ts +32 -0
- package/src/extensions/instrument-highlevel.ts +297 -0
- package/src/extensions/instrument-lowlevel.ts +83 -0
- package/src/extensions/instrumentation.ts +415 -0
- package/src/extensions/intent.ts +78 -0
- package/src/extensions/internal.ts +193 -0
- package/src/extensions/logger.ts +27 -0
- package/src/extensions/mcp-payloads.ts +98 -0
- package/src/extensions/mcp-sdk-compat.ts +160 -0
- package/src/extensions/posthog-events.ts +212 -0
- package/src/extensions/sanitization.ts +121 -0
- package/src/extensions/session.ts +117 -0
- package/src/extensions/sink.ts +130 -0
- package/src/extensions/tools.ts +50 -0
- package/src/extensions/tracing-helpers.ts +51 -0
- package/src/extensions/truncation.ts +453 -0
- package/src/index.ts +174 -0
- package/src/types.ts +244 -0
- package/src/version.ts +1 -0
- package/dist/index.cjs +0 -2937
- package/dist/index.cjs.map +0 -1
- package/dist/index.d.cts +0 -264
- package/dist/index.d.mts +0 -263
- package/dist/index.mjs.map +0 -1
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
function getToolFunction(tool) {
|
|
2
|
+
if ('handler' in tool && 'function' == typeof tool.handler) return tool.handler;
|
|
3
|
+
if ('callback' in tool && 'function' == typeof tool.callback) return tool.callback;
|
|
4
|
+
throw new Error('Tool has neither callback nor handler property');
|
|
5
|
+
}
|
|
6
|
+
function getToolFunctionKey(tool) {
|
|
7
|
+
if ('handler' in tool && 'function' == typeof tool.handler) return 'handler';
|
|
8
|
+
return 'callback';
|
|
9
|
+
}
|
|
10
|
+
function hasToolFunction(tool) {
|
|
11
|
+
if (!tool || 'object' != typeof tool) return false;
|
|
12
|
+
const t = tool;
|
|
13
|
+
return 'handler' in t && 'function' == typeof t.handler || 'callback' in t && 'function' == typeof t.callback;
|
|
14
|
+
}
|
|
15
|
+
function createWrappedTool(originalTool, wrappedFunction) {
|
|
16
|
+
const key = getToolFunctionKey(originalTool);
|
|
17
|
+
return {
|
|
18
|
+
...originalTool,
|
|
19
|
+
[key]: wrappedFunction
|
|
20
|
+
};
|
|
21
|
+
}
|
|
22
|
+
function isZ4Schema(schema) {
|
|
23
|
+
if (!schema || 'object' != typeof schema) return false;
|
|
24
|
+
return !!schema._zod;
|
|
25
|
+
}
|
|
26
|
+
function getObjectShape(schema) {
|
|
27
|
+
if (!schema || 'object' != typeof schema) return;
|
|
28
|
+
let rawShape;
|
|
29
|
+
if (isZ4Schema(schema)) {
|
|
30
|
+
const v4Schema = schema;
|
|
31
|
+
rawShape = v4Schema._zod?.def?.shape;
|
|
32
|
+
} else {
|
|
33
|
+
const v3Schema = schema;
|
|
34
|
+
rawShape = v3Schema.shape ?? v3Schema._def?.shape;
|
|
35
|
+
}
|
|
36
|
+
if (!rawShape) return;
|
|
37
|
+
if ('function' == typeof rawShape) try {
|
|
38
|
+
return rawShape();
|
|
39
|
+
} catch {
|
|
40
|
+
return;
|
|
41
|
+
}
|
|
42
|
+
return rawShape;
|
|
43
|
+
}
|
|
44
|
+
function getLiteralValue(schema) {
|
|
45
|
+
if (!schema || 'object' != typeof schema) return;
|
|
46
|
+
if (isZ4Schema(schema)) {
|
|
47
|
+
const v4Schema = schema;
|
|
48
|
+
const def = v4Schema._zod?.def;
|
|
49
|
+
if (def?.value !== void 0) return def.value;
|
|
50
|
+
if (Array.isArray(def?.values) && def.values.length > 0) return def.values[0];
|
|
51
|
+
} else {
|
|
52
|
+
const v3Schema = schema;
|
|
53
|
+
const def = v3Schema._def;
|
|
54
|
+
if (def?.value !== void 0) return def.value;
|
|
55
|
+
if (Array.isArray(def?.values) && def.values.length > 0) return def.values[0];
|
|
56
|
+
}
|
|
57
|
+
const directValue = schema.value;
|
|
58
|
+
if (void 0 !== directValue) return directValue;
|
|
59
|
+
}
|
|
60
|
+
export { createWrappedTool, getLiteralValue, getObjectShape, getToolFunction, getToolFunctionKey, hasToolFunction, isZ4Schema };
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import type { Event } from '../types';
|
|
2
|
+
export interface PostHogCaptureEvent {
|
|
3
|
+
distinct_id: string;
|
|
4
|
+
event: string;
|
|
5
|
+
properties: Record<string, unknown>;
|
|
6
|
+
timestamp: string;
|
|
7
|
+
type: 'capture';
|
|
8
|
+
}
|
|
9
|
+
export interface BuildPostHogCaptureEventsOptions {
|
|
10
|
+
/** Whether to emit a `$exception` sibling alongside errored events. Defaults to `true`. */
|
|
11
|
+
enableExceptionAutocapture?: boolean;
|
|
12
|
+
}
|
|
13
|
+
export declare function buildPostHogCaptureEvents(event: Event, options?: BuildPostHogCaptureEventsOptions): PostHogCaptureEvent[];
|
|
14
|
+
//# sourceMappingURL=posthog-events.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"posthog-events.d.ts","sourceRoot":"","sources":["../../src/extensions/posthog-events.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,UAAU,CAAA;AAyBrC,MAAM,WAAW,mBAAmB;IAClC,WAAW,EAAE,MAAM,CAAA;IACnB,KAAK,EAAE,MAAM,CAAA;IACb,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;IACnC,SAAS,EAAE,MAAM,CAAA;IACjB,IAAI,EAAE,SAAS,CAAA;CAChB;AAED,MAAM,WAAW,gCAAgC;IAC/C,2FAA2F;IAC3F,0BAA0B,CAAC,EAAE,OAAO,CAAA;CACrC;AAED,wBAAgB,yBAAyB,CACvC,KAAK,EAAE,KAAK,EACZ,OAAO,GAAE,gCAAqC,GAC7C,mBAAmB,EAAE,CAQvB"}
|
|
@@ -0,0 +1,143 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __webpack_require__ = {};
|
|
3
|
+
(()=>{
|
|
4
|
+
__webpack_require__.d = (exports1, definition)=>{
|
|
5
|
+
for(var key in definition)if (__webpack_require__.o(definition, key) && !__webpack_require__.o(exports1, key)) Object.defineProperty(exports1, key, {
|
|
6
|
+
enumerable: true,
|
|
7
|
+
get: definition[key]
|
|
8
|
+
});
|
|
9
|
+
};
|
|
10
|
+
})();
|
|
11
|
+
(()=>{
|
|
12
|
+
__webpack_require__.o = (obj, prop)=>Object.prototype.hasOwnProperty.call(obj, prop);
|
|
13
|
+
})();
|
|
14
|
+
(()=>{
|
|
15
|
+
__webpack_require__.r = (exports1)=>{
|
|
16
|
+
if ('undefined' != typeof Symbol && Symbol.toStringTag) Object.defineProperty(exports1, Symbol.toStringTag, {
|
|
17
|
+
value: 'Module'
|
|
18
|
+
});
|
|
19
|
+
Object.defineProperty(exports1, '__esModule', {
|
|
20
|
+
value: true
|
|
21
|
+
});
|
|
22
|
+
};
|
|
23
|
+
})();
|
|
24
|
+
var __webpack_exports__ = {};
|
|
25
|
+
__webpack_require__.r(__webpack_exports__);
|
|
26
|
+
__webpack_require__.d(__webpack_exports__, {
|
|
27
|
+
buildPostHogCaptureEvents: ()=>buildPostHogCaptureEvents
|
|
28
|
+
});
|
|
29
|
+
const external_constants_js_namespaceObject = require("./constants.js");
|
|
30
|
+
const external_event_types_js_namespaceObject = require("./event-types.js");
|
|
31
|
+
const BUILT_IN_EVENT_NAME_BY_TYPE = {
|
|
32
|
+
[external_event_types_js_namespaceObject.MCPAnalyticsEventType.custom]: external_constants_js_namespaceObject.PostHogMCPAnalyticsEvent.Custom,
|
|
33
|
+
[external_event_types_js_namespaceObject.MCPAnalyticsEventType.identify]: external_constants_js_namespaceObject.PostHogMCPAnalyticsEvent.Identify,
|
|
34
|
+
[external_event_types_js_namespaceObject.MCPAnalyticsEventType.mcpMissingCapability]: external_constants_js_namespaceObject.PostHogMCPAnalyticsEvent.MissingCapability,
|
|
35
|
+
[external_event_types_js_namespaceObject.MCPAnalyticsEventType.mcpInitialize]: external_constants_js_namespaceObject.PostHogMCPAnalyticsEvent.Initialize,
|
|
36
|
+
[external_event_types_js_namespaceObject.MCPAnalyticsEventType.mcpPromptsGet]: external_constants_js_namespaceObject.PostHogMCPAnalyticsEvent.PromptGet,
|
|
37
|
+
[external_event_types_js_namespaceObject.MCPAnalyticsEventType.mcpPromptsList]: external_constants_js_namespaceObject.PostHogMCPAnalyticsEvent.PromptsList,
|
|
38
|
+
[external_event_types_js_namespaceObject.MCPAnalyticsEventType.mcpResourcesList]: external_constants_js_namespaceObject.PostHogMCPAnalyticsEvent.ResourcesList,
|
|
39
|
+
[external_event_types_js_namespaceObject.MCPAnalyticsEventType.mcpResourcesRead]: external_constants_js_namespaceObject.PostHogMCPAnalyticsEvent.ResourceRead,
|
|
40
|
+
[external_event_types_js_namespaceObject.MCPAnalyticsEventType.mcpToolsCall]: external_constants_js_namespaceObject.PostHogMCPAnalyticsEvent.ToolCall,
|
|
41
|
+
[external_event_types_js_namespaceObject.MCPAnalyticsEventType.mcpToolsList]: external_constants_js_namespaceObject.PostHogMCPAnalyticsEvent.ToolsList
|
|
42
|
+
};
|
|
43
|
+
function getDistinctId(event) {
|
|
44
|
+
return event.identifyActorGivenId || event.sessionId || 'anonymous';
|
|
45
|
+
}
|
|
46
|
+
function getTimestamp(event) {
|
|
47
|
+
return event.timestamp ? event.timestamp.toISOString() : new Date().toISOString();
|
|
48
|
+
}
|
|
49
|
+
function buildPostHogCaptureEvents(event, options = {}) {
|
|
50
|
+
const batch = [
|
|
51
|
+
buildCaptureEvent(event)
|
|
52
|
+
];
|
|
53
|
+
if (event.isError && event.error && false !== options.enableExceptionAutocapture) batch.push(buildExceptionEvent(event));
|
|
54
|
+
return batch;
|
|
55
|
+
}
|
|
56
|
+
function buildCaptureEvent(event) {
|
|
57
|
+
const distinctId = getDistinctId(event);
|
|
58
|
+
const timestamp = getTimestamp(event);
|
|
59
|
+
const properties = {
|
|
60
|
+
[external_constants_js_namespaceObject.PostHogMCPAnalyticsProperty.SessionId]: event.sessionId,
|
|
61
|
+
[external_constants_js_namespaceObject.PostHogMCPAnalyticsProperty.Source]: external_constants_js_namespaceObject.POSTHOG_MCP_ANALYTICS_SOURCE
|
|
62
|
+
};
|
|
63
|
+
addConversationIdProperty(event, properties);
|
|
64
|
+
addPersonProcessingProperty(event, properties);
|
|
65
|
+
addGroupsProperty(event, properties);
|
|
66
|
+
addCommonEventProperties(event, properties);
|
|
67
|
+
addCustomEventProperties(event, properties);
|
|
68
|
+
return {
|
|
69
|
+
event: event.eventName ?? BUILT_IN_EVENT_NAME_BY_TYPE[event.eventType],
|
|
70
|
+
distinct_id: distinctId,
|
|
71
|
+
properties,
|
|
72
|
+
timestamp,
|
|
73
|
+
type: 'capture'
|
|
74
|
+
};
|
|
75
|
+
}
|
|
76
|
+
function addConversationIdProperty(event, properties) {
|
|
77
|
+
if (void 0 !== event.conversationId && '' !== event.conversationId) properties[external_constants_js_namespaceObject.PostHogMCPAnalyticsProperty.ConversationId] = event.conversationId;
|
|
78
|
+
}
|
|
79
|
+
function addGroupsProperty(event, properties) {
|
|
80
|
+
if (event.groups && Object.keys(event.groups).length > 0) properties.$groups = event.groups;
|
|
81
|
+
}
|
|
82
|
+
function addPersonProcessingProperty(event, properties) {
|
|
83
|
+
if (!event.identifyActorGivenId) properties.$process_person_profile = false;
|
|
84
|
+
}
|
|
85
|
+
function addCommonEventProperties(event, properties) {
|
|
86
|
+
if (event.resourceName) {
|
|
87
|
+
properties[external_constants_js_namespaceObject.PostHogMCPAnalyticsProperty.ResourceName] = event.resourceName;
|
|
88
|
+
if (event.eventType === external_event_types_js_namespaceObject.MCPAnalyticsEventType.mcpToolsCall) properties[external_constants_js_namespaceObject.PostHogMCPAnalyticsProperty.ToolName] = event.resourceName;
|
|
89
|
+
}
|
|
90
|
+
if (event.toolDescription && event.eventType === external_event_types_js_namespaceObject.MCPAnalyticsEventType.mcpToolsCall) properties[external_constants_js_namespaceObject.PostHogMCPAnalyticsProperty.ToolDescription] = event.toolDescription;
|
|
91
|
+
if (event.listedToolNames && event.listedToolNames.length > 0 && event.eventType === external_event_types_js_namespaceObject.MCPAnalyticsEventType.mcpToolsList) properties[external_constants_js_namespaceObject.PostHogMCPAnalyticsProperty.ListedToolNames] = event.listedToolNames;
|
|
92
|
+
if (void 0 !== event.duration) properties[external_constants_js_namespaceObject.PostHogMCPAnalyticsProperty.DurationMs] = event.duration;
|
|
93
|
+
if (event.serverName) properties[external_constants_js_namespaceObject.PostHogMCPAnalyticsProperty.ServerName] = event.serverName;
|
|
94
|
+
if (event.serverVersion) properties[external_constants_js_namespaceObject.PostHogMCPAnalyticsProperty.ServerVersion] = event.serverVersion;
|
|
95
|
+
if (event.clientName) properties[external_constants_js_namespaceObject.PostHogMCPAnalyticsProperty.ClientName] = event.clientName;
|
|
96
|
+
if (event.clientVersion) properties[external_constants_js_namespaceObject.PostHogMCPAnalyticsProperty.ClientVersion] = event.clientVersion;
|
|
97
|
+
if (event.userIntent) properties[external_constants_js_namespaceObject.PostHogMCPAnalyticsProperty.Intent] = event.userIntent;
|
|
98
|
+
if (event.userIntentSource) properties[external_constants_js_namespaceObject.PostHogMCPAnalyticsProperty.IntentSource] = event.userIntentSource;
|
|
99
|
+
if (void 0 !== event.isError) properties[external_constants_js_namespaceObject.PostHogMCPAnalyticsProperty.IsError] = event.isError;
|
|
100
|
+
if (void 0 !== event.parameters) properties[external_constants_js_namespaceObject.PostHogMCPAnalyticsProperty.Parameters] = event.parameters;
|
|
101
|
+
if (void 0 !== event.response) properties[external_constants_js_namespaceObject.PostHogMCPAnalyticsProperty.Response] = event.response;
|
|
102
|
+
if (event.identifyActorData && Object.keys(event.identifyActorData).length > 0) properties.$set = {
|
|
103
|
+
...event.identifyActorData
|
|
104
|
+
};
|
|
105
|
+
}
|
|
106
|
+
function addCustomEventProperties(event, properties) {
|
|
107
|
+
if (event.properties) for (const [key, value] of Object.entries(event.properties))properties[key] = value;
|
|
108
|
+
}
|
|
109
|
+
function buildExceptionEvent(event) {
|
|
110
|
+
const distinctId = getDistinctId(event);
|
|
111
|
+
const timestamp = getTimestamp(event);
|
|
112
|
+
const properties = {
|
|
113
|
+
[external_constants_js_namespaceObject.PostHogMCPAnalyticsProperty.SessionId]: event.sessionId
|
|
114
|
+
};
|
|
115
|
+
addConversationIdProperty(event, properties);
|
|
116
|
+
addPersonProcessingProperty(event, properties);
|
|
117
|
+
addGroupsProperty(event, properties);
|
|
118
|
+
if (event.error) Object.assign(properties, event.error);
|
|
119
|
+
if (event.resourceName) {
|
|
120
|
+
properties[external_constants_js_namespaceObject.PostHogMCPAnalyticsProperty.ResourceName] = event.resourceName;
|
|
121
|
+
if (event.eventType === external_event_types_js_namespaceObject.MCPAnalyticsEventType.mcpToolsCall) properties[external_constants_js_namespaceObject.PostHogMCPAnalyticsProperty.ToolName] = event.resourceName;
|
|
122
|
+
}
|
|
123
|
+
if (event.toolDescription && event.eventType === external_event_types_js_namespaceObject.MCPAnalyticsEventType.mcpToolsCall) properties[external_constants_js_namespaceObject.PostHogMCPAnalyticsProperty.ToolDescription] = event.toolDescription;
|
|
124
|
+
if (event.serverName) properties[external_constants_js_namespaceObject.PostHogMCPAnalyticsProperty.ServerName] = event.serverName;
|
|
125
|
+
if (event.serverVersion) properties[external_constants_js_namespaceObject.PostHogMCPAnalyticsProperty.ServerVersion] = event.serverVersion;
|
|
126
|
+
if (event.clientName) properties[external_constants_js_namespaceObject.PostHogMCPAnalyticsProperty.ClientName] = event.clientName;
|
|
127
|
+
if (event.clientVersion) properties[external_constants_js_namespaceObject.PostHogMCPAnalyticsProperty.ClientVersion] = event.clientVersion;
|
|
128
|
+
addCustomEventProperties(event, properties);
|
|
129
|
+
return {
|
|
130
|
+
event: external_constants_js_namespaceObject.PostHogMCPAnalyticsEvent.Exception,
|
|
131
|
+
distinct_id: distinctId,
|
|
132
|
+
properties,
|
|
133
|
+
timestamp,
|
|
134
|
+
type: 'capture'
|
|
135
|
+
};
|
|
136
|
+
}
|
|
137
|
+
exports.buildPostHogCaptureEvents = __webpack_exports__.buildPostHogCaptureEvents;
|
|
138
|
+
for(var __webpack_i__ in __webpack_exports__)if (-1 === [
|
|
139
|
+
"buildPostHogCaptureEvents"
|
|
140
|
+
].indexOf(__webpack_i__)) exports[__webpack_i__] = __webpack_exports__[__webpack_i__];
|
|
141
|
+
Object.defineProperty(exports, '__esModule', {
|
|
142
|
+
value: true
|
|
143
|
+
});
|
|
@@ -0,0 +1,109 @@
|
|
|
1
|
+
import { POSTHOG_MCP_ANALYTICS_SOURCE, PostHogMCPAnalyticsEvent, PostHogMCPAnalyticsProperty } from "./constants.mjs";
|
|
2
|
+
import { MCPAnalyticsEventType } from "./event-types.mjs";
|
|
3
|
+
const BUILT_IN_EVENT_NAME_BY_TYPE = {
|
|
4
|
+
[MCPAnalyticsEventType.custom]: PostHogMCPAnalyticsEvent.Custom,
|
|
5
|
+
[MCPAnalyticsEventType.identify]: PostHogMCPAnalyticsEvent.Identify,
|
|
6
|
+
[MCPAnalyticsEventType.mcpMissingCapability]: PostHogMCPAnalyticsEvent.MissingCapability,
|
|
7
|
+
[MCPAnalyticsEventType.mcpInitialize]: PostHogMCPAnalyticsEvent.Initialize,
|
|
8
|
+
[MCPAnalyticsEventType.mcpPromptsGet]: PostHogMCPAnalyticsEvent.PromptGet,
|
|
9
|
+
[MCPAnalyticsEventType.mcpPromptsList]: PostHogMCPAnalyticsEvent.PromptsList,
|
|
10
|
+
[MCPAnalyticsEventType.mcpResourcesList]: PostHogMCPAnalyticsEvent.ResourcesList,
|
|
11
|
+
[MCPAnalyticsEventType.mcpResourcesRead]: PostHogMCPAnalyticsEvent.ResourceRead,
|
|
12
|
+
[MCPAnalyticsEventType.mcpToolsCall]: PostHogMCPAnalyticsEvent.ToolCall,
|
|
13
|
+
[MCPAnalyticsEventType.mcpToolsList]: PostHogMCPAnalyticsEvent.ToolsList
|
|
14
|
+
};
|
|
15
|
+
function getDistinctId(event) {
|
|
16
|
+
return event.identifyActorGivenId || event.sessionId || 'anonymous';
|
|
17
|
+
}
|
|
18
|
+
function getTimestamp(event) {
|
|
19
|
+
return event.timestamp ? event.timestamp.toISOString() : new Date().toISOString();
|
|
20
|
+
}
|
|
21
|
+
function buildPostHogCaptureEvents(event, options = {}) {
|
|
22
|
+
const batch = [
|
|
23
|
+
buildCaptureEvent(event)
|
|
24
|
+
];
|
|
25
|
+
if (event.isError && event.error && false !== options.enableExceptionAutocapture) batch.push(buildExceptionEvent(event));
|
|
26
|
+
return batch;
|
|
27
|
+
}
|
|
28
|
+
function buildCaptureEvent(event) {
|
|
29
|
+
const distinctId = getDistinctId(event);
|
|
30
|
+
const timestamp = getTimestamp(event);
|
|
31
|
+
const properties = {
|
|
32
|
+
[PostHogMCPAnalyticsProperty.SessionId]: event.sessionId,
|
|
33
|
+
[PostHogMCPAnalyticsProperty.Source]: POSTHOG_MCP_ANALYTICS_SOURCE
|
|
34
|
+
};
|
|
35
|
+
addConversationIdProperty(event, properties);
|
|
36
|
+
addPersonProcessingProperty(event, properties);
|
|
37
|
+
addGroupsProperty(event, properties);
|
|
38
|
+
addCommonEventProperties(event, properties);
|
|
39
|
+
addCustomEventProperties(event, properties);
|
|
40
|
+
return {
|
|
41
|
+
event: event.eventName ?? BUILT_IN_EVENT_NAME_BY_TYPE[event.eventType],
|
|
42
|
+
distinct_id: distinctId,
|
|
43
|
+
properties,
|
|
44
|
+
timestamp,
|
|
45
|
+
type: 'capture'
|
|
46
|
+
};
|
|
47
|
+
}
|
|
48
|
+
function addConversationIdProperty(event, properties) {
|
|
49
|
+
if (void 0 !== event.conversationId && '' !== event.conversationId) properties[PostHogMCPAnalyticsProperty.ConversationId] = event.conversationId;
|
|
50
|
+
}
|
|
51
|
+
function addGroupsProperty(event, properties) {
|
|
52
|
+
if (event.groups && Object.keys(event.groups).length > 0) properties.$groups = event.groups;
|
|
53
|
+
}
|
|
54
|
+
function addPersonProcessingProperty(event, properties) {
|
|
55
|
+
if (!event.identifyActorGivenId) properties.$process_person_profile = false;
|
|
56
|
+
}
|
|
57
|
+
function addCommonEventProperties(event, properties) {
|
|
58
|
+
if (event.resourceName) {
|
|
59
|
+
properties[PostHogMCPAnalyticsProperty.ResourceName] = event.resourceName;
|
|
60
|
+
if (event.eventType === MCPAnalyticsEventType.mcpToolsCall) properties[PostHogMCPAnalyticsProperty.ToolName] = event.resourceName;
|
|
61
|
+
}
|
|
62
|
+
if (event.toolDescription && event.eventType === MCPAnalyticsEventType.mcpToolsCall) properties[PostHogMCPAnalyticsProperty.ToolDescription] = event.toolDescription;
|
|
63
|
+
if (event.listedToolNames && event.listedToolNames.length > 0 && event.eventType === MCPAnalyticsEventType.mcpToolsList) properties[PostHogMCPAnalyticsProperty.ListedToolNames] = event.listedToolNames;
|
|
64
|
+
if (void 0 !== event.duration) properties[PostHogMCPAnalyticsProperty.DurationMs] = event.duration;
|
|
65
|
+
if (event.serverName) properties[PostHogMCPAnalyticsProperty.ServerName] = event.serverName;
|
|
66
|
+
if (event.serverVersion) properties[PostHogMCPAnalyticsProperty.ServerVersion] = event.serverVersion;
|
|
67
|
+
if (event.clientName) properties[PostHogMCPAnalyticsProperty.ClientName] = event.clientName;
|
|
68
|
+
if (event.clientVersion) properties[PostHogMCPAnalyticsProperty.ClientVersion] = event.clientVersion;
|
|
69
|
+
if (event.userIntent) properties[PostHogMCPAnalyticsProperty.Intent] = event.userIntent;
|
|
70
|
+
if (event.userIntentSource) properties[PostHogMCPAnalyticsProperty.IntentSource] = event.userIntentSource;
|
|
71
|
+
if (void 0 !== event.isError) properties[PostHogMCPAnalyticsProperty.IsError] = event.isError;
|
|
72
|
+
if (void 0 !== event.parameters) properties[PostHogMCPAnalyticsProperty.Parameters] = event.parameters;
|
|
73
|
+
if (void 0 !== event.response) properties[PostHogMCPAnalyticsProperty.Response] = event.response;
|
|
74
|
+
if (event.identifyActorData && Object.keys(event.identifyActorData).length > 0) properties.$set = {
|
|
75
|
+
...event.identifyActorData
|
|
76
|
+
};
|
|
77
|
+
}
|
|
78
|
+
function addCustomEventProperties(event, properties) {
|
|
79
|
+
if (event.properties) for (const [key, value] of Object.entries(event.properties))properties[key] = value;
|
|
80
|
+
}
|
|
81
|
+
function buildExceptionEvent(event) {
|
|
82
|
+
const distinctId = getDistinctId(event);
|
|
83
|
+
const timestamp = getTimestamp(event);
|
|
84
|
+
const properties = {
|
|
85
|
+
[PostHogMCPAnalyticsProperty.SessionId]: event.sessionId
|
|
86
|
+
};
|
|
87
|
+
addConversationIdProperty(event, properties);
|
|
88
|
+
addPersonProcessingProperty(event, properties);
|
|
89
|
+
addGroupsProperty(event, properties);
|
|
90
|
+
if (event.error) Object.assign(properties, event.error);
|
|
91
|
+
if (event.resourceName) {
|
|
92
|
+
properties[PostHogMCPAnalyticsProperty.ResourceName] = event.resourceName;
|
|
93
|
+
if (event.eventType === MCPAnalyticsEventType.mcpToolsCall) properties[PostHogMCPAnalyticsProperty.ToolName] = event.resourceName;
|
|
94
|
+
}
|
|
95
|
+
if (event.toolDescription && event.eventType === MCPAnalyticsEventType.mcpToolsCall) properties[PostHogMCPAnalyticsProperty.ToolDescription] = event.toolDescription;
|
|
96
|
+
if (event.serverName) properties[PostHogMCPAnalyticsProperty.ServerName] = event.serverName;
|
|
97
|
+
if (event.serverVersion) properties[PostHogMCPAnalyticsProperty.ServerVersion] = event.serverVersion;
|
|
98
|
+
if (event.clientName) properties[PostHogMCPAnalyticsProperty.ClientName] = event.clientName;
|
|
99
|
+
if (event.clientVersion) properties[PostHogMCPAnalyticsProperty.ClientVersion] = event.clientVersion;
|
|
100
|
+
addCustomEventProperties(event, properties);
|
|
101
|
+
return {
|
|
102
|
+
event: PostHogMCPAnalyticsEvent.Exception,
|
|
103
|
+
distinct_id: distinctId,
|
|
104
|
+
properties,
|
|
105
|
+
timestamp,
|
|
106
|
+
type: 'capture'
|
|
107
|
+
};
|
|
108
|
+
}
|
|
109
|
+
export { buildPostHogCaptureEvents };
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import type { Event, McpEvent } from '../types';
|
|
2
|
+
/**
|
|
3
|
+
* Sanitizes an event by redacting non-text content blocks from responses
|
|
4
|
+
* and large base64-encoded strings from parameters.
|
|
5
|
+
*
|
|
6
|
+
* This is a synchronous operation that returns a new object without mutating the original.
|
|
7
|
+
* It should run after customer redaction in the event pipeline.
|
|
8
|
+
*/
|
|
9
|
+
export declare function sanitizeEvent<T extends Event | McpEvent>(event: T): T;
|
|
10
|
+
//# sourceMappingURL=sanitization.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sanitization.d.ts","sourceRoot":"","sources":["../../src/extensions/sanitization.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,QAAQ,EAAE,MAAM,UAAU,CAAA;AAS/C;;;;;;GAMG;AACH,wBAAgB,aAAa,CAAC,CAAC,SAAS,KAAK,GAAG,QAAQ,EAAE,KAAK,EAAE,CAAC,GAAG,CAAC,CAYrE"}
|
|
@@ -0,0 +1,96 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __webpack_require__ = {};
|
|
3
|
+
(()=>{
|
|
4
|
+
__webpack_require__.d = (exports1, definition)=>{
|
|
5
|
+
for(var key in definition)if (__webpack_require__.o(definition, key) && !__webpack_require__.o(exports1, key)) Object.defineProperty(exports1, key, {
|
|
6
|
+
enumerable: true,
|
|
7
|
+
get: definition[key]
|
|
8
|
+
});
|
|
9
|
+
};
|
|
10
|
+
})();
|
|
11
|
+
(()=>{
|
|
12
|
+
__webpack_require__.o = (obj, prop)=>Object.prototype.hasOwnProperty.call(obj, prop);
|
|
13
|
+
})();
|
|
14
|
+
(()=>{
|
|
15
|
+
__webpack_require__.r = (exports1)=>{
|
|
16
|
+
if ('undefined' != typeof Symbol && Symbol.toStringTag) Object.defineProperty(exports1, Symbol.toStringTag, {
|
|
17
|
+
value: 'Module'
|
|
18
|
+
});
|
|
19
|
+
Object.defineProperty(exports1, '__esModule', {
|
|
20
|
+
value: true
|
|
21
|
+
});
|
|
22
|
+
};
|
|
23
|
+
})();
|
|
24
|
+
var __webpack_exports__ = {};
|
|
25
|
+
__webpack_require__.r(__webpack_exports__);
|
|
26
|
+
__webpack_require__.d(__webpack_exports__, {
|
|
27
|
+
sanitizeEvent: ()=>sanitizeEvent
|
|
28
|
+
});
|
|
29
|
+
const external_mcp_payloads_js_namespaceObject = require("./mcp-payloads.js");
|
|
30
|
+
function isRecord(value) {
|
|
31
|
+
return !!value && 'object' == typeof value && !Array.isArray(value);
|
|
32
|
+
}
|
|
33
|
+
function sanitizeEvent(event) {
|
|
34
|
+
const result = {
|
|
35
|
+
...event
|
|
36
|
+
};
|
|
37
|
+
if (null != result.response) result.response = sanitizeResponse(result.response);
|
|
38
|
+
if (null != result.parameters) result.parameters = sanitizeParameters(result.parameters);
|
|
39
|
+
return result;
|
|
40
|
+
}
|
|
41
|
+
function sanitizeResponse(response) {
|
|
42
|
+
if (null == response || 'object' != typeof response) return (0, external_mcp_payloads_js_namespaceObject.sanitizeCapturedValue)(response);
|
|
43
|
+
const sanitized = (0, external_mcp_payloads_js_namespaceObject.sanitizeCapturedValue)(response);
|
|
44
|
+
if (!isRecord(sanitized)) return sanitized;
|
|
45
|
+
const result = {
|
|
46
|
+
...sanitized
|
|
47
|
+
};
|
|
48
|
+
const content = result.content;
|
|
49
|
+
if (Array.isArray(content)) result.content = content.map(sanitizeContentBlock);
|
|
50
|
+
if (null != result.structuredContent && 'object' == typeof result.structuredContent) result.structuredContent = (0, external_mcp_payloads_js_namespaceObject.sanitizeCapturedValue)(result.structuredContent);
|
|
51
|
+
return result;
|
|
52
|
+
}
|
|
53
|
+
function sanitizeContentBlock(block) {
|
|
54
|
+
if (null == block || 'object' != typeof block) return block;
|
|
55
|
+
if (!isRecord(block)) return block;
|
|
56
|
+
switch(block.type){
|
|
57
|
+
case 'text':
|
|
58
|
+
return (0, external_mcp_payloads_js_namespaceObject.sanitizeCapturedValue)(block);
|
|
59
|
+
case 'image':
|
|
60
|
+
return {
|
|
61
|
+
type: 'text',
|
|
62
|
+
text: '[image content redacted - not supported by PostHog MCP analytics]'
|
|
63
|
+
};
|
|
64
|
+
case 'audio':
|
|
65
|
+
return {
|
|
66
|
+
type: 'text',
|
|
67
|
+
text: '[audio content redacted - not supported by PostHog MCP analytics]'
|
|
68
|
+
};
|
|
69
|
+
case 'resource':
|
|
70
|
+
return sanitizeResourceBlock(block);
|
|
71
|
+
case 'resource_link':
|
|
72
|
+
return (0, external_mcp_payloads_js_namespaceObject.sanitizeCapturedValue)(block);
|
|
73
|
+
default:
|
|
74
|
+
return {
|
|
75
|
+
type: 'text',
|
|
76
|
+
text: `[unsupported content type "${block.type}" redacted - not supported by PostHog MCP analytics]`
|
|
77
|
+
};
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
function sanitizeResourceBlock(block) {
|
|
81
|
+
if (isRecord(block.resource) && 'blob' in block.resource) return {
|
|
82
|
+
type: 'text',
|
|
83
|
+
text: '[binary resource content redacted - not supported by PostHog MCP analytics]'
|
|
84
|
+
};
|
|
85
|
+
return (0, external_mcp_payloads_js_namespaceObject.sanitizeCapturedValue)(block);
|
|
86
|
+
}
|
|
87
|
+
function sanitizeParameters(obj) {
|
|
88
|
+
return (0, external_mcp_payloads_js_namespaceObject.sanitizeCapturedValue)(obj);
|
|
89
|
+
}
|
|
90
|
+
exports.sanitizeEvent = __webpack_exports__.sanitizeEvent;
|
|
91
|
+
for(var __webpack_i__ in __webpack_exports__)if (-1 === [
|
|
92
|
+
"sanitizeEvent"
|
|
93
|
+
].indexOf(__webpack_i__)) exports[__webpack_i__] = __webpack_exports__[__webpack_i__];
|
|
94
|
+
Object.defineProperty(exports, '__esModule', {
|
|
95
|
+
value: true
|
|
96
|
+
});
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
import { sanitizeCapturedValue } from "./mcp-payloads.mjs";
|
|
2
|
+
function isRecord(value) {
|
|
3
|
+
return !!value && 'object' == typeof value && !Array.isArray(value);
|
|
4
|
+
}
|
|
5
|
+
function sanitizeEvent(event) {
|
|
6
|
+
const result = {
|
|
7
|
+
...event
|
|
8
|
+
};
|
|
9
|
+
if (null != result.response) result.response = sanitizeResponse(result.response);
|
|
10
|
+
if (null != result.parameters) result.parameters = sanitizeParameters(result.parameters);
|
|
11
|
+
return result;
|
|
12
|
+
}
|
|
13
|
+
function sanitizeResponse(response) {
|
|
14
|
+
if (null == response || 'object' != typeof response) return sanitizeCapturedValue(response);
|
|
15
|
+
const sanitized = sanitizeCapturedValue(response);
|
|
16
|
+
if (!isRecord(sanitized)) return sanitized;
|
|
17
|
+
const result = {
|
|
18
|
+
...sanitized
|
|
19
|
+
};
|
|
20
|
+
const content = result.content;
|
|
21
|
+
if (Array.isArray(content)) result.content = content.map(sanitizeContentBlock);
|
|
22
|
+
if (null != result.structuredContent && 'object' == typeof result.structuredContent) result.structuredContent = sanitizeCapturedValue(result.structuredContent);
|
|
23
|
+
return result;
|
|
24
|
+
}
|
|
25
|
+
function sanitizeContentBlock(block) {
|
|
26
|
+
if (null == block || 'object' != typeof block) return block;
|
|
27
|
+
if (!isRecord(block)) return block;
|
|
28
|
+
switch(block.type){
|
|
29
|
+
case 'text':
|
|
30
|
+
return sanitizeCapturedValue(block);
|
|
31
|
+
case 'image':
|
|
32
|
+
return {
|
|
33
|
+
type: 'text',
|
|
34
|
+
text: '[image content redacted - not supported by PostHog MCP analytics]'
|
|
35
|
+
};
|
|
36
|
+
case 'audio':
|
|
37
|
+
return {
|
|
38
|
+
type: 'text',
|
|
39
|
+
text: '[audio content redacted - not supported by PostHog MCP analytics]'
|
|
40
|
+
};
|
|
41
|
+
case 'resource':
|
|
42
|
+
return sanitizeResourceBlock(block);
|
|
43
|
+
case 'resource_link':
|
|
44
|
+
return sanitizeCapturedValue(block);
|
|
45
|
+
default:
|
|
46
|
+
return {
|
|
47
|
+
type: 'text',
|
|
48
|
+
text: `[unsupported content type "${block.type}" redacted - not supported by PostHog MCP analytics]`
|
|
49
|
+
};
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
function sanitizeResourceBlock(block) {
|
|
53
|
+
if (isRecord(block.resource) && 'blob' in block.resource) return {
|
|
54
|
+
type: 'text',
|
|
55
|
+
text: '[binary resource content redacted - not supported by PostHog MCP analytics]'
|
|
56
|
+
};
|
|
57
|
+
return sanitizeCapturedValue(block);
|
|
58
|
+
}
|
|
59
|
+
function sanitizeParameters(obj) {
|
|
60
|
+
return sanitizeCapturedValue(obj);
|
|
61
|
+
}
|
|
62
|
+
export { sanitizeEvent };
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import type { CompatibleRequestHandlerExtra, MCPAnalyticsData, MCPServerLike, SessionInfo } from '../types';
|
|
2
|
+
export declare function newSessionId(): string;
|
|
3
|
+
/**
|
|
4
|
+
* Derives the SDK session id deterministically from the MCP sessionId, so the
|
|
5
|
+
* same MCP session correlates to one SDK session across server restarts.
|
|
6
|
+
*/
|
|
7
|
+
export declare function deriveSessionIdFromMCPSession(mcpSessionId: string): string;
|
|
8
|
+
/**
|
|
9
|
+
* Resolves the session id for a request, preferring the MCP protocol sessionId
|
|
10
|
+
* over an SDK-generated one so a transport-supplied session wins.
|
|
11
|
+
*/
|
|
12
|
+
export declare function getServerSessionId(server: MCPServerLike, extra?: CompatibleRequestHandlerExtra): string;
|
|
13
|
+
export declare function setLastActivity(server: MCPServerLike): void;
|
|
14
|
+
/**
|
|
15
|
+
* Builds the session metadata stamped onto an event. The caller passes the
|
|
16
|
+
* session id resolved for *this* request so identity attribution can't be
|
|
17
|
+
* clobbered by a concurrent request mutating shared `data.sessionId`.
|
|
18
|
+
*/
|
|
19
|
+
export declare function getSessionInfo(server: MCPServerLike, data: MCPAnalyticsData | undefined, sessionId?: string): SessionInfo;
|
|
20
|
+
//# sourceMappingURL=session.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"session.d.ts","sourceRoot":"","sources":["../../src/extensions/session.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EACV,6BAA6B,EAC7B,gBAAgB,EAChB,aAAa,EAEb,WAAW,EACZ,MAAM,UAAU,CAAA;AAKjB,wBAAgB,YAAY,IAAI,MAAM,CAErC;AAED;;;GAGG;AACH,wBAAgB,6BAA6B,CAAC,YAAY,EAAE,MAAM,GAAG,MAAM,CAE1E;AAED;;;GAGG;AACH,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,aAAa,EAAE,KAAK,CAAC,EAAE,6BAA6B,GAAG,MAAM,CAoCvG;AAED,wBAAgB,eAAe,CAAC,MAAM,EAAE,aAAa,GAAG,IAAI,CAS3D;AAED;;;;GAIG;AACH,wBAAgB,cAAc,CAC5B,MAAM,EAAE,aAAa,EACrB,IAAI,EAAE,gBAAgB,GAAG,SAAS,EAClC,SAAS,CAAC,EAAE,MAAM,GACjB,WAAW,CA8Bb"}
|
|
@@ -0,0 +1,113 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __webpack_require__ = {};
|
|
3
|
+
(()=>{
|
|
4
|
+
__webpack_require__.d = (exports1, definition)=>{
|
|
5
|
+
for(var key in definition)if (__webpack_require__.o(definition, key) && !__webpack_require__.o(exports1, key)) Object.defineProperty(exports1, key, {
|
|
6
|
+
enumerable: true,
|
|
7
|
+
get: definition[key]
|
|
8
|
+
});
|
|
9
|
+
};
|
|
10
|
+
})();
|
|
11
|
+
(()=>{
|
|
12
|
+
__webpack_require__.o = (obj, prop)=>Object.prototype.hasOwnProperty.call(obj, prop);
|
|
13
|
+
})();
|
|
14
|
+
(()=>{
|
|
15
|
+
__webpack_require__.r = (exports1)=>{
|
|
16
|
+
if ('undefined' != typeof Symbol && Symbol.toStringTag) Object.defineProperty(exports1, Symbol.toStringTag, {
|
|
17
|
+
value: 'Module'
|
|
18
|
+
});
|
|
19
|
+
Object.defineProperty(exports1, '__esModule', {
|
|
20
|
+
value: true
|
|
21
|
+
});
|
|
22
|
+
};
|
|
23
|
+
})();
|
|
24
|
+
var __webpack_exports__ = {};
|
|
25
|
+
__webpack_require__.r(__webpack_exports__);
|
|
26
|
+
__webpack_require__.d(__webpack_exports__, {
|
|
27
|
+
setLastActivity: ()=>setLastActivity,
|
|
28
|
+
getServerSessionId: ()=>getServerSessionId,
|
|
29
|
+
deriveSessionIdFromMCPSession: ()=>deriveSessionIdFromMCPSession,
|
|
30
|
+
getSessionInfo: ()=>getSessionInfo,
|
|
31
|
+
newSessionId: ()=>newSessionId
|
|
32
|
+
});
|
|
33
|
+
const external_version_js_namespaceObject = require("../version.js");
|
|
34
|
+
const external_constants_js_namespaceObject = require("./constants.js");
|
|
35
|
+
const external_ids_js_namespaceObject = require("./ids.js");
|
|
36
|
+
const external_internal_js_namespaceObject = require("./internal.js");
|
|
37
|
+
function newSessionId() {
|
|
38
|
+
return (0, external_ids_js_namespaceObject.newPrefixedId)('ses');
|
|
39
|
+
}
|
|
40
|
+
function deriveSessionIdFromMCPSession(mcpSessionId) {
|
|
41
|
+
return (0, external_ids_js_namespaceObject.deterministicPrefixedId)('ses', mcpSessionId);
|
|
42
|
+
}
|
|
43
|
+
function getServerSessionId(server, extra) {
|
|
44
|
+
const data = (0, external_internal_js_namespaceObject.getServerTrackingData)(server);
|
|
45
|
+
if (!data) throw new Error('Server tracking data not found');
|
|
46
|
+
const mcpSessionId = extra?.sessionId;
|
|
47
|
+
if (mcpSessionId) {
|
|
48
|
+
data.sessionId = deriveSessionIdFromMCPSession(mcpSessionId);
|
|
49
|
+
data.lastMcpSessionId = mcpSessionId;
|
|
50
|
+
data.sessionSource = 'mcp';
|
|
51
|
+
(0, external_internal_js_namespaceObject.setServerTrackingData)(server, data);
|
|
52
|
+
setLastActivity(server);
|
|
53
|
+
return data.sessionId;
|
|
54
|
+
}
|
|
55
|
+
if ('mcp' === data.sessionSource && data.lastMcpSessionId) {
|
|
56
|
+
setLastActivity(server);
|
|
57
|
+
return data.sessionId;
|
|
58
|
+
}
|
|
59
|
+
const now = Date.now();
|
|
60
|
+
const timeoutMs = 60 * external_constants_js_namespaceObject.INACTIVITY_TIMEOUT_IN_MINUTES * 1000;
|
|
61
|
+
if (now - data.lastActivity.getTime() > timeoutMs) {
|
|
62
|
+
data.sessionId = newSessionId();
|
|
63
|
+
data.sessionSource = 'generated';
|
|
64
|
+
(0, external_internal_js_namespaceObject.setServerTrackingData)(server, data);
|
|
65
|
+
}
|
|
66
|
+
setLastActivity(server);
|
|
67
|
+
return data.sessionId;
|
|
68
|
+
}
|
|
69
|
+
function setLastActivity(server) {
|
|
70
|
+
const data = (0, external_internal_js_namespaceObject.getServerTrackingData)(server);
|
|
71
|
+
if (!data) throw new Error('Server tracking data not found');
|
|
72
|
+
data.lastActivity = new Date();
|
|
73
|
+
(0, external_internal_js_namespaceObject.setServerTrackingData)(server, data);
|
|
74
|
+
}
|
|
75
|
+
function getSessionInfo(server, data, sessionId) {
|
|
76
|
+
let clientInfo = {
|
|
77
|
+
name: void 0,
|
|
78
|
+
version: void 0
|
|
79
|
+
};
|
|
80
|
+
if (!data?.sessionInfo.clientName) clientInfo = server.getClientVersion();
|
|
81
|
+
const actorInfo = data?.identifiedSessions.get(sessionId ?? data.sessionId);
|
|
82
|
+
const sessionInfo = {
|
|
83
|
+
ipAddress: void 0,
|
|
84
|
+
sdkLanguage: 'TypeScript',
|
|
85
|
+
sdkVersion: external_version_js_namespaceObject.version,
|
|
86
|
+
serverName: server._serverInfo?.name,
|
|
87
|
+
serverVersion: server._serverInfo?.version,
|
|
88
|
+
clientName: clientInfo?.name,
|
|
89
|
+
clientVersion: clientInfo?.version,
|
|
90
|
+
identifyActorGivenId: actorInfo?.distinctId,
|
|
91
|
+
identifyActorData: actorInfo?.properties || {},
|
|
92
|
+
identifyActorGroups: actorInfo?.groups
|
|
93
|
+
};
|
|
94
|
+
if (!data) return sessionInfo;
|
|
95
|
+
data.sessionInfo = sessionInfo;
|
|
96
|
+
(0, external_internal_js_namespaceObject.setServerTrackingData)(server, data);
|
|
97
|
+
return data.sessionInfo;
|
|
98
|
+
}
|
|
99
|
+
exports.deriveSessionIdFromMCPSession = __webpack_exports__.deriveSessionIdFromMCPSession;
|
|
100
|
+
exports.getServerSessionId = __webpack_exports__.getServerSessionId;
|
|
101
|
+
exports.getSessionInfo = __webpack_exports__.getSessionInfo;
|
|
102
|
+
exports.newSessionId = __webpack_exports__.newSessionId;
|
|
103
|
+
exports.setLastActivity = __webpack_exports__.setLastActivity;
|
|
104
|
+
for(var __webpack_i__ in __webpack_exports__)if (-1 === [
|
|
105
|
+
"deriveSessionIdFromMCPSession",
|
|
106
|
+
"getServerSessionId",
|
|
107
|
+
"getSessionInfo",
|
|
108
|
+
"newSessionId",
|
|
109
|
+
"setLastActivity"
|
|
110
|
+
].indexOf(__webpack_i__)) exports[__webpack_i__] = __webpack_exports__[__webpack_i__];
|
|
111
|
+
Object.defineProperty(exports, '__esModule', {
|
|
112
|
+
value: true
|
|
113
|
+
});
|