@posthog/mcp 0.11.0 → 0.11.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +39 -0
- package/dist/extensions/client-identity.d.ts +70 -15
- package/dist/extensions/client-identity.d.ts.map +1 -1
- package/dist/extensions/client-identity.js +72 -17
- package/dist/extensions/client-identity.mjs +59 -13
- package/dist/extensions/compatibility.d.ts.map +1 -1
- package/dist/extensions/compatibility.js +14 -18
- package/dist/extensions/compatibility.mjs +10 -14
- package/dist/extensions/detect.d.ts +51 -0
- package/dist/extensions/detect.d.ts.map +1 -0
- package/dist/extensions/detect.js +96 -0
- package/dist/extensions/detect.mjs +38 -0
- package/dist/extensions/instrument-highlevel.d.ts.map +1 -1
- package/dist/extensions/instrumentation.d.ts +4 -5
- package/dist/extensions/instrumentation.d.ts.map +1 -1
- package/dist/extensions/instrumentation.js +6 -5
- package/dist/extensions/instrumentation.mjs +7 -6
- package/dist/extensions/internal.js +1 -1
- package/dist/extensions/internal.mjs +2 -2
- package/dist/extensions/request-headers.d.ts +36 -0
- package/dist/extensions/request-headers.d.ts.map +1 -0
- package/dist/extensions/request-headers.js +62 -0
- package/dist/extensions/request-headers.mjs +28 -0
- package/dist/extensions/session.d.ts.map +1 -1
- package/dist/extensions/session.js +2 -1
- package/dist/extensions/session.mjs +2 -1
- package/dist/extensions/tools.d.ts +4 -4
- package/dist/extensions/tools.d.ts.map +1 -1
- package/dist/extensions/transport-identity.d.ts +8 -3
- package/dist/extensions/transport-identity.d.ts.map +1 -1
- package/dist/extensions/transport-identity.js +2 -1
- package/dist/extensions/transport-identity.mjs +2 -1
- package/dist/index.d.ts +2 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +11 -7
- package/dist/index.mjs +2 -1
- package/dist/types.d.ts +77 -2
- 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 +12 -2
- package/src/extensions/client-identity.ts +146 -31
- package/src/extensions/compatibility.ts +25 -24
- package/src/extensions/detect.ts +87 -0
- package/src/extensions/instrument-highlevel.ts +4 -4
- package/src/extensions/instrumentation.ts +22 -15
- package/src/extensions/internal.ts +2 -2
- package/src/extensions/request-headers.ts +76 -0
- package/src/extensions/session.ts +2 -1
- package/src/extensions/tools.ts +4 -4
- package/src/extensions/transport-identity.ts +10 -4
- package/src/index.ts +4 -0
- package/src/types.ts +78 -3
- package/src/version.ts +1 -1
|
@@ -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
|
+
canRegisterTools: ()=>canRegisterTools,
|
|
28
|
+
canSetRequestHandler: ()=>canSetRequestHandler,
|
|
29
|
+
hasClientVersionAccessor: ()=>hasClientVersionAccessor,
|
|
30
|
+
hasNegotiatedProtocolVersionAccessor: ()=>hasNegotiatedProtocolVersionAccessor,
|
|
31
|
+
hasNestedLowLevelServer: ()=>hasNestedLowLevelServer,
|
|
32
|
+
hasRequestHandlerMap: ()=>hasRequestHandlerMap,
|
|
33
|
+
hasServerInfo: ()=>hasServerInfo,
|
|
34
|
+
hasToolRegistry: ()=>hasToolRegistry,
|
|
35
|
+
isBareServerShape: ()=>isBareServerShape
|
|
36
|
+
});
|
|
37
|
+
function asRecord(value) {
|
|
38
|
+
return value && 'object' == typeof value ? value : void 0;
|
|
39
|
+
}
|
|
40
|
+
function hasMethod(value, key) {
|
|
41
|
+
return 'function' == typeof asRecord(value)?.[key];
|
|
42
|
+
}
|
|
43
|
+
function hasNestedLowLevelServer(server) {
|
|
44
|
+
const record = asRecord(server);
|
|
45
|
+
return !!record && 'server' in record && !!asRecord(record.server);
|
|
46
|
+
}
|
|
47
|
+
function isBareServerShape(server) {
|
|
48
|
+
const record = asRecord(server);
|
|
49
|
+
return !!record && !('server' in record);
|
|
50
|
+
}
|
|
51
|
+
function hasToolRegistry(server) {
|
|
52
|
+
return !!asRecord(asRecord(server)?._registeredTools);
|
|
53
|
+
}
|
|
54
|
+
function canRegisterTools(server) {
|
|
55
|
+
return hasMethod(server, 'registerTool') || hasMethod(server, 'tool');
|
|
56
|
+
}
|
|
57
|
+
function canSetRequestHandler(server) {
|
|
58
|
+
return hasMethod(server, 'setRequestHandler');
|
|
59
|
+
}
|
|
60
|
+
function hasRequestHandlerMap(server) {
|
|
61
|
+
const handlers = asRecord(server)?._requestHandlers;
|
|
62
|
+
return handlers instanceof Map && 'function' == typeof handlers.get;
|
|
63
|
+
}
|
|
64
|
+
function hasClientVersionAccessor(server) {
|
|
65
|
+
return hasMethod(server, 'getClientVersion');
|
|
66
|
+
}
|
|
67
|
+
function hasNegotiatedProtocolVersionAccessor(server) {
|
|
68
|
+
return hasMethod(server, 'getNegotiatedProtocolVersion');
|
|
69
|
+
}
|
|
70
|
+
function hasServerInfo(server) {
|
|
71
|
+
const info = asRecord(asRecord(server)?._serverInfo);
|
|
72
|
+
return !!info && 'name' in info;
|
|
73
|
+
}
|
|
74
|
+
exports.canRegisterTools = __webpack_exports__.canRegisterTools;
|
|
75
|
+
exports.canSetRequestHandler = __webpack_exports__.canSetRequestHandler;
|
|
76
|
+
exports.hasClientVersionAccessor = __webpack_exports__.hasClientVersionAccessor;
|
|
77
|
+
exports.hasNegotiatedProtocolVersionAccessor = __webpack_exports__.hasNegotiatedProtocolVersionAccessor;
|
|
78
|
+
exports.hasNestedLowLevelServer = __webpack_exports__.hasNestedLowLevelServer;
|
|
79
|
+
exports.hasRequestHandlerMap = __webpack_exports__.hasRequestHandlerMap;
|
|
80
|
+
exports.hasServerInfo = __webpack_exports__.hasServerInfo;
|
|
81
|
+
exports.hasToolRegistry = __webpack_exports__.hasToolRegistry;
|
|
82
|
+
exports.isBareServerShape = __webpack_exports__.isBareServerShape;
|
|
83
|
+
for(var __webpack_i__ in __webpack_exports__)if (-1 === [
|
|
84
|
+
"canRegisterTools",
|
|
85
|
+
"canSetRequestHandler",
|
|
86
|
+
"hasClientVersionAccessor",
|
|
87
|
+
"hasNegotiatedProtocolVersionAccessor",
|
|
88
|
+
"hasNestedLowLevelServer",
|
|
89
|
+
"hasRequestHandlerMap",
|
|
90
|
+
"hasServerInfo",
|
|
91
|
+
"hasToolRegistry",
|
|
92
|
+
"isBareServerShape"
|
|
93
|
+
].indexOf(__webpack_i__)) exports[__webpack_i__] = __webpack_exports__[__webpack_i__];
|
|
94
|
+
Object.defineProperty(exports, '__esModule', {
|
|
95
|
+
value: true
|
|
96
|
+
});
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
function asRecord(value) {
|
|
2
|
+
return value && 'object' == typeof value ? value : void 0;
|
|
3
|
+
}
|
|
4
|
+
function hasMethod(value, key) {
|
|
5
|
+
return 'function' == typeof asRecord(value)?.[key];
|
|
6
|
+
}
|
|
7
|
+
function hasNestedLowLevelServer(server) {
|
|
8
|
+
const record = asRecord(server);
|
|
9
|
+
return !!record && 'server' in record && !!asRecord(record.server);
|
|
10
|
+
}
|
|
11
|
+
function isBareServerShape(server) {
|
|
12
|
+
const record = asRecord(server);
|
|
13
|
+
return !!record && !('server' in record);
|
|
14
|
+
}
|
|
15
|
+
function hasToolRegistry(server) {
|
|
16
|
+
return !!asRecord(asRecord(server)?._registeredTools);
|
|
17
|
+
}
|
|
18
|
+
function canRegisterTools(server) {
|
|
19
|
+
return hasMethod(server, 'registerTool') || hasMethod(server, 'tool');
|
|
20
|
+
}
|
|
21
|
+
function canSetRequestHandler(server) {
|
|
22
|
+
return hasMethod(server, 'setRequestHandler');
|
|
23
|
+
}
|
|
24
|
+
function hasRequestHandlerMap(server) {
|
|
25
|
+
const handlers = asRecord(server)?._requestHandlers;
|
|
26
|
+
return handlers instanceof Map && 'function' == typeof handlers.get;
|
|
27
|
+
}
|
|
28
|
+
function hasClientVersionAccessor(server) {
|
|
29
|
+
return hasMethod(server, 'getClientVersion');
|
|
30
|
+
}
|
|
31
|
+
function hasNegotiatedProtocolVersionAccessor(server) {
|
|
32
|
+
return hasMethod(server, 'getNegotiatedProtocolVersion');
|
|
33
|
+
}
|
|
34
|
+
function hasServerInfo(server) {
|
|
35
|
+
const info = asRecord(asRecord(server)?._serverInfo);
|
|
36
|
+
return !!info && 'name' in info;
|
|
37
|
+
}
|
|
38
|
+
export { canRegisterTools, canSetRequestHandler, hasClientVersionAccessor, hasNegotiatedProtocolVersionAccessor, hasNestedLowLevelServer, hasRequestHandlerMap, hasServerInfo, hasToolRegistry, isBareServerShape };
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"instrument-highlevel.d.ts","sourceRoot":"","sources":["../../src/extensions/instrument-highlevel.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"instrument-highlevel.d.ts","sourceRoot":"","sources":["../../src/extensions/instrument-highlevel.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAGV,sBAAsB,EAIvB,MAAM,UAAU,CAAA;AASjB,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,UAAU,CAAA;AAgQxC,wBAAgB,yBAAyB,CAAC,MAAM,EAAE,sBAAsB,EAAE,MAAM,EAAE,QAAQ,GAAG,IAAI,CA0BhG"}
|
|
@@ -1,5 +1,4 @@
|
|
|
1
|
-
import type {
|
|
2
|
-
import type { AnalyticsParameterOwnership, CompatibleRequestHandlerExtra, MCPAnalyticsData, MCPRequestLike, MCPServerLike } from '../types';
|
|
1
|
+
import type { AnalyticsParameterOwnership, CompatibleRequestHandlerExtra, CompatibleToolsListLike, MCPAnalyticsData, MCPRequestLike, MCPServerLike } from '../types';
|
|
3
2
|
import { MCPAnalyticsEventType } from './event-types';
|
|
4
3
|
import type { LoggerFn } from './logger';
|
|
5
4
|
/**
|
|
@@ -97,16 +96,16 @@ export declare function isToolAdvertised(server: MCPServerLike, toolName: string
|
|
|
97
96
|
* parameter, conversation id, `get_more_tools`) into the returned list.
|
|
98
97
|
*/
|
|
99
98
|
export declare function handleListToolsRequest(server: MCPServerLike, originalListToolsHandler: MCPRequestHandler, request: MCPRequestLike, extra: CompatibleRequestHandlerExtra | undefined, logger: LoggerFn): Promise<{
|
|
100
|
-
tools:
|
|
99
|
+
tools: CompatibleToolsListLike['tools'];
|
|
101
100
|
}>;
|
|
102
|
-
export declare function cacheToolDescriptions(cache: Map<string, string>, tools:
|
|
101
|
+
export declare function cacheToolDescriptions(cache: Map<string, string>, tools: CompatibleToolsListLike['tools'] | undefined): void;
|
|
103
102
|
/**
|
|
104
103
|
* Category declared on a tool's `_meta` block (the MCP spec allows arbitrary
|
|
105
104
|
* `_meta` keys). Declaring `_meta: { category: "Logs" }` on a tool definition
|
|
106
105
|
* is all a server needs for every call to carry `$mcp_tool_category`.
|
|
107
106
|
*/
|
|
108
107
|
export declare function readToolMetaCategory(meta: unknown): string | undefined;
|
|
109
|
-
export declare function cacheToolCategories(cache: Map<string, string>, tools:
|
|
108
|
+
export declare function cacheToolCategories(cache: Map<string, string>, tools: CompatibleToolsListLike['tools'] | undefined): void;
|
|
110
109
|
/**
|
|
111
110
|
* Captures the connection handshake (and resolves identity) on `initialize`
|
|
112
111
|
* before the original handler runs.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"instrumentation.d.ts","sourceRoot":"","sources":["../../src/extensions/instrumentation.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,
|
|
1
|
+
{"version":3,"file":"instrumentation.d.ts","sourceRoot":"","sources":["../../src/extensions/instrumentation.ts"],"names":[],"mappings":"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"}
|
|
@@ -47,6 +47,7 @@ const external_intent_js_namespaceObject = require("./intent.js");
|
|
|
47
47
|
const external_internal_js_namespaceObject = require("./internal.js");
|
|
48
48
|
const external_mcp_payloads_js_namespaceObject = require("./mcp-payloads.js");
|
|
49
49
|
const external_mcp_sdk_compat_js_namespaceObject = require("./mcp-sdk-compat.js");
|
|
50
|
+
const external_request_headers_js_namespaceObject = require("./request-headers.js");
|
|
50
51
|
const external_session_js_namespaceObject = require("./session.js");
|
|
51
52
|
const external_session_token_js_namespaceObject = require("./session-token.js");
|
|
52
53
|
const external_tools_js_namespaceObject = require("./tools.js");
|
|
@@ -109,7 +110,7 @@ async function prepareToolCallEvent(server, data, request, downstreamRequest, ex
|
|
|
109
110
|
toolCategory: toolName ? data.toolCategories.get(toolName) : void 0,
|
|
110
111
|
toolDescription: toolName ? data.toolDescriptions.get(toolName) : void 0
|
|
111
112
|
};
|
|
112
|
-
(0, external_client_identity_js_namespaceObject.
|
|
113
|
+
(0, external_client_identity_js_namespaceObject.stampClientIdentity)(event, request, extra, server);
|
|
113
114
|
(0, external_transport_identity_js_namespaceObject.stampTransportIdentity)(event, extra);
|
|
114
115
|
await (0, external_tracing_helpers_js_namespaceObject.applyResolvedMetadata)(event, data, request, extra);
|
|
115
116
|
(0, external_intent_js_namespaceObject.setEventIntent)(event, await (0, external_intent_js_namespaceObject.resolveToolCallIntent)(data, request, ownership.context, extra));
|
|
@@ -229,7 +230,7 @@ async function handleListToolsRequest(server, originalListToolsHandler, request,
|
|
|
229
230
|
eventType: external_event_types_js_namespaceObject.MCPAnalyticsEventType.mcpToolsList,
|
|
230
231
|
timestamp: startTime
|
|
231
232
|
};
|
|
232
|
-
(0, external_client_identity_js_namespaceObject.
|
|
233
|
+
(0, external_client_identity_js_namespaceObject.stampClientIdentity)(event, request, extra, server);
|
|
233
234
|
(0, external_transport_identity_js_namespaceObject.stampTransportIdentity)(event, extra);
|
|
234
235
|
if (data) await (0, external_tracing_helpers_js_namespaceObject.applyResolvedMetadata)(event, data, request, extra);
|
|
235
236
|
const tools = await getTracedToolsList(server, originalListToolsHandler, request, extra, event, logger, requestAttribution);
|
|
@@ -326,8 +327,8 @@ function cacheToolCategories(cache, tools) {
|
|
|
326
327
|
}
|
|
327
328
|
function mintStatelessSessionOnInitialize(server, data, request, extra) {
|
|
328
329
|
try {
|
|
329
|
-
const headers = extra
|
|
330
|
-
if (!headers
|
|
330
|
+
const headers = (0, external_request_headers_js_namespaceObject.getRequestHeaders)(extra);
|
|
331
|
+
if (!headers) return;
|
|
331
332
|
if ((0, external_session_token_js_namespaceObject.readMcpSessionHeader)(headers)) return;
|
|
332
333
|
const transport = server.transport;
|
|
333
334
|
if (!transport || extra?.sessionId || transport.sessionId) return;
|
|
@@ -402,7 +403,7 @@ async function handleInitializeRequest(server, originalInitializeHandler, reques
|
|
|
402
403
|
parameters: (0, external_mcp_payloads_js_namespaceObject.buildCapturedMcpParameters)(request),
|
|
403
404
|
timestamp: new Date()
|
|
404
405
|
};
|
|
405
|
-
(0, external_client_identity_js_namespaceObject.
|
|
406
|
+
(0, external_client_identity_js_namespaceObject.stampClientIdentity)(event, request, extra, server);
|
|
406
407
|
(0, external_transport_identity_js_namespaceObject.stampTransportIdentity)(event, extra);
|
|
407
408
|
await (0, external_tracing_helpers_js_namespaceObject.applyResolvedMetadata)(event, data, request, extra);
|
|
408
409
|
const result = await originalInitializeHandler(request, extra);
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { getAnalyticsParameterOwnership, stripOwnedAnalyticsArguments } from "./analytics-parameters.mjs";
|
|
2
2
|
import { addContextParameterToTools, getContextDescription, isContextEnabled } from "./context-parameters.mjs";
|
|
3
3
|
import { addConversationIdToTools, canInjectConversationIdPromptBack, injectConversationIdPromptBack, resolveConversationId } from "./conversation-id.mjs";
|
|
4
|
-
import {
|
|
4
|
+
import { stampClientIdentity } from "./client-identity.mjs";
|
|
5
5
|
import { stampTransportIdentity } from "./transport-identity.mjs";
|
|
6
6
|
import { addInstructionsToOutputSchemas, mirrorInstructionsIntoStructuredContent } from "./output-instructions.mjs";
|
|
7
7
|
import { captureEvent } from "./capture.mjs";
|
|
@@ -11,6 +11,7 @@ import { resolveToolCallIntent, setEventIntent, setExplicitContextIntent } from
|
|
|
11
11
|
import { getServerTrackingData, handleIdentify, setServerTrackingData, withIdentity } from "./internal.mjs";
|
|
12
12
|
import { buildCapturedMcpParameters } from "./mcp-payloads.mjs";
|
|
13
13
|
import { readRequestHandlerMethod } from "./mcp-sdk-compat.mjs";
|
|
14
|
+
import { getRequestHeaders } from "./request-headers.mjs";
|
|
14
15
|
import { getSessionId, getSessionInfo, newSessionId } from "./session.mjs";
|
|
15
16
|
import { encodeSessionId, readMcpSessionHeader, writeSessionIdToTransport } from "./session-token.mjs";
|
|
16
17
|
import { getReportMissingToolDescriptor, resolveMissingCapabilityToolName } from "./tools.mjs";
|
|
@@ -73,7 +74,7 @@ async function prepareToolCallEvent(server, data, request, downstreamRequest, ex
|
|
|
73
74
|
toolCategory: toolName ? data.toolCategories.get(toolName) : void 0,
|
|
74
75
|
toolDescription: toolName ? data.toolDescriptions.get(toolName) : void 0
|
|
75
76
|
};
|
|
76
|
-
|
|
77
|
+
stampClientIdentity(event, request, extra, server);
|
|
77
78
|
stampTransportIdentity(event, extra);
|
|
78
79
|
await applyResolvedMetadata(event, data, request, extra);
|
|
79
80
|
setEventIntent(event, await resolveToolCallIntent(data, request, ownership.context, extra));
|
|
@@ -193,7 +194,7 @@ async function handleListToolsRequest(server, originalListToolsHandler, request,
|
|
|
193
194
|
eventType: MCPAnalyticsEventType.mcpToolsList,
|
|
194
195
|
timestamp: startTime
|
|
195
196
|
};
|
|
196
|
-
|
|
197
|
+
stampClientIdentity(event, request, extra, server);
|
|
197
198
|
stampTransportIdentity(event, extra);
|
|
198
199
|
if (data) await applyResolvedMetadata(event, data, request, extra);
|
|
199
200
|
const tools = await getTracedToolsList(server, originalListToolsHandler, request, extra, event, logger, requestAttribution);
|
|
@@ -290,8 +291,8 @@ function cacheToolCategories(cache, tools) {
|
|
|
290
291
|
}
|
|
291
292
|
function mintStatelessSessionOnInitialize(server, data, request, extra) {
|
|
292
293
|
try {
|
|
293
|
-
const headers = extra
|
|
294
|
-
if (!headers
|
|
294
|
+
const headers = getRequestHeaders(extra);
|
|
295
|
+
if (!headers) return;
|
|
295
296
|
if (readMcpSessionHeader(headers)) return;
|
|
296
297
|
const transport = server.transport;
|
|
297
298
|
if (!transport || extra?.sessionId || transport.sessionId) return;
|
|
@@ -366,7 +367,7 @@ async function handleInitializeRequest(server, originalInitializeHandler, reques
|
|
|
366
367
|
parameters: buildCapturedMcpParameters(request),
|
|
367
368
|
timestamp: new Date()
|
|
368
369
|
};
|
|
369
|
-
|
|
370
|
+
stampClientIdentity(event, request, extra, server);
|
|
370
371
|
stampTransportIdentity(event, extra);
|
|
371
372
|
await applyResolvedMetadata(event, data, request, extra);
|
|
372
373
|
const result = await originalInitializeHandler(request, extra);
|
|
@@ -110,7 +110,7 @@ async function handleIdentify(server, data, sessionId, request, requestAttributi
|
|
|
110
110
|
},
|
|
111
111
|
timestamp: new Date()
|
|
112
112
|
};
|
|
113
|
-
(0, external_client_identity_js_namespaceObject.
|
|
113
|
+
(0, external_client_identity_js_namespaceObject.stampClientIdentity)(identifyEvent, request, extra, server);
|
|
114
114
|
(0, external_transport_identity_js_namespaceObject.stampTransportIdentity)(identifyEvent, extra);
|
|
115
115
|
try {
|
|
116
116
|
const identityResult = 'function' == typeof data.options.identify ? await data.options.identify(request, extra) : data.options.identify;
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { MCPAnalyticsEventType } from "./event-types.mjs";
|
|
2
2
|
import { captureEvent } from "./capture.mjs";
|
|
3
|
-
import {
|
|
3
|
+
import { stampClientIdentity } from "./client-identity.mjs";
|
|
4
4
|
import { stampTransportIdentity } from "./transport-identity.mjs";
|
|
5
5
|
class IdentityCache {
|
|
6
6
|
constructor(maxSize = 1000){
|
|
@@ -75,7 +75,7 @@ async function handleIdentify(server, data, sessionId, request, requestAttributi
|
|
|
75
75
|
},
|
|
76
76
|
timestamp: new Date()
|
|
77
77
|
};
|
|
78
|
-
|
|
78
|
+
stampClientIdentity(identifyEvent, request, extra, server);
|
|
79
79
|
stampTransportIdentity(identifyEvent, extra);
|
|
80
80
|
try {
|
|
81
81
|
const identityResult = 'function' == typeof data.options.identify ? await data.options.identify(request, extra) : data.options.identify;
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import type { RequestHeaderBag } from '../types';
|
|
2
|
+
/**
|
|
3
|
+
* Reads the HTTP request headers off the `extra` (v1) / `ctx` (v2) object the
|
|
4
|
+
* MCP SDK hands a request handler, and returns them as a plain object with
|
|
5
|
+
* lowercase keys. Returns `undefined` when the request did not come over HTTP —
|
|
6
|
+
* stdio and in-memory transports carry no headers at all.
|
|
7
|
+
*
|
|
8
|
+
* The two SDK majors put them in different places and in different shapes: v1
|
|
9
|
+
* attaches a plain object at `extra.requestInfo.headers`, while v2 attaches the
|
|
10
|
+
* WHATWG `Request` at `ctx.http.req`, whose `headers` is a `Headers` instance
|
|
11
|
+
* that only answers to `.get()`. A v1-shaped read returns `undefined` on v2,
|
|
12
|
+
* which is why this exists.
|
|
13
|
+
*
|
|
14
|
+
* Normalisation is **by shape, not by source**: a framework is free to hand us a
|
|
15
|
+
* plain object where the SDK hands `Headers`, so both fields are checked for
|
|
16
|
+
* both shapes. `Headers` is duck-typed on `.entries` rather than `instanceof` —
|
|
17
|
+
* workerd and other edge runtimes are a different realm and would fail the
|
|
18
|
+
* identity check on a perfectly good object.
|
|
19
|
+
*
|
|
20
|
+
* Exported from the package for host callbacks. `identify`, `intentFallback`,
|
|
21
|
+
* `eventProperties` and `beforeSend` receive the SDK's `extra` unchanged — we
|
|
22
|
+
* deliberately do not synthesise a v1 shape on v2, because a fabricated
|
|
23
|
+
* `requestInfo` is a convincing partial lie about a shape the SDK removed on
|
|
24
|
+
* purpose. So a host that reads headers reads them through this instead:
|
|
25
|
+
*
|
|
26
|
+
* ```ts
|
|
27
|
+
* import { getRequestHeaders } from '@posthog/mcp'
|
|
28
|
+
*
|
|
29
|
+
* identify: async (request, extra) => {
|
|
30
|
+
* const auth = getRequestHeaders(extra)?.['authorization']
|
|
31
|
+
* // ...
|
|
32
|
+
* }
|
|
33
|
+
* ```
|
|
34
|
+
*/
|
|
35
|
+
export declare function getRequestHeaders(extra: unknown): RequestHeaderBag | undefined;
|
|
36
|
+
//# sourceMappingURL=request-headers.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"request-headers.d.ts","sourceRoot":"","sources":["../../src/extensions/request-headers.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,UAAU,CAAA;AAEhD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAgCG;AACH,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,OAAO,GAAG,gBAAgB,GAAG,SAAS,CAY9E"}
|
|
@@ -0,0 +1,62 @@
|
|
|
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
|
+
getRequestHeaders: ()=>getRequestHeaders
|
|
28
|
+
});
|
|
29
|
+
function getRequestHeaders(extra) {
|
|
30
|
+
if (!extra || 'object' != typeof extra) return;
|
|
31
|
+
const record = extra;
|
|
32
|
+
const http = record.http;
|
|
33
|
+
const requestInfo = record.requestInfo;
|
|
34
|
+
const source = http?.req?.headers ?? requestInfo?.headers;
|
|
35
|
+
if (!source || 'object' != typeof source) return;
|
|
36
|
+
return toHeaderBag(source);
|
|
37
|
+
}
|
|
38
|
+
function toHeaderBag(source) {
|
|
39
|
+
try {
|
|
40
|
+
const entries = isHeadersLike(source) ? [
|
|
41
|
+
...source.entries()
|
|
42
|
+
] : Object.entries(source);
|
|
43
|
+
const bag = {};
|
|
44
|
+
for (const [key, value] of entries)if ('string' == typeof key && null != value) {
|
|
45
|
+
if ('string' == typeof value || Array.isArray(value)) bag[key.toLowerCase()] = value;
|
|
46
|
+
}
|
|
47
|
+
return bag;
|
|
48
|
+
} catch {
|
|
49
|
+
return;
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
function isHeadersLike(source) {
|
|
53
|
+
const candidate = source;
|
|
54
|
+
return 'function' == typeof candidate.entries && 'function' == typeof candidate.get;
|
|
55
|
+
}
|
|
56
|
+
exports.getRequestHeaders = __webpack_exports__.getRequestHeaders;
|
|
57
|
+
for(var __webpack_i__ in __webpack_exports__)if (-1 === [
|
|
58
|
+
"getRequestHeaders"
|
|
59
|
+
].indexOf(__webpack_i__)) exports[__webpack_i__] = __webpack_exports__[__webpack_i__];
|
|
60
|
+
Object.defineProperty(exports, '__esModule', {
|
|
61
|
+
value: true
|
|
62
|
+
});
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
function getRequestHeaders(extra) {
|
|
2
|
+
if (!extra || 'object' != typeof extra) return;
|
|
3
|
+
const record = extra;
|
|
4
|
+
const http = record.http;
|
|
5
|
+
const requestInfo = record.requestInfo;
|
|
6
|
+
const source = http?.req?.headers ?? requestInfo?.headers;
|
|
7
|
+
if (!source || 'object' != typeof source) return;
|
|
8
|
+
return toHeaderBag(source);
|
|
9
|
+
}
|
|
10
|
+
function toHeaderBag(source) {
|
|
11
|
+
try {
|
|
12
|
+
const entries = isHeadersLike(source) ? [
|
|
13
|
+
...source.entries()
|
|
14
|
+
] : Object.entries(source);
|
|
15
|
+
const bag = {};
|
|
16
|
+
for (const [key, value] of entries)if ('string' == typeof key && null != value) {
|
|
17
|
+
if ('string' == typeof value || Array.isArray(value)) bag[key.toLowerCase()] = value;
|
|
18
|
+
}
|
|
19
|
+
return bag;
|
|
20
|
+
} catch {
|
|
21
|
+
return;
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
function isHeadersLike(source) {
|
|
25
|
+
const candidate = source;
|
|
26
|
+
return 'function' == typeof candidate.entries && 'function' == typeof candidate.get;
|
|
27
|
+
}
|
|
28
|
+
export { getRequestHeaders };
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"session.d.ts","sourceRoot":"","sources":["../../src/extensions/session.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EACV,6BAA6B,EAC7B,gBAAgB,EAChB,aAAa,EAEb,WAAW,EACZ,MAAM,UAAU,CAAA;
|
|
1
|
+
{"version":3,"file":"session.d.ts","sourceRoot":"","sources":["../../src/extensions/session.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EACV,6BAA6B,EAC7B,gBAAgB,EAChB,aAAa,EAEb,WAAW,EACZ,MAAM,UAAU,CAAA;AAQjB,wBAAgB,YAAY,IAAI,MAAM,CAErC;AAED;;;GAGG;AACH,wBAAgB,6BAA6B,CAAC,YAAY,EAAE,MAAM,GAAG,MAAM,CAE1E;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAgB,+BAA+B,CAAC,cAAc,EAAE,MAAM,GAAG,MAAM,CAE9E;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,YAAY,CAC1B,MAAM,EAAE,aAAa,EACrB,KAAK,CAAC,EAAE,6BAA6B,EACrC,cAAc,CAAC,EAAE,MAAM,GACtB,MAAM,CAgCR;AAuED;;;;GAIG;AACH,wBAAgB,cAAc,CAC5B,MAAM,EAAE,aAAa,EACrB,IAAI,EAAE,gBAAgB,GAAG,SAAS,EAClC,SAAS,CAAC,EAAE,MAAM,GACjB,WAAW,CAmCb"}
|
|
@@ -34,6 +34,7 @@ const external_version_js_namespaceObject = require("../version.js");
|
|
|
34
34
|
const external_constants_js_namespaceObject = require("./constants.js");
|
|
35
35
|
const external_ids_js_namespaceObject = require("./ids.js");
|
|
36
36
|
const external_internal_js_namespaceObject = require("./internal.js");
|
|
37
|
+
const external_request_headers_js_namespaceObject = require("./request-headers.js");
|
|
37
38
|
const external_session_token_js_namespaceObject = require("./session-token.js");
|
|
38
39
|
function newSessionId() {
|
|
39
40
|
return (0, external_ids_js_namespaceObject.newPrefixedId)('ses');
|
|
@@ -59,7 +60,7 @@ function getSessionId(server, extra, conversationId) {
|
|
|
59
60
|
return sessionId;
|
|
60
61
|
}
|
|
61
62
|
function applyTokenClientIdentity(data, extra) {
|
|
62
|
-
const token = (0, external_session_token_js_namespaceObject.decodeSessionId)((0, external_session_token_js_namespaceObject.readMcpSessionHeader)(extra
|
|
63
|
+
const token = (0, external_session_token_js_namespaceObject.decodeSessionId)((0, external_session_token_js_namespaceObject.readMcpSessionHeader)((0, external_request_headers_js_namespaceObject.getRequestHeaders)(extra)));
|
|
63
64
|
if (!token) return;
|
|
64
65
|
data.sessionInfo.clientName = token.clientName;
|
|
65
66
|
data.sessionInfo.clientVersion = token.clientVersion;
|
|
@@ -2,6 +2,7 @@ import { version } from "../version.mjs";
|
|
|
2
2
|
import { INACTIVITY_TIMEOUT_IN_MINUTES } from "./constants.mjs";
|
|
3
3
|
import { deterministicPrefixedId, newPrefixedId } from "./ids.mjs";
|
|
4
4
|
import { getServerTrackingData, setServerTrackingData } from "./internal.mjs";
|
|
5
|
+
import { getRequestHeaders } from "./request-headers.mjs";
|
|
5
6
|
import { decodeSessionId, readMcpSessionHeader } from "./session-token.mjs";
|
|
6
7
|
function newSessionId() {
|
|
7
8
|
return newPrefixedId('ses');
|
|
@@ -27,7 +28,7 @@ function getSessionId(server, extra, conversationId) {
|
|
|
27
28
|
return sessionId;
|
|
28
29
|
}
|
|
29
30
|
function applyTokenClientIdentity(data, extra) {
|
|
30
|
-
const token = decodeSessionId(readMcpSessionHeader(extra
|
|
31
|
+
const token = decodeSessionId(readMcpSessionHeader(getRequestHeaders(extra)));
|
|
31
32
|
if (!token) return;
|
|
32
33
|
data.sessionInfo.clientName = token.clientName;
|
|
33
34
|
data.sessionInfo.clientVersion = token.clientVersion;
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import type { CompatibleTextToolResult, CompatibleToolsListLike } from '../types';
|
|
2
2
|
import { type LoggerFn } from './logger';
|
|
3
3
|
export declare const GET_MORE_TOOLS_NAME: "get_more_tools";
|
|
4
4
|
/**
|
|
@@ -9,7 +9,7 @@ export declare const GET_MORE_TOOLS_NAME: "get_more_tools";
|
|
|
9
9
|
export declare function resolveMissingCapabilityToolName(options?: {
|
|
10
10
|
missingCapabilityToolName?: string;
|
|
11
11
|
}): string;
|
|
12
|
-
type ReportMissingToolDescriptor =
|
|
12
|
+
type ReportMissingToolDescriptor = CompatibleToolsListLike['tools'][number];
|
|
13
13
|
export declare function getReportMissingToolDescriptor(name?: string): ReportMissingToolDescriptor;
|
|
14
14
|
/**
|
|
15
15
|
* The canned acknowledgement returned to the agent after it calls
|
|
@@ -17,9 +17,9 @@ export declare function getReportMissingToolDescriptor(name?: string): ReportMis
|
|
|
17
17
|
* report was recorded (custom dispatcher path); the `instrument()` path returns
|
|
18
18
|
* it automatically.
|
|
19
19
|
*/
|
|
20
|
-
export declare function getMoreToolsResult():
|
|
20
|
+
export declare function getMoreToolsResult(): CompatibleTextToolResult;
|
|
21
21
|
export declare function handleReportMissing(args: {
|
|
22
22
|
context: string;
|
|
23
|
-
}, logger?: LoggerFn):
|
|
23
|
+
}, logger?: LoggerFn): CompatibleTextToolResult;
|
|
24
24
|
export {};
|
|
25
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,
|
|
1
|
+
{"version":3,"file":"tools.d.ts","sourceRoot":"","sources":["../../src/extensions/tools.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,wBAAwB,EAAE,uBAAuB,EAAE,MAAM,UAAU,CAAA;AACjF,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,uBAAuB,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC,CAAA;AAE3E,wBAAgB,8BAA8B,CAAC,IAAI,GAAE,MAA4B,GAAG,2BAA2B,CA0B9G;AAED;;;;;GAKG;AACH,wBAAgB,kBAAkB,IAAI,wBAAwB,CAS7D;AAED,wBAAgB,mBAAmB,CAAC,IAAI,EAAE;IAAE,OAAO,EAAE,MAAM,CAAA;CAAE,EAAE,MAAM,GAAE,QAAc,GAAG,wBAAwB,CAG/G"}
|
|
@@ -37,9 +37,14 @@ export interface TransportIdentity {
|
|
|
37
37
|
vendorClient?: string;
|
|
38
38
|
}
|
|
39
39
|
/**
|
|
40
|
-
* Reads the transport identity headers off
|
|
41
|
-
*
|
|
42
|
-
*
|
|
40
|
+
* Reads the transport identity headers off the request. Returns `undefined`
|
|
41
|
+
* when the request carries neither — including every stdio and in-memory
|
|
42
|
+
* request, which has no HTTP headers at all. Never throws.
|
|
43
|
+
*
|
|
44
|
+
* Sourced through `getRequestHeaders` rather than `extra.requestInfo.headers`
|
|
45
|
+
* directly: MCP SDK v2 puts the request at `extra.http.req` as a WHATWG
|
|
46
|
+
* `Request`, so a v1-shaped read finds nothing and this whole feature would be
|
|
47
|
+
* silently inert on exactly the servers being adopted now.
|
|
43
48
|
*/
|
|
44
49
|
export declare function readTransportIdentity(extra: CompatibleRequestHandlerExtra | undefined): TransportIdentity | undefined;
|
|
45
50
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"transport-identity.d.ts","sourceRoot":"","sources":["../../src/extensions/transport-identity.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,6BAA6B,EAAE,QAAQ,EAAE,MAAM,UAAU,CAAA;
|
|
1
|
+
{"version":3,"file":"transport-identity.d.ts","sourceRoot":"","sources":["../../src/extensions/transport-identity.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,6BAA6B,EAAE,QAAQ,EAAE,MAAM,UAAU,CAAA;AAIvE;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AAEH,oFAAoF;AACpF,eAAO,MAAM,wBAAwB,eAAe,CAAA;AAEpD;;;;;GAKG;AACH,eAAO,MAAM,oBAAoB,uBAAuB,CAAA;AAExD,MAAM,WAAW,iBAAiB;IAChC,eAAe,CAAC,EAAE,MAAM,CAAA;IACxB,YAAY,CAAC,EAAE,MAAM,CAAA;CACtB;AAED;;;;;;;;;GASG;AACH,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,6BAA6B,GAAG,SAAS,GAAG,iBAAiB,GAAG,SAAS,CAkBrH;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,sBAAsB,CAAC,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAE,6BAA6B,GAAG,SAAS,GAAG,IAAI,CAW9G"}
|
|
@@ -30,10 +30,11 @@ __webpack_require__.d(__webpack_exports__, {
|
|
|
30
30
|
readTransportIdentity: ()=>readTransportIdentity
|
|
31
31
|
});
|
|
32
32
|
const external_headers_js_namespaceObject = require("./headers.js");
|
|
33
|
+
const external_request_headers_js_namespaceObject = require("./request-headers.js");
|
|
33
34
|
const CLIENT_USER_AGENT_HEADER = 'user-agent';
|
|
34
35
|
const VENDOR_CLIENT_HEADER = 'x-anthropic-client';
|
|
35
36
|
function readTransportIdentity(extra) {
|
|
36
|
-
const headers = extra
|
|
37
|
+
const headers = (0, external_request_headers_js_namespaceObject.getRequestHeaders)(extra);
|
|
37
38
|
if (!headers) return;
|
|
38
39
|
const result = {};
|
|
39
40
|
const clientUserAgent = (0, external_headers_js_namespaceObject.readHeaderValue)(headers, CLIENT_USER_AGENT_HEADER);
|
|
@@ -1,8 +1,9 @@
|
|
|
1
1
|
import { readHeaderValue } from "./headers.mjs";
|
|
2
|
+
import { getRequestHeaders } from "./request-headers.mjs";
|
|
2
3
|
const CLIENT_USER_AGENT_HEADER = 'user-agent';
|
|
3
4
|
const VENDOR_CLIENT_HEADER = 'x-anthropic-client';
|
|
4
5
|
function readTransportIdentity(extra) {
|
|
5
|
-
const headers = extra
|
|
6
|
+
const headers = getRequestHeaders(extra);
|
|
6
7
|
if (!headers) return;
|
|
7
8
|
const result = {};
|
|
8
9
|
const clientUserAgent = readHeaderValue(headers, CLIENT_USER_AGENT_HEADER);
|
package/dist/index.d.ts
CHANGED
|
@@ -50,11 +50,12 @@ declare function instrumentMutator<TServer>(posthog: PostHog, options?: MCPAnaly
|
|
|
50
50
|
export { deriveSessionIdFromMCPSession, newSessionId };
|
|
51
51
|
export { MCP_SESSION_HEADER, decodeSessionId, encodeSessionId, type SessionTokenPayload, } from './extensions/session-token';
|
|
52
52
|
export { POSTHOG_MCP_ANALYTICS_SOURCE, PostHogMCPAnalyticsEvent, PostHogMCPAnalyticsProperty, } from './extensions/constants';
|
|
53
|
+
export { getRequestHeaders } from './extensions/request-headers';
|
|
53
54
|
export { PostHogMCP, type PostHogMCPOptions } from './extensions/posthog-mcp';
|
|
54
55
|
export { getMoreToolsResult } from './extensions/tools';
|
|
55
56
|
export { setLogger } from './extensions/logger';
|
|
56
57
|
export { PostHog, type PostHogOptions } from 'posthog-node';
|
|
57
|
-
export type { BeforeSendFn, CaptureEventData, InitializeCaptureData, McpAnalytics, McpCaptureCommon, MCPAnalyticsContextOptions, MCPAnalyticsIntentSource, MCPAnalyticsOptions, MissingCapabilityCaptureData, PreparedToolCall, PrepareToolListOptions, ToolCallCaptureData, ToolsListCaptureData, UserIdentity, } from './types';
|
|
58
|
+
export type { BeforeSendFn, CaptureEventData, InitializeCaptureData, McpAnalytics, McpCaptureCommon, MCPAnalyticsContextOptions, MCPAnalyticsIntentSource, MCPAnalyticsOptions, MissingCapabilityCaptureData, PreparedToolCall, PrepareToolListOptions, RequestHeaderBag, ToolCallCaptureData, ToolsListCaptureData, UserIdentity, } from './types';
|
|
58
59
|
export type IdentifyFunction = MCPAnalyticsOptions['identify'];
|
|
59
60
|
export { instrument, instrumentMutator };
|
|
60
61
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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;
|
|
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;AAG/B,OAAO,EAAE,iBAAiB,EAAE,MAAM,8BAA8B,CAAA;AAChE,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,gBAAgB,EAChB,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"}
|