@natchs/browser-mcp 2.3.1 → 2.5.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (172) hide show
  1. package/README.md +367 -190
  2. package/dist/core/audit-logger.d.ts +3 -0
  3. package/dist/core/audit-logger.d.ts.map +1 -0
  4. package/dist/core/audit-logger.js +5 -0
  5. package/dist/core/audit-logger.js.map +1 -0
  6. package/dist/core/auth.d.ts.map +1 -1
  7. package/dist/core/auth.js +29 -1
  8. package/dist/core/auth.js.map +1 -1
  9. package/dist/core/body-fetch.d.ts.map +1 -1
  10. package/dist/core/body-fetch.js +26 -2
  11. package/dist/core/body-fetch.js.map +1 -1
  12. package/dist/core/browser-lifecycle.d.ts +29 -0
  13. package/dist/core/browser-lifecycle.d.ts.map +1 -0
  14. package/dist/core/browser-lifecycle.js +107 -0
  15. package/dist/core/browser-lifecycle.js.map +1 -0
  16. package/dist/core/browser-provider.d.ts +7 -3
  17. package/dist/core/browser-provider.d.ts.map +1 -1
  18. package/dist/core/browser-provider.js +65 -10
  19. package/dist/core/browser-provider.js.map +1 -1
  20. package/dist/core/config.d.ts +30 -6
  21. package/dist/core/config.d.ts.map +1 -1
  22. package/dist/core/config.js +9 -0
  23. package/dist/core/config.js.map +1 -1
  24. package/dist/core/errors.d.ts +0 -12
  25. package/dist/core/errors.d.ts.map +1 -1
  26. package/dist/core/errors.js +4 -13
  27. package/dist/core/errors.js.map +1 -1
  28. package/dist/core/index.d.ts +4 -0
  29. package/dist/core/index.d.ts.map +1 -0
  30. package/dist/core/index.js +3 -0
  31. package/dist/core/index.js.map +1 -0
  32. package/dist/core/network-capture-utils.d.ts +49 -0
  33. package/dist/core/network-capture-utils.d.ts.map +1 -0
  34. package/dist/core/network-capture-utils.js +56 -0
  35. package/dist/core/network-capture-utils.js.map +1 -0
  36. package/dist/core/network-capture.d.ts +3 -39
  37. package/dist/core/network-capture.d.ts.map +1 -1
  38. package/dist/core/network-capture.js +20 -53
  39. package/dist/core/network-capture.js.map +1 -1
  40. package/dist/core/network-export.d.ts +3 -3
  41. package/dist/core/network-export.d.ts.map +1 -1
  42. package/dist/core/network-export.js +20 -21
  43. package/dist/core/network-export.js.map +1 -1
  44. package/dist/core/output.d.ts +0 -28
  45. package/dist/core/output.d.ts.map +1 -1
  46. package/dist/core/registry.d.ts +2 -0
  47. package/dist/core/registry.d.ts.map +1 -1
  48. package/dist/core/registry.js +14 -3
  49. package/dist/core/registry.js.map +1 -1
  50. package/dist/core/sandbox.d.ts +4 -5
  51. package/dist/core/sandbox.d.ts.map +1 -1
  52. package/dist/core/sandbox.js +31 -23
  53. package/dist/core/sandbox.js.map +1 -1
  54. package/dist/core/session.d.ts +4 -3
  55. package/dist/core/session.d.ts.map +1 -1
  56. package/dist/core/session.js +43 -22
  57. package/dist/core/session.js.map +1 -1
  58. package/dist/index.d.ts.map +1 -1
  59. package/dist/index.js +4 -0
  60. package/dist/index.js.map +1 -1
  61. package/dist/prompts/index.d.ts.map +1 -1
  62. package/dist/prompts/index.js +2 -1
  63. package/dist/prompts/index.js.map +1 -1
  64. package/dist/tools/admin/cache.js +3 -3
  65. package/dist/tools/admin/cache.js.map +1 -1
  66. package/dist/tools/admin/server-status.js +2 -2
  67. package/dist/tools/admin/server-status.js.map +1 -1
  68. package/dist/tools/browser/cookies.js +4 -4
  69. package/dist/tools/browser/cookies.js.map +1 -1
  70. package/dist/tools/browser/download.js +2 -2
  71. package/dist/tools/browser/download.js.map +1 -1
  72. package/dist/tools/browser/evaluate.d.ts.map +1 -1
  73. package/dist/tools/browser/evaluate.js +23 -6
  74. package/dist/tools/browser/evaluate.js.map +1 -1
  75. package/dist/tools/browser/index.d.ts.map +1 -1
  76. package/dist/tools/browser/index.js +2 -0
  77. package/dist/tools/browser/index.js.map +1 -1
  78. package/dist/tools/browser/page-info.js +2 -2
  79. package/dist/tools/browser/page-info.js.map +1 -1
  80. package/dist/tools/browser/pdf.js +4 -4
  81. package/dist/tools/browser/pdf.js.map +1 -1
  82. package/dist/tools/browser/screenshot.js +3 -3
  83. package/dist/tools/browser/screenshot.js.map +1 -1
  84. package/dist/tools/browser/scroll.d.ts +17 -0
  85. package/dist/tools/browser/scroll.d.ts.map +1 -0
  86. package/dist/tools/browser/scroll.js +30 -0
  87. package/dist/tools/browser/scroll.js.map +1 -0
  88. package/dist/tools/extraction/extract-css.js +7 -7
  89. package/dist/tools/extraction/extract-css.js.map +1 -1
  90. package/dist/tools/extraction/extract.js +4 -4
  91. package/dist/tools/extraction/extract.js.map +1 -1
  92. package/dist/tools/interaction/click.d.ts +1 -2
  93. package/dist/tools/interaction/click.d.ts.map +1 -1
  94. package/dist/tools/interaction/click.js +9 -15
  95. package/dist/tools/interaction/click.js.map +1 -1
  96. package/dist/tools/interaction/drag.js +4 -4
  97. package/dist/tools/interaction/drag.js.map +1 -1
  98. package/dist/tools/interaction/file-upload.d.ts.map +1 -1
  99. package/dist/tools/interaction/file-upload.js +11 -5
  100. package/dist/tools/interaction/file-upload.js.map +1 -1
  101. package/dist/tools/interaction/fill.d.ts.map +1 -1
  102. package/dist/tools/interaction/fill.js +5 -7
  103. package/dist/tools/interaction/fill.js.map +1 -1
  104. package/dist/tools/interaction/hover.js +3 -3
  105. package/dist/tools/interaction/hover.js.map +1 -1
  106. package/dist/tools/interaction/press-key.js +3 -3
  107. package/dist/tools/interaction/press-key.js.map +1 -1
  108. package/dist/tools/interaction/select.js +4 -4
  109. package/dist/tools/interaction/select.js.map +1 -1
  110. package/dist/tools/interaction/type.d.ts +1 -1
  111. package/dist/tools/interaction/type.js +4 -4
  112. package/dist/tools/interaction/type.js.map +1 -1
  113. package/dist/tools/navigation/back.js +2 -2
  114. package/dist/tools/navigation/back.js.map +1 -1
  115. package/dist/tools/navigation/forward.js +2 -2
  116. package/dist/tools/navigation/forward.js.map +1 -1
  117. package/dist/tools/navigation/navigate.js +2 -2
  118. package/dist/tools/navigation/navigate.js.map +1 -1
  119. package/dist/tools/navigation/refresh.js +2 -2
  120. package/dist/tools/navigation/refresh.js.map +1 -1
  121. package/dist/tools/navigation/wait-for.js +2 -2
  122. package/dist/tools/navigation/wait-for.js.map +1 -1
  123. package/dist/tools/network/console.js +2 -2
  124. package/dist/tools/network/console.js.map +1 -1
  125. package/dist/tools/network/dialog.js +2 -2
  126. package/dist/tools/network/dialog.js.map +1 -1
  127. package/dist/tools/network/network-clear.js +2 -2
  128. package/dist/tools/network/network-clear.js.map +1 -1
  129. package/dist/tools/network/network-entries.d.ts +3 -0
  130. package/dist/tools/network/network-entries.d.ts.map +1 -1
  131. package/dist/tools/network/network-entries.js +11 -3
  132. package/dist/tools/network/network-entries.js.map +1 -1
  133. package/dist/tools/network/network-export.d.ts +2 -2
  134. package/dist/tools/network/network-export.js +2 -2
  135. package/dist/tools/network/network-export.js.map +1 -1
  136. package/dist/tools/network/network-requests.js +2 -2
  137. package/dist/tools/network/network-requests.js.map +1 -1
  138. package/dist/tools/network/network-response.d.ts +3 -0
  139. package/dist/tools/network/network-response.d.ts.map +1 -1
  140. package/dist/tools/network/network-response.js +9 -4
  141. package/dist/tools/network/network-response.js.map +1 -1
  142. package/dist/tools/network/network-save.js +2 -2
  143. package/dist/tools/network/network-save.js.map +1 -1
  144. package/dist/tools/network/wait-nav.js +2 -2
  145. package/dist/tools/network/wait-nav.js.map +1 -1
  146. package/dist/tools/network/websocket-frames.js +2 -2
  147. package/dist/tools/network/websocket-frames.js.map +1 -1
  148. package/dist/tools/re/api-discover.d.ts +3 -3
  149. package/dist/tools/re/api-discover.d.ts.map +1 -1
  150. package/dist/tools/re/api-discover.js +32 -11
  151. package/dist/tools/re/api-discover.js.map +1 -1
  152. package/dist/tools/re/auth-analyze.d.ts +3 -3
  153. package/dist/tools/re/auth-analyze.d.ts.map +1 -1
  154. package/dist/tools/re/auth-analyze.js +43 -6
  155. package/dist/tools/re/auth-analyze.js.map +1 -1
  156. package/dist/tools/re/js-beautify.js +3 -3
  157. package/dist/tools/re/js-beautify.js.map +1 -1
  158. package/dist/tools/re/js-deobfuscate.js +3 -3
  159. package/dist/tools/re/js-deobfuscate.js.map +1 -1
  160. package/dist/tools/session/close.js +2 -2
  161. package/dist/tools/session/close.js.map +1 -1
  162. package/dist/tools/session/list.js +2 -2
  163. package/dist/tools/session/list.js.map +1 -1
  164. package/dist/tools/session/open.js +2 -2
  165. package/dist/tools/session/open.js.map +1 -1
  166. package/dist/tools/stealth/fingerprint.d.ts +13 -0
  167. package/dist/tools/stealth/fingerprint.d.ts.map +1 -1
  168. package/dist/tools/stealth/fingerprint.js +16 -3
  169. package/dist/tools/stealth/fingerprint.js.map +1 -1
  170. package/dist/tools/stealth/human-behavior.js +2 -2
  171. package/dist/tools/stealth/human-behavior.js.map +1 -1
  172. package/package.json +1 -2
package/README.md CHANGED
@@ -1,190 +1,367 @@
1
- # @natchs/browser-mcp
2
-
3
- **Browser automation MCP server** — reverse engineering, web scraping ve data extraction için tasarlanmış, AI ajanların tarayıcıyı tam kontrol etmesini sağlayan bir Model Context Protocol sunucusu.
4
-
5
- ---
6
-
7
- ## Quick Start
8
-
9
- ```bash
10
- # 1. Install
11
- npm install @natchs/browser-mcp
12
-
13
- # 2. Run (Chromium browser otomatik kurulur, ilk çalıştırmada ~30sn)
14
- npx @natchs/browser-mcp
15
- ```
16
-
17
- ### MCP Client Config
18
-
19
- Claude Desktop, Cursor, VS Code veya herhangi bir MCP istemcisine eklemek için:
20
-
21
- ```json
22
- {
23
- "mcpServers": {
24
- "browser-mcp": {
25
- "command": "npx",
26
- "args": ["@natchs/browser-mcp"]
27
- }
28
- }
29
- }
30
- ```
31
-
32
- Alternatif: projeyi klonlayıp yerel build ile de kullanabilirsiniz:
33
-
34
- ```bash
35
- git clone https://github.com/natchs/browser-mcp.git
36
- cd browser-mcp
37
- npm ci
38
- npm run build
39
- npx @natchs/browser-mcp
40
- ```
41
-
42
- ### Browser Profili: 3 Mod
43
-
44
- Ajanın hangi tarayıcıyı kullanacağını `BROWSER_MODE` ortam değişkeni belirler:
45
-
46
- | Mod | Açıklama | Ne Zaman Kullanılır? |
47
- |-----|----------|---------------------|
48
- | `fresh` (default) | Playwright'ın kendi Chromium'u. Her seferinde sıfır profil, çerez/ext/login yok | Temiz ortam, iz bırakmamak |
49
- | `persistent` | **Senin Chrome profilin.** Gerçek çerezler, geçmiş, uzantılar, oturum açmış hesaplar — hepsi ajana kullanıma hazır | Ajanın sitelere "sen" olarak girmesi gereken işlemler |
50
- | `connect` | Halihazırda açık Chrome'una CDP ile bağlanır | Chrome'u elle kontrol ederken ajanın eşlik etmesi |
51
-
52
- **Örnek — persistent (otomatik profil tespiti):**
53
-
54
- ```bash
55
- BROWSER_MODE=persistent npx @natchs/browser-mcp
56
- ```
57
-
58
- v2.3.0 ile Chrome profili otomatik tespit edilir. Hiçbir yol belirtmeniz gerekmez. Windows/macOS/Linux hepsinde çalışır. Manuel yol belirtmek için:
59
-
60
- ```bash
61
- BROWSER_MODE=persistent BROWSER_USER_DATA_DIR=C:\Users\...\User Data\Default npx @natchs/browser-mcp
62
- ```
63
-
64
- **Örnek — connect (mevcut Chrome'a bağlan):**
65
-
66
- ```bash
67
- # Önce Chrome'u debug port ile aç:
68
- "C:\Program Files\Google\Chrome\Application\chrome.exe" --remote-debugging-port=9222
69
-
70
- # Sonra ajanı bağla:
71
- BROWSER_MODE=connect npx @natchs/browser-mcp
72
- ```
73
-
74
- **MCP Client Config ile kullanımher mod için ayrı profil:**
75
-
76
- ```json
77
- {
78
- "mcpServers": {
79
- "browser-mcp-persistent": {
80
- "command": "npx",
81
- "args": ["@natchs/browser-mcp"],
82
- "env": {
83
- "BROWSER_MODE": "persistent"
84
- }
85
- },
86
- "browser-mcp-fresh": {
87
- "command": "npx",
88
- "args": ["@natchs/browser-mcp"],
89
- "env": {
90
- "BROWSER_MODE": "fresh"
91
- }
92
- }
93
- }
94
- }
95
- ```
96
-
97
- ---
98
-
99
- ## Detaylı Özellikler
100
-
101
- ### Mevcut Yetenekler
102
-
103
- | Kategori | Tool Sayısı | Neler Yapabilir? |
104
- |----------|------------|-------------------|
105
- | **Navigation** | 5 | Sayfa açma, geri/ileri gitme, refresh, element/url bekleme |
106
- | **Interaction** | 8 | Tıklama, form doldurma, select kutusu, hover, drag-drop, klavye, dosya yükleme |
107
- | **Extraction** | 7 | HTML, Markdown, plain text, CSS selector, tablo, Schema.org, Open Graph |
108
- | **Network** | 10 | İstek/cevap takibi, HAR/JSON/CSV export, WebSocket frame yakalama, body kaydetme, console log |
109
- | **Browser Control** | 8 | Screenshot, PDF, çerez yönetimi, JavaScript çalıştırma, dosya indirme |
110
- | **Session** | 3 | Çoklu session açma/kapama/listeleme, otomatik TTL cleanup |
111
- | **Admin** | 3 | Server durumu, cache istatistikleri, cache temizleme |
112
- | **RE Tools** | 4 | JavaScript beautify/deobfuscate, API endpoint discovery, auth analizi |
113
- | **Stealth** | 2 | Fingerprint değiştirme, human behavior simülasyonu |
114
-
115
- **Toplam: 40+ tool, 9 kategori, production-grade mimari**
116
-
117
- ### Ne Yapabilir?
118
-
119
- - **Reverse Engineering**: JS deobfuscation, API auth analizi, network isteklerini HAR formatında export
120
- - **Web Scraping**: Cloudflare koruması olmayan sitelerden HTML/Markdown/text çekme, tablo ve Schema.org yapılandırılmış veri extraction
121
- - **Network Monitoring**: HTTP/HTTPS isteklerini gerçek zamanlı yakalama, WebSocket frame'lerini izleme, binary body'leri diske kaydetme
122
- - **Form Automation**: Login formları, search, multi-step form doldurma, dosya upload
123
- - **Session Yönetimi**: Her biri izole, aynı anda birden çok browser session'ı yönetme, otomatik TTL ile cleanup
124
- - **Güvenlik**: SSRF koruması (internal IP bloklama, DNS rebind engelleme, redirect bypass koruması), path traversal engelleme, MIME tabanlı extension blocklist, cookie leak koruması
125
- - **Data Export**: network capture'ları HAR/JSON/CSV export, body save, WS frame save (.jsonl)
126
- - **Observability**: Structured JSON logging, tool metrikleri (call count, süre, hata), LRU cache + TTL
127
- - **Rate Limiting**: Token bucket, global + per-tool, yapılandırılabilir RPM
128
-
129
- ### Browser Profil Yönetimi (v2.3.0)
130
-
131
- Ajan, 3 farklı browser modundan biriyle çalışır:
132
-
133
- - **`fresh` (default):** Playwright'ın kendi Chromium'unu kullanır, her seferinde sıfır profil. Çerez, geçmiş, uzantı — hiçbiri taşınmaz.
134
- - **`persistent`:** Gerçek Chrome profilinizi kullanır. Oturum açtığınız tüm sitelere (Gmail, GitHub, ChatGPT, kurumsal VPN) ajan da "sizmiş gibi" erişir. v2.3.0 ile profil otomatik tespit edilir — `BROWSER_MODE=persistent` yazmanız yeterli.
135
- - **`connect`:** Halihazırda `--remote-debugging-port` ile açılmış Chrome'unuza bağlanır. Mevcut sekmeleri ve oturumları ajanla paylaşırsınız.
136
-
137
- ### Ne Yapamaz? (Mevcut Sınırlamalar)
138
-
139
- - **Cloudflare/anti-bot korumalı siteler**: Challenge sayfalarını geçemez, manuel çözüm gerekir
140
- - **Captcha çözümü**: Dahili captcha çözücü yoktur (üçüncü parti servislerle entegre edilebilir)
141
- - **Görsel tanıma**: Screenshot alabilir ama içeriği yorumlayamaz
142
- - **Native dosya indirme**: `browser_download` URL bazlıdır, Playwright native download event'ini kapsamaz
143
- - **Canvas/WebGL fingerprinting**: Temel fingerprint değişir ama gelişmiş anti-bot sistemlerini geçemeyebilir
144
- - **Mobil browser simülasyonu**: Sadece Chromium desktop, mobile viewport taklidi yapabilir
145
-
146
- ### Güvenlik Özellikleri
147
-
148
- - `redirect: 'manual'` tüm URL fetch çağrılarında SSRF redirect bypass koruması
149
- - `validateUrlAsync` DNS lookup DNS rebind saldırılarına karşı
150
- - `DANGEROUS_EXTENSIONS` blocklist (.exe, .bat, .sh vb) güvenli `.bin` fallback
151
- - Pseudo-FS path blocking (`/proc/`, `/sys/`, `/etc/` vb)
152
- - Cookie header filtresi Stage 3 HTTP re-fetch'te cross-origin credential sızıntısı önlenir
153
- - `downloadEnabled` varsayılan **false** kullanıcı açıkça enable etmeden download çalışmaz
154
- - Input sanitizasyonu (null byte, path traversal, fileName injection)
155
-
156
- ### MCP Client Uyumluluğu
157
-
158
- Claude Desktop, Cursor, VS Code (Cline, Roo Code), Continue.dev, özel MCP istemcileri protocol uyumlu tüm platformlar.
159
-
160
- ---
161
-
162
- ## Daha Fazlası Yolda
163
-
164
- Bu proje aktif geliştirme aşamasındadır. Kısa süre içinde:
165
-
166
- - **Yeni tool'lar**: PDF extraction, screenshot annotation, form detection, cookie manager, session snapshot/restore
167
- - **Cloudflare bypass**: Playwright Stealth entegrasyonu, rotatable proxy desteği
168
- - **Batch scraping**: Çoklu sayfa scraping pipeline, queue sistemi
169
- - **Performance**: Ring buffer optimizasyonu, streaming response, lazy evaluation
170
- - **Developer Experience**: Interaktif CLI, playground UI, type-safe client SDK
171
-
172
- ---
173
-
174
- ## Geliştirme
175
-
176
- ```bash
177
- # Test
178
- npm test
179
- npm run test:coverage
180
-
181
- # Type check (tsc --noEmit)
182
- npm run lint
183
-
184
- # Build
185
- npm run build
186
- ```
187
-
188
- ## Lisans
189
-
190
- MIT
1
+ # @natchs/browser-mcp
2
+
3
+ [![npm version](https://img.shields.io/npm/v/%40natchs%2Fbrowser-mcp?label=npm&logo=npm)](https://www.npmjs.com/package/@natchs/browser-mcp)
4
+ [![License](https://img.shields.io/npm/l/%40natchs%2Fbrowser-mcp?color=blue&label=license)](LICENSE)
5
+ [![Node Version](https://img.shields.io/node/v/%40natchs%2Fbrowser-mcp?logo=node.js)](package.json)
6
+
7
+ ---
8
+
9
+ # Your AI Agent's Browser Superpowers — Reverse Engineering, Network Interception & Full Browser Control
10
+
11
+ **`@natchs/browser-mcp`** is a Model Context Protocol server that gives AI agents **complete browser control** — navigate, click, scrape, intercept network traffic, export HAR files, capture WebSocket frames, deobfuscate JavaScript, and more. All through a single MCP interface.
12
+
13
+ Three browser modes (fresh / persistent / connect), production-grade security, 50+ tools, 9 categories. Built for reverse engineers, data extraction pipelines, and AI-powered automation.
14
+
15
+ ---
16
+
17
+ ## Features
18
+
19
+ - 🔍 **Reverse Engineering Toolkit** JS beautify/deobfuscate, API endpoint discovery, auth flow analysis
20
+ - 🌐 **Web Scraping** — HTML, Markdown, text, CSS selectors, tables, Schema.org JSON-LD, Open Graph
21
+ - 📡 **Network Intelligence** — Real-time HTTP/HTTPS interception, WebSocket frame capture, HAR/JSON/CSV export
22
+ - 🕶️ **Stealth Mode** — Fingerprint rotation, human behavior simulation
23
+ - 🔐 **Enterprise Security** — SSRF protection, DNS rebind prevention, path traversal guards, cookie leak prevention
24
+ - 🧩 **3 Browser Profiles** — Fresh (isolated), Persistent (your Chrome profile, auto-detected), Connect (existing browser)
25
+ - 📦 **50+ Tools** — Navigation, interaction, extraction, network, browser control, sessions, admin, RE, stealth
26
+ - ⚡ **Production Ready** — Rate limiting, LRU cache, structured logging, metrics, plugin system, configurable timeouts
27
+
28
+ ---
29
+
30
+ ## Quick Start
31
+
32
+ ```bash
33
+ # Install
34
+ npm install @natchs/browser-mcp
35
+
36
+ # Run (Chromium installs automatically ~30s on first run)
37
+ npx @natchs/browser-mcp
38
+ ```
39
+
40
+ ### MCP Client Config
41
+
42
+ Add to Claude Desktop, Cursor, VS Code (Cline, Roo Code), Continue.dev, or any MCP-compatible client:
43
+
44
+ ```json
45
+ {
46
+ "mcpServers": {
47
+ "browser-mcp": {
48
+ "command": "npx",
49
+ "args": ["@natchs/browser-mcp"]
50
+ }
51
+ }
52
+ }
53
+ ```
54
+
55
+ ### Local Build
56
+
57
+ ```bash
58
+ git clone https://github.com/natchs/browser-mcp.git
59
+ cd browser-mcp
60
+ npm ci
61
+ npm run build
62
+ npx @natchs/browser-mcp
63
+ ```
64
+
65
+ ---
66
+
67
+ ## Browser Modes
68
+
69
+ The `BROWSER_MODE` environment variable controls which browser profile the agent uses:
70
+
71
+ | Mode | Description | Best For |
72
+ |------|-------------|----------|
73
+ | `fresh` (default) | Playwright's own Chromium. Fresh profile every time — no cookies, history, or extensions carried over | Clean room analysis, leave-no-trace operations |
74
+ | `persistent` | **Your real Chrome profile.** Auto-detected since v2.3.0. All cookies, sessions, extensions, and logged-in accounts available to the agent | When the agent needs to act "as you" Gmail, GitHub, ChatGPT, corporate portals |
75
+ | `connect` | Attaches to your already-running Chrome via CDP debug port | Hybrid workflows — manually drive Chrome while the agent assists |
76
+
77
+ ### Persistent (auto-detect)
78
+
79
+ ```bash
80
+ BROWSER_MODE=persistent npx @natchs/browser-mcp
81
+ ```
82
+
83
+ Since v2.3.0 the Chrome profile is auto-detected on Windows/macOS/Linux. No path needed. To specify a manual path:
84
+
85
+ ```bash
86
+ BROWSER_MODE=persistent BROWSER_USER_DATA_DIR=C:\Users\...\User Data\Default npx @natchs/browser-mcp
87
+ ```
88
+
89
+ ### Connect (attach to existing Chrome)
90
+
91
+ ```bash
92
+ # Start Chrome with debug port first:
93
+ "C:\Program Files\Google\Chrome\Application\chrome.exe" --remote-debugging-port=9222
94
+
95
+ # Then launch the agent:
96
+ BROWSER_MODE=connect npx @natchs/browser-mcp
97
+ ```
98
+
99
+ ### Per-Mode Client Profiles
100
+
101
+ ```json
102
+ {
103
+ "mcpServers": {
104
+ "browser-mcp-persistent": {
105
+ "command": "npx",
106
+ "args": ["@natchs/browser-mcp"],
107
+ "env": { "BROWSER_MODE": "persistent" }
108
+ },
109
+ "browser-mcp-fresh": {
110
+ "command": "npx",
111
+ "args": ["@natchs/browser-mcp"],
112
+ "env": { "BROWSER_MODE": "fresh" }
113
+ }
114
+ }
115
+ }
116
+ ```
117
+
118
+ ---
119
+
120
+ ## Environment Variables
121
+
122
+ All configuration is managed through environment variables.
123
+
124
+ ### Browser
125
+
126
+ | Variable | Default | Description | Required |
127
+ |----------|---------|-------------|----------|
128
+ | `BROWSER_MODE` | `fresh` | Browser mode: `fresh`, `persistent`, `connect` | No |
129
+ | `BROWSER_HEADLESS` | `true` | Run in headless mode (`true`/`false`/`1`/`0`/`yes`/`no`) | No |
130
+ | `BROWSER_USER_DATA_DIR` | — | Chrome user data directory (absolute path) | No |
131
+ | `BROWSER_CHANNEL` | `""` | Browser channel (`chrome`, `msedge`, `chromium`, etc.) | No |
132
+ | `BROWSER_DEBUG_PORT` | `9222` | CDP debug port number | No |
133
+ | `BROWSER_AUTO_DETECT_PROFILE` | `true` | Auto-detect Chrome profile location | No |
134
+ | `BROWSER_VIEWPORT_WIDTH` | `1280` | Viewport width (px) | No |
135
+ | `BROWSER_VIEWPORT_HEIGHT` | `720` | Viewport height (px) | No |
136
+ | `BROWSER_USER_AGENT` | — | Custom User-Agent string | No |
137
+ | `BROWSER_LOCALE` | — | Browser locale (e.g. `en-US`) | No |
138
+ | `BROWSER_TIMEOUT` | `30000` | Browser operation timeout (ms) | No |
139
+ | `BROWSER_AUTO_INSTALL` | `true` | Auto-install Chromium (`false` to disable) | No |
140
+
141
+ ### Network & Download
142
+
143
+ | Variable | Default | Description | Required |
144
+ |----------|---------|-------------|----------|
145
+ | `NETWORK_HAR_ENABLED` | `1` | Enable HAR capture (`0` to disable) | No |
146
+ | `NETWORK_MAX_ENTRIES` | `5000` | Max network entries stored | No |
147
+ | `NETWORK_MAX_RESPONSE_BODY_SIZE` | `262144` | Max response body size (bytes) | No |
148
+ | `NETWORK_STORE_RESPONSE_BODIES` | `false` | Keep response bodies in memory | No |
149
+ | `NETWORK_EXCLUDE_BODY_TYPES` | `["image","media","font","stylesheet"]` | Body types excluded from storage (JSON array) | No |
150
+ | `NETWORK_EXPORT_DIR` | `./network-logs` | Network log export directory | No |
151
+ | `NETWORK_CAPTURE_FAILED` | `true` | Capture failed requests too | No |
152
+ | `NETWORK_CAPTURE_WS` | `true` | Capture WebSocket frames | No |
153
+ | `NETWORK_WS_MAX_FRAMES` | `1000` | Max WebSocket frames stored | No |
154
+ | `NETWORK_WS_MAX_FRAME_SIZE` | `65536` | Max WebSocket frame payload (bytes) | No |
155
+ | `NETWORK_MAX_MEMORY_MB` | `256` | Max memory for network capture (MB) | No |
156
+ | `NETWORK_CAPTURE_REQUEST_BODY` | `false` | Capture request bodies too | No |
157
+ | `NETWORK_DOWNLOAD_DIR` | `./downloads` | Download directory | No |
158
+ | `NETWORK_MAX_DOWNLOAD_SIZE` | `104857600` | Max download size (bytes, default 100MB) | No |
159
+ | `NETWORK_DOWNLOAD_ENABLED` | `false` | Enable file downloads (`browser_download` tool) | No |
160
+ | `NETWORK_SAVE_ENABLED` | `false` | Enable network capture save (`network_save` tool) | No |
161
+
162
+ ### Rate Limiting
163
+
164
+ | Variable | Default | Description | Required |
165
+ |----------|---------|-------------|----------|
166
+ | `RATE_LIMIT_ENABLED` | `true` | Enable rate limiting | No |
167
+ | `RATE_LIMIT_GLOBAL_RPM` | `120` | Global requests per minute | No |
168
+ | `RATE_LIMIT_PER_TOOL_RPM` | `30` | Per-tool requests per minute | No |
169
+ | `RATE_LIMIT_BURST_SIZE` | `10` | Max burst size | No |
170
+
171
+ ### Cache
172
+
173
+ | Variable | Default | Description | Required |
174
+ |----------|---------|-------------|----------|
175
+ | `CACHE_MAX_ENTRIES` | `100` | Max cache entries | No |
176
+ | `CACHE_TTL_SECONDS` | `300` | Cache TTL (seconds) | No |
177
+
178
+ ### Security
179
+
180
+ | Variable | Default | Description | Required |
181
+ |----------|---------|-------------|----------|
182
+ | `SECURITY_API_KEY` | `""` | API key for authentication (empty = auth disabled) | No |
183
+ | `SECURITY_ALLOWED_DIRS` | `[]` | Allowed directories for file access (JSON array) | No |
184
+ | `SECURITY_MAX_MEMORY_MB` | `512` | Max memory usage (MB) | No |
185
+ | `SECURITY_DEFAULT_TIMEOUT` | `30000` | Default operation timeout (ms) | No |
186
+ | `SECURITY_MAX_TIMEOUT` | `120000` | Max timeout (ms) | No |
187
+ | `SECURITY_MAX_SESSIONS` | `10` | Max concurrent browser sessions | No |
188
+
189
+ ### Config
190
+
191
+ | Variable | Default | Description | Required |
192
+ |----------|---------|-------------|----------|
193
+ | `BROWSER_MCP_CONFIG` | — | Config file path (JSON) | No |
194
+
195
+ ---
196
+
197
+ ## All Tools
198
+
199
+ ### Navigation (5)
200
+
201
+ | Tool | Description |
202
+ |------|-------------|
203
+ | `browser_navigate` | Navigate to a URL |
204
+ | `browser_go_back` | Go back in history |
205
+ | `browser_go_forward` | Go forward in history |
206
+ | `browser_refresh` | Refresh the current page |
207
+ | `browser_wait_for` | Wait for a specified timeout |
208
+
209
+ ### Interaction (8)
210
+
211
+ | Tool | Description |
212
+ |------|-------------|
213
+ | `browser_click` | Click an element by CSS selector |
214
+ | `browser_fill` | Fill text into an input field |
215
+ | `browser_select` | Select option(s) in a dropdown |
216
+ | `browser_hover` | Hover over an element |
217
+ | `browser_drag` | Drag and drop an element |
218
+ | `browser_type` | Type text character by character |
219
+ | `browser_press_key` | Press a keyboard key |
220
+ | `browser_file_upload` | Upload files via file input |
221
+
222
+ ### Extraction (7)
223
+
224
+ | Tool | Description |
225
+ |------|-------------|
226
+ | `browser_extract_html` | Extract full page HTML |
227
+ | `browser_extract_markdown` | Extract page as approximate markdown |
228
+ | `browser_extract_text` | Extract visible text |
229
+ | `browser_extract_with_css` | Extract data matching a CSS selector |
230
+ | `browser_extract_table` | Extract tables as structured JSON |
231
+ | `browser_extract_schema_org` | Extract Schema.org JSON-LD data |
232
+ | `browser_extract_open_graph` | Extract Open Graph meta tags |
233
+
234
+ ### Network (10)
235
+
236
+ | Tool | Description |
237
+ |------|-------------|
238
+ | `browser_network_requests` | List network requests made by the page |
239
+ | `browser_network_response` | Get full response details for a request |
240
+ | `browser_get_console` | Get console messages from the page |
241
+ | `browser_handle_dialog` | Accept or dismiss a browser dialog |
242
+ | `browser_wait_for_navigation` | Wait for the page to navigate |
243
+ | `browser_get_network_entries` | List detailed network entries with timing/sizes/headers |
244
+ | `browser_network_export` | Export network log to HAR, JSON, or CSV |
245
+ | `browser_websocket_frames` | List captured WebSocket frames |
246
+ | `browser_network_clear` | Clear captured network data |
247
+ | `browser_network_save` | Save network response or WS frames to disk |
248
+
249
+ ### Browser Control (9)
250
+
251
+ | Tool | Description |
252
+ |------|-------------|
253
+ | `browser_screenshot` | Take a screenshot (page or element) |
254
+ | `browser_page_info` | Get page title, URL, viewport info |
255
+ | `browser_get_cookies` | Get all cookies |
256
+ | `browser_set_cookie` | Set a cookie |
257
+ | `browser_delete_cookie` | Delete a cookie by name |
258
+ | `browser_evaluate` | Execute JavaScript in page context |
259
+ | `browser_pdf` | Generate a PDF of the current page |
260
+ | `browser_download` | Download a URL to disk |
261
+ | `browser_scroll` | Scroll the page or an element |
262
+
263
+ ### Session (3)
264
+
265
+ | Tool | Description |
266
+ |------|-------------|
267
+ | `browser_open_session` | Open a new browser session (tab) |
268
+ | `browser_close_session` | Close a session by ID |
269
+ | `browser_list_sessions` | List all active sessions |
270
+
271
+ ### Admin (3)
272
+
273
+ | Tool | Description |
274
+ |------|-------------|
275
+ | `browser_server_status` | Server status, version, session/cache stats |
276
+ | `browser_cache_stats` | Cache statistics (hits, misses, size) |
277
+ | `browser_clear_cache` | Clear the entire result cache |
278
+
279
+ ### Reverse Engineering (4)
280
+
281
+ | Tool | Description |
282
+ |------|-------------|
283
+ | `browser_js_beautify` | Beautify and format JavaScript code |
284
+ | `browser_js_deobfuscate` | Deobfuscate JS (hex, unicode, base64) |
285
+ | `browser_api_discover` | Discover API endpoints in JS source |
286
+ | `browser_auth_analyze` | Analyze network logs for auth flows |
287
+
288
+ ### Stealth (2)
289
+
290
+ | Tool | Description |
291
+ |------|-------------|
292
+ | `browser_fingerprint` | Generate randomized browser fingerprint |
293
+ | `browser_human_behavior` | Generate human-like typing/mouse/scroll profiles |
294
+
295
+ **Total: 51 tools across 9 categories, production-grade architecture**
296
+
297
+ ---
298
+
299
+ ## Use Cases
300
+
301
+ - **Reverse Engineering** — Deobfuscate JavaScript, uncover API endpoints, map auth flows, export HAR for offline analysis
302
+ - **Web Scraping** — Extract HTML, Markdown, structured data (Schema.org, Open Graph, tables) from any browser-accessible page
303
+ - **Network Monitoring** — Intercept HTTP/HTTPS traffic in real time, inspect WebSocket frames, save binary bodies to disk
304
+ - **Form Automation** — Login flows, multi-step forms, file uploads, dropdown selections — all driven by AI
305
+ - **Session Management** — Isolated concurrent browser sessions with automatic TTL cleanup
306
+ - **Data Export** — Network captures in HAR/JSON/CSV, body saves, WebSocket frame logs (.jsonl)
307
+
308
+ ---
309
+
310
+ ## Security
311
+
312
+ - `redirect: 'manual'` on all URL fetches — SSRF redirect bypass protection
313
+ - `validateUrlAsync` with DNS lookup — DNS rebind attack prevention
314
+ - `DANGEROUS_EXTENSIONS` blocklist (`.exe`, `.bat`, `.sh` etc.) → safe `.bin` fallback
315
+ - Pseudo-FS path blocking (`/proc/`, `/sys/`, `/etc/` etc.) — path traversal prevention
316
+ - Cookie header filter — cross-origin credential leakage prevention in HTTP re-fetch
317
+ - `NETWORK_DOWNLOAD_ENABLED` and `NETWORK_SAVE_ENABLED` default to **false** — must be explicitly enabled
318
+ - Input sanitization — null byte, path traversal, fileName injection guards
319
+ - Rate limiting — token bucket algorithm, global + per-tool, configurable RPM
320
+ - LRU cache with TTL — bounded memory usage
321
+
322
+ ---
323
+
324
+ ## Development
325
+
326
+ ```bash
327
+ # Test
328
+ npm test
329
+ npm run test:coverage
330
+
331
+ # Type check (tsc --noEmit)
332
+ npm run lint
333
+
334
+ # Build
335
+ npm run build
336
+ ```
337
+
338
+ ---
339
+
340
+ ## Roadmap
341
+
342
+ - **New tools**: PDF extraction, screenshot annotation, form detection, cookie manager, session snapshot/restore
343
+ - **Cloudflare bypass**: Playwright Stealth integration, rotatable proxy support
344
+ - **Batch scraping**: Multi-page scraping pipeline, queue system
345
+ - **Performance**: Ring buffer optimization, streaming responses, lazy evaluation
346
+ - **Developer Experience**: Interactive CLI, playground UI, type-safe client SDK
347
+
348
+ ---
349
+
350
+ ## 🇹🇷 Türkçe
351
+
352
+ **`@natchs/browser-mcp`** — reverse engineering, web scraping, network interception ve HAR export için tasarlanmış, AI ajanların tarayıcıyı tam kontrol etmesini sağlayan bir Model Context Protocol sunucusu.
353
+
354
+ ```bash
355
+ npm install @natchs/browser-mcp
356
+ npx @natchs/browser-mcp
357
+ ```
358
+
359
+ Üç browser modu: `fresh` (izole), `persistent` (gerçek Chrome profilin, otomatik tespit), `connect` (mevcut Chrome'a bağlan). 50+ araç, 9 kategori, kurumsal güvenlik.
360
+
361
+ Detaylı bilgi için yukarıdaki İngilizce dokümantasyonu inceleyin.
362
+
363
+ ---
364
+
365
+ ## License
366
+
367
+ MIT
@@ -0,0 +1,3 @@
1
+ export type AuditEvent = 'AUTH_FAILURE' | 'SANDBOX_VIOLATION' | 'FILE_ACCESS' | 'DNS_REBIND' | 'INTERNAL_IP' | 'PATH_TRAVERSAL';
2
+ export declare function auditLog(event: AuditEvent, details: Record<string, unknown>): void;
3
+ //# sourceMappingURL=audit-logger.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"audit-logger.d.ts","sourceRoot":"","sources":["../../src/core/audit-logger.ts"],"names":[],"mappings":"AAEA,MAAM,MAAM,UAAU,GAAG,cAAc,GAAG,mBAAmB,GAAG,aAAa,GAAG,YAAY,GAAG,aAAa,GAAG,gBAAgB,CAAC;AAEhI,wBAAgB,QAAQ,CAAC,KAAK,EAAE,UAAU,EAAE,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAElF"}
@@ -0,0 +1,5 @@
1
+ import { logger } from './logger.js';
2
+ export function auditLog(event, details) {
3
+ logger.warn(`[AUDIT] ${event}`, details);
4
+ }
5
+ //# sourceMappingURL=audit-logger.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"audit-logger.js","sourceRoot":"","sources":["../../src/core/audit-logger.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAIrC,MAAM,UAAU,QAAQ,CAAC,KAAiB,EAAE,OAAgC;IAC1E,MAAM,CAAC,IAAI,CAAC,WAAW,KAAK,EAAE,EAAE,OAAO,CAAC,CAAC;AAC3C,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"auth.d.ts","sourceRoot":"","sources":["../../src/core/auth.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAEhD;;;GAGG;AACH,wBAAgB,oBAAoB,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG,UAAU,CAiBhE"}
1
+ {"version":3,"file":"auth.d.ts","sourceRoot":"","sources":["../../src/core/auth.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAIhD;;;GAGG;AACH,wBAAgB,oBAAoB,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG,UAAU,CA2ChE"}
package/dist/core/auth.js CHANGED
@@ -1,3 +1,5 @@
1
+ import * as crypto from 'node:crypto';
2
+ import { auditLog } from './audit-logger.js';
1
3
  /**
2
4
  * Creates an auth middleware that checks apiKey.
3
5
  * If apiKey is not set, the middleware passes through (no auth).
@@ -5,7 +7,33 @@
5
7
  export function createAuthMiddleware(apiKey) {
6
8
  return async (pc, next) => {
7
9
  if (apiKey) {
8
- if (!pc.args.api_key || pc.args.api_key !== apiKey) {
10
+ if (!pc.args.api_key) {
11
+ auditLog('AUTH_FAILURE', { reason: 'missing_key', tool: pc.toolName });
12
+ return {
13
+ ...pc,
14
+ response: {
15
+ content: [{
16
+ type: 'text',
17
+ text: JSON.stringify({ ok: false, error: { code: 'UNAUTHORIZED', message: 'Invalid or missing API key' } }),
18
+ }],
19
+ },
20
+ };
21
+ }
22
+ const providedKey = String(pc.args.api_key);
23
+ if (providedKey.length !== apiKey.length) {
24
+ auditLog('AUTH_FAILURE', { reason: 'length_mismatch', tool: pc.toolName });
25
+ return {
26
+ ...pc,
27
+ response: {
28
+ content: [{
29
+ type: 'text',
30
+ text: JSON.stringify({ ok: false, error: { code: 'UNAUTHORIZED', message: 'Invalid or missing API key' } }),
31
+ }],
32
+ },
33
+ };
34
+ }
35
+ if (!crypto.timingSafeEqual(Buffer.from(providedKey), Buffer.from(apiKey))) {
36
+ auditLog('AUTH_FAILURE', { reason: 'key_mismatch', tool: pc.toolName });
9
37
  return {
10
38
  ...pc,
11
39
  response: {
@@ -1 +1 @@
1
- {"version":3,"file":"auth.js","sourceRoot":"","sources":["../../src/core/auth.ts"],"names":[],"mappings":"AAEA;;;GAGG;AACH,MAAM,UAAU,oBAAoB,CAAC,MAAe;IAClD,OAAO,KAAK,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE;QACxB,IAAI,MAAM,EAAE,CAAC;YACX,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,OAAO,IAAI,EAAE,CAAC,IAAI,CAAC,OAAO,KAAK,MAAM,EAAE,CAAC;gBACnD,OAAO;oBACL,GAAG,EAAE;oBACL,QAAQ,EAAE;wBACR,OAAO,EAAE,CAAC;gCACR,IAAI,EAAE,MAAe;gCACrB,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,cAAc,EAAE,OAAO,EAAE,4BAA4B,EAAE,EAAE,CAAC;6BAC5G,CAAC;qBACH;iBACF,CAAC;YACJ,CAAC;QACH,CAAC;QACD,OAAO,IAAI,EAAE,CAAC;IAChB,CAAC,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"auth.js","sourceRoot":"","sources":["../../src/core/auth.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,MAAM,MAAM,aAAa,CAAC;AACtC,OAAO,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAE7C;;;GAGG;AACH,MAAM,UAAU,oBAAoB,CAAC,MAAe;IAClD,OAAO,KAAK,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE;QACxB,IAAI,MAAM,EAAE,CAAC;YACX,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC;gBACrB,QAAQ,CAAC,cAAc,EAAE,EAAE,MAAM,EAAE,aAAa,EAAE,IAAI,EAAE,EAAE,CAAC,QAAQ,EAAE,CAAC,CAAC;gBACvE,OAAO;oBACL,GAAG,EAAE;oBACL,QAAQ,EAAE;wBACR,OAAO,EAAE,CAAC;gCACR,IAAI,EAAE,MAAe;gCACrB,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,cAAc,EAAE,OAAO,EAAE,4BAA4B,EAAE,EAAE,CAAC;6BAC5G,CAAC;qBACH;iBACF,CAAC;YACJ,CAAC;YACD,MAAM,WAAW,GAAG,MAAM,CAAC,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;YAC5C,IAAI,WAAW,CAAC,MAAM,KAAK,MAAM,CAAC,MAAM,EAAE,CAAC;gBACzC,QAAQ,CAAC,cAAc,EAAE,EAAE,MAAM,EAAE,iBAAiB,EAAE,IAAI,EAAE,EAAE,CAAC,QAAQ,EAAE,CAAC,CAAC;gBAC3E,OAAO;oBACL,GAAG,EAAE;oBACL,QAAQ,EAAE;wBACR,OAAO,EAAE,CAAC;gCACR,IAAI,EAAE,MAAe;gCACrB,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,cAAc,EAAE,OAAO,EAAE,4BAA4B,EAAE,EAAE,CAAC;6BAC5G,CAAC;qBACH;iBACF,CAAC;YACJ,CAAC;YACD,IAAI,CAAC,MAAM,CAAC,eAAe,CAAC,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC;gBAC3E,QAAQ,CAAC,cAAc,EAAE,EAAE,MAAM,EAAE,cAAc,EAAE,IAAI,EAAE,EAAE,CAAC,QAAQ,EAAE,CAAC,CAAC;gBACxE,OAAO;oBACL,GAAG,EAAE;oBACL,QAAQ,EAAE;wBACR,OAAO,EAAE,CAAC;gCACR,IAAI,EAAE,MAAe;gCACrB,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,cAAc,EAAE,OAAO,EAAE,4BAA4B,EAAE,EAAE,CAAC;6BAC5G,CAAC;qBACH;iBACF,CAAC;YACJ,CAAC;QACH,CAAC;QACD,OAAO,IAAI,EAAE,CAAC;IAChB,CAAC,CAAC;AACJ,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"body-fetch.d.ts","sourceRoot":"","sources":["../../src/core/body-fetch.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AACtD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AACjD,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAIxC,MAAM,MAAM,eAAe,GAAG;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,OAAO,GAAG,KAAK,GAAG,MAAM,CAAC;IACjC,SAAS,EAAE,OAAO,CAAC;CACpB,CAAC;AAEF,qBAAa,gBAAgB;IACf,OAAO,CAAC,MAAM;gBAAN,MAAM,EAAE,aAAa;IAEnC,KAAK,CAAC,KAAK,EAAE,SAAS,EAAE,cAAc,CAAC,EAAE,MAAM,OAAO,CAAC;QAAE,IAAI,EAAE,MAAM,OAAO,CAAC,MAAM,CAAC,CAAA;KAAE,GAAG,IAAI,CAAC,GAAG,OAAO,CAAC,eAAe,GAAG;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,SAAS,CAAA;KAAE,CAAC;CA0DrK"}
1
+ {"version":3,"file":"body-fetch.d.ts","sourceRoot":"","sources":["../../src/core/body-fetch.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AACtD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AACjD,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAMxC,MAAM,MAAM,eAAe,GAAG;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,OAAO,GAAG,KAAK,GAAG,MAAM,CAAC;IACjC,SAAS,EAAE,OAAO,CAAC;CACpB,CAAC;AAEF,qBAAa,gBAAgB;IACf,OAAO,CAAC,MAAM;gBAAN,MAAM,EAAE,aAAa;IAEnC,KAAK,CAAC,KAAK,EAAE,SAAS,EAAE,cAAc,CAAC,EAAE,MAAM,OAAO,CAAC;QAAE,IAAI,EAAE,MAAM,OAAO,CAAC,MAAM,CAAC,CAAA;KAAE,GAAG,IAAI,CAAC,GAAG,OAAO,CAAC,eAAe,GAAG;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,SAAS,CAAA;KAAE,CAAC;CAgFrK"}