@iflow-mcp/jakeliume-webpeel 0.22.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 (547) hide show
  1. package/LICENSE +15 -0
  2. package/README.md +313 -0
  3. package/dist/cache.d.ts +30 -0
  4. package/dist/cache.js +139 -0
  5. package/dist/cli/commands/auth.d.ts +5 -0
  6. package/dist/cli/commands/auth.js +411 -0
  7. package/dist/cli/commands/doctor.d.ts +37 -0
  8. package/dist/cli/commands/doctor.js +371 -0
  9. package/dist/cli/commands/fetch.d.ts +6 -0
  10. package/dist/cli/commands/fetch.js +1345 -0
  11. package/dist/cli/commands/guide.d.ts +2 -0
  12. package/dist/cli/commands/guide.js +183 -0
  13. package/dist/cli/commands/interact.d.ts +5 -0
  14. package/dist/cli/commands/interact.js +840 -0
  15. package/dist/cli/commands/jobs.d.ts +5 -0
  16. package/dist/cli/commands/jobs.js +997 -0
  17. package/dist/cli/commands/monitor.d.ts +12 -0
  18. package/dist/cli/commands/monitor.js +197 -0
  19. package/dist/cli/commands/observe.d.ts +12 -0
  20. package/dist/cli/commands/observe.js +158 -0
  21. package/dist/cli/commands/screenshot.d.ts +5 -0
  22. package/dist/cli/commands/screenshot.js +282 -0
  23. package/dist/cli/commands/search.d.ts +5 -0
  24. package/dist/cli/commands/search.js +1021 -0
  25. package/dist/cli/commands/setup.d.ts +13 -0
  26. package/dist/cli/commands/setup.js +244 -0
  27. package/dist/cli/commands/skill.d.ts +15 -0
  28. package/dist/cli/commands/skill.js +195 -0
  29. package/dist/cli/utils.d.ts +84 -0
  30. package/dist/cli/utils.js +806 -0
  31. package/dist/cli-auth.d.ts +75 -0
  32. package/dist/cli-auth.js +369 -0
  33. package/dist/cli.d.ts +17 -0
  34. package/dist/cli.js +99 -0
  35. package/dist/core/actions.d.ts +69 -0
  36. package/dist/core/actions.js +495 -0
  37. package/dist/core/agent.d.ts +98 -0
  38. package/dist/core/agent.js +558 -0
  39. package/dist/core/answer.d.ts +42 -0
  40. package/dist/core/answer.js +395 -0
  41. package/dist/core/application-tracker.d.ts +84 -0
  42. package/dist/core/application-tracker.js +184 -0
  43. package/dist/core/apply.d.ts +162 -0
  44. package/dist/core/apply.js +816 -0
  45. package/dist/core/auth-detection.d.ts +35 -0
  46. package/dist/core/auth-detection.js +358 -0
  47. package/dist/core/auto-extract.d.ts +82 -0
  48. package/dist/core/auto-extract.js +604 -0
  49. package/dist/core/auto-interact.d.ts +23 -0
  50. package/dist/core/auto-interact.js +246 -0
  51. package/dist/core/bm25-filter.d.ts +66 -0
  52. package/dist/core/bm25-filter.js +288 -0
  53. package/dist/core/branding.d.ts +54 -0
  54. package/dist/core/branding.js +234 -0
  55. package/dist/core/browser-fetch.d.ts +323 -0
  56. package/dist/core/browser-fetch.js +1600 -0
  57. package/dist/core/browser-pool.d.ts +91 -0
  58. package/dist/core/browser-pool.js +550 -0
  59. package/dist/core/budget.d.ts +42 -0
  60. package/dist/core/budget.js +324 -0
  61. package/dist/core/business-intel.d.ts +47 -0
  62. package/dist/core/business-intel.js +279 -0
  63. package/dist/core/cache.d.ts +13 -0
  64. package/dist/core/cache.js +121 -0
  65. package/dist/core/cf-worker-proxy.d.ts +32 -0
  66. package/dist/core/cf-worker-proxy.js +87 -0
  67. package/dist/core/challenge-detection.d.ts +26 -0
  68. package/dist/core/challenge-detection.js +468 -0
  69. package/dist/core/change-tracking.d.ts +75 -0
  70. package/dist/core/change-tracking.js +276 -0
  71. package/dist/core/chunker.d.ts +46 -0
  72. package/dist/core/chunker.js +249 -0
  73. package/dist/core/chunking.d.ts +42 -0
  74. package/dist/core/chunking.js +181 -0
  75. package/dist/core/circuit-breaker.d.ts +44 -0
  76. package/dist/core/circuit-breaker.js +85 -0
  77. package/dist/core/content-pruner.d.ts +47 -0
  78. package/dist/core/content-pruner.js +425 -0
  79. package/dist/core/cookie-cache.d.ts +60 -0
  80. package/dist/core/cookie-cache.js +163 -0
  81. package/dist/core/crawl-checkpoint.d.ts +54 -0
  82. package/dist/core/crawl-checkpoint.js +104 -0
  83. package/dist/core/crawler.d.ts +84 -0
  84. package/dist/core/crawler.js +349 -0
  85. package/dist/core/cross-verify.d.ts +27 -0
  86. package/dist/core/cross-verify.js +93 -0
  87. package/dist/core/deep-fetch.d.ts +74 -0
  88. package/dist/core/deep-fetch.js +405 -0
  89. package/dist/core/deep-research.d.ts +141 -0
  90. package/dist/core/deep-research.js +972 -0
  91. package/dist/core/design-analysis.d.ts +70 -0
  92. package/dist/core/design-analysis.js +490 -0
  93. package/dist/core/design-compare.d.ts +38 -0
  94. package/dist/core/design-compare.js +264 -0
  95. package/dist/core/diff.d.ts +61 -0
  96. package/dist/core/diff.js +289 -0
  97. package/dist/core/dns-cache.d.ts +20 -0
  98. package/dist/core/dns-cache.js +198 -0
  99. package/dist/core/documents.d.ts +23 -0
  100. package/dist/core/documents.js +123 -0
  101. package/dist/core/domain-memory.d.ts +66 -0
  102. package/dist/core/domain-memory.js +163 -0
  103. package/dist/core/domain-verify.d.ts +40 -0
  104. package/dist/core/domain-verify.js +379 -0
  105. package/dist/core/engine-ranker.d.ts +112 -0
  106. package/dist/core/engine-ranker.js +395 -0
  107. package/dist/core/extract-inline.d.ts +38 -0
  108. package/dist/core/extract-inline.js +215 -0
  109. package/dist/core/extract-listings.d.ts +38 -0
  110. package/dist/core/extract-listings.js +461 -0
  111. package/dist/core/extract.d.ts +9 -0
  112. package/dist/core/extract.js +139 -0
  113. package/dist/core/fetch-cache.d.ts +57 -0
  114. package/dist/core/fetch-cache.js +95 -0
  115. package/dist/core/fetcher.d.ts +13 -0
  116. package/dist/core/fetcher.js +12 -0
  117. package/dist/core/google-cache.d.ts +29 -0
  118. package/dist/core/google-cache.js +180 -0
  119. package/dist/core/google-serp-parser.d.ts +82 -0
  120. package/dist/core/google-serp-parser.js +287 -0
  121. package/dist/core/hotel-search.d.ts +122 -0
  122. package/dist/core/hotel-search.js +382 -0
  123. package/dist/core/http-fetch.d.ts +72 -0
  124. package/dist/core/http-fetch.js +820 -0
  125. package/dist/core/human.d.ts +175 -0
  126. package/dist/core/human.js +680 -0
  127. package/dist/core/image-caption.d.ts +44 -0
  128. package/dist/core/image-caption.js +271 -0
  129. package/dist/core/jobs.d.ts +75 -0
  130. package/dist/core/jobs.js +634 -0
  131. package/dist/core/json-ld.d.ts +15 -0
  132. package/dist/core/json-ld.js +617 -0
  133. package/dist/core/language-detect.d.ts +18 -0
  134. package/dist/core/language-detect.js +135 -0
  135. package/dist/core/links.d.ts +10 -0
  136. package/dist/core/links.js +44 -0
  137. package/dist/core/llm-extract.d.ts +71 -0
  138. package/dist/core/llm-extract.js +507 -0
  139. package/dist/core/llm-provider.d.ts +100 -0
  140. package/dist/core/llm-provider.js +702 -0
  141. package/dist/core/local-search.d.ts +60 -0
  142. package/dist/core/local-search.js +308 -0
  143. package/dist/core/logger.d.ts +28 -0
  144. package/dist/core/logger.js +104 -0
  145. package/dist/core/map.d.ts +33 -0
  146. package/dist/core/map.js +127 -0
  147. package/dist/core/markdown.d.ts +92 -0
  148. package/dist/core/markdown.js +809 -0
  149. package/dist/core/metadata.d.ts +34 -0
  150. package/dist/core/metadata.js +422 -0
  151. package/dist/core/observe.d.ts +113 -0
  152. package/dist/core/observe.js +395 -0
  153. package/dist/core/ocr.d.ts +12 -0
  154. package/dist/core/ocr.js +33 -0
  155. package/dist/core/paginate.d.ts +31 -0
  156. package/dist/core/paginate.js +106 -0
  157. package/dist/core/pdf.d.ts +8 -0
  158. package/dist/core/pdf.js +25 -0
  159. package/dist/core/peel-tls.d.ts +25 -0
  160. package/dist/core/peel-tls.js +220 -0
  161. package/dist/core/pipeline.d.ts +132 -0
  162. package/dist/core/pipeline.js +1666 -0
  163. package/dist/core/profiles.d.ts +61 -0
  164. package/dist/core/profiles.js +350 -0
  165. package/dist/core/prompt-guard.d.ts +30 -0
  166. package/dist/core/prompt-guard.js +119 -0
  167. package/dist/core/proxy-config.d.ts +90 -0
  168. package/dist/core/proxy-config.js +172 -0
  169. package/dist/core/quick-answer.d.ts +53 -0
  170. package/dist/core/quick-answer.js +833 -0
  171. package/dist/core/rate-governor.d.ts +80 -0
  172. package/dist/core/rate-governor.js +238 -0
  173. package/dist/core/readability.d.ts +57 -0
  174. package/dist/core/readability.js +533 -0
  175. package/dist/core/research.d.ts +66 -0
  176. package/dist/core/research.js +270 -0
  177. package/dist/core/retry.d.ts +60 -0
  178. package/dist/core/retry.js +119 -0
  179. package/dist/core/safe-browsing.d.ts +30 -0
  180. package/dist/core/safe-browsing.js +206 -0
  181. package/dist/core/schema-extraction.d.ts +66 -0
  182. package/dist/core/schema-extraction.js +352 -0
  183. package/dist/core/schema-postprocess.d.ts +32 -0
  184. package/dist/core/schema-postprocess.js +469 -0
  185. package/dist/core/schema-templates.d.ts +19 -0
  186. package/dist/core/schema-templates.js +143 -0
  187. package/dist/core/screenshot.d.ts +224 -0
  188. package/dist/core/screenshot.js +207 -0
  189. package/dist/core/search-engines.d.ts +25 -0
  190. package/dist/core/search-engines.js +182 -0
  191. package/dist/core/search-provider.d.ts +243 -0
  192. package/dist/core/search-provider.js +1629 -0
  193. package/dist/core/searxng-provider.d.ts +35 -0
  194. package/dist/core/searxng-provider.js +105 -0
  195. package/dist/core/selective-evidence.d.ts +151 -0
  196. package/dist/core/selective-evidence.js +389 -0
  197. package/dist/core/site-search.d.ts +44 -0
  198. package/dist/core/site-search.js +252 -0
  199. package/dist/core/sitemap.d.ts +23 -0
  200. package/dist/core/sitemap.js +105 -0
  201. package/dist/core/source-credibility.d.ts +29 -0
  202. package/dist/core/source-credibility.js +584 -0
  203. package/dist/core/source-scoring.d.ts +166 -0
  204. package/dist/core/source-scoring.js +396 -0
  205. package/dist/core/stemmer.d.ts +38 -0
  206. package/dist/core/stemmer.js +509 -0
  207. package/dist/core/strategies.d.ts +104 -0
  208. package/dist/core/strategies.js +1044 -0
  209. package/dist/core/strategy-hooks.d.ts +145 -0
  210. package/dist/core/strategy-hooks.js +74 -0
  211. package/dist/core/structured-extract.d.ts +43 -0
  212. package/dist/core/structured-extract.js +550 -0
  213. package/dist/core/summarize.d.ts +17 -0
  214. package/dist/core/summarize.js +78 -0
  215. package/dist/core/synonyms.d.ts +42 -0
  216. package/dist/core/synonyms.js +184 -0
  217. package/dist/core/system-monitor.d.ts +61 -0
  218. package/dist/core/system-monitor.js +133 -0
  219. package/dist/core/table-format.d.ts +30 -0
  220. package/dist/core/table-format.js +146 -0
  221. package/dist/core/threat-feeds.d.ts +23 -0
  222. package/dist/core/threat-feeds.js +104 -0
  223. package/dist/core/timing.d.ts +21 -0
  224. package/dist/core/timing.js +33 -0
  225. package/dist/core/transcript-export.d.ts +47 -0
  226. package/dist/core/transcript-export.js +107 -0
  227. package/dist/core/user-agents.d.ts +82 -0
  228. package/dist/core/user-agents.js +239 -0
  229. package/dist/core/vertical-search.d.ts +54 -0
  230. package/dist/core/vertical-search.js +158 -0
  231. package/dist/core/watch-manager.d.ts +175 -0
  232. package/dist/core/watch-manager.js +416 -0
  233. package/dist/core/watch.d.ts +101 -0
  234. package/dist/core/watch.js +389 -0
  235. package/dist/core/youtube.d.ts +130 -0
  236. package/dist/core/youtube.js +1175 -0
  237. package/dist/ee/challenge-re-export.d.ts +1 -0
  238. package/dist/ee/challenge-re-export.js +1 -0
  239. package/dist/ee/challenge-solver.d.ts +72 -0
  240. package/dist/ee/challenge-solver.js +720 -0
  241. package/dist/ee/domain-extractors.d.ts +8 -0
  242. package/dist/ee/domain-extractors.js +8 -0
  243. package/dist/ee/domain-intel.d.ts +16 -0
  244. package/dist/ee/domain-intel.js +133 -0
  245. package/dist/ee/extractors/allrecipes.d.ts +2 -0
  246. package/dist/ee/extractors/allrecipes.js +120 -0
  247. package/dist/ee/extractors/amazon.d.ts +2 -0
  248. package/dist/ee/extractors/amazon.js +78 -0
  249. package/dist/ee/extractors/arxiv.d.ts +2 -0
  250. package/dist/ee/extractors/arxiv.js +137 -0
  251. package/dist/ee/extractors/bestbuy.d.ts +2 -0
  252. package/dist/ee/extractors/bestbuy.js +78 -0
  253. package/dist/ee/extractors/carscom.d.ts +2 -0
  254. package/dist/ee/extractors/carscom.js +121 -0
  255. package/dist/ee/extractors/coingecko.d.ts +2 -0
  256. package/dist/ee/extractors/coingecko.js +134 -0
  257. package/dist/ee/extractors/craigslist.d.ts +2 -0
  258. package/dist/ee/extractors/craigslist.js +92 -0
  259. package/dist/ee/extractors/devto.d.ts +2 -0
  260. package/dist/ee/extractors/devto.js +135 -0
  261. package/dist/ee/extractors/ebay.d.ts +2 -0
  262. package/dist/ee/extractors/ebay.js +90 -0
  263. package/dist/ee/extractors/espn.d.ts +2 -0
  264. package/dist/ee/extractors/espn.js +260 -0
  265. package/dist/ee/extractors/etsy.d.ts +2 -0
  266. package/dist/ee/extractors/etsy.js +52 -0
  267. package/dist/ee/extractors/facebook.d.ts +2 -0
  268. package/dist/ee/extractors/facebook.js +46 -0
  269. package/dist/ee/extractors/github.d.ts +2 -0
  270. package/dist/ee/extractors/github.js +196 -0
  271. package/dist/ee/extractors/google-flights.d.ts +2 -0
  272. package/dist/ee/extractors/google-flights.js +176 -0
  273. package/dist/ee/extractors/hackernews.d.ts +2 -0
  274. package/dist/ee/extractors/hackernews.js +147 -0
  275. package/dist/ee/extractors/imdb.d.ts +2 -0
  276. package/dist/ee/extractors/imdb.js +172 -0
  277. package/dist/ee/extractors/index.d.ts +26 -0
  278. package/dist/ee/extractors/index.js +247 -0
  279. package/dist/ee/extractors/instagram.d.ts +2 -0
  280. package/dist/ee/extractors/instagram.js +102 -0
  281. package/dist/ee/extractors/kalshi.d.ts +2 -0
  282. package/dist/ee/extractors/kalshi.js +121 -0
  283. package/dist/ee/extractors/kayak-cars.d.ts +2 -0
  284. package/dist/ee/extractors/kayak-cars.js +270 -0
  285. package/dist/ee/extractors/linkedin.d.ts +2 -0
  286. package/dist/ee/extractors/linkedin.js +113 -0
  287. package/dist/ee/extractors/medium.d.ts +2 -0
  288. package/dist/ee/extractors/medium.js +130 -0
  289. package/dist/ee/extractors/news.d.ts +4 -0
  290. package/dist/ee/extractors/news.js +173 -0
  291. package/dist/ee/extractors/npm.d.ts +2 -0
  292. package/dist/ee/extractors/npm.js +86 -0
  293. package/dist/ee/extractors/pdf.d.ts +2 -0
  294. package/dist/ee/extractors/pdf.js +108 -0
  295. package/dist/ee/extractors/pinterest.d.ts +2 -0
  296. package/dist/ee/extractors/pinterest.js +34 -0
  297. package/dist/ee/extractors/polymarket.d.ts +2 -0
  298. package/dist/ee/extractors/polymarket.js +358 -0
  299. package/dist/ee/extractors/producthunt.d.ts +2 -0
  300. package/dist/ee/extractors/producthunt.js +88 -0
  301. package/dist/ee/extractors/pubmed.d.ts +2 -0
  302. package/dist/ee/extractors/pubmed.js +162 -0
  303. package/dist/ee/extractors/pypi.d.ts +2 -0
  304. package/dist/ee/extractors/pypi.js +80 -0
  305. package/dist/ee/extractors/reddit.d.ts +2 -0
  306. package/dist/ee/extractors/reddit.js +438 -0
  307. package/dist/ee/extractors/redfin.d.ts +2 -0
  308. package/dist/ee/extractors/redfin.js +156 -0
  309. package/dist/ee/extractors/semanticscholar.d.ts +2 -0
  310. package/dist/ee/extractors/semanticscholar.js +131 -0
  311. package/dist/ee/extractors/shared.d.ts +12 -0
  312. package/dist/ee/extractors/shared.js +76 -0
  313. package/dist/ee/extractors/soundcloud.d.ts +2 -0
  314. package/dist/ee/extractors/soundcloud.js +34 -0
  315. package/dist/ee/extractors/sportsbetting.d.ts +2 -0
  316. package/dist/ee/extractors/sportsbetting.js +37 -0
  317. package/dist/ee/extractors/spotify.d.ts +2 -0
  318. package/dist/ee/extractors/spotify.js +34 -0
  319. package/dist/ee/extractors/stackoverflow.d.ts +2 -0
  320. package/dist/ee/extractors/stackoverflow.js +61 -0
  321. package/dist/ee/extractors/substack.d.ts +2 -0
  322. package/dist/ee/extractors/substack.js +115 -0
  323. package/dist/ee/extractors/substackroot.d.ts +2 -0
  324. package/dist/ee/extractors/substackroot.js +46 -0
  325. package/dist/ee/extractors/tiktok.d.ts +2 -0
  326. package/dist/ee/extractors/tiktok.js +29 -0
  327. package/dist/ee/extractors/tradingview.d.ts +2 -0
  328. package/dist/ee/extractors/tradingview.js +182 -0
  329. package/dist/ee/extractors/twitch.d.ts +2 -0
  330. package/dist/ee/extractors/twitch.js +36 -0
  331. package/dist/ee/extractors/twitter.d.ts +2 -0
  332. package/dist/ee/extractors/twitter.js +327 -0
  333. package/dist/ee/extractors/types.d.ts +14 -0
  334. package/dist/ee/extractors/types.js +1 -0
  335. package/dist/ee/extractors/walmart.d.ts +2 -0
  336. package/dist/ee/extractors/walmart.js +50 -0
  337. package/dist/ee/extractors/weather.d.ts +2 -0
  338. package/dist/ee/extractors/weather.js +133 -0
  339. package/dist/ee/extractors/wikipedia.d.ts +4 -0
  340. package/dist/ee/extractors/wikipedia.js +235 -0
  341. package/dist/ee/extractors/yelp.d.ts +2 -0
  342. package/dist/ee/extractors/yelp.js +216 -0
  343. package/dist/ee/extractors/youtube.d.ts +2 -0
  344. package/dist/ee/extractors/youtube.js +189 -0
  345. package/dist/ee/extractors/zillow.d.ts +54 -0
  346. package/dist/ee/extractors/zillow.js +247 -0
  347. package/dist/ee/extractors-re-export.d.ts +1 -0
  348. package/dist/ee/extractors-re-export.js +1 -0
  349. package/dist/ee/premium-hooks.d.ts +20 -0
  350. package/dist/ee/premium-hooks.js +50 -0
  351. package/dist/ee/spa-detection.d.ts +2 -0
  352. package/dist/ee/spa-detection.js +2 -0
  353. package/dist/ee/stability.d.ts +4 -0
  354. package/dist/ee/stability.js +29 -0
  355. package/dist/ee/swr-cache.d.ts +14 -0
  356. package/dist/ee/swr-cache.js +34 -0
  357. package/dist/index.d.ts +143 -0
  358. package/dist/index.js +291 -0
  359. package/dist/integrations/index.d.ts +2 -0
  360. package/dist/integrations/index.js +2 -0
  361. package/dist/integrations/langchain.d.ts +64 -0
  362. package/dist/integrations/langchain.js +115 -0
  363. package/dist/integrations/llamaindex.d.ts +50 -0
  364. package/dist/integrations/llamaindex.js +91 -0
  365. package/dist/mcp/handlers/act.d.ts +5 -0
  366. package/dist/mcp/handlers/act.js +34 -0
  367. package/dist/mcp/handlers/definitions.d.ts +6 -0
  368. package/dist/mcp/handlers/definitions.js +395 -0
  369. package/dist/mcp/handlers/extract.d.ts +7 -0
  370. package/dist/mcp/handlers/extract.js +135 -0
  371. package/dist/mcp/handlers/fetch.d.ts +6 -0
  372. package/dist/mcp/handlers/fetch.js +98 -0
  373. package/dist/mcp/handlers/find.d.ts +5 -0
  374. package/dist/mcp/handlers/find.js +137 -0
  375. package/dist/mcp/handlers/index.d.ts +13 -0
  376. package/dist/mcp/handlers/index.js +63 -0
  377. package/dist/mcp/handlers/legacy.d.ts +25 -0
  378. package/dist/mcp/handlers/legacy.js +450 -0
  379. package/dist/mcp/handlers/meta.d.ts +6 -0
  380. package/dist/mcp/handlers/meta.js +40 -0
  381. package/dist/mcp/handlers/monitor.d.ts +5 -0
  382. package/dist/mcp/handlers/monitor.js +41 -0
  383. package/dist/mcp/handlers/observe.d.ts +8 -0
  384. package/dist/mcp/handlers/observe.js +37 -0
  385. package/dist/mcp/handlers/read.d.ts +6 -0
  386. package/dist/mcp/handlers/read.js +78 -0
  387. package/dist/mcp/handlers/see.d.ts +5 -0
  388. package/dist/mcp/handlers/see.js +75 -0
  389. package/dist/mcp/handlers/types.d.ts +29 -0
  390. package/dist/mcp/handlers/types.js +28 -0
  391. package/dist/mcp/server.d.ts +7 -0
  392. package/dist/mcp/server.js +108 -0
  393. package/dist/mcp/smart-router.d.ts +23 -0
  394. package/dist/mcp/smart-router.js +178 -0
  395. package/dist/server/app.d.ts +14 -0
  396. package/dist/server/app.js +632 -0
  397. package/dist/server/auth-store.d.ts +28 -0
  398. package/dist/server/auth-store.js +88 -0
  399. package/dist/server/bull-queues.d.ts +60 -0
  400. package/dist/server/bull-queues.js +90 -0
  401. package/dist/server/email-service.d.ts +55 -0
  402. package/dist/server/email-service.js +291 -0
  403. package/dist/server/job-queue.d.ts +100 -0
  404. package/dist/server/job-queue.js +145 -0
  405. package/dist/server/logger.d.ts +10 -0
  406. package/dist/server/logger.js +37 -0
  407. package/dist/server/middleware/audit-log.d.ts +14 -0
  408. package/dist/server/middleware/audit-log.js +73 -0
  409. package/dist/server/middleware/auth.d.ts +35 -0
  410. package/dist/server/middleware/auth.js +225 -0
  411. package/dist/server/middleware/rate-limit.d.ts +50 -0
  412. package/dist/server/middleware/rate-limit.js +270 -0
  413. package/dist/server/middleware/scope-guard.d.ts +25 -0
  414. package/dist/server/middleware/scope-guard.js +45 -0
  415. package/dist/server/middleware/url-validator.d.ts +15 -0
  416. package/dist/server/middleware/url-validator.js +201 -0
  417. package/dist/server/openapi.yaml +6418 -0
  418. package/dist/server/pg-auth-store.d.ts +146 -0
  419. package/dist/server/pg-auth-store.js +576 -0
  420. package/dist/server/pg-job-queue.d.ts +59 -0
  421. package/dist/server/pg-job-queue.js +375 -0
  422. package/dist/server/routes/activity.d.ts +6 -0
  423. package/dist/server/routes/activity.js +79 -0
  424. package/dist/server/routes/admin-active.d.ts +7 -0
  425. package/dist/server/routes/admin-active.js +120 -0
  426. package/dist/server/routes/admin-stats.d.ts +7 -0
  427. package/dist/server/routes/admin-stats.js +176 -0
  428. package/dist/server/routes/agent.d.ts +24 -0
  429. package/dist/server/routes/agent.js +480 -0
  430. package/dist/server/routes/answer.d.ts +5 -0
  431. package/dist/server/routes/answer.js +125 -0
  432. package/dist/server/routes/ask.d.ts +28 -0
  433. package/dist/server/routes/ask.js +295 -0
  434. package/dist/server/routes/batch.d.ts +6 -0
  435. package/dist/server/routes/batch.js +493 -0
  436. package/dist/server/routes/cache-warm.d.ts +25 -0
  437. package/dist/server/routes/cache-warm.js +212 -0
  438. package/dist/server/routes/cli-usage.d.ts +6 -0
  439. package/dist/server/routes/cli-usage.js +127 -0
  440. package/dist/server/routes/compat.d.ts +23 -0
  441. package/dist/server/routes/compat.js +652 -0
  442. package/dist/server/routes/crawl.d.ts +13 -0
  443. package/dist/server/routes/crawl.js +287 -0
  444. package/dist/server/routes/deep-fetch.d.ts +8 -0
  445. package/dist/server/routes/deep-fetch.js +57 -0
  446. package/dist/server/routes/deep-research.d.ts +11 -0
  447. package/dist/server/routes/deep-research.js +232 -0
  448. package/dist/server/routes/demo.d.ts +24 -0
  449. package/dist/server/routes/demo.js +517 -0
  450. package/dist/server/routes/do.d.ts +8 -0
  451. package/dist/server/routes/do.js +72 -0
  452. package/dist/server/routes/extract.d.ts +14 -0
  453. package/dist/server/routes/extract.js +325 -0
  454. package/dist/server/routes/feed.d.ts +15 -0
  455. package/dist/server/routes/feed.js +311 -0
  456. package/dist/server/routes/fetch-queue.d.ts +13 -0
  457. package/dist/server/routes/fetch-queue.js +357 -0
  458. package/dist/server/routes/fetch.d.ts +7 -0
  459. package/dist/server/routes/fetch.js +1274 -0
  460. package/dist/server/routes/go.d.ts +14 -0
  461. package/dist/server/routes/go.js +81 -0
  462. package/dist/server/routes/health.d.ts +11 -0
  463. package/dist/server/routes/health.js +141 -0
  464. package/dist/server/routes/jobs.d.ts +7 -0
  465. package/dist/server/routes/jobs.js +574 -0
  466. package/dist/server/routes/map.d.ts +11 -0
  467. package/dist/server/routes/map.js +116 -0
  468. package/dist/server/routes/mcp.d.ts +14 -0
  469. package/dist/server/routes/mcp.js +197 -0
  470. package/dist/server/routes/metrics.d.ts +37 -0
  471. package/dist/server/routes/metrics.js +149 -0
  472. package/dist/server/routes/oauth.d.ts +9 -0
  473. package/dist/server/routes/oauth.js +396 -0
  474. package/dist/server/routes/playground.d.ts +17 -0
  475. package/dist/server/routes/playground.js +283 -0
  476. package/dist/server/routes/reader.d.ts +18 -0
  477. package/dist/server/routes/reader.js +192 -0
  478. package/dist/server/routes/research.d.ts +14 -0
  479. package/dist/server/routes/research.js +482 -0
  480. package/dist/server/routes/screenshot.d.ts +22 -0
  481. package/dist/server/routes/screenshot.js +820 -0
  482. package/dist/server/routes/search.d.ts +6 -0
  483. package/dist/server/routes/search.js +874 -0
  484. package/dist/server/routes/session.d.ts +17 -0
  485. package/dist/server/routes/session.js +548 -0
  486. package/dist/server/routes/share.d.ts +18 -0
  487. package/dist/server/routes/share.js +462 -0
  488. package/dist/server/routes/smart-search/handlers/cars.d.ts +2 -0
  489. package/dist/server/routes/smart-search/handlers/cars.js +102 -0
  490. package/dist/server/routes/smart-search/handlers/flights.d.ts +2 -0
  491. package/dist/server/routes/smart-search/handlers/flights.js +72 -0
  492. package/dist/server/routes/smart-search/handlers/general.d.ts +13 -0
  493. package/dist/server/routes/smart-search/handlers/general.js +717 -0
  494. package/dist/server/routes/smart-search/handlers/hotels.d.ts +2 -0
  495. package/dist/server/routes/smart-search/handlers/hotels.js +88 -0
  496. package/dist/server/routes/smart-search/handlers/products.d.ts +2 -0
  497. package/dist/server/routes/smart-search/handlers/products.js +1309 -0
  498. package/dist/server/routes/smart-search/handlers/rental.d.ts +2 -0
  499. package/dist/server/routes/smart-search/handlers/rental.js +154 -0
  500. package/dist/server/routes/smart-search/handlers/restaurants.d.ts +2 -0
  501. package/dist/server/routes/smart-search/handlers/restaurants.js +225 -0
  502. package/dist/server/routes/smart-search/handlers/transit-verdict.d.ts +41 -0
  503. package/dist/server/routes/smart-search/handlers/transit-verdict.js +224 -0
  504. package/dist/server/routes/smart-search/index.d.ts +19 -0
  505. package/dist/server/routes/smart-search/index.js +546 -0
  506. package/dist/server/routes/smart-search/intent.d.ts +3 -0
  507. package/dist/server/routes/smart-search/intent.js +264 -0
  508. package/dist/server/routes/smart-search/llm.d.ts +16 -0
  509. package/dist/server/routes/smart-search/llm.js +70 -0
  510. package/dist/server/routes/smart-search/sources/reddit.d.ts +18 -0
  511. package/dist/server/routes/smart-search/sources/reddit.js +34 -0
  512. package/dist/server/routes/smart-search/sources/yelp.d.ts +25 -0
  513. package/dist/server/routes/smart-search/sources/yelp.js +171 -0
  514. package/dist/server/routes/smart-search/sources/youtube.d.ts +8 -0
  515. package/dist/server/routes/smart-search/sources/youtube.js +9 -0
  516. package/dist/server/routes/smart-search/types.d.ts +81 -0
  517. package/dist/server/routes/smart-search/types.js +1 -0
  518. package/dist/server/routes/smart-search/utils.d.ts +20 -0
  519. package/dist/server/routes/smart-search/utils.js +146 -0
  520. package/dist/server/routes/stats.d.ts +6 -0
  521. package/dist/server/routes/stats.js +71 -0
  522. package/dist/server/routes/stripe.d.ts +15 -0
  523. package/dist/server/routes/stripe.js +296 -0
  524. package/dist/server/routes/transcript-export.d.ts +10 -0
  525. package/dist/server/routes/transcript-export.js +178 -0
  526. package/dist/server/routes/usage.d.ts +9 -0
  527. package/dist/server/routes/usage.js +279 -0
  528. package/dist/server/routes/users.d.ts +8 -0
  529. package/dist/server/routes/users.js +1867 -0
  530. package/dist/server/routes/watch.d.ts +15 -0
  531. package/dist/server/routes/watch.js +309 -0
  532. package/dist/server/routes/webhooks.d.ts +26 -0
  533. package/dist/server/routes/webhooks.js +170 -0
  534. package/dist/server/routes/youtube.d.ts +6 -0
  535. package/dist/server/routes/youtube.js +130 -0
  536. package/dist/server/sentry.d.ts +14 -0
  537. package/dist/server/sentry.js +104 -0
  538. package/dist/server/types.d.ts +15 -0
  539. package/dist/server/types.js +7 -0
  540. package/dist/server/utils/response.d.ts +44 -0
  541. package/dist/server/utils/response.js +69 -0
  542. package/dist/server/utils/sse.d.ts +22 -0
  543. package/dist/server/utils/sse.js +38 -0
  544. package/dist/types.d.ts +552 -0
  545. package/dist/types.js +39 -0
  546. package/llms.txt +105 -0
  547. package/package.json +189 -0
@@ -0,0 +1,212 @@
1
+ /**
2
+ * Cache Pre-Warming Routes
3
+ *
4
+ * GET /internal/popular-urls — Top N URLs fetched in the last 24h (for CF Worker)
5
+ * GET /internal/cache-status — Current warmer state (warmed URLs, last run time)
6
+ *
7
+ * Both routes are mounted BEFORE auth middleware so they're accessible internally.
8
+ * /internal/popular-urls is protected by CACHE_WARM_SECRET bearer token when set.
9
+ *
10
+ * startCacheWarmer() — server-side self-warming (opt-in via ENABLE_CACHE_WARM=true)
11
+ */
12
+ import { Router } from 'express';
13
+ import { createLogger } from '../logger.js';
14
+ const log = createLogger('cache-warm');
15
+ // ─── Fallback URLs ────────────────────────────────────────────────────────────
16
+ // Used when the DB has no usage data yet (new deployment / empty DB).
17
+ const FALLBACK_URLS = [
18
+ 'https://www.bbc.com/news',
19
+ 'https://news.ycombinator.com',
20
+ 'https://github.com',
21
+ 'https://en.wikipedia.org/wiki/Main_Page',
22
+ 'https://www.reuters.com',
23
+ 'https://techcrunch.com',
24
+ 'https://stripe.com/docs',
25
+ 'https://developer.mozilla.org',
26
+ 'https://react.dev',
27
+ 'https://docs.python.org/3/',
28
+ 'https://nodejs.org/en/docs',
29
+ 'https://www.npmjs.com',
30
+ 'https://vercel.com/docs',
31
+ 'https://nextjs.org/docs',
32
+ 'https://tailwindcss.com/docs',
33
+ 'https://www.typescriptlang.org/docs/',
34
+ 'https://docs.render.com',
35
+ 'https://cloudflare.com/docs',
36
+ 'https://aws.amazon.com/documentation/',
37
+ 'https://docs.github.com',
38
+ 'https://www.nytimes.com',
39
+ 'https://www.theguardian.com',
40
+ 'https://arstechnica.com',
41
+ 'https://www.wired.com',
42
+ 'https://www.bloomberg.com/technology',
43
+ 'https://lobste.rs',
44
+ 'https://www.producthunt.com',
45
+ 'https://stackoverflow.com',
46
+ 'https://css-tricks.com',
47
+ 'https://web.dev',
48
+ ];
49
+ // ─── In-memory warmer state ───────────────────────────────────────────────────
50
+ const warmerState = {
51
+ warmedUrls: new Set(),
52
+ lastWarmTime: null,
53
+ };
54
+ // ─── Router ──────────────────────────────────────────────────────────────────
55
+ export function createCacheWarmRouter(pool) {
56
+ const router = Router();
57
+ // GET /internal/popular-urls
58
+ router.get('/internal/popular-urls', async (req, res) => {
59
+ // Auth check — if CACHE_WARM_SECRET is set, require it
60
+ const secret = process.env.CACHE_WARM_SECRET;
61
+ if (secret) {
62
+ const authHeader = req.headers['authorization'] || '';
63
+ const token = authHeader.startsWith('Bearer ') ? authHeader.slice(7) : '';
64
+ if (token !== secret) {
65
+ res.status(401).json({
66
+ success: false,
67
+ error: { type: 'unauthorized', message: 'Invalid or missing bearer token.' },
68
+ });
69
+ return;
70
+ }
71
+ }
72
+ let urls = [];
73
+ // Query DB if available
74
+ if (pool) {
75
+ try {
76
+ const result = await pool.query(`
77
+ SELECT url, COUNT(*) as fetch_count
78
+ FROM usage_logs
79
+ WHERE created_at > NOW() - INTERVAL '24 hours'
80
+ AND url IS NOT NULL
81
+ AND status_code >= 200 AND status_code < 300
82
+ AND url NOT LIKE '%localhost%'
83
+ AND url NOT LIKE '%127.0.0.1%'
84
+ AND url NOT LIKE '%169.254%'
85
+ GROUP BY url
86
+ ORDER BY fetch_count DESC
87
+ LIMIT 50
88
+ `);
89
+ urls = result.rows.map((row) => ({
90
+ url: row.url,
91
+ count: parseInt(row.fetch_count, 10),
92
+ }));
93
+ }
94
+ catch (err) {
95
+ log.warn('Failed to query usage_logs, falling back to static list', {
96
+ error: err?.message,
97
+ });
98
+ }
99
+ }
100
+ // Fall back to static list if no DB data
101
+ if (urls.length === 0) {
102
+ log.info('No usage data found, using fallback URL list');
103
+ urls = FALLBACK_URLS.map((url) => ({ url, count: 0 }));
104
+ }
105
+ res.json({
106
+ urls,
107
+ total: urls.length,
108
+ generatedAt: new Date().toISOString(),
109
+ });
110
+ });
111
+ // GET /internal/cache-status
112
+ router.get('/internal/cache-status', (_req, res) => {
113
+ res.json({
114
+ warmedUrls: Array.from(warmerState.warmedUrls),
115
+ urlCount: warmerState.warmedUrls.size,
116
+ lastWarmTime: warmerState.lastWarmTime?.toISOString() ?? null,
117
+ });
118
+ });
119
+ return router;
120
+ }
121
+ // ─── Self-Warming ─────────────────────────────────────────────────────────────
122
+ /**
123
+ * startCacheWarmer — server-side self-warming (fallback when no CF Worker).
124
+ *
125
+ * Every `intervalMs` (default 2 min):
126
+ * 1. Queries /internal/popular-urls (via the DB, not HTTP)
127
+ * 2. Fetches each URL through /r/<url> with concurrency 5
128
+ * 3. Updates warmerState for /internal/cache-status
129
+ *
130
+ * Only started if ENABLE_CACHE_WARM=true.
131
+ */
132
+ export function startCacheWarmer(pool, intervalMs = 900_000) {
133
+ log.info('Cache warmer started', { intervalMs });
134
+ const runWarm = async () => {
135
+ const t0 = Date.now();
136
+ log.info('Cache warm cycle starting');
137
+ // Determine base URL
138
+ // RENDER_EXTERNAL_URL is legacy (Render is retired). On K8s, use PUBLIC_URL or localhost.
139
+ const base = process.env.PUBLIC_URL?.replace(/\/$/, '') ||
140
+ process.env.API_BASE_URL?.replace(/\/$/, '') ||
141
+ `http://localhost:${process.env.PORT || 3000}`;
142
+ // Step 1: Fetch popular URLs (same logic as the endpoint)
143
+ let urls = [];
144
+ if (pool) {
145
+ try {
146
+ const result = await pool.query(`
147
+ SELECT url, COUNT(*) as fetch_count
148
+ FROM usage_logs
149
+ WHERE created_at > NOW() - INTERVAL '24 hours'
150
+ AND url IS NOT NULL
151
+ AND status_code >= 200 AND status_code < 300
152
+ AND url NOT LIKE '%localhost%'
153
+ AND url NOT LIKE '%127.0.0.1%'
154
+ AND url NOT LIKE '%169.254%'
155
+ GROUP BY url
156
+ ORDER BY fetch_count DESC
157
+ LIMIT 50
158
+ `);
159
+ urls = result.rows.map((row) => ({
160
+ url: row.url,
161
+ count: parseInt(row.fetch_count, 10),
162
+ }));
163
+ }
164
+ catch (err) {
165
+ log.warn('Warm cycle: DB query failed, using fallback', { error: err?.message });
166
+ }
167
+ }
168
+ if (urls.length === 0) {
169
+ urls = FALLBACK_URLS.map((u) => ({ url: u, count: 0 }));
170
+ }
171
+ // Step 2: Warm each URL with concurrency 5
172
+ const concurrency = 5;
173
+ let warmed = 0;
174
+ let failed = 0;
175
+ const newWarmedSet = new Set();
176
+ for (let i = 0; i < urls.length; i += concurrency) {
177
+ const batch = urls.slice(i, i + concurrency);
178
+ const results = await Promise.allSettled(batch.map(({ url }) => fetch(`${base}/r/${encodeURIComponent(url)}`, {
179
+ headers: { 'User-Agent': 'WebPeel-CacheWarmer/1.0' },
180
+ signal: AbortSignal.timeout(15_000),
181
+ }).then((r) => {
182
+ if (r.ok) {
183
+ newWarmedSet.add(url);
184
+ warmed++;
185
+ }
186
+ else {
187
+ failed++;
188
+ }
189
+ })));
190
+ // Count settled rejections as failures
191
+ results.forEach((r) => {
192
+ if (r.status === 'rejected') {
193
+ failed++;
194
+ }
195
+ });
196
+ }
197
+ // Step 3: Update state
198
+ warmerState.warmedUrls = newWarmedSet;
199
+ warmerState.lastWarmTime = new Date();
200
+ const elapsed = ((Date.now() - t0) / 1000).toFixed(1);
201
+ log.info(`Warmed ${warmed}/${urls.length} URLs in ${elapsed}s`, { failed });
202
+ };
203
+ // Run once immediately, then on interval
204
+ void runWarm().catch((err) => {
205
+ log.error('Cache warm cycle error', { error: err?.message });
206
+ });
207
+ setInterval(() => {
208
+ void runWarm().catch((err) => {
209
+ log.error('Cache warm cycle error', { error: err?.message });
210
+ });
211
+ }, intervalMs);
212
+ }
@@ -0,0 +1,6 @@
1
+ /**
2
+ * CLI Usage endpoint — works with API key auth (not JWT)
3
+ * Used by the `webpeel usage` command and pre-fetch usage checks
4
+ */
5
+ import { Router } from 'express';
6
+ export declare function createCLIUsageRouter(): Router;
@@ -0,0 +1,127 @@
1
+ /**
2
+ * CLI Usage endpoint — works with API key auth (not JWT)
3
+ * Used by the `webpeel usage` command and pre-fetch usage checks
4
+ */
5
+ import { Router } from 'express';
6
+ import pg from 'pg';
7
+ const { Pool } = pg;
8
+ export function createCLIUsageRouter() {
9
+ const router = Router();
10
+ const dbUrl = process.env.DATABASE_URL;
11
+ if (!dbUrl) {
12
+ // If no DB, return a stub router
13
+ router.get('/v1/cli/usage', (req, res) => {
14
+ res.status(501).json({
15
+ success: false,
16
+ error: {
17
+ type: 'not_configured',
18
+ message: 'Usage tracking requires PostgreSQL backend',
19
+ docs: 'https://webpeel.dev/docs/errors#not_configured',
20
+ },
21
+ requestId: req.requestId,
22
+ });
23
+ });
24
+ return router;
25
+ }
26
+ const pool = new Pool({
27
+ connectionString: dbUrl,
28
+ // TLS: enabled when DATABASE_URL contains sslmode=require.
29
+ // Secure by default (rejectUnauthorized: true); set PG_REJECT_UNAUTHORIZED=false
30
+ // only for managed DBs (Render/Neon/Supabase) that use self-signed certs.
31
+ ssl: process.env.DATABASE_URL?.includes('sslmode=require')
32
+ ? { rejectUnauthorized: process.env.PG_REJECT_UNAUTHORIZED !== 'false' }
33
+ : undefined,
34
+ });
35
+ /**
36
+ * GET /v1/cli/usage
37
+ * Returns usage info for the authenticated API key's owner
38
+ * Auth: API key via Authorization: Bearer <key> or X-API-Key header
39
+ */
40
+ router.get('/v1/cli/usage', async (req, res) => {
41
+ try {
42
+ // Require API key auth (set by global auth middleware)
43
+ if (!req.auth?.keyInfo?.accountId) {
44
+ res.status(401).json({ success: false, error: { type: 'unauthorized', message: 'Valid API key required. Run `webpeel login` to authenticate.', docs: 'https://webpeel.dev/docs/authentication' }, requestId: req.requestId });
45
+ return;
46
+ }
47
+ const userId = req.auth.keyInfo.accountId;
48
+ // Get user plan info
49
+ const planResult = await pool.query('SELECT tier, weekly_limit, burst_limit FROM users WHERE id = $1', [userId]);
50
+ if (planResult.rows.length === 0) {
51
+ res.status(404).json({ success: false, error: { type: 'user_not_found', message: 'User not found', docs: 'https://webpeel.dev/docs/errors#user_not_found' }, requestId: req.requestId });
52
+ return;
53
+ }
54
+ const plan = planResult.rows[0];
55
+ // Current week (ISO format)
56
+ const now = new Date();
57
+ const year = now.getUTCFullYear();
58
+ const jan4 = new Date(Date.UTC(year, 0, 4));
59
+ const weekNum = Math.ceil(((now.getTime() - jan4.getTime()) / 86400000 + jan4.getUTCDay() + 1) / 7);
60
+ const currentWeek = `${year}-W${String(weekNum).padStart(2, '0')}`;
61
+ // Current hour bucket
62
+ const currentHour = now.toISOString().substring(0, 13);
63
+ // Get weekly usage
64
+ const weeklyResult = await pool.query(`SELECT
65
+ COALESCE(SUM(wu.total_count), 0) as total_used,
66
+ COALESCE(SUM(wu.basic_count), 0) as basic_used,
67
+ COALESCE(SUM(wu.stealth_count), 0) as stealth_used,
68
+ COALESCE(SUM(wu.search_count), 0) as search_used
69
+ FROM api_keys ak
70
+ LEFT JOIN weekly_usage wu ON wu.api_key_id = ak.id AND wu.week = $2
71
+ WHERE ak.user_id = $1 AND ak.is_active = true`, [userId, currentWeek]);
72
+ const weekly = weeklyResult.rows[0];
73
+ const totalUsed = parseInt(weekly.total_used) || 0;
74
+ const weeklyLimit = plan.weekly_limit || 125;
75
+ const remaining = Math.max(0, weeklyLimit - totalUsed);
76
+ // Get burst usage
77
+ const burstResult = await pool.query(`SELECT COALESCE(SUM(bu.count), 0) as burst_used
78
+ FROM api_keys ak
79
+ LEFT JOIN burst_usage bu ON bu.api_key_id = ak.id AND bu.hour_bucket = $2
80
+ WHERE ak.user_id = $1 AND ak.is_active = true`, [userId, currentHour]);
81
+ const burstUsed = parseInt(burstResult.rows[0]?.burst_used) || 0;
82
+ const burstLimit = plan.burst_limit || 25;
83
+ const minutesRemaining = 59 - now.getUTCMinutes();
84
+ // Get next Monday reset time
85
+ const dayOfWeek = now.getUTCDay();
86
+ const daysUntilMonday = dayOfWeek === 0 ? 1 : 8 - dayOfWeek;
87
+ const nextMonday = new Date(now);
88
+ nextMonday.setUTCDate(now.getUTCDate() + daysUntilMonday);
89
+ nextMonday.setUTCHours(0, 0, 0, 0);
90
+ res.json({
91
+ plan: {
92
+ tier: plan.tier,
93
+ weeklyLimit,
94
+ burstLimit,
95
+ },
96
+ weekly: {
97
+ used: totalUsed,
98
+ limit: weeklyLimit,
99
+ remaining,
100
+ resetsAt: nextMonday.toISOString(),
101
+ percentUsed: Math.round((totalUsed / weeklyLimit) * 100),
102
+ },
103
+ burst: {
104
+ used: burstUsed,
105
+ limit: burstLimit,
106
+ resetsIn: minutesRemaining <= 0 ? '< 1 min' : `${minutesRemaining}m`,
107
+ },
108
+ // Simple boolean flags for CLI to check quickly
109
+ canFetch: remaining > 0 && burstUsed < burstLimit,
110
+ upgradeUrl: 'https://webpeel.dev/pricing',
111
+ });
112
+ }
113
+ catch (error) {
114
+ console.error('CLI usage error:', error);
115
+ res.status(500).json({
116
+ success: false,
117
+ error: {
118
+ type: 'internal_error',
119
+ message: 'Failed to retrieve usage',
120
+ docs: 'https://webpeel.dev/docs/errors#internal_error',
121
+ },
122
+ requestId: req.requestId,
123
+ });
124
+ }
125
+ });
126
+ return router;
127
+ }
@@ -0,0 +1,23 @@
1
+ /**
2
+ * Firecrawl API Compatibility Layer
3
+ *
4
+ * Drop-in replacement for Firecrawl's API - users can switch by ONLY changing the base URL.
5
+ * This is our killer acquisition feature.
6
+ *
7
+ * NOTE: Error responses in this file intentionally use Firecrawl's format:
8
+ * { success: false, error: "Human-readable message" }
9
+ * This is required for Firecrawl drop-in compatibility and differs from the
10
+ * standard WebPeel API error format: { error: "error_code", message: "description" }.
11
+ * Do NOT change this format — it would break Firecrawl-compatible integrations.
12
+ *
13
+ * Implements Firecrawl endpoints:
14
+ * - POST /v1/scrape
15
+ * - POST /v2/scrape (v2 with formats: ["screenshot"] support)
16
+ * - POST /v1/crawl
17
+ * - GET /v1/crawl/:id
18
+ * - POST /v1/search
19
+ * - POST /v1/map
20
+ */
21
+ import { Router } from 'express';
22
+ import type { IJobQueue } from '../job-queue.js';
23
+ export declare function createCompatRouter(jobQueue: IJobQueue): Router;