@roxybrowser/openapi 1.0.3 → 1.0.4-beta.1
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 +105 -257
- package/lib/browser/browser-creator.d.ts +1 -5
- package/lib/browser/browser-creator.d.ts.map +1 -1
- package/lib/browser/browser-creator.js +2 -25
- package/lib/browser/browser-creator.js.map +1 -1
- package/lib/index.js +1075 -275
- package/lib/index.js.map +1 -1
- package/lib/roxy-client.d.ts +40 -6
- package/lib/roxy-client.d.ts.map +1 -1
- package/lib/roxy-client.js +229 -68
- package/lib/roxy-client.js.map +1 -1
- package/lib/types.d.ts +132 -29
- package/lib/types.d.ts.map +1 -1
- package/lib/types.js +332 -2
- package/lib/types.js.map +1 -1
- package/lib/utils/error-analyzer.d.ts +84 -0
- package/lib/utils/error-analyzer.d.ts.map +1 -0
- package/lib/utils/error-analyzer.js +387 -0
- package/lib/utils/error-analyzer.js.map +1 -0
- package/package.json +4 -3
- package/lib/browser/template-manager.d.ts +0 -48
- package/lib/browser/template-manager.d.ts.map +0 -1
- package/lib/browser/template-manager.js +0 -324
- package/lib/browser/template-manager.js.map +0 -1
package/README.md
CHANGED
|
@@ -1,5 +1,7 @@
|
|
|
1
1
|
# RoxyBrowser MCP Server
|
|
2
2
|
|
|
3
|
+
[English](README.md) | [中文](README_CN.md)
|
|
4
|
+
|
|
3
5
|
A Model Context Protocol (MCP) server for [RoxyBrowser](https://www.roxybrowser.com/) that provides AI assistants with the ability to manage browser instances and obtain Chrome DevTools Protocol (CDP) WebSocket endpoints for automation.
|
|
4
6
|
|
|
5
7
|
## Features
|
|
@@ -7,11 +9,10 @@ A Model Context Protocol (MCP) server for [RoxyBrowser](https://www.roxybrowser.
|
|
|
7
9
|
- 🚀 **Browser Management**: Open and close RoxyBrowser instances programmatically
|
|
8
10
|
- 🔗 **CDP Integration**: Get WebSocket endpoints for Chrome DevTools Protocol automation
|
|
9
11
|
- 🤖 **AI-Friendly**: Seamlessly integrates with AI assistants through MCP
|
|
10
|
-
- 🎯 **Playwright Ready**: Works perfectly with [
|
|
12
|
+
- 🎯 **Playwright Ready**: Works perfectly with [PlayRoxy MCP](https://github.com/roxybrowserlabs/playroxy-mcp) (RoxyBrowser's customized Playwright MCP)
|
|
11
13
|
- 📊 **Workspace Support**: Manage browsers across different workspaces and projects
|
|
12
|
-
- 🛠️ **Browser Creation**: Create browsers with layered complexity (Simple, Standard, Advanced
|
|
14
|
+
- 🛠️ **Browser Creation**: Create browsers with layered complexity (Simple, Standard, Advanced)
|
|
13
15
|
- 🌐 **Proxy Management**: Built-in proxy validation, testing, and configuration tools
|
|
14
|
-
- 📋 **Template System**: Predefined configurations for Gmail, Facebook, E-commerce, and more
|
|
15
16
|
- 🔧 **Advanced Configuration**: Full control over fingerprints, proxies, and browser settings
|
|
16
17
|
|
|
17
18
|
## Quick Start
|
|
@@ -20,285 +21,117 @@ A Model Context Protocol (MCP) server for [RoxyBrowser](https://www.roxybrowser.
|
|
|
20
21
|
|
|
21
22
|
1. **RoxyBrowser** installed and running
|
|
22
23
|
2. **RoxyBrowser API** enabled in settings:
|
|
23
|
-
- Open RoxyBrowser → API
|
|
24
|
-
- Set "
|
|
24
|
+
- Open RoxyBrowser → API
|
|
25
|
+
- Set "API Status" to "Enable"
|
|
25
26
|
- Copy your API Key
|
|
26
27
|
- Note the API port (default: 50000)
|
|
27
28
|
|
|
28
|
-
### Installation
|
|
29
|
-
|
|
30
|
-
```bash
|
|
31
|
-
# Clone or download the roxy-browser-mcp project
|
|
32
|
-
cd roxy-browser-mcp
|
|
33
|
-
|
|
34
|
-
# Install dependencies
|
|
35
|
-
npm install
|
|
36
|
-
|
|
37
|
-
# Build the TypeScript project
|
|
38
|
-
npm run build
|
|
39
|
-
```
|
|
40
|
-
|
|
41
|
-
### Configuration
|
|
42
|
-
|
|
43
|
-
Set up your environment variables:
|
|
44
|
-
|
|
45
|
-
```bash
|
|
46
|
-
# Required: Your RoxyBrowser API Key
|
|
47
|
-
export ROXY_API_KEY="your_api_key_here"
|
|
48
|
-
|
|
49
|
-
# Optional: API host (default: http://127.0.0.1:50000)
|
|
50
|
-
export ROXY_API_HOST="http://127.0.0.1:50000"
|
|
51
|
-
|
|
52
|
-
# Optional: Request timeout in milliseconds (default: 30000)
|
|
53
|
-
export ROXY_TIMEOUT="30000"
|
|
54
|
-
```
|
|
55
|
-
|
|
56
29
|
### MCP Client Configuration
|
|
57
30
|
|
|
58
|
-
Add
|
|
31
|
+
Add both RoxyBrowser OpenAPI and PlayRoxy MCP to your MCP client configuration:
|
|
59
32
|
|
|
60
33
|
**Claude Desktop / VS Code / Cursor:**
|
|
61
34
|
```json
|
|
62
35
|
{
|
|
63
36
|
"mcpServers": {
|
|
64
|
-
"
|
|
65
|
-
"command": "
|
|
66
|
-
"args": ["/
|
|
37
|
+
"roxybrowser-openapi": {
|
|
38
|
+
"command": "npx",
|
|
39
|
+
"args": ["@roxybrowser/openapi@latest"],
|
|
67
40
|
"env": {
|
|
68
|
-
"ROXY_API_KEY": "
|
|
41
|
+
"ROXY_API_KEY": "YOUR API KEY",
|
|
69
42
|
"ROXY_API_HOST": "http://127.0.0.1:50000"
|
|
70
43
|
}
|
|
44
|
+
},
|
|
45
|
+
"roxybrowser-playwright-mcp": {
|
|
46
|
+
"command": "npx",
|
|
47
|
+
"args": ["@roxybrowser/playwright-mcp@latest"]
|
|
71
48
|
}
|
|
72
49
|
}
|
|
73
50
|
}
|
|
74
51
|
```
|
|
75
52
|
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
### Available Tools
|
|
79
|
-
|
|
80
|
-
#### Browser Management Tools
|
|
81
|
-
|
|
82
|
-
##### 1. `roxy_list_workspaces`
|
|
83
|
-
Get all available workspaces and their projects.
|
|
84
|
-
|
|
85
|
-
**Parameters:**
|
|
86
|
-
- `pageIndex` (optional): Page number for pagination (default: 1)
|
|
87
|
-
- `pageSize` (optional): Items per page (default: 15)
|
|
53
|
+
**Note:** Replace `YOUR API KEY` and `YOUR API HOST` with your actual RoxyBrowser credentials.
|
|
88
54
|
|
|
89
|
-
|
|
90
|
-
```
|
|
91
|
-
AI: "List all RoxyBrowser workspaces"
|
|
92
|
-
```
|
|
55
|
+
## Available Tools
|
|
93
56
|
|
|
94
|
-
|
|
95
|
-
|
|
57
|
+
### Workspace & Project Management
|
|
58
|
+
- `roxy_list_workspaces` - List all available workspaces and their projects
|
|
59
|
+
- `roxy_list_accounts` - Get platform accounts and credentials in a workspace
|
|
60
|
+
- `roxy_list_labels` - Get browser labels/tags for organization
|
|
96
61
|
|
|
97
|
-
|
|
98
|
-
- `
|
|
99
|
-
- `
|
|
100
|
-
- `
|
|
101
|
-
- `
|
|
102
|
-
- `
|
|
62
|
+
### Browser Management
|
|
63
|
+
- `roxy_list_browsers` - List browsers in a workspace/project with filtering
|
|
64
|
+
- `roxy_get_browser_detail` - Get detailed browser information and configuration
|
|
65
|
+
- `roxy_open_browsers` - Open browsers and get CDP WebSocket endpoints for automation
|
|
66
|
+
- `roxy_close_browsers` - Close running browsers (does NOT free quota)
|
|
67
|
+
- `roxy_delete_browsers` - Delete browser profiles permanently (frees quota)
|
|
68
|
+
- `roxy_get_connection_info` - Get CDP endpoints and PIDs for opened browsers
|
|
103
69
|
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
70
|
+
### Browser Creation
|
|
71
|
+
- `roxy_create_browser_simple` - Create browser with basic configuration
|
|
72
|
+
- `roxy_create_browser_standard` - Create browser with common settings (OS, proxy, window size, etc.)
|
|
73
|
+
- `roxy_create_browser_advanced` - Create browser with full control (fingerprint, platform accounts, etc.)
|
|
108
74
|
|
|
109
|
-
|
|
110
|
-
|
|
75
|
+
### Browser Maintenance
|
|
76
|
+
- `roxy_update_browser` - Update existing browser configuration
|
|
77
|
+
- `roxy_random_fingerprint` - Randomize browser fingerprint
|
|
78
|
+
- `roxy_clear_local_cache` - Clear local browser cache
|
|
79
|
+
- `roxy_clear_server_cache` - Clear server-side browser cache
|
|
111
80
|
|
|
112
|
-
|
|
113
|
-
- `
|
|
114
|
-
- `
|
|
115
|
-
- `args` (optional): Browser startup arguments
|
|
116
|
-
|
|
117
|
-
**Example:**
|
|
118
|
-
```
|
|
119
|
-
AI: "Open 5 browsers from workspace 1 with IDs: abc123, def456, ghi789, jkl012, mno345"
|
|
120
|
-
```
|
|
121
|
-
|
|
122
|
-
**Returns:**
|
|
123
|
-
- CDP WebSocket URLs for each browser
|
|
124
|
-
- HTTP endpoints
|
|
125
|
-
- Process IDs
|
|
126
|
-
- Ready-to-use playwright-mcp commands
|
|
127
|
-
|
|
128
|
-
##### 4. `roxy_close_browsers`
|
|
129
|
-
Close multiple browsers by their directory IDs.
|
|
130
|
-
|
|
131
|
-
**Parameters:**
|
|
132
|
-
- `dirIds` (required): Array of browser directory IDs to close
|
|
133
|
-
|
|
134
|
-
**Example:**
|
|
135
|
-
```
|
|
136
|
-
AI: "Close browsers with IDs: abc123, def456, ghi789"
|
|
137
|
-
```
|
|
138
|
-
|
|
139
|
-
#### Browser Creation Tools 🆕
|
|
140
|
-
|
|
141
|
-
##### 5. `roxy_create_browser_simple`
|
|
142
|
-
Create a browser with simple configuration - perfect for quick setup.
|
|
143
|
-
|
|
144
|
-
**Parameters:**
|
|
145
|
-
- `workspaceId` (required): Workspace ID
|
|
146
|
-
- `windowName` (optional): Browser window name
|
|
147
|
-
- `projectId` (optional): Project ID
|
|
148
|
-
- `proxyHost` (optional): Proxy server host
|
|
149
|
-
- `proxyPort` (optional): Proxy server port
|
|
150
|
-
- `proxyUserName` (optional): Proxy username
|
|
151
|
-
- `proxyPassword` (optional): Proxy password
|
|
152
|
-
- `proxyType` (optional): HTTP, HTTPS, or SOCKS5
|
|
153
|
-
|
|
154
|
-
**Example:**
|
|
155
|
-
```
|
|
156
|
-
AI: "Create a simple browser in workspace 1 with proxy 192.168.1.100:8080"
|
|
157
|
-
```
|
|
158
|
-
|
|
159
|
-
##### 6. `roxy_create_browser_standard`
|
|
160
|
-
Create a browser with standard configuration - covers most use cases.
|
|
161
|
-
|
|
162
|
-
**Parameters:**
|
|
163
|
-
- `workspaceId` (required): Workspace ID
|
|
164
|
-
- `windowName` (optional): Browser window name
|
|
165
|
-
- `projectId` (optional): Project ID
|
|
166
|
-
- `os` (optional): Windows, macOS, Linux, IOS, Android
|
|
167
|
-
- `osVersion` (optional): OS version
|
|
168
|
-
- `coreVersion` (optional): Browser core version
|
|
169
|
-
- `proxyInfo` (optional): Complete proxy configuration object
|
|
170
|
-
- `openWidth` (optional): Window width
|
|
171
|
-
- `openHeight` (optional): Window height
|
|
172
|
-
- `language` (optional): Browser language
|
|
173
|
-
- `timeZone` (optional): Browser timezone
|
|
174
|
-
- `defaultOpenUrl` (optional): URLs to open by default
|
|
175
|
-
|
|
176
|
-
**Example:**
|
|
177
|
-
```
|
|
178
|
-
AI: "Create a standard Windows 11 browser with 1920x1080 resolution and SOCKS5 proxy"
|
|
179
|
-
```
|
|
180
|
-
|
|
181
|
-
##### 7. `roxy_create_browser_advanced`
|
|
182
|
-
Create a browser with complete configuration control - for expert users.
|
|
183
|
-
|
|
184
|
-
**Parameters:**
|
|
185
|
-
- All standard parameters plus:
|
|
186
|
-
- `userAgent` (optional): Custom user agent
|
|
187
|
-
- `searchEngine` (optional): Default search engine
|
|
188
|
-
- `labelIds` (optional): Label IDs to assign
|
|
189
|
-
- `proxyInfo` (optional): Full proxy configuration
|
|
190
|
-
- `fingerInfo` (optional): Complete fingerprint configuration
|
|
191
|
-
- `windowPlatformList` (optional): Platform account information
|
|
192
|
-
|
|
193
|
-
**Example:**
|
|
194
|
-
```
|
|
195
|
-
AI: "Create an advanced browser with custom fingerprint settings and multiple platform accounts"
|
|
196
|
-
```
|
|
197
|
-
|
|
198
|
-
##### 8. `roxy_create_browser_from_template` ⭐
|
|
199
|
-
Create browsers using predefined templates - ideal for batch creation.
|
|
200
|
-
|
|
201
|
-
**Parameters:**
|
|
202
|
-
- `workspaceId` (required): Workspace ID
|
|
203
|
-
- `templateName` (required): gmail, facebook, ecommerce, social_media, general, or custom
|
|
204
|
-
- `count` (optional): Number of browsers to create (default: 1, max: 50)
|
|
205
|
-
- `namePrefix` (optional): Prefix for browser names
|
|
206
|
-
- `projectId` (optional): Project ID
|
|
207
|
-
- `proxyList` (optional): List of proxy configurations
|
|
208
|
-
- `customConfig` (optional): Override template defaults
|
|
209
|
-
|
|
210
|
-
**Example:**
|
|
211
|
-
```
|
|
212
|
-
AI: "Create 10 Gmail browsers with different proxies using the gmail template"
|
|
213
|
-
```
|
|
214
|
-
|
|
215
|
-
##### 9. `roxy_list_browser_templates`
|
|
216
|
-
List available browser templates with descriptions.
|
|
217
|
-
|
|
218
|
-
**Example:**
|
|
219
|
-
```
|
|
220
|
-
AI: "What browser templates are available?"
|
|
221
|
-
```
|
|
222
|
-
|
|
223
|
-
#### Proxy Management Tools 🆕
|
|
224
|
-
|
|
225
|
-
##### 10. `roxy_validate_proxy_config`
|
|
226
|
-
Validate proxy configuration before using it.
|
|
227
|
-
|
|
228
|
-
**Parameters:**
|
|
229
|
-
- `proxyInfo` (required): Proxy configuration to validate
|
|
230
|
-
|
|
231
|
-
**Example:**
|
|
232
|
-
```
|
|
233
|
-
AI: "Validate this proxy configuration before creating browsers"
|
|
234
|
-
```
|
|
81
|
+
### Utilities
|
|
82
|
+
- `roxy_validate_proxy_config` - Validate proxy configuration
|
|
83
|
+
- `roxy_system_diagnostics` - System health check and diagnostics
|
|
235
84
|
|
|
236
85
|
## Complete Workflow Examples
|
|
237
86
|
|
|
238
|
-
### Example 1: Quick
|
|
87
|
+
### Example 1: Quick Browser Automation Setup
|
|
239
88
|
|
|
240
89
|
```
|
|
241
|
-
1. AI: "Create
|
|
242
|
-
→ Uses
|
|
243
|
-
→ Returns browser
|
|
90
|
+
1. AI: "Create a simple browser in workspace 1 with name 'Test Browser'"
|
|
91
|
+
→ Uses roxy_create_browser_simple
|
|
92
|
+
→ Returns browser ID ready for use
|
|
244
93
|
|
|
245
|
-
2. AI: "Open
|
|
246
|
-
→ Uses roxy_open_browsers with the returned
|
|
247
|
-
→ Returns CDP WebSocket
|
|
94
|
+
2. AI: "Open the browser I just created"
|
|
95
|
+
→ Uses roxy_open_browsers with the returned ID
|
|
96
|
+
→ Returns CDP WebSocket URL like: ws://127.0.0.1:52314/devtools/browser/xxx
|
|
248
97
|
|
|
249
|
-
3. AI: "
|
|
250
|
-
→ Uses
|
|
251
|
-
→
|
|
98
|
+
3. AI: "Navigate to gmail.com, login, and send emails"
|
|
99
|
+
→ Uses PlayRoxy MCP tools automatically (browser_navigate, browser_type, browser_click, etc.)
|
|
100
|
+
→ PlayRoxy MCP connects to the opened browser via CDP endpoint
|
|
252
101
|
|
|
253
|
-
4. AI: "
|
|
254
|
-
→ Uses playwright-mcp tools: browser_navigate, browser_type, browser_click, etc.
|
|
255
|
-
|
|
256
|
-
5. AI: "Close all browsers when done"
|
|
102
|
+
4. AI: "Close the browser when done"
|
|
257
103
|
→ Uses roxy_close_browsers
|
|
258
104
|
```
|
|
259
105
|
|
|
260
|
-
### Example 2:
|
|
106
|
+
### Example 2: Advanced Browser with Proxy Setup
|
|
261
107
|
|
|
262
108
|
```
|
|
263
109
|
1. AI: "Validate my proxy configuration before creating browsers"
|
|
264
110
|
→ Uses roxy_validate_proxy_config
|
|
265
111
|
→ Confirms proxy settings are correct
|
|
266
112
|
|
|
267
|
-
2. AI: "Create a standard
|
|
113
|
+
2. AI: "Create a standard browser with SOCKS5 proxy and 1920x1080 resolution in workspace 2"
|
|
268
114
|
→ Uses roxy_create_browser_standard with proxy configuration
|
|
269
115
|
→ Returns configured browser ID
|
|
270
116
|
|
|
271
|
-
3. AI: "Open the
|
|
272
|
-
→ Uses roxy_open_browsers →
|
|
273
|
-
→
|
|
274
|
-
```
|
|
275
|
-
|
|
276
|
-
### Example 3: Batch Social Media Management
|
|
277
|
-
|
|
117
|
+
3. AI: "Open the browser and start automation"
|
|
118
|
+
→ Uses roxy_open_browsers → gets CDP endpoint
|
|
119
|
+
→ PlayRoxy MCP automatically connects and begins automation tasks
|
|
278
120
|
```
|
|
279
|
-
1. AI: "List available browser templates"
|
|
280
|
-
→ Uses roxy_list_browser_templates
|
|
281
|
-
→ Shows social_media, facebook, etc.
|
|
282
121
|
|
|
283
|
-
|
|
284
|
-
→ Uses roxy_create_browser_from_template with proxy list
|
|
285
|
-
→ Batch creates browsers with distributed proxies
|
|
122
|
+
## Integration with Playwright MCP
|
|
286
123
|
|
|
287
|
-
|
|
288
|
-
→ Uses roxy_open_browsers with selected IDs
|
|
289
|
-
→ Ready for social media automation
|
|
290
|
-
```
|
|
124
|
+
RoxyBrowser MCP is designed to work seamlessly with [PlayRoxy MCP](https://github.com/roxybrowserlabs/playroxy-mcp), our customized Playwright MCP server built specifically for RoxyBrowser compatibility.
|
|
291
125
|
|
|
292
|
-
|
|
126
|
+
**PlayRoxy MCP** is based on [Microsoft's Playwright MCP](https://github.com/microsoft/playwright-mcp) with enhancements for RoxyBrowser's fingerprint browser features.
|
|
293
127
|
|
|
294
|
-
|
|
128
|
+
### Workflow
|
|
295
129
|
|
|
296
|
-
|
|
297
|
-
|
|
298
|
-
|
|
130
|
+
1. Use RoxyBrowser OpenAPI MCP to create and open browsers
|
|
131
|
+
2. Get CDP WebSocket endpoints from opened browsers
|
|
132
|
+
3. Use PlayRoxy MCP to automate browser tasks with full Playwright capabilities
|
|
299
133
|
|
|
300
|
-
|
|
301
|
-
```
|
|
134
|
+
Both servers work together seamlessly when configured in your MCP client (see configuration above).
|
|
302
135
|
|
|
303
136
|
## Development
|
|
304
137
|
|
|
@@ -308,11 +141,35 @@ npm run dev
|
|
|
308
141
|
|
|
309
142
|
# Build for production
|
|
310
143
|
npm run build
|
|
311
|
-
|
|
312
|
-
# Clean build artifacts
|
|
313
|
-
npm run clean
|
|
314
144
|
```
|
|
315
145
|
|
|
146
|
+
## API Reference
|
|
147
|
+
|
|
148
|
+
### Environment Variables
|
|
149
|
+
|
|
150
|
+
| Variable | Required | Default | Description |
|
|
151
|
+
|----------|----------|---------|-------------|
|
|
152
|
+
| `ROXY_API_KEY` | ✅ Yes | - | API key from RoxyBrowser settings |
|
|
153
|
+
| `ROXY_API_HOST` | ✅ Yes | `http://127.0.0.1:50000` | RoxyBrowser API endpoint |
|
|
154
|
+
| `ROXY_TIMEOUT` | No | `30000` | Request timeout in milliseconds |
|
|
155
|
+
|
|
156
|
+
### Error Codes
|
|
157
|
+
|
|
158
|
+
| Code | Name | Description |
|
|
159
|
+
|------|------|-------------|
|
|
160
|
+
| **0** | SUCCESS | Operation completed successfully |
|
|
161
|
+
| **101** | INSUFFICIENT_QUOTA | Insufficient profiles quota |
|
|
162
|
+
| **400** | INVALID_PARAMS | Invalid parameters provided |
|
|
163
|
+
| **401** | UNAUTHORIZED | Authentication failed - invalid API key |
|
|
164
|
+
| **403** | FORBIDDEN | Access denied - insufficient permissions |
|
|
165
|
+
| **404** | NOT_FOUND | Resource not found |
|
|
166
|
+
| **408** | TIMEOUT | Request timeout |
|
|
167
|
+
| **409** | CONFLICT | Resource conflict or insufficient quota |
|
|
168
|
+
| **500** | SERVER_ERROR | Internal server error |
|
|
169
|
+
| **502** | BAD_GATEWAY | Bad gateway - proxy or network issue |
|
|
170
|
+
| **503** | SERVICE_UNAVAILABLE | Service temporarily unavailable |
|
|
171
|
+
| **504** | GATEWAY_TIMEOUT | Gateway timeout |
|
|
172
|
+
|
|
316
173
|
## Troubleshooting
|
|
317
174
|
|
|
318
175
|
### Connection Issues
|
|
@@ -321,10 +178,10 @@ npm run clean
|
|
|
321
178
|
|
|
322
179
|
Check:
|
|
323
180
|
1. RoxyBrowser is running
|
|
324
|
-
2. API is enabled: RoxyBrowser → API → API
|
|
325
|
-
3. Correct API key: Copy from RoxyBrowser → API → API
|
|
326
|
-
4. Correct port: Check RoxyBrowser → API →
|
|
327
|
-
5. No firewall blocking
|
|
181
|
+
2. API is enabled: RoxyBrowser → API → API Status = Enable
|
|
182
|
+
3. Correct API key: Copy from RoxyBrowser → API → API Key
|
|
183
|
+
4. Correct port: Check RoxyBrowser → API → Port Settings (default: 50000)
|
|
184
|
+
5. No firewall blocking http://127.0.0.1:50000
|
|
328
185
|
|
|
329
186
|
### Authentication Issues
|
|
330
187
|
|
|
@@ -337,29 +194,20 @@ export ROXY_API_KEY="your_actual_api_key_from_roxybrowser"
|
|
|
337
194
|
|
|
338
195
|
### Browser Opening Issues
|
|
339
196
|
|
|
197
|
+
**Error: "Insufficient profiles quota" (Code 101 or 409)**
|
|
198
|
+
|
|
199
|
+
Solutions:
|
|
200
|
+
- Purchase more profiles in RoxyBrowser Billing Center
|
|
201
|
+
- **Delete** unused browser profiles using `roxy_delete_browsers` (closing alone does NOT free quota)
|
|
202
|
+
- Upgrade your subscription plan
|
|
203
|
+
- Check current quota usage in workspace settings
|
|
204
|
+
|
|
340
205
|
**Some browsers fail to open:**
|
|
341
206
|
|
|
342
207
|
- Check that the browser profiles exist and are not corrupted
|
|
343
208
|
- Ensure sufficient system resources (RAM, CPU)
|
|
344
209
|
- Verify the dirIds are valid (use `roxy_list_browsers` first)
|
|
345
|
-
|
|
346
|
-
## API Reference
|
|
347
|
-
|
|
348
|
-
### Environment Variables
|
|
349
|
-
|
|
350
|
-
| Variable | Required | Default | Description |
|
|
351
|
-
|----------|----------|---------|-------------|
|
|
352
|
-
| `ROXY_API_KEY` | ✅ Yes | - | API key from RoxyBrowser settings |
|
|
353
|
-
| `ROXY_API_HOST` | No | `http://127.0.0.1:50000` | RoxyBrowser API endpoint |
|
|
354
|
-
| `ROXY_TIMEOUT` | No | `30000` | Request timeout in milliseconds |
|
|
355
|
-
|
|
356
|
-
### Error Codes
|
|
357
|
-
|
|
358
|
-
| Code | Meaning | Action |
|
|
359
|
-
|------|---------|---------|
|
|
360
|
-
| 0 | Success | - |
|
|
361
|
-
| 408 | Timeout | Check network connection |
|
|
362
|
-
| 500 | Server Error | Check RoxyBrowser logs |
|
|
210
|
+
- Run `roxy_system_diagnostics` for comprehensive health check
|
|
363
211
|
|
|
364
212
|
## License
|
|
365
213
|
|
|
@@ -371,4 +219,4 @@ MIT License - see LICENSE file for details.
|
|
|
371
219
|
2. Create a feature branch
|
|
372
220
|
3. Make your changes
|
|
373
221
|
4. Add tests if applicable
|
|
374
|
-
5. Submit a pull request
|
|
222
|
+
5. Submit a pull request
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
*
|
|
4
4
|
* Handles browser creation with different complexity levels and configuration building
|
|
5
5
|
*/
|
|
6
|
-
import { BrowserCreateConfig, BrowserCreateSimpleParams, BrowserCreateStandardParams, BrowserCreateAdvancedParams,
|
|
6
|
+
import { BrowserCreateConfig, BrowserCreateSimpleParams, BrowserCreateStandardParams, BrowserCreateAdvancedParams, ProxyInfo } from '../types.js';
|
|
7
7
|
export declare class BrowserCreator {
|
|
8
8
|
/**
|
|
9
9
|
* Convert simple parameters to full browser configuration
|
|
@@ -40,10 +40,6 @@ export declare class BrowserCreator {
|
|
|
40
40
|
* Apply smart defaults to configuration
|
|
41
41
|
*/
|
|
42
42
|
static applyDefaults(config: BrowserCreateConfig): BrowserCreateConfig;
|
|
43
|
-
/**
|
|
44
|
-
* Create multiple browser configuration objects from template parameters
|
|
45
|
-
*/
|
|
46
|
-
static buildConfigsFromTemplate(params: BrowserCreateTemplateParams, templateConfig: Partial<BrowserCreateConfig>): BrowserCreateConfig[];
|
|
47
43
|
/**
|
|
48
44
|
* Batch validate multiple configurations
|
|
49
45
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"browser-creator.d.ts","sourceRoot":"","sources":["../../src/browser/browser-creator.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EACL,mBAAmB,EACnB,yBAAyB,EACzB,2BAA2B,EAC3B,2BAA2B,
|
|
1
|
+
{"version":3,"file":"browser-creator.d.ts","sourceRoot":"","sources":["../../src/browser/browser-creator.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EACL,mBAAmB,EACnB,yBAAyB,EACzB,2BAA2B,EAC3B,2BAA2B,EAG3B,SAAS,EAOV,MAAM,aAAa,CAAC;AAErB,qBAAa,cAAc;IACzB;;OAEG;IACH,MAAM,CAAC,iBAAiB,CAAC,MAAM,EAAE,yBAAyB,GAAG,mBAAmB;IA2BhF;;OAEG;IACH,MAAM,CAAC,mBAAmB,CAAC,MAAM,EAAE,2BAA2B,GAAG,mBAAmB;IAsCpF;;OAEG;IACH,MAAM,CAAC,mBAAmB,CAAC,MAAM,EAAE,2BAA2B,GAAG,mBAAmB;IAIpF;;OAEG;IACH,MAAM,CAAC,mBAAmB,CAAC,MAAM,CAAC,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,GAAG,MAAM;IAanE;;OAEG;IACH,MAAM,CAAC,sBAAsB,CAC3B,OAAO,EAAE,mBAAmB,EAAE,EAC9B,SAAS,EAAE,SAAS,EAAE,GACrB,mBAAmB,EAAE;IAWxB;;OAEG;IACH,MAAM,CAAC,cAAc,CAAC,MAAM,EAAE,mBAAmB,GAAG;QAAE,KAAK,EAAE,OAAO,CAAC;QAAC,MAAM,EAAE,MAAM,EAAE,CAAA;KAAE;IA+BxF;;OAEG;IACH,OAAO,CAAC,MAAM,CAAC,kBAAkB;IAqBjC;;OAEG;IACH,MAAM,CAAC,aAAa,CAAC,MAAM,EAAE,mBAAmB,GAAG,mBAAmB;IAkFtE;;OAEG;IACH,MAAM,CAAC,eAAe,CAAC,OAAO,EAAE,mBAAmB,EAAE,GAAG;QACtD,KAAK,EAAE,OAAO,CAAC;QACf,MAAM,EAAE,KAAK,CAAC;YAAE,KAAK,EAAE,MAAM,CAAC;YAAC,MAAM,EAAE,MAAM,EAAE,CAAA;SAAE,CAAC,CAAC;KACpD;CAeF"}
|
|
@@ -3,6 +3,7 @@
|
|
|
3
3
|
*
|
|
4
4
|
* Handles browser creation with different complexity levels and configuration building
|
|
5
5
|
*/
|
|
6
|
+
import { LATEST_CORE_VERSION, } from '../types.js';
|
|
6
7
|
export class BrowserCreator {
|
|
7
8
|
/**
|
|
8
9
|
* Convert simple parameters to full browser configuration
|
|
@@ -171,7 +172,7 @@ export class BrowserCreator {
|
|
|
171
172
|
const defaultConfig = {
|
|
172
173
|
os: 'Windows',
|
|
173
174
|
osVersion: '11',
|
|
174
|
-
coreVersion:
|
|
175
|
+
coreVersion: LATEST_CORE_VERSION,
|
|
175
176
|
searchEngine: 'Google',
|
|
176
177
|
// Default fingerprint settings
|
|
177
178
|
fingerInfo: {
|
|
@@ -242,30 +243,6 @@ export class BrowserCreator {
|
|
|
242
243
|
}
|
|
243
244
|
return result;
|
|
244
245
|
}
|
|
245
|
-
/**
|
|
246
|
-
* Create multiple browser configuration objects from template parameters
|
|
247
|
-
*/
|
|
248
|
-
static buildConfigsFromTemplate(params, templateConfig) {
|
|
249
|
-
const count = params.count || 1;
|
|
250
|
-
const configs = [];
|
|
251
|
-
for (let i = 0; i < count; i++) {
|
|
252
|
-
const baseConfig = {
|
|
253
|
-
workspaceId: params.workspaceId,
|
|
254
|
-
projectId: params.projectId,
|
|
255
|
-
windowName: this.generateBrowserName(params.namePrefix, i),
|
|
256
|
-
...templateConfig,
|
|
257
|
-
...params.customConfig,
|
|
258
|
-
};
|
|
259
|
-
// Apply defaults and validate
|
|
260
|
-
const config = this.applyDefaults(baseConfig);
|
|
261
|
-
configs.push(config);
|
|
262
|
-
}
|
|
263
|
-
// Assign proxies if provided
|
|
264
|
-
if (params.proxyList && params.proxyList.length > 0) {
|
|
265
|
-
return this.assignProxiesToConfigs(configs, params.proxyList);
|
|
266
|
-
}
|
|
267
|
-
return configs;
|
|
268
|
-
}
|
|
269
246
|
/**
|
|
270
247
|
* Batch validate multiple configurations
|
|
271
248
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"browser-creator.js","sourceRoot":"","sources":["../../src/browser/browser-creator.ts"],"names":[],"mappings":"AAAA;;;;GAIG;
|
|
1
|
+
{"version":3,"file":"browser-creator.js","sourceRoot":"","sources":["../../src/browser/browser-creator.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAYL,mBAAmB,GAEpB,MAAM,aAAa,CAAC;AAErB,MAAM,OAAO,cAAc;IACzB;;OAEG;IACH,MAAM,CAAC,iBAAiB,CAAC,MAAiC;QACxD,MAAM,MAAM,GAAwB;YAClC,WAAW,EAAE,MAAM,CAAC,WAAW;SAChC,CAAC;QAEF,4BAA4B;QAC5B,IAAI,MAAM,CAAC,UAAU;YAAE,MAAM,CAAC,UAAU,GAAG,MAAM,CAAC,UAAU,CAAC;QAC7D,IAAI,MAAM,CAAC,SAAS;YAAE,MAAM,CAAC,SAAS,GAAG,MAAM,CAAC,SAAS,CAAC;QAC1D,IAAI,MAAM,CAAC,YAAY;YAAE,MAAM,CAAC,YAAY,GAAG,MAAM,CAAC,YAAY,CAAC;QAEnE,+CAA+C;QAC/C,IAAI,MAAM,CAAC,SAAS,IAAI,MAAM,CAAC,SAAS,EAAE,CAAC;YACzC,MAAM,CAAC,SAAS,GAAG;gBACjB,WAAW,EAAE,QAAQ;gBACrB,aAAa,EAAE,MAAM,CAAC,SAAS,IAAI,MAAM;gBACzC,QAAQ,EAAE,MAAM,CAAC,SAAS,IAAI,MAAM;gBACpC,IAAI,EAAE,MAAM,CAAC,SAAS;gBACtB,IAAI,EAAE,MAAM,CAAC,SAAS;gBACtB,aAAa,EAAE,MAAM,CAAC,aAAa;gBACnC,aAAa,EAAE,MAAM,CAAC,aAAa;gBACnC,MAAM,EAAE,MAAM;aACf,CAAC;QACJ,CAAC;QAED,OAAO,MAAM,CAAC;IAChB,CAAC;IAED;;OAEG;IACH,MAAM,CAAC,mBAAmB,CAAC,MAAmC;QAC5D,MAAM,MAAM,GAAwB;YAClC,WAAW,EAAE,MAAM,CAAC,WAAW;SAChC,CAAC;QAEF,0BAA0B;QAC1B,IAAI,MAAM,CAAC,UAAU;YAAE,MAAM,CAAC,UAAU,GAAG,MAAM,CAAC,UAAU,CAAC;QAC7D,IAAI,MAAM,CAAC,SAAS;YAAE,MAAM,CAAC,SAAS,GAAG,MAAM,CAAC,SAAS,CAAC;QAC1D,IAAI,MAAM,CAAC,YAAY;YAAE,MAAM,CAAC,YAAY,GAAG,MAAM,CAAC,YAAY,CAAC;QACnE,IAAI,MAAM,CAAC,EAAE;YAAE,MAAM,CAAC,EAAE,GAAG,MAAM,CAAC,EAAE,CAAC;QACrC,IAAI,MAAM,CAAC,SAAS;YAAE,MAAM,CAAC,SAAS,GAAG,MAAM,CAAC,SAAS,CAAC;QAC1D,IAAI,MAAM,CAAC,WAAW;YAAE,MAAM,CAAC,WAAW,GAAG,MAAM,CAAC,WAAW,CAAC;QAChE,IAAI,MAAM,CAAC,cAAc;YAAE,MAAM,CAAC,cAAc,GAAG,MAAM,CAAC,cAAc,CAAC;QAEzE,0BAA0B;QAC1B,IAAI,MAAM,CAAC,SAAS,EAAE,CAAC;YACrB,MAAM,CAAC,SAAS,GAAG,MAAM,CAAC,SAAS,CAAC;QACtC,CAAC;QAED,sDAAsD;QACtD,IAAI,MAAM,CAAC,SAAS,IAAI,MAAM,CAAC,UAAU,IAAI,MAAM,CAAC,QAAQ,IAAI,MAAM,CAAC,QAAQ,EAAE,CAAC;YAChF,MAAM,CAAC,UAAU,GAAG,EAAE,CAAC;YAEvB,IAAI,MAAM,CAAC,SAAS;gBAAE,MAAM,CAAC,UAAU,CAAC,SAAS,GAAG,MAAM,CAAC,SAAS,CAAC;YACrE,IAAI,MAAM,CAAC,UAAU;gBAAE,MAAM,CAAC,UAAU,CAAC,UAAU,GAAG,MAAM,CAAC,UAAU,CAAC;YACxE,IAAI,MAAM,CAAC,QAAQ,EAAE,CAAC;gBACpB,MAAM,CAAC,UAAU,CAAC,gBAAgB,GAAG,KAAK,CAAC;gBAC3C,MAAM,CAAC,UAAU,CAAC,QAAQ,GAAG,MAAM,CAAC,QAAQ,CAAC;YAC/C,CAAC;YACD,IAAI,MAAM,CAAC,QAAQ,EAAE,CAAC;gBACpB,MAAM,CAAC,UAAU,CAAC,UAAU,GAAG,KAAK,CAAC;gBACrC,MAAM,CAAC,UAAU,CAAC,QAAQ,GAAG,MAAM,CAAC,QAAQ,CAAC;YAC/C,CAAC;QACH,CAAC;QAED,OAAO,MAAM,CAAC;IAChB,CAAC;IAED;;OAEG;IACH,MAAM,CAAC,mBAAmB,CAAC,MAAmC;QAC5D,OAAO,MAAM,CAAC;IAChB,CAAC;IAED;;OAEG;IACH,MAAM,CAAC,mBAAmB,CAAC,MAAe,EAAE,KAAc;QACxD,MAAM,SAAS,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC,OAAO,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;QAC9E,MAAM,YAAY,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;QAEhE,IAAI,MAAM,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;YAClC,OAAO,GAAG,MAAM,IAAI,KAAK,GAAG,CAAC,IAAI,SAAS,EAAE,CAAC;QAC/C,CAAC;aAAM,IAAI,MAAM,EAAE,CAAC;YAClB,OAAO,GAAG,MAAM,IAAI,SAAS,IAAI,YAAY,EAAE,CAAC;QAClD,CAAC;aAAM,CAAC;YACN,OAAO,WAAW,SAAS,IAAI,YAAY,EAAE,CAAC;QAChD,CAAC;IACH,CAAC;IAED;;OAEG;IACH,MAAM,CAAC,sBAAsB,CAC3B,OAA8B,EAC9B,SAAsB;QAEtB,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,CAAC;YACtB,OAAO,OAAO,CAAC;QACjB,CAAC;QAED,OAAO,OAAO,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,KAAK,EAAE,EAAE,CAAC,CAAC;YACrC,GAAG,MAAM;YACT,SAAS,EAAE,SAAS,CAAC,KAAK,GAAG,SAAS,CAAC,MAAM,CAAC,EAAE,+BAA+B;SAChF,CAAC,CAAC,CAAC;IACN,CAAC;IAED;;OAEG;IACH,MAAM,CAAC,cAAc,CAAC,MAA2B;QAC/C,MAAM,MAAM,GAAa,EAAE,CAAC;QAE5B,kBAAkB;QAClB,IAAI,CAAC,MAAM,CAAC,WAAW,EAAE,CAAC;YACxB,MAAM,CAAC,IAAI,CAAC,yBAAyB,CAAC,CAAC;QACzC,CAAC;QAED,mBAAmB;QACnB,IAAI,MAAM,CAAC,SAAS,EAAE,CAAC;YACrB,MAAM,KAAK,GAAG,MAAM,CAAC,SAAS,CAAC;YAC/B,IAAI,KAAK,CAAC,aAAa,KAAK,SAAS,EAAE,CAAC;gBACtC,IAAI,CAAC,KAAK,CAAC,IAAI;oBAAE,MAAM,CAAC,IAAI,CAAC,8CAA8C,CAAC,CAAC;gBAC7E,IAAI,CAAC,KAAK,CAAC,IAAI;oBAAE,MAAM,CAAC,IAAI,CAAC,8CAA8C,CAAC,CAAC;YAC/E,CAAC;QACH,CAAC;QAED,2BAA2B;QAC3B,IAAI,MAAM,CAAC,EAAE,IAAI,MAAM,CAAC,SAAS,EAAE,CAAC;YAClC,MAAM,aAAa,GAAG,IAAI,CAAC,kBAAkB,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;YACzD,IAAI,aAAa,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,MAAM,CAAC,SAAS,CAAC,EAAE,CAAC;gBAC/D,MAAM,CAAC,IAAI,CAAC,uBAAuB,MAAM,CAAC,SAAS,aAAa,MAAM,CAAC,EAAE,GAAG,CAAC,CAAC;YAChF,CAAC;QACH,CAAC;QAED,OAAO;YACL,KAAK,EAAE,MAAM,CAAC,MAAM,KAAK,CAAC;YAC1B,MAAM;SACP,CAAC;IACJ,CAAC;IAED;;OAEG;IACK,MAAM,CAAC,kBAAkB,CAAC,EAAa;QAC7C,MAAM,YAAY,GAAgC;YAChD,OAAO,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,CAAC;YAC/B,KAAK,EAAE;gBACL,QAAQ,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM;gBAC5D,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM;gBAChE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM;gBACpE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM;aAC/C;YACD,OAAO,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,CAAC;YAC5C,GAAG,EAAE;gBACH,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM;gBACtE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM;gBACtE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM;aACvE;YACD,KAAK,EAAE,EAAE,EAAE,oDAAoD;SAChE,CAAC;QAEF,OAAO,YAAY,CAAC,EAAE,CAAC,IAAI,IAAI,CAAC;IAClC,CAAC;IAED;;OAEG;IACH,MAAM,CAAC,aAAa,CAAC,MAA2B;QAC9C,MAAM,aAAa,GAAiC;YAClD,EAAE,EAAE,SAAS;YACb,SAAS,EAAE,IAAI;YACf,WAAW,EAAE,mBAAmB;YAChC,YAAY,EAAE,QAAQ;YAEtB,+BAA+B;YAC/B,UAAU,EAAE;gBACV,gBAAgB,EAAE,IAAI;gBACtB,uBAAuB,EAAE,IAAI;gBAC7B,UAAU,EAAE,IAAI;gBAChB,QAAQ,EAAE,CAAC;gBACX,gBAAgB,EAAE,IAAI;gBACtB,WAAW,EAAE,IAAI;gBACjB,WAAW,EAAE,IAAI;gBACjB,WAAW,EAAE,IAAI;gBACjB,SAAS,EAAE,MAAM;gBACjB,UAAU,EAAE,MAAM;gBAClB,aAAa,EAAE,KAAK;gBACpB,cAAc,EAAE,IAAI;gBACpB,aAAa,EAAE,KAAK;gBACpB,YAAY,EAAE,KAAK;gBACnB,WAAW,EAAE,KAAK;gBAClB,OAAO,EAAE,IAAI;gBACb,UAAU,EAAE,IAAI;gBAChB,cAAc,EAAE,KAAK;gBACrB,YAAY,EAAE,IAAI;gBAClB,aAAa,EAAE,KAAK;gBACpB,gBAAgB,EAAE,KAAK;gBACvB,cAAc,EAAE,KAAK;gBACrB,WAAW,EAAE,KAAK;gBAClB,iBAAiB,EAAE,KAAK;gBACxB,iBAAiB,EAAE,KAAK;gBACxB,kBAAkB,EAAE,IAAI;gBACxB,WAAW,EAAE,KAAK;gBAClB,UAAU,EAAE,KAAK;gBACjB,gBAAgB,EAAE,KAAK;gBACvB,aAAa,EAAE,CAAC;gBAChB,cAAc,EAAE,KAAK;gBACrB,QAAQ,EAAE,KAAK;gBACf,MAAM,EAAE,CAAC;gBACT,KAAK,EAAE,IAAI;gBACX,SAAS,EAAE,IAAI;gBACf,MAAM,EAAE,OAAO;gBACf,MAAM,EAAE,IAAI;gBACZ,YAAY,EAAE,IAAI;gBAClB,YAAY,EAAE,IAAI;gBAClB,UAAU,EAAE,IAAI;gBAChB,WAAW,EAAE,IAAI;gBACjB,UAAU,EAAE,IAAI;gBAChB,gBAAgB,EAAE,IAAI;gBACtB,OAAO,EAAE,IAAI;gBACb,UAAU,EAAE,KAAK;gBACjB,eAAe,EAAE,IAAI;gBACrB,MAAM,EAAE,IAAI;gBACZ,iBAAiB,EAAE,KAAK;aACzB;YAED,yBAAyB;YACzB,SAAS,EAAE;gBACT,WAAW,EAAE,QAAQ;gBACrB,aAAa,EAAE,SAAS;gBACxB,MAAM,EAAE,MAAM;aACf;SACF,CAAC;QAEF,yCAAyC;QACzC,MAAM,MAAM,GAAG,EAAE,GAAG,aAAa,EAAE,GAAG,MAAM,EAAE,CAAC;QAE/C,8CAA8C;QAC9C,IAAI,aAAa,CAAC,UAAU,IAAI,MAAM,CAAC,UAAU,EAAE,CAAC;YAClD,MAAM,CAAC,UAAU,GAAG,EAAE,GAAG,aAAa,CAAC,UAAU,EAAE,GAAG,MAAM,CAAC,UAAU,EAAE,CAAC;QAC5E,CAAC;QAED,IAAI,aAAa,CAAC,SAAS,IAAI,MAAM,CAAC,SAAS,EAAE,CAAC;YAChD,MAAM,CAAC,SAAS,GAAG,EAAE,GAAG,aAAa,CAAC,SAAS,EAAE,GAAG,MAAM,CAAC,SAAS,EAAE,CAAC;QACzE,CAAC;QAED,OAAO,MAAM,CAAC;IAChB,CAAC;IAED;;OAEG;IACH,MAAM,CAAC,eAAe,CAAC,OAA8B;QAInD,MAAM,SAAS,GAA+C,EAAE,CAAC;QAEjE,OAAO,CAAC,OAAO,CAAC,CAAC,MAAM,EAAE,KAAK,EAAE,EAAE;YAChC,MAAM,UAAU,GAAG,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC;YAC/C,IAAI,CAAC,UAAU,CAAC,KAAK,EAAE,CAAC;gBACtB,SAAS,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,UAAU,CAAC,MAAM,EAAE,CAAC,CAAC;YACvD,CAAC;QACH,CAAC,CAAC,CAAC;QAEH,OAAO;YACL,KAAK,EAAE,SAAS,CAAC,MAAM,KAAK,CAAC;YAC7B,MAAM,EAAE,SAAS;SAClB,CAAC;IACJ,CAAC;CACF"}
|