@crypto512/jicon-mcp 2.2.0 → 2.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (143) hide show
  1. package/.env.example +2 -2
  2. package/README.md +16 -138
  3. package/TOOL_LIST.md +361 -296
  4. package/dist/config/constants.d.ts +15 -0
  5. package/dist/config/constants.d.ts.map +1 -1
  6. package/dist/config/constants.js +19 -0
  7. package/dist/config/constants.js.map +1 -1
  8. package/dist/config/loader.d.ts.map +1 -1
  9. package/dist/config/loader.js +7 -1
  10. package/dist/config/loader.js.map +1 -1
  11. package/dist/config/types.d.ts +38 -6
  12. package/dist/config/types.d.ts.map +1 -1
  13. package/dist/config/types.js +16 -0
  14. package/dist/config/types.js.map +1 -1
  15. package/dist/confluence/formatters.d.ts +20 -0
  16. package/dist/confluence/formatters.d.ts.map +1 -1
  17. package/dist/confluence/formatters.js +74 -8
  18. package/dist/confluence/formatters.js.map +1 -1
  19. package/dist/confluence/tools.d.ts +8 -7
  20. package/dist/confluence/tools.d.ts.map +1 -1
  21. package/dist/confluence/tools.js +52 -31
  22. package/dist/confluence/tools.js.map +1 -1
  23. package/dist/credentials/extractor.d.ts +1 -2
  24. package/dist/credentials/extractor.d.ts.map +1 -1
  25. package/dist/credentials/extractor.js +21 -4
  26. package/dist/credentials/extractor.js.map +1 -1
  27. package/dist/credentials/index.d.ts +3 -2
  28. package/dist/credentials/index.d.ts.map +1 -1
  29. package/dist/credentials/index.js +3 -2
  30. package/dist/credentials/index.js.map +1 -1
  31. package/dist/index.js +43 -20
  32. package/dist/index.js.map +1 -1
  33. package/dist/jira/activity-tools.d.ts +8 -11
  34. package/dist/jira/activity-tools.d.ts.map +1 -1
  35. package/dist/jira/activity-tools.js +91 -27
  36. package/dist/jira/activity-tools.js.map +1 -1
  37. package/dist/jira/client.d.ts +12 -0
  38. package/dist/jira/client.d.ts.map +1 -1
  39. package/dist/jira/client.js +35 -0
  40. package/dist/jira/client.js.map +1 -1
  41. package/dist/jira/formatters.d.ts +58 -0
  42. package/dist/jira/formatters.d.ts.map +1 -1
  43. package/dist/jira/formatters.js +80 -11
  44. package/dist/jira/formatters.js.map +1 -1
  45. package/dist/jira/tools.d.ts +30 -12
  46. package/dist/jira/tools.d.ts.map +1 -1
  47. package/dist/jira/tools.js +127 -37
  48. package/dist/jira/tools.js.map +1 -1
  49. package/dist/permissions/tool-registry.d.ts +6 -6
  50. package/dist/permissions/tool-registry.d.ts.map +1 -1
  51. package/dist/permissions/tool-registry.js +4 -3
  52. package/dist/permissions/tool-registry.js.map +1 -1
  53. package/dist/session/context.d.ts +81 -0
  54. package/dist/session/context.d.ts.map +1 -0
  55. package/dist/session/context.js +107 -0
  56. package/dist/session/context.js.map +1 -0
  57. package/dist/session/index.d.ts +12 -0
  58. package/dist/session/index.d.ts.map +1 -0
  59. package/dist/session/index.js +22 -0
  60. package/dist/session/index.js.map +1 -0
  61. package/dist/session/manager.d.ts +155 -0
  62. package/dist/session/manager.d.ts.map +1 -0
  63. package/dist/session/manager.js +285 -0
  64. package/dist/session/manager.js.map +1 -0
  65. package/dist/tempo/client.d.ts +14 -0
  66. package/dist/tempo/client.d.ts.map +1 -1
  67. package/dist/tempo/client.js +55 -0
  68. package/dist/tempo/client.js.map +1 -1
  69. package/dist/tempo/formatters.d.ts +13 -0
  70. package/dist/tempo/formatters.d.ts.map +1 -1
  71. package/dist/tempo/formatters.js +106 -20
  72. package/dist/tempo/formatters.js.map +1 -1
  73. package/dist/tempo/tools.d.ts +10 -9
  74. package/dist/tempo/tools.d.ts.map +1 -1
  75. package/dist/tempo/tools.js +188 -33
  76. package/dist/tempo/tools.js.map +1 -1
  77. package/dist/tempo/types.d.ts +20 -6
  78. package/dist/tempo/types.d.ts.map +1 -1
  79. package/dist/transport/http.d.ts +20 -3
  80. package/dist/transport/http.d.ts.map +1 -1
  81. package/dist/transport/http.js +171 -15
  82. package/dist/transport/http.js.map +1 -1
  83. package/dist/transport/types.d.ts +2 -0
  84. package/dist/transport/types.d.ts.map +1 -1
  85. package/dist/transport/types.js.map +1 -1
  86. package/dist/utils/buffer-tools.d.ts +46 -722
  87. package/dist/utils/buffer-tools.d.ts.map +1 -1
  88. package/dist/utils/buffer-tools.js +303 -158
  89. package/dist/utils/buffer-tools.js.map +1 -1
  90. package/dist/utils/content-buffer.d.ts +10 -31
  91. package/dist/utils/content-buffer.d.ts.map +1 -1
  92. package/dist/utils/content-buffer.js +12 -86
  93. package/dist/utils/content-buffer.js.map +1 -1
  94. package/dist/utils/jicon-help.d.ts +3 -3
  95. package/dist/utils/jicon-help.d.ts.map +1 -1
  96. package/dist/utils/jicon-help.js +163 -101
  97. package/dist/utils/jicon-help.js.map +1 -1
  98. package/dist/utils/plantuml/tools.d.ts.map +1 -1
  99. package/dist/utils/plantuml/tools.js +8 -7
  100. package/dist/utils/plantuml/tools.js.map +1 -1
  101. package/dist/utils/response-formatter.d.ts +12 -2
  102. package/dist/utils/response-formatter.d.ts.map +1 -1
  103. package/dist/utils/response-formatter.js +85 -13
  104. package/dist/utils/response-formatter.js.map +1 -1
  105. package/dist/utils/sandbox/formatters.d.ts +25 -0
  106. package/dist/utils/sandbox/formatters.d.ts.map +1 -0
  107. package/dist/utils/sandbox/formatters.js +690 -0
  108. package/dist/utils/sandbox/formatters.js.map +1 -0
  109. package/dist/utils/sandbox/helpers.d.ts +16 -0
  110. package/dist/utils/sandbox/helpers.d.ts.map +1 -0
  111. package/dist/utils/sandbox/helpers.js +252 -0
  112. package/dist/utils/sandbox/helpers.js.map +1 -0
  113. package/dist/utils/sandbox/index.d.ts +19 -0
  114. package/dist/utils/sandbox/index.d.ts.map +1 -0
  115. package/dist/utils/sandbox/index.js +269 -0
  116. package/dist/utils/sandbox/index.js.map +1 -0
  117. package/dist/utils/sandbox/schema.d.ts +55 -0
  118. package/dist/utils/sandbox/schema.d.ts.map +1 -0
  119. package/dist/utils/sandbox/schema.js +39 -0
  120. package/dist/utils/sandbox/schema.js.map +1 -0
  121. package/dist/utils/sandbox/types.d.ts +179 -0
  122. package/dist/utils/sandbox/types.d.ts.map +1 -0
  123. package/dist/utils/sandbox/types.js +8 -0
  124. package/dist/utils/sandbox/types.js.map +1 -0
  125. package/dist/utils/schemas/confluence.d.ts +41 -0
  126. package/dist/utils/schemas/confluence.d.ts.map +1 -0
  127. package/dist/utils/schemas/confluence.js +105 -0
  128. package/dist/utils/schemas/confluence.js.map +1 -0
  129. package/dist/utils/schemas/index.d.ts +66 -0
  130. package/dist/utils/schemas/index.d.ts.map +1 -0
  131. package/dist/utils/schemas/index.js +107 -0
  132. package/dist/utils/schemas/index.js.map +1 -0
  133. package/dist/utils/schemas/jira.d.ts +49 -0
  134. package/dist/utils/schemas/jira.d.ts.map +1 -0
  135. package/dist/utils/schemas/jira.js +151 -0
  136. package/dist/utils/schemas/jira.js.map +1 -0
  137. package/dist/utils/schemas/tempo.d.ts +29 -0
  138. package/dist/utils/schemas/tempo.d.ts.map +1 -0
  139. package/dist/utils/schemas/tempo.js +72 -0
  140. package/dist/utils/schemas/tempo.js.map +1 -0
  141. package/dist/utils/xhtml/error-locator.js +5 -5
  142. package/dist/utils/xhtml/error-locator.js.map +1 -1
  143. package/package.json +10 -9
@@ -1,13 +1,55 @@
1
1
  /**
2
- * HTTP transport using StreamableHTTPServerTransport
2
+ * HTTP transport using StreamableHTTPServerTransport with per-session transport instances
3
+ *
4
+ * Key insight: Each MCP session requires its own transport instance. The SDK's transport
5
+ * maintains an _initialized flag that prevents re-initialization. When a client reconnects,
6
+ * it needs to initialize a new session, which requires a fresh transport.
7
+ *
8
+ * Pattern:
9
+ * - Store transports in a Map by session ID
10
+ * - For initialization requests (no session ID), create a new transport
11
+ * - For requests with a session ID, look up the existing transport
12
+ * - Clean up transports when sessions are destroyed
3
13
  */
14
+ import { randomUUID } from "crypto";
4
15
  import { createMcpExpressApp } from "@modelcontextprotocol/sdk/server/express.js";
5
16
  import { StreamableHTTPServerTransport } from "@modelcontextprotocol/sdk/server/streamableHttp.js";
17
+ import { getSessionManager, runWithSession } from "../session/index.js";
18
+ import { DEFAULT_SESSION_TIMEOUT_MS } from "../config/constants.js";
19
+ import { extractCredentials } from "../credentials/extractor.js";
6
20
  /**
7
- * Creates an HTTP server with StreamableHTTPServerTransport
21
+ * Creates an HTTP server with per-session StreamableHTTPServerTransport instances
22
+ *
23
+ * Session management:
24
+ * - Each MCP session gets its own transport instance (required by MCP SDK)
25
+ * - Sessions are created on first request with a given session ID
26
+ * - Each session has its own ContentBuffer, API clients, and caches
27
+ * - Sessions are automatically cleaned up after 30 minutes of inactivity
28
+ * - Buffers are isolated between sessions (no cross-session data access)
8
29
  */
9
30
  export function createHttpServer(server, config) {
10
31
  const { port, host, basePath } = config;
32
+ // Store transports by session ID - each session needs its own transport instance
33
+ const transports = new Map();
34
+ // Get session manager to register cleanup callback
35
+ const sessionManager = getSessionManager();
36
+ /**
37
+ * Removes a transport when a session is destroyed (coordinated cleanup)
38
+ * Called by SessionManager when session times out or is explicitly destroyed
39
+ */
40
+ function destroySessionTransport(sessionId) {
41
+ const transport = transports.get(sessionId);
42
+ if (transport) {
43
+ transport.close().catch((err) => {
44
+ console.error(`Error closing transport for session ${sessionId}:`, err);
45
+ });
46
+ transports.delete(sessionId);
47
+ console.error(`MCP transport destroyed for session: ${sessionId} (remaining: ${transports.size})`);
48
+ }
49
+ }
50
+ // Register transport cleanup callback with session manager (fix: issue #7)
51
+ // This ensures transport is cleaned up when session times out
52
+ sessionManager.setSessionDestroyedCallback(destroySessionTransport);
11
53
  // Create Express app with MCP defaults
12
54
  const app = createMcpExpressApp({
13
55
  host,
@@ -16,40 +58,154 @@ export function createHttpServer(server, config) {
16
58
  });
17
59
  // Health check endpoint
18
60
  app.get("/health", (_req, res) => {
19
- res.json({ status: "ok" });
61
+ const sessionManager = getSessionManager();
62
+ res.json({
63
+ status: "ok",
64
+ sessions: sessionManager.getSessionCount(),
65
+ transports: transports.size,
66
+ });
20
67
  });
21
68
  // Readiness endpoint (can be extended to check dependencies)
22
69
  app.get("/ready", (_req, res) => {
23
70
  res.json({ status: "ready" });
24
71
  });
25
- // Create transport in stateless mode for container deployments
26
- const transport = new StreamableHTTPServerTransport({
27
- sessionIdGenerator: undefined, // Stateless mode
28
- enableJsonResponse: true,
29
- });
30
- // Mount MCP endpoint
72
+ /**
73
+ * Creates a new transport for a session and connects it to the MCP server
74
+ * @throws Error if transport limit reached (coordinated with session limit)
75
+ */
76
+ async function createSessionTransport() {
77
+ // Transport limit coordinated with session limit (fix: issue #5)
78
+ const maxTransports = sessionManager.getMaxSessions();
79
+ if (transports.size >= maxTransports) {
80
+ throw new Error(`Maximum transports limit reached (${maxTransports}). ` +
81
+ "Try again later or contact administrator.");
82
+ }
83
+ const transport = new StreamableHTTPServerTransport({
84
+ // Generate unique session IDs for each MCP session
85
+ sessionIdGenerator: () => randomUUID(),
86
+ onsessioninitialized: (sessionId) => {
87
+ // Store the transport by session ID once initialized
88
+ transports.set(sessionId, transport);
89
+ console.error(`MCP transport created for session: ${sessionId} (total: ${transports.size})`);
90
+ },
91
+ enableJsonResponse: true,
92
+ });
93
+ // Connect this transport to the server
94
+ await server.connect(transport);
95
+ return transport;
96
+ }
97
+ // Mount MCP endpoint with session context wrapping
31
98
  app.all(basePath, async (req, res) => {
32
- await transport.handleRequest(req, res, req.body);
99
+ // Extract credentials from HTTP headers
100
+ const credentials = extractCredentials(req.headers);
101
+ // Get session ID from MCP session header
102
+ const sessionId = req.headers["mcp-session-id"];
103
+ if (sessionId) {
104
+ // Stateful request - use existing transport for this session
105
+ const transport = transports.get(sessionId);
106
+ if (!transport) {
107
+ // Session not found - client should re-initialize
108
+ res.status(404).json({
109
+ jsonrpc: "2.0",
110
+ error: {
111
+ code: -32001,
112
+ message: "Session not found. Please re-initialize.",
113
+ },
114
+ id: null,
115
+ });
116
+ return;
117
+ }
118
+ // Get or create our session data
119
+ const sessionManager = getSessionManager();
120
+ const session = sessionManager.getOrCreateSession(sessionId, credentials);
121
+ // Run request within session context
122
+ await runWithSession({
123
+ sessionId,
124
+ credentials: session.credentials,
125
+ buffer: session.buffer,
126
+ jiraClient: session.clients.jira,
127
+ confluenceClient: session.clients.confluence,
128
+ tempoClient: session.clients.tempo,
129
+ writeHomeValidator: session.writeHomeValidator,
130
+ }, async () => {
131
+ await transport.handleRequest(req, res, req.body);
132
+ });
133
+ }
134
+ else {
135
+ // Initialization request - create a new transport for this session
136
+ try {
137
+ const transport = await createSessionTransport();
138
+ await transport.handleRequest(req, res, req.body);
139
+ }
140
+ catch (error) {
141
+ console.error("Error creating session transport:", error);
142
+ res.status(500).json({
143
+ jsonrpc: "2.0",
144
+ error: {
145
+ code: -32603,
146
+ message: "Internal error creating session",
147
+ },
148
+ id: null,
149
+ });
150
+ }
151
+ }
152
+ });
153
+ // Handle DELETE requests for session termination
154
+ app.delete(basePath, async (req, res) => {
155
+ const sessionId = req.headers["mcp-session-id"];
156
+ if (!sessionId) {
157
+ res.status(400).json({
158
+ jsonrpc: "2.0",
159
+ error: {
160
+ code: -32600,
161
+ message: "Session ID required for DELETE",
162
+ },
163
+ id: null,
164
+ });
165
+ return;
166
+ }
167
+ // Destroy both our session data and the transport
168
+ const sessionManager = getSessionManager();
169
+ sessionManager.destroySession(sessionId);
170
+ destroySessionTransport(sessionId);
171
+ res.status(200).send();
33
172
  });
34
173
  let httpServer = null;
35
174
  return {
36
175
  app,
37
- transport,
176
+ transports,
38
177
  start: async () => {
39
- // Connect server to transport
40
- await server.connect(transport);
41
- // Start HTTP server
178
+ // Start HTTP server (transports are created per-session)
42
179
  return new Promise((resolve) => {
43
180
  httpServer = app.listen(port, host, () => {
181
+ // Set HTTP server timeouts to match session timeout for SSE connections
182
+ // Default Node.js timeout (120s) would close idle SSE streams prematurely
183
+ const sessionTimeout = config.sessionTimeoutMs ?? DEFAULT_SESSION_TIMEOUT_MS;
184
+ httpServer.setTimeout(sessionTimeout);
185
+ httpServer.keepAliveTimeout = sessionTimeout;
186
+ httpServer.headersTimeout = sessionTimeout;
187
+ httpServer.requestTimeout = sessionTimeout;
44
188
  console.error(`HTTP server listening on http://${host}:${port}`);
45
189
  console.error(`MCP endpoint: http://${host}:${port}${basePath}`);
46
190
  console.error(`Health check: http://${host}:${port}/health`);
191
+ console.error("Session management: enabled (per-session transports, 30-min timeout)");
192
+ console.error("SSE connections: timeout disabled for long-lived streams");
47
193
  resolve();
48
194
  });
49
195
  });
50
196
  },
51
197
  close: async () => {
52
- await transport.close();
198
+ // Close all transports
199
+ for (const [sessionId, transport] of transports) {
200
+ try {
201
+ await transport.close();
202
+ console.error(`Closed transport for session: ${sessionId}`);
203
+ }
204
+ catch (err) {
205
+ console.error(`Error closing transport for session ${sessionId}:`, err);
206
+ }
207
+ }
208
+ transports.clear();
53
209
  if (httpServer) {
54
210
  return new Promise((resolve, reject) => {
55
211
  httpServer.close((err) => {
@@ -1 +1 @@
1
- {"version":3,"file":"http.js","sourceRoot":"","sources":["../../src/transport/http.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,mBAAmB,EAAE,MAAM,6CAA6C,CAAC;AAClF,OAAO,EAAE,6BAA6B,EAAE,MAAM,oDAAoD,CAAC;AAYnG;;GAEG;AACH,MAAM,UAAU,gBAAgB,CAC9B,MAAc,EACd,MAA2B;IAE3B,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,GAAG,MAAM,CAAC;IAExC,uCAAuC;IACvC,MAAM,GAAG,GAAG,mBAAmB,CAAC;QAC9B,IAAI;QACJ,2EAA2E;QAC3E,YAAY,EAAE,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,WAAW,CAAC;KACnE,CAAC,CAAC;IAEH,wBAAwB;IACxB,GAAG,CAAC,GAAG,CAAC,SAAS,EAAE,CAAC,IAAa,EAAE,GAAa,EAAE,EAAE;QAClD,GAAG,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC;IAC7B,CAAC,CAAC,CAAC;IAEH,6DAA6D;IAC7D,GAAG,CAAC,GAAG,CAAC,QAAQ,EAAE,CAAC,IAAa,EAAE,GAAa,EAAE,EAAE;QACjD,GAAG,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC,CAAC;IAChC,CAAC,CAAC,CAAC;IAEH,+DAA+D;IAC/D,MAAM,SAAS,GAAG,IAAI,6BAA6B,CAAC;QAClD,kBAAkB,EAAE,SAAS,EAAE,iBAAiB;QAChD,kBAAkB,EAAE,IAAI;KACzB,CAAC,CAAC;IAEH,qBAAqB;IACrB,GAAG,CAAC,GAAG,CAAC,QAAQ,EAAE,KAAK,EAAE,GAAY,EAAE,GAAa,EAAE,EAAE;QACtD,MAAM,SAAS,CAAC,aAAa,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,IAAI,CAAC,CAAC;IACpD,CAAC,CAAC,CAAC;IAEH,IAAI,UAAU,GAAyC,IAAI,CAAC;IAE5D,OAAO;QACL,GAAG;QACH,SAAS;QACT,KAAK,EAAE,KAAK,IAAI,EAAE;YAChB,8BAA8B;YAC9B,MAAM,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;YAEhC,oBAAoB;YACpB,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE;gBAC7B,UAAU,GAAG,GAAG,CAAC,MAAM,CAAC,IAAI,EAAE,IAAI,EAAE,GAAG,EAAE;oBACvC,OAAO,CAAC,KAAK,CAAC,mCAAmC,IAAI,IAAI,IAAI,EAAE,CAAC,CAAC;oBACjE,OAAO,CAAC,KAAK,CAAC,wBAAwB,IAAI,IAAI,IAAI,GAAG,QAAQ,EAAE,CAAC,CAAC;oBACjE,OAAO,CAAC,KAAK,CAAC,wBAAwB,IAAI,IAAI,IAAI,SAAS,CAAC,CAAC;oBAC7D,OAAO,EAAE,CAAC;gBACZ,CAAC,CAAC,CAAC;YACL,CAAC,CAAC,CAAC;QACL,CAAC;QACD,KAAK,EAAE,KAAK,IAAI,EAAE;YAChB,MAAM,SAAS,CAAC,KAAK,EAAE,CAAC;YACxB,IAAI,UAAU,EAAE,CAAC;gBACf,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;oBACrC,UAAW,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE,EAAE;wBACxB,IAAI,GAAG;4BAAE,MAAM,CAAC,GAAG,CAAC,CAAC;;4BAChB,OAAO,EAAE,CAAC;oBACjB,CAAC,CAAC,CAAC;gBACL,CAAC,CAAC,CAAC;YACL,CAAC;QACH,CAAC;KACF,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"http.js","sourceRoot":"","sources":["../../src/transport/http.ts"],"names":[],"mappings":"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"}
@@ -6,6 +6,8 @@ export interface HttpTransportConfig {
6
6
  port: number;
7
7
  host: string;
8
8
  basePath: string;
9
+ /** Session timeout in milliseconds (used for HTTP server timeouts) */
10
+ sessionTimeoutMs?: number;
9
11
  }
10
12
  export interface TransportConfig {
11
13
  mode: TransportMode;
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/transport/types.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,MAAM,MAAM,aAAa,GAAG,OAAO,GAAG,MAAM,CAAC;AAE7C,MAAM,WAAW,mBAAmB;IAClC,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,aAAa,CAAC;IACpB,IAAI,EAAE,mBAAmB,CAAC;CAC3B;AAED,eAAO,MAAM,wBAAwB,EAAE,eAOtC,CAAC"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/transport/types.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,MAAM,MAAM,aAAa,GAAG,OAAO,GAAG,MAAM,CAAC;AAE7C,MAAM,WAAW,mBAAmB;IAClC,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,sEAAsE;IACtE,gBAAgB,CAAC,EAAE,MAAM,CAAC;CAC3B;AAED,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,aAAa,CAAC;IACpB,IAAI,EAAE,mBAAmB,CAAC;CAC3B;AAED,eAAO,MAAM,wBAAwB,EAAE,eAOtC,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/transport/types.ts"],"names":[],"mappings":"AAAA;;GAEG;AAeH,MAAM,CAAC,MAAM,wBAAwB,GAAoB;IACvD,IAAI,EAAE,OAAO;IACb,IAAI,EAAE;QACJ,IAAI,EAAE,IAAI;QACV,IAAI,EAAE,SAAS;QACf,QAAQ,EAAE,MAAM;KACjB;CACF,CAAC"}
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/transport/types.ts"],"names":[],"mappings":"AAAA;;GAEG;AAiBH,MAAM,CAAC,MAAM,wBAAwB,GAAoB;IACvD,IAAI,EAAE,OAAO;IACb,IAAI,EAAE;QACJ,IAAI,EAAE,IAAI;QACV,IAAI,EAAE,SAAS;QACf,QAAQ,EAAE,MAAM;KACjB;CACF,CAAC"}