@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.
Files changed (55) hide show
  1. package/README.md +39 -0
  2. package/dist/extensions/client-identity.d.ts +70 -15
  3. package/dist/extensions/client-identity.d.ts.map +1 -1
  4. package/dist/extensions/client-identity.js +72 -17
  5. package/dist/extensions/client-identity.mjs +59 -13
  6. package/dist/extensions/compatibility.d.ts.map +1 -1
  7. package/dist/extensions/compatibility.js +14 -18
  8. package/dist/extensions/compatibility.mjs +10 -14
  9. package/dist/extensions/detect.d.ts +51 -0
  10. package/dist/extensions/detect.d.ts.map +1 -0
  11. package/dist/extensions/detect.js +96 -0
  12. package/dist/extensions/detect.mjs +38 -0
  13. package/dist/extensions/instrument-highlevel.d.ts.map +1 -1
  14. package/dist/extensions/instrumentation.d.ts +4 -5
  15. package/dist/extensions/instrumentation.d.ts.map +1 -1
  16. package/dist/extensions/instrumentation.js +6 -5
  17. package/dist/extensions/instrumentation.mjs +7 -6
  18. package/dist/extensions/internal.js +1 -1
  19. package/dist/extensions/internal.mjs +2 -2
  20. package/dist/extensions/request-headers.d.ts +36 -0
  21. package/dist/extensions/request-headers.d.ts.map +1 -0
  22. package/dist/extensions/request-headers.js +62 -0
  23. package/dist/extensions/request-headers.mjs +28 -0
  24. package/dist/extensions/session.d.ts.map +1 -1
  25. package/dist/extensions/session.js +2 -1
  26. package/dist/extensions/session.mjs +2 -1
  27. package/dist/extensions/tools.d.ts +4 -4
  28. package/dist/extensions/tools.d.ts.map +1 -1
  29. package/dist/extensions/transport-identity.d.ts +8 -3
  30. package/dist/extensions/transport-identity.d.ts.map +1 -1
  31. package/dist/extensions/transport-identity.js +2 -1
  32. package/dist/extensions/transport-identity.mjs +2 -1
  33. package/dist/index.d.ts +2 -1
  34. package/dist/index.d.ts.map +1 -1
  35. package/dist/index.js +11 -7
  36. package/dist/index.mjs +2 -1
  37. package/dist/types.d.ts +77 -2
  38. package/dist/types.d.ts.map +1 -1
  39. package/dist/version.d.ts +1 -1
  40. package/dist/version.js +1 -1
  41. package/dist/version.mjs +1 -1
  42. package/package.json +12 -2
  43. package/src/extensions/client-identity.ts +146 -31
  44. package/src/extensions/compatibility.ts +25 -24
  45. package/src/extensions/detect.ts +87 -0
  46. package/src/extensions/instrument-highlevel.ts +4 -4
  47. package/src/extensions/instrumentation.ts +22 -15
  48. package/src/extensions/internal.ts +2 -2
  49. package/src/extensions/request-headers.ts +76 -0
  50. package/src/extensions/session.ts +2 -1
  51. package/src/extensions/tools.ts +4 -4
  52. package/src/extensions/transport-identity.ts +10 -4
  53. package/src/index.ts +4 -0
  54. package/src/types.ts +78 -3
  55. 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":"AAMA,OAAO,KAAK,EAEV,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
+ {"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 { ListToolsResult } from '@modelcontextprotocol/sdk/types.js';
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: ListToolsResult['tools'];
99
+ tools: CompatibleToolsListLike['tools'];
101
100
  }>;
102
- export declare function cacheToolDescriptions(cache: Map<string, string>, tools: ListToolsResult['tools'] | undefined): void;
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: ListToolsResult['tools'] | undefined): void;
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":"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"}
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.stampMetaClientInfo)(event, request);
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.stampMetaClientInfo)(event, request);
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?.requestInfo?.headers;
330
- if (!headers || 'object' != typeof headers) return;
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.stampMetaClientInfo)(event, request);
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 { stampMetaClientInfo } from "./client-identity.mjs";
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
- stampMetaClientInfo(event, request);
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
- stampMetaClientInfo(event, request);
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?.requestInfo?.headers;
294
- if (!headers || 'object' != typeof headers) return;
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
- stampMetaClientInfo(event, request);
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.stampMetaClientInfo)(identifyEvent, request);
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 { stampMetaClientInfo } from "./client-identity.mjs";
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
- stampMetaClientInfo(identifyEvent, request);
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;AAOjB,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"}
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?.requestInfo?.headers));
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?.requestInfo?.headers));
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 { type CallToolResult, type ListToolsResult } from '@modelcontextprotocol/sdk/types.js';
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 = ListToolsResult['tools'][number];
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(): CallToolResult;
20
+ export declare function getMoreToolsResult(): CompatibleTextToolResult;
21
21
  export declare function handleReportMissing(args: {
22
22
  context: string;
23
- }, logger?: LoggerFn): CallToolResult;
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,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,CA0B9G;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"}
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 `extra.requestInfo.headers`. Returns
41
- * `undefined` when the request carries neither — including every stdio and
42
- * in-memory request, which has no `requestInfo` at all. Never throws.
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;AAGvE;;;;;;;;;;;;;;;;;;;;;;;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;;;;GAIG;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"}
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?.requestInfo?.headers;
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?.requestInfo?.headers;
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
@@ -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;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"}
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"}