webpeel 0.19.4 → 0.20.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 (544) hide show
  1. package/README.md +2 -2
  2. package/dist/cache.d.ts +0 -1
  3. package/dist/cache.js +0 -1
  4. package/dist/cli/commands/auth.d.ts +5 -0
  5. package/dist/cli/commands/auth.js +476 -0
  6. package/dist/cli/commands/fetch.d.ts +6 -0
  7. package/dist/cli/commands/fetch.js +1015 -0
  8. package/dist/cli/commands/interact.d.ts +5 -0
  9. package/dist/cli/commands/interact.js +839 -0
  10. package/dist/cli/commands/jobs.d.ts +5 -0
  11. package/dist/cli/commands/jobs.js +997 -0
  12. package/dist/cli/commands/screenshot.d.ts +5 -0
  13. package/dist/cli/commands/screenshot.js +273 -0
  14. package/dist/cli/commands/search.d.ts +5 -0
  15. package/dist/cli/commands/search.js +524 -0
  16. package/dist/cli/utils.d.ts +84 -0
  17. package/dist/cli/utils.js +686 -0
  18. package/dist/cli-auth.d.ts +0 -1
  19. package/dist/cli-auth.js +0 -1
  20. package/dist/cli.d.ts +7 -6
  21. package/dist/cli.js +35 -4698
  22. package/dist/core/actions.d.ts +0 -1
  23. package/dist/core/actions.js +0 -1
  24. package/dist/core/agent.d.ts +0 -1
  25. package/dist/core/agent.js +9 -12
  26. package/dist/core/answer.d.ts +0 -1
  27. package/dist/core/answer.js +0 -1
  28. package/dist/core/application-tracker.d.ts +0 -1
  29. package/dist/core/application-tracker.js +0 -1
  30. package/dist/core/apply.d.ts +0 -1
  31. package/dist/core/apply.js +0 -1
  32. package/dist/core/auto-extract.d.ts +0 -1
  33. package/dist/core/auto-extract.js +0 -1
  34. package/dist/core/auto-interact.d.ts +0 -1
  35. package/dist/core/auto-interact.js +0 -1
  36. package/dist/core/bm25-filter.d.ts +0 -1
  37. package/dist/core/bm25-filter.js +0 -1
  38. package/dist/core/branding.d.ts +0 -1
  39. package/dist/core/branding.js +0 -1
  40. package/dist/core/browser-fetch.d.ts +0 -1
  41. package/dist/core/browser-fetch.js +17 -10
  42. package/dist/core/browser-pool.d.ts +0 -1
  43. package/dist/core/browser-pool.js +0 -1
  44. package/dist/core/budget.d.ts +0 -1
  45. package/dist/core/budget.js +0 -1
  46. package/dist/core/cache.d.ts +0 -1
  47. package/dist/core/cache.js +0 -1
  48. package/dist/core/cf-worker-proxy.d.ts +0 -1
  49. package/dist/core/cf-worker-proxy.js +0 -1
  50. package/dist/core/challenge-detection.d.ts +0 -1
  51. package/dist/core/challenge-detection.js +0 -1
  52. package/dist/core/change-tracking.d.ts +0 -1
  53. package/dist/core/change-tracking.js +0 -1
  54. package/dist/core/chunker.d.ts +0 -1
  55. package/dist/core/chunker.js +0 -1
  56. package/dist/core/chunking.d.ts +0 -1
  57. package/dist/core/chunking.js +0 -1
  58. package/dist/core/cloak-fetch.d.ts +0 -1
  59. package/dist/core/cloak-fetch.js +0 -1
  60. package/dist/core/content-pruner.d.ts +0 -1
  61. package/dist/core/content-pruner.js +0 -1
  62. package/dist/core/crawl-checkpoint.d.ts +0 -1
  63. package/dist/core/crawl-checkpoint.js +0 -1
  64. package/dist/core/crawler.d.ts +0 -1
  65. package/dist/core/crawler.js +6 -5
  66. package/dist/core/cycle-fetch.d.ts +0 -1
  67. package/dist/core/cycle-fetch.js +0 -1
  68. package/dist/core/deep-fetch.d.ts +0 -1
  69. package/dist/core/deep-fetch.js +0 -1
  70. package/dist/core/design-analysis.d.ts +0 -1
  71. package/dist/core/design-analysis.js +0 -1
  72. package/dist/core/design-compare.d.ts +0 -1
  73. package/dist/core/design-compare.js +0 -1
  74. package/dist/core/diff.d.ts +0 -1
  75. package/dist/core/diff.js +0 -1
  76. package/dist/core/dns-cache.d.ts +0 -1
  77. package/dist/core/dns-cache.js +0 -1
  78. package/dist/core/documents.d.ts +0 -1
  79. package/dist/core/documents.js +0 -1
  80. package/dist/core/domain-extractors.d.ts +0 -1
  81. package/dist/core/domain-extractors.js +0 -1
  82. package/dist/core/extract-inline.d.ts +0 -1
  83. package/dist/core/extract-inline.js +0 -1
  84. package/dist/core/extract-listings.d.ts +0 -1
  85. package/dist/core/extract-listings.js +0 -1
  86. package/dist/core/extract.d.ts +0 -1
  87. package/dist/core/extract.js +0 -1
  88. package/dist/core/fetcher.d.ts +0 -1
  89. package/dist/core/fetcher.js +0 -1
  90. package/dist/core/google-cache.d.ts +0 -1
  91. package/dist/core/google-cache.js +0 -1
  92. package/dist/core/hotel-search.d.ts +0 -1
  93. package/dist/core/hotel-search.js +0 -1
  94. package/dist/core/http-fetch.d.ts +0 -1
  95. package/dist/core/http-fetch.js +5 -7
  96. package/dist/core/human.d.ts +0 -1
  97. package/dist/core/human.js +0 -1
  98. package/dist/core/jobs.d.ts +0 -1
  99. package/dist/core/jobs.js +0 -1
  100. package/dist/core/json-ld.d.ts +0 -1
  101. package/dist/core/json-ld.js +0 -1
  102. package/dist/core/llm-extract.d.ts +0 -1
  103. package/dist/core/llm-extract.js +0 -1
  104. package/dist/core/logger.d.ts +17 -0
  105. package/dist/core/logger.js +44 -0
  106. package/dist/core/map.d.ts +0 -1
  107. package/dist/core/map.js +0 -1
  108. package/dist/core/markdown.d.ts +0 -1
  109. package/dist/core/markdown.js +0 -1
  110. package/dist/core/metadata.d.ts +0 -1
  111. package/dist/core/metadata.js +0 -1
  112. package/dist/core/paginate.d.ts +0 -1
  113. package/dist/core/paginate.js +0 -1
  114. package/dist/core/pdf.d.ts +0 -1
  115. package/dist/core/pdf.js +0 -1
  116. package/dist/core/peel-tls.d.ts +0 -1
  117. package/dist/core/peel-tls.js +0 -1
  118. package/dist/core/pipeline.d.ts +0 -1
  119. package/dist/core/pipeline.js +22 -25
  120. package/dist/core/profiles.d.ts +0 -1
  121. package/dist/core/profiles.js +0 -1
  122. package/dist/core/quick-answer.d.ts +0 -1
  123. package/dist/core/quick-answer.js +0 -1
  124. package/dist/core/rate-governor.d.ts +0 -1
  125. package/dist/core/rate-governor.js +0 -1
  126. package/dist/core/readability.d.ts +0 -1
  127. package/dist/core/readability.js +0 -1
  128. package/dist/core/research.d.ts +0 -1
  129. package/dist/core/research.js +0 -1
  130. package/dist/core/schema-extraction.d.ts +0 -1
  131. package/dist/core/schema-extraction.js +0 -1
  132. package/dist/core/schema-postprocess.d.ts +0 -1
  133. package/dist/core/schema-postprocess.js +0 -1
  134. package/dist/core/schema-templates.d.ts +0 -1
  135. package/dist/core/schema-templates.js +0 -1
  136. package/dist/core/screenshot.d.ts +0 -1
  137. package/dist/core/screenshot.js +0 -1
  138. package/dist/core/search-fallback.d.ts +0 -1
  139. package/dist/core/search-fallback.js +0 -1
  140. package/dist/core/search-provider.d.ts +0 -1
  141. package/dist/core/search-provider.js +18 -21
  142. package/dist/core/site-search.d.ts +0 -1
  143. package/dist/core/site-search.js +0 -1
  144. package/dist/core/sitemap.d.ts +0 -1
  145. package/dist/core/sitemap.js +0 -1
  146. package/dist/core/stealth-patches.d.ts +0 -1
  147. package/dist/core/stealth-patches.js +0 -1
  148. package/dist/core/stemmer.d.ts +0 -1
  149. package/dist/core/stemmer.js +0 -1
  150. package/dist/core/strategies.d.ts +6 -1
  151. package/dist/core/strategies.js +29 -41
  152. package/dist/core/strategy-hooks.d.ts +0 -1
  153. package/dist/core/strategy-hooks.js +0 -1
  154. package/dist/core/summarize.d.ts +0 -1
  155. package/dist/core/summarize.js +0 -1
  156. package/dist/core/synonyms.d.ts +0 -1
  157. package/dist/core/synonyms.js +0 -1
  158. package/dist/core/table-format.d.ts +0 -1
  159. package/dist/core/table-format.js +0 -1
  160. package/dist/core/timing.d.ts +0 -1
  161. package/dist/core/timing.js +0 -1
  162. package/dist/core/user-agents.d.ts +0 -1
  163. package/dist/core/user-agents.js +0 -1
  164. package/dist/core/watch-manager.d.ts +0 -1
  165. package/dist/core/watch-manager.js +0 -1
  166. package/dist/core/watch.d.ts +0 -1
  167. package/dist/core/watch.js +0 -1
  168. package/dist/core/youtube.d.ts +0 -1
  169. package/dist/core/youtube.js +0 -1
  170. package/dist/index.d.ts +8 -3
  171. package/dist/index.js +27 -3
  172. package/dist/integrations/index.d.ts +0 -1
  173. package/dist/integrations/index.js +0 -1
  174. package/dist/integrations/langchain.d.ts +0 -1
  175. package/dist/integrations/langchain.js +0 -1
  176. package/dist/integrations/llamaindex.d.ts +0 -1
  177. package/dist/integrations/llamaindex.js +0 -1
  178. package/dist/mcp/handlers/act.d.ts +5 -0
  179. package/dist/mcp/handlers/act.js +34 -0
  180. package/dist/mcp/handlers/definitions.d.ts +6 -0
  181. package/dist/mcp/handlers/definitions.js +266 -0
  182. package/dist/mcp/handlers/extract.d.ts +6 -0
  183. package/dist/mcp/handlers/extract.js +102 -0
  184. package/dist/mcp/handlers/fetch.d.ts +6 -0
  185. package/dist/mcp/handlers/fetch.js +98 -0
  186. package/dist/mcp/handlers/find.d.ts +5 -0
  187. package/dist/mcp/handlers/find.js +137 -0
  188. package/dist/mcp/handlers/index.d.ts +13 -0
  189. package/dist/mcp/handlers/index.js +61 -0
  190. package/dist/mcp/handlers/legacy.d.ts +25 -0
  191. package/dist/mcp/handlers/legacy.js +450 -0
  192. package/dist/mcp/handlers/meta.d.ts +6 -0
  193. package/dist/mcp/handlers/meta.js +31 -0
  194. package/dist/mcp/handlers/monitor.d.ts +5 -0
  195. package/dist/mcp/handlers/monitor.js +41 -0
  196. package/dist/mcp/handlers/read.d.ts +6 -0
  197. package/dist/mcp/handlers/read.js +63 -0
  198. package/dist/mcp/handlers/see.d.ts +5 -0
  199. package/dist/mcp/handlers/see.js +75 -0
  200. package/dist/mcp/handlers/types.d.ts +29 -0
  201. package/dist/mcp/handlers/types.js +28 -0
  202. package/dist/mcp/server.d.ts +3 -4
  203. package/dist/mcp/server.js +35 -1101
  204. package/dist/mcp/smart-router.d.ts +0 -1
  205. package/dist/mcp/smart-router.js +3 -1
  206. package/dist/types.d.ts +6 -1
  207. package/dist/types.js +0 -1
  208. package/package.json +3 -13
  209. package/dist/cache.d.ts.map +0 -1
  210. package/dist/cache.js.map +0 -1
  211. package/dist/cli-auth.d.ts.map +0 -1
  212. package/dist/cli-auth.js.map +0 -1
  213. package/dist/cli.bundle.cjs +0 -159248
  214. package/dist/cli.d.ts.map +0 -1
  215. package/dist/cli.js.map +0 -1
  216. package/dist/core/actions.d.ts.map +0 -1
  217. package/dist/core/actions.js.map +0 -1
  218. package/dist/core/agent.d.ts.map +0 -1
  219. package/dist/core/agent.js.map +0 -1
  220. package/dist/core/answer.d.ts.map +0 -1
  221. package/dist/core/answer.js.map +0 -1
  222. package/dist/core/application-tracker.d.ts.map +0 -1
  223. package/dist/core/application-tracker.js.map +0 -1
  224. package/dist/core/apply.d.ts.map +0 -1
  225. package/dist/core/apply.js.map +0 -1
  226. package/dist/core/auto-extract.d.ts.map +0 -1
  227. package/dist/core/auto-extract.js.map +0 -1
  228. package/dist/core/auto-interact.d.ts.map +0 -1
  229. package/dist/core/auto-interact.js.map +0 -1
  230. package/dist/core/bm25-filter.d.ts.map +0 -1
  231. package/dist/core/bm25-filter.js.map +0 -1
  232. package/dist/core/branding.d.ts.map +0 -1
  233. package/dist/core/branding.js.map +0 -1
  234. package/dist/core/browser-fetch.d.ts.map +0 -1
  235. package/dist/core/browser-fetch.js.map +0 -1
  236. package/dist/core/browser-pool.d.ts.map +0 -1
  237. package/dist/core/browser-pool.js.map +0 -1
  238. package/dist/core/budget.d.ts.map +0 -1
  239. package/dist/core/budget.js.map +0 -1
  240. package/dist/core/cache.d.ts.map +0 -1
  241. package/dist/core/cache.js.map +0 -1
  242. package/dist/core/cf-worker-proxy.d.ts.map +0 -1
  243. package/dist/core/cf-worker-proxy.js.map +0 -1
  244. package/dist/core/challenge-detection.d.ts.map +0 -1
  245. package/dist/core/challenge-detection.js.map +0 -1
  246. package/dist/core/change-tracking.d.ts.map +0 -1
  247. package/dist/core/change-tracking.js.map +0 -1
  248. package/dist/core/chunker.d.ts.map +0 -1
  249. package/dist/core/chunker.js.map +0 -1
  250. package/dist/core/chunking.d.ts.map +0 -1
  251. package/dist/core/chunking.js.map +0 -1
  252. package/dist/core/cloak-fetch.d.ts.map +0 -1
  253. package/dist/core/cloak-fetch.js.map +0 -1
  254. package/dist/core/content-pruner.d.ts.map +0 -1
  255. package/dist/core/content-pruner.js.map +0 -1
  256. package/dist/core/crawl-checkpoint.d.ts.map +0 -1
  257. package/dist/core/crawl-checkpoint.js.map +0 -1
  258. package/dist/core/crawler.d.ts.map +0 -1
  259. package/dist/core/crawler.js.map +0 -1
  260. package/dist/core/cycle-fetch.d.ts.map +0 -1
  261. package/dist/core/cycle-fetch.js.map +0 -1
  262. package/dist/core/deep-fetch.d.ts.map +0 -1
  263. package/dist/core/deep-fetch.js.map +0 -1
  264. package/dist/core/design-analysis.d.ts.map +0 -1
  265. package/dist/core/design-analysis.js.map +0 -1
  266. package/dist/core/design-compare.d.ts.map +0 -1
  267. package/dist/core/design-compare.js.map +0 -1
  268. package/dist/core/diff.d.ts.map +0 -1
  269. package/dist/core/diff.js.map +0 -1
  270. package/dist/core/dns-cache.d.ts.map +0 -1
  271. package/dist/core/dns-cache.js.map +0 -1
  272. package/dist/core/documents.d.ts.map +0 -1
  273. package/dist/core/documents.js.map +0 -1
  274. package/dist/core/domain-extractors.d.ts.map +0 -1
  275. package/dist/core/domain-extractors.js.map +0 -1
  276. package/dist/core/extract-inline.d.ts.map +0 -1
  277. package/dist/core/extract-inline.js.map +0 -1
  278. package/dist/core/extract-listings.d.ts.map +0 -1
  279. package/dist/core/extract-listings.js.map +0 -1
  280. package/dist/core/extract.d.ts.map +0 -1
  281. package/dist/core/extract.js.map +0 -1
  282. package/dist/core/fetcher.d.ts.map +0 -1
  283. package/dist/core/fetcher.js.map +0 -1
  284. package/dist/core/google-cache.d.ts.map +0 -1
  285. package/dist/core/google-cache.js.map +0 -1
  286. package/dist/core/hotel-search.d.ts.map +0 -1
  287. package/dist/core/hotel-search.js.map +0 -1
  288. package/dist/core/http-fetch.d.ts.map +0 -1
  289. package/dist/core/http-fetch.js.map +0 -1
  290. package/dist/core/human.d.ts.map +0 -1
  291. package/dist/core/human.js.map +0 -1
  292. package/dist/core/jobs.d.ts.map +0 -1
  293. package/dist/core/jobs.js.map +0 -1
  294. package/dist/core/json-ld.d.ts.map +0 -1
  295. package/dist/core/json-ld.js.map +0 -1
  296. package/dist/core/llm-extract.d.ts.map +0 -1
  297. package/dist/core/llm-extract.js.map +0 -1
  298. package/dist/core/map.d.ts.map +0 -1
  299. package/dist/core/map.js.map +0 -1
  300. package/dist/core/markdown.d.ts.map +0 -1
  301. package/dist/core/markdown.js.map +0 -1
  302. package/dist/core/metadata.d.ts.map +0 -1
  303. package/dist/core/metadata.js.map +0 -1
  304. package/dist/core/paginate.d.ts.map +0 -1
  305. package/dist/core/paginate.js.map +0 -1
  306. package/dist/core/pdf.d.ts.map +0 -1
  307. package/dist/core/pdf.js.map +0 -1
  308. package/dist/core/peel-tls.d.ts.map +0 -1
  309. package/dist/core/peel-tls.js.map +0 -1
  310. package/dist/core/pipeline.d.ts.map +0 -1
  311. package/dist/core/pipeline.js.map +0 -1
  312. package/dist/core/profiles.d.ts.map +0 -1
  313. package/dist/core/profiles.js.map +0 -1
  314. package/dist/core/quick-answer.d.ts.map +0 -1
  315. package/dist/core/quick-answer.js.map +0 -1
  316. package/dist/core/rate-governor.d.ts.map +0 -1
  317. package/dist/core/rate-governor.js.map +0 -1
  318. package/dist/core/readability.d.ts.map +0 -1
  319. package/dist/core/readability.js.map +0 -1
  320. package/dist/core/research.d.ts.map +0 -1
  321. package/dist/core/research.js.map +0 -1
  322. package/dist/core/schema-extraction.d.ts.map +0 -1
  323. package/dist/core/schema-extraction.js.map +0 -1
  324. package/dist/core/schema-postprocess.d.ts.map +0 -1
  325. package/dist/core/schema-postprocess.js.map +0 -1
  326. package/dist/core/schema-templates.d.ts.map +0 -1
  327. package/dist/core/schema-templates.js.map +0 -1
  328. package/dist/core/screenshot.d.ts.map +0 -1
  329. package/dist/core/screenshot.js.map +0 -1
  330. package/dist/core/search-fallback.d.ts.map +0 -1
  331. package/dist/core/search-fallback.js.map +0 -1
  332. package/dist/core/search-provider.d.ts.map +0 -1
  333. package/dist/core/search-provider.js.map +0 -1
  334. package/dist/core/site-search.d.ts.map +0 -1
  335. package/dist/core/site-search.js.map +0 -1
  336. package/dist/core/sitemap.d.ts.map +0 -1
  337. package/dist/core/sitemap.js.map +0 -1
  338. package/dist/core/stealth-patches.d.ts.map +0 -1
  339. package/dist/core/stealth-patches.js.map +0 -1
  340. package/dist/core/stemmer.d.ts.map +0 -1
  341. package/dist/core/stemmer.js.map +0 -1
  342. package/dist/core/strategies.d.ts.map +0 -1
  343. package/dist/core/strategies.js.map +0 -1
  344. package/dist/core/strategy-hooks.d.ts.map +0 -1
  345. package/dist/core/strategy-hooks.js.map +0 -1
  346. package/dist/core/summarize.d.ts.map +0 -1
  347. package/dist/core/summarize.js.map +0 -1
  348. package/dist/core/synonyms.d.ts.map +0 -1
  349. package/dist/core/synonyms.js.map +0 -1
  350. package/dist/core/table-format.d.ts.map +0 -1
  351. package/dist/core/table-format.js.map +0 -1
  352. package/dist/core/timing.d.ts.map +0 -1
  353. package/dist/core/timing.js.map +0 -1
  354. package/dist/core/user-agents.d.ts.map +0 -1
  355. package/dist/core/user-agents.js.map +0 -1
  356. package/dist/core/watch-manager.d.ts.map +0 -1
  357. package/dist/core/watch-manager.js.map +0 -1
  358. package/dist/core/watch.d.ts.map +0 -1
  359. package/dist/core/watch.js.map +0 -1
  360. package/dist/core/youtube.d.ts.map +0 -1
  361. package/dist/core/youtube.js.map +0 -1
  362. package/dist/index.d.ts.map +0 -1
  363. package/dist/index.js.map +0 -1
  364. package/dist/integrations/index.d.ts.map +0 -1
  365. package/dist/integrations/index.js.map +0 -1
  366. package/dist/integrations/langchain.d.ts.map +0 -1
  367. package/dist/integrations/langchain.js.map +0 -1
  368. package/dist/integrations/llamaindex.d.ts.map +0 -1
  369. package/dist/integrations/llamaindex.js.map +0 -1
  370. package/dist/mcp/server.d.ts.map +0 -1
  371. package/dist/mcp/server.js.map +0 -1
  372. package/dist/mcp/smart-router.d.ts.map +0 -1
  373. package/dist/mcp/smart-router.js.map +0 -1
  374. package/dist/server/app.d.ts +0 -15
  375. package/dist/server/app.d.ts.map +0 -1
  376. package/dist/server/app.js +0 -350
  377. package/dist/server/app.js.map +0 -1
  378. package/dist/server/auth-store.d.ts +0 -28
  379. package/dist/server/auth-store.d.ts.map +0 -1
  380. package/dist/server/auth-store.js +0 -89
  381. package/dist/server/auth-store.js.map +0 -1
  382. package/dist/server/email-service.d.ts +0 -22
  383. package/dist/server/email-service.d.ts.map +0 -1
  384. package/dist/server/email-service.js +0 -80
  385. package/dist/server/email-service.js.map +0 -1
  386. package/dist/server/job-queue.d.ts +0 -93
  387. package/dist/server/job-queue.d.ts.map +0 -1
  388. package/dist/server/job-queue.js +0 -146
  389. package/dist/server/job-queue.js.map +0 -1
  390. package/dist/server/logger.d.ts +0 -11
  391. package/dist/server/logger.d.ts.map +0 -1
  392. package/dist/server/logger.js +0 -38
  393. package/dist/server/logger.js.map +0 -1
  394. package/dist/server/middleware/auth.d.ts +0 -29
  395. package/dist/server/middleware/auth.d.ts.map +0 -1
  396. package/dist/server/middleware/auth.js +0 -222
  397. package/dist/server/middleware/auth.js.map +0 -1
  398. package/dist/server/middleware/rate-limit.d.ts +0 -25
  399. package/dist/server/middleware/rate-limit.d.ts.map +0 -1
  400. package/dist/server/middleware/rate-limit.js +0 -168
  401. package/dist/server/middleware/rate-limit.js.map +0 -1
  402. package/dist/server/middleware/url-validator.d.ts +0 -16
  403. package/dist/server/middleware/url-validator.d.ts.map +0 -1
  404. package/dist/server/middleware/url-validator.js +0 -187
  405. package/dist/server/middleware/url-validator.js.map +0 -1
  406. package/dist/server/openapi.yaml +0 -4944
  407. package/dist/server/pg-auth-store.d.ts +0 -133
  408. package/dist/server/pg-auth-store.d.ts.map +0 -1
  409. package/dist/server/pg-auth-store.js +0 -473
  410. package/dist/server/pg-auth-store.js.map +0 -1
  411. package/dist/server/pg-job-queue.d.ts +0 -60
  412. package/dist/server/pg-job-queue.d.ts.map +0 -1
  413. package/dist/server/pg-job-queue.js +0 -365
  414. package/dist/server/pg-job-queue.js.map +0 -1
  415. package/dist/server/premium/domain-intel.d.ts +0 -17
  416. package/dist/server/premium/domain-intel.d.ts.map +0 -1
  417. package/dist/server/premium/domain-intel.js +0 -134
  418. package/dist/server/premium/domain-intel.js.map +0 -1
  419. package/dist/server/premium/index.d.ts +0 -18
  420. package/dist/server/premium/index.d.ts.map +0 -1
  421. package/dist/server/premium/index.js +0 -36
  422. package/dist/server/premium/index.js.map +0 -1
  423. package/dist/server/premium/swr-cache.d.ts +0 -15
  424. package/dist/server/premium/swr-cache.d.ts.map +0 -1
  425. package/dist/server/premium/swr-cache.js +0 -35
  426. package/dist/server/premium/swr-cache.js.map +0 -1
  427. package/dist/server/routes/activity.d.ts +0 -7
  428. package/dist/server/routes/activity.d.ts.map +0 -1
  429. package/dist/server/routes/activity.js +0 -68
  430. package/dist/server/routes/activity.js.map +0 -1
  431. package/dist/server/routes/agent.d.ts +0 -16
  432. package/dist/server/routes/agent.d.ts.map +0 -1
  433. package/dist/server/routes/agent.js +0 -247
  434. package/dist/server/routes/agent.js.map +0 -1
  435. package/dist/server/routes/answer.d.ts +0 -6
  436. package/dist/server/routes/answer.d.ts.map +0 -1
  437. package/dist/server/routes/answer.js +0 -133
  438. package/dist/server/routes/answer.js.map +0 -1
  439. package/dist/server/routes/ask.d.ts +0 -23
  440. package/dist/server/routes/ask.d.ts.map +0 -1
  441. package/dist/server/routes/ask.js +0 -119
  442. package/dist/server/routes/ask.js.map +0 -1
  443. package/dist/server/routes/batch.d.ts +0 -7
  444. package/dist/server/routes/batch.d.ts.map +0 -1
  445. package/dist/server/routes/batch.js +0 -412
  446. package/dist/server/routes/batch.js.map +0 -1
  447. package/dist/server/routes/cli-usage.d.ts +0 -7
  448. package/dist/server/routes/cli-usage.d.ts.map +0 -1
  449. package/dist/server/routes/cli-usage.js +0 -121
  450. package/dist/server/routes/cli-usage.js.map +0 -1
  451. package/dist/server/routes/compat.d.ts +0 -24
  452. package/dist/server/routes/compat.d.ts.map +0 -1
  453. package/dist/server/routes/compat.js +0 -653
  454. package/dist/server/routes/compat.js.map +0 -1
  455. package/dist/server/routes/deep-fetch.d.ts +0 -9
  456. package/dist/server/routes/deep-fetch.d.ts.map +0 -1
  457. package/dist/server/routes/deep-fetch.js +0 -50
  458. package/dist/server/routes/deep-fetch.js.map +0 -1
  459. package/dist/server/routes/demo.d.ts +0 -25
  460. package/dist/server/routes/demo.d.ts.map +0 -1
  461. package/dist/server/routes/demo.js +0 -434
  462. package/dist/server/routes/demo.js.map +0 -1
  463. package/dist/server/routes/extract.d.ts +0 -9
  464. package/dist/server/routes/extract.d.ts.map +0 -1
  465. package/dist/server/routes/extract.js +0 -150
  466. package/dist/server/routes/extract.js.map +0 -1
  467. package/dist/server/routes/fetch.d.ts +0 -8
  468. package/dist/server/routes/fetch.d.ts.map +0 -1
  469. package/dist/server/routes/fetch.js +0 -988
  470. package/dist/server/routes/fetch.js.map +0 -1
  471. package/dist/server/routes/health.d.ts +0 -8
  472. package/dist/server/routes/health.d.ts.map +0 -1
  473. package/dist/server/routes/health.js +0 -20
  474. package/dist/server/routes/health.js.map +0 -1
  475. package/dist/server/routes/jobs.d.ts +0 -8
  476. package/dist/server/routes/jobs.d.ts.map +0 -1
  477. package/dist/server/routes/jobs.js +0 -487
  478. package/dist/server/routes/jobs.js.map +0 -1
  479. package/dist/server/routes/mcp.d.ts +0 -18
  480. package/dist/server/routes/mcp.d.ts.map +0 -1
  481. package/dist/server/routes/mcp.js +0 -1260
  482. package/dist/server/routes/mcp.js.map +0 -1
  483. package/dist/server/routes/oauth.d.ts +0 -10
  484. package/dist/server/routes/oauth.d.ts.map +0 -1
  485. package/dist/server/routes/oauth.js +0 -334
  486. package/dist/server/routes/oauth.js.map +0 -1
  487. package/dist/server/routes/quick-answer.d.ts +0 -9
  488. package/dist/server/routes/quick-answer.d.ts.map +0 -1
  489. package/dist/server/routes/quick-answer.js +0 -93
  490. package/dist/server/routes/quick-answer.js.map +0 -1
  491. package/dist/server/routes/screenshot.d.ts +0 -23
  492. package/dist/server/routes/screenshot.d.ts.map +0 -1
  493. package/dist/server/routes/screenshot.js +0 -819
  494. package/dist/server/routes/screenshot.js.map +0 -1
  495. package/dist/server/routes/search.d.ts +0 -7
  496. package/dist/server/routes/search.d.ts.map +0 -1
  497. package/dist/server/routes/search.js +0 -312
  498. package/dist/server/routes/search.js.map +0 -1
  499. package/dist/server/routes/session.d.ts +0 -16
  500. package/dist/server/routes/session.d.ts.map +0 -1
  501. package/dist/server/routes/session.js +0 -278
  502. package/dist/server/routes/session.js.map +0 -1
  503. package/dist/server/routes/stats.d.ts +0 -7
  504. package/dist/server/routes/stats.d.ts.map +0 -1
  505. package/dist/server/routes/stats.js +0 -65
  506. package/dist/server/routes/stats.js.map +0 -1
  507. package/dist/server/routes/stripe.d.ts +0 -16
  508. package/dist/server/routes/stripe.d.ts.map +0 -1
  509. package/dist/server/routes/stripe.js +0 -283
  510. package/dist/server/routes/stripe.js.map +0 -1
  511. package/dist/server/routes/users.d.ts +0 -9
  512. package/dist/server/routes/users.d.ts.map +0 -1
  513. package/dist/server/routes/users.js +0 -1211
  514. package/dist/server/routes/users.js.map +0 -1
  515. package/dist/server/routes/watch.d.ts +0 -16
  516. package/dist/server/routes/watch.d.ts.map +0 -1
  517. package/dist/server/routes/watch.js +0 -257
  518. package/dist/server/routes/watch.js.map +0 -1
  519. package/dist/server/routes/webhooks.d.ts +0 -16
  520. package/dist/server/routes/webhooks.d.ts.map +0 -1
  521. package/dist/server/routes/webhooks.js +0 -74
  522. package/dist/server/routes/webhooks.js.map +0 -1
  523. package/dist/server/routes/youtube.d.ts +0 -7
  524. package/dist/server/routes/youtube.d.ts.map +0 -1
  525. package/dist/server/routes/youtube.js +0 -93
  526. package/dist/server/routes/youtube.js.map +0 -1
  527. package/dist/server/sentry.d.ts +0 -14
  528. package/dist/server/sentry.d.ts.map +0 -1
  529. package/dist/server/sentry.js +0 -39
  530. package/dist/server/sentry.js.map +0 -1
  531. package/dist/server/types.d.ts +0 -16
  532. package/dist/server/types.d.ts.map +0 -1
  533. package/dist/server/types.js +0 -8
  534. package/dist/server/types.js.map +0 -1
  535. package/dist/server/utils/response.d.ts +0 -45
  536. package/dist/server/utils/response.d.ts.map +0 -1
  537. package/dist/server/utils/response.js +0 -70
  538. package/dist/server/utils/response.js.map +0 -1
  539. package/dist/server/utils/sse.d.ts +0 -23
  540. package/dist/server/utils/sse.d.ts.map +0 -1
  541. package/dist/server/utils/sse.js +0 -39
  542. package/dist/server/utils/sse.js.map +0 -1
  543. package/dist/types.d.ts.map +0 -1
  544. package/dist/types.js.map +0 -1
@@ -15,6 +15,8 @@
15
15
  import { fetch as undiciFetch } from 'undici';
16
16
  import { load } from 'cheerio';
17
17
  import { getStealthBrowser, getRandomUserAgent, applyStealthScripts } from './browser-pool.js';
18
+ import { createLogger } from './logger.js';
19
+ const log = createLogger('search');
18
20
  function decodeHtmlEntities(input) {
19
21
  // Cheerio usually decodes entities when using `.text()`, but keep this as a
20
22
  // safety net since DuckDuckGo snippets sometimes leak encoded entities.
@@ -624,7 +626,7 @@ export class DuckDuckGoProvider {
624
626
  const ddgHttpRate = providerStats.getFailureRate('ddg-http');
625
627
  const skipDdgHttp = providerStats.shouldSkip('ddg-http');
626
628
  if (skipDdgHttp) {
627
- console.log(`[webpeel:search] DDG HTTP skipped (failure rate ${Math.round(ddgHttpRate * 100)}% ≥ 80%)`);
629
+ log.debug(`DDG HTTP skipped (failure rate ${Math.round(ddgHttpRate * 100)}% ≥ 80%)`);
628
630
  }
629
631
  else {
630
632
  const ddgTimeoutMs = ddgHttpRate > 0.5 ? 2_000 : 8_000;
@@ -636,7 +638,7 @@ export class DuckDuckGoProvider {
636
638
  const results = await this.searchOnce(q, ddgOptions);
637
639
  if (results.length > 0) {
638
640
  providerStats.record('ddg-http', true);
639
- console.log(`[webpeel:search] source=ddg-http returned ${results.length} results` +
641
+ log.debug(`source=ddg-http returned ${results.length} results` +
640
642
  (ddgTimeoutMs < 8_000 ? ` (fast-timeout ${ddgTimeoutMs}ms)` : ''));
641
643
  return results;
642
644
  }
@@ -644,7 +646,7 @@ export class DuckDuckGoProvider {
644
646
  }
645
647
  catch (e) {
646
648
  const msg = e instanceof Error ? e.message : String(e);
647
- console.log('[webpeel:search] DDG HTTP failed:', msg);
649
+ log.debug('DDG HTTP failed:', msg);
648
650
  break;
649
651
  }
650
652
  }
@@ -659,26 +661,26 @@ export class DuckDuckGoProvider {
659
661
  const ddgLiteRate = providerStats.getFailureRate('ddg-lite');
660
662
  const skipDdgLite = providerStats.shouldSkip('ddg-lite');
661
663
  if (skipDdgLite) {
662
- console.log(`[webpeel:search] DDG Lite skipped (failure rate ${Math.round(ddgLiteRate * 100)}% ≥ 80%)`);
664
+ log.debug(`DDG Lite skipped (failure rate ${Math.round(ddgLiteRate * 100)}% ≥ 80%)`);
663
665
  }
664
666
  else {
665
- console.log('[webpeel:search] DDG returned 0 results, trying DDG Lite...');
667
+ log.debug('DDG returned 0 results, trying DDG Lite...');
666
668
  const liteTimeoutMs = ddgLiteRate > 0.5 ? 2_000 : 8_000;
667
669
  const liteSignal = createTimeoutSignal(liteTimeoutMs, options.signal);
668
670
  try {
669
671
  const liteResults = await this.searchLite(query, { ...options, signal: liteSignal });
670
672
  if (liteResults.length > 0) {
671
673
  providerStats.record('ddg-lite', true);
672
- console.log(`[webpeel:search] source=ddg-lite returned ${liteResults.length} results` +
674
+ log.debug(`source=ddg-lite returned ${liteResults.length} results` +
673
675
  (liteTimeoutMs < 8_000 ? ` (fast-timeout ${liteTimeoutMs}ms)` : ''));
674
676
  return liteResults;
675
677
  }
676
678
  providerStats.record('ddg-lite', false);
677
- console.log('[webpeel:search] DDG Lite also returned 0 results');
679
+ log.debug('DDG Lite also returned 0 results');
678
680
  }
679
681
  catch (e) {
680
682
  providerStats.record('ddg-lite', false);
681
- console.log('[webpeel:search] DDG Lite failed:', e instanceof Error ? e.message : e);
683
+ log.debug('DDG Lite failed:', e instanceof Error ? e.message : e);
682
684
  }
683
685
  }
684
686
  // -----------------------------------------------------------
@@ -690,12 +692,12 @@ export class DuckDuckGoProvider {
690
692
  const braveProvider = new BraveSearchProvider();
691
693
  const braveResults = await braveProvider.searchWeb(query, { ...options, apiKey: braveKey });
692
694
  if (braveResults.length > 0) {
693
- console.log(`[webpeel:search] source=brave returned ${braveResults.length} results`);
695
+ log.debug(`source=brave returned ${braveResults.length} results`);
694
696
  return braveResults;
695
697
  }
696
698
  }
697
699
  catch (e) {
698
- console.log('[webpeel:search] Brave search failed:', e instanceof Error ? e.message : e);
700
+ log.debug('Brave search failed:', e instanceof Error ? e.message : e);
699
701
  }
700
702
  }
701
703
  // -----------------------------------------------------------
@@ -703,18 +705,18 @@ export class DuckDuckGoProvider {
703
705
  // Bypasses bot-detection on datacenter IPs. This is the reliable
704
706
  // last resort — but it spins up a browser so it takes a few seconds.
705
707
  // -----------------------------------------------------------
706
- console.log('[webpeel:search] Trying stealth browser search (DDG + Bing + Ecosia)...');
708
+ log.debug('Trying stealth browser search (DDG + Bing + Ecosia)...');
707
709
  try {
708
710
  const stealthProvider = new StealthSearchProvider();
709
711
  const stealthResults = await stealthProvider.searchWeb(query, options);
710
712
  if (stealthResults.length > 0) {
711
- console.log(`[webpeel:search] source=stealth returned ${stealthResults.length} results`);
713
+ log.debug(`source=stealth returned ${stealthResults.length} results`);
712
714
  return stealthResults;
713
715
  }
714
- console.log('[webpeel:search] Stealth search returned 0 results');
716
+ log.debug('Stealth search returned 0 results');
715
717
  }
716
718
  catch (e) {
717
- console.log('[webpeel:search] Stealth search failed:', e instanceof Error ? e.message : e);
719
+ log.debug('Stealth search failed:', e instanceof Error ? e.message : e);
718
720
  }
719
721
  return [];
720
722
  }
@@ -891,9 +893,7 @@ export class GoogleSearchProvider {
891
893
  }
892
894
  }
893
895
  catch (e) {
894
- if (process.env.DEBUG) {
895
- console.debug('[webpeel] Google stealth (peel) error:', e.message);
896
- }
896
+ log.debug('Google stealth (peel) error:', e.message);
897
897
  }
898
898
  // Strategy B: direct playwright-extra + stealth plugin
899
899
  let browser;
@@ -933,9 +933,7 @@ export class GoogleSearchProvider {
933
933
  return this._parseGoogleHtml(html, count);
934
934
  }
935
935
  catch (e) {
936
- if (process.env.DEBUG) {
937
- console.debug('[webpeel] Google stealth (playwright) error:', e.message);
938
- }
936
+ log.debug('Google stealth (playwright) error:', e.message);
939
937
  return [];
940
938
  }
941
939
  finally {
@@ -1057,4 +1055,3 @@ export function getBestSearchProvider() {
1057
1055
  // (DDG HTTP → DDG Lite → stealth multi-engine (Bing + Ecosia))
1058
1056
  return { provider: new DuckDuckGoProvider() };
1059
1057
  }
1060
- //# sourceMappingURL=search-provider.js.map
@@ -42,4 +42,3 @@ export declare function listSites(): Array<{
42
42
  * Returns the canonical site ID, or null if the URL doesn't match any template.
43
43
  */
44
44
  export declare function findSiteByUrl(url: string): string | null;
45
- //# sourceMappingURL=site-search.d.ts.map
@@ -250,4 +250,3 @@ export function findSiteByUrl(url) {
250
250
  return null;
251
251
  }
252
252
  }
253
- //# sourceMappingURL=site-search.js.map
@@ -21,4 +21,3 @@ export declare function discoverSitemap(domain: string, options?: {
21
21
  timeout?: number;
22
22
  maxUrls?: number;
23
23
  }): Promise<SitemapResult>;
24
- //# sourceMappingURL=sitemap.d.ts.map
@@ -103,4 +103,3 @@ export async function discoverSitemap(domain, options) {
103
103
  elapsed: Date.now() - startTime,
104
104
  };
105
105
  }
106
- //# sourceMappingURL=sitemap.js.map
@@ -55,4 +55,3 @@ export declare function applyStealthPatches(page: Page): Promise<void>;
55
55
  * @param locale - BCP 47 locale string, e.g. 'en-US' (default).
56
56
  */
57
57
  export declare function applyAcceptLanguageHeader(page: Page, locale?: string): Promise<void>;
58
- //# sourceMappingURL=stealth-patches.d.ts.map
@@ -337,4 +337,3 @@ export async function applyAcceptLanguageHeader(page, locale = 'en-US') {
337
337
  : locale;
338
338
  await page.setExtraHTTPHeaders({ 'Accept-Language': acceptLang });
339
339
  }
340
- //# sourceMappingURL=stealth-patches.js.map
@@ -36,4 +36,3 @@ export declare function stem(word: string): string;
36
36
  * Stem an array of tokens.
37
37
  */
38
38
  export declare function stemTokens(tokens: string[]): string[];
39
- //# sourceMappingURL=stemmer.d.ts.map
@@ -507,4 +507,3 @@ export function stem(word) {
507
507
  export function stemTokens(tokens) {
508
508
  return tokens.map(stem);
509
509
  }
510
- //# sourceMappingURL=stemmer.js.map
@@ -73,6 +73,12 @@ export interface StrategyOptions {
73
73
  cycle?: boolean;
74
74
  /** Use PeelTLS TLS fingerprint spoofing */
75
75
  tls?: boolean;
76
+ /**
77
+ * Skip browser escalation on thin/shell content.
78
+ * When true, the simple HTTP result is returned as-is without escalating to browser.
79
+ * Use for Q&A/search workloads where speed matters more than JS-rendered content.
80
+ */
81
+ noEscalate?: boolean;
76
82
  }
77
83
  /**
78
84
  * Smart fetch with automatic escalation.
@@ -85,4 +91,3 @@ export declare function smartFetch(url: string, options?: StrategyOptions): Prom
85
91
  * @deprecated Use `clearStrategyHooks()` from strategy-hooks.ts instead.
86
92
  */
87
93
  export { clearStrategyHooks as clearDomainIntel } from './strategy-hooks.js';
88
- //# sourceMappingURL=strategies.d.ts.map
@@ -12,6 +12,8 @@ import { resolveAndCache } from './dns-cache.js';
12
12
  import { BlockedError, NetworkError } from '../types.js';
13
13
  import { detectChallenge } from './challenge-detection.js';
14
14
  import { getStrategyHooks, } from './strategy-hooks.js';
15
+ import { createLogger } from './logger.js';
16
+ const log = createLogger('fetch');
15
17
  /* ---------- hardcoded domain rules -------------------------------------- */
16
18
  function shouldForceBrowser(url) {
17
19
  // Hashbang URLs (#!) are always JS-routed SPAs — browser rendering required
@@ -82,8 +84,7 @@ function shouldForceBrowser(url) {
82
84
  }
83
85
  catch (e) {
84
86
  // Ignore URL parsing errors; validation happens inside fetchers.
85
- if (process.env.DEBUG)
86
- console.debug('[webpeel]', 'stealth domain URL parse failed:', e instanceof Error ? e.message : e);
87
+ log.debug('stealth domain URL parse failed:', e instanceof Error ? e.message : e);
87
88
  }
88
89
  return null;
89
90
  }
@@ -190,8 +191,7 @@ function prefetchDns(url) {
190
191
  }
191
192
  catch (e) {
192
193
  // Ignore invalid URL.
193
- if (process.env.DEBUG)
194
- console.debug('[webpeel]', 'DNS prefetch URL parse failed:', e instanceof Error ? e.message : e);
194
+ log.debug('DNS prefetch URL parse failed:', e instanceof Error ? e.message : e);
195
195
  }
196
196
  }
197
197
  async function fetchWithBrowserStrategy(url, options) {
@@ -308,7 +308,7 @@ async function fetchWithBrowserStrategy(url, options) {
308
308
  * With premium hooks: SWR cache → domain intel → parallel race → escalation.
309
309
  */
310
310
  export async function smartFetch(url, options = {}) {
311
- const { forceBrowser = false, stealth = false, waitMs = 0, userAgent, timeoutMs = 30000, screenshot = false, screenshotFullPage = false, headers, cookies, actions, keepPageOpen = false, noCache = false, raceTimeoutMs = 2000, profileDir, headed = false, storageState, proxy, proxies, device, viewportWidth, viewportHeight, waitUntil, waitSelector, blockResources, cloaked = false, cycle = false, tls = false, } = options;
311
+ const { forceBrowser = false, stealth = false, waitMs = 0, userAgent, timeoutMs = 30000, screenshot = false, screenshotFullPage = false, headers, cookies, actions, keepPageOpen = false, noCache = false, raceTimeoutMs = 2000, profileDir, headed = false, storageState, proxy, proxies, device, viewportWidth, viewportHeight, waitUntil, waitSelector, blockResources, cloaked = false, cycle = false, tls = false, noEscalate = false, } = options;
312
312
  const usePeelTLS = tls || cycle;
313
313
  // Build effective proxy list: explicit proxies array, or single proxy, or empty
314
314
  const effectiveProxies = proxies?.length ? proxies :
@@ -351,12 +351,12 @@ export async function smartFetch(url, options = {}) {
351
351
  /* ---- CloakBrowser direct path (if explicitly requested) -------------- */
352
352
  if (cloaked) {
353
353
  try {
354
+ // @ts-ignore — proprietary module, gitignored
354
355
  const { cloakFetch, isCloakBrowserAvailable } = await import('./cloak-fetch.js');
355
356
  if (!isCloakBrowserAvailable()) {
356
357
  throw new Error('CloakBrowser not installed. Run: npm install cloakbrowser playwright-core');
357
358
  }
358
- if (process.env.DEBUG)
359
- console.debug('[webpeel]', 'Using CloakBrowser stealth (explicitly requested)');
359
+ log.debug('Using CloakBrowser stealth (explicitly requested)');
360
360
  const result = await cloakFetch({
361
361
  url,
362
362
  proxy: effectiveProxies[0],
@@ -392,8 +392,7 @@ export async function smartFetch(url, options = {}) {
392
392
  if (!isPeelTLSAvailable()) {
393
393
  throw new Error('PeelTLS binary not found. Build it with: cd peeltls && bash build.sh');
394
394
  }
395
- if (process.env.DEBUG)
396
- console.debug('[webpeel]', 'Using PeelTLS fingerprint spoofing (explicitly requested)');
395
+ log.debug('Using PeelTLS fingerprint spoofing (explicitly requested)');
397
396
  const result = await peelTLSFetch(url, {
398
397
  proxy: firstProxy,
399
398
  headers,
@@ -427,8 +426,7 @@ export async function smartFetch(url, options = {}) {
427
426
  }
428
427
  catch (e) {
429
428
  // Non-fatal: background revalidation failed, stale entry continues serving.
430
- if (process.env.DEBUG)
431
- console.debug('[webpeel]', 'background cache revalidation failed:', e instanceof Error ? e.message : e);
429
+ log.debug('background cache revalidation failed:', e instanceof Error ? e.message : e);
432
430
  }
433
431
  })();
434
432
  }
@@ -500,14 +498,15 @@ export async function smartFetch(url, options = {}) {
500
498
  if (raceTimer)
501
499
  clearTimeout(raceTimer);
502
500
  if (simpleOrTimeout.type === 'simple-success') {
503
- // Check if the content is suspiciously thin or has SPA indicators — escalate to browser if so
504
- if (shouldEscalateForLowContent(simpleOrTimeout.result) || hasSpaIndicators(simpleOrTimeout.result.html)) {
501
+ // Skip escalation when noEscalate=true (Q&A workloads that prefer speed over JS rendering)
502
+ if (!noEscalate && (shouldEscalateForLowContent(simpleOrTimeout.result) || hasSpaIndicators(simpleOrTimeout.result.html))) {
505
503
  shouldUseBrowser = true;
506
504
  }
507
505
  else {
508
506
  // Check whether the response is a bot-challenge page (e.g. Cloudflare, PerimeterX)
509
- const challengeCheck = detectChallenge(simpleOrTimeout.result.html, simpleOrTimeout.result.statusCode);
510
- if (challengeCheck.isChallenge && challengeCheck.confidence >= 0.7) {
507
+ // Skip challenge detection when noEscalate=true (can't fix it with browser anyway)
508
+ const challengeCheck = noEscalate ? null : detectChallenge(simpleOrTimeout.result.html, simpleOrTimeout.result.statusCode);
509
+ if (challengeCheck && challengeCheck.isChallenge && challengeCheck.confidence >= 0.7) {
511
510
  // Escalate — the browser/stealth path will handle it below
512
511
  shouldUseBrowser = true;
513
512
  }
@@ -525,7 +524,8 @@ export async function smartFetch(url, options = {}) {
525
524
  }
526
525
  }
527
526
  if (simpleOrTimeout.type === 'simple-error') {
528
- if (!shouldEscalateSimpleError(simpleOrTimeout.error)) {
527
+ // When noEscalate=true, don't try browser on simple fetch error — just throw
528
+ if (noEscalate || !shouldEscalateSimpleError(simpleOrTimeout.error)) {
529
529
  throw simpleOrTimeout.error;
530
530
  }
531
531
  shouldUseBrowser = true;
@@ -578,8 +578,7 @@ export async function smartFetch(url, options = {}) {
578
578
  }
579
579
  catch (e) {
580
580
  // Race resolution failed — determine which error to propagate
581
- if (process.env.DEBUG)
582
- console.debug('[webpeel]', 'fetch race resolution failed:', e instanceof Error ? e.message : e);
581
+ log.debug('fetch race resolution failed:', e instanceof Error ? e.message : e);
583
582
  if (simpleError &&
584
583
  !shouldEscalateSimpleError(simpleError) &&
585
584
  !isAbortError(simpleError)) {
@@ -694,8 +693,7 @@ export async function smartFetch(url, options = {}) {
694
693
  try {
695
694
  const { peelTLSFetch, isPeelTLSAvailable } = await import('./peel-tls.js');
696
695
  if (isPeelTLSAvailable()) {
697
- if (process.env.DEBUG)
698
- console.debug('[webpeel]', 'Escalating to PeelTLS fingerprint spoofing');
696
+ log.debug('Escalating to PeelTLS fingerprint spoofing');
699
697
  const peelResult = await peelTLSFetch(url, {
700
698
  proxy: currentProxy,
701
699
  headers,
@@ -712,13 +710,11 @@ export async function smartFetch(url, options = {}) {
712
710
  return peelStrategyResult;
713
711
  }
714
712
  // PeelTLS still challenged — fall through to CloakBrowser
715
- if (process.env.DEBUG)
716
- console.debug('[webpeel]', 'PeelTLS still challenged, escalating to CloakBrowser');
713
+ log.debug('PeelTLS still challenged, escalating to CloakBrowser');
717
714
  }
718
715
  }
719
716
  catch (peelError) {
720
- if (process.env.DEBUG)
721
- console.debug('[webpeel]', 'PeelTLS failed:', peelError instanceof Error ? peelError.message : peelError);
717
+ log.debug('PeelTLS failed:', peelError instanceof Error ? peelError.message : peelError);
722
718
  // Fall through to CloakBrowser
723
719
  }
724
720
  }
@@ -727,8 +723,7 @@ export async function smartFetch(url, options = {}) {
727
723
  try {
728
724
  const { cfWorkerFetch, isCfWorkerAvailable } = await import('./cf-worker-proxy.js');
729
725
  if (isCfWorkerAvailable()) {
730
- if (process.env.DEBUG)
731
- console.debug('[webpeel]', 'Escalating to CF Worker proxy');
726
+ log.debug('Escalating to CF Worker proxy');
732
727
  const cfResult = await cfWorkerFetch(url, {
733
728
  headers,
734
729
  timeout: timeoutMs,
@@ -743,22 +738,20 @@ export async function smartFetch(url, options = {}) {
743
738
  recordMethod('cf-worker');
744
739
  return cfStrategyResult;
745
740
  }
746
- if (process.env.DEBUG)
747
- console.debug('[webpeel]', 'CF Worker still challenged, escalating to CloakBrowser');
741
+ log.debug('CF Worker still challenged, escalating to CloakBrowser');
748
742
  }
749
743
  }
750
744
  catch (cfError) {
751
- if (process.env.DEBUG)
752
- console.debug('[webpeel]', 'CF Worker proxy failed:', cfError instanceof Error ? cfError.message : cfError);
745
+ log.debug('CF Worker proxy failed:', cfError instanceof Error ? cfError.message : cfError);
753
746
  }
754
747
  }
755
748
  // If still challenged after CF Worker, try CloakBrowser
756
749
  if (finalResult.challengeDetected) {
757
750
  try {
751
+ // @ts-ignore — proprietary module, gitignored
758
752
  const { cloakFetch, isCloakBrowserAvailable } = await import('./cloak-fetch.js');
759
753
  if (isCloakBrowserAvailable()) {
760
- if (process.env.DEBUG)
761
- console.debug('[webpeel]', 'Escalating to CloakBrowser stealth');
754
+ log.debug('Escalating to CloakBrowser stealth');
762
755
  const cloakResult = await cloakFetch({
763
756
  url,
764
757
  proxy: currentProxy,
@@ -783,8 +776,7 @@ export async function smartFetch(url, options = {}) {
783
776
  }
784
777
  }
785
778
  catch (cloakError) {
786
- if (process.env.DEBUG)
787
- console.debug('[webpeel]', 'CloakBrowser failed:', cloakError instanceof Error ? cloakError.message : cloakError);
779
+ log.debug('CloakBrowser failed:', cloakError instanceof Error ? cloakError.message : cloakError);
788
780
  // Fall through to Google Cache fallback
789
781
  }
790
782
  }
@@ -794,8 +786,7 @@ export async function smartFetch(url, options = {}) {
794
786
  const { fetchGoogleCache } = await import('./google-cache.js');
795
787
  const cacheResult = await fetchGoogleCache(url, { timeout: timeoutMs });
796
788
  if (cacheResult && cacheResult.html.length > 200) {
797
- if (process.env.DEBUG)
798
- console.debug('[webpeel]', 'Using Google Cache fallback');
789
+ log.debug('Using Google Cache fallback');
799
790
  const cacheStrategyResult = {
800
791
  html: cacheResult.html,
801
792
  url: cacheResult.url,
@@ -807,8 +798,7 @@ export async function smartFetch(url, options = {}) {
807
798
  }
808
799
  }
809
800
  catch (cacheError) {
810
- if (process.env.DEBUG)
811
- console.debug('[webpeel]', 'Google Cache failed:', cacheError);
801
+ log.debug('Google Cache failed:', cacheError);
812
802
  }
813
803
  }
814
804
  // Success (or gave up with challengeDetected=true on the last proxy)
@@ -823,8 +813,7 @@ export async function smartFetch(url, options = {}) {
823
813
  if (isAbortError(e))
824
814
  throw e; // Don't retry on abort
825
815
  // Log and try next proxy
826
- if (process.env.DEBUG)
827
- console.debug('[webpeel]', `proxy ${currentProxy || 'direct'} failed:`, e instanceof Error ? e.message : e);
816
+ log.debug(`proxy ${currentProxy || 'direct'} failed:`, e instanceof Error ? e.message : e);
828
817
  // If last proxy, throw below; otherwise continue loop
829
818
  }
830
819
  }
@@ -836,4 +825,3 @@ export async function smartFetch(url, options = {}) {
836
825
  * @deprecated Use `clearStrategyHooks()` from strategy-hooks.ts instead.
837
826
  */
838
827
  export { clearStrategyHooks as clearDomainIntel } from './strategy-hooks.js';
839
- //# sourceMappingURL=strategies.js.map
@@ -79,4 +79,3 @@ export declare function clearStrategyHooks(): void;
79
79
  * Retrieve the current hooks (internal — used by strategies.ts).
80
80
  */
81
81
  export declare function getStrategyHooks(): Readonly<StrategyHooks>;
82
- //# sourceMappingURL=strategy-hooks.d.ts.map
@@ -30,4 +30,3 @@ export function clearStrategyHooks() {
30
30
  export function getStrategyHooks() {
31
31
  return registeredHooks;
32
32
  }
33
- //# sourceMappingURL=strategy-hooks.js.map
@@ -15,4 +15,3 @@ export interface SummarizeOptions {
15
15
  * Summarize content using an OpenAI-compatible LLM API
16
16
  */
17
17
  export declare function summarizeContent(content: string, options: SummarizeOptions): Promise<string>;
18
- //# sourceMappingURL=summarize.d.ts.map
@@ -76,4 +76,3 @@ ${truncatedContent}`;
76
76
  throw new Error('Summarization failed: Unknown error');
77
77
  }
78
78
  }
79
- //# sourceMappingURL=summarize.js.map
@@ -40,4 +40,3 @@ export interface ExpandedTerm {
40
40
  * The returned array preserves originals first, then synonyms.
41
41
  */
42
42
  export declare function expandWithSynonyms(terms: string[]): ExpandedTerm[];
43
- //# sourceMappingURL=synonyms.d.ts.map
@@ -182,4 +182,3 @@ export function expandWithSynonyms(terms) {
182
182
  }
183
183
  return result;
184
184
  }
185
- //# sourceMappingURL=synonyms.js.map
@@ -28,4 +28,3 @@
28
28
  * ```
29
29
  */
30
30
  export declare function formatTable(rows: Record<string, string | undefined>[], columns?: string[]): string;
31
- //# sourceMappingURL=table-format.d.ts.map
@@ -144,4 +144,3 @@ function deriveColumns(rows) {
144
144
  // Filter out columns that are entirely empty
145
145
  return order.filter(col => rows.some(r => r[col] && r[col].trim().length > 0));
146
146
  }
147
- //# sourceMappingURL=table-format.js.map
@@ -19,4 +19,3 @@ export declare class Timer {
19
19
  end(name: string): number;
20
20
  toTiming(): PipelineTiming;
21
21
  }
22
- //# sourceMappingURL=timing.d.ts.map
@@ -31,4 +31,3 @@ export class Timer {
31
31
  };
32
32
  }
33
33
  }
34
- //# sourceMappingURL=timing.js.map
@@ -55,4 +55,3 @@ export declare function getSecCHUA(userAgent: string): string;
55
55
  * @param userAgent - Full user agent string
56
56
  */
57
57
  export declare function getSecCHUAPlatform(userAgent: string): string;
58
- //# sourceMappingURL=user-agents.d.ts.map
@@ -156,4 +156,3 @@ export function getSecCHUAPlatform(userAgent) {
156
156
  return '"Linux"';
157
157
  return '"Unknown"';
158
158
  }
159
- //# sourceMappingURL=user-agents.js.map
@@ -169,4 +169,3 @@ export declare class WatchManager {
169
169
  * ```
170
170
  */
171
171
  export declare function startWatchChecker(db: pg.Pool): ReturnType<typeof setInterval>;
172
- //# sourceMappingURL=watch-manager.d.ts.map
@@ -387,4 +387,3 @@ export function startWatchChecker(db) {
387
387
  }
388
388
  }, 60_000); // Every 1 minute
389
389
  }
390
- //# sourceMappingURL=watch-manager.js.map
@@ -97,4 +97,3 @@ export declare function parseAssertion(expr: string): Assertion;
97
97
  * ```
98
98
  */
99
99
  export declare function watch(options: WatchOptions): Promise<void>;
100
- //# sourceMappingURL=watch.d.ts.map
@@ -365,4 +365,3 @@ export async function watch(options) {
365
365
  process.removeListener('SIGTERM', handleSignal);
366
366
  }
367
367
  }
368
- //# sourceMappingURL=watch.js.map
@@ -124,4 +124,3 @@ export declare function decodeHtmlEntities(text: string): string;
124
124
  * Format seconds into MM:SS or HH:MM:SS.
125
125
  */
126
126
  export declare function formatDuration(seconds: number): string;
127
- //# sourceMappingURL=youtube.d.ts.map
@@ -753,4 +753,3 @@ function extractMetaTag(html, property) {
753
753
  const m = html.match(regex) ?? html.match(new RegExp(`<meta[^>]+content=["']([^"']+)["'][^>]+(?:property|name)=["']${property.replace(/:/g, '\\:')}["']`, 'i'));
754
754
  return m ? decodeHtmlEntities(m[1]) : null;
755
755
  }
756
- //# sourceMappingURL=youtube.js.map
package/dist/index.d.ts CHANGED
@@ -35,7 +35,12 @@ export { quickAnswer, type QuickAnswerOptions, type QuickAnswerResult } from './
35
35
  export { extractValueFromPassage, smartExtractSchemaFields } from './core/schema-postprocess.js';
36
36
  export { Timer, type PipelineTiming } from './core/timing.js';
37
37
  export { chunkContent, type ChunkOptions, type ContentChunk, type ChunkResult } from './core/chunker.js';
38
- export { searchFallback, type SearchFallbackResult } from './core/search-fallback.js';
38
+ export type SearchFallbackResult = {
39
+ content: string;
40
+ url: string;
41
+ method: string;
42
+ };
43
+ export declare function searchFallback(..._args: any[]): Promise<SearchFallbackResult | null>;
39
44
  export { peelTLSFetch, isPeelTLSAvailable, shutdownPeelTLS, type PeelTLSOptions, type PeelTLSResult } from './core/peel-tls.js';
40
45
  /**
41
46
  * Fetch and extract content from a URL
@@ -87,7 +92,8 @@ export { humanDelay, humanMouseMove, humanRead, warmupBrowse, humanType, humanCl
87
92
  export { SCHEMA_TEMPLATES, getSchemaTemplate, listSchemaTemplates, type SchemaTemplate } from './core/schema-templates.js';
88
93
  export { WebPeelLoader, type WebPeelLoaderOptions } from './integrations/langchain.js';
89
94
  export { WebPeelReader, type WebPeelReaderOptions } from './integrations/llamaindex.js';
90
- export { applyStealthPatches, applyAcceptLanguageHeader } from './core/stealth-patches.js';
95
+ export declare function applyStealthPatches(page: any): Promise<void>;
96
+ export declare function applyAcceptLanguageHeader(page: any, lang?: string): Promise<void>;
91
97
  export { fetchGoogleCache, isGoogleCacheAvailable, type GoogleCacheResult } from './core/google-cache.js';
92
98
  export { cfWorkerFetch, isCfWorkerAvailable, type CfWorkerProxyOptions, type CfWorkerProxyResult } from './core/cf-worker-proxy.js';
93
99
  /**
@@ -117,4 +123,3 @@ export declare class WebPeel {
117
123
  /** Extract structured data */
118
124
  extract(url: string, _schema: Record<string, unknown>, options?: PeelOptions): Promise<unknown>;
119
125
  }
120
- //# sourceMappingURL=index.d.ts.map
package/dist/index.js CHANGED
@@ -36,7 +36,16 @@ export { quickAnswer } from './core/quick-answer.js';
36
36
  export { extractValueFromPassage, smartExtractSchemaFields } from './core/schema-postprocess.js';
37
37
  export { Timer } from './core/timing.js';
38
38
  export { chunkContent } from './core/chunker.js';
39
- export { searchFallback } from './core/search-fallback.js';
39
+ export async function searchFallback(..._args) {
40
+ // @ts-ignore — proprietary module, gitignored
41
+ try {
42
+ const m = await import('./core/search-fallback.js');
43
+ return m.searchFallback(..._args);
44
+ }
45
+ catch {
46
+ return null;
47
+ }
48
+ }
40
49
  export { peelTLSFetch, isPeelTLSAvailable, shutdownPeelTLS } from './core/peel-tls.js';
41
50
  /**
42
51
  * Fetch and extract content from a URL
@@ -132,7 +141,23 @@ export { WebPeelLoader } from './integrations/langchain.js';
132
141
  export { WebPeelReader } from './integrations/llamaindex.js';
133
142
  // Advanced stealth utilities — for power users who want to apply extra evasions
134
143
  // to their own Playwright pages.
135
- export { applyStealthPatches, applyAcceptLanguageHeader } from './core/stealth-patches.js';
144
+ // stealth-patches: proprietary module, loaded at runtime only
145
+ export async function applyStealthPatches(page) {
146
+ // @ts-ignore — proprietary module, gitignored
147
+ try {
148
+ const m = await import('./core/stealth-patches.js');
149
+ await m.applyStealthPatches(page);
150
+ }
151
+ catch { /* not available */ }
152
+ }
153
+ export async function applyAcceptLanguageHeader(page, lang) {
154
+ // @ts-ignore — proprietary module, gitignored
155
+ try {
156
+ const m = await import('./core/stealth-patches.js');
157
+ await m.applyAcceptLanguageHeader(page, lang);
158
+ }
159
+ catch { /* not available */ }
160
+ }
136
161
  // Google Cache fallback — fetch cached copies of blocked pages
137
162
  export { fetchGoogleCache, isGoogleCacheAvailable } from './core/google-cache.js';
138
163
  export { cfWorkerFetch, isCfWorkerAvailable } from './core/cf-worker-proxy.js';
@@ -181,4 +206,3 @@ export class WebPeel {
181
206
  return result;
182
207
  }
183
208
  }
184
- //# sourceMappingURL=index.js.map
@@ -1,3 +1,2 @@
1
1
  export { WebPeelLoader, type WebPeelLoaderOptions, type Document } from './langchain.js';
2
2
  export { WebPeelReader, type WebPeelReaderOptions, type LlamaDocument } from './llamaindex.js';
3
- //# sourceMappingURL=index.d.ts.map
@@ -1,3 +1,2 @@
1
1
  export { WebPeelLoader } from './langchain.js';
2
2
  export { WebPeelReader } from './llamaindex.js';
3
- //# sourceMappingURL=index.js.map
@@ -62,4 +62,3 @@ export declare class WebPeelLoader {
62
62
  */
63
63
  lazyLoad(): AsyncGenerator<Document>;
64
64
  }
65
- //# sourceMappingURL=langchain.d.ts.map
@@ -113,4 +113,3 @@ export class WebPeelLoader {
113
113
  }
114
114
  }
115
115
  }
116
- //# sourceMappingURL=langchain.js.map