webpeel 0.7.0 → 0.7.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 +140 -500
- package/dist/cli-auth.d.ts +2 -0
- package/dist/cli-auth.d.ts.map +1 -1
- package/dist/cli-auth.js +16 -3
- package/dist/cli-auth.js.map +1 -1
- package/dist/cli.js +475 -77
- package/dist/cli.js.map +1 -1
- package/dist/core/actions.d.ts +19 -10
- package/dist/core/actions.d.ts.map +1 -1
- package/dist/core/actions.js +214 -43
- package/dist/core/actions.js.map +1 -1
- package/dist/core/agent.d.ts +60 -3
- package/dist/core/agent.d.ts.map +1 -1
- package/dist/core/agent.js +375 -86
- package/dist/core/agent.js.map +1 -1
- package/dist/core/answer.d.ts +43 -0
- package/dist/core/answer.d.ts.map +1 -0
- package/dist/core/answer.js +378 -0
- package/dist/core/answer.js.map +1 -0
- package/dist/core/cache.d.ts +14 -0
- package/dist/core/cache.d.ts.map +1 -0
- package/dist/core/cache.js +122 -0
- package/dist/core/cache.js.map +1 -0
- package/dist/core/dns-cache.d.ts +21 -0
- package/dist/core/dns-cache.d.ts.map +1 -0
- package/dist/core/dns-cache.js +184 -0
- package/dist/core/dns-cache.js.map +1 -0
- package/dist/core/documents.d.ts +24 -0
- package/dist/core/documents.d.ts.map +1 -0
- package/dist/core/documents.js +124 -0
- package/dist/core/documents.js.map +1 -0
- package/dist/core/extract-inline.d.ts +39 -0
- package/dist/core/extract-inline.d.ts.map +1 -0
- package/dist/core/extract-inline.js +214 -0
- package/dist/core/extract-inline.js.map +1 -0
- package/dist/core/fetcher.d.ts +33 -7
- package/dist/core/fetcher.d.ts.map +1 -1
- package/dist/core/fetcher.js +608 -41
- package/dist/core/fetcher.js.map +1 -1
- package/dist/core/jobs.d.ts +66 -0
- package/dist/core/jobs.d.ts.map +1 -0
- package/dist/core/jobs.js +513 -0
- package/dist/core/jobs.js.map +1 -0
- package/dist/core/markdown.d.ts.map +1 -1
- package/dist/core/markdown.js +141 -31
- package/dist/core/markdown.js.map +1 -1
- package/dist/core/pdf.d.ts.map +1 -1
- package/dist/core/pdf.js +3 -1
- package/dist/core/pdf.js.map +1 -1
- package/dist/core/screenshot.d.ts +33 -0
- package/dist/core/screenshot.d.ts.map +1 -0
- package/dist/core/screenshot.js +30 -0
- package/dist/core/screenshot.js.map +1 -0
- package/dist/core/search-provider.d.ts +46 -0
- package/dist/core/search-provider.d.ts.map +1 -0
- package/dist/core/search-provider.js +281 -0
- package/dist/core/search-provider.js.map +1 -0
- package/dist/core/strategies.d.ts +7 -10
- package/dist/core/strategies.d.ts.map +1 -1
- package/dist/core/strategies.js +370 -63
- package/dist/core/strategies.js.map +1 -1
- package/dist/index.d.ts +9 -3
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +61 -32
- package/dist/index.js.map +1 -1
- package/dist/mcp/server.js +335 -70
- package/dist/mcp/server.js.map +1 -1
- package/dist/types.d.ts +43 -1
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js.map +1 -1
- package/llms.txt +85 -47
- package/package.json +11 -5
package/dist/core/strategies.js
CHANGED
|
@@ -2,43 +2,174 @@
|
|
|
2
2
|
* Smart escalation strategy: try simple fetch first, escalate to browser if needed
|
|
3
3
|
*/
|
|
4
4
|
import { simpleFetch, browserFetch, retryFetch } from './fetcher.js';
|
|
5
|
+
import { getCachedWithSWR, setCached, markRevalidating } from './cache.js';
|
|
6
|
+
import { resolveAndCache } from './dns-cache.js';
|
|
5
7
|
import { BlockedError, NetworkError } from '../types.js';
|
|
6
|
-
|
|
7
|
-
*
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
const
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
const result = await retryFetch(() => simpleFetch(url, userAgent, timeoutMs, headers), 3);
|
|
25
|
-
return {
|
|
26
|
-
...result,
|
|
27
|
-
method: 'simple',
|
|
28
|
-
};
|
|
8
|
+
const DOMAIN_INTEL_MAX = 500;
|
|
9
|
+
const DOMAIN_INTEL_TTL_MS = 60 * 60 * 1000; // 1 hour
|
|
10
|
+
const DOMAIN_INTEL_EMA_ALPHA = 0.3;
|
|
11
|
+
const domainIntel = new Map();
|
|
12
|
+
const domainMethodCounts = new Map();
|
|
13
|
+
function getDomainKey(url) {
|
|
14
|
+
try {
|
|
15
|
+
return new URL(url).hostname.toLowerCase();
|
|
16
|
+
}
|
|
17
|
+
catch {
|
|
18
|
+
return '';
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
function pruneDomainIntel(now) {
|
|
22
|
+
for (const [key, intel] of domainIntel) {
|
|
23
|
+
if (now - intel.lastSeen > DOMAIN_INTEL_TTL_MS) {
|
|
24
|
+
domainIntel.delete(key);
|
|
25
|
+
domainMethodCounts.delete(key);
|
|
29
26
|
}
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
function recordDomainResult(url, method, latencyMs) {
|
|
30
|
+
const key = getDomainKey(url);
|
|
31
|
+
if (!key) {
|
|
32
|
+
return;
|
|
33
|
+
}
|
|
34
|
+
const now = Date.now();
|
|
35
|
+
pruneDomainIntel(now);
|
|
36
|
+
const existing = domainIntel.get(key);
|
|
37
|
+
const sanitizedLatency = Number.isFinite(latencyMs) && latencyMs > 0
|
|
38
|
+
? latencyMs
|
|
39
|
+
: (existing?.avgLatencyMs ?? 0);
|
|
40
|
+
const next = existing
|
|
41
|
+
? {
|
|
42
|
+
needsBrowser: existing.needsBrowser || method === 'browser' || method === 'stealth',
|
|
43
|
+
needsStealth: existing.needsStealth || method === 'stealth',
|
|
44
|
+
avgLatencyMs: existing.avgLatencyMs === 0
|
|
45
|
+
? sanitizedLatency
|
|
46
|
+
: (existing.avgLatencyMs * (1 - DOMAIN_INTEL_EMA_ALPHA)) + (sanitizedLatency * DOMAIN_INTEL_EMA_ALPHA),
|
|
47
|
+
lastSeen: now,
|
|
48
|
+
sampleCount: existing.sampleCount + 1,
|
|
49
|
+
}
|
|
50
|
+
: {
|
|
51
|
+
needsBrowser: method === 'browser' || method === 'stealth',
|
|
52
|
+
needsStealth: method === 'stealth',
|
|
53
|
+
avgLatencyMs: sanitizedLatency,
|
|
54
|
+
lastSeen: now,
|
|
55
|
+
sampleCount: 1,
|
|
56
|
+
};
|
|
57
|
+
const existingCounts = domainMethodCounts.get(key) ?? { simple: 0, browser: 0, stealth: 0 };
|
|
58
|
+
existingCounts[method] += 1;
|
|
59
|
+
domainIntel.delete(key);
|
|
60
|
+
domainIntel.set(key, next);
|
|
61
|
+
domainMethodCounts.set(key, existingCounts);
|
|
62
|
+
while (domainIntel.size > DOMAIN_INTEL_MAX) {
|
|
63
|
+
const oldestKey = domainIntel.keys().next().value;
|
|
64
|
+
if (!oldestKey) {
|
|
65
|
+
break;
|
|
66
|
+
}
|
|
67
|
+
domainIntel.delete(oldestKey);
|
|
68
|
+
domainMethodCounts.delete(oldestKey);
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
function getDomainRecommendation(url) {
|
|
72
|
+
const key = getDomainKey(url);
|
|
73
|
+
if (!key) {
|
|
74
|
+
return null;
|
|
75
|
+
}
|
|
76
|
+
const intel = domainIntel.get(key);
|
|
77
|
+
if (!intel) {
|
|
78
|
+
return null;
|
|
79
|
+
}
|
|
80
|
+
const now = Date.now();
|
|
81
|
+
if (now - intel.lastSeen > DOMAIN_INTEL_TTL_MS) {
|
|
82
|
+
domainIntel.delete(key);
|
|
83
|
+
domainMethodCounts.delete(key);
|
|
84
|
+
return null;
|
|
85
|
+
}
|
|
86
|
+
if (intel.sampleCount <= 2) {
|
|
87
|
+
return null;
|
|
88
|
+
}
|
|
89
|
+
const counts = domainMethodCounts.get(key);
|
|
90
|
+
if (!counts) {
|
|
91
|
+
return null;
|
|
92
|
+
}
|
|
93
|
+
// LRU touch
|
|
94
|
+
domainIntel.delete(key);
|
|
95
|
+
domainIntel.set(key, intel);
|
|
96
|
+
const allStealth = counts.stealth === intel.sampleCount;
|
|
97
|
+
if (allStealth && intel.needsStealth) {
|
|
98
|
+
return { mode: 'stealth' };
|
|
99
|
+
}
|
|
100
|
+
const allBrowser = counts.simple === 0 && (counts.browser + counts.stealth === intel.sampleCount);
|
|
101
|
+
if (allBrowser && intel.needsBrowser) {
|
|
102
|
+
return { mode: 'browser' };
|
|
103
|
+
}
|
|
104
|
+
return null;
|
|
105
|
+
}
|
|
106
|
+
export function clearDomainIntel() {
|
|
107
|
+
domainIntel.clear();
|
|
108
|
+
domainMethodCounts.clear();
|
|
109
|
+
}
|
|
110
|
+
function shouldForceBrowser(url) {
|
|
111
|
+
try {
|
|
112
|
+
const hostname = new URL(url).hostname.toLowerCase();
|
|
113
|
+
// Reddit often returns an HTML shell via simple fetch; browser rendering is needed for real content
|
|
114
|
+
if (hostname === 'reddit.com' || hostname.endsWith('.reddit.com')) {
|
|
115
|
+
return { mode: 'browser' };
|
|
116
|
+
}
|
|
117
|
+
// npmjs blocks simple fetch with 403 frequently
|
|
118
|
+
if (hostname === 'npmjs.com' ||
|
|
119
|
+
hostname === 'www.npmjs.com' ||
|
|
120
|
+
hostname.endsWith('.npmjs.com')) {
|
|
121
|
+
return { mode: 'browser' };
|
|
122
|
+
}
|
|
123
|
+
// StackOverflow commonly serves shell-like content to simple fetch clients
|
|
124
|
+
// Note: NOT forced — let the shell-page detector escalate naturally
|
|
125
|
+
// since SO needs extra wait time that the escalation path handles better
|
|
126
|
+
// These are known to aggressively block automation; go straight to stealth
|
|
127
|
+
if (hostname === 'glassdoor.com' || hostname.endsWith('.glassdoor.com')) {
|
|
128
|
+
return { mode: 'stealth' };
|
|
129
|
+
}
|
|
130
|
+
if (hostname === 'bloomberg.com' || hostname.endsWith('.bloomberg.com')) {
|
|
131
|
+
return { mode: 'stealth' };
|
|
39
132
|
}
|
|
133
|
+
// Indeed uses Cloudflare aggressively on job detail pages
|
|
134
|
+
if (hostname === 'indeed.com' || hostname.endsWith('.indeed.com')) {
|
|
135
|
+
return { mode: 'stealth' };
|
|
136
|
+
}
|
|
137
|
+
}
|
|
138
|
+
catch {
|
|
139
|
+
// Ignore URL parsing errors here; validation happens inside fetchers
|
|
140
|
+
}
|
|
141
|
+
return null;
|
|
142
|
+
}
|
|
143
|
+
function isAbortError(error) {
|
|
144
|
+
return error instanceof Error && error.name === 'AbortError';
|
|
145
|
+
}
|
|
146
|
+
function shouldEscalateSimpleError(error) {
|
|
147
|
+
if (error instanceof BlockedError) {
|
|
148
|
+
return true;
|
|
149
|
+
}
|
|
150
|
+
return error instanceof NetworkError && error.message.includes('TLS/SSL');
|
|
151
|
+
}
|
|
152
|
+
function looksLikeShellPage(result) {
|
|
153
|
+
const contentTypeLower = (result.contentType || '').toLowerCase();
|
|
154
|
+
if (!contentTypeLower.includes('html')) {
|
|
155
|
+
return false;
|
|
40
156
|
}
|
|
41
|
-
|
|
157
|
+
const textContent = result.html.replace(/<[^>]*>/g, '').trim();
|
|
158
|
+
return textContent.length < 500 && result.html.length > 1000;
|
|
159
|
+
}
|
|
160
|
+
function prefetchDns(url) {
|
|
161
|
+
try {
|
|
162
|
+
const hostname = new URL(url).hostname;
|
|
163
|
+
void resolveAndCache(hostname).catch(() => {
|
|
164
|
+
// Best-effort optimization only.
|
|
165
|
+
});
|
|
166
|
+
}
|
|
167
|
+
catch {
|
|
168
|
+
// Ignore invalid URL here; fetchers handle validation.
|
|
169
|
+
}
|
|
170
|
+
}
|
|
171
|
+
async function fetchWithBrowserStrategy(url, options) {
|
|
172
|
+
const { userAgent, waitMs, timeoutMs, screenshot, screenshotFullPage, headers, cookies, actions, keepPageOpen, effectiveStealth, signal, } = options;
|
|
42
173
|
try {
|
|
43
174
|
const result = await browserFetch(url, {
|
|
44
175
|
userAgent,
|
|
@@ -48,62 +179,238 @@ export async function smartFetch(url, options = {}) {
|
|
|
48
179
|
screenshotFullPage,
|
|
49
180
|
headers,
|
|
50
181
|
cookies,
|
|
51
|
-
stealth,
|
|
182
|
+
stealth: effectiveStealth,
|
|
52
183
|
actions,
|
|
53
184
|
keepPageOpen,
|
|
185
|
+
signal,
|
|
54
186
|
});
|
|
55
187
|
return {
|
|
56
188
|
...result,
|
|
57
|
-
method:
|
|
189
|
+
method: effectiveStealth ? 'stealth' : 'browser',
|
|
58
190
|
};
|
|
59
191
|
}
|
|
60
192
|
catch (error) {
|
|
193
|
+
if (isAbortError(error)) {
|
|
194
|
+
throw error;
|
|
195
|
+
}
|
|
61
196
|
// Strategy 3: If browser gets blocked, try stealth mode as fallback (unless already using stealth)
|
|
62
|
-
if (!
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
}
|
|
81
|
-
catch (stealthError) {
|
|
82
|
-
// If stealth also fails, throw the original error
|
|
83
|
-
throw stealthError;
|
|
84
|
-
}
|
|
197
|
+
if (!effectiveStealth && error instanceof BlockedError) {
|
|
198
|
+
const result = await browserFetch(url, {
|
|
199
|
+
userAgent,
|
|
200
|
+
waitMs,
|
|
201
|
+
timeoutMs,
|
|
202
|
+
screenshot,
|
|
203
|
+
screenshotFullPage,
|
|
204
|
+
headers,
|
|
205
|
+
cookies,
|
|
206
|
+
stealth: true,
|
|
207
|
+
actions,
|
|
208
|
+
keepPageOpen,
|
|
209
|
+
signal,
|
|
210
|
+
});
|
|
211
|
+
return {
|
|
212
|
+
...result,
|
|
213
|
+
method: 'stealth',
|
|
214
|
+
};
|
|
85
215
|
}
|
|
86
216
|
// If browser encounters Cloudflare, retry with extra wait time
|
|
87
|
-
if (error instanceof NetworkError &&
|
|
88
|
-
error.message.toLowerCase().includes('cloudflare')) {
|
|
217
|
+
if (error instanceof NetworkError && error.message.toLowerCase().includes('cloudflare')) {
|
|
89
218
|
const result = await browserFetch(url, {
|
|
90
219
|
userAgent,
|
|
91
|
-
waitMs: 5000,
|
|
220
|
+
waitMs: 5000,
|
|
92
221
|
timeoutMs,
|
|
93
222
|
screenshot,
|
|
94
223
|
screenshotFullPage,
|
|
95
224
|
headers,
|
|
96
225
|
cookies,
|
|
97
|
-
stealth,
|
|
226
|
+
stealth: effectiveStealth,
|
|
98
227
|
actions,
|
|
99
228
|
keepPageOpen,
|
|
229
|
+
signal,
|
|
100
230
|
});
|
|
101
231
|
return {
|
|
102
232
|
...result,
|
|
103
|
-
method:
|
|
233
|
+
method: effectiveStealth ? 'stealth' : 'browser',
|
|
104
234
|
};
|
|
105
235
|
}
|
|
106
236
|
throw error;
|
|
107
237
|
}
|
|
108
238
|
}
|
|
239
|
+
/**
|
|
240
|
+
* Smart fetch with automatic escalation
|
|
241
|
+
*/
|
|
242
|
+
export async function smartFetch(url, options = {}) {
|
|
243
|
+
const { forceBrowser = false, stealth = false, waitMs = 0, userAgent, timeoutMs = 30000, screenshot = false, screenshotFullPage = false, headers, cookies, actions, keepPageOpen = false, noCache = false, raceTimeoutMs = 2000, } = options;
|
|
244
|
+
const fetchStartMs = Date.now();
|
|
245
|
+
const recordSuccessfulMethod = (method) => {
|
|
246
|
+
if (method === 'cached') {
|
|
247
|
+
return;
|
|
248
|
+
}
|
|
249
|
+
recordDomainResult(url, method, Date.now() - fetchStartMs);
|
|
250
|
+
};
|
|
251
|
+
// Site-specific escalation overrides
|
|
252
|
+
// Hardcoded rules take priority (manually verified), domain intel is fallback
|
|
253
|
+
const forced = shouldForceBrowser(url);
|
|
254
|
+
const recommended = getDomainRecommendation(url);
|
|
255
|
+
const selectedRecommendation = forced ?? recommended;
|
|
256
|
+
let effectiveForceBrowser = forceBrowser;
|
|
257
|
+
let effectiveStealth = stealth;
|
|
258
|
+
if (selectedRecommendation) {
|
|
259
|
+
effectiveForceBrowser = true;
|
|
260
|
+
if (selectedRecommendation.mode === 'stealth') {
|
|
261
|
+
effectiveStealth = true;
|
|
262
|
+
}
|
|
263
|
+
}
|
|
264
|
+
prefetchDns(url);
|
|
265
|
+
const canUseCache = !noCache &&
|
|
266
|
+
!effectiveForceBrowser &&
|
|
267
|
+
!effectiveStealth &&
|
|
268
|
+
!screenshot &&
|
|
269
|
+
!keepPageOpen &&
|
|
270
|
+
!actions?.length &&
|
|
271
|
+
!headers &&
|
|
272
|
+
!cookies &&
|
|
273
|
+
waitMs === 0 &&
|
|
274
|
+
!userAgent;
|
|
275
|
+
if (canUseCache) {
|
|
276
|
+
const cacheResult = getCachedWithSWR(url);
|
|
277
|
+
if (cacheResult) {
|
|
278
|
+
if (cacheResult.stale) {
|
|
279
|
+
// Stale-while-revalidate: serve stale immediately, refresh in background
|
|
280
|
+
if (markRevalidating(url)) {
|
|
281
|
+
// Fire-and-forget background revalidation
|
|
282
|
+
void (async () => {
|
|
283
|
+
try {
|
|
284
|
+
const freshResult = await simpleFetch(url, userAgent, timeoutMs);
|
|
285
|
+
if (!looksLikeShellPage(freshResult)) {
|
|
286
|
+
setCached(url, { ...freshResult, method: 'simple' });
|
|
287
|
+
}
|
|
288
|
+
}
|
|
289
|
+
catch {
|
|
290
|
+
// Background revalidation failed — stale entry continues serving
|
|
291
|
+
}
|
|
292
|
+
})();
|
|
293
|
+
}
|
|
294
|
+
}
|
|
295
|
+
return {
|
|
296
|
+
...cacheResult.value,
|
|
297
|
+
method: 'cached',
|
|
298
|
+
};
|
|
299
|
+
}
|
|
300
|
+
}
|
|
301
|
+
// If stealth is requested, force browser mode (stealth requires browser)
|
|
302
|
+
let shouldUseBrowser = effectiveForceBrowser || screenshot || effectiveStealth;
|
|
303
|
+
const browserOptions = {
|
|
304
|
+
userAgent,
|
|
305
|
+
waitMs,
|
|
306
|
+
timeoutMs,
|
|
307
|
+
screenshot,
|
|
308
|
+
screenshotFullPage,
|
|
309
|
+
headers,
|
|
310
|
+
cookies,
|
|
311
|
+
actions,
|
|
312
|
+
keepPageOpen,
|
|
313
|
+
effectiveStealth,
|
|
314
|
+
};
|
|
315
|
+
// Strategy 1: Simple fetch (unless browser is forced or screenshot is requested)
|
|
316
|
+
if (!shouldUseBrowser) {
|
|
317
|
+
const simpleAbortController = new AbortController();
|
|
318
|
+
const simplePromise = retryFetch(() => simpleFetch(url, userAgent, timeoutMs, headers, simpleAbortController.signal), 3).then((result) => {
|
|
319
|
+
if (looksLikeShellPage(result)) {
|
|
320
|
+
throw new BlockedError('Shell page detected. Browser rendering required.');
|
|
321
|
+
}
|
|
322
|
+
return result;
|
|
323
|
+
});
|
|
324
|
+
let raceTimer;
|
|
325
|
+
const simpleOrTimeout = await Promise.race([
|
|
326
|
+
simplePromise
|
|
327
|
+
.then((result) => ({ type: 'simple-success', result }))
|
|
328
|
+
.catch((error) => ({ type: 'simple-error', error })),
|
|
329
|
+
new Promise((resolve) => {
|
|
330
|
+
raceTimer = setTimeout(() => resolve({ type: 'race-timeout' }), Math.max(raceTimeoutMs, 0));
|
|
331
|
+
}),
|
|
332
|
+
]);
|
|
333
|
+
if (raceTimer) {
|
|
334
|
+
clearTimeout(raceTimer);
|
|
335
|
+
}
|
|
336
|
+
if (simpleOrTimeout.type === 'simple-success') {
|
|
337
|
+
const strategyResult = {
|
|
338
|
+
...simpleOrTimeout.result,
|
|
339
|
+
method: 'simple',
|
|
340
|
+
};
|
|
341
|
+
if (canUseCache) {
|
|
342
|
+
setCached(url, strategyResult);
|
|
343
|
+
}
|
|
344
|
+
recordSuccessfulMethod('simple');
|
|
345
|
+
return strategyResult;
|
|
346
|
+
}
|
|
347
|
+
if (simpleOrTimeout.type === 'simple-error') {
|
|
348
|
+
if (!shouldEscalateSimpleError(simpleOrTimeout.error)) {
|
|
349
|
+
throw simpleOrTimeout.error;
|
|
350
|
+
}
|
|
351
|
+
shouldUseBrowser = true;
|
|
352
|
+
}
|
|
353
|
+
else {
|
|
354
|
+
// Simple fetch is slow - start browser in parallel and return whichever succeeds first.
|
|
355
|
+
const browserAbortController = new AbortController();
|
|
356
|
+
let simpleError;
|
|
357
|
+
let browserError;
|
|
358
|
+
const simpleCandidate = simplePromise
|
|
359
|
+
.then((result) => ({ source: 'simple', result }))
|
|
360
|
+
.catch((error) => {
|
|
361
|
+
simpleError = error;
|
|
362
|
+
throw error;
|
|
363
|
+
});
|
|
364
|
+
const browserCandidate = fetchWithBrowserStrategy(url, {
|
|
365
|
+
...browserOptions,
|
|
366
|
+
signal: browserAbortController.signal,
|
|
367
|
+
})
|
|
368
|
+
.then((result) => ({ source: 'browser', result }))
|
|
369
|
+
.catch((error) => {
|
|
370
|
+
browserError = error;
|
|
371
|
+
throw error;
|
|
372
|
+
});
|
|
373
|
+
try {
|
|
374
|
+
const winner = await Promise.any([simpleCandidate, browserCandidate]);
|
|
375
|
+
if (winner.source === 'simple') {
|
|
376
|
+
browserAbortController.abort();
|
|
377
|
+
const strategyResult = {
|
|
378
|
+
...winner.result,
|
|
379
|
+
method: 'simple',
|
|
380
|
+
};
|
|
381
|
+
if (canUseCache) {
|
|
382
|
+
setCached(url, strategyResult);
|
|
383
|
+
}
|
|
384
|
+
recordSuccessfulMethod('simple');
|
|
385
|
+
return strategyResult;
|
|
386
|
+
}
|
|
387
|
+
simpleAbortController.abort();
|
|
388
|
+
if (canUseCache) {
|
|
389
|
+
setCached(url, winner.result);
|
|
390
|
+
}
|
|
391
|
+
recordSuccessfulMethod(winner.result.method);
|
|
392
|
+
return winner.result;
|
|
393
|
+
}
|
|
394
|
+
catch {
|
|
395
|
+
// Both failed: prefer non-escalation simple errors, otherwise return browser-side error.
|
|
396
|
+
if (simpleError && !shouldEscalateSimpleError(simpleError) && !isAbortError(simpleError)) {
|
|
397
|
+
throw simpleError;
|
|
398
|
+
}
|
|
399
|
+
if (browserError) {
|
|
400
|
+
throw browserError;
|
|
401
|
+
}
|
|
402
|
+
if (simpleError) {
|
|
403
|
+
throw simpleError;
|
|
404
|
+
}
|
|
405
|
+
throw new Error('Both simple and browser fetch attempts failed');
|
|
406
|
+
}
|
|
407
|
+
}
|
|
408
|
+
}
|
|
409
|
+
const browserResult = await fetchWithBrowserStrategy(url, browserOptions);
|
|
410
|
+
if (canUseCache) {
|
|
411
|
+
setCached(url, browserResult);
|
|
412
|
+
}
|
|
413
|
+
recordSuccessfulMethod(browserResult.method);
|
|
414
|
+
return browserResult;
|
|
415
|
+
}
|
|
109
416
|
//# sourceMappingURL=strategies.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"strategies.js","sourceRoot":"","sources":["../../src/core/strategies.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"strategies.js","sourceRoot":"","sources":["../../src/core/strategies.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
CHANGED
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
*
|
|
4
4
|
* Main library export
|
|
5
5
|
*/
|
|
6
|
-
import { cleanup } from './core/fetcher.js';
|
|
6
|
+
import { cleanup, warmup, closePool } from './core/fetcher.js';
|
|
7
7
|
import type { PeelOptions, PeelResult } from './types.js';
|
|
8
8
|
export * from './types.js';
|
|
9
9
|
export { crawl, type CrawlOptions, type CrawlResult, type CrawlProgress } from './core/crawler.js';
|
|
@@ -12,8 +12,13 @@ export { mapDomain, type MapOptions, type MapResult } from './core/map.js';
|
|
|
12
12
|
export { extractBranding, type BrandingProfile } from './core/branding.js';
|
|
13
13
|
export { trackChange, getSnapshot, clearSnapshots, type ChangeResult, type Snapshot } from './core/change-tracking.js';
|
|
14
14
|
export { extractWithLLM } from './core/extract.js';
|
|
15
|
-
export {
|
|
15
|
+
export { extractDocumentToFormat, isPdfContentType, isDocxContentType, type DocumentExtractionResult } from './core/documents.js';
|
|
16
|
+
export { extractInlineJson, type InlineExtractOptions, type InlineExtractResult } from './core/extract-inline.js';
|
|
17
|
+
export { runAgent, type AgentOptions, type AgentResult, type AgentProgress, type AgentStreamEvent, type AgentDepth, type AgentTopic } from './core/agent.js';
|
|
16
18
|
export { summarizeContent, type SummarizeOptions } from './core/summarize.js';
|
|
19
|
+
export { getSearchProvider, DuckDuckGoProvider, BraveSearchProvider, type SearchProvider, type SearchProviderId, type WebSearchResult, type WebSearchOptions, } from './core/search-provider.js';
|
|
20
|
+
export { answerQuestion, type AnswerRequest, type AnswerResponse, type AnswerCitation, type LLMProviderId, type TokensUsed, } from './core/answer.js';
|
|
21
|
+
export { searchJobs, type JobCard, type JobDetail, type JobSearchOptions, type JobSearchResult } from './core/jobs.js';
|
|
17
22
|
/**
|
|
18
23
|
* Fetch and extract content from a URL
|
|
19
24
|
*
|
|
@@ -56,5 +61,6 @@ export declare function peelBatch(urls: string[], options?: PeelOptions & {
|
|
|
56
61
|
* Clean up any browser resources
|
|
57
62
|
* Call this when you're done using WebPeel
|
|
58
63
|
*/
|
|
59
|
-
export { cleanup };
|
|
64
|
+
export { cleanup, warmup, closePool };
|
|
65
|
+
export { getCached, setCached, clearCache, setCacheTTL } from './core/cache.js';
|
|
60
66
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAMH,OAAO,EAAE,OAAO,EAAE,MAAM,mBAAmB,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAMH,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AAG/D,OAAO,KAAK,EAAE,WAAW,EAAE,UAAU,EAAa,MAAM,YAAY,CAAC;AAErE,cAAc,YAAY,CAAC;AAC3B,OAAO,EAAE,KAAK,EAAE,KAAK,YAAY,EAAE,KAAK,WAAW,EAAE,KAAK,aAAa,EAAE,MAAM,mBAAmB,CAAC;AACnG,OAAO,EAAE,eAAe,EAAE,KAAK,UAAU,EAAE,KAAK,aAAa,EAAE,MAAM,mBAAmB,CAAC;AACzF,OAAO,EAAE,SAAS,EAAE,KAAK,UAAU,EAAE,KAAK,SAAS,EAAE,MAAM,eAAe,CAAC;AAC3E,OAAO,EAAE,eAAe,EAAE,KAAK,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAC3E,OAAO,EAAE,WAAW,EAAE,WAAW,EAAE,cAAc,EAAE,KAAK,YAAY,EAAE,KAAK,QAAQ,EAAE,MAAM,2BAA2B,CAAC;AACvH,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AACnD,OAAO,EAAE,uBAAuB,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,KAAK,wBAAwB,EAAE,MAAM,qBAAqB,CAAC;AAClI,OAAO,EAAE,iBAAiB,EAAE,KAAK,oBAAoB,EAAE,KAAK,mBAAmB,EAAE,MAAM,0BAA0B,CAAC;AAClH,OAAO,EAAE,QAAQ,EAAE,KAAK,YAAY,EAAE,KAAK,WAAW,EAAE,KAAK,aAAa,EAAE,KAAK,gBAAgB,EAAE,KAAK,UAAU,EAAE,KAAK,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAC7J,OAAO,EAAE,gBAAgB,EAAE,KAAK,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AAC9E,OAAO,EACL,iBAAiB,EACjB,kBAAkB,EAClB,mBAAmB,EACnB,KAAK,cAAc,EACnB,KAAK,gBAAgB,EACrB,KAAK,eAAe,EACpB,KAAK,gBAAgB,GACtB,MAAM,2BAA2B,CAAC;AACnC,OAAO,EACL,cAAc,EACd,KAAK,aAAa,EAClB,KAAK,cAAc,EACnB,KAAK,cAAc,EACnB,KAAK,aAAa,EAClB,KAAK,UAAU,GAChB,MAAM,kBAAkB,CAAC;AAE1B,OAAO,EAAE,UAAU,EAAE,KAAK,OAAO,EAAE,KAAK,SAAS,EAAE,KAAK,gBAAgB,EAAE,KAAK,eAAe,EAAE,MAAM,gBAAgB,CAAC;AAEvH;;;;;;;;;;;;;;;GAeG;AACH,wBAAsB,IAAI,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,GAAE,WAAgB,GAAG,OAAO,CAAC,UAAU,CAAC,CAyTtF;AAED;;;;;;;;;;;;;;GAcG;AACH,wBAAsB,SAAS,CAC7B,IAAI,EAAE,MAAM,EAAE,EACd,OAAO,GAAE,WAAW,GAAG;IAAE,WAAW,CAAC,EAAE,MAAM,CAAA;CAAO,GACnD,OAAO,CAAC,CAAC,UAAU,GAAG;IAAE,GAAG,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAAC,EAAE,CAAC,CAwB1D;AAED;;;GAGG;AACH,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,CAAC;AACtC,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC"}
|