@mcp-b/transports 0.1.3 → 0.1.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +179 -80
- package/dist/.tsbuildinfo +1 -1
- package/dist/index.d.ts +16 -2
- package/dist/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/package.json +2 -2
package/README.md
CHANGED
|
@@ -1,147 +1,246 @@
|
|
|
1
1
|
# MCP Browser Transports
|
|
2
2
|
|
|
3
|
-
This library provides MCP `Transport` implementations for
|
|
3
|
+
This library provides MCP `Transport` implementations for browser environments, enabling communication between MCP clients and servers within web pages and browser extensions.
|
|
4
4
|
|
|
5
|
-
|
|
5
|
+
## Installation
|
|
6
6
|
|
|
7
7
|
```bash
|
|
8
8
|
npm install @mcp-b/transports
|
|
9
9
|
```
|
|
10
10
|
|
|
11
|
-
##
|
|
11
|
+
## Transport Types
|
|
12
12
|
|
|
13
|
-
|
|
13
|
+
### Tab Transports (In-Page Communication)
|
|
14
14
|
|
|
15
|
-
|
|
15
|
+
Use `TabServerTransport` and `TabClientTransport` when your MCP server and client are running in the same browser tab. The transport uses `window.postMessage` for secure communication with origin validation.
|
|
16
16
|
|
|
17
|
-
|
|
17
|
+
### Extension Transports (Cross-Context Communication)
|
|
18
18
|
|
|
19
|
-
|
|
19
|
+
Use `ExtensionClientTransport` and `ExtensionServerTransport` for communication between browser extension components (sidebar, popup, background) and web pages with MCP servers.
|
|
20
|
+
|
|
21
|
+
## Tab Transport Examples
|
|
22
|
+
|
|
23
|
+
### Server Setup (Web Page)
|
|
24
|
+
|
|
25
|
+
Create an MCP server in your web page and expose it via `TabServerTransport`:
|
|
20
26
|
|
|
21
27
|
```typescript
|
|
22
|
-
// my-mcp-server.js
|
|
23
28
|
import { TabServerTransport } from '@mcp-b/transports';
|
|
24
|
-
import { McpServer } from '@modelcontextprotocol/sdk/server/mcp';
|
|
29
|
+
import { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
|
|
25
30
|
import { z } from 'zod';
|
|
26
31
|
|
|
27
|
-
//
|
|
32
|
+
// Create MCP server with tools
|
|
28
33
|
const server = new McpServer({
|
|
29
|
-
name: '
|
|
34
|
+
name: 'TODO-APP',
|
|
30
35
|
version: '1.0.0',
|
|
36
|
+
}, {
|
|
37
|
+
instructions: 'You are a helpful assistant that can create, update, and delete todos.'
|
|
31
38
|
});
|
|
32
39
|
|
|
33
|
-
//
|
|
34
|
-
server.tool(
|
|
35
|
-
|
|
36
|
-
|
|
40
|
+
// Register a tool
|
|
41
|
+
server.tool(
|
|
42
|
+
'createTodo',
|
|
43
|
+
'Creates a new todo item for the current user',
|
|
44
|
+
{
|
|
45
|
+
todoText: z.string().describe('The content of the todo item.')
|
|
46
|
+
},
|
|
47
|
+
async (args) => {
|
|
48
|
+
// Implementation here
|
|
49
|
+
return {
|
|
50
|
+
content: [{
|
|
51
|
+
type: 'text',
|
|
52
|
+
text: `Todo created: "${args.todoText}"`
|
|
53
|
+
}]
|
|
54
|
+
};
|
|
55
|
+
}
|
|
56
|
+
);
|
|
37
57
|
|
|
38
|
-
//
|
|
39
|
-
const transport = new TabServerTransport(
|
|
58
|
+
// Connect to transport with CORS configuration
|
|
59
|
+
const transport = new TabServerTransport({
|
|
60
|
+
allowedOrigins: ['*'] // Configure based on your security needs
|
|
61
|
+
});
|
|
40
62
|
await server.connect(transport);
|
|
41
|
-
|
|
42
|
-
console.log('MCP Tab Server is running.');
|
|
43
63
|
```
|
|
44
64
|
|
|
45
|
-
|
|
65
|
+
### Client Setup (Same Page)
|
|
46
66
|
|
|
47
|
-
|
|
67
|
+
Connect to the server from within the same page or from an extension content script:
|
|
48
68
|
|
|
49
69
|
```typescript
|
|
50
|
-
// my-app.js
|
|
51
70
|
import { TabClientTransport } from '@mcp-b/transports';
|
|
52
|
-
import { Client } from '@modelcontextprotocol/sdk/client';
|
|
71
|
+
import { Client } from '@modelcontextprotocol/sdk/client/index.js';
|
|
53
72
|
|
|
54
|
-
//
|
|
55
|
-
const transport = new TabClientTransport(
|
|
56
|
-
|
|
73
|
+
// Create transport with target origin
|
|
74
|
+
const transport = new TabClientTransport({
|
|
75
|
+
targetOrigin: window.location.origin
|
|
57
76
|
});
|
|
58
77
|
|
|
59
|
-
//
|
|
78
|
+
// Discover available servers
|
|
79
|
+
const availableServers = await transport.discover();
|
|
80
|
+
if (availableServers.length > 0) {
|
|
81
|
+
console.log(`Found server: ${availableServers[0].implementation.name}`);
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
// Create and connect client
|
|
60
85
|
const client = new Client({
|
|
61
|
-
name: '
|
|
62
|
-
version: '1.0.0'
|
|
86
|
+
name: 'ExtensionProxyClient',
|
|
87
|
+
version: '1.0.0'
|
|
63
88
|
});
|
|
64
89
|
|
|
65
|
-
// 3. Connect and use the client
|
|
66
90
|
await client.connect(transport);
|
|
91
|
+
|
|
92
|
+
// Use the client
|
|
67
93
|
const result = await client.callTool({
|
|
68
|
-
name: '
|
|
69
|
-
arguments: {
|
|
94
|
+
name: 'createTodo',
|
|
95
|
+
arguments: { todoText: 'Buy groceries' }
|
|
70
96
|
});
|
|
71
|
-
|
|
72
|
-
console.log('Result of add(5, 10):', result.content[0].text); // "15"
|
|
73
97
|
```
|
|
74
98
|
|
|
75
|
-
## Extension Transport
|
|
99
|
+
## Extension Transport Examples
|
|
76
100
|
|
|
77
|
-
|
|
101
|
+
### Background Script Setup
|
|
78
102
|
|
|
79
|
-
|
|
103
|
+
The extension background script acts as a hub, aggregating tools from multiple tabs:
|
|
80
104
|
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
105
|
+
```typescript
|
|
106
|
+
import { ExtensionServerTransport } from '@mcp-b/transports';
|
|
107
|
+
import { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
|
|
108
|
+
|
|
109
|
+
class McpHub {
|
|
110
|
+
private server: McpServer;
|
|
111
|
+
|
|
112
|
+
constructor() {
|
|
113
|
+
this.server = new McpServer({
|
|
114
|
+
name: 'Extension-Hub',
|
|
115
|
+
version: '1.0.0'
|
|
116
|
+
});
|
|
117
|
+
|
|
118
|
+
this.setupConnections();
|
|
119
|
+
}
|
|
120
|
+
|
|
121
|
+
private setupConnections() {
|
|
122
|
+
chrome.runtime.onConnect.addListener((port) => {
|
|
123
|
+
if (port.name === 'mcp') {
|
|
124
|
+
this.handleUiConnection(port);
|
|
125
|
+
} else if (port.name === 'mcp-content-script-proxy') {
|
|
126
|
+
this.handleContentScriptConnection(port);
|
|
127
|
+
}
|
|
128
|
+
});
|
|
129
|
+
}
|
|
130
|
+
|
|
131
|
+
private async handleUiConnection(port: chrome.runtime.Port) {
|
|
132
|
+
const transport = new ExtensionServerTransport(port);
|
|
133
|
+
await this.server.connect(transport);
|
|
134
|
+
}
|
|
135
|
+
}
|
|
136
|
+
```
|
|
84
137
|
|
|
85
|
-
|
|
138
|
+
### Content Script Bridge
|
|
86
139
|
|
|
87
|
-
|
|
140
|
+
Content scripts act as a bridge between the page's MCP server and the extension:
|
|
88
141
|
|
|
89
142
|
```typescript
|
|
90
|
-
import {
|
|
91
|
-
|
|
92
|
-
// This function listens for connections from UI and content scripts
|
|
93
|
-
// and relays messages between them.
|
|
94
|
-
setupBackgroundBridge();
|
|
95
|
-
```
|
|
143
|
+
import { TabClientTransport } from '@mcp-b/transports';
|
|
144
|
+
import { Client } from '@modelcontextprotocol/sdk/client/index.js';
|
|
96
145
|
|
|
97
|
-
|
|
146
|
+
// Connect to the page's MCP server
|
|
147
|
+
const transport = new TabClientTransport({
|
|
148
|
+
targetOrigin: window.location.origin
|
|
149
|
+
});
|
|
98
150
|
|
|
99
|
-
|
|
151
|
+
const client = new Client({
|
|
152
|
+
name: 'ExtensionProxyClient',
|
|
153
|
+
version: '1.0.0'
|
|
154
|
+
});
|
|
100
155
|
|
|
101
|
-
|
|
102
|
-
|
|
156
|
+
// Connect to extension background
|
|
157
|
+
const backgroundPort = chrome.runtime.connect({
|
|
158
|
+
name: 'mcp-content-script-proxy'
|
|
159
|
+
});
|
|
103
160
|
|
|
104
|
-
//
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
```
|
|
161
|
+
// Discover and connect to page server
|
|
162
|
+
await client.connect(transport);
|
|
163
|
+
const pageTools = await client.listTools();
|
|
108
164
|
|
|
109
|
-
|
|
165
|
+
// Register tools with background hub
|
|
166
|
+
backgroundPort.postMessage({
|
|
167
|
+
type: 'register-tools',
|
|
168
|
+
tools: pageTools.tools
|
|
169
|
+
});
|
|
110
170
|
|
|
111
|
-
|
|
171
|
+
// Handle tool execution requests from background
|
|
172
|
+
backgroundPort.onMessage.addListener(async (message) => {
|
|
173
|
+
if (message.type === 'execute-tool') {
|
|
174
|
+
const result = await client.callTool({
|
|
175
|
+
name: message.toolName,
|
|
176
|
+
arguments: message.args || {}
|
|
177
|
+
});
|
|
178
|
+
|
|
179
|
+
backgroundPort.postMessage({
|
|
180
|
+
type: 'tool-result',
|
|
181
|
+
requestId: message.requestId,
|
|
182
|
+
data: { success: true, payload: result }
|
|
183
|
+
});
|
|
184
|
+
}
|
|
185
|
+
});
|
|
186
|
+
```
|
|
112
187
|
|
|
113
|
-
|
|
188
|
+
### Extension UI Client
|
|
114
189
|
|
|
115
|
-
|
|
190
|
+
Connect from the extension's sidebar or popup to use tools from all connected pages:
|
|
116
191
|
|
|
117
192
|
```typescript
|
|
118
193
|
import { ExtensionClientTransport } from '@mcp-b/transports';
|
|
119
|
-
import { Client } from '@modelcontextprotocol/sdk/client';
|
|
194
|
+
import { Client } from '@modelcontextprotocol/sdk/client/index.js';
|
|
120
195
|
|
|
121
|
-
//
|
|
196
|
+
// Create transport - connects to the extension's background script
|
|
122
197
|
const transport = new ExtensionClientTransport({
|
|
123
|
-
|
|
198
|
+
portName: 'mcp'
|
|
124
199
|
});
|
|
125
200
|
|
|
126
|
-
//
|
|
201
|
+
// Create MCP client
|
|
127
202
|
const client = new Client({
|
|
128
|
-
name: '
|
|
129
|
-
version: '1.0.0'
|
|
203
|
+
name: 'Extension Sidepanel',
|
|
204
|
+
version: '1.0.0'
|
|
130
205
|
});
|
|
131
206
|
|
|
132
|
-
//
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
name: 'add',
|
|
138
|
-
arguments: { a: 20, b: 22 },
|
|
139
|
-
});
|
|
140
|
-
console.log('Result from page tool:', result.content[0].text); // "42"
|
|
141
|
-
} catch (error) {
|
|
142
|
-
console.error('Failed to call tool via extension bridge:', error);
|
|
143
|
-
}
|
|
144
|
-
}
|
|
207
|
+
// Connect and use
|
|
208
|
+
await client.connect(transport);
|
|
209
|
+
|
|
210
|
+
// List all available tools from all connected tabs
|
|
211
|
+
const tools = await client.listTools();
|
|
145
212
|
|
|
146
|
-
|
|
213
|
+
// Call a tool from a specific website
|
|
214
|
+
const result = await client.callTool({
|
|
215
|
+
name: 'website_tool_example_com_createTodo',
|
|
216
|
+
arguments: { todoText: 'Review PR' }
|
|
217
|
+
});
|
|
147
218
|
```
|
|
219
|
+
|
|
220
|
+
## Architecture Overview
|
|
221
|
+
|
|
222
|
+
### Tab Transport Flow
|
|
223
|
+
1. Server creates `TabServerTransport` and listens for messages via `window.postMessage`
|
|
224
|
+
2. Client creates `TabClientTransport` to connect to the server using the same channel
|
|
225
|
+
3. Communication happens securely with origin validation and message direction tracking
|
|
226
|
+
|
|
227
|
+
### Extension Transport Flow
|
|
228
|
+
1. Web pages run MCP servers with `TabServerTransport`
|
|
229
|
+
2. Content scripts discover these servers and relay to background script
|
|
230
|
+
3. Background script aggregates tools from all tabs using `ExtensionServerTransport`
|
|
231
|
+
4. Extension UI connects via `ExtensionClientTransport` to access all tools
|
|
232
|
+
|
|
233
|
+
## Key Features
|
|
234
|
+
|
|
235
|
+
- **Automatic Server Discovery**: Tab clients can discover available servers
|
|
236
|
+
- **Cross-Origin Support**: Configure CORS for tab transports
|
|
237
|
+
- **Tool Namespacing**: Extension hub prefixes tools to avoid conflicts
|
|
238
|
+
- **Connection Management**: Automatic cleanup when tabs close
|
|
239
|
+
- **Type Safety**: Full TypeScript support with proper typing
|
|
240
|
+
|
|
241
|
+
## Security Considerations
|
|
242
|
+
|
|
243
|
+
- Tab transports respect origin restrictions
|
|
244
|
+
- Extension transports use Chrome's secure message passing
|
|
245
|
+
- Configure `allowedOrigins` appropriately for your use case
|
|
246
|
+
- Tools execute in their original context (web page)
|
package/dist/.tsbuildinfo
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"fileNames":["../../../node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.es5.d.ts","../../../node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.es2015.d.ts","../../../node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.es2016.d.ts","../../../node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.es2017.d.ts","../../../node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.es2018.d.ts","../../../node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.es2019.d.ts","../../../node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.es2020.d.ts","../../../node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.es2021.d.ts","../../../node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.es2022.d.ts","../../../node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.dom.d.ts","../../../node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.dom.iterable.d.ts","../../../node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.es2015.core.d.ts","../../../node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.es2015.collection.d.ts","../../../node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.es2015.generator.d.ts","../../../node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.es2015.iterable.d.ts","../../../node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.es2015.promise.d.ts","../../../node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.es2015.proxy.d.ts","../../../node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.es2015.reflect.d.ts","../../../node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.es2015.symbol.d.ts","../../../node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.es2015.symbol.wellknown.d.ts","../../../node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.es2016.array.include.d.ts","../../../node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.es2016.intl.d.ts","../../../node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.es2017.arraybuffer.d.ts","../../../node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.es2017.date.d.ts","../../../node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.es2017.object.d.ts","../../../node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.es2017.sharedmemory.d.ts","../../../node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.es2017.string.d.ts","../../../node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.es2017.intl.d.ts","../../../node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.es2017.typedarrays.d.ts","../../../node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.es2018.asyncgenerator.d.ts","../../../node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.es2018.asynciterable.d.ts","../../../node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.es2018.intl.d.ts","../../../node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.es2018.promise.d.ts","../../../node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.es2018.regexp.d.ts","../../../node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.es2019.array.d.ts","../../../node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.es2019.object.d.ts","../../../node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.es2019.string.d.ts","../../../node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.es2019.symbol.d.ts","../../../node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.es2019.intl.d.ts","../../../node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.es2020.bigint.d.ts","../../../node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.es2020.date.d.ts","../../../node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.es2020.promise.d.ts","../../../node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.es2020.sharedmemory.d.ts","../../../node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.es2020.string.d.ts","../../../node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.es2020.symbol.wellknown.d.ts","../../../node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.es2020.intl.d.ts","../../../node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.es2020.number.d.ts","../../../node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.es2021.promise.d.ts","../../../node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.es2021.string.d.ts","../../../node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.es2021.weakref.d.ts","../../../node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.es2021.intl.d.ts","../../../node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.es2022.array.d.ts","../../../node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.es2022.error.d.ts","../../../node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.es2022.intl.d.ts","../../../node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.es2022.object.d.ts","../../../node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.es2022.string.d.ts","../../../node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.es2022.regexp.d.ts","../../../node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.decorators.d.ts","../../../node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.decorators.legacy.d.ts","../../../node_modules/.pnpm/@modelcontextprotocol+sdk@1.12.3/node_modules/@modelcontextprotocol/sdk/dist/esm/server/auth/types.d.ts","../../../node_modules/.pnpm/zod@3.25.64/node_modules/zod/dist/types/v3/helpers/typealiases.d.ts","../../../node_modules/.pnpm/zod@3.25.64/node_modules/zod/dist/types/v3/helpers/util.d.ts","../../../node_modules/.pnpm/zod@3.25.64/node_modules/zod/dist/types/v3/zoderror.d.ts","../../../node_modules/.pnpm/zod@3.25.64/node_modules/zod/dist/types/v3/locales/en.d.ts","../../../node_modules/.pnpm/zod@3.25.64/node_modules/zod/dist/types/v3/errors.d.ts","../../../node_modules/.pnpm/zod@3.25.64/node_modules/zod/dist/types/v3/helpers/parseutil.d.ts","../../../node_modules/.pnpm/zod@3.25.64/node_modules/zod/dist/types/v3/helpers/enumutil.d.ts","../../../node_modules/.pnpm/zod@3.25.64/node_modules/zod/dist/types/v3/helpers/errorutil.d.ts","../../../node_modules/.pnpm/zod@3.25.64/node_modules/zod/dist/types/v3/helpers/partialutil.d.ts","../../../node_modules/.pnpm/zod@3.25.64/node_modules/zod/dist/types/v3/standard-schema.d.ts","../../../node_modules/.pnpm/zod@3.25.64/node_modules/zod/dist/types/v3/types.d.ts","../../../node_modules/.pnpm/zod@3.25.64/node_modules/zod/dist/types/v3/external.d.ts","../../../node_modules/.pnpm/zod@3.25.64/node_modules/zod/dist/types/v3/index.d.ts","../../../node_modules/.pnpm/zod@3.25.64/node_modules/zod/dist/types/index.d.ts","../../../node_modules/.pnpm/@modelcontextprotocol+sdk@1.12.3/node_modules/@modelcontextprotocol/sdk/dist/esm/types.d.ts","../../../node_modules/.pnpm/@modelcontextprotocol+sdk@1.12.3/node_modules/@modelcontextprotocol/sdk/dist/esm/shared/transport.d.ts","../src/extensionclienttransport.ts","../src/extensionservertransport.ts","../src/tabclienttransport.ts","../src/tabservertransport.ts","../../../node_modules/.pnpm/@types+node@22.15.31/node_modules/@types/node/compatibility/disposable.d.ts","../../../node_modules/.pnpm/@types+node@22.15.31/node_modules/@types/node/compatibility/indexable.d.ts","../../../node_modules/.pnpm/@types+node@22.15.31/node_modules/@types/node/compatibility/iterators.d.ts","../../../node_modules/.pnpm/@types+node@22.15.31/node_modules/@types/node/compatibility/index.d.ts","../../../node_modules/.pnpm/@types+node@22.15.31/node_modules/@types/node/globals.typedarray.d.ts","../../../node_modules/.pnpm/@types+node@22.15.31/node_modules/@types/node/buffer.buffer.d.ts","../../../node_modules/.pnpm/buffer@6.0.3/node_modules/buffer/index.d.ts","../../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/header.d.ts","../../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/readable.d.ts","../../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/file.d.ts","../../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/fetch.d.ts","../../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/formdata.d.ts","../../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/connector.d.ts","../../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/client.d.ts","../../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/errors.d.ts","../../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/dispatcher.d.ts","../../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/global-dispatcher.d.ts","../../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/global-origin.d.ts","../../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/pool-stats.d.ts","../../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/pool.d.ts","../../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/handlers.d.ts","../../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/balanced-pool.d.ts","../../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/agent.d.ts","../../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/mock-interceptor.d.ts","../../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/mock-agent.d.ts","../../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/mock-client.d.ts","../../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/mock-pool.d.ts","../../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/mock-errors.d.ts","../../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/proxy-agent.d.ts","../../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/env-http-proxy-agent.d.ts","../../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/retry-handler.d.ts","../../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/retry-agent.d.ts","../../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/api.d.ts","../../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/interceptors.d.ts","../../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/util.d.ts","../../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/cookies.d.ts","../../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/patch.d.ts","../../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/websocket.d.ts","../../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/eventsource.d.ts","../../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/filereader.d.ts","../../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/diagnostics-channel.d.ts","../../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/content-type.d.ts","../../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/cache.d.ts","../../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/index.d.ts","../../../node_modules/.pnpm/@types+node@22.15.31/node_modules/@types/node/globals.d.ts","../../../node_modules/.pnpm/@types+node@22.15.31/node_modules/@types/node/assert.d.ts","../../../node_modules/.pnpm/@types+node@22.15.31/node_modules/@types/node/assert/strict.d.ts","../../../node_modules/.pnpm/@types+node@22.15.31/node_modules/@types/node/async_hooks.d.ts","../../../node_modules/.pnpm/@types+node@22.15.31/node_modules/@types/node/buffer.d.ts","../../../node_modules/.pnpm/@types+node@22.15.31/node_modules/@types/node/child_process.d.ts","../../../node_modules/.pnpm/@types+node@22.15.31/node_modules/@types/node/cluster.d.ts","../../../node_modules/.pnpm/@types+node@22.15.31/node_modules/@types/node/console.d.ts","../../../node_modules/.pnpm/@types+node@22.15.31/node_modules/@types/node/constants.d.ts","../../../node_modules/.pnpm/@types+node@22.15.31/node_modules/@types/node/crypto.d.ts","../../../node_modules/.pnpm/@types+node@22.15.31/node_modules/@types/node/dgram.d.ts","../../../node_modules/.pnpm/@types+node@22.15.31/node_modules/@types/node/diagnostics_channel.d.ts","../../../node_modules/.pnpm/@types+node@22.15.31/node_modules/@types/node/dns.d.ts","../../../node_modules/.pnpm/@types+node@22.15.31/node_modules/@types/node/dns/promises.d.ts","../../../node_modules/.pnpm/@types+node@22.15.31/node_modules/@types/node/domain.d.ts","../../../node_modules/.pnpm/@types+node@22.15.31/node_modules/@types/node/dom-events.d.ts","../../../node_modules/.pnpm/@types+node@22.15.31/node_modules/@types/node/events.d.ts","../../../node_modules/.pnpm/@types+node@22.15.31/node_modules/@types/node/fs.d.ts","../../../node_modules/.pnpm/@types+node@22.15.31/node_modules/@types/node/fs/promises.d.ts","../../../node_modules/.pnpm/@types+node@22.15.31/node_modules/@types/node/http.d.ts","../../../node_modules/.pnpm/@types+node@22.15.31/node_modules/@types/node/http2.d.ts","../../../node_modules/.pnpm/@types+node@22.15.31/node_modules/@types/node/https.d.ts","../../../node_modules/.pnpm/@types+node@22.15.31/node_modules/@types/node/inspector.d.ts","../../../node_modules/.pnpm/@types+node@22.15.31/node_modules/@types/node/module.d.ts","../../../node_modules/.pnpm/@types+node@22.15.31/node_modules/@types/node/net.d.ts","../../../node_modules/.pnpm/@types+node@22.15.31/node_modules/@types/node/os.d.ts","../../../node_modules/.pnpm/@types+node@22.15.31/node_modules/@types/node/path.d.ts","../../../node_modules/.pnpm/@types+node@22.15.31/node_modules/@types/node/perf_hooks.d.ts","../../../node_modules/.pnpm/@types+node@22.15.31/node_modules/@types/node/process.d.ts","../../../node_modules/.pnpm/@types+node@22.15.31/node_modules/@types/node/punycode.d.ts","../../../node_modules/.pnpm/@types+node@22.15.31/node_modules/@types/node/querystring.d.ts","../../../node_modules/.pnpm/@types+node@22.15.31/node_modules/@types/node/readline.d.ts","../../../node_modules/.pnpm/@types+node@22.15.31/node_modules/@types/node/readline/promises.d.ts","../../../node_modules/.pnpm/@types+node@22.15.31/node_modules/@types/node/repl.d.ts","../../../node_modules/.pnpm/@types+node@22.15.31/node_modules/@types/node/sea.d.ts","../../../node_modules/.pnpm/@types+node@22.15.31/node_modules/@types/node/sqlite.d.ts","../../../node_modules/.pnpm/@types+node@22.15.31/node_modules/@types/node/stream.d.ts","../../../node_modules/.pnpm/@types+node@22.15.31/node_modules/@types/node/stream/promises.d.ts","../../../node_modules/.pnpm/@types+node@22.15.31/node_modules/@types/node/stream/consumers.d.ts","../../../node_modules/.pnpm/@types+node@22.15.31/node_modules/@types/node/stream/web.d.ts","../../../node_modules/.pnpm/@types+node@22.15.31/node_modules/@types/node/string_decoder.d.ts","../../../node_modules/.pnpm/@types+node@22.15.31/node_modules/@types/node/test.d.ts","../../../node_modules/.pnpm/@types+node@22.15.31/node_modules/@types/node/timers.d.ts","../../../node_modules/.pnpm/@types+node@22.15.31/node_modules/@types/node/timers/promises.d.ts","../../../node_modules/.pnpm/@types+node@22.15.31/node_modules/@types/node/tls.d.ts","../../../node_modules/.pnpm/@types+node@22.15.31/node_modules/@types/node/trace_events.d.ts","../../../node_modules/.pnpm/@types+node@22.15.31/node_modules/@types/node/tty.d.ts","../../../node_modules/.pnpm/@types+node@22.15.31/node_modules/@types/node/url.d.ts","../../../node_modules/.pnpm/@types+node@22.15.31/node_modules/@types/node/util.d.ts","../../../node_modules/.pnpm/@types+node@22.15.31/node_modules/@types/node/v8.d.ts","../../../node_modules/.pnpm/@types+node@22.15.31/node_modules/@types/node/vm.d.ts","../../../node_modules/.pnpm/@types+node@22.15.31/node_modules/@types/node/wasi.d.ts","../../../node_modules/.pnpm/@types+node@22.15.31/node_modules/@types/node/worker_threads.d.ts","../../../node_modules/.pnpm/@types+node@22.15.31/node_modules/@types/node/zlib.d.ts","../../../node_modules/.pnpm/@types+node@22.15.31/node_modules/@types/node/index.d.ts","../../../node_modules/.pnpm/@types+ws@8.18.1/node_modules/@types/ws/index.d.mts","../src/websocketclienttransport.ts","../src/websocketservertransport.ts","../src/browser-types.ts","../src/index.ts","../../../node_modules/.pnpm/domelementtype@2.3.0/node_modules/domelementtype/lib/esm/index.d.ts","../../../node_modules/.pnpm/domhandler@5.0.3/node_modules/domhandler/lib/esm/node.d.ts","../../../node_modules/.pnpm/domhandler@5.0.3/node_modules/domhandler/lib/esm/index.d.ts","../../../node_modules/.pnpm/htmlparser2@10.0.0/node_modules/htmlparser2/dist/esm/tokenizer.d.ts","../../../node_modules/.pnpm/htmlparser2@10.0.0/node_modules/htmlparser2/dist/esm/parser.d.ts","../../../node_modules/.pnpm/dom-serializer@2.0.0/node_modules/dom-serializer/lib/esm/index.d.ts","../../../node_modules/.pnpm/domutils@3.2.2/node_modules/domutils/lib/esm/stringify.d.ts","../../../node_modules/.pnpm/domutils@3.2.2/node_modules/domutils/lib/esm/traversal.d.ts","../../../node_modules/.pnpm/domutils@3.2.2/node_modules/domutils/lib/esm/manipulation.d.ts","../../../node_modules/.pnpm/domutils@3.2.2/node_modules/domutils/lib/esm/querying.d.ts","../../../node_modules/.pnpm/domutils@3.2.2/node_modules/domutils/lib/esm/legacy.d.ts","../../../node_modules/.pnpm/domutils@3.2.2/node_modules/domutils/lib/esm/helpers.d.ts","../../../node_modules/.pnpm/domutils@3.2.2/node_modules/domutils/lib/esm/feeds.d.ts","../../../node_modules/.pnpm/domutils@3.2.2/node_modules/domutils/lib/esm/index.d.ts","../../../node_modules/.pnpm/htmlparser2@10.0.0/node_modules/htmlparser2/dist/esm/index.d.ts","../../../node_modules/.pnpm/parse5@7.3.0/node_modules/parse5/dist/common/html.d.ts","../../../node_modules/.pnpm/parse5@7.3.0/node_modules/parse5/dist/common/token.d.ts","../../../node_modules/.pnpm/parse5@7.3.0/node_modules/parse5/dist/common/error-codes.d.ts","../../../node_modules/.pnpm/parse5@7.3.0/node_modules/parse5/dist/tokenizer/preprocessor.d.ts","../../../node_modules/.pnpm/entities@6.0.1/node_modules/entities/dist/esm/generated/decode-data-html.d.ts","../../../node_modules/.pnpm/entities@6.0.1/node_modules/entities/dist/esm/generated/decode-data-xml.d.ts","../../../node_modules/.pnpm/entities@6.0.1/node_modules/entities/dist/esm/decode-codepoint.d.ts","../../../node_modules/.pnpm/entities@6.0.1/node_modules/entities/dist/esm/decode.d.ts","../../../node_modules/.pnpm/parse5@7.3.0/node_modules/parse5/dist/tokenizer/index.d.ts","../../../node_modules/.pnpm/parse5@7.3.0/node_modules/parse5/dist/tree-adapters/interface.d.ts","../../../node_modules/.pnpm/parse5@7.3.0/node_modules/parse5/dist/parser/open-element-stack.d.ts","../../../node_modules/.pnpm/parse5@7.3.0/node_modules/parse5/dist/parser/formatting-element-list.d.ts","../../../node_modules/.pnpm/parse5@7.3.0/node_modules/parse5/dist/parser/index.d.ts","../../../node_modules/.pnpm/parse5@7.3.0/node_modules/parse5/dist/tree-adapters/default.d.ts","../../../node_modules/.pnpm/parse5@7.3.0/node_modules/parse5/dist/serializer/index.d.ts","../../../node_modules/.pnpm/parse5@7.3.0/node_modules/parse5/dist/common/foreign-content.d.ts","../../../node_modules/.pnpm/parse5@7.3.0/node_modules/parse5/dist/index.d.ts","../../../node_modules/.pnpm/parse5-htmlparser2-tree-adapter@7.1.0/node_modules/parse5-htmlparser2-tree-adapter/dist/index.d.ts","../../../node_modules/.pnpm/css-what@6.1.0/node_modules/css-what/lib/es/types.d.ts","../../../node_modules/.pnpm/css-what@6.1.0/node_modules/css-what/lib/es/parse.d.ts","../../../node_modules/.pnpm/css-what@6.1.0/node_modules/css-what/lib/es/stringify.d.ts","../../../node_modules/.pnpm/css-what@6.1.0/node_modules/css-what/lib/es/index.d.ts","../../../node_modules/.pnpm/css-select@5.1.0/node_modules/css-select/lib/esm/types.d.ts","../../../node_modules/.pnpm/css-select@5.1.0/node_modules/css-select/lib/esm/pseudo-selectors/filters.d.ts","../../../node_modules/.pnpm/css-select@5.1.0/node_modules/css-select/lib/esm/pseudo-selectors/pseudos.d.ts","../../../node_modules/.pnpm/css-select@5.1.0/node_modules/css-select/lib/esm/pseudo-selectors/aliases.d.ts","../../../node_modules/.pnpm/css-select@5.1.0/node_modules/css-select/lib/esm/pseudo-selectors/index.d.ts","../../../node_modules/.pnpm/css-select@5.1.0/node_modules/css-select/lib/esm/index.d.ts","../../../node_modules/.pnpm/cheerio-select@2.1.0/node_modules/cheerio-select/lib/esm/index.d.ts","../../../node_modules/.pnpm/cheerio@1.1.0/node_modules/cheerio/dist/esm/options.d.ts","../../../node_modules/.pnpm/cheerio@1.1.0/node_modules/cheerio/dist/esm/api/attributes.d.ts","../../../node_modules/.pnpm/cheerio@1.1.0/node_modules/cheerio/dist/esm/api/traversing.d.ts","../../../node_modules/.pnpm/cheerio@1.1.0/node_modules/cheerio/dist/esm/api/manipulation.d.ts","../../../node_modules/.pnpm/cheerio@1.1.0/node_modules/cheerio/dist/esm/api/css.d.ts","../../../node_modules/.pnpm/cheerio@1.1.0/node_modules/cheerio/dist/esm/api/forms.d.ts","../../../node_modules/.pnpm/cheerio@1.1.0/node_modules/cheerio/dist/esm/api/extract.d.ts","../../../node_modules/.pnpm/cheerio@1.1.0/node_modules/cheerio/dist/esm/cheerio.d.ts","../../../node_modules/.pnpm/cheerio@1.1.0/node_modules/cheerio/dist/esm/types.d.ts","../../../node_modules/.pnpm/cheerio@1.1.0/node_modules/cheerio/dist/esm/static.d.ts","../../../node_modules/.pnpm/cheerio@1.1.0/node_modules/cheerio/dist/esm/load.d.ts","../../../node_modules/.pnpm/cheerio@1.1.0/node_modules/cheerio/dist/esm/load-parse.d.ts","../../../node_modules/.pnpm/cheerio@1.1.0/node_modules/cheerio/dist/esm/slim.d.ts","../../../node_modules/.pnpm/encoding-sniffer@0.2.1/node_modules/encoding-sniffer/dist/esm/sniffer.d.ts","../../../node_modules/.pnpm/encoding-sniffer@0.2.1/node_modules/encoding-sniffer/dist/esm/index.d.ts","../../../node_modules/.pnpm/undici@7.10.0/node_modules/undici/types/utility.d.ts","../../../node_modules/.pnpm/undici@7.10.0/node_modules/undici/types/header.d.ts","../../../node_modules/.pnpm/undici@7.10.0/node_modules/undici/types/readable.d.ts","../../../node_modules/.pnpm/undici@7.10.0/node_modules/undici/types/fetch.d.ts","../../../node_modules/.pnpm/undici@7.10.0/node_modules/undici/types/formdata.d.ts","../../../node_modules/.pnpm/undici@7.10.0/node_modules/undici/types/connector.d.ts","../../../node_modules/.pnpm/undici@7.10.0/node_modules/undici/types/client-stats.d.ts","../../../node_modules/.pnpm/undici@7.10.0/node_modules/undici/types/client.d.ts","../../../node_modules/.pnpm/undici@7.10.0/node_modules/undici/types/errors.d.ts","../../../node_modules/.pnpm/undici@7.10.0/node_modules/undici/types/dispatcher.d.ts","../../../node_modules/.pnpm/undici@7.10.0/node_modules/undici/types/global-dispatcher.d.ts","../../../node_modules/.pnpm/undici@7.10.0/node_modules/undici/types/global-origin.d.ts","../../../node_modules/.pnpm/undici@7.10.0/node_modules/undici/types/pool-stats.d.ts","../../../node_modules/.pnpm/undici@7.10.0/node_modules/undici/types/pool.d.ts","../../../node_modules/.pnpm/undici@7.10.0/node_modules/undici/types/handlers.d.ts","../../../node_modules/.pnpm/undici@7.10.0/node_modules/undici/types/balanced-pool.d.ts","../../../node_modules/.pnpm/undici@7.10.0/node_modules/undici/types/h2c-client.d.ts","../../../node_modules/.pnpm/undici@7.10.0/node_modules/undici/types/agent.d.ts","../../../node_modules/.pnpm/undici@7.10.0/node_modules/undici/types/mock-interceptor.d.ts","../../../node_modules/.pnpm/undici@7.10.0/node_modules/undici/types/mock-call-history.d.ts","../../../node_modules/.pnpm/undici@7.10.0/node_modules/undici/types/mock-agent.d.ts","../../../node_modules/.pnpm/undici@7.10.0/node_modules/undici/types/mock-client.d.ts","../../../node_modules/.pnpm/undici@7.10.0/node_modules/undici/types/mock-pool.d.ts","../../../node_modules/.pnpm/undici@7.10.0/node_modules/undici/types/mock-errors.d.ts","../../../node_modules/.pnpm/undici@7.10.0/node_modules/undici/types/proxy-agent.d.ts","../../../node_modules/.pnpm/undici@7.10.0/node_modules/undici/types/env-http-proxy-agent.d.ts","../../../node_modules/.pnpm/undici@7.10.0/node_modules/undici/types/retry-handler.d.ts","../../../node_modules/.pnpm/undici@7.10.0/node_modules/undici/types/retry-agent.d.ts","../../../node_modules/.pnpm/undici@7.10.0/node_modules/undici/types/api.d.ts","../../../node_modules/.pnpm/undici@7.10.0/node_modules/undici/types/cache-interceptor.d.ts","../../../node_modules/.pnpm/undici@7.10.0/node_modules/undici/types/interceptors.d.ts","../../../node_modules/.pnpm/undici@7.10.0/node_modules/undici/types/util.d.ts","../../../node_modules/.pnpm/undici@7.10.0/node_modules/undici/types/cookies.d.ts","../../../node_modules/.pnpm/undici@7.10.0/node_modules/undici/types/patch.d.ts","../../../node_modules/.pnpm/undici@7.10.0/node_modules/undici/types/websocket.d.ts","../../../node_modules/.pnpm/undici@7.10.0/node_modules/undici/types/eventsource.d.ts","../../../node_modules/.pnpm/undici@7.10.0/node_modules/undici/types/diagnostics-channel.d.ts","../../../node_modules/.pnpm/undici@7.10.0/node_modules/undici/types/content-type.d.ts","../../../node_modules/.pnpm/undici@7.10.0/node_modules/undici/types/cache.d.ts","../../../node_modules/.pnpm/undici@7.10.0/node_modules/undici/types/index.d.ts","../../../node_modules/.pnpm/undici@7.10.0/node_modules/undici/index.d.ts","../../../node_modules/.pnpm/cheerio@1.1.0/node_modules/cheerio/dist/esm/index.d.ts","../../../node_modules/.pnpm/@types+har-format@1.2.16/node_modules/@types/har-format/index.d.ts","../../../node_modules/.pnpm/@types+chrome@0.0.326/node_modules/@types/chrome/har-format/index.d.ts","../../../node_modules/.pnpm/@types+chrome@0.0.326/node_modules/@types/chrome/chrome-cast/index.d.ts","../../../node_modules/.pnpm/@types+filewriter@0.0.33/node_modules/@types/filewriter/index.d.ts","../../../node_modules/.pnpm/@types+filesystem@0.0.36/node_modules/@types/filesystem/index.d.ts","../../../node_modules/.pnpm/@types+chrome@0.0.326/node_modules/@types/chrome/index.d.ts","../../../node_modules/.pnpm/@types+ws@8.18.1/node_modules/@types/ws/index.d.ts"],"fileIdsList":[[86,129],[60,75,86,129],[74,86,129],[86,129,286],[86,129,287,288,290],[86,129,289],[86,126,129],[86,128,129],[129],[86,129,134,164],[86,129,130,135,141,142,149,161,172],[86,129,130,131,141,149],[81,82,83,86,129],[86,129,132,173],[86,129,133,134,142,150],[86,129,134,161,169],[86,129,135,137,141,149],[86,128,129,136],[86,129,137,138],[86,129,139,141],[86,128,129,141],[86,129,141,142,143,161,172],[86,129,141,142,143,156,161,164],[86,124,129],[86,124,129,137,141,144,149,161,172],[86,129,141,142,144,145,149,161,169,172],[86,129,144,146,161,169,172],[84,85,86,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178],[86,129,141,147],[86,129,148,172],[86,129,137,141,149,161],[86,129,150],[86,129,151],[86,128,129,152],[86,126,127,128,129,130,131,132,133,134,135,136,137,138,139,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178],[86,129,154],[86,129,155],[86,129,141,156,157],[86,129,156,158,173,175],[86,129,141,161,162,164],[86,129,163,164],[86,129,161,162],[86,129,164],[86,129,165],[86,126,129,161],[86,129,141,167,168],[86,129,167,168],[86,129,134,149,161,169],[86,129,170],[86,129,149,171],[86,129,144,155,172],[86,129,134,173],[86,129,161,174],[86,129,148,175],[86,129,176],[86,129,141,143,152,161,164,172,175,177],[86,129,161,178],[86,129,141,144,146,149,161,169,172,178,179],[86,129,187,227],[86,129,187,236],[86,129,187,230,236],[86,129,187,236,237],[86,129,187,229,230,231,232,233,234,235,237],[86,129,161,229,237,238,239,240,241,243,284],[86,129,187,229,239],[86,129,187,229,236,237,238],[86,129,187,190,199,216,217,228],[86,129,187,229,236,237,238,239],[86,129,187,229,235,236,237,239],[86,129,221,222,226],[86,129,222],[86,129,221,222,223,224,225],[86,129,221,222],[86,129,221],[86,129,218,219,220],[86,129,218],[86,129,187],[86,129,186],[86,129,185],[86,129,187,191,192,193,194,195,196,197],[86,129,185,187],[86,129,187,190],[86,129,161,242],[86,129,204,205,206],[86,129,185,187,188,189,198],[86,129,188],[86,129,187,216],[86,129,201],[86,129,200,201],[86,129,200],[86,129,200,201,202,208,209,212,213,214,215],[86,129,201,209],[86,129,200,201,202,208,209,210,211],[86,129,200,209],[86,129,209,213],[86,129,201,202,203,207],[86,129,202],[86,129,200,201,209],[86,96,100,129,172],[86,96,129,161,172],[86,91,129],[86,93,96,129,169,172],[86,129,149,169],[86,129,179],[86,91,129,179],[86,93,96,129,149,172],[86,88,89,92,95,129,141,161,172],[86,96,103,129],[86,88,94,129],[86,96,117,118,129],[86,92,96,129,164,172,179],[86,117,129,179],[86,90,91,129,179],[86,96,129],[86,90,91,92,93,94,95,96,97,98,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,118,119,120,121,122,123,129],[86,96,111,129],[86,96,103,104,129],[86,94,96,104,105,129],[86,95,129],[86,88,91,96,129],[86,96,100,104,105,129],[86,100,129],[86,94,96,99,129,172],[86,88,93,96,103,129],[86,129,161],[86,91,96,117,129,177,179],[86,129,283],[86,129,172,250,253,256,257],[86,129,161,172,253],[86,129,172,253,257],[86,129,247],[86,129,251],[86,129,172,249,250,253],[86,129,179,247],[86,129,149,172,249,253],[86,129,141,161,172,244,245,246,248,252],[86,129,253,261],[86,129,245,251],[86,129,253,277,278],[86,129,164,172,179,245,248,253],[86,129,253],[86,129,172,249,253],[86,129,244],[86,129,247,248,249,251,252,253,254,255,257,258,259,260,261,262,263,264,265,266,267,268,269,270,271,272,273,274,275,276,278,279,280,281,282],[86,129,137,253,270,273],[86,129,253,261,262,263],[86,129,251,253,262,264],[86,129,252],[86,129,245,247,253],[86,129,253,257,262,264],[86,129,257],[86,129,172,251,253,256],[86,129,245,249,253,261],[86,129,253,270],[86,129,164,177,179,247,253,277],[73,86,129],[63,64,86,129],[61,62,63,65,66,71,86,129],[62,63,86,129],[71,86,129],[72,86,129],[63,86,129],[61,62,63,66,67,68,69,70,86,129],[61,62,73,86,129],[75,86,129],[75,76,86,129],[77,78,79,80,86,129,181,182,183],[75,76,86,129,180]],"fileInfos":[{"version":"69684132aeb9b5642cbcd9e22dff7818ff0ee1aa831728af0ecf97d3364d5546","affectsGlobalScope":true,"impliedFormat":1},{"version":"45b7ab580deca34ae9729e97c13cfd999df04416a79116c3bfb483804f85ded4","impliedFormat":1},{"version":"3facaf05f0c5fc569c5649dd359892c98a85557e3e0c847964caeb67076f4d75","impliedFormat":1},{"version":"e44bb8bbac7f10ecc786703fe0a6a4b952189f908707980ba8f3c8975a760962","impliedFormat":1},{"version":"5e1c4c362065a6b95ff952c0eab010f04dcd2c3494e813b493ecfd4fcb9fc0d8","impliedFormat":1},{"version":"68d73b4a11549f9c0b7d352d10e91e5dca8faa3322bfb77b661839c42b1ddec7","impliedFormat":1},{"version":"5efce4fc3c29ea84e8928f97adec086e3dc876365e0982cc8479a07954a3efd4","impliedFormat":1},{"version":"feecb1be483ed332fad555aff858affd90a48ab19ba7272ee084704eb7167569","impliedFormat":1},{"version":"ee7bad0c15b58988daa84371e0b89d313b762ab83cb5b31b8a2d1162e8eb41c2","impliedFormat":1},{"version":"092c2bfe125ce69dbb1223c85d68d4d2397d7d8411867b5cc03cec902c233763","affectsGlobalScope":true,"impliedFormat":1},{"version":"07f073f19d67f74d732b1adea08e1dc66b1b58d77cb5b43931dee3d798a2fd53","affectsGlobalScope":true,"impliedFormat":1},{"version":"c57796738e7f83dbc4b8e65132f11a377649c00dd3eee333f672b8f0a6bea671","affectsGlobalScope":true,"impliedFormat":1},{"version":"dc2df20b1bcdc8c2d34af4926e2c3ab15ffe1160a63e58b7e09833f616efff44","affectsGlobalScope":true,"impliedFormat":1},{"version":"515d0b7b9bea2e31ea4ec968e9edd2c39d3eebf4a2d5cbd04e88639819ae3b71","affectsGlobalScope":true,"impliedFormat":1},{"version":"0559b1f683ac7505ae451f9a96ce4c3c92bdc71411651ca6ddb0e88baaaad6a3","affectsGlobalScope":true,"impliedFormat":1},{"version":"0dc1e7ceda9b8b9b455c3a2d67b0412feab00bd2f66656cd8850e8831b08b537","affectsGlobalScope":true,"impliedFormat":1},{"version":"ce691fb9e5c64efb9547083e4a34091bcbe5bdb41027e310ebba8f7d96a98671","affectsGlobalScope":true,"impliedFormat":1},{"version":"8d697a2a929a5fcb38b7a65594020fcef05ec1630804a33748829c5ff53640d0","affectsGlobalScope":true,"impliedFormat":1},{"version":"4ff2a353abf8a80ee399af572debb8faab2d33ad38c4b4474cff7f26e7653b8d","affectsGlobalScope":true,"impliedFormat":1},{"version":"936e80ad36a2ee83fc3caf008e7c4c5afe45b3cf3d5c24408f039c1d47bdc1df","affectsGlobalScope":true,"impliedFormat":1},{"version":"d15bea3d62cbbdb9797079416b8ac375ae99162a7fba5de2c6c505446486ac0a","affectsGlobalScope":true,"impliedFormat":1},{"version":"68d18b664c9d32a7336a70235958b8997ebc1c3b8505f4f1ae2b7e7753b87618","affectsGlobalScope":true,"impliedFormat":1},{"version":"eb3d66c8327153d8fa7dd03f9c58d351107fe824c79e9b56b462935176cdf12a","affectsGlobalScope":true,"impliedFormat":1},{"version":"38f0219c9e23c915ef9790ab1d680440d95419ad264816fa15009a8851e79119","affectsGlobalScope":true,"impliedFormat":1},{"version":"69ab18c3b76cd9b1be3d188eaf8bba06112ebbe2f47f6c322b5105a6fbc45a2e","affectsGlobalScope":true,"impliedFormat":1},{"version":"fef8cfad2e2dc5f5b3d97a6f4f2e92848eb1b88e897bb7318cef0e2820bceaab","affectsGlobalScope":true,"impliedFormat":1},{"version":"2f11ff796926e0832f9ae148008138ad583bd181899ab7dd768a2666700b1893","affectsGlobalScope":true,"impliedFormat":1},{"version":"4de680d5bb41c17f7f68e0419412ca23c98d5749dcaaea1896172f06435891fc","affectsGlobalScope":true,"impliedFormat":1},{"version":"954296b30da6d508a104a3a0b5d96b76495c709785c1d11610908e63481ee667","affectsGlobalScope":true,"impliedFormat":1},{"version":"ac9538681b19688c8eae65811b329d3744af679e0bdfa5d842d0e32524c73e1c","affectsGlobalScope":true,"impliedFormat":1},{"version":"0a969edff4bd52585473d24995c5ef223f6652d6ef46193309b3921d65dd4376","affectsGlobalScope":true,"impliedFormat":1},{"version":"9e9fbd7030c440b33d021da145d3232984c8bb7916f277e8ffd3dc2e3eae2bdb","affectsGlobalScope":true,"impliedFormat":1},{"version":"811ec78f7fefcabbda4bfa93b3eb67d9ae166ef95f9bff989d964061cbf81a0c","affectsGlobalScope":true,"impliedFormat":1},{"version":"717937616a17072082152a2ef351cb51f98802fb4b2fdabd32399843875974ca","affectsGlobalScope":true,"impliedFormat":1},{"version":"d7e7d9b7b50e5f22c915b525acc5a49a7a6584cf8f62d0569e557c5cfc4b2ac2","affectsGlobalScope":true,"impliedFormat":1},{"version":"71c37f4c9543f31dfced6c7840e068c5a5aacb7b89111a4364b1d5276b852557","affectsGlobalScope":true,"impliedFormat":1},{"version":"576711e016cf4f1804676043e6a0a5414252560eb57de9faceee34d79798c850","affectsGlobalScope":true,"impliedFormat":1},{"version":"89c1b1281ba7b8a96efc676b11b264de7a8374c5ea1e6617f11880a13fc56dc6","affectsGlobalScope":true,"impliedFormat":1},{"version":"74f7fa2d027d5b33eb0471c8e82a6c87216223181ec31247c357a3e8e2fddc5b","affectsGlobalScope":true,"impliedFormat":1},{"version":"d6d7ae4d1f1f3772e2a3cde568ed08991a8ae34a080ff1151af28b7f798e22ca","affectsGlobalScope":true,"impliedFormat":1},{"version":"063600664504610fe3e99b717a1223f8b1900087fab0b4cad1496a114744f8df","affectsGlobalScope":true,"impliedFormat":1},{"version":"934019d7e3c81950f9a8426d093458b65d5aff2c7c1511233c0fd5b941e608ab","affectsGlobalScope":true,"impliedFormat":1},{"version":"52ada8e0b6e0482b728070b7639ee42e83a9b1c22d205992756fe020fd9f4a47","affectsGlobalScope":true,"impliedFormat":1},{"version":"3bdefe1bfd4d6dee0e26f928f93ccc128f1b64d5d501ff4a8cf3c6371200e5e6","affectsGlobalScope":true,"impliedFormat":1},{"version":"59fb2c069260b4ba00b5643b907ef5d5341b167e7d1dbf58dfd895658bda2867","affectsGlobalScope":true,"impliedFormat":1},{"version":"639e512c0dfc3fad96a84caad71b8834d66329a1f28dc95e3946c9b58176c73a","affectsGlobalScope":true,"impliedFormat":1},{"version":"368af93f74c9c932edd84c58883e736c9e3d53cec1fe24c0b0ff451f529ceab1","affectsGlobalScope":true,"impliedFormat":1},{"version":"af3dd424cf267428f30ccfc376f47a2c0114546b55c44d8c0f1d57d841e28d74","affectsGlobalScope":true,"impliedFormat":1},{"version":"995c005ab91a498455ea8dfb63aa9f83fa2ea793c3d8aa344be4a1678d06d399","affectsGlobalScope":true,"impliedFormat":1},{"version":"959d36cddf5e7d572a65045b876f2956c973a586da58e5d26cde519184fd9b8a","affectsGlobalScope":true,"impliedFormat":1},{"version":"965f36eae237dd74e6cca203a43e9ca801ce38824ead814728a2807b1910117d","affectsGlobalScope":true,"impliedFormat":1},{"version":"3925a6c820dcb1a06506c90b1577db1fdbf7705d65b62b99dce4be75c637e26b","affectsGlobalScope":true,"impliedFormat":1},{"version":"0a3d63ef2b853447ec4f749d3f368ce642264246e02911fcb1590d8c161b8005","affectsGlobalScope":true,"impliedFormat":1},{"version":"b5ce7a470bc3628408429040c4e3a53a27755022a32fd05e2cb694e7015386c7","affectsGlobalScope":true,"impliedFormat":1},{"version":"8444af78980e3b20b49324f4a16ba35024fef3ee069a0eb67616ea6ca821c47a","affectsGlobalScope":true,"impliedFormat":1},{"version":"3287d9d085fbd618c3971944b65b4be57859f5415f495b33a6adc994edd2f004","affectsGlobalScope":true,"impliedFormat":1},{"version":"b4b67b1a91182421f5df999988c690f14d813b9850b40acd06ed44691f6727ad","affectsGlobalScope":true,"impliedFormat":1},{"version":"8e7f8264d0fb4c5339605a15daadb037bf238c10b654bb3eee14208f860a32ea","affectsGlobalScope":true,"impliedFormat":1},{"version":"782dec38049b92d4e85c1585fbea5474a219c6984a35b004963b00beb1aab538","affectsGlobalScope":true,"impliedFormat":1},{"version":"6bbaa172e4398e6562365e7dca6c2639b8a595b55046c6055706dd2923f7d7c2","impliedFormat":99},{"version":"d3cfde44f8089768ebb08098c96d01ca260b88bccf238d55eee93f1c620ff5a5","impliedFormat":1},{"version":"293eadad9dead44c6fd1db6de552663c33f215c55a1bfa2802a1bceed88ff0ec","impliedFormat":1},{"version":"54f6ec6ea75acea6eb23635617252d249145edbc7bcd9d53f2d70280d2aef953","impliedFormat":1},{"version":"c25ce98cca43a3bfa885862044be0d59557be4ecd06989b2001a83dcf69620fd","impliedFormat":1},{"version":"8e71e53b02c152a38af6aec45e288cc65bede077b92b9b43b3cb54a37978bb33","impliedFormat":1},{"version":"754a9396b14ca3a4241591afb4edc644b293ccc8a3397f49be4dfd520c08acb3","impliedFormat":1},{"version":"f672c876c1a04a223cf2023b3d91e8a52bb1544c576b81bf64a8fec82be9969c","impliedFormat":1},{"version":"e4b03ddcf8563b1c0aee782a185286ed85a255ce8a30df8453aade2188bbc904","impliedFormat":1},{"version":"de2316e90fc6d379d83002f04ad9698bc1e5285b4d52779778f454dd12ce9f44","impliedFormat":1},{"version":"25b3f581e12ede11e5739f57a86e8668fbc0124f6649506def306cad2c59d262","impliedFormat":1},{"version":"2da997a01a6aa5c5c09de5d28f0f4407b597c5e1aecfd32f1815809c532650a2","impliedFormat":1},{"version":"5d26d2e47e2352def36f89a3e8bf8581da22b7f857e07ef3114cd52cf4813445","impliedFormat":1},{"version":"3db2efd285e7328d8014b54a7fce3f4861ebcdc655df40517092ed0050983617","impliedFormat":1},{"version":"d5d39a24c759df40480a4bfc0daffd364489702fdbcbdfc1711cde34f8739995","impliedFormat":1},{"version":"b4cf968abdb59faf21fa8a38457bc6d31cc18eff07c1d5f40df95ad87a0b6e80","impliedFormat":99},{"version":"a07daee7d2bf3132c437203f2fb694776a938075b570d339e0d482d85ff3b608","impliedFormat":99},{"version":"adad4d546baa527566e61d0b9625bd5c786715ded16850fbcb0f4b25ced1fd33","signature":"ff5dcf4372c1330044018126270451c0d9a4c63f83c739b9334991468061ae4a"},{"version":"e3673b0d742074da84f4f08b6599338ab7ccfa3bd33bd0b2bac16a963d243b05","signature":"cf35357b11c3ac5385c3fa30335fa725786740b313893fb8df0e6538d8ba9664"},{"version":"4db276a3cdd1fdc6a188413eb1b8758795091e3bde8a46c6ae54319e094c16f0","signature":"21ee733142093f600a17abcecc4424cc54ce71e36c4eabedc505884c29c36cc8"},{"version":"ef1315d0f37611ccbfbbd67023a5582de409fb0eae9ecf5439a73e0a8466303a","signature":"7471d777fed535cf522ba905657d57e733f54f2a5073e6fd208365b79c6b1003"},{"version":"6c7176368037af28cb72f2392010fa1cef295d6d6744bca8cfb54985f3a18c3e","affectsGlobalScope":true,"impliedFormat":1},{"version":"ab41ef1f2cdafb8df48be20cd969d875602483859dc194e9c97c8a576892c052","affectsGlobalScope":true,"impliedFormat":1},{"version":"437e20f2ba32abaeb7985e0afe0002de1917bc74e949ba585e49feba65da6ca1","affectsGlobalScope":true,"impliedFormat":1},{"version":"21d819c173c0cf7cc3ce57c3276e77fd9a8a01d35a06ad87158781515c9a438a","impliedFormat":1},{"version":"a79e62f1e20467e11a904399b8b18b18c0c6eea6b50c1168bf215356d5bebfaf","affectsGlobalScope":true,"impliedFormat":1},{"version":"d802f0e6b5188646d307f070d83512e8eb94651858de8a82d1e47f60fb6da4e2","affectsGlobalScope":true,"impliedFormat":1},{"version":"4967529644e391115ca5592184d4b63980569adf60ee685f968fd59ab1557188","impliedFormat":1},{"version":"5929864ce17fba74232584d90cb721a89b7ad277220627cc97054ba15a98ea8f","impliedFormat":1},{"version":"763fe0f42b3d79b440a9b6e51e9ba3f3f91352469c1e4b3b67bfa4ff6352f3f4","impliedFormat":1},{"version":"25c8056edf4314820382a5fdb4bb7816999acdcb929c8f75e3f39473b87e85bc","impliedFormat":1},{"version":"c464d66b20788266e5353b48dc4aa6bc0dc4a707276df1e7152ab0c9ae21fad8","impliedFormat":1},{"version":"78d0d27c130d35c60b5e5566c9f1e5be77caf39804636bc1a40133919a949f21","impliedFormat":1},{"version":"c6fd2c5a395f2432786c9cb8deb870b9b0e8ff7e22c029954fabdd692bff6195","impliedFormat":1},{"version":"1d6e127068ea8e104a912e42fc0a110e2aa5a66a356a917a163e8cf9a65e4a75","impliedFormat":1},{"version":"5ded6427296cdf3b9542de4471d2aa8d3983671d4cac0f4bf9c637208d1ced43","impliedFormat":1},{"version":"7f182617db458e98fc18dfb272d40aa2fff3a353c44a89b2c0ccb3937709bfb5","impliedFormat":1},{"version":"cadc8aced301244057c4e7e73fbcae534b0f5b12a37b150d80e5a45aa4bebcbd","impliedFormat":1},{"version":"385aab901643aa54e1c36f5ef3107913b10d1b5bb8cbcd933d4263b80a0d7f20","impliedFormat":1},{"version":"9670d44354bab9d9982eca21945686b5c24a3f893db73c0dae0fd74217a4c219","impliedFormat":1},{"version":"0b8a9268adaf4da35e7fa830c8981cfa22adbbe5b3f6f5ab91f6658899e657a7","impliedFormat":1},{"version":"11396ed8a44c02ab9798b7dca436009f866e8dae3c9c25e8c1fbc396880bf1bb","impliedFormat":1},{"version":"ba7bc87d01492633cb5a0e5da8a4a42a1c86270e7b3d2dea5d156828a84e4882","impliedFormat":1},{"version":"4893a895ea92c85345017a04ed427cbd6a1710453338df26881a6019432febdd","impliedFormat":1},{"version":"c21dc52e277bcfc75fac0436ccb75c204f9e1b3fa5e12729670910639f27343e","impliedFormat":1},{"version":"13f6f39e12b1518c6650bbb220c8985999020fe0f21d818e28f512b7771d00f9","impliedFormat":1},{"version":"9b5369969f6e7175740bf51223112ff209f94ba43ecd3bb09eefff9fd675624a","impliedFormat":1},{"version":"4fe9e626e7164748e8769bbf74b538e09607f07ed17c2f20af8d680ee49fc1da","impliedFormat":1},{"version":"24515859bc0b836719105bb6cc3d68255042a9f02a6022b3187948b204946bd2","impliedFormat":1},{"version":"ea0148f897b45a76544ae179784c95af1bd6721b8610af9ffa467a518a086a43","impliedFormat":1},{"version":"24c6a117721e606c9984335f71711877293a9651e44f59f3d21c1ea0856f9cc9","impliedFormat":1},{"version":"dd3273ead9fbde62a72949c97dbec2247ea08e0c6952e701a483d74ef92d6a17","impliedFormat":1},{"version":"405822be75ad3e4d162e07439bac80c6bcc6dbae1929e179cf467ec0b9ee4e2e","impliedFormat":1},{"version":"0db18c6e78ea846316c012478888f33c11ffadab9efd1cc8bcc12daded7a60b6","impliedFormat":1},{"version":"e61be3f894b41b7baa1fbd6a66893f2579bfad01d208b4ff61daef21493ef0a8","impliedFormat":1},{"version":"bd0532fd6556073727d28da0edfd1736417a3f9f394877b6d5ef6ad88fba1d1a","impliedFormat":1},{"version":"89167d696a849fce5ca508032aabfe901c0868f833a8625d5a9c6e861ef935d2","impliedFormat":1},{"version":"615ba88d0128ed16bf83ef8ccbb6aff05c3ee2db1cc0f89ab50a4939bfc1943f","impliedFormat":1},{"version":"a4d551dbf8746780194d550c88f26cf937caf8d56f102969a110cfaed4b06656","impliedFormat":1},{"version":"8bd86b8e8f6a6aa6c49b71e14c4ffe1211a0e97c80f08d2c8cc98838006e4b88","impliedFormat":1},{"version":"317e63deeb21ac07f3992f5b50cdca8338f10acd4fbb7257ebf56735bf52ab00","impliedFormat":1},{"version":"4732aec92b20fb28c5fe9ad99521fb59974289ed1e45aecb282616202184064f","impliedFormat":1},{"version":"2e85db9e6fd73cfa3d7f28e0ab6b55417ea18931423bd47b409a96e4a169e8e6","impliedFormat":1},{"version":"c46e079fe54c76f95c67fb89081b3e399da2c7d109e7dca8e4b58d83e332e605","impliedFormat":1},{"version":"bf67d53d168abc1298888693338cb82854bdb2e69ef83f8a0092093c2d562107","impliedFormat":1},{"version":"a12d953aa755b14ac1d28ecdc1e184f3285b01d6d1e58abc11bf1826bc9d80e6","affectsGlobalScope":true,"impliedFormat":1},{"version":"a38efe83ff77c34e0f418a806a01ca3910c02ee7d64212a59d59bca6c2c38fa1","impliedFormat":1},{"version":"7394959e5a741b185456e1ef5d64599c36c60a323207450991e7a42e08911419","impliedFormat":1},{"version":"3fe4022ba1e738034e38ad9afacbf0f1f16b458ed516326f5bf9e4a31e9be1dc","impliedFormat":1},{"version":"a957197054b074bcdf5555d26286e8461680c7c878040d0f4e2d5509a7524944","affectsGlobalScope":true,"impliedFormat":1},{"version":"4314c7a11517e221f7296b46547dbc4df047115b182f544d072bdccffa57fc72","impliedFormat":1},{"version":"e9b97d69510658d2f4199b7d384326b7c4053b9e6645f5c19e1c2a54ede427fc","impliedFormat":1},{"version":"c2510f124c0293ab80b1777c44d80f812b75612f297b9857406468c0f4dafe29","affectsGlobalScope":true,"impliedFormat":1},{"version":"5524481e56c48ff486f42926778c0a3cce1cc85dc46683b92b1271865bcf015a","impliedFormat":1},{"version":"f478f6f5902dc144c0d6d7bdc919c5177cac4d17a8ca8653c2daf6d7dc94317f","affectsGlobalScope":true,"impliedFormat":1},{"version":"19d5f8d3930e9f99aa2c36258bf95abbe5adf7e889e6181872d1cdba7c9a7dd5","impliedFormat":1},{"version":"9855e02d837744303391e5623a531734443a5f8e6e8755e018c41d63ad797db2","impliedFormat":1},{"version":"a6bf63d17324010ca1fbf0389cab83f93389bb0b9a01dc8a346d092f65b3605f","impliedFormat":1},{"version":"e009777bef4b023a999b2e5b9a136ff2cde37dc3f77c744a02840f05b18be8ff","impliedFormat":1},{"version":"1e0d1f8b0adfa0b0330e028c7941b5a98c08b600efe7f14d2d2a00854fb2f393","impliedFormat":1},{"version":"71450bbc2d82821d24ca05699a533e72758964e9852062c53b30f31c36978ab8","affectsGlobalScope":true,"impliedFormat":1},{"version":"88bc59b32d0d5b4e5d9632ac38edea23454057e643684c3c0b94511296f2998c","affectsGlobalScope":true,"impliedFormat":1},{"version":"a0a1dda070290b92da5a50113b73ecc4dd6bcbffad66e3c86503d483eafbadcf","impliedFormat":1},{"version":"59dcad36c4549175a25998f6a8b33c1df8e18df9c12ebad1dfb25af13fd4b1ce","impliedFormat":1},{"version":"206a70e72af3e24688397b81304358526ce70d020e4c2606c4acfd1fa1e81fb2","impliedFormat":1},{"version":"017caf5d2a8ef581cf94f678af6ce7415e06956317946315560f1487b9a56167","impliedFormat":1},{"version":"528b62e4272e3ddfb50e8eed9e359dedea0a4d171c3eb8f337f4892aac37b24b","impliedFormat":1},{"version":"d71535813e39c23baa113bc4a29a0e187b87d1105ccc8c5a6ebaca38d9a9bff2","impliedFormat":1},{"version":"4c3148420835de895b9218b2cea321a4607008ba5cefa57b2a57e1c1ef85d22f","affectsGlobalScope":true,"impliedFormat":1},{"version":"f72bc8fe16da67e4e3268599295797b202b95e54bd215a03f97e925dd1502a36","impliedFormat":1},{"version":"b1b6ee0d012aeebe11d776a155d8979730440082797695fc8e2a5c326285678f","impliedFormat":1},{"version":"45875bcae57270aeb3ebc73a5e3fb4c7b9d91d6b045f107c1d8513c28ece71c0","impliedFormat":1},{"version":"915e18c559321c0afaa8d34674d3eb77e1ded12c3e85bf2a9891ec48b07a1ca5","affectsGlobalScope":true,"impliedFormat":1},{"version":"636302a00dfd1f9fe6e8e91e4e9350c6518dcc8d51a474e4fc3a9ba07135100b","affectsGlobalScope":true,"impliedFormat":1},{"version":"3f16a7e4deafa527ed9995a772bb380eb7d3c2c0fd4ae178c5263ed18394db2c","impliedFormat":1},{"version":"933921f0bb0ec12ef45d1062a1fc0f27635318f4d294e4d99de9a5493e618ca2","impliedFormat":1},{"version":"71a0f3ad612c123b57239a7749770017ecfe6b66411488000aba83e4546fde25","impliedFormat":1},{"version":"8145e07aad6da5f23f2fcd8c8e4c5c13fb26ee986a79d03b0829b8fce152d8b2","impliedFormat":1},{"version":"e1120271ebbc9952fdc7b2dd3e145560e52e06956345e6fdf91d70ca4886464f","impliedFormat":1},{"version":"814118df420c4e38fe5ae1b9a3bafb6e9c2aa40838e528cde908381867be6466","impliedFormat":1},{"version":"e1ce1d622f1e561f6cdf246372ead3bbc07ce0342024d0e9c7caf3136f712698","impliedFormat":1},{"version":"199c8269497136f3a0f4da1d1d90ab033f899f070e0dd801946f2a241c8abba2","impliedFormat":1},{"version":"37ba7b45141a45ce6e80e66f2a96c8a5ab1bcef0fc2d0f56bb58df96ec67e972","impliedFormat":1},{"version":"125d792ec6c0c0f657d758055c494301cc5fdb327d9d9d5960b3f129aff76093","impliedFormat":1},{"version":"27e4532aaaa1665d0dd19023321e4dc12a35a741d6b8e1ca3517fcc2544e0efe","affectsGlobalScope":true,"impliedFormat":1},{"version":"2754d8221d77c7b382096651925eb476f1066b3348da4b73fe71ced7801edada","impliedFormat":1},{"version":"6266d94fb9165d42716e45f3a537ca9f59c07b1dfa8394a659acf139134807db","affectsGlobalScope":true,"impliedFormat":1},{"version":"f0be1b8078cd549d91f37c30c222c2a187ac1cf981d994fb476a1adc61387b14","affectsGlobalScope":true,"impliedFormat":1},{"version":"0aaed1d72199b01234152f7a60046bc947f1f37d78d182e9ae09c4289e06a592","impliedFormat":1},{"version":"98ffdf93dfdd206516971d28e3e473f417a5cfd41172e46b4ce45008f640588e","impliedFormat":1},{"version":"66ba1b2c3e3a3644a1011cd530fb444a96b1b2dfe2f5e837a002d41a1a799e60","impliedFormat":1},{"version":"7e514f5b852fdbc166b539fdd1f4e9114f29911592a5eb10a94bb3a13ccac3c4","impliedFormat":1},{"version":"7d6ff413e198d25639f9f01f16673e7df4e4bd2875a42455afd4ecc02ef156da","affectsGlobalScope":true,"impliedFormat":1},{"version":"a7692a54334fd08960cd0c610ff509c2caa93998e0dcefa54021489bcc67c22d","affectsGlobalScope":true,"impliedFormat":1},{"version":"74736930d108365d7bbe740c7154706ccfb1b2a3855a897963ab3e5c07ecbf19","impliedFormat":1},{"version":"3a051941721a7f905544732b0eb819c8d88333a96576b13af08b82c4f17581e4","impliedFormat":1},{"version":"ac5ed35e649cdd8143131964336ab9076937fa91802ec760b3ea63b59175c10a","impliedFormat":1},{"version":"1e25f8d0a8573cafd5b5a16af22d26ab872068a693b9dbccd3f72846ab373655","affectsGlobalScope":true,"impliedFormat":1},{"version":"3797dd6f4ea3dc15f356f8cdd3128bfa18122213b38a80d6c1f05d8e13cbdad8","impliedFormat":1},{"version":"ad90122e1cb599b3bc06a11710eb5489101be678f2920f2322b0ac3e195af78d","impliedFormat":1},{"version":"316f1486e15cbf7896425f0a16dfe12d447dd57cfb3244b8b119c77df870858f","impliedFormat":99},{"version":"dbde42ccb4f43c83fa599c786178a43034a3a209fa9742ea58421c3cd56a9e17","signature":"3b11ef5c155854118ddea86989898b115c10fa855264dae68e5257b5433ed7a1"},{"version":"1feddc191881ecc8ea1613ee5eb4c3560a1f905cd6c715dbdf613382a9cbf879","signature":"a82ef7f528f27e27e6c4ae736431ca7e0bea2f8ab3be95a2ec39913e4fcd78bc"},{"version":"aebb775370916c8afc13c7ea8596dd41d004b4a959ff6210ddd8cb3df24fa543","signature":"67e963223c23b123a72306ad2f9109580dc0094cc6270ad60468378dccd176b6"},"3600aa28381c6f0632ed1ff89be8cde6fb2179f7795aaf26d9da61d6936f212b",{"version":"2556e7e8bb7e6f0bb3fe25f3da990d1812cb91f8c9b389354b6a0c8a6d687590","impliedFormat":99},{"version":"ad1c91ca536e0962dcbfcdff40073e3dd18da839e0baad3fe990cf0d10c93065","impliedFormat":99},{"version":"19cf605ba2a4e8fba017edebdddbbc45aea897ddc58b4aae4c55f382b570ff53","impliedFormat":99},{"version":"884aab8c07224434c034b49e88de0511f21536aa83ee88f1285160ba6d3fb77a","impliedFormat":99},{"version":"130b39b18c99e5678635f383ef57efaa507196838ddabb47cb104064e2ce4cd3","impliedFormat":99},{"version":"7618d2cb769e2093acd4623d645b683ab9fea78c262b3aa354aba9f5afdcaaee","impliedFormat":99},{"version":"029f1ce606891c3f57f4c0c60b8a46c8ced53e719d27a7c9693817f2fe37690b","impliedFormat":99},{"version":"83596c963e276a9c5911412fba37ae7c1fe280f2d77329928828eed5a3bfa9a6","impliedFormat":99},{"version":"81acfd3a01767770e559bc57d32684756989475be6ea32e2fe6255472c3ea116","impliedFormat":99},{"version":"88d0c3eae81868b4749ba5b88f9b6d564ee748321ce19a2f4269a4e9dd46020a","impliedFormat":99},{"version":"8266b39a828bfb2695cabfa403e7c1226d7d94599f21bea9f760e35f4ca7a576","impliedFormat":99},{"version":"c1c1e740195c882a776cf084acbaf963907785ee39e723c6375fec9a59bf2387","impliedFormat":99},{"version":"137f96b78e477e08876f6372072c3b6f1767672bf182013f84f8ae53d987ff86","impliedFormat":99},{"version":"29896c61d09880ff39f8a86873bf72ce4deb910158d3a496122781e29904c615","impliedFormat":99},{"version":"81ce540acef0d6972b0b163331583181be3603300f618dcd6a6a3138954ff30c","impliedFormat":99},{"version":"19990350fca066265b2c190c9b6cde1229f35002ea2d4df8c9e397e9942f6c89","impliedFormat":99},{"version":"8fb8fdda477cd7382477ffda92c2bb7d9f7ef583b1aa531eb6b2dc2f0a206c10","impliedFormat":99},{"version":"66995b0c991b5c5d42eff1d950733f85482c7419f7296ab8952e03718169e379","impliedFormat":99},{"version":"9863f888da357e35e013ca3465b794a490a198226bd8232c2f81fb44e16ff323","impliedFormat":99},{"version":"84bc2d80326a83ee4a6e7cba2fd480b86502660770c0e24da96535af597c9f1e","impliedFormat":99},{"version":"ea27768379b866ee3f5da2419650acdb01125479f7af73580a4bceb25b79e372","impliedFormat":99},{"version":"598931eeb4362542cae5845f95c5f0e45ac668925a40ce201e244d7fe808e965","impliedFormat":99},{"version":"da9ef88cde9f715756da642ad80c4cd87a987f465d325462d6bc2a0b11d202c8","impliedFormat":99},{"version":"b4c6184d78303b0816e779a48bef779b15aea4a66028eb819aac0abee8407dea","impliedFormat":99},{"version":"db085d2171d48938a99e851dafe0e486dce9859e5dfa73c21de5ed3d4d6fb0c5","impliedFormat":99},{"version":"62a3ad1ddd1f5974b3bf105680b3e09420f2230711d6520a521fab2be1a32838","impliedFormat":99},{"version":"a77be6fc44c876bc10c897107f84eaba10790913ebdcad40fcda7e47469b2160","impliedFormat":99},{"version":"06cf55b6da5cef54eaaf51cdc3d4e5ebf16adfdd9ebd20cec7fe719be9ced017","impliedFormat":99},{"version":"91f5dbcdb25d145a56cffe957ec665256827892d779ef108eb2f3864faff523b","impliedFormat":99},{"version":"052ba354bab8fb943e0bc05a0769f7b81d7c3b3c6cd0f5cfa53c7b2da2a525c5","impliedFormat":99},{"version":"927955a3de5857e0a1c575ced5a4245e74e6821d720ed213141347dd1870197f","impliedFormat":99},{"version":"fec804d54cd97dd77e956232fc37dc13f53e160d4bbeeb5489e86eeaa91f7ebd","impliedFormat":99},{"version":"75ef949153a3e6ff419e39d0fa5eb6617e92de5019738ad3c43872023d9665f5","impliedFormat":99},{"version":"ed9ce8e6dd5b2d00ab95efc44e4ad9d0eba77362e01619cb21dedfdedbad51b8","impliedFormat":1},{"version":"5520611f997f2b8e62a6e191da45b07813ac2e758304690606604a64ac0ca976","impliedFormat":1},{"version":"00b469cba48c9d772a4555216d21ba41cdb5a732af797ccb57267344f4fc6c3d","impliedFormat":1},{"version":"2766bf77766c85c25ec31586823fefb48344e64556faad7e75a3363e517814f6","impliedFormat":1},{"version":"b7d1eaffd8003e8dc0ec275e58bd24c7b9a4dbae2a2d0d83cf248c88237262ce","impliedFormat":99},{"version":"7a8b08c0521c3a9e1db3c8b14f37e59d838fdc32389f1193b96630b435a8e64e","impliedFormat":99},{"version":"2e54848617fae9eb73654d9cf4295d99dab4b9c759934e5b82e2e57e6aaaef20","impliedFormat":99},{"version":"ae056b7c3f727d492166d4c1169d5905ddd194128a014b5d2d621248ed94b49c","impliedFormat":99},{"version":"edc5d99a04130f066f6e8d31c7c3f9ba4749496356470279408833b4faee3554","impliedFormat":99},{"version":"2f502ac2473a2bbf0d6217f9660e9d5bf40165a2f91067596323898c53dab87c","impliedFormat":99},{"version":"21f27a0c8bc8d9a4e2cf6d9c60140f8b071d0e1ffddb4b7dcf6bbf74d0e8d470","impliedFormat":99},{"version":"754108a1e136331ac67dc8ee6aa9c95cb3bea3ac8bbf48dda7b0dbabbc8f970f","impliedFormat":99},{"version":"9e9979adc151111d71ad049305be1b6df324a98d1d1edd84adb1756cc1911bfd","impliedFormat":99},{"version":"0f38bcf19f105cd31ded5d46491ca50a46462c838816c358d445f41ac7a68f5a","impliedFormat":99},{"version":"a65fc667cd78d7cad733fab96f4bff3183c0dcbc15b083dce0055cffc5c64f9f","impliedFormat":99},{"version":"c735e27dfa775155120c50f714f594639dd7b6ad1878097feb005a0b5c59b7c2","impliedFormat":99},{"version":"f3dd541f4d87bba38dabf43fd06b7616c6f86b11608d30e61086ab39f84fa8d8","impliedFormat":99},{"version":"5583f1c0912e96625a30c20b83cff3d175194b222e4eb22170d19e33f7d8729f","impliedFormat":99},{"version":"a515b08047d24de84d89ad80b2843e565e65ed4a4e7cfc9707656470d7c555f9","impliedFormat":99},{"version":"cf43b2783a58e42fca6e45f0d47465b2ab855b7e9bea5ccb68447297df8aade5","impliedFormat":99},{"version":"27a3f158d8e6f59f29e55c37d4ae3c39574ee99539c4f12bcf46d29929974a62","impliedFormat":99},{"version":"a2d23e2f22006483c89f42077bd6a9bf92db721ebb5e0859b06fdb5c8369586d","impliedFormat":99},{"version":"6a8aec6851c09e4524937485f6553ec7332118482f3ed33238cea7496ff42103","impliedFormat":99},{"version":"d67fd6ea8cf37131627c7a9ae1de96d19d41cb32e741a475f0f56942576a7b3b","impliedFormat":99},{"version":"9b2f424a2c5c592d738100d898df3f9ee018bdd23a279f10849c3686abbec158","impliedFormat":99},{"version":"2fef96aedd23d59b6093d12d9f97c95e3a4008fcc02e8c68304235a1770fc70a","impliedFormat":99},{"version":"cdcf9ea426ad970f96ac930cd176d5c69c6c24eebd9fc580e1572d6c6a88f62c","impliedFormat":1},{"version":"23cd712e2ce083d68afe69224587438e5914b457b8acf87073c22494d706a3d0","impliedFormat":1},{"version":"487b694c3de27ddf4ad107d4007ad304d29effccf9800c8ae23c2093638d906a","impliedFormat":1},{"version":"e525f9e67f5ddba7b5548430211cae2479070b70ef1fd93550c96c10529457bd","impliedFormat":1},{"version":"ccf4552357ce3c159ef75f0f0114e80401702228f1898bdc9402214c9499e8c0","impliedFormat":1},{"version":"c6fd2c5a395f2432786c9cb8deb870b9b0e8ff7e22c029954fabdd692bff6195","impliedFormat":1},{"version":"68834d631c8838c715f225509cfc3927913b9cc7a4870460b5b60c8dbdb99baf","impliedFormat":1},{"version":"4bc0794175abedf989547e628949888c1085b1efcd93fc482bccd77ee27f8b7c","impliedFormat":1},{"version":"3c8e93af4d6ce21eb4c8d005ad6dc02e7b5e6781f429d52a35290210f495a674","impliedFormat":1},{"version":"2c9875466123715464539bfd69bcaccb8ff6f3e217809428e0d7bd6323416d01","impliedFormat":1},{"version":"ea6bc8de8b59f90a7a3960005fd01988f98fd0784e14bc6922dde2e93305ec7d","impliedFormat":1},{"version":"36107995674b29284a115e21a0618c4c2751b32a8766dd4cb3ba740308b16d59","impliedFormat":1},{"version":"914a0ae30d96d71915fc519ccb4efbf2b62c0ddfb3a3fc6129151076bc01dc60","impliedFormat":1},{"version":"33e981bf6376e939f99bd7f89abec757c64897d33c005036b9a10d9587d80187","impliedFormat":1},{"version":"6c8e442ba33b07892169a14f7757321e49ab0f1032d676d321a1fdab8a67d40c","impliedFormat":1},{"version":"b41767d372275c154c7ea6c9d5449d9a741b8ce080f640155cc88ba1763e35b3","impliedFormat":1},{"version":"1cd673d367293fc5cb31cd7bf03d598eb368e4f31f39cf2b908abbaf120ab85a","impliedFormat":1},{"version":"af13e99445f37022c730bfcafcdc1761e9382ce1ea02afb678e3130b01ce5676","impliedFormat":1},{"version":"3825bf209f1662dfd039010a27747b73d0ef379f79970b1d05601ec8e8a4249f","impliedFormat":1},{"version":"0b6e25234b4eec6ed96ab138d96eb70b135690d7dd01f3dd8a8ab291c35a683a","impliedFormat":1},{"version":"9666f2f84b985b62400d2e5ab0adae9ff44de9b2a34803c2c5bd3c8325b17dc0","impliedFormat":1},{"version":"da52342062e70c77213e45107921100ba9f9b3a30dd019444cf349e5fb3470c4","impliedFormat":1},{"version":"e9ace91946385d29192766bf783b8460c7dbcbfc63284aa3c9cae6de5155c8bc","impliedFormat":1},{"version":"40b463c6766ca1b689bfcc46d26b5e295954f32ad43e37ee6953c0a677e4ae2b","impliedFormat":1},{"version":"249b9cab7f5d628b71308c7d9bb0a808b50b091e640ba3ed6e2d0516f4a8d91d","impliedFormat":1},{"version":"1e30c045732e7db8f7a82cf90b516ebe693d2f499ce2250a977ec0d12e44a529","impliedFormat":1},{"version":"84b736594d8760f43400202859cda55607663090a43445a078963031d47e25e7","impliedFormat":1},{"version":"499e5b055a5aba1e1998f7311a6c441a369831c70905cc565ceac93c28083d53","impliedFormat":1},{"version":"54c3e2371e3d016469ad959697fd257e5621e16296fa67082c2575d0bf8eced0","impliedFormat":1},{"version":"beb8233b2c220cfa0feea31fbe9218d89fa02faa81ef744be8dce5acb89bb1fd","impliedFormat":1},{"version":"78b29846349d4dfdd88bd6650cc5d2baaa67f2e89dc8a80c8e26ef7995386583","impliedFormat":1},{"version":"5d0375ca7310efb77e3ef18d068d53784faf62705e0ad04569597ae0e755c401","impliedFormat":1},{"version":"59af37caec41ecf7b2e76059c9672a49e682c1a2aa6f9d7dc78878f53aa284d6","impliedFormat":1},{"version":"addf417b9eb3f938fddf8d81e96393a165e4be0d4a8b6402292f9c634b1cb00d","impliedFormat":1},{"version":"e38d4fdf79e1eadd92ed7844c331dbaa40f29f21541cfee4e1acff4db09cda33","impliedFormat":1},{"version":"8bd86b8e8f6a6aa6c49b71e14c4ffe1211a0e97c80f08d2c8cc98838006e4b88","impliedFormat":1},{"version":"7c10a32ae6f3962672e6869ee2c794e8055d8225ef35c91c0228e354b4e5d2d3","impliedFormat":1},{"version":"2e85db9e6fd73cfa3d7f28e0ab6b55417ea18931423bd47b409a96e4a169e8e6","impliedFormat":1},{"version":"c46e079fe54c76f95c67fb89081b3e399da2c7d109e7dca8e4b58d83e332e605","impliedFormat":1},{"version":"99f569b42ea7e7c5fe404b2848c0893f3e1a56e0547c1cd0f74d5dbb9a9de27e","impliedFormat":1},{"version":"b3fb72492a07a76f7bfa29ecadd029eea081df11512e4dfe6f930a5a9cb1fb75","impliedFormat":1},{"version":"99257d2cf17c6c6f36131f640129289062c66384dba9d21a991cacfdc346711e","impliedFormat":99},{"version":"5574d520dabc450de6be799f1791d86d71da4fb236f16e6ca21b953788bb5154","impliedFormat":1},{"version":"5f877dfc985d1fd3ac8bf4a75cd77b06c42ca608809b324c44b4151758de7189","affectsGlobalScope":true,"impliedFormat":1},{"version":"4f585cea32567574de0301ed79131a4c3d0bb36bbfea7f66e2f29b5dce1c4293","affectsGlobalScope":true,"impliedFormat":1},{"version":"14c2fd6220654a41c53836a62ba96d4b515ae1413b0ccb31c2445fb1ae1de5de","affectsGlobalScope":true,"impliedFormat":1},{"version":"4f29c38739500cd35a2ce41d15a35e34445ca755ebb991915b5f170985a49d21","affectsGlobalScope":true,"impliedFormat":1},{"version":"16f842a1a38c8bc26dfebd1e3c56a63a2c2a0e1979a4141c8012d2f763c38267","affectsGlobalScope":true,"impliedFormat":1},{"version":"1ba59c8bbeed2cb75b239bb12041582fa3e8ef32f8d0bd0ec802e38442d3f317","impliedFormat":1}],"root":[[77,80],[181,184]],"options":{"allowImportingTsExtensions":false,"allowSyntheticDefaultImports":true,"declaration":true,"declarationMap":true,"esModuleInterop":true,"exactOptionalPropertyTypes":false,"jsx":4,"module":99,"noFallthroughCasesInSwitch":true,"noImplicitReturns":true,"noUncheckedIndexedAccess":false,"noUnusedLocals":true,"noUnusedParameters":true,"outDir":"./","rootDir":"../src","skipLibCheck":true,"sourceMap":true,"strict":true,"target":9,"tsBuildInfoFile":"./.tsbuildinfo","verbatimModuleSyntax":false},"referencedMap":[[60,1],[76,2],[75,3],[288,1],[287,4],[291,5],[290,6],[289,1],[286,1],[126,7],[127,7],[128,8],[86,9],[129,10],[130,11],[131,12],[81,1],[84,13],[82,1],[83,1],[132,14],[133,15],[134,16],[135,17],[136,18],[137,19],[138,19],[140,1],[139,20],[141,21],[142,22],[143,23],[125,24],[85,1],[144,25],[145,26],[146,27],[179,28],[147,29],[148,30],[149,31],[150,32],[151,33],[152,34],[153,35],[154,36],[155,37],[156,38],[157,38],[158,39],[159,1],[160,1],[161,40],[163,41],[162,42],[164,43],[165,44],[166,45],[167,46],[168,47],[169,48],[170,49],[171,50],[172,51],[173,52],[174,53],[175,54],[176,55],[177,56],[178,57],[180,58],[292,58],[87,1],[228,59],[230,60],[233,60],[235,61],[234,60],[232,62],[231,62],[236,63],[285,64],[240,65],[239,66],[229,67],[241,68],[238,69],[237,60],[227,70],[225,1],[223,71],[226,72],[224,73],[222,74],[221,75],[219,76],[220,76],[218,1],[190,77],[185,1],[187,78],[186,79],[197,77],[196,77],[198,80],[195,81],[193,77],[194,77],[191,82],[192,77],[243,83],[242,1],[206,1],[207,84],[204,1],[205,1],[199,85],[189,86],[188,1],[217,87],[202,88],[215,89],[200,1],[201,90],[216,91],[211,92],[212,93],[210,94],[214,95],[208,96],[203,97],[213,98],[209,89],[58,1],[59,1],[10,1],[11,1],[13,1],[12,1],[2,1],[14,1],[15,1],[16,1],[17,1],[18,1],[19,1],[20,1],[21,1],[3,1],[22,1],[23,1],[4,1],[24,1],[28,1],[25,1],[26,1],[27,1],[29,1],[30,1],[31,1],[5,1],[32,1],[33,1],[34,1],[35,1],[6,1],[39,1],[36,1],[37,1],[38,1],[40,1],[7,1],[41,1],[46,1],[47,1],[42,1],[43,1],[44,1],[45,1],[8,1],[51,1],[48,1],[49,1],[50,1],[52,1],[9,1],[53,1],[54,1],[55,1],[57,1],[56,1],[1,1],[103,99],[113,100],[102,99],[123,101],[94,102],[93,103],[122,104],[116,105],[121,106],[96,107],[110,108],[95,109],[119,110],[91,111],[90,104],[120,112],[92,113],[97,114],[98,1],[101,114],[88,1],[124,115],[114,116],[105,117],[106,118],[108,119],[104,120],[107,121],[117,104],[99,122],[100,123],[109,124],[89,125],[112,116],[111,114],[115,1],[118,126],[284,127],[261,128],[272,129],[259,130],[273,125],[282,131],[250,132],[251,133],[249,103],[281,104],[276,134],[280,135],[253,136],[269,137],[252,138],[279,139],[247,140],[248,134],[254,141],[255,1],[260,142],[258,141],[245,143],[283,144],[274,145],[264,146],[263,141],[265,147],[267,148],[262,149],[266,150],[277,104],[256,151],[257,152],[268,153],[246,125],[271,154],[270,141],[275,1],[244,1],[278,155],[74,156],[65,157],[72,158],[67,1],[68,1],[66,159],[69,160],[61,1],[62,1],[73,161],[64,162],[70,1],[71,163],[63,164],[183,165],[77,166],[78,166],[184,167],[79,166],[80,166],[181,168],[182,166]],"affectedFilesPendingEmit":[[183,51],[77,51],[78,51],[184,51],[79,51],[80,51],[181,51],[182,51]],"version":"5.8.3"}
|
|
1
|
+
{"fileNames":["../../../node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.es5.d.ts","../../../node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.es2015.d.ts","../../../node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.es2016.d.ts","../../../node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.es2017.d.ts","../../../node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.es2018.d.ts","../../../node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.es2019.d.ts","../../../node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.es2020.d.ts","../../../node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.es2021.d.ts","../../../node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.es2022.d.ts","../../../node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.dom.d.ts","../../../node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.dom.iterable.d.ts","../../../node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.es2015.core.d.ts","../../../node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.es2015.collection.d.ts","../../../node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.es2015.generator.d.ts","../../../node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.es2015.iterable.d.ts","../../../node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.es2015.promise.d.ts","../../../node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.es2015.proxy.d.ts","../../../node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.es2015.reflect.d.ts","../../../node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.es2015.symbol.d.ts","../../../node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.es2015.symbol.wellknown.d.ts","../../../node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.es2016.array.include.d.ts","../../../node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.es2016.intl.d.ts","../../../node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.es2017.arraybuffer.d.ts","../../../node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.es2017.date.d.ts","../../../node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.es2017.object.d.ts","../../../node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.es2017.sharedmemory.d.ts","../../../node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.es2017.string.d.ts","../../../node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.es2017.intl.d.ts","../../../node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.es2017.typedarrays.d.ts","../../../node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.es2018.asyncgenerator.d.ts","../../../node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.es2018.asynciterable.d.ts","../../../node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.es2018.intl.d.ts","../../../node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.es2018.promise.d.ts","../../../node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.es2018.regexp.d.ts","../../../node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.es2019.array.d.ts","../../../node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.es2019.object.d.ts","../../../node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.es2019.string.d.ts","../../../node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.es2019.symbol.d.ts","../../../node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.es2019.intl.d.ts","../../../node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.es2020.bigint.d.ts","../../../node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.es2020.date.d.ts","../../../node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.es2020.promise.d.ts","../../../node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.es2020.sharedmemory.d.ts","../../../node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.es2020.string.d.ts","../../../node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.es2020.symbol.wellknown.d.ts","../../../node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.es2020.intl.d.ts","../../../node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.es2020.number.d.ts","../../../node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.es2021.promise.d.ts","../../../node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.es2021.string.d.ts","../../../node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.es2021.weakref.d.ts","../../../node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.es2021.intl.d.ts","../../../node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.es2022.array.d.ts","../../../node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.es2022.error.d.ts","../../../node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.es2022.intl.d.ts","../../../node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.es2022.object.d.ts","../../../node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.es2022.string.d.ts","../../../node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.es2022.regexp.d.ts","../../../node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.decorators.d.ts","../../../node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.decorators.legacy.d.ts","../../../node_modules/.pnpm/@modelcontextprotocol+sdk@1.12.3/node_modules/@modelcontextprotocol/sdk/dist/esm/server/auth/types.d.ts","../../../node_modules/.pnpm/zod@3.25.64/node_modules/zod/dist/types/v3/helpers/typealiases.d.ts","../../../node_modules/.pnpm/zod@3.25.64/node_modules/zod/dist/types/v3/helpers/util.d.ts","../../../node_modules/.pnpm/zod@3.25.64/node_modules/zod/dist/types/v3/zoderror.d.ts","../../../node_modules/.pnpm/zod@3.25.64/node_modules/zod/dist/types/v3/locales/en.d.ts","../../../node_modules/.pnpm/zod@3.25.64/node_modules/zod/dist/types/v3/errors.d.ts","../../../node_modules/.pnpm/zod@3.25.64/node_modules/zod/dist/types/v3/helpers/parseutil.d.ts","../../../node_modules/.pnpm/zod@3.25.64/node_modules/zod/dist/types/v3/helpers/enumutil.d.ts","../../../node_modules/.pnpm/zod@3.25.64/node_modules/zod/dist/types/v3/helpers/errorutil.d.ts","../../../node_modules/.pnpm/zod@3.25.64/node_modules/zod/dist/types/v3/helpers/partialutil.d.ts","../../../node_modules/.pnpm/zod@3.25.64/node_modules/zod/dist/types/v3/standard-schema.d.ts","../../../node_modules/.pnpm/zod@3.25.64/node_modules/zod/dist/types/v3/types.d.ts","../../../node_modules/.pnpm/zod@3.25.64/node_modules/zod/dist/types/v3/external.d.ts","../../../node_modules/.pnpm/zod@3.25.64/node_modules/zod/dist/types/v3/index.d.ts","../../../node_modules/.pnpm/zod@3.25.64/node_modules/zod/dist/types/index.d.ts","../../../node_modules/.pnpm/@modelcontextprotocol+sdk@1.12.3/node_modules/@modelcontextprotocol/sdk/dist/esm/types.d.ts","../../../node_modules/.pnpm/@modelcontextprotocol+sdk@1.12.3/node_modules/@modelcontextprotocol/sdk/dist/esm/shared/transport.d.ts","../src/browserwebsocketclienttransport.ts","../src/extensionclienttransport.ts","../src/extensionservertransport.ts","../src/tabclienttransport.ts","../src/tabservertransport.ts","../../../node_modules/.pnpm/@types+node@22.15.31/node_modules/@types/node/compatibility/disposable.d.ts","../../../node_modules/.pnpm/@types+node@22.15.31/node_modules/@types/node/compatibility/indexable.d.ts","../../../node_modules/.pnpm/@types+node@22.15.31/node_modules/@types/node/compatibility/iterators.d.ts","../../../node_modules/.pnpm/@types+node@22.15.31/node_modules/@types/node/compatibility/index.d.ts","../../../node_modules/.pnpm/@types+node@22.15.31/node_modules/@types/node/globals.typedarray.d.ts","../../../node_modules/.pnpm/@types+node@22.15.31/node_modules/@types/node/buffer.buffer.d.ts","../../../node_modules/.pnpm/buffer@6.0.3/node_modules/buffer/index.d.ts","../../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/header.d.ts","../../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/readable.d.ts","../../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/file.d.ts","../../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/fetch.d.ts","../../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/formdata.d.ts","../../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/connector.d.ts","../../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/client.d.ts","../../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/errors.d.ts","../../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/dispatcher.d.ts","../../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/global-dispatcher.d.ts","../../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/global-origin.d.ts","../../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/pool-stats.d.ts","../../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/pool.d.ts","../../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/handlers.d.ts","../../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/balanced-pool.d.ts","../../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/agent.d.ts","../../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/mock-interceptor.d.ts","../../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/mock-agent.d.ts","../../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/mock-client.d.ts","../../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/mock-pool.d.ts","../../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/mock-errors.d.ts","../../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/proxy-agent.d.ts","../../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/env-http-proxy-agent.d.ts","../../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/retry-handler.d.ts","../../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/retry-agent.d.ts","../../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/api.d.ts","../../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/interceptors.d.ts","../../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/util.d.ts","../../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/cookies.d.ts","../../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/patch.d.ts","../../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/websocket.d.ts","../../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/eventsource.d.ts","../../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/filereader.d.ts","../../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/diagnostics-channel.d.ts","../../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/content-type.d.ts","../../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/cache.d.ts","../../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/index.d.ts","../../../node_modules/.pnpm/@types+node@22.15.31/node_modules/@types/node/globals.d.ts","../../../node_modules/.pnpm/@types+node@22.15.31/node_modules/@types/node/assert.d.ts","../../../node_modules/.pnpm/@types+node@22.15.31/node_modules/@types/node/assert/strict.d.ts","../../../node_modules/.pnpm/@types+node@22.15.31/node_modules/@types/node/async_hooks.d.ts","../../../node_modules/.pnpm/@types+node@22.15.31/node_modules/@types/node/buffer.d.ts","../../../node_modules/.pnpm/@types+node@22.15.31/node_modules/@types/node/child_process.d.ts","../../../node_modules/.pnpm/@types+node@22.15.31/node_modules/@types/node/cluster.d.ts","../../../node_modules/.pnpm/@types+node@22.15.31/node_modules/@types/node/console.d.ts","../../../node_modules/.pnpm/@types+node@22.15.31/node_modules/@types/node/constants.d.ts","../../../node_modules/.pnpm/@types+node@22.15.31/node_modules/@types/node/crypto.d.ts","../../../node_modules/.pnpm/@types+node@22.15.31/node_modules/@types/node/dgram.d.ts","../../../node_modules/.pnpm/@types+node@22.15.31/node_modules/@types/node/diagnostics_channel.d.ts","../../../node_modules/.pnpm/@types+node@22.15.31/node_modules/@types/node/dns.d.ts","../../../node_modules/.pnpm/@types+node@22.15.31/node_modules/@types/node/dns/promises.d.ts","../../../node_modules/.pnpm/@types+node@22.15.31/node_modules/@types/node/domain.d.ts","../../../node_modules/.pnpm/@types+node@22.15.31/node_modules/@types/node/dom-events.d.ts","../../../node_modules/.pnpm/@types+node@22.15.31/node_modules/@types/node/events.d.ts","../../../node_modules/.pnpm/@types+node@22.15.31/node_modules/@types/node/fs.d.ts","../../../node_modules/.pnpm/@types+node@22.15.31/node_modules/@types/node/fs/promises.d.ts","../../../node_modules/.pnpm/@types+node@22.15.31/node_modules/@types/node/http.d.ts","../../../node_modules/.pnpm/@types+node@22.15.31/node_modules/@types/node/http2.d.ts","../../../node_modules/.pnpm/@types+node@22.15.31/node_modules/@types/node/https.d.ts","../../../node_modules/.pnpm/@types+node@22.15.31/node_modules/@types/node/inspector.d.ts","../../../node_modules/.pnpm/@types+node@22.15.31/node_modules/@types/node/module.d.ts","../../../node_modules/.pnpm/@types+node@22.15.31/node_modules/@types/node/net.d.ts","../../../node_modules/.pnpm/@types+node@22.15.31/node_modules/@types/node/os.d.ts","../../../node_modules/.pnpm/@types+node@22.15.31/node_modules/@types/node/path.d.ts","../../../node_modules/.pnpm/@types+node@22.15.31/node_modules/@types/node/perf_hooks.d.ts","../../../node_modules/.pnpm/@types+node@22.15.31/node_modules/@types/node/process.d.ts","../../../node_modules/.pnpm/@types+node@22.15.31/node_modules/@types/node/punycode.d.ts","../../../node_modules/.pnpm/@types+node@22.15.31/node_modules/@types/node/querystring.d.ts","../../../node_modules/.pnpm/@types+node@22.15.31/node_modules/@types/node/readline.d.ts","../../../node_modules/.pnpm/@types+node@22.15.31/node_modules/@types/node/readline/promises.d.ts","../../../node_modules/.pnpm/@types+node@22.15.31/node_modules/@types/node/repl.d.ts","../../../node_modules/.pnpm/@types+node@22.15.31/node_modules/@types/node/sea.d.ts","../../../node_modules/.pnpm/@types+node@22.15.31/node_modules/@types/node/sqlite.d.ts","../../../node_modules/.pnpm/@types+node@22.15.31/node_modules/@types/node/stream.d.ts","../../../node_modules/.pnpm/@types+node@22.15.31/node_modules/@types/node/stream/promises.d.ts","../../../node_modules/.pnpm/@types+node@22.15.31/node_modules/@types/node/stream/consumers.d.ts","../../../node_modules/.pnpm/@types+node@22.15.31/node_modules/@types/node/stream/web.d.ts","../../../node_modules/.pnpm/@types+node@22.15.31/node_modules/@types/node/string_decoder.d.ts","../../../node_modules/.pnpm/@types+node@22.15.31/node_modules/@types/node/test.d.ts","../../../node_modules/.pnpm/@types+node@22.15.31/node_modules/@types/node/timers.d.ts","../../../node_modules/.pnpm/@types+node@22.15.31/node_modules/@types/node/timers/promises.d.ts","../../../node_modules/.pnpm/@types+node@22.15.31/node_modules/@types/node/tls.d.ts","../../../node_modules/.pnpm/@types+node@22.15.31/node_modules/@types/node/trace_events.d.ts","../../../node_modules/.pnpm/@types+node@22.15.31/node_modules/@types/node/tty.d.ts","../../../node_modules/.pnpm/@types+node@22.15.31/node_modules/@types/node/url.d.ts","../../../node_modules/.pnpm/@types+node@22.15.31/node_modules/@types/node/util.d.ts","../../../node_modules/.pnpm/@types+node@22.15.31/node_modules/@types/node/v8.d.ts","../../../node_modules/.pnpm/@types+node@22.15.31/node_modules/@types/node/vm.d.ts","../../../node_modules/.pnpm/@types+node@22.15.31/node_modules/@types/node/wasi.d.ts","../../../node_modules/.pnpm/@types+node@22.15.31/node_modules/@types/node/worker_threads.d.ts","../../../node_modules/.pnpm/@types+node@22.15.31/node_modules/@types/node/zlib.d.ts","../../../node_modules/.pnpm/@types+node@22.15.31/node_modules/@types/node/index.d.ts","../../../node_modules/.pnpm/@types+ws@8.18.1/node_modules/@types/ws/index.d.mts","../src/websocketclienttransport.ts","../src/websocketservertransport.ts","../src/browser-types.ts","../src/index.ts","../../../node_modules/.pnpm/domelementtype@2.3.0/node_modules/domelementtype/lib/esm/index.d.ts","../../../node_modules/.pnpm/domhandler@5.0.3/node_modules/domhandler/lib/esm/node.d.ts","../../../node_modules/.pnpm/domhandler@5.0.3/node_modules/domhandler/lib/esm/index.d.ts","../../../node_modules/.pnpm/htmlparser2@10.0.0/node_modules/htmlparser2/dist/esm/tokenizer.d.ts","../../../node_modules/.pnpm/htmlparser2@10.0.0/node_modules/htmlparser2/dist/esm/parser.d.ts","../../../node_modules/.pnpm/dom-serializer@2.0.0/node_modules/dom-serializer/lib/esm/index.d.ts","../../../node_modules/.pnpm/domutils@3.2.2/node_modules/domutils/lib/esm/stringify.d.ts","../../../node_modules/.pnpm/domutils@3.2.2/node_modules/domutils/lib/esm/traversal.d.ts","../../../node_modules/.pnpm/domutils@3.2.2/node_modules/domutils/lib/esm/manipulation.d.ts","../../../node_modules/.pnpm/domutils@3.2.2/node_modules/domutils/lib/esm/querying.d.ts","../../../node_modules/.pnpm/domutils@3.2.2/node_modules/domutils/lib/esm/legacy.d.ts","../../../node_modules/.pnpm/domutils@3.2.2/node_modules/domutils/lib/esm/helpers.d.ts","../../../node_modules/.pnpm/domutils@3.2.2/node_modules/domutils/lib/esm/feeds.d.ts","../../../node_modules/.pnpm/domutils@3.2.2/node_modules/domutils/lib/esm/index.d.ts","../../../node_modules/.pnpm/htmlparser2@10.0.0/node_modules/htmlparser2/dist/esm/index.d.ts","../../../node_modules/.pnpm/parse5@7.3.0/node_modules/parse5/dist/common/html.d.ts","../../../node_modules/.pnpm/parse5@7.3.0/node_modules/parse5/dist/common/token.d.ts","../../../node_modules/.pnpm/parse5@7.3.0/node_modules/parse5/dist/common/error-codes.d.ts","../../../node_modules/.pnpm/parse5@7.3.0/node_modules/parse5/dist/tokenizer/preprocessor.d.ts","../../../node_modules/.pnpm/entities@6.0.1/node_modules/entities/dist/esm/generated/decode-data-html.d.ts","../../../node_modules/.pnpm/entities@6.0.1/node_modules/entities/dist/esm/generated/decode-data-xml.d.ts","../../../node_modules/.pnpm/entities@6.0.1/node_modules/entities/dist/esm/decode-codepoint.d.ts","../../../node_modules/.pnpm/entities@6.0.1/node_modules/entities/dist/esm/decode.d.ts","../../../node_modules/.pnpm/parse5@7.3.0/node_modules/parse5/dist/tokenizer/index.d.ts","../../../node_modules/.pnpm/parse5@7.3.0/node_modules/parse5/dist/tree-adapters/interface.d.ts","../../../node_modules/.pnpm/parse5@7.3.0/node_modules/parse5/dist/parser/open-element-stack.d.ts","../../../node_modules/.pnpm/parse5@7.3.0/node_modules/parse5/dist/parser/formatting-element-list.d.ts","../../../node_modules/.pnpm/parse5@7.3.0/node_modules/parse5/dist/parser/index.d.ts","../../../node_modules/.pnpm/parse5@7.3.0/node_modules/parse5/dist/tree-adapters/default.d.ts","../../../node_modules/.pnpm/parse5@7.3.0/node_modules/parse5/dist/serializer/index.d.ts","../../../node_modules/.pnpm/parse5@7.3.0/node_modules/parse5/dist/common/foreign-content.d.ts","../../../node_modules/.pnpm/parse5@7.3.0/node_modules/parse5/dist/index.d.ts","../../../node_modules/.pnpm/parse5-htmlparser2-tree-adapter@7.1.0/node_modules/parse5-htmlparser2-tree-adapter/dist/index.d.ts","../../../node_modules/.pnpm/css-what@6.1.0/node_modules/css-what/lib/es/types.d.ts","../../../node_modules/.pnpm/css-what@6.1.0/node_modules/css-what/lib/es/parse.d.ts","../../../node_modules/.pnpm/css-what@6.1.0/node_modules/css-what/lib/es/stringify.d.ts","../../../node_modules/.pnpm/css-what@6.1.0/node_modules/css-what/lib/es/index.d.ts","../../../node_modules/.pnpm/css-select@5.1.0/node_modules/css-select/lib/esm/types.d.ts","../../../node_modules/.pnpm/css-select@5.1.0/node_modules/css-select/lib/esm/pseudo-selectors/filters.d.ts","../../../node_modules/.pnpm/css-select@5.1.0/node_modules/css-select/lib/esm/pseudo-selectors/pseudos.d.ts","../../../node_modules/.pnpm/css-select@5.1.0/node_modules/css-select/lib/esm/pseudo-selectors/aliases.d.ts","../../../node_modules/.pnpm/css-select@5.1.0/node_modules/css-select/lib/esm/pseudo-selectors/index.d.ts","../../../node_modules/.pnpm/css-select@5.1.0/node_modules/css-select/lib/esm/index.d.ts","../../../node_modules/.pnpm/cheerio-select@2.1.0/node_modules/cheerio-select/lib/esm/index.d.ts","../../../node_modules/.pnpm/cheerio@1.1.0/node_modules/cheerio/dist/esm/options.d.ts","../../../node_modules/.pnpm/cheerio@1.1.0/node_modules/cheerio/dist/esm/api/attributes.d.ts","../../../node_modules/.pnpm/cheerio@1.1.0/node_modules/cheerio/dist/esm/api/traversing.d.ts","../../../node_modules/.pnpm/cheerio@1.1.0/node_modules/cheerio/dist/esm/api/manipulation.d.ts","../../../node_modules/.pnpm/cheerio@1.1.0/node_modules/cheerio/dist/esm/api/css.d.ts","../../../node_modules/.pnpm/cheerio@1.1.0/node_modules/cheerio/dist/esm/api/forms.d.ts","../../../node_modules/.pnpm/cheerio@1.1.0/node_modules/cheerio/dist/esm/api/extract.d.ts","../../../node_modules/.pnpm/cheerio@1.1.0/node_modules/cheerio/dist/esm/cheerio.d.ts","../../../node_modules/.pnpm/cheerio@1.1.0/node_modules/cheerio/dist/esm/types.d.ts","../../../node_modules/.pnpm/cheerio@1.1.0/node_modules/cheerio/dist/esm/static.d.ts","../../../node_modules/.pnpm/cheerio@1.1.0/node_modules/cheerio/dist/esm/load.d.ts","../../../node_modules/.pnpm/cheerio@1.1.0/node_modules/cheerio/dist/esm/load-parse.d.ts","../../../node_modules/.pnpm/cheerio@1.1.0/node_modules/cheerio/dist/esm/slim.d.ts","../../../node_modules/.pnpm/encoding-sniffer@0.2.1/node_modules/encoding-sniffer/dist/esm/sniffer.d.ts","../../../node_modules/.pnpm/encoding-sniffer@0.2.1/node_modules/encoding-sniffer/dist/esm/index.d.ts","../../../node_modules/.pnpm/undici@7.10.0/node_modules/undici/types/utility.d.ts","../../../node_modules/.pnpm/undici@7.10.0/node_modules/undici/types/header.d.ts","../../../node_modules/.pnpm/undici@7.10.0/node_modules/undici/types/readable.d.ts","../../../node_modules/.pnpm/undici@7.10.0/node_modules/undici/types/fetch.d.ts","../../../node_modules/.pnpm/undici@7.10.0/node_modules/undici/types/formdata.d.ts","../../../node_modules/.pnpm/undici@7.10.0/node_modules/undici/types/connector.d.ts","../../../node_modules/.pnpm/undici@7.10.0/node_modules/undici/types/client-stats.d.ts","../../../node_modules/.pnpm/undici@7.10.0/node_modules/undici/types/client.d.ts","../../../node_modules/.pnpm/undici@7.10.0/node_modules/undici/types/errors.d.ts","../../../node_modules/.pnpm/undici@7.10.0/node_modules/undici/types/dispatcher.d.ts","../../../node_modules/.pnpm/undici@7.10.0/node_modules/undici/types/global-dispatcher.d.ts","../../../node_modules/.pnpm/undici@7.10.0/node_modules/undici/types/global-origin.d.ts","../../../node_modules/.pnpm/undici@7.10.0/node_modules/undici/types/pool-stats.d.ts","../../../node_modules/.pnpm/undici@7.10.0/node_modules/undici/types/pool.d.ts","../../../node_modules/.pnpm/undici@7.10.0/node_modules/undici/types/handlers.d.ts","../../../node_modules/.pnpm/undici@7.10.0/node_modules/undici/types/balanced-pool.d.ts","../../../node_modules/.pnpm/undici@7.10.0/node_modules/undici/types/h2c-client.d.ts","../../../node_modules/.pnpm/undici@7.10.0/node_modules/undici/types/agent.d.ts","../../../node_modules/.pnpm/undici@7.10.0/node_modules/undici/types/mock-interceptor.d.ts","../../../node_modules/.pnpm/undici@7.10.0/node_modules/undici/types/mock-call-history.d.ts","../../../node_modules/.pnpm/undici@7.10.0/node_modules/undici/types/mock-agent.d.ts","../../../node_modules/.pnpm/undici@7.10.0/node_modules/undici/types/mock-client.d.ts","../../../node_modules/.pnpm/undici@7.10.0/node_modules/undici/types/mock-pool.d.ts","../../../node_modules/.pnpm/undici@7.10.0/node_modules/undici/types/mock-errors.d.ts","../../../node_modules/.pnpm/undici@7.10.0/node_modules/undici/types/proxy-agent.d.ts","../../../node_modules/.pnpm/undici@7.10.0/node_modules/undici/types/env-http-proxy-agent.d.ts","../../../node_modules/.pnpm/undici@7.10.0/node_modules/undici/types/retry-handler.d.ts","../../../node_modules/.pnpm/undici@7.10.0/node_modules/undici/types/retry-agent.d.ts","../../../node_modules/.pnpm/undici@7.10.0/node_modules/undici/types/api.d.ts","../../../node_modules/.pnpm/undici@7.10.0/node_modules/undici/types/cache-interceptor.d.ts","../../../node_modules/.pnpm/undici@7.10.0/node_modules/undici/types/interceptors.d.ts","../../../node_modules/.pnpm/undici@7.10.0/node_modules/undici/types/util.d.ts","../../../node_modules/.pnpm/undici@7.10.0/node_modules/undici/types/cookies.d.ts","../../../node_modules/.pnpm/undici@7.10.0/node_modules/undici/types/patch.d.ts","../../../node_modules/.pnpm/undici@7.10.0/node_modules/undici/types/websocket.d.ts","../../../node_modules/.pnpm/undici@7.10.0/node_modules/undici/types/eventsource.d.ts","../../../node_modules/.pnpm/undici@7.10.0/node_modules/undici/types/diagnostics-channel.d.ts","../../../node_modules/.pnpm/undici@7.10.0/node_modules/undici/types/content-type.d.ts","../../../node_modules/.pnpm/undici@7.10.0/node_modules/undici/types/cache.d.ts","../../../node_modules/.pnpm/undici@7.10.0/node_modules/undici/types/index.d.ts","../../../node_modules/.pnpm/undici@7.10.0/node_modules/undici/index.d.ts","../../../node_modules/.pnpm/cheerio@1.1.0/node_modules/cheerio/dist/esm/index.d.ts","../../../node_modules/.pnpm/@types+har-format@1.2.16/node_modules/@types/har-format/index.d.ts","../../../node_modules/.pnpm/@types+chrome@0.0.326/node_modules/@types/chrome/har-format/index.d.ts","../../../node_modules/.pnpm/@types+chrome@0.0.326/node_modules/@types/chrome/chrome-cast/index.d.ts","../../../node_modules/.pnpm/@types+filewriter@0.0.33/node_modules/@types/filewriter/index.d.ts","../../../node_modules/.pnpm/@types+filesystem@0.0.36/node_modules/@types/filesystem/index.d.ts","../../../node_modules/.pnpm/@types+chrome@0.0.326/node_modules/@types/chrome/index.d.ts","../../../node_modules/.pnpm/@types+ws@8.18.1/node_modules/@types/ws/index.d.ts"],"fileIdsList":[[87,130],[60,75,87,130],[74,87,130],[87,130,287],[87,130,288,289,291],[87,130,290],[87,127,130],[87,129,130],[130],[87,130,135,165],[87,130,131,136,142,143,150,162,173],[87,130,131,132,142,150],[82,83,84,87,130],[87,130,133,174],[87,130,134,135,143,151],[87,130,135,162,170],[87,130,136,138,142,150],[87,129,130,137],[87,130,138,139],[87,130,140,142],[87,129,130,142],[87,130,142,143,144,162,173],[87,130,142,143,144,157,162,165],[87,125,130],[87,125,130,138,142,145,150,162,173],[87,130,142,143,145,146,150,162,170,173],[87,130,145,147,162,170,173],[85,86,87,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179],[87,130,142,148],[87,130,149,173],[87,130,138,142,150,162],[87,130,151],[87,130,152],[87,129,130,153],[87,127,128,129,130,131,132,133,134,135,136,137,138,139,140,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179],[87,130,155],[87,130,156],[87,130,142,157,158],[87,130,157,159,174,176],[87,130,142,162,163,165],[87,130,164,165],[87,130,162,163],[87,130,165],[87,130,166],[87,127,130,162],[87,130,142,168,169],[87,130,168,169],[87,130,135,150,162,170],[87,130,171],[87,130,150,172],[87,130,145,156,173],[87,130,135,174],[87,130,162,175],[87,130,149,176],[87,130,177],[87,130,142,144,153,162,165,173,176,178],[87,130,162,179],[87,130,142,145,147,150,162,170,173,179,180],[87,130,188,228],[87,130,188,237],[87,130,188,231,237],[87,130,188,237,238],[87,130,188,230,231,232,233,234,235,236,238],[87,130,162,230,238,239,240,241,242,244,285],[87,130,188,230,240],[87,130,188,230,237,238,239],[87,130,188,191,200,217,218,229],[87,130,188,230,237,238,239,240],[87,130,188,230,236,237,238,240],[87,130,222,223,227],[87,130,223],[87,130,222,223,224,225,226],[87,130,222,223],[87,130,222],[87,130,219,220,221],[87,130,219],[87,130,188],[87,130,187],[87,130,186],[87,130,188,192,193,194,195,196,197,198],[87,130,186,188],[87,130,188,191],[87,130,162,243],[87,130,205,206,207],[87,130,186,188,189,190,199],[87,130,189],[87,130,188,217],[87,130,202],[87,130,201,202],[87,130,201],[87,130,201,202,203,209,210,213,214,215,216],[87,130,202,210],[87,130,201,202,203,209,210,211,212],[87,130,201,210],[87,130,210,214],[87,130,202,203,204,208],[87,130,203],[87,130,201,202,210],[87,97,101,130,173],[87,97,130,162,173],[87,92,130],[87,94,97,130,170,173],[87,130,150,170],[87,130,180],[87,92,130,180],[87,94,97,130,150,173],[87,89,90,93,96,130,142,162,173],[87,97,104,130],[87,89,95,130],[87,97,118,119,130],[87,93,97,130,165,173,180],[87,118,130,180],[87,91,92,130,180],[87,97,130],[87,91,92,93,94,95,96,97,98,99,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,119,120,121,122,123,124,130],[87,97,112,130],[87,97,104,105,130],[87,95,97,105,106,130],[87,96,130],[87,89,92,97,130],[87,97,101,105,106,130],[87,101,130],[87,95,97,100,130,173],[87,89,94,97,104,130],[87,130,162],[87,92,97,118,130,178,180],[87,130,284],[87,130,173,251,254,257,258],[87,130,162,173,254],[87,130,173,254,258],[87,130,248],[87,130,252],[87,130,173,250,251,254],[87,130,180,248],[87,130,150,173,250,254],[87,130,142,162,173,245,246,247,249,253],[87,130,254,262],[87,130,246,252],[87,130,254,278,279],[87,130,165,173,180,246,249,254],[87,130,254],[87,130,173,250,254],[87,130,245],[87,130,248,249,250,252,253,254,255,256,258,259,260,261,262,263,264,265,266,267,268,269,270,271,272,273,274,275,276,277,279,280,281,282,283],[87,130,138,254,271,274],[87,130,254,262,263,264],[87,130,252,254,263,265],[87,130,253],[87,130,246,248,254],[87,130,254,258,263,265],[87,130,258],[87,130,173,252,254,257],[87,130,246,250,254,262],[87,130,254,271],[87,130,165,178,180,248,254,278],[73,87,130],[63,64,87,130],[61,62,63,65,66,71,87,130],[62,63,87,130],[71,87,130],[72,87,130],[63,87,130],[61,62,63,66,67,68,69,70,87,130],[61,62,73,87,130],[75,87,130],[75,76,87,130],[77,78,79,80,81,87,130,182,183,184],[75,76,87,130,181]],"fileInfos":[{"version":"69684132aeb9b5642cbcd9e22dff7818ff0ee1aa831728af0ecf97d3364d5546","affectsGlobalScope":true,"impliedFormat":1},{"version":"45b7ab580deca34ae9729e97c13cfd999df04416a79116c3bfb483804f85ded4","impliedFormat":1},{"version":"3facaf05f0c5fc569c5649dd359892c98a85557e3e0c847964caeb67076f4d75","impliedFormat":1},{"version":"e44bb8bbac7f10ecc786703fe0a6a4b952189f908707980ba8f3c8975a760962","impliedFormat":1},{"version":"5e1c4c362065a6b95ff952c0eab010f04dcd2c3494e813b493ecfd4fcb9fc0d8","impliedFormat":1},{"version":"68d73b4a11549f9c0b7d352d10e91e5dca8faa3322bfb77b661839c42b1ddec7","impliedFormat":1},{"version":"5efce4fc3c29ea84e8928f97adec086e3dc876365e0982cc8479a07954a3efd4","impliedFormat":1},{"version":"feecb1be483ed332fad555aff858affd90a48ab19ba7272ee084704eb7167569","impliedFormat":1},{"version":"ee7bad0c15b58988daa84371e0b89d313b762ab83cb5b31b8a2d1162e8eb41c2","impliedFormat":1},{"version":"092c2bfe125ce69dbb1223c85d68d4d2397d7d8411867b5cc03cec902c233763","affectsGlobalScope":true,"impliedFormat":1},{"version":"07f073f19d67f74d732b1adea08e1dc66b1b58d77cb5b43931dee3d798a2fd53","affectsGlobalScope":true,"impliedFormat":1},{"version":"c57796738e7f83dbc4b8e65132f11a377649c00dd3eee333f672b8f0a6bea671","affectsGlobalScope":true,"impliedFormat":1},{"version":"dc2df20b1bcdc8c2d34af4926e2c3ab15ffe1160a63e58b7e09833f616efff44","affectsGlobalScope":true,"impliedFormat":1},{"version":"515d0b7b9bea2e31ea4ec968e9edd2c39d3eebf4a2d5cbd04e88639819ae3b71","affectsGlobalScope":true,"impliedFormat":1},{"version":"0559b1f683ac7505ae451f9a96ce4c3c92bdc71411651ca6ddb0e88baaaad6a3","affectsGlobalScope":true,"impliedFormat":1},{"version":"0dc1e7ceda9b8b9b455c3a2d67b0412feab00bd2f66656cd8850e8831b08b537","affectsGlobalScope":true,"impliedFormat":1},{"version":"ce691fb9e5c64efb9547083e4a34091bcbe5bdb41027e310ebba8f7d96a98671","affectsGlobalScope":true,"impliedFormat":1},{"version":"8d697a2a929a5fcb38b7a65594020fcef05ec1630804a33748829c5ff53640d0","affectsGlobalScope":true,"impliedFormat":1},{"version":"4ff2a353abf8a80ee399af572debb8faab2d33ad38c4b4474cff7f26e7653b8d","affectsGlobalScope":true,"impliedFormat":1},{"version":"936e80ad36a2ee83fc3caf008e7c4c5afe45b3cf3d5c24408f039c1d47bdc1df","affectsGlobalScope":true,"impliedFormat":1},{"version":"d15bea3d62cbbdb9797079416b8ac375ae99162a7fba5de2c6c505446486ac0a","affectsGlobalScope":true,"impliedFormat":1},{"version":"68d18b664c9d32a7336a70235958b8997ebc1c3b8505f4f1ae2b7e7753b87618","affectsGlobalScope":true,"impliedFormat":1},{"version":"eb3d66c8327153d8fa7dd03f9c58d351107fe824c79e9b56b462935176cdf12a","affectsGlobalScope":true,"impliedFormat":1},{"version":"38f0219c9e23c915ef9790ab1d680440d95419ad264816fa15009a8851e79119","affectsGlobalScope":true,"impliedFormat":1},{"version":"69ab18c3b76cd9b1be3d188eaf8bba06112ebbe2f47f6c322b5105a6fbc45a2e","affectsGlobalScope":true,"impliedFormat":1},{"version":"fef8cfad2e2dc5f5b3d97a6f4f2e92848eb1b88e897bb7318cef0e2820bceaab","affectsGlobalScope":true,"impliedFormat":1},{"version":"2f11ff796926e0832f9ae148008138ad583bd181899ab7dd768a2666700b1893","affectsGlobalScope":true,"impliedFormat":1},{"version":"4de680d5bb41c17f7f68e0419412ca23c98d5749dcaaea1896172f06435891fc","affectsGlobalScope":true,"impliedFormat":1},{"version":"954296b30da6d508a104a3a0b5d96b76495c709785c1d11610908e63481ee667","affectsGlobalScope":true,"impliedFormat":1},{"version":"ac9538681b19688c8eae65811b329d3744af679e0bdfa5d842d0e32524c73e1c","affectsGlobalScope":true,"impliedFormat":1},{"version":"0a969edff4bd52585473d24995c5ef223f6652d6ef46193309b3921d65dd4376","affectsGlobalScope":true,"impliedFormat":1},{"version":"9e9fbd7030c440b33d021da145d3232984c8bb7916f277e8ffd3dc2e3eae2bdb","affectsGlobalScope":true,"impliedFormat":1},{"version":"811ec78f7fefcabbda4bfa93b3eb67d9ae166ef95f9bff989d964061cbf81a0c","affectsGlobalScope":true,"impliedFormat":1},{"version":"717937616a17072082152a2ef351cb51f98802fb4b2fdabd32399843875974ca","affectsGlobalScope":true,"impliedFormat":1},{"version":"d7e7d9b7b50e5f22c915b525acc5a49a7a6584cf8f62d0569e557c5cfc4b2ac2","affectsGlobalScope":true,"impliedFormat":1},{"version":"71c37f4c9543f31dfced6c7840e068c5a5aacb7b89111a4364b1d5276b852557","affectsGlobalScope":true,"impliedFormat":1},{"version":"576711e016cf4f1804676043e6a0a5414252560eb57de9faceee34d79798c850","affectsGlobalScope":true,"impliedFormat":1},{"version":"89c1b1281ba7b8a96efc676b11b264de7a8374c5ea1e6617f11880a13fc56dc6","affectsGlobalScope":true,"impliedFormat":1},{"version":"74f7fa2d027d5b33eb0471c8e82a6c87216223181ec31247c357a3e8e2fddc5b","affectsGlobalScope":true,"impliedFormat":1},{"version":"d6d7ae4d1f1f3772e2a3cde568ed08991a8ae34a080ff1151af28b7f798e22ca","affectsGlobalScope":true,"impliedFormat":1},{"version":"063600664504610fe3e99b717a1223f8b1900087fab0b4cad1496a114744f8df","affectsGlobalScope":true,"impliedFormat":1},{"version":"934019d7e3c81950f9a8426d093458b65d5aff2c7c1511233c0fd5b941e608ab","affectsGlobalScope":true,"impliedFormat":1},{"version":"52ada8e0b6e0482b728070b7639ee42e83a9b1c22d205992756fe020fd9f4a47","affectsGlobalScope":true,"impliedFormat":1},{"version":"3bdefe1bfd4d6dee0e26f928f93ccc128f1b64d5d501ff4a8cf3c6371200e5e6","affectsGlobalScope":true,"impliedFormat":1},{"version":"59fb2c069260b4ba00b5643b907ef5d5341b167e7d1dbf58dfd895658bda2867","affectsGlobalScope":true,"impliedFormat":1},{"version":"639e512c0dfc3fad96a84caad71b8834d66329a1f28dc95e3946c9b58176c73a","affectsGlobalScope":true,"impliedFormat":1},{"version":"368af93f74c9c932edd84c58883e736c9e3d53cec1fe24c0b0ff451f529ceab1","affectsGlobalScope":true,"impliedFormat":1},{"version":"af3dd424cf267428f30ccfc376f47a2c0114546b55c44d8c0f1d57d841e28d74","affectsGlobalScope":true,"impliedFormat":1},{"version":"995c005ab91a498455ea8dfb63aa9f83fa2ea793c3d8aa344be4a1678d06d399","affectsGlobalScope":true,"impliedFormat":1},{"version":"959d36cddf5e7d572a65045b876f2956c973a586da58e5d26cde519184fd9b8a","affectsGlobalScope":true,"impliedFormat":1},{"version":"965f36eae237dd74e6cca203a43e9ca801ce38824ead814728a2807b1910117d","affectsGlobalScope":true,"impliedFormat":1},{"version":"3925a6c820dcb1a06506c90b1577db1fdbf7705d65b62b99dce4be75c637e26b","affectsGlobalScope":true,"impliedFormat":1},{"version":"0a3d63ef2b853447ec4f749d3f368ce642264246e02911fcb1590d8c161b8005","affectsGlobalScope":true,"impliedFormat":1},{"version":"b5ce7a470bc3628408429040c4e3a53a27755022a32fd05e2cb694e7015386c7","affectsGlobalScope":true,"impliedFormat":1},{"version":"8444af78980e3b20b49324f4a16ba35024fef3ee069a0eb67616ea6ca821c47a","affectsGlobalScope":true,"impliedFormat":1},{"version":"3287d9d085fbd618c3971944b65b4be57859f5415f495b33a6adc994edd2f004","affectsGlobalScope":true,"impliedFormat":1},{"version":"b4b67b1a91182421f5df999988c690f14d813b9850b40acd06ed44691f6727ad","affectsGlobalScope":true,"impliedFormat":1},{"version":"8e7f8264d0fb4c5339605a15daadb037bf238c10b654bb3eee14208f860a32ea","affectsGlobalScope":true,"impliedFormat":1},{"version":"782dec38049b92d4e85c1585fbea5474a219c6984a35b004963b00beb1aab538","affectsGlobalScope":true,"impliedFormat":1},{"version":"6bbaa172e4398e6562365e7dca6c2639b8a595b55046c6055706dd2923f7d7c2","impliedFormat":99},{"version":"d3cfde44f8089768ebb08098c96d01ca260b88bccf238d55eee93f1c620ff5a5","impliedFormat":1},{"version":"293eadad9dead44c6fd1db6de552663c33f215c55a1bfa2802a1bceed88ff0ec","impliedFormat":1},{"version":"54f6ec6ea75acea6eb23635617252d249145edbc7bcd9d53f2d70280d2aef953","impliedFormat":1},{"version":"c25ce98cca43a3bfa885862044be0d59557be4ecd06989b2001a83dcf69620fd","impliedFormat":1},{"version":"8e71e53b02c152a38af6aec45e288cc65bede077b92b9b43b3cb54a37978bb33","impliedFormat":1},{"version":"754a9396b14ca3a4241591afb4edc644b293ccc8a3397f49be4dfd520c08acb3","impliedFormat":1},{"version":"f672c876c1a04a223cf2023b3d91e8a52bb1544c576b81bf64a8fec82be9969c","impliedFormat":1},{"version":"e4b03ddcf8563b1c0aee782a185286ed85a255ce8a30df8453aade2188bbc904","impliedFormat":1},{"version":"de2316e90fc6d379d83002f04ad9698bc1e5285b4d52779778f454dd12ce9f44","impliedFormat":1},{"version":"25b3f581e12ede11e5739f57a86e8668fbc0124f6649506def306cad2c59d262","impliedFormat":1},{"version":"2da997a01a6aa5c5c09de5d28f0f4407b597c5e1aecfd32f1815809c532650a2","impliedFormat":1},{"version":"5d26d2e47e2352def36f89a3e8bf8581da22b7f857e07ef3114cd52cf4813445","impliedFormat":1},{"version":"3db2efd285e7328d8014b54a7fce3f4861ebcdc655df40517092ed0050983617","impliedFormat":1},{"version":"d5d39a24c759df40480a4bfc0daffd364489702fdbcbdfc1711cde34f8739995","impliedFormat":1},{"version":"b4cf968abdb59faf21fa8a38457bc6d31cc18eff07c1d5f40df95ad87a0b6e80","impliedFormat":99},{"version":"a07daee7d2bf3132c437203f2fb694776a938075b570d339e0d482d85ff3b608","impliedFormat":99},{"version":"4a4ccbb1373e25abffbd6d31305d7482fc2b83bfa1e62259d50f3e07ef9ea907","signature":"00a25f391ab38cfffb6ebaeb0e0959e654deab6b0b8020685e468ca6b5c85a16"},{"version":"adad4d546baa527566e61d0b9625bd5c786715ded16850fbcb0f4b25ced1fd33","signature":"ff5dcf4372c1330044018126270451c0d9a4c63f83c739b9334991468061ae4a"},{"version":"e3673b0d742074da84f4f08b6599338ab7ccfa3bd33bd0b2bac16a963d243b05","signature":"cf35357b11c3ac5385c3fa30335fa725786740b313893fb8df0e6538d8ba9664"},{"version":"4db276a3cdd1fdc6a188413eb1b8758795091e3bde8a46c6ae54319e094c16f0","signature":"21ee733142093f600a17abcecc4424cc54ce71e36c4eabedc505884c29c36cc8"},{"version":"ef1315d0f37611ccbfbbd67023a5582de409fb0eae9ecf5439a73e0a8466303a","signature":"7471d777fed535cf522ba905657d57e733f54f2a5073e6fd208365b79c6b1003"},{"version":"6c7176368037af28cb72f2392010fa1cef295d6d6744bca8cfb54985f3a18c3e","affectsGlobalScope":true,"impliedFormat":1},{"version":"ab41ef1f2cdafb8df48be20cd969d875602483859dc194e9c97c8a576892c052","affectsGlobalScope":true,"impliedFormat":1},{"version":"437e20f2ba32abaeb7985e0afe0002de1917bc74e949ba585e49feba65da6ca1","affectsGlobalScope":true,"impliedFormat":1},{"version":"21d819c173c0cf7cc3ce57c3276e77fd9a8a01d35a06ad87158781515c9a438a","impliedFormat":1},{"version":"a79e62f1e20467e11a904399b8b18b18c0c6eea6b50c1168bf215356d5bebfaf","affectsGlobalScope":true,"impliedFormat":1},{"version":"d802f0e6b5188646d307f070d83512e8eb94651858de8a82d1e47f60fb6da4e2","affectsGlobalScope":true,"impliedFormat":1},{"version":"4967529644e391115ca5592184d4b63980569adf60ee685f968fd59ab1557188","impliedFormat":1},{"version":"5929864ce17fba74232584d90cb721a89b7ad277220627cc97054ba15a98ea8f","impliedFormat":1},{"version":"763fe0f42b3d79b440a9b6e51e9ba3f3f91352469c1e4b3b67bfa4ff6352f3f4","impliedFormat":1},{"version":"25c8056edf4314820382a5fdb4bb7816999acdcb929c8f75e3f39473b87e85bc","impliedFormat":1},{"version":"c464d66b20788266e5353b48dc4aa6bc0dc4a707276df1e7152ab0c9ae21fad8","impliedFormat":1},{"version":"78d0d27c130d35c60b5e5566c9f1e5be77caf39804636bc1a40133919a949f21","impliedFormat":1},{"version":"c6fd2c5a395f2432786c9cb8deb870b9b0e8ff7e22c029954fabdd692bff6195","impliedFormat":1},{"version":"1d6e127068ea8e104a912e42fc0a110e2aa5a66a356a917a163e8cf9a65e4a75","impliedFormat":1},{"version":"5ded6427296cdf3b9542de4471d2aa8d3983671d4cac0f4bf9c637208d1ced43","impliedFormat":1},{"version":"7f182617db458e98fc18dfb272d40aa2fff3a353c44a89b2c0ccb3937709bfb5","impliedFormat":1},{"version":"cadc8aced301244057c4e7e73fbcae534b0f5b12a37b150d80e5a45aa4bebcbd","impliedFormat":1},{"version":"385aab901643aa54e1c36f5ef3107913b10d1b5bb8cbcd933d4263b80a0d7f20","impliedFormat":1},{"version":"9670d44354bab9d9982eca21945686b5c24a3f893db73c0dae0fd74217a4c219","impliedFormat":1},{"version":"0b8a9268adaf4da35e7fa830c8981cfa22adbbe5b3f6f5ab91f6658899e657a7","impliedFormat":1},{"version":"11396ed8a44c02ab9798b7dca436009f866e8dae3c9c25e8c1fbc396880bf1bb","impliedFormat":1},{"version":"ba7bc87d01492633cb5a0e5da8a4a42a1c86270e7b3d2dea5d156828a84e4882","impliedFormat":1},{"version":"4893a895ea92c85345017a04ed427cbd6a1710453338df26881a6019432febdd","impliedFormat":1},{"version":"c21dc52e277bcfc75fac0436ccb75c204f9e1b3fa5e12729670910639f27343e","impliedFormat":1},{"version":"13f6f39e12b1518c6650bbb220c8985999020fe0f21d818e28f512b7771d00f9","impliedFormat":1},{"version":"9b5369969f6e7175740bf51223112ff209f94ba43ecd3bb09eefff9fd675624a","impliedFormat":1},{"version":"4fe9e626e7164748e8769bbf74b538e09607f07ed17c2f20af8d680ee49fc1da","impliedFormat":1},{"version":"24515859bc0b836719105bb6cc3d68255042a9f02a6022b3187948b204946bd2","impliedFormat":1},{"version":"ea0148f897b45a76544ae179784c95af1bd6721b8610af9ffa467a518a086a43","impliedFormat":1},{"version":"24c6a117721e606c9984335f71711877293a9651e44f59f3d21c1ea0856f9cc9","impliedFormat":1},{"version":"dd3273ead9fbde62a72949c97dbec2247ea08e0c6952e701a483d74ef92d6a17","impliedFormat":1},{"version":"405822be75ad3e4d162e07439bac80c6bcc6dbae1929e179cf467ec0b9ee4e2e","impliedFormat":1},{"version":"0db18c6e78ea846316c012478888f33c11ffadab9efd1cc8bcc12daded7a60b6","impliedFormat":1},{"version":"e61be3f894b41b7baa1fbd6a66893f2579bfad01d208b4ff61daef21493ef0a8","impliedFormat":1},{"version":"bd0532fd6556073727d28da0edfd1736417a3f9f394877b6d5ef6ad88fba1d1a","impliedFormat":1},{"version":"89167d696a849fce5ca508032aabfe901c0868f833a8625d5a9c6e861ef935d2","impliedFormat":1},{"version":"615ba88d0128ed16bf83ef8ccbb6aff05c3ee2db1cc0f89ab50a4939bfc1943f","impliedFormat":1},{"version":"a4d551dbf8746780194d550c88f26cf937caf8d56f102969a110cfaed4b06656","impliedFormat":1},{"version":"8bd86b8e8f6a6aa6c49b71e14c4ffe1211a0e97c80f08d2c8cc98838006e4b88","impliedFormat":1},{"version":"317e63deeb21ac07f3992f5b50cdca8338f10acd4fbb7257ebf56735bf52ab00","impliedFormat":1},{"version":"4732aec92b20fb28c5fe9ad99521fb59974289ed1e45aecb282616202184064f","impliedFormat":1},{"version":"2e85db9e6fd73cfa3d7f28e0ab6b55417ea18931423bd47b409a96e4a169e8e6","impliedFormat":1},{"version":"c46e079fe54c76f95c67fb89081b3e399da2c7d109e7dca8e4b58d83e332e605","impliedFormat":1},{"version":"bf67d53d168abc1298888693338cb82854bdb2e69ef83f8a0092093c2d562107","impliedFormat":1},{"version":"a12d953aa755b14ac1d28ecdc1e184f3285b01d6d1e58abc11bf1826bc9d80e6","affectsGlobalScope":true,"impliedFormat":1},{"version":"a38efe83ff77c34e0f418a806a01ca3910c02ee7d64212a59d59bca6c2c38fa1","impliedFormat":1},{"version":"7394959e5a741b185456e1ef5d64599c36c60a323207450991e7a42e08911419","impliedFormat":1},{"version":"3fe4022ba1e738034e38ad9afacbf0f1f16b458ed516326f5bf9e4a31e9be1dc","impliedFormat":1},{"version":"a957197054b074bcdf5555d26286e8461680c7c878040d0f4e2d5509a7524944","affectsGlobalScope":true,"impliedFormat":1},{"version":"4314c7a11517e221f7296b46547dbc4df047115b182f544d072bdccffa57fc72","impliedFormat":1},{"version":"e9b97d69510658d2f4199b7d384326b7c4053b9e6645f5c19e1c2a54ede427fc","impliedFormat":1},{"version":"c2510f124c0293ab80b1777c44d80f812b75612f297b9857406468c0f4dafe29","affectsGlobalScope":true,"impliedFormat":1},{"version":"5524481e56c48ff486f42926778c0a3cce1cc85dc46683b92b1271865bcf015a","impliedFormat":1},{"version":"f478f6f5902dc144c0d6d7bdc919c5177cac4d17a8ca8653c2daf6d7dc94317f","affectsGlobalScope":true,"impliedFormat":1},{"version":"19d5f8d3930e9f99aa2c36258bf95abbe5adf7e889e6181872d1cdba7c9a7dd5","impliedFormat":1},{"version":"9855e02d837744303391e5623a531734443a5f8e6e8755e018c41d63ad797db2","impliedFormat":1},{"version":"a6bf63d17324010ca1fbf0389cab83f93389bb0b9a01dc8a346d092f65b3605f","impliedFormat":1},{"version":"e009777bef4b023a999b2e5b9a136ff2cde37dc3f77c744a02840f05b18be8ff","impliedFormat":1},{"version":"1e0d1f8b0adfa0b0330e028c7941b5a98c08b600efe7f14d2d2a00854fb2f393","impliedFormat":1},{"version":"71450bbc2d82821d24ca05699a533e72758964e9852062c53b30f31c36978ab8","affectsGlobalScope":true,"impliedFormat":1},{"version":"88bc59b32d0d5b4e5d9632ac38edea23454057e643684c3c0b94511296f2998c","affectsGlobalScope":true,"impliedFormat":1},{"version":"a0a1dda070290b92da5a50113b73ecc4dd6bcbffad66e3c86503d483eafbadcf","impliedFormat":1},{"version":"59dcad36c4549175a25998f6a8b33c1df8e18df9c12ebad1dfb25af13fd4b1ce","impliedFormat":1},{"version":"206a70e72af3e24688397b81304358526ce70d020e4c2606c4acfd1fa1e81fb2","impliedFormat":1},{"version":"017caf5d2a8ef581cf94f678af6ce7415e06956317946315560f1487b9a56167","impliedFormat":1},{"version":"528b62e4272e3ddfb50e8eed9e359dedea0a4d171c3eb8f337f4892aac37b24b","impliedFormat":1},{"version":"d71535813e39c23baa113bc4a29a0e187b87d1105ccc8c5a6ebaca38d9a9bff2","impliedFormat":1},{"version":"4c3148420835de895b9218b2cea321a4607008ba5cefa57b2a57e1c1ef85d22f","affectsGlobalScope":true,"impliedFormat":1},{"version":"f72bc8fe16da67e4e3268599295797b202b95e54bd215a03f97e925dd1502a36","impliedFormat":1},{"version":"b1b6ee0d012aeebe11d776a155d8979730440082797695fc8e2a5c326285678f","impliedFormat":1},{"version":"45875bcae57270aeb3ebc73a5e3fb4c7b9d91d6b045f107c1d8513c28ece71c0","impliedFormat":1},{"version":"915e18c559321c0afaa8d34674d3eb77e1ded12c3e85bf2a9891ec48b07a1ca5","affectsGlobalScope":true,"impliedFormat":1},{"version":"636302a00dfd1f9fe6e8e91e4e9350c6518dcc8d51a474e4fc3a9ba07135100b","affectsGlobalScope":true,"impliedFormat":1},{"version":"3f16a7e4deafa527ed9995a772bb380eb7d3c2c0fd4ae178c5263ed18394db2c","impliedFormat":1},{"version":"933921f0bb0ec12ef45d1062a1fc0f27635318f4d294e4d99de9a5493e618ca2","impliedFormat":1},{"version":"71a0f3ad612c123b57239a7749770017ecfe6b66411488000aba83e4546fde25","impliedFormat":1},{"version":"8145e07aad6da5f23f2fcd8c8e4c5c13fb26ee986a79d03b0829b8fce152d8b2","impliedFormat":1},{"version":"e1120271ebbc9952fdc7b2dd3e145560e52e06956345e6fdf91d70ca4886464f","impliedFormat":1},{"version":"814118df420c4e38fe5ae1b9a3bafb6e9c2aa40838e528cde908381867be6466","impliedFormat":1},{"version":"e1ce1d622f1e561f6cdf246372ead3bbc07ce0342024d0e9c7caf3136f712698","impliedFormat":1},{"version":"199c8269497136f3a0f4da1d1d90ab033f899f070e0dd801946f2a241c8abba2","impliedFormat":1},{"version":"37ba7b45141a45ce6e80e66f2a96c8a5ab1bcef0fc2d0f56bb58df96ec67e972","impliedFormat":1},{"version":"125d792ec6c0c0f657d758055c494301cc5fdb327d9d9d5960b3f129aff76093","impliedFormat":1},{"version":"27e4532aaaa1665d0dd19023321e4dc12a35a741d6b8e1ca3517fcc2544e0efe","affectsGlobalScope":true,"impliedFormat":1},{"version":"2754d8221d77c7b382096651925eb476f1066b3348da4b73fe71ced7801edada","impliedFormat":1},{"version":"6266d94fb9165d42716e45f3a537ca9f59c07b1dfa8394a659acf139134807db","affectsGlobalScope":true,"impliedFormat":1},{"version":"f0be1b8078cd549d91f37c30c222c2a187ac1cf981d994fb476a1adc61387b14","affectsGlobalScope":true,"impliedFormat":1},{"version":"0aaed1d72199b01234152f7a60046bc947f1f37d78d182e9ae09c4289e06a592","impliedFormat":1},{"version":"98ffdf93dfdd206516971d28e3e473f417a5cfd41172e46b4ce45008f640588e","impliedFormat":1},{"version":"66ba1b2c3e3a3644a1011cd530fb444a96b1b2dfe2f5e837a002d41a1a799e60","impliedFormat":1},{"version":"7e514f5b852fdbc166b539fdd1f4e9114f29911592a5eb10a94bb3a13ccac3c4","impliedFormat":1},{"version":"7d6ff413e198d25639f9f01f16673e7df4e4bd2875a42455afd4ecc02ef156da","affectsGlobalScope":true,"impliedFormat":1},{"version":"a7692a54334fd08960cd0c610ff509c2caa93998e0dcefa54021489bcc67c22d","affectsGlobalScope":true,"impliedFormat":1},{"version":"74736930d108365d7bbe740c7154706ccfb1b2a3855a897963ab3e5c07ecbf19","impliedFormat":1},{"version":"3a051941721a7f905544732b0eb819c8d88333a96576b13af08b82c4f17581e4","impliedFormat":1},{"version":"ac5ed35e649cdd8143131964336ab9076937fa91802ec760b3ea63b59175c10a","impliedFormat":1},{"version":"1e25f8d0a8573cafd5b5a16af22d26ab872068a693b9dbccd3f72846ab373655","affectsGlobalScope":true,"impliedFormat":1},{"version":"3797dd6f4ea3dc15f356f8cdd3128bfa18122213b38a80d6c1f05d8e13cbdad8","impliedFormat":1},{"version":"ad90122e1cb599b3bc06a11710eb5489101be678f2920f2322b0ac3e195af78d","impliedFormat":1},{"version":"316f1486e15cbf7896425f0a16dfe12d447dd57cfb3244b8b119c77df870858f","impliedFormat":99},{"version":"dbde42ccb4f43c83fa599c786178a43034a3a209fa9742ea58421c3cd56a9e17","signature":"3b11ef5c155854118ddea86989898b115c10fa855264dae68e5257b5433ed7a1"},{"version":"5cbbb04ac4a17f9c6ad533397ae5e769476b35f2241f468a1e336cc53b5e1dc5","signature":"034897ba28b2f59198b3bf0932fef553aaf3e54a3c7869e466fa8a3e37fd6ef0"},{"version":"aebb775370916c8afc13c7ea8596dd41d004b4a959ff6210ddd8cb3df24fa543","signature":"67e963223c23b123a72306ad2f9109580dc0094cc6270ad60468378dccd176b6"},"02145b8b587e0e7a6c9b1689112af48cd2388ec1d5e80ca5cf87aa5f4013f20a",{"version":"2556e7e8bb7e6f0bb3fe25f3da990d1812cb91f8c9b389354b6a0c8a6d687590","impliedFormat":99},{"version":"ad1c91ca536e0962dcbfcdff40073e3dd18da839e0baad3fe990cf0d10c93065","impliedFormat":99},{"version":"19cf605ba2a4e8fba017edebdddbbc45aea897ddc58b4aae4c55f382b570ff53","impliedFormat":99},{"version":"884aab8c07224434c034b49e88de0511f21536aa83ee88f1285160ba6d3fb77a","impliedFormat":99},{"version":"130b39b18c99e5678635f383ef57efaa507196838ddabb47cb104064e2ce4cd3","impliedFormat":99},{"version":"7618d2cb769e2093acd4623d645b683ab9fea78c262b3aa354aba9f5afdcaaee","impliedFormat":99},{"version":"029f1ce606891c3f57f4c0c60b8a46c8ced53e719d27a7c9693817f2fe37690b","impliedFormat":99},{"version":"83596c963e276a9c5911412fba37ae7c1fe280f2d77329928828eed5a3bfa9a6","impliedFormat":99},{"version":"81acfd3a01767770e559bc57d32684756989475be6ea32e2fe6255472c3ea116","impliedFormat":99},{"version":"88d0c3eae81868b4749ba5b88f9b6d564ee748321ce19a2f4269a4e9dd46020a","impliedFormat":99},{"version":"8266b39a828bfb2695cabfa403e7c1226d7d94599f21bea9f760e35f4ca7a576","impliedFormat":99},{"version":"c1c1e740195c882a776cf084acbaf963907785ee39e723c6375fec9a59bf2387","impliedFormat":99},{"version":"137f96b78e477e08876f6372072c3b6f1767672bf182013f84f8ae53d987ff86","impliedFormat":99},{"version":"29896c61d09880ff39f8a86873bf72ce4deb910158d3a496122781e29904c615","impliedFormat":99},{"version":"81ce540acef0d6972b0b163331583181be3603300f618dcd6a6a3138954ff30c","impliedFormat":99},{"version":"19990350fca066265b2c190c9b6cde1229f35002ea2d4df8c9e397e9942f6c89","impliedFormat":99},{"version":"8fb8fdda477cd7382477ffda92c2bb7d9f7ef583b1aa531eb6b2dc2f0a206c10","impliedFormat":99},{"version":"66995b0c991b5c5d42eff1d950733f85482c7419f7296ab8952e03718169e379","impliedFormat":99},{"version":"9863f888da357e35e013ca3465b794a490a198226bd8232c2f81fb44e16ff323","impliedFormat":99},{"version":"84bc2d80326a83ee4a6e7cba2fd480b86502660770c0e24da96535af597c9f1e","impliedFormat":99},{"version":"ea27768379b866ee3f5da2419650acdb01125479f7af73580a4bceb25b79e372","impliedFormat":99},{"version":"598931eeb4362542cae5845f95c5f0e45ac668925a40ce201e244d7fe808e965","impliedFormat":99},{"version":"da9ef88cde9f715756da642ad80c4cd87a987f465d325462d6bc2a0b11d202c8","impliedFormat":99},{"version":"b4c6184d78303b0816e779a48bef779b15aea4a66028eb819aac0abee8407dea","impliedFormat":99},{"version":"db085d2171d48938a99e851dafe0e486dce9859e5dfa73c21de5ed3d4d6fb0c5","impliedFormat":99},{"version":"62a3ad1ddd1f5974b3bf105680b3e09420f2230711d6520a521fab2be1a32838","impliedFormat":99},{"version":"a77be6fc44c876bc10c897107f84eaba10790913ebdcad40fcda7e47469b2160","impliedFormat":99},{"version":"06cf55b6da5cef54eaaf51cdc3d4e5ebf16adfdd9ebd20cec7fe719be9ced017","impliedFormat":99},{"version":"91f5dbcdb25d145a56cffe957ec665256827892d779ef108eb2f3864faff523b","impliedFormat":99},{"version":"052ba354bab8fb943e0bc05a0769f7b81d7c3b3c6cd0f5cfa53c7b2da2a525c5","impliedFormat":99},{"version":"927955a3de5857e0a1c575ced5a4245e74e6821d720ed213141347dd1870197f","impliedFormat":99},{"version":"fec804d54cd97dd77e956232fc37dc13f53e160d4bbeeb5489e86eeaa91f7ebd","impliedFormat":99},{"version":"75ef949153a3e6ff419e39d0fa5eb6617e92de5019738ad3c43872023d9665f5","impliedFormat":99},{"version":"ed9ce8e6dd5b2d00ab95efc44e4ad9d0eba77362e01619cb21dedfdedbad51b8","impliedFormat":1},{"version":"5520611f997f2b8e62a6e191da45b07813ac2e758304690606604a64ac0ca976","impliedFormat":1},{"version":"00b469cba48c9d772a4555216d21ba41cdb5a732af797ccb57267344f4fc6c3d","impliedFormat":1},{"version":"2766bf77766c85c25ec31586823fefb48344e64556faad7e75a3363e517814f6","impliedFormat":1},{"version":"b7d1eaffd8003e8dc0ec275e58bd24c7b9a4dbae2a2d0d83cf248c88237262ce","impliedFormat":99},{"version":"7a8b08c0521c3a9e1db3c8b14f37e59d838fdc32389f1193b96630b435a8e64e","impliedFormat":99},{"version":"2e54848617fae9eb73654d9cf4295d99dab4b9c759934e5b82e2e57e6aaaef20","impliedFormat":99},{"version":"ae056b7c3f727d492166d4c1169d5905ddd194128a014b5d2d621248ed94b49c","impliedFormat":99},{"version":"edc5d99a04130f066f6e8d31c7c3f9ba4749496356470279408833b4faee3554","impliedFormat":99},{"version":"2f502ac2473a2bbf0d6217f9660e9d5bf40165a2f91067596323898c53dab87c","impliedFormat":99},{"version":"21f27a0c8bc8d9a4e2cf6d9c60140f8b071d0e1ffddb4b7dcf6bbf74d0e8d470","impliedFormat":99},{"version":"754108a1e136331ac67dc8ee6aa9c95cb3bea3ac8bbf48dda7b0dbabbc8f970f","impliedFormat":99},{"version":"9e9979adc151111d71ad049305be1b6df324a98d1d1edd84adb1756cc1911bfd","impliedFormat":99},{"version":"0f38bcf19f105cd31ded5d46491ca50a46462c838816c358d445f41ac7a68f5a","impliedFormat":99},{"version":"a65fc667cd78d7cad733fab96f4bff3183c0dcbc15b083dce0055cffc5c64f9f","impliedFormat":99},{"version":"c735e27dfa775155120c50f714f594639dd7b6ad1878097feb005a0b5c59b7c2","impliedFormat":99},{"version":"f3dd541f4d87bba38dabf43fd06b7616c6f86b11608d30e61086ab39f84fa8d8","impliedFormat":99},{"version":"5583f1c0912e96625a30c20b83cff3d175194b222e4eb22170d19e33f7d8729f","impliedFormat":99},{"version":"a515b08047d24de84d89ad80b2843e565e65ed4a4e7cfc9707656470d7c555f9","impliedFormat":99},{"version":"cf43b2783a58e42fca6e45f0d47465b2ab855b7e9bea5ccb68447297df8aade5","impliedFormat":99},{"version":"27a3f158d8e6f59f29e55c37d4ae3c39574ee99539c4f12bcf46d29929974a62","impliedFormat":99},{"version":"a2d23e2f22006483c89f42077bd6a9bf92db721ebb5e0859b06fdb5c8369586d","impliedFormat":99},{"version":"6a8aec6851c09e4524937485f6553ec7332118482f3ed33238cea7496ff42103","impliedFormat":99},{"version":"d67fd6ea8cf37131627c7a9ae1de96d19d41cb32e741a475f0f56942576a7b3b","impliedFormat":99},{"version":"9b2f424a2c5c592d738100d898df3f9ee018bdd23a279f10849c3686abbec158","impliedFormat":99},{"version":"2fef96aedd23d59b6093d12d9f97c95e3a4008fcc02e8c68304235a1770fc70a","impliedFormat":99},{"version":"cdcf9ea426ad970f96ac930cd176d5c69c6c24eebd9fc580e1572d6c6a88f62c","impliedFormat":1},{"version":"23cd712e2ce083d68afe69224587438e5914b457b8acf87073c22494d706a3d0","impliedFormat":1},{"version":"487b694c3de27ddf4ad107d4007ad304d29effccf9800c8ae23c2093638d906a","impliedFormat":1},{"version":"e525f9e67f5ddba7b5548430211cae2479070b70ef1fd93550c96c10529457bd","impliedFormat":1},{"version":"ccf4552357ce3c159ef75f0f0114e80401702228f1898bdc9402214c9499e8c0","impliedFormat":1},{"version":"c6fd2c5a395f2432786c9cb8deb870b9b0e8ff7e22c029954fabdd692bff6195","impliedFormat":1},{"version":"68834d631c8838c715f225509cfc3927913b9cc7a4870460b5b60c8dbdb99baf","impliedFormat":1},{"version":"4bc0794175abedf989547e628949888c1085b1efcd93fc482bccd77ee27f8b7c","impliedFormat":1},{"version":"3c8e93af4d6ce21eb4c8d005ad6dc02e7b5e6781f429d52a35290210f495a674","impliedFormat":1},{"version":"2c9875466123715464539bfd69bcaccb8ff6f3e217809428e0d7bd6323416d01","impliedFormat":1},{"version":"ea6bc8de8b59f90a7a3960005fd01988f98fd0784e14bc6922dde2e93305ec7d","impliedFormat":1},{"version":"36107995674b29284a115e21a0618c4c2751b32a8766dd4cb3ba740308b16d59","impliedFormat":1},{"version":"914a0ae30d96d71915fc519ccb4efbf2b62c0ddfb3a3fc6129151076bc01dc60","impliedFormat":1},{"version":"33e981bf6376e939f99bd7f89abec757c64897d33c005036b9a10d9587d80187","impliedFormat":1},{"version":"6c8e442ba33b07892169a14f7757321e49ab0f1032d676d321a1fdab8a67d40c","impliedFormat":1},{"version":"b41767d372275c154c7ea6c9d5449d9a741b8ce080f640155cc88ba1763e35b3","impliedFormat":1},{"version":"1cd673d367293fc5cb31cd7bf03d598eb368e4f31f39cf2b908abbaf120ab85a","impliedFormat":1},{"version":"af13e99445f37022c730bfcafcdc1761e9382ce1ea02afb678e3130b01ce5676","impliedFormat":1},{"version":"3825bf209f1662dfd039010a27747b73d0ef379f79970b1d05601ec8e8a4249f","impliedFormat":1},{"version":"0b6e25234b4eec6ed96ab138d96eb70b135690d7dd01f3dd8a8ab291c35a683a","impliedFormat":1},{"version":"9666f2f84b985b62400d2e5ab0adae9ff44de9b2a34803c2c5bd3c8325b17dc0","impliedFormat":1},{"version":"da52342062e70c77213e45107921100ba9f9b3a30dd019444cf349e5fb3470c4","impliedFormat":1},{"version":"e9ace91946385d29192766bf783b8460c7dbcbfc63284aa3c9cae6de5155c8bc","impliedFormat":1},{"version":"40b463c6766ca1b689bfcc46d26b5e295954f32ad43e37ee6953c0a677e4ae2b","impliedFormat":1},{"version":"249b9cab7f5d628b71308c7d9bb0a808b50b091e640ba3ed6e2d0516f4a8d91d","impliedFormat":1},{"version":"1e30c045732e7db8f7a82cf90b516ebe693d2f499ce2250a977ec0d12e44a529","impliedFormat":1},{"version":"84b736594d8760f43400202859cda55607663090a43445a078963031d47e25e7","impliedFormat":1},{"version":"499e5b055a5aba1e1998f7311a6c441a369831c70905cc565ceac93c28083d53","impliedFormat":1},{"version":"54c3e2371e3d016469ad959697fd257e5621e16296fa67082c2575d0bf8eced0","impliedFormat":1},{"version":"beb8233b2c220cfa0feea31fbe9218d89fa02faa81ef744be8dce5acb89bb1fd","impliedFormat":1},{"version":"78b29846349d4dfdd88bd6650cc5d2baaa67f2e89dc8a80c8e26ef7995386583","impliedFormat":1},{"version":"5d0375ca7310efb77e3ef18d068d53784faf62705e0ad04569597ae0e755c401","impliedFormat":1},{"version":"59af37caec41ecf7b2e76059c9672a49e682c1a2aa6f9d7dc78878f53aa284d6","impliedFormat":1},{"version":"addf417b9eb3f938fddf8d81e96393a165e4be0d4a8b6402292f9c634b1cb00d","impliedFormat":1},{"version":"e38d4fdf79e1eadd92ed7844c331dbaa40f29f21541cfee4e1acff4db09cda33","impliedFormat":1},{"version":"8bd86b8e8f6a6aa6c49b71e14c4ffe1211a0e97c80f08d2c8cc98838006e4b88","impliedFormat":1},{"version":"7c10a32ae6f3962672e6869ee2c794e8055d8225ef35c91c0228e354b4e5d2d3","impliedFormat":1},{"version":"2e85db9e6fd73cfa3d7f28e0ab6b55417ea18931423bd47b409a96e4a169e8e6","impliedFormat":1},{"version":"c46e079fe54c76f95c67fb89081b3e399da2c7d109e7dca8e4b58d83e332e605","impliedFormat":1},{"version":"99f569b42ea7e7c5fe404b2848c0893f3e1a56e0547c1cd0f74d5dbb9a9de27e","impliedFormat":1},{"version":"b3fb72492a07a76f7bfa29ecadd029eea081df11512e4dfe6f930a5a9cb1fb75","impliedFormat":1},{"version":"99257d2cf17c6c6f36131f640129289062c66384dba9d21a991cacfdc346711e","impliedFormat":99},{"version":"5574d520dabc450de6be799f1791d86d71da4fb236f16e6ca21b953788bb5154","impliedFormat":1},{"version":"5f877dfc985d1fd3ac8bf4a75cd77b06c42ca608809b324c44b4151758de7189","affectsGlobalScope":true,"impliedFormat":1},{"version":"4f585cea32567574de0301ed79131a4c3d0bb36bbfea7f66e2f29b5dce1c4293","affectsGlobalScope":true,"impliedFormat":1},{"version":"14c2fd6220654a41c53836a62ba96d4b515ae1413b0ccb31c2445fb1ae1de5de","affectsGlobalScope":true,"impliedFormat":1},{"version":"4f29c38739500cd35a2ce41d15a35e34445ca755ebb991915b5f170985a49d21","affectsGlobalScope":true,"impliedFormat":1},{"version":"16f842a1a38c8bc26dfebd1e3c56a63a2c2a0e1979a4141c8012d2f763c38267","affectsGlobalScope":true,"impliedFormat":1},{"version":"1ba59c8bbeed2cb75b239bb12041582fa3e8ef32f8d0bd0ec802e38442d3f317","impliedFormat":1}],"root":[[77,81],[182,185]],"options":{"allowImportingTsExtensions":false,"allowSyntheticDefaultImports":true,"declaration":true,"declarationMap":true,"esModuleInterop":true,"exactOptionalPropertyTypes":false,"jsx":4,"module":99,"noFallthroughCasesInSwitch":true,"noImplicitReturns":true,"noUncheckedIndexedAccess":false,"noUnusedLocals":true,"noUnusedParameters":true,"outDir":"./","rootDir":"../src","skipLibCheck":true,"sourceMap":true,"strict":true,"target":9,"tsBuildInfoFile":"./.tsbuildinfo","verbatimModuleSyntax":false},"referencedMap":[[60,1],[76,2],[75,3],[289,1],[288,4],[292,5],[291,6],[290,1],[287,1],[127,7],[128,7],[129,8],[87,9],[130,10],[131,11],[132,12],[82,1],[85,13],[83,1],[84,1],[133,14],[134,15],[135,16],[136,17],[137,18],[138,19],[139,19],[141,1],[140,20],[142,21],[143,22],[144,23],[126,24],[86,1],[145,25],[146,26],[147,27],[180,28],[148,29],[149,30],[150,31],[151,32],[152,33],[153,34],[154,35],[155,36],[156,37],[157,38],[158,38],[159,39],[160,1],[161,1],[162,40],[164,41],[163,42],[165,43],[166,44],[167,45],[168,46],[169,47],[170,48],[171,49],[172,50],[173,51],[174,52],[175,53],[176,54],[177,55],[178,56],[179,57],[181,58],[293,58],[88,1],[229,59],[231,60],[234,60],[236,61],[235,60],[233,62],[232,62],[237,63],[286,64],[241,65],[240,66],[230,67],[242,68],[239,69],[238,60],[228,70],[226,1],[224,71],[227,72],[225,73],[223,74],[222,75],[220,76],[221,76],[219,1],[191,77],[186,1],[188,78],[187,79],[198,77],[197,77],[199,80],[196,81],[194,77],[195,77],[192,82],[193,77],[244,83],[243,1],[207,1],[208,84],[205,1],[206,1],[200,85],[190,86],[189,1],[218,87],[203,88],[216,89],[201,1],[202,90],[217,91],[212,92],[213,93],[211,94],[215,95],[209,96],[204,97],[214,98],[210,89],[58,1],[59,1],[10,1],[11,1],[13,1],[12,1],[2,1],[14,1],[15,1],[16,1],[17,1],[18,1],[19,1],[20,1],[21,1],[3,1],[22,1],[23,1],[4,1],[24,1],[28,1],[25,1],[26,1],[27,1],[29,1],[30,1],[31,1],[5,1],[32,1],[33,1],[34,1],[35,1],[6,1],[39,1],[36,1],[37,1],[38,1],[40,1],[7,1],[41,1],[46,1],[47,1],[42,1],[43,1],[44,1],[45,1],[8,1],[51,1],[48,1],[49,1],[50,1],[52,1],[9,1],[53,1],[54,1],[55,1],[57,1],[56,1],[1,1],[104,99],[114,100],[103,99],[124,101],[95,102],[94,103],[123,104],[117,105],[122,106],[97,107],[111,108],[96,109],[120,110],[92,111],[91,104],[121,112],[93,113],[98,114],[99,1],[102,114],[89,1],[125,115],[115,116],[106,117],[107,118],[109,119],[105,120],[108,121],[118,104],[100,122],[101,123],[110,124],[90,125],[113,116],[112,114],[116,1],[119,126],[285,127],[262,128],[273,129],[260,130],[274,125],[283,131],[251,132],[252,133],[250,103],[282,104],[277,134],[281,135],[254,136],[270,137],[253,138],[280,139],[248,140],[249,134],[255,141],[256,1],[261,142],[259,141],[246,143],[284,144],[275,145],[265,146],[264,141],[266,147],[268,148],[263,149],[267,150],[278,104],[257,151],[258,152],[269,153],[247,125],[272,154],[271,141],[276,1],[245,1],[279,155],[74,156],[65,157],[72,158],[67,1],[68,1],[66,159],[69,160],[61,1],[62,1],[73,161],[64,162],[70,1],[71,163],[63,164],[184,165],[77,166],[78,166],[79,166],[185,167],[80,166],[81,166],[182,168],[183,166]],"affectedFilesPendingEmit":[[184,51],[77,51],[78,51],[79,51],[185,51],[80,51],[81,51],[182,51],[183,51]],"version":"5.8.3"}
|
package/dist/index.d.ts
CHANGED
|
@@ -174,6 +174,13 @@ declare class WebSocketServerTransport implements Transport {
|
|
|
174
174
|
get isConnected(): boolean;
|
|
175
175
|
}
|
|
176
176
|
|
|
177
|
+
interface BrowserWebSocketClientTransportOptions {
|
|
178
|
+
maxRetries?: number;
|
|
179
|
+
initialRetryDelay?: number;
|
|
180
|
+
maxRetryDelay?: number;
|
|
181
|
+
connectionTimeout?: number;
|
|
182
|
+
retryMultiplier?: number;
|
|
183
|
+
}
|
|
177
184
|
/**
|
|
178
185
|
* Browser-compatible WebSocket client transport for connecting from browser extensions to a bridge server.
|
|
179
186
|
* This transport uses the native browser WebSocket API and doesn't require any Node.js dependencies.
|
|
@@ -182,11 +189,18 @@ declare class BrowserWebSocketClientTransport implements Transport {
|
|
|
182
189
|
private _socket?;
|
|
183
190
|
private _url;
|
|
184
191
|
private _connectionId?;
|
|
192
|
+
private _options;
|
|
193
|
+
private _retryCount;
|
|
194
|
+
private _isClosing;
|
|
195
|
+
private _connectionTimeoutId?;
|
|
185
196
|
onclose?: () => void;
|
|
186
197
|
onerror?: (error: Error) => void;
|
|
187
198
|
onmessage?: (message: JSONRPCMessage) => void;
|
|
188
|
-
constructor(url: string | URL);
|
|
199
|
+
constructor(url: string | URL, options?: BrowserWebSocketClientTransportOptions);
|
|
189
200
|
start(): Promise<void>;
|
|
201
|
+
private _connectWithRetry;
|
|
202
|
+
private _sleep;
|
|
203
|
+
private _attemptConnection;
|
|
190
204
|
close(): Promise<void>;
|
|
191
205
|
send(message: JSONRPCMessage): Promise<void>;
|
|
192
206
|
/**
|
|
@@ -322,4 +336,4 @@ interface StoredEvent {
|
|
|
322
336
|
clientId: string;
|
|
323
337
|
}
|
|
324
338
|
|
|
325
|
-
export { BrowserWebSocketClientTransport, type EventId, ExtensionClientTransport, type ExtensionClientTransportOptions, ExtensionServerTransport, type MCPBrowserInterface, type MCPConnectOptions, type MCPEventMessage, type MCPEventStore, type MCPReplayEventMessage, type MCPServerInfo, type MCPServerInfoMessage, type MCPWindow, type StoredEvent, type StreamId, TabClientTransport, type TabClientTransportOptions, TabServerTransport, type TabServerTransportOptions, WebSocketClientTransport, WebSocketServerTransport };
|
|
339
|
+
export { BrowserWebSocketClientTransport, type BrowserWebSocketClientTransportOptions, type EventId, ExtensionClientTransport, type ExtensionClientTransportOptions, ExtensionServerTransport, type MCPBrowserInterface, type MCPConnectOptions, type MCPEventMessage, type MCPEventStore, type MCPReplayEventMessage, type MCPServerInfo, type MCPServerInfoMessage, type MCPWindow, type StoredEvent, type StreamId, TabClientTransport, type TabClientTransportOptions, TabServerTransport, type TabServerTransportOptions, WebSocketClientTransport, WebSocketServerTransport };
|
package/dist/index.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import {JSONRPCMessageSchema}from'@modelcontextprotocol/sdk/types.js';var a=class{_started=false;_targetOrigin;_channelId;_messageHandler;onclose;onerror;onmessage;constructor(e){if(!e.targetOrigin)throw new Error("targetOrigin must be explicitly set for security");this._targetOrigin=e.targetOrigin,this._channelId=e.channelId||"mcp-default";}async start(){if(this._started)throw new Error("Transport already started");this._messageHandler=e=>{if(e.origin===this._targetOrigin&&!(e.data?.channel!==this._channelId||e.data?.type!=="mcp")&&e.data?.direction==="server-to-client")try{let r=JSONRPCMessageSchema.parse(e.data.payload);this.onmessage?.(r);}catch(r){this.onerror?.(new Error(`Invalid message: ${r}`));}},window.addEventListener("message",this._messageHandler),this._started=true;}async send(e){if(!this._started)throw new Error("Transport not started");window.postMessage({channel:this._channelId,type:"mcp",direction:"client-to-server",payload:e},this._targetOrigin);}async close(){this._messageHandler&&window.removeEventListener("message",this._messageHandler),this._started=false,this.onclose?.();}};var c=class{_started=false;_allowedOrigins;_channelId;_messageHandler;_clientOrigin;onclose;onerror;onmessage;constructor(e){if(!e.allowedOrigins||e.allowedOrigins.length===0)throw new Error("At least one allowed origin must be specified");this._allowedOrigins=e.allowedOrigins,this._channelId=e.channelId||"mcp-default";}async start(){if(this._started)throw new Error("Transport already started");this._messageHandler=e=>{if(console.log({event:e}),!(!this._allowedOrigins.includes(e.origin)&&!this._allowedOrigins.includes("*"))&&!(e.data?.channel!==this._channelId||e.data?.type!=="mcp")&&e.data?.direction==="client-to-server"){this._clientOrigin=e.origin;try{let r=JSONRPCMessageSchema.parse(e.data.payload);this.onmessage?.(r);}catch(r){this.onerror?.(new Error(`Invalid message: ${r}`));}}},window.addEventListener("message",this._messageHandler),this._started=true;}async send(e){if(!this._started)throw new Error("Transport not started");if(!this._clientOrigin)throw new Error("No client connected");window.postMessage({channel:this._channelId,type:"mcp",direction:"server-to-client",payload:e},this._clientOrigin);}async close(){this._messageHandler&&window.removeEventListener("message",this._messageHandler),this._started=false,this.onclose?.();}};var d=class{_port;_extensionId;_portName;_messageHandler;_disconnectHandler;onclose;onerror;onmessage;constructor(e={}){this._extensionId=e.extensionId,this._portName=e.portName||"mcp";}async start(){if(this._port)throw new Error("ExtensionClientTransport already started! If using Client class, note that connect() calls start() automatically.");return new Promise((e,r)=>{if(!chrome?.runtime?.connect){r(new Error("Chrome runtime API not available. This transport must be used in a Chrome extension context."));return}try{this._extensionId?this._port=chrome.runtime.connect(this._extensionId,{name:this._portName}):this._port=chrome.runtime.connect({name:this._portName}),this._messageHandler=s=>{try{let o=JSONRPCMessageSchema.parse(s);this.onmessage?.(o);}catch(o){this.onerror?.(new Error(`Failed to parse message: ${o}`));}},this._disconnectHandler=()=>{this._cleanup(),this.onclose?.();},this._port.onMessage.addListener(this._messageHandler),this._port.onDisconnect.addListener(this._disconnectHandler);let t=chrome.runtime.lastError;if(t){this._cleanup(),r(new Error(`Connection failed: ${t.message}`));return}e();}catch(t){r(t);}})}async send(e,r){if(!this._port)throw new Error("Not connected");try{this._port.postMessage(e);}catch(t){throw new Error(`Failed to send message: ${t}`)}}async close(){if(this._port)try{this._port.disconnect();}catch{}this._cleanup(),this.onclose?.();}_cleanup(){this._port&&(this._messageHandler&&this._port.onMessage.removeListener(this._messageHandler),this._disconnectHandler&&this._port.onDisconnect.removeListener(this._disconnectHandler)),this._port=void 0;}};var h=class{_port;_started=false;_messageHandler;_disconnectHandler;onclose;onerror;onmessage;constructor(e){this._port=e;}async start(){if(this._started)throw new Error("ExtensionServerTransport already started! If using Server class, note that connect() calls start() automatically.");if(!this._port)throw new Error("Port not available");this._started=true,this._messageHandler=e=>{try{let r=JSONRPCMessageSchema.parse(e);this.onmessage?.(r);}catch(r){this.onerror?.(new Error(`Failed to parse message: ${r}`));}},this._disconnectHandler=()=>{this._cleanup(),this.onclose?.();},this._port.onMessage.addListener(this._messageHandler),this._port.onDisconnect.addListener(this._disconnectHandler);}async send(e,r){if(!this._started)throw new Error("Transport not started");if(!this._port)throw new Error("Not connected to client");try{this._port.postMessage(e);}catch(t){throw new Error(`Failed to send message: ${t}`)}}async close(){if(this._started=false,this._port)try{this._port.disconnect();}catch{}this._cleanup(),this.onclose?.();}_cleanup(){this._port&&(this._messageHandler&&this._port.onMessage.removeListener(this._messageHandler),this._disconnectHandler&&this._port.onDisconnect.removeListener(this._disconnectHandler));}};var l="mcp",m=class{_socket;_url;_WebSocket;onclose;onerror;onmessage;constructor(e){this._url=e;}async start(){if(this._socket)throw new Error("WebSocketClientTransport already started! If using Client class, note that connect() calls start() automatically.");if(!this._WebSocket)try{let e=await import('ws');this._WebSocket=e.WebSocket;}catch{throw new Error("Failed to import 'ws' package. Please install it with: npm install ws")}return new Promise((e,r)=>{this._socket=new this._WebSocket(this._url.toString(),{perMessageDeflate:false,...{protocol:l}}),this._socket.on("error",t=>{r(t),this.onerror?.(t);}),this._socket.on("open",()=>{e();}),this._socket.on("close",()=>{this.onclose?.();}),this._socket.on("message",t=>{let s;try{let o=t instanceof Buffer?t.toString("utf-8"):t.toString();s=JSONRPCMessageSchema.parse(JSON.parse(o));}catch(o){this.onerror?.(o);return}this.onmessage?.(s);});})}async close(){this._socket&&this._WebSocket&&this._socket.readyState===this._WebSocket.OPEN&&this._socket.close();}async send(e){return new Promise((r,t)=>{if(!this._socket||!this._WebSocket){t(new Error("Not connected"));return}if(this._socket.readyState!==this._WebSocket.OPEN){t(new Error("WebSocket is not open"));return}this._socket.send(JSON.stringify(e),s=>{s?t(s):r();});})}};var _=class{constructor(e){this._options=e;}_socket;_server;_started=false;_connectionId;onclose;onerror;onmessage;async start(){if(this._started)throw new Error("WebSocketServerTransport already started! If using Server class, note that connect() calls start() automatically.");if(this._started=true,this._options.socket)this._socket=this._options.socket,this.setupSocketHandlers(this._socket);else throw new Error("WebSocketServerTransport requires either a socket ")}setupSocketHandlers(e){e.onmessage=r=>{let t;try{let s=typeof r.data=="string"?r.data:r.data.toString(),o=JSON.parse(s);if(o.connectionId){this._connectionId=o.connectionId;let{connectionId:f,...i}=o;t=JSONRPCMessageSchema.parse(i);}else t=JSONRPCMessageSchema.parse(o);}catch(s){this.onerror?.(s);return}this.onmessage?.(t);},e.onerror=r=>{let t=new Error(`WebSocket error: ${JSON.stringify(r)}`);this.onerror?.(t);},e.onclose=()=>{this._socket=void 0,this.onclose?.();};}async close(){if(this._socket&&(this._socket.close(),this._socket=void 0),this._server)return new Promise(e=>{this._server.close(()=>{this._server=void 0,e();});})}send(e){return new Promise((r,t)=>{if(!this._socket||this._socket.readyState!==WebSocket.OPEN){t(new Error("No active WebSocket connection"));return}try{let s=this._connectionId?{...e,connectionId:this._connectionId}:e;this._socket.send(JSON.stringify(s)),r();}catch(s){t(s);}})}get socket(){return this._socket}get isConnected(){return this._socket?.readyState===WebSocket.OPEN}};var g=class{_socket;_url;_connectionId;onclose;onerror;onmessage;constructor(e){this._url=e.toString();}async start(){if(this._socket)throw new Error("BrowserWebSocketClientTransport already started! If using Client class, note that connect() calls start() automatically.");return new Promise((e,r)=>{try{this._socket=new WebSocket(this._url),this._socket.onopen=()=>{e();},this._socket.onerror=t=>{let s=new Error("WebSocket connection error");r(s),this.onerror?.(s);},this._socket.onclose=()=>{this._socket=void 0,this._connectionId=void 0,this.onclose?.();},this._socket.onmessage=t=>{let s;try{if(s=JSON.parse(t.data),s.connectionId&&!this._connectionId&&(this._connectionId=s.connectionId),s.connectionId){let{connectionId:f,...i}=s;s=i;}let o=JSONRPCMessageSchema.parse(s);this.onmessage?.(o);}catch(o){this.onerror?.(o);}};}catch(t){r(t);}})}async close(){this._socket&&this._socket.readyState===WebSocket.OPEN&&this._socket.close();}async send(e){return new Promise((r,t)=>{if(!this._socket||this._socket.readyState!==WebSocket.OPEN){t(new Error("WebSocket is not connected"));return}try{let s=this._connectionId?{...e,connectionId:this._connectionId}:e;this._socket.send(JSON.stringify(s)),r();}catch(s){t(s);}})}get isConnected(){return this._socket?.readyState===WebSocket.OPEN}};export{g as BrowserWebSocketClientTransport,d as ExtensionClientTransport,h as ExtensionServerTransport,a as TabClientTransport,c as TabServerTransport,m as WebSocketClientTransport,_ as WebSocketServerTransport};//# sourceMappingURL=index.js.map
|
|
1
|
+
import {JSONRPCMessageSchema}from'@modelcontextprotocol/sdk/types.js';var a=class{_started=false;_targetOrigin;_channelId;_messageHandler;onclose;onerror;onmessage;constructor(e){if(!e.targetOrigin)throw new Error("targetOrigin must be explicitly set for security");this._targetOrigin=e.targetOrigin,this._channelId=e.channelId||"mcp-default";}async start(){if(this._started)throw new Error("Transport already started");this._messageHandler=e=>{if(e.origin===this._targetOrigin&&!(e.data?.channel!==this._channelId||e.data?.type!=="mcp")&&e.data?.direction==="server-to-client")try{let t=JSONRPCMessageSchema.parse(e.data.payload);this.onmessage?.(t);}catch(t){this.onerror?.(new Error(`Invalid message: ${t}`));}},window.addEventListener("message",this._messageHandler),this._started=true;}async send(e){if(!this._started)throw new Error("Transport not started");window.postMessage({channel:this._channelId,type:"mcp",direction:"client-to-server",payload:e},this._targetOrigin);}async close(){this._messageHandler&&window.removeEventListener("message",this._messageHandler),this._started=false,this.onclose?.();}};var c=class{_started=false;_allowedOrigins;_channelId;_messageHandler;_clientOrigin;onclose;onerror;onmessage;constructor(e){if(!e.allowedOrigins||e.allowedOrigins.length===0)throw new Error("At least one allowed origin must be specified");this._allowedOrigins=e.allowedOrigins,this._channelId=e.channelId||"mcp-default";}async start(){if(this._started)throw new Error("Transport already started");this._messageHandler=e=>{if(console.log({event:e}),!(!this._allowedOrigins.includes(e.origin)&&!this._allowedOrigins.includes("*"))&&!(e.data?.channel!==this._channelId||e.data?.type!=="mcp")&&e.data?.direction==="client-to-server"){this._clientOrigin=e.origin;try{let t=JSONRPCMessageSchema.parse(e.data.payload);this.onmessage?.(t);}catch(t){this.onerror?.(new Error(`Invalid message: ${t}`));}}},window.addEventListener("message",this._messageHandler),this._started=true;}async send(e){if(!this._started)throw new Error("Transport not started");if(!this._clientOrigin)throw new Error("No client connected");window.postMessage({channel:this._channelId,type:"mcp",direction:"server-to-client",payload:e},this._clientOrigin);}async close(){this._messageHandler&&window.removeEventListener("message",this._messageHandler),this._started=false,this.onclose?.();}};var d=class{_port;_extensionId;_portName;_messageHandler;_disconnectHandler;onclose;onerror;onmessage;constructor(e={}){this._extensionId=e.extensionId,this._portName=e.portName||"mcp";}async start(){if(this._port){console.warn("ExtensionClientTransport already started! If using Client class, note that connect() calls start() automatically.");return}return new Promise((e,t)=>{if(!chrome?.runtime?.connect){t(new Error("Chrome runtime API not available. This transport must be used in a Chrome extension context."));return}try{this._extensionId?this._port=chrome.runtime.connect(this._extensionId,{name:this._portName}):this._port=chrome.runtime.connect({name:this._portName}),this._messageHandler=s=>{try{let o=JSONRPCMessageSchema.parse(s);this.onmessage?.(o);}catch(o){this.onerror?.(new Error(`Failed to parse message: ${o}`));}},this._disconnectHandler=()=>{this._cleanup(),this.onclose?.();},this._port.onMessage.addListener(this._messageHandler),this._port.onDisconnect.addListener(this._disconnectHandler);let r=chrome.runtime.lastError;if(r){this._cleanup(),t(new Error(`Connection failed: ${r.message}`));return}e();}catch(r){t(r);}})}async send(e,t){if(!this._port)throw new Error("Not connected");try{this._port.postMessage(e);}catch(r){throw new Error(`Failed to send message: ${r}`)}}async close(){if(this._port)try{this._port.disconnect();}catch{}this._cleanup(),this.onclose?.();}_cleanup(){this._port&&(this._messageHandler&&this._port.onMessage.removeListener(this._messageHandler),this._disconnectHandler&&this._port.onDisconnect.removeListener(this._disconnectHandler)),this._port=void 0;}};var h=class{_port;_started=false;_messageHandler;_disconnectHandler;onclose;onerror;onmessage;constructor(e){this._port=e;}async start(){if(this._started)throw new Error("ExtensionServerTransport already started! If using Server class, note that connect() calls start() automatically.");if(!this._port)throw new Error("Port not available");this._started=true,this._messageHandler=e=>{try{let t=JSONRPCMessageSchema.parse(e);this.onmessage?.(t);}catch(t){this.onerror?.(new Error(`Failed to parse message: ${t}`));}},this._disconnectHandler=()=>{this._cleanup(),this.onclose?.();},this._port.onMessage.addListener(this._messageHandler),this._port.onDisconnect.addListener(this._disconnectHandler);}async send(e,t){if(!this._started)throw new Error("Transport not started");if(!this._port)throw new Error("Not connected to client");try{this._port.postMessage(e);}catch(r){throw new Error(`Failed to send message: ${r}`)}}async close(){if(this._started=false,this._port)try{this._port.disconnect();}catch{}this._cleanup(),this.onclose?.();}_cleanup(){this._port&&(this._messageHandler&&this._port.onMessage.removeListener(this._messageHandler),this._disconnectHandler&&this._port.onDisconnect.removeListener(this._disconnectHandler));}};var l="mcp",m=class{_socket;_url;_WebSocket;onclose;onerror;onmessage;constructor(e){this._url=e;}async start(){if(this._socket)throw new Error("WebSocketClientTransport already started! If using Client class, note that connect() calls start() automatically.");if(!this._WebSocket)try{let e=await import('ws');this._WebSocket=e.WebSocket;}catch{throw new Error("Failed to import 'ws' package. Please install it with: npm install ws")}return new Promise((e,t)=>{this._socket=new this._WebSocket(this._url.toString(),{perMessageDeflate:false,...{protocol:l}}),this._socket.on("error",r=>{t(r),this.onerror?.(r);}),this._socket.on("open",()=>{e();}),this._socket.on("close",()=>{this.onclose?.();}),this._socket.on("message",r=>{let s;try{let o=r instanceof Buffer?r.toString("utf-8"):r.toString();s=JSONRPCMessageSchema.parse(JSON.parse(o));}catch(o){this.onerror?.(o);return}this.onmessage?.(s);});})}async close(){this._socket&&this._WebSocket&&this._socket.readyState===this._WebSocket.OPEN&&this._socket.close();}async send(e){return new Promise((t,r)=>{if(!this._socket||!this._WebSocket){r(new Error("Not connected"));return}if(this._socket.readyState!==this._WebSocket.OPEN){r(new Error("WebSocket is not open"));return}this._socket.send(JSON.stringify(e),s=>{s?r(s):t();});})}};var _=class{constructor(e){this._options=e;}_socket;_server;_started=false;_connectionId;onclose;onerror;onmessage;async start(){if(this._started)throw new Error("WebSocketServerTransport already started! If using Server class, note that connect() calls start() automatically.");if(this._started=true,this._options.socket)this._socket=this._options.socket,this.setupSocketHandlers(this._socket);else throw new Error("WebSocketServerTransport requires either a socket ")}setupSocketHandlers(e){e.onmessage=t=>{let r;try{let s=typeof t.data=="string"?t.data:t.data.toString(),o=JSON.parse(s);if(o.connectionId){this._connectionId=o.connectionId;let{connectionId:u,...n}=o;r=JSONRPCMessageSchema.parse(n);}else r=JSONRPCMessageSchema.parse(o);}catch(s){this.onerror?.(s);return}this.onmessage?.(r);},e.onerror=t=>{let r=new Error(`WebSocket error: ${JSON.stringify(t)}`);this.onerror?.(r);},e.onclose=()=>{this._socket=void 0,this.onclose?.();};}async close(){if(this._socket&&(this._socket.close(),this._socket=void 0),this._server)return new Promise(e=>{this._server.close(()=>{this._server=void 0,e();});})}send(e){return new Promise((t,r)=>{if(!this._socket||this._socket.readyState!==WebSocket.OPEN){r(new Error("No active WebSocket connection"));return}try{let s=this._connectionId?{...e,connectionId:this._connectionId}:e;this._socket.send(JSON.stringify(s)),t();}catch(s){r(s);}})}get socket(){return this._socket}get isConnected(){return this._socket?.readyState===WebSocket.OPEN}};var g=class{_socket;_url;_connectionId;_options;_retryCount=0;_isClosing=false;_connectionTimeoutId;onclose;onerror;onmessage;constructor(e,t){this._url=e.toString(),this._options={maxRetries:t?.maxRetries??10,initialRetryDelay:t?.initialRetryDelay??1e3,maxRetryDelay:t?.maxRetryDelay??3e4,connectionTimeout:t?.connectionTimeout??1e4,retryMultiplier:t?.retryMultiplier??1.5};}async start(){if(this._socket)throw new Error("BrowserWebSocketClientTransport already started! If using Client class, note that connect() calls start() automatically.");return this._isClosing=false,this._retryCount=0,this._connectWithRetry()}async _connectWithRetry(){for(;this._retryCount<=this._options.maxRetries&&!this._isClosing;)try{await this._attemptConnection();return}catch(e){if(this._retryCount++,this._isClosing)throw new Error("Connection cancelled");if(this._retryCount>this._options.maxRetries)throw new Error(`Failed to connect after ${this._options.maxRetries} retries: ${e}`);let t=Math.min(this._options.initialRetryDelay*Math.pow(this._options.retryMultiplier,this._retryCount-1),this._options.maxRetryDelay);console.log(`[WebSocket] Connection failed, retrying in ${t}ms (attempt ${this._retryCount}/${this._options.maxRetries})`),await this._sleep(t);}}_sleep(e){return new Promise(t=>setTimeout(t,e))}async _attemptConnection(){return new Promise((e,t)=>{try{this._connectionTimeoutId&&clearTimeout(this._connectionTimeoutId),this._socket=new WebSocket(this._url),this._connectionTimeoutId=setTimeout(()=>{this._socket&&this._socket.readyState===WebSocket.CONNECTING&&(this._socket.close(),t(new Error(`Connection timeout after ${this._options.connectionTimeout}ms`)));},this._options.connectionTimeout),this._socket.onopen=()=>{this._connectionTimeoutId&&(clearTimeout(this._connectionTimeoutId),this._connectionTimeoutId=void 0),this._retryCount=0,e();},this._socket.onerror=r=>{let s=new Error("WebSocket connection error");t(s);},this._socket.onclose=()=>{this._socket=void 0,this._connectionId=void 0,!this._isClosing&&this._retryCount===0&&this.onclose?.();},this._socket.onmessage=r=>{let s;try{if(s=JSON.parse(r.data),s.connectionId&&!this._connectionId&&(this._connectionId=s.connectionId),s.connectionId){let{connectionId:u,...n}=s;s=n;}let o=JSONRPCMessageSchema.parse(s);this.onmessage?.(o);}catch(o){this.onerror?.(o);}};}catch(r){t(r);}})}async close(){this._isClosing=true,this._connectionTimeoutId&&(clearTimeout(this._connectionTimeoutId),this._connectionTimeoutId=void 0),this._socket&&this._socket.readyState===WebSocket.OPEN&&this._socket.close();}async send(e){return new Promise((t,r)=>{if(!this._socket||this._socket.readyState!==WebSocket.OPEN){r(new Error("WebSocket is not connected"));return}try{let s=this._connectionId?{...e,connectionId:this._connectionId}:e;this._socket.send(JSON.stringify(s)),t();}catch(s){r(s);}})}get isConnected(){return this._socket?.readyState===WebSocket.OPEN}};export{g as BrowserWebSocketClientTransport,d as ExtensionClientTransport,h as ExtensionServerTransport,a as TabClientTransport,c as TabServerTransport,m as WebSocketClientTransport,_ as WebSocketServerTransport};//# sourceMappingURL=index.js.map
|
|
2
2
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/TabClientTransport.ts","../src/TabServerTransport.ts","../src/ExtensionClientTransport.ts","../src/ExtensionServerTransport.ts","../src/WebsocketClientTransport.ts","../src/WebsocketServerTransport.ts","../src/BrowserWebSocketClientTransport.ts"],"names":["TabClientTransport","options","event","message","JSONRPCMessageSchema","error","TabServerTransport","ExtensionClientTransport","resolve","reject","mcpMessage","_options","ExtensionServerTransport","port","SUBPROTOCOL","WebSocketClientTransport","url","ws","data","dataStr","WebSocketServerTransport","socket","parsedData","connectionId","actualMessage","messageToSend","BrowserWebSocketClientTransport","_event"],"mappings":"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","file":"index.js","sourcesContent":["import { Transport } from '@modelcontextprotocol/sdk/shared/transport.js';\nimport { JSONRPCMessage, JSONRPCMessageSchema } from '@modelcontextprotocol/sdk/types.js';\n\nexport interface TabClientTransportOptions {\n targetOrigin: string; // Required for security\n channelId?: string; // Optional channel name\n}\n\nexport class TabClientTransport implements Transport {\n private _started = false;\n private _targetOrigin: string;\n private _channelId: string;\n private _messageHandler?: (event: MessageEvent) => void;\n\n onclose?: () => void;\n onerror?: (error: Error) => void;\n onmessage?: (message: JSONRPCMessage) => void;\n\n constructor(options: TabClientTransportOptions) {\n if (!options.targetOrigin) {\n throw new Error('targetOrigin must be explicitly set for security');\n }\n this._targetOrigin = options.targetOrigin;\n this._channelId = options.channelId || 'mcp-default';\n }\n\n async start(): Promise<void> {\n if (this._started) {\n throw new Error('Transport already started');\n }\n\n this._messageHandler = (event: MessageEvent) => {\n // Security: validate origin\n if (event.origin !== this._targetOrigin) {\n return;\n }\n\n // Validate message structure\n if (event.data?.channel !== this._channelId || event.data?.type !== 'mcp') {\n return;\n }\n\n // Only process server-to-client messages to avoid processing own messages\n if (event.data?.direction !== 'server-to-client') {\n return;\n }\n\n try {\n const message = JSONRPCMessageSchema.parse(event.data.payload);\n this.onmessage?.(message);\n } catch (error) {\n this.onerror?.(new Error(`Invalid message: ${error}`));\n }\n };\n\n window.addEventListener('message', this._messageHandler);\n this._started = true;\n }\n\n async send(message: JSONRPCMessage): Promise<void> {\n if (!this._started) {\n throw new Error('Transport not started');\n }\n\n window.postMessage(\n {\n channel: this._channelId,\n type: 'mcp',\n direction: 'client-to-server', // Mark as client-to-server message\n payload: message,\n },\n this._targetOrigin\n );\n }\n\n async close(): Promise<void> {\n if (this._messageHandler) {\n window.removeEventListener('message', this._messageHandler);\n }\n this._started = false;\n this.onclose?.();\n }\n}\n","import { Transport } from '@modelcontextprotocol/sdk/shared/transport.js';\nimport { JSONRPCMessage, JSONRPCMessageSchema } from '@modelcontextprotocol/sdk/types.js';\n\nexport interface TabServerTransportOptions {\n allowedOrigins: string[]; // Required for security\n channelId?: string; // Optional channel name\n}\n\nexport class TabServerTransport implements Transport {\n private _started = false;\n private _allowedOrigins: string[] | '*';\n private _channelId: string;\n private _messageHandler?: (event: MessageEvent) => void;\n private _clientOrigin?: string;\n\n onclose?: () => void;\n onerror?: (error: Error) => void;\n onmessage?: (message: JSONRPCMessage) => void;\n\n constructor(options: TabServerTransportOptions) {\n if (!options.allowedOrigins || options.allowedOrigins.length === 0) {\n throw new Error('At least one allowed origin must be specified');\n }\n this._allowedOrigins = options.allowedOrigins;\n this._channelId = options.channelId || 'mcp-default';\n }\n\n async start(): Promise<void> {\n if (this._started) {\n throw new Error('Transport already started');\n }\n\n this._messageHandler = (event: MessageEvent) => {\n console.log({ event });\n // Security: validate origin\n if (!this._allowedOrigins.includes(event.origin) && !this._allowedOrigins.includes('*')) {\n return;\n }\n\n // Validate message structure\n if (event.data?.channel !== this._channelId || event.data?.type !== 'mcp') {\n return;\n }\n\n // Only process client-to-server messages to avoid processing own messages\n if (event.data?.direction !== 'client-to-server') {\n return;\n }\n\n // Store client origin for responses\n this._clientOrigin = event.origin;\n\n try {\n const message = JSONRPCMessageSchema.parse(event.data.payload);\n this.onmessage?.(message);\n } catch (error) {\n this.onerror?.(new Error(`Invalid message: ${error}`));\n }\n };\n\n window.addEventListener('message', this._messageHandler);\n this._started = true;\n }\n\n async send(message: JSONRPCMessage): Promise<void> {\n if (!this._started) {\n throw new Error('Transport not started');\n }\n\n if (!this._clientOrigin) {\n throw new Error('No client connected');\n }\n\n window.postMessage(\n {\n channel: this._channelId,\n type: 'mcp',\n direction: 'server-to-client', // Mark as server-to-client message\n payload: message,\n },\n this._clientOrigin\n );\n }\n\n async close(): Promise<void> {\n if (this._messageHandler) {\n window.removeEventListener('message', this._messageHandler);\n }\n this._started = false;\n this.onclose?.();\n }\n}\n","import { Transport, TransportSendOptions } from '@modelcontextprotocol/sdk/shared/transport.js';\nimport { JSONRPCMessage, JSONRPCMessageSchema } from '@modelcontextprotocol/sdk/types.js';\n\n/**\n * Configuration options for ExtensionClientTransport\n */\nexport interface ExtensionClientTransportOptions {\n /**\n * The extension ID to connect to (optional for same-extension connections)\n */\n extensionId?: string;\n\n /**\n * Port name for the connection\n * Default: 'mcp'\n */\n portName?: string;\n}\n\n/**\n * Client transport for Chrome extensions using Port-based messaging.\n * This transport can be used in content scripts, popup scripts, or sidepanel scripts\n * to connect to a server running in the background service worker.\n */\nexport class ExtensionClientTransport implements Transport {\n private _port?: chrome.runtime.Port;\n private _extensionId?: string;\n private _portName: string;\n private _messageHandler?: (message: any) => void;\n private _disconnectHandler?: () => void;\n\n onclose?: () => void;\n onerror?: (error: Error) => void;\n onmessage?: (message: JSONRPCMessage) => void;\n\n constructor(options: ExtensionClientTransportOptions = {}) {\n this._extensionId = options.extensionId;\n this._portName = options.portName || 'mcp';\n }\n\n /**\n * Starts the transport by connecting to the extension port\n */\n async start(): Promise<void> {\n if (this._port) {\n throw new Error(\n 'ExtensionClientTransport already started! If using Client class, note that connect() calls start() automatically.'\n );\n }\n\n return new Promise((resolve, reject) => {\n if (!chrome?.runtime?.connect) {\n reject(\n new Error(\n 'Chrome runtime API not available. This transport must be used in a Chrome extension context.'\n )\n );\n return;\n }\n\n try {\n // Connect to the extension\n if (this._extensionId) {\n this._port = chrome.runtime.connect(this._extensionId, { name: this._portName });\n } else {\n this._port = chrome.runtime.connect({ name: this._portName });\n }\n\n // Set up message handler\n this._messageHandler = (message: any) => {\n try {\n const mcpMessage = JSONRPCMessageSchema.parse(message);\n this.onmessage?.(mcpMessage);\n } catch (error) {\n this.onerror?.(new Error(`Failed to parse message: ${error}`));\n }\n };\n\n // Set up disconnect handler\n this._disconnectHandler = () => {\n this._cleanup();\n this.onclose?.();\n };\n\n this._port.onMessage.addListener(this._messageHandler);\n this._port.onDisconnect.addListener(this._disconnectHandler);\n\n // Check for immediate connection errors\n const error = chrome.runtime.lastError;\n if (error) {\n this._cleanup();\n reject(new Error(`Connection failed: ${error.message}`));\n return;\n }\n\n resolve();\n } catch (error) {\n reject(error);\n }\n });\n }\n\n /**\n * Sends a message to the server\n */\n async send(message: JSONRPCMessage, _options?: TransportSendOptions): Promise<void> {\n if (!this._port) {\n throw new Error('Not connected');\n }\n\n try {\n this._port.postMessage(message);\n } catch (error) {\n throw new Error(`Failed to send message: ${error}`);\n }\n }\n\n /**\n * Closes the transport\n */\n async close(): Promise<void> {\n if (this._port) {\n try {\n this._port.disconnect();\n } catch (error) {\n // Port might already be disconnected\n }\n }\n\n this._cleanup();\n this.onclose?.();\n }\n\n /**\n * Cleans up event listeners and references\n */\n private _cleanup(): void {\n if (this._port) {\n if (this._messageHandler) {\n this._port.onMessage.removeListener(this._messageHandler);\n }\n if (this._disconnectHandler) {\n this._port.onDisconnect.removeListener(this._disconnectHandler);\n }\n }\n this._port = undefined;\n }\n}\n","import { Transport, TransportSendOptions } from '@modelcontextprotocol/sdk/shared/transport.js';\nimport { JSONRPCMessage, JSONRPCMessageSchema } from '@modelcontextprotocol/sdk/types.js';\n\n/**\n * Server transport for Chrome extensions using Port-based messaging.\n * This transport handles a single client connection through Chrome's port messaging API.\n * It should be used in the extension's background service worker.\n */\nexport class ExtensionServerTransport implements Transport {\n private _port: chrome.runtime.Port;\n private _started = false;\n private _messageHandler?: (message: any, port: chrome.runtime.Port) => void;\n private _disconnectHandler?: (port: chrome.runtime.Port) => void;\n\n onclose?: () => void;\n onerror?: (error: Error) => void;\n onmessage?: (message: JSONRPCMessage) => void;\n\n constructor(port: chrome.runtime.Port) {\n this._port = port;\n }\n\n /**\n * Starts the transport and begins handling messages\n */\n async start(): Promise<void> {\n if (this._started) {\n throw new Error(\n 'ExtensionServerTransport already started! If using Server class, note that connect() calls start() automatically.'\n );\n }\n\n if (!this._port) {\n throw new Error('Port not available');\n }\n\n this._started = true;\n\n // Set up message handler\n this._messageHandler = (message: any) => {\n try {\n const mcpMessage = JSONRPCMessageSchema.parse(message);\n this.onmessage?.(mcpMessage);\n } catch (error) {\n this.onerror?.(new Error(`Failed to parse message: ${error}`));\n }\n };\n\n // Set up disconnect handler\n this._disconnectHandler = () => {\n this._cleanup();\n this.onclose?.();\n };\n\n this._port.onMessage.addListener(this._messageHandler);\n this._port.onDisconnect.addListener(this._disconnectHandler);\n }\n\n /**\n * Sends a message to the client\n */\n async send(message: JSONRPCMessage, _options?: TransportSendOptions): Promise<void> {\n if (!this._started) {\n throw new Error('Transport not started');\n }\n\n if (!this._port) {\n throw new Error('Not connected to client');\n }\n\n try {\n this._port.postMessage(message);\n } catch (error) {\n throw new Error(`Failed to send message: ${error}`);\n }\n }\n\n /**\n * Closes the transport\n */\n async close(): Promise<void> {\n this._started = false;\n\n if (this._port) {\n try {\n this._port.disconnect();\n } catch (error) {\n // Port might already be disconnected\n }\n }\n\n this._cleanup();\n this.onclose?.();\n }\n\n /**\n * Cleans up event listeners and references\n */\n private _cleanup(): void {\n if (this._port) {\n if (this._messageHandler) {\n this._port.onMessage.removeListener(this._messageHandler);\n }\n if (this._disconnectHandler) {\n this._port.onDisconnect.removeListener(this._disconnectHandler);\n }\n }\n }\n}\n","import { Transport } from '@modelcontextprotocol/sdk/shared/transport.js';\nimport { JSONRPCMessage, JSONRPCMessageSchema } from '@modelcontextprotocol/sdk/types.js';\n\nconst SUBPROTOCOL = 'mcp';\n\n/**\n * Client transport for WebSocket: this will connect to a server over the WebSocket protocol.\n * This transport is Node.js specific and requires the 'ws' package to be installed.\n */\nexport class WebSocketClientTransport implements Transport {\n private _socket?: any; // WebSocket type from 'ws' package\n private _url: URL;\n private _WebSocket?: typeof import('ws').WebSocket;\n\n onclose?: () => void;\n onerror?: (error: Error) => void;\n onmessage?: (message: JSONRPCMessage) => void;\n\n constructor(url: URL) {\n this._url = url;\n }\n\n async start(): Promise<void> {\n if (this._socket) {\n throw new Error(\n 'WebSocketClientTransport already started! If using Client class, note that connect() calls start() automatically.'\n );\n }\n\n // Dynamically import the WebSocket class from 'ws' package\n if (!this._WebSocket) {\n try {\n const ws = await import('ws');\n this._WebSocket = ws.WebSocket;\n } catch (error) {\n throw new Error(\"Failed to import 'ws' package. Please install it with: npm install ws\");\n }\n }\n\n return new Promise((resolve, reject) => {\n // Create WebSocket instance with Node.js specific options\n this._socket = new this._WebSocket!(this._url.toString(), {\n perMessageDeflate: false,\n // Add the subprotocol in the options\n ...(SUBPROTOCOL ? { protocol: SUBPROTOCOL } : {}),\n });\n\n // Node.js WebSocket error event handler\n this._socket.on('error', (error: Error) => {\n reject(error);\n this.onerror?.(error);\n });\n\n // Node.js WebSocket open event handler\n this._socket.on('open', () => {\n resolve();\n });\n\n // Node.js WebSocket close event handler\n this._socket.on('close', () => {\n this.onclose?.();\n });\n\n // Node.js WebSocket message event handler\n this._socket.on('message', (data: Buffer | ArrayBuffer | Buffer[]) => {\n let message: JSONRPCMessage;\n try {\n // Convert Buffer to string before parsing\n const dataStr = data instanceof Buffer ? data.toString('utf-8') : data.toString();\n message = JSONRPCMessageSchema.parse(JSON.parse(dataStr));\n } catch (error) {\n this.onerror?.(error as Error);\n return;\n }\n this.onmessage?.(message);\n });\n });\n }\n\n async close(): Promise<void> {\n if (this._socket && this._WebSocket) {\n // Check the readyState before closing\n if (this._socket.readyState === this._WebSocket.OPEN) {\n this._socket.close();\n }\n }\n }\n\n async send(message: JSONRPCMessage): Promise<void> {\n return new Promise((resolve, reject) => {\n if (!this._socket || !this._WebSocket) {\n reject(new Error('Not connected'));\n return;\n }\n\n // Check if the socket is open before sending\n if (this._socket.readyState !== this._WebSocket.OPEN) {\n reject(new Error('WebSocket is not open'));\n return;\n }\n\n // In Node.js, send accepts a callback for error handling\n this._socket.send(JSON.stringify(message), (error?: Error) => {\n if (error) {\n reject(error);\n } else {\n resolve();\n }\n });\n });\n }\n}\n","import { Transport } from '@modelcontextprotocol/sdk/shared/transport.js';\nimport { JSONRPCMessage, JSONRPCMessageSchema } from '@modelcontextprotocol/sdk/types.js';\n\n/**\n * Server transport for WebSocket: this will accept connections from MCP clients over WebSocket protocol.\n * Designed to work in browser extension environments.\n */\nexport class WebSocketServerTransport implements Transport {\n private _socket?: WebSocket;\n private _server?: any; // For environments that support WebSocketServer\n private _started = false;\n private _connectionId?: string;\n\n onclose?: () => void;\n onerror?: (error: Error) => void;\n onmessage?: (message: JSONRPCMessage) => void;\n\n constructor(\n private _options: {\n /**\n * For browser extensions: provide an existing WebSocket connection\n */\n socket?: WebSocket;\n /**\n * For Node.js: provide port to create WebSocketServer\n */\n port?: number;\n }\n ) {}\n\n /**\n * Starts the transport. In browser extension context, this validates the socket.\n */\n async start(): Promise<void> {\n if (this._started) {\n throw new Error(\n 'WebSocketServerTransport already started! If using Server class, note that connect() calls start() automatically.'\n );\n }\n this._started = true;\n\n if (this._options.socket) {\n this._socket = this._options.socket;\n this.setupSocketHandlers(this._socket);\n } else {\n throw new Error('WebSocketServerTransport requires either a socket ');\n }\n }\n\n private setupSocketHandlers(socket: WebSocket): void {\n socket.onmessage = (event: MessageEvent) => {\n let message: JSONRPCMessage;\n try {\n const data = typeof event.data === 'string' ? event.data : event.data.toString();\n const parsedData = JSON.parse(data);\n\n // Handle bridge protocol - extract connectionId if present\n if (parsedData.connectionId) {\n this._connectionId = parsedData.connectionId;\n const { connectionId, ...actualMessage } = parsedData;\n message = JSONRPCMessageSchema.parse(actualMessage);\n } else {\n message = JSONRPCMessageSchema.parse(parsedData);\n }\n } catch (error) {\n this.onerror?.(error as Error);\n return;\n }\n this.onmessage?.(message);\n };\n\n socket.onerror = (event: Event) => {\n const error = new Error(`WebSocket error: ${JSON.stringify(event)}`);\n this.onerror?.(error);\n };\n\n socket.onclose = () => {\n this._socket = undefined;\n this.onclose?.();\n };\n }\n\n async close(): Promise<void> {\n if (this._socket) {\n this._socket.close();\n this._socket = undefined;\n }\n\n if (this._server) {\n return new Promise((resolve) => {\n this._server.close(() => {\n this._server = undefined;\n resolve();\n });\n });\n }\n }\n\n send(message: JSONRPCMessage): Promise<void> {\n return new Promise((resolve, reject) => {\n if (!this._socket || this._socket.readyState !== WebSocket.OPEN) {\n reject(new Error('No active WebSocket connection'));\n return;\n }\n\n try {\n // If we have a connectionId from the bridge, include it in the response\n const messageToSend = this._connectionId\n ? { ...message, connectionId: this._connectionId }\n : message;\n\n this._socket.send(JSON.stringify(messageToSend));\n resolve();\n } catch (error) {\n reject(error);\n }\n });\n }\n\n /**\n * Get the current WebSocket connection (if any)\n */\n get socket(): WebSocket | undefined {\n return this._socket;\n }\n\n /**\n * Check if transport has an active connection\n */\n get isConnected(): boolean {\n return this._socket?.readyState === WebSocket.OPEN;\n }\n}\n","import { Transport } from '@modelcontextprotocol/sdk/shared/transport.js';\nimport { JSONRPCMessage, JSONRPCMessageSchema } from '@modelcontextprotocol/sdk/types.js';\n\n/**\n * Browser-compatible WebSocket client transport for connecting from browser extensions to a bridge server.\n * This transport uses the native browser WebSocket API and doesn't require any Node.js dependencies.\n */\nexport class BrowserWebSocketClientTransport implements Transport {\n private _socket?: WebSocket;\n private _url: string;\n private _connectionId?: string;\n\n onclose?: () => void;\n onerror?: (error: Error) => void;\n onmessage?: (message: JSONRPCMessage) => void;\n\n constructor(url: string | URL) {\n this._url = url.toString();\n }\n\n async start(): Promise<void> {\n if (this._socket) {\n throw new Error(\n 'BrowserWebSocketClientTransport already started! If using Client class, note that connect() calls start() automatically.'\n );\n }\n\n return new Promise((resolve, reject) => {\n try {\n // Create WebSocket with browser API\n this._socket = new WebSocket(this._url);\n\n this._socket.onopen = () => {\n resolve();\n };\n\n this._socket.onerror = (_event) => {\n const error = new Error(`WebSocket connection error`);\n reject(error);\n this.onerror?.(error);\n };\n\n this._socket.onclose = () => {\n this._socket = undefined;\n this._connectionId = undefined;\n this.onclose?.();\n };\n\n this._socket.onmessage = (event: MessageEvent) => {\n let data: any;\n try {\n data = JSON.parse(event.data);\n\n // Handle bridge-specific messages\n if (data.connectionId && !this._connectionId) {\n // Store connectionId for future messages\n this._connectionId = data.connectionId;\n }\n\n // Extract the actual message\n if (data.connectionId) {\n const { connectionId, ...message } = data;\n data = message;\n }\n\n const message = JSONRPCMessageSchema.parse(data);\n this.onmessage?.(message);\n } catch (error) {\n this.onerror?.(error as Error);\n }\n };\n } catch (error) {\n reject(error);\n }\n });\n }\n\n async close(): Promise<void> {\n if (this._socket && this._socket.readyState === WebSocket.OPEN) {\n this._socket.close();\n }\n }\n\n async send(message: JSONRPCMessage): Promise<void> {\n return new Promise((resolve, reject) => {\n if (!this._socket || this._socket.readyState !== WebSocket.OPEN) {\n reject(new Error('WebSocket is not connected'));\n return;\n }\n\n try {\n // If we have a connectionId from the bridge, include it\n const messageToSend = this._connectionId\n ? { ...message, connectionId: this._connectionId }\n : message;\n\n this._socket.send(JSON.stringify(messageToSend));\n resolve();\n } catch (error) {\n reject(error);\n }\n });\n }\n\n /**\n * Check if transport is connected\n */\n get isConnected(): boolean {\n return this._socket?.readyState === WebSocket.OPEN;\n }\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/TabClientTransport.ts","../src/TabServerTransport.ts","../src/ExtensionClientTransport.ts","../src/ExtensionServerTransport.ts","../src/WebsocketClientTransport.ts","../src/WebsocketServerTransport.ts","../src/BrowserWebSocketClientTransport.ts"],"names":["TabClientTransport","options","event","message","JSONRPCMessageSchema","error","TabServerTransport","ExtensionClientTransport","resolve","reject","mcpMessage","_options","ExtensionServerTransport","port","SUBPROTOCOL","WebSocketClientTransport","url","ws","data","dataStr","WebSocketServerTransport","socket","parsedData","connectionId","actualMessage","messageToSend","BrowserWebSocketClientTransport","delay","ms","_event"],"mappings":"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","file":"index.js","sourcesContent":["import { Transport } from '@modelcontextprotocol/sdk/shared/transport.js';\nimport { JSONRPCMessage, JSONRPCMessageSchema } from '@modelcontextprotocol/sdk/types.js';\n\nexport interface TabClientTransportOptions {\n targetOrigin: string; // Required for security\n channelId?: string; // Optional channel name\n}\n\nexport class TabClientTransport implements Transport {\n private _started = false;\n private _targetOrigin: string;\n private _channelId: string;\n private _messageHandler?: (event: MessageEvent) => void;\n\n onclose?: () => void;\n onerror?: (error: Error) => void;\n onmessage?: (message: JSONRPCMessage) => void;\n\n constructor(options: TabClientTransportOptions) {\n if (!options.targetOrigin) {\n throw new Error('targetOrigin must be explicitly set for security');\n }\n this._targetOrigin = options.targetOrigin;\n this._channelId = options.channelId || 'mcp-default';\n }\n\n async start(): Promise<void> {\n if (this._started) {\n throw new Error('Transport already started');\n }\n\n this._messageHandler = (event: MessageEvent) => {\n // Security: validate origin\n if (event.origin !== this._targetOrigin) {\n return;\n }\n\n // Validate message structure\n if (event.data?.channel !== this._channelId || event.data?.type !== 'mcp') {\n return;\n }\n\n // Only process server-to-client messages to avoid processing own messages\n if (event.data?.direction !== 'server-to-client') {\n return;\n }\n\n try {\n const message = JSONRPCMessageSchema.parse(event.data.payload);\n this.onmessage?.(message);\n } catch (error) {\n this.onerror?.(new Error(`Invalid message: ${error}`));\n }\n };\n\n window.addEventListener('message', this._messageHandler);\n this._started = true;\n }\n\n async send(message: JSONRPCMessage): Promise<void> {\n if (!this._started) {\n throw new Error('Transport not started');\n }\n\n window.postMessage(\n {\n channel: this._channelId,\n type: 'mcp',\n direction: 'client-to-server', // Mark as client-to-server message\n payload: message,\n },\n this._targetOrigin\n );\n }\n\n async close(): Promise<void> {\n if (this._messageHandler) {\n window.removeEventListener('message', this._messageHandler);\n }\n this._started = false;\n this.onclose?.();\n }\n}\n","import { Transport } from '@modelcontextprotocol/sdk/shared/transport.js';\nimport { JSONRPCMessage, JSONRPCMessageSchema } from '@modelcontextprotocol/sdk/types.js';\n\nexport interface TabServerTransportOptions {\n allowedOrigins: string[]; // Required for security\n channelId?: string; // Optional channel name\n}\n\nexport class TabServerTransport implements Transport {\n private _started = false;\n private _allowedOrigins: string[] | '*';\n private _channelId: string;\n private _messageHandler?: (event: MessageEvent) => void;\n private _clientOrigin?: string;\n\n onclose?: () => void;\n onerror?: (error: Error) => void;\n onmessage?: (message: JSONRPCMessage) => void;\n\n constructor(options: TabServerTransportOptions) {\n if (!options.allowedOrigins || options.allowedOrigins.length === 0) {\n throw new Error('At least one allowed origin must be specified');\n }\n this._allowedOrigins = options.allowedOrigins;\n this._channelId = options.channelId || 'mcp-default';\n }\n\n async start(): Promise<void> {\n if (this._started) {\n throw new Error('Transport already started');\n }\n\n this._messageHandler = (event: MessageEvent) => {\n console.log({ event });\n // Security: validate origin\n if (!this._allowedOrigins.includes(event.origin) && !this._allowedOrigins.includes('*')) {\n return;\n }\n\n // Validate message structure\n if (event.data?.channel !== this._channelId || event.data?.type !== 'mcp') {\n return;\n }\n\n // Only process client-to-server messages to avoid processing own messages\n if (event.data?.direction !== 'client-to-server') {\n return;\n }\n\n // Store client origin for responses\n this._clientOrigin = event.origin;\n\n try {\n const message = JSONRPCMessageSchema.parse(event.data.payload);\n this.onmessage?.(message);\n } catch (error) {\n this.onerror?.(new Error(`Invalid message: ${error}`));\n }\n };\n\n window.addEventListener('message', this._messageHandler);\n this._started = true;\n }\n\n async send(message: JSONRPCMessage): Promise<void> {\n if (!this._started) {\n throw new Error('Transport not started');\n }\n\n if (!this._clientOrigin) {\n throw new Error('No client connected');\n }\n\n window.postMessage(\n {\n channel: this._channelId,\n type: 'mcp',\n direction: 'server-to-client', // Mark as server-to-client message\n payload: message,\n },\n this._clientOrigin\n );\n }\n\n async close(): Promise<void> {\n if (this._messageHandler) {\n window.removeEventListener('message', this._messageHandler);\n }\n this._started = false;\n this.onclose?.();\n }\n}\n","import { Transport, TransportSendOptions } from '@modelcontextprotocol/sdk/shared/transport.js';\nimport { JSONRPCMessage, JSONRPCMessageSchema } from '@modelcontextprotocol/sdk/types.js';\n\n/**\n * Configuration options for ExtensionClientTransport\n */\nexport interface ExtensionClientTransportOptions {\n /**\n * The extension ID to connect to (optional for same-extension connections)\n */\n extensionId?: string;\n\n /**\n * Port name for the connection\n * Default: 'mcp'\n */\n portName?: string;\n}\n\n/**\n * Client transport for Chrome extensions using Port-based messaging.\n * This transport can be used in content scripts, popup scripts, or sidepanel scripts\n * to connect to a server running in the background service worker.\n */\nexport class ExtensionClientTransport implements Transport {\n private _port?: chrome.runtime.Port;\n private _extensionId?: string;\n private _portName: string;\n private _messageHandler?: (message: any) => void;\n private _disconnectHandler?: () => void;\n\n onclose?: () => void;\n onerror?: (error: Error) => void;\n onmessage?: (message: JSONRPCMessage) => void;\n\n constructor(options: ExtensionClientTransportOptions = {}) {\n this._extensionId = options.extensionId;\n this._portName = options.portName || 'mcp';\n }\n\n /**\n * Starts the transport by connecting to the extension port\n */\n async start(): Promise<void> {\n if (this._port) {\n console.warn(\n 'ExtensionClientTransport already started! If using Client class, note that connect() calls start() automatically.'\n );\n // throw new Error(\n // 'ExtensionClientTransport already started! If using Client class, note that connect() calls start() automatically.'\n // );\n return;\n }\n\n return new Promise((resolve, reject) => {\n if (!chrome?.runtime?.connect) {\n reject(\n new Error(\n 'Chrome runtime API not available. This transport must be used in a Chrome extension context.'\n )\n );\n return;\n }\n\n try {\n // Connect to the extension\n if (this._extensionId) {\n this._port = chrome.runtime.connect(this._extensionId, { name: this._portName });\n } else {\n this._port = chrome.runtime.connect({ name: this._portName });\n }\n\n // Set up message handler\n this._messageHandler = (message: any) => {\n try {\n const mcpMessage = JSONRPCMessageSchema.parse(message);\n this.onmessage?.(mcpMessage);\n } catch (error) {\n this.onerror?.(new Error(`Failed to parse message: ${error}`));\n }\n };\n\n // Set up disconnect handler\n this._disconnectHandler = () => {\n this._cleanup();\n this.onclose?.();\n };\n\n this._port.onMessage.addListener(this._messageHandler);\n this._port.onDisconnect.addListener(this._disconnectHandler);\n\n // Check for immediate connection errors\n const error = chrome.runtime.lastError;\n if (error) {\n this._cleanup();\n reject(new Error(`Connection failed: ${error.message}`));\n return;\n }\n\n resolve();\n } catch (error) {\n reject(error);\n }\n });\n }\n\n /**\n * Sends a message to the server\n */\n async send(message: JSONRPCMessage, _options?: TransportSendOptions): Promise<void> {\n if (!this._port) {\n throw new Error('Not connected');\n }\n\n try {\n this._port.postMessage(message);\n } catch (error) {\n throw new Error(`Failed to send message: ${error}`);\n }\n }\n\n /**\n * Closes the transport\n */\n async close(): Promise<void> {\n if (this._port) {\n try {\n this._port.disconnect();\n } catch (error) {\n // Port might already be disconnected\n }\n }\n\n this._cleanup();\n this.onclose?.();\n }\n\n /**\n * Cleans up event listeners and references\n */\n private _cleanup(): void {\n if (this._port) {\n if (this._messageHandler) {\n this._port.onMessage.removeListener(this._messageHandler);\n }\n if (this._disconnectHandler) {\n this._port.onDisconnect.removeListener(this._disconnectHandler);\n }\n }\n this._port = undefined;\n }\n}\n","import { Transport, TransportSendOptions } from '@modelcontextprotocol/sdk/shared/transport.js';\nimport { JSONRPCMessage, JSONRPCMessageSchema } from '@modelcontextprotocol/sdk/types.js';\n\n/**\n * Server transport for Chrome extensions using Port-based messaging.\n * This transport handles a single client connection through Chrome's port messaging API.\n * It should be used in the extension's background service worker.\n */\nexport class ExtensionServerTransport implements Transport {\n private _port: chrome.runtime.Port;\n private _started = false;\n private _messageHandler?: (message: any, port: chrome.runtime.Port) => void;\n private _disconnectHandler?: (port: chrome.runtime.Port) => void;\n\n onclose?: () => void;\n onerror?: (error: Error) => void;\n onmessage?: (message: JSONRPCMessage) => void;\n\n constructor(port: chrome.runtime.Port) {\n this._port = port;\n }\n\n /**\n * Starts the transport and begins handling messages\n */\n async start(): Promise<void> {\n if (this._started) {\n throw new Error(\n 'ExtensionServerTransport already started! If using Server class, note that connect() calls start() automatically.'\n );\n }\n\n if (!this._port) {\n throw new Error('Port not available');\n }\n\n this._started = true;\n\n // Set up message handler\n this._messageHandler = (message: any) => {\n try {\n const mcpMessage = JSONRPCMessageSchema.parse(message);\n this.onmessage?.(mcpMessage);\n } catch (error) {\n this.onerror?.(new Error(`Failed to parse message: ${error}`));\n }\n };\n\n // Set up disconnect handler\n this._disconnectHandler = () => {\n this._cleanup();\n this.onclose?.();\n };\n\n this._port.onMessage.addListener(this._messageHandler);\n this._port.onDisconnect.addListener(this._disconnectHandler);\n }\n\n /**\n * Sends a message to the client\n */\n async send(message: JSONRPCMessage, _options?: TransportSendOptions): Promise<void> {\n if (!this._started) {\n throw new Error('Transport not started');\n }\n\n if (!this._port) {\n throw new Error('Not connected to client');\n }\n\n try {\n this._port.postMessage(message);\n } catch (error) {\n throw new Error(`Failed to send message: ${error}`);\n }\n }\n\n /**\n * Closes the transport\n */\n async close(): Promise<void> {\n this._started = false;\n\n if (this._port) {\n try {\n this._port.disconnect();\n } catch (error) {\n // Port might already be disconnected\n }\n }\n\n this._cleanup();\n this.onclose?.();\n }\n\n /**\n * Cleans up event listeners and references\n */\n private _cleanup(): void {\n if (this._port) {\n if (this._messageHandler) {\n this._port.onMessage.removeListener(this._messageHandler);\n }\n if (this._disconnectHandler) {\n this._port.onDisconnect.removeListener(this._disconnectHandler);\n }\n }\n }\n}\n","import { Transport } from '@modelcontextprotocol/sdk/shared/transport.js';\nimport { JSONRPCMessage, JSONRPCMessageSchema } from '@modelcontextprotocol/sdk/types.js';\n\nconst SUBPROTOCOL = 'mcp';\n\n/**\n * Client transport for WebSocket: this will connect to a server over the WebSocket protocol.\n * This transport is Node.js specific and requires the 'ws' package to be installed.\n */\nexport class WebSocketClientTransport implements Transport {\n private _socket?: any; // WebSocket type from 'ws' package\n private _url: URL;\n private _WebSocket?: typeof import('ws').WebSocket;\n\n onclose?: () => void;\n onerror?: (error: Error) => void;\n onmessage?: (message: JSONRPCMessage) => void;\n\n constructor(url: URL) {\n this._url = url;\n }\n\n async start(): Promise<void> {\n if (this._socket) {\n throw new Error(\n 'WebSocketClientTransport already started! If using Client class, note that connect() calls start() automatically.'\n );\n }\n\n // Dynamically import the WebSocket class from 'ws' package\n if (!this._WebSocket) {\n try {\n const ws = await import('ws');\n this._WebSocket = ws.WebSocket;\n } catch (error) {\n throw new Error(\"Failed to import 'ws' package. Please install it with: npm install ws\");\n }\n }\n\n return new Promise((resolve, reject) => {\n // Create WebSocket instance with Node.js specific options\n this._socket = new this._WebSocket!(this._url.toString(), {\n perMessageDeflate: false,\n // Add the subprotocol in the options\n ...(SUBPROTOCOL ? { protocol: SUBPROTOCOL } : {}),\n });\n\n // Node.js WebSocket error event handler\n this._socket.on('error', (error: Error) => {\n reject(error);\n this.onerror?.(error);\n });\n\n // Node.js WebSocket open event handler\n this._socket.on('open', () => {\n resolve();\n });\n\n // Node.js WebSocket close event handler\n this._socket.on('close', () => {\n this.onclose?.();\n });\n\n // Node.js WebSocket message event handler\n this._socket.on('message', (data: Buffer | ArrayBuffer | Buffer[]) => {\n let message: JSONRPCMessage;\n try {\n // Convert Buffer to string before parsing\n const dataStr = data instanceof Buffer ? data.toString('utf-8') : data.toString();\n message = JSONRPCMessageSchema.parse(JSON.parse(dataStr));\n } catch (error) {\n this.onerror?.(error as Error);\n return;\n }\n this.onmessage?.(message);\n });\n });\n }\n\n async close(): Promise<void> {\n if (this._socket && this._WebSocket) {\n // Check the readyState before closing\n if (this._socket.readyState === this._WebSocket.OPEN) {\n this._socket.close();\n }\n }\n }\n\n async send(message: JSONRPCMessage): Promise<void> {\n return new Promise((resolve, reject) => {\n if (!this._socket || !this._WebSocket) {\n reject(new Error('Not connected'));\n return;\n }\n\n // Check if the socket is open before sending\n if (this._socket.readyState !== this._WebSocket.OPEN) {\n reject(new Error('WebSocket is not open'));\n return;\n }\n\n // In Node.js, send accepts a callback for error handling\n this._socket.send(JSON.stringify(message), (error?: Error) => {\n if (error) {\n reject(error);\n } else {\n resolve();\n }\n });\n });\n }\n}\n","import { Transport } from '@modelcontextprotocol/sdk/shared/transport.js';\nimport { JSONRPCMessage, JSONRPCMessageSchema } from '@modelcontextprotocol/sdk/types.js';\n\n/**\n * Server transport for WebSocket: this will accept connections from MCP clients over WebSocket protocol.\n * Designed to work in browser extension environments.\n */\nexport class WebSocketServerTransport implements Transport {\n private _socket?: WebSocket;\n private _server?: any; // For environments that support WebSocketServer\n private _started = false;\n private _connectionId?: string;\n\n onclose?: () => void;\n onerror?: (error: Error) => void;\n onmessage?: (message: JSONRPCMessage) => void;\n\n constructor(\n private _options: {\n /**\n * For browser extensions: provide an existing WebSocket connection\n */\n socket?: WebSocket;\n /**\n * For Node.js: provide port to create WebSocketServer\n */\n port?: number;\n }\n ) {}\n\n /**\n * Starts the transport. In browser extension context, this validates the socket.\n */\n async start(): Promise<void> {\n if (this._started) {\n throw new Error(\n 'WebSocketServerTransport already started! If using Server class, note that connect() calls start() automatically.'\n );\n }\n this._started = true;\n\n if (this._options.socket) {\n this._socket = this._options.socket;\n this.setupSocketHandlers(this._socket);\n } else {\n throw new Error('WebSocketServerTransport requires either a socket ');\n }\n }\n\n private setupSocketHandlers(socket: WebSocket): void {\n socket.onmessage = (event: MessageEvent) => {\n let message: JSONRPCMessage;\n try {\n const data = typeof event.data === 'string' ? event.data : event.data.toString();\n const parsedData = JSON.parse(data);\n\n // Handle bridge protocol - extract connectionId if present\n if (parsedData.connectionId) {\n this._connectionId = parsedData.connectionId;\n const { connectionId, ...actualMessage } = parsedData;\n message = JSONRPCMessageSchema.parse(actualMessage);\n } else {\n message = JSONRPCMessageSchema.parse(parsedData);\n }\n } catch (error) {\n this.onerror?.(error as Error);\n return;\n }\n this.onmessage?.(message);\n };\n\n socket.onerror = (event: Event) => {\n const error = new Error(`WebSocket error: ${JSON.stringify(event)}`);\n this.onerror?.(error);\n };\n\n socket.onclose = () => {\n this._socket = undefined;\n this.onclose?.();\n };\n }\n\n async close(): Promise<void> {\n if (this._socket) {\n this._socket.close();\n this._socket = undefined;\n }\n\n if (this._server) {\n return new Promise((resolve) => {\n this._server.close(() => {\n this._server = undefined;\n resolve();\n });\n });\n }\n }\n\n send(message: JSONRPCMessage): Promise<void> {\n return new Promise((resolve, reject) => {\n if (!this._socket || this._socket.readyState !== WebSocket.OPEN) {\n reject(new Error('No active WebSocket connection'));\n return;\n }\n\n try {\n // If we have a connectionId from the bridge, include it in the response\n const messageToSend = this._connectionId\n ? { ...message, connectionId: this._connectionId }\n : message;\n\n this._socket.send(JSON.stringify(messageToSend));\n resolve();\n } catch (error) {\n reject(error);\n }\n });\n }\n\n /**\n * Get the current WebSocket connection (if any)\n */\n get socket(): WebSocket | undefined {\n return this._socket;\n }\n\n /**\n * Check if transport has an active connection\n */\n get isConnected(): boolean {\n return this._socket?.readyState === WebSocket.OPEN;\n }\n}\n","import { Transport } from '@modelcontextprotocol/sdk/shared/transport.js';\nimport { JSONRPCMessage, JSONRPCMessageSchema } from '@modelcontextprotocol/sdk/types.js';\n\nexport interface BrowserWebSocketClientTransportOptions {\n maxRetries?: number;\n initialRetryDelay?: number;\n maxRetryDelay?: number;\n connectionTimeout?: number;\n retryMultiplier?: number;\n}\n\n/**\n * Browser-compatible WebSocket client transport for connecting from browser extensions to a bridge server.\n * This transport uses the native browser WebSocket API and doesn't require any Node.js dependencies.\n */\nexport class BrowserWebSocketClientTransport implements Transport {\n private _socket?: WebSocket;\n private _url: string;\n private _connectionId?: string;\n private _options: Required<BrowserWebSocketClientTransportOptions>;\n private _retryCount = 0;\n private _isClosing = false;\n private _connectionTimeoutId?: number;\n\n onclose?: () => void;\n onerror?: (error: Error) => void;\n onmessage?: (message: JSONRPCMessage) => void;\n\n constructor(url: string | URL, options?: BrowserWebSocketClientTransportOptions) {\n this._url = url.toString();\n this._options = {\n maxRetries: options?.maxRetries ?? 10,\n initialRetryDelay: options?.initialRetryDelay ?? 1000,\n maxRetryDelay: options?.maxRetryDelay ?? 30000,\n connectionTimeout: options?.connectionTimeout ?? 10000,\n retryMultiplier: options?.retryMultiplier ?? 1.5,\n };\n }\n\n async start(): Promise<void> {\n if (this._socket) {\n throw new Error(\n 'BrowserWebSocketClientTransport already started! If using Client class, note that connect() calls start() automatically.'\n );\n }\n\n this._isClosing = false;\n this._retryCount = 0;\n return this._connectWithRetry();\n }\n\n private async _connectWithRetry(): Promise<void> {\n while (this._retryCount <= this._options.maxRetries && !this._isClosing) {\n try {\n await this._attemptConnection();\n return; // Success!\n } catch (error) {\n this._retryCount++;\n\n if (this._isClosing) {\n throw new Error('Connection cancelled');\n }\n\n if (this._retryCount > this._options.maxRetries) {\n throw new Error(`Failed to connect after ${this._options.maxRetries} retries: ${error}`);\n }\n\n const delay = Math.min(\n this._options.initialRetryDelay *\n Math.pow(this._options.retryMultiplier, this._retryCount - 1),\n this._options.maxRetryDelay\n );\n\n console.log(\n `[WebSocket] Connection failed, retrying in ${delay}ms (attempt ${this._retryCount}/${this._options.maxRetries})`\n );\n await this._sleep(delay);\n }\n }\n }\n\n private _sleep(ms: number): Promise<void> {\n return new Promise((resolve) => setTimeout(resolve, ms));\n }\n\n private async _attemptConnection(): Promise<void> {\n return new Promise((resolve, reject) => {\n try {\n // Clear any existing timeout\n if (this._connectionTimeoutId) {\n clearTimeout(this._connectionTimeoutId);\n }\n\n // Create WebSocket with browser API\n this._socket = new WebSocket(this._url);\n\n // Set connection timeout\n this._connectionTimeoutId = setTimeout(() => {\n if (this._socket && this._socket.readyState === WebSocket.CONNECTING) {\n this._socket.close();\n reject(new Error(`Connection timeout after ${this._options.connectionTimeout}ms`));\n }\n }, this._options.connectionTimeout) as unknown as number;\n\n this._socket.onopen = () => {\n // Clear timeout on successful connection\n if (this._connectionTimeoutId) {\n clearTimeout(this._connectionTimeoutId);\n this._connectionTimeoutId = undefined;\n }\n this._retryCount = 0; // Reset retry count on successful connection\n resolve();\n };\n\n this._socket.onerror = (_event) => {\n const error = new Error(`WebSocket connection error`);\n reject(error);\n // Don't call this.onerror during connection attempts\n };\n\n this._socket.onclose = () => {\n this._socket = undefined;\n this._connectionId = undefined;\n\n // Only call onclose if we're not in the middle of retrying\n if (!this._isClosing && this._retryCount === 0) {\n this.onclose?.();\n }\n };\n\n this._socket.onmessage = (event: MessageEvent) => {\n let data: any;\n try {\n data = JSON.parse(event.data);\n\n // Handle bridge-specific messages\n if (data.connectionId && !this._connectionId) {\n // Store connectionId for future messages\n this._connectionId = data.connectionId;\n }\n\n // Extract the actual message\n if (data.connectionId) {\n const { connectionId, ...message } = data;\n data = message;\n }\n\n const message = JSONRPCMessageSchema.parse(data);\n this.onmessage?.(message);\n } catch (error) {\n this.onerror?.(error as Error);\n }\n };\n } catch (error) {\n reject(error);\n }\n });\n }\n\n async close(): Promise<void> {\n this._isClosing = true;\n\n // Clear any pending connection timeout\n if (this._connectionTimeoutId) {\n clearTimeout(this._connectionTimeoutId);\n this._connectionTimeoutId = undefined;\n }\n\n if (this._socket && this._socket.readyState === WebSocket.OPEN) {\n this._socket.close();\n }\n }\n\n async send(message: JSONRPCMessage): Promise<void> {\n return new Promise((resolve, reject) => {\n if (!this._socket || this._socket.readyState !== WebSocket.OPEN) {\n reject(new Error('WebSocket is not connected'));\n return;\n }\n\n try {\n // If we have a connectionId from the bridge, include it\n const messageToSend = this._connectionId\n ? { ...message, connectionId: this._connectionId }\n : message;\n\n this._socket.send(JSON.stringify(messageToSend));\n resolve();\n } catch (error) {\n reject(error);\n }\n });\n }\n\n /**\n * Check if transport is connected\n */\n get isConnected(): boolean {\n return this._socket?.readyState === WebSocket.OPEN;\n }\n}\n"]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@mcp-b/transports",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.5",
|
|
4
4
|
"description": "Transports for the in browser transport protocols",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"author": "Alex Nahas",
|
|
@@ -34,7 +34,7 @@
|
|
|
34
34
|
"dist"
|
|
35
35
|
],
|
|
36
36
|
"dependencies": {
|
|
37
|
-
"@modelcontextprotocol/sdk": "^1.
|
|
37
|
+
"@modelcontextprotocol/sdk": "^1.13.2",
|
|
38
38
|
"@types/cheerio": "^1.0.0",
|
|
39
39
|
"cheerio": "^1.1.0",
|
|
40
40
|
"zod": "^3.24.1"
|