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
package/README.md CHANGED
@@ -5,10 +5,10 @@
5
5
  </p>
6
6
 
7
7
  <p align="center">
8
+ <a href="https://github.com/webpeel/webpeel/actions/workflows/ci.yml"><img src="https://github.com/webpeel/webpeel/actions/workflows/ci.yml/badge.svg" alt="CI"></a>
8
9
  <a href="https://www.npmjs.com/package/webpeel"><img src="https://img.shields.io/npm/v/webpeel.svg?style=flat-square" alt="npm version"></a>
9
10
  <a href="https://pypi.org/project/webpeel/"><img src="https://img.shields.io/pypi/v/webpeel.svg?style=flat-square" alt="PyPI version"></a>
10
- <a href="https://www.npmjs.com/package/webpeel"><img src="https://img.shields.io/npm/dm/webpeel.svg?style=flat-square" alt="Monthly downloads"></a>
11
- <a href="https://github.com/webpeel/webpeel/stargazers"><img src="https://img.shields.io/github/stars/webpeel/webpeel.svg?style=flat-square" alt="GitHub stars"></a>
11
+ <a href="https://opensource.org/licenses/MIT"><img src="https://img.shields.io/badge/License-MIT-yellow.svg?style=flat-square" alt="License: MIT"></a>
12
12
  <a href="LICENSE"><img src="https://img.shields.io/badge/license-WebPeel%20SDK-blue.svg?style=flat-square" alt="License"></a>
13
13
  <a href="https://webpeel.dev/status"><img src="https://img.shields.io/badge/status-operational-brightgreen.svg?style=flat-square" alt="Status"></a>
14
14
  </p>
package/dist/cache.d.ts CHANGED
@@ -28,4 +28,3 @@ export declare function cacheStats(): {
28
28
  sizeBytes: number;
29
29
  dir: string;
30
30
  };
31
- //# sourceMappingURL=cache.d.ts.map
package/dist/cache.js CHANGED
@@ -137,4 +137,3 @@ export function cacheStats() {
137
137
  }
138
138
  return { entries: files.length, sizeBytes, dir: CACHE_DIR };
139
139
  }
140
- //# sourceMappingURL=cache.js.map
@@ -0,0 +1,5 @@
1
+ /**
2
+ * Auth commands: auth, status, doctor, login, whoami, logout, usage, config, cache
3
+ */
4
+ import type { Command } from 'commander';
5
+ export declare function registerAuthCommands(program: Command): void;
@@ -0,0 +1,476 @@
1
+ /**
2
+ * Auth commands: auth, status, doctor, login, whoami, logout, usage, config, cache
3
+ */
4
+ import { handleLogin, handleLogout, handleUsage, loadConfig, saveConfig } from '../../cli-auth.js';
5
+ import { clearCache, cacheStats } from '../../cache.js';
6
+ import { cliVersion } from '../utils.js';
7
+ export function registerAuthCommands(program) {
8
+ // ── auth command ──────────────────────────────────────────────────────────
9
+ program
10
+ .command('auth [key]')
11
+ .description('Set and verify your WebPeel API key')
12
+ .option('--json', 'Output as JSON')
13
+ .action(async (key, opts) => {
14
+ const config = loadConfig();
15
+ // If no key provided, show current auth status (or error if not set)
16
+ if (!key) {
17
+ const currentKey = config.apiKey;
18
+ if (!currentKey) {
19
+ if (opts.json) {
20
+ console.log(JSON.stringify({ authenticated: false, error: 'No API key set. Run: webpeel auth <key>' }));
21
+ }
22
+ else {
23
+ console.error('No API key set. Run: webpeel auth <your-key>');
24
+ console.error('Get a free key at: https://app.webpeel.dev/keys');
25
+ }
26
+ process.exit(2);
27
+ }
28
+ // Fall through to verify current key
29
+ key = currentKey;
30
+ }
31
+ // Save the key first
32
+ config.apiKey = key;
33
+ saveConfig(config);
34
+ // Verify by calling the API
35
+ const apiUrl = (process.env.WEBPEEL_API_URL || 'https://api.webpeel.dev');
36
+ try {
37
+ const res = await fetch(`${apiUrl}/v1/usage`, {
38
+ headers: { Authorization: `Bearer ${key}` },
39
+ signal: AbortSignal.timeout(8000),
40
+ });
41
+ if (res.status === 401) {
42
+ if (opts.json) {
43
+ console.log(JSON.stringify({ authenticated: false, error: 'Invalid API key' }));
44
+ }
45
+ else {
46
+ console.error('❌ Invalid API key. Get a valid key at: https://app.webpeel.dev/keys');
47
+ }
48
+ // Revert the key save
49
+ config.apiKey = undefined;
50
+ saveConfig(config);
51
+ process.exit(2);
52
+ }
53
+ if (res.ok) {
54
+ const data = await res.json();
55
+ const plan = data.tier || (typeof data.plan === 'string' ? data.plan : data.plan?.tier) || 'free';
56
+ const used = data.used ?? data.totalRequests ?? data.weekly?.used ?? 0;
57
+ const limit = data.limit ?? data.weeklyLimit ?? data.weekly?.limit ?? 500;
58
+ const remaining = limit - used;
59
+ if (opts.json) {
60
+ console.log(JSON.stringify({
61
+ authenticated: true,
62
+ plan,
63
+ used,
64
+ limit,
65
+ remaining,
66
+ keyPrefix: key.slice(0, 12) + '...',
67
+ }));
68
+ }
69
+ else {
70
+ console.log(`✅ API key verified`);
71
+ console.log(` Plan: ${plan}`);
72
+ console.log(` Usage: ${used} / ${limit} this week (${remaining} remaining)`);
73
+ console.log(` Key: ${key.slice(0, 12)}...`);
74
+ }
75
+ process.exit(0);
76
+ }
77
+ // Non-200 non-401 — still save key but warn
78
+ if (opts.json) {
79
+ console.log(JSON.stringify({ authenticated: 'unknown', warning: `API returned ${res.status}` }));
80
+ }
81
+ else {
82
+ console.log(`⚠️ Key saved but couldn't verify (API returned ${res.status})`);
83
+ }
84
+ }
85
+ catch (e) {
86
+ if (opts.json) {
87
+ console.log(JSON.stringify({ authenticated: 'unknown', warning: 'Network error', error: e.message }));
88
+ }
89
+ else {
90
+ console.log(`⚠️ Key saved but couldn't verify (network error: ${e.message})`);
91
+ }
92
+ }
93
+ });
94
+ // ── status command ────────────────────────────────────────────────────────
95
+ program
96
+ .command('status')
97
+ .description('Check authentication status and API usage')
98
+ .option('--json', 'Output as JSON')
99
+ .action(async (opts) => {
100
+ const config = loadConfig();
101
+ const key = config.apiKey;
102
+ if (!key) {
103
+ if (opts.json) {
104
+ console.log(JSON.stringify({ authenticated: false, error: 'No API key configured' }));
105
+ }
106
+ else {
107
+ console.error('Not authenticated. Run: webpeel auth <your-key>');
108
+ console.error('Get a free key at: https://app.webpeel.dev/keys');
109
+ }
110
+ process.exit(2);
111
+ }
112
+ const apiUrl = (process.env.WEBPEEL_API_URL || 'https://api.webpeel.dev');
113
+ try {
114
+ const [healthRes, usageRes] = await Promise.all([
115
+ fetch(`${apiUrl}/health`, { signal: AbortSignal.timeout(5000) }).catch(() => null),
116
+ fetch(`${apiUrl}/v1/usage`, {
117
+ headers: { Authorization: `Bearer ${key}` },
118
+ signal: AbortSignal.timeout(8000),
119
+ }),
120
+ ]);
121
+ const apiOnline = healthRes?.ok ?? false;
122
+ if (usageRes.status === 401) {
123
+ if (opts.json) {
124
+ console.log(JSON.stringify({ authenticated: false, apiOnline, error: 'API key is invalid or expired' }));
125
+ }
126
+ else {
127
+ console.error('❌ API key is invalid. Run: webpeel auth <new-key>');
128
+ }
129
+ process.exit(2);
130
+ }
131
+ const usage = usageRes.ok ? await usageRes.json() : null;
132
+ const plan = usage?.tier || (typeof usage?.plan === 'string' ? usage?.plan : usage?.plan?.tier) || 'free';
133
+ const used = usage?.used ?? usage?.totalRequests ?? usage?.weekly?.used ?? 0;
134
+ const limit = usage?.limit ?? usage?.weeklyLimit ?? usage?.weekly?.limit ?? 500;
135
+ const remaining = limit - used;
136
+ if (opts.json) {
137
+ console.log(JSON.stringify({
138
+ authenticated: true,
139
+ apiOnline,
140
+ plan,
141
+ used,
142
+ limit,
143
+ remaining,
144
+ keyPrefix: key.slice(0, 12) + '...',
145
+ }));
146
+ }
147
+ else {
148
+ console.log(`✅ Authenticated`);
149
+ console.log(` API: ${apiOnline ? '🟢 online' : '🔴 offline'}`);
150
+ console.log(` Plan: ${plan}`);
151
+ console.log(` Usage: ${used} / ${limit} this week (${remaining} remaining)`);
152
+ console.log(` Key: ${key.slice(0, 12)}...`);
153
+ }
154
+ }
155
+ catch (e) {
156
+ if (opts.json) {
157
+ console.log(JSON.stringify({ authenticated: 'unknown', error: e.message }));
158
+ }
159
+ else {
160
+ console.error(`❌ Could not reach API: ${e.message}`);
161
+ }
162
+ process.exit(1);
163
+ }
164
+ });
165
+ // ── doctor command ────────────────────────────────────────────────────────
166
+ program
167
+ .command('doctor')
168
+ .description('Diagnose WebPeel installation (API key, connectivity, fetch test)')
169
+ .action(async () => {
170
+ const cfg = loadConfig();
171
+ const apiKey = cfg.apiKey || process.env.WEBPEEL_API_KEY;
172
+ const apiUrl = process.env.WEBPEEL_API_URL || 'https://api.webpeel.dev';
173
+ console.log('WebPeel Doctor\n');
174
+ console.log(`Version: ${cliVersion}`);
175
+ console.log(`API URL: ${apiUrl}`);
176
+ console.log(`API Key: ${apiKey ? apiKey.slice(0, 12) + '...' : '❌ Not configured'}`);
177
+ if (!apiKey) {
178
+ console.log('\n❌ No API key. Run: webpeel auth <your-key>');
179
+ console.log(' Get a free key at: https://app.webpeel.dev/keys');
180
+ process.exit(1);
181
+ }
182
+ // Check API connectivity
183
+ console.log('\nChecking API connectivity...');
184
+ try {
185
+ const healthRes = await fetch(`${apiUrl}/health`, { signal: AbortSignal.timeout(10000) });
186
+ const health = await healthRes.json();
187
+ console.log(`API Health: ✅ ${health.status || 'ok'} (uptime: ${Math.round((health.uptime || 0) / 60)}min)`);
188
+ }
189
+ catch (err) {
190
+ console.log(`API Health: ❌ Cannot reach ${apiUrl} (${err.message})`);
191
+ }
192
+ // Check API key validity
193
+ console.log('Checking API key...');
194
+ try {
195
+ const usageRes = await fetch(`${apiUrl}/v1/usage`, {
196
+ headers: { Authorization: `Bearer ${apiKey}` },
197
+ signal: AbortSignal.timeout(10000),
198
+ });
199
+ if (usageRes.ok) {
200
+ const usage = await usageRes.json();
201
+ const plan = usage?.tier || (typeof usage?.plan === 'string' ? usage?.plan : usage?.plan?.tier) || 'free';
202
+ const used = usage?.used ?? usage?.totalRequests ?? usage?.weekly?.used ?? 0;
203
+ const limit = usage?.limit ?? usage?.weeklyLimit ?? usage?.weekly?.limit ?? 500;
204
+ console.log(`API Key: ✅ Valid (${plan} plan, ${used}/${limit} used this week)`);
205
+ }
206
+ else if (usageRes.status === 401) {
207
+ console.log('API Key: ❌ Invalid or expired. Run: webpeel auth <new-key>');
208
+ }
209
+ else {
210
+ console.log(`API Key: ⚠️ Unexpected response (${usageRes.status})`);
211
+ }
212
+ }
213
+ catch (err) {
214
+ console.log(`API Key: ❌ Check failed (${err.message})`);
215
+ }
216
+ // Quick fetch test
217
+ console.log('Testing fetch...');
218
+ try {
219
+ const testRes = await fetch(`${apiUrl}/v1/fetch?url=https://example.com`, {
220
+ headers: { Authorization: `Bearer ${apiKey}` },
221
+ signal: AbortSignal.timeout(15000),
222
+ });
223
+ if (testRes.ok) {
224
+ const data = await testRes.json();
225
+ console.log(`Fetch Test: ✅ OK (${data.tokenCount || data.tokens || '?'} tokens, ${data.fetchTimeMs || data.elapsed || '?'}ms)`);
226
+ }
227
+ else {
228
+ console.log(`Fetch Test: ❌ Failed (${testRes.status})`);
229
+ }
230
+ }
231
+ catch (err) {
232
+ console.log(`Fetch Test: ❌ Failed (${err.message})`);
233
+ }
234
+ // Check YouTube
235
+ console.log('Testing YouTube...');
236
+ try {
237
+ const ytRes = await fetch(`${apiUrl}/v1/fetch?url=${encodeURIComponent('https://www.youtube.com/watch?v=dQw4w9WgXcQ')}`, {
238
+ headers: { Authorization: `Bearer ${apiKey}` },
239
+ signal: AbortSignal.timeout(15000),
240
+ });
241
+ if (ytRes.ok) {
242
+ const data = await ytRes.json();
243
+ const hasContent = (data.content || '').length > 100;
244
+ console.log(`YouTube: ${hasContent ? '✅' : '⚠️'} ${hasContent ? `Content extracted (${data.tokenCount || data.tokens || '?'} tokens)` : 'Content limited'}`);
245
+ }
246
+ else {
247
+ console.log(`YouTube: ⚠️ Response ${ytRes.status}`);
248
+ }
249
+ }
250
+ catch (err) {
251
+ console.log(`YouTube: ⚠️ ${err.message}`);
252
+ }
253
+ console.log('\n✅ WebPeel is ready to use!');
254
+ console.log(' Try: webpeel "https://news.ycombinator.com" --json');
255
+ });
256
+ // ── login command ─────────────────────────────────────────────────────────
257
+ program
258
+ .command('login')
259
+ .description('Authenticate the CLI with your API key')
260
+ .action(async () => {
261
+ try {
262
+ await handleLogin();
263
+ process.exit(0);
264
+ }
265
+ catch (error) {
266
+ console.error(`Error: ${error instanceof Error ? error.message : 'Unknown error'}`);
267
+ process.exit(1);
268
+ }
269
+ });
270
+ // ── whoami command ────────────────────────────────────────────────────────
271
+ program
272
+ .command('whoami')
273
+ .description('Show your current authentication status')
274
+ .action(async () => {
275
+ try {
276
+ const { loadConfig: loadCfg } = await import('../../cli-auth.js');
277
+ const config = loadCfg();
278
+ if (!config.apiKey) {
279
+ console.log('Not logged in. Run `webpeel login` to authenticate.');
280
+ }
281
+ else {
282
+ const masked = config.apiKey.slice(0, 7) + '...' + config.apiKey.slice(-4);
283
+ console.log(`Logged in with API key: ${masked}`);
284
+ if (config.planTier) {
285
+ const tierLabel = config.planTier.charAt(0).toUpperCase() + config.planTier.slice(1);
286
+ console.log(`Plan: ${tierLabel}`);
287
+ }
288
+ console.log(`Config: ~/.webpeel/config.json`);
289
+ }
290
+ process.exit(0);
291
+ }
292
+ catch (error) {
293
+ console.error(`Error: ${error instanceof Error ? error.message : 'Unknown error'}`);
294
+ process.exit(1);
295
+ }
296
+ });
297
+ // ── logout command ────────────────────────────────────────────────────────
298
+ program
299
+ .command('logout')
300
+ .description('Clear your saved credentials')
301
+ .action(() => {
302
+ try {
303
+ handleLogout();
304
+ process.exit(0);
305
+ }
306
+ catch (error) {
307
+ console.error(`Error: ${error instanceof Error ? error.message : 'Unknown error'}`);
308
+ process.exit(1);
309
+ }
310
+ });
311
+ // ── usage command ─────────────────────────────────────────────────────────
312
+ program
313
+ .command('usage')
314
+ .description('Show your current usage and quota')
315
+ .action(async () => {
316
+ try {
317
+ await handleUsage();
318
+ process.exit(0);
319
+ }
320
+ catch (error) {
321
+ console.error(`Error: ${error instanceof Error ? error.message : 'Unknown error'}`);
322
+ process.exit(1);
323
+ }
324
+ });
325
+ // ── config command ────────────────────────────────────────────────────────
326
+ program
327
+ .command('config')
328
+ .description('View or update CLI configuration')
329
+ .argument('[action]', '"list", "get <key>", "set <key> <value>", or omit for overview')
330
+ .argument('[key]', 'Config key')
331
+ .argument('[value]', 'Value to set')
332
+ .action(async (action, key, value) => {
333
+ const config = loadConfig();
334
+ // Settable config keys (safe for user modification)
335
+ // Supports dot-notation for nested keys (e.g., llm.apiKey)
336
+ const SETTABLE_KEYS = {
337
+ apiKey: 'WebPeel API key (tip: use `webpeel auth <key>` to set and verify in one step)',
338
+ braveApiKey: 'Brave Search API key',
339
+ 'llm.apiKey': 'LLM API key for AI-powered extraction (OpenAI-compatible)',
340
+ 'llm.model': 'LLM model name (default: gpt-4o-mini)',
341
+ 'llm.baseUrl': 'LLM API base URL (default: https://api.openai.com/v1)',
342
+ };
343
+ const maskSecret = (k, v) => {
344
+ if (!v)
345
+ return '(not set)';
346
+ if (k === 'apiKey' || k === 'braveApiKey' || k === 'llm.apiKey') {
347
+ return v.slice(0, 4) + '...' + v.slice(-4);
348
+ }
349
+ return String(v);
350
+ };
351
+ /** Get a potentially nested value using dot-notation (e.g., "llm.apiKey") */
352
+ function getNestedValue(obj, path) {
353
+ const parts = path.split('.');
354
+ let cur = obj;
355
+ for (const part of parts) {
356
+ if (cur == null || typeof cur !== 'object')
357
+ return undefined;
358
+ cur = cur[part];
359
+ }
360
+ return cur;
361
+ }
362
+ /** Set a potentially nested value using dot-notation (e.g., "llm.apiKey") */
363
+ function setNestedValue(obj, path, val) {
364
+ const parts = path.split('.');
365
+ let cur = obj;
366
+ for (let i = 0; i < parts.length - 1; i++) {
367
+ const part = parts[i];
368
+ if (cur[part] == null || typeof cur[part] !== 'object')
369
+ cur[part] = {};
370
+ cur = cur[part];
371
+ }
372
+ cur[parts[parts.length - 1]] = val;
373
+ }
374
+ if (!action || action === 'list') {
375
+ // Show all config (also triggered by `webpeel config list`)
376
+ console.log('WebPeel CLI Configuration');
377
+ console.log(` Config file: ~/.webpeel/config.json`);
378
+ console.log('');
379
+ console.log(` apiKey: ${maskSecret('apiKey', config.apiKey)}`);
380
+ console.log(` braveApiKey: ${maskSecret('braveApiKey', config.braveApiKey)}`);
381
+ console.log(` planTier: ${config.planTier || 'free'}`);
382
+ console.log(` anonymousUsage: ${config.anonymousUsage}`);
383
+ console.log('');
384
+ console.log(' LLM:');
385
+ console.log(` llm.apiKey: ${maskSecret('llm.apiKey', config.llm?.apiKey)}`);
386
+ console.log(` llm.model: ${config.llm?.model || '(not set, default: gpt-4o-mini)'}`);
387
+ console.log(` llm.baseUrl: ${config.llm?.baseUrl || '(not set, default: https://api.openai.com/v1)'}`);
388
+ const stats = cacheStats();
389
+ console.log('');
390
+ console.log(' Cache:');
391
+ console.log(` entries: ${stats.entries}`);
392
+ console.log(` size: ${(stats.sizeBytes / 1024).toFixed(1)} KB`);
393
+ console.log(` dir: ${stats.dir}`);
394
+ console.log('');
395
+ console.log(' Settable keys: ' + Object.keys(SETTABLE_KEYS).join(', '));
396
+ console.log(' Usage: webpeel config set <key> <value>');
397
+ if (!config.apiKey) {
398
+ console.log('');
399
+ console.log(' Tip: Run `webpeel auth <your-key>` to set and verify your API key.');
400
+ console.log(' Get a free key at: https://app.webpeel.dev/keys');
401
+ }
402
+ process.exit(0);
403
+ }
404
+ if (action === 'set') {
405
+ if (!key) {
406
+ console.error('Usage: webpeel config set <key> <value>');
407
+ console.error('Settable keys: ' + Object.keys(SETTABLE_KEYS).join(', '));
408
+ process.exit(1);
409
+ }
410
+ if (!(key in SETTABLE_KEYS)) {
411
+ console.error(`Cannot set "${key}". Settable keys: ${Object.keys(SETTABLE_KEYS).join(', ')}`);
412
+ process.exit(1);
413
+ }
414
+ if (!value) {
415
+ console.error(`Usage: webpeel config set ${key} <value>`);
416
+ process.exit(1);
417
+ }
418
+ setNestedValue(config, key, value);
419
+ saveConfig(config);
420
+ console.log(`✓ ${key} saved`);
421
+ process.exit(0);
422
+ }
423
+ if (action === 'get') {
424
+ const lookupKey = key || '';
425
+ const val = getNestedValue(config, lookupKey) ?? config[lookupKey];
426
+ if (val !== undefined) {
427
+ console.log(maskSecret(lookupKey, String(val)));
428
+ }
429
+ else {
430
+ console.error(`Unknown config key: ${lookupKey}`);
431
+ process.exit(1);
432
+ }
433
+ process.exit(0);
434
+ }
435
+ // Legacy: `webpeel config <key>` — treat action as the key name
436
+ const val = getNestedValue(config, action) ?? config[action];
437
+ if (val !== undefined) {
438
+ console.log(maskSecret(action, String(val)));
439
+ }
440
+ else {
441
+ console.error(`Unknown config key or action: ${action}`);
442
+ console.error('Usage: webpeel config [get|set] [key] [value]');
443
+ process.exit(1);
444
+ }
445
+ process.exit(0);
446
+ });
447
+ // ── cache command ─────────────────────────────────────────────────────────
448
+ program
449
+ .command('cache')
450
+ .description('Manage the local response cache')
451
+ .argument('<action>', '"stats", "clear", or "purge" (clear expired / clear all)')
452
+ .action(async (action) => {
453
+ switch (action) {
454
+ case 'stats': {
455
+ const stats = cacheStats();
456
+ console.log(`Cache: ${stats.entries} entries, ${(stats.sizeBytes / 1024).toFixed(1)} KB`);
457
+ console.log(`Location: ${stats.dir}`);
458
+ break;
459
+ }
460
+ case 'clear': {
461
+ const cleared = clearCache(false);
462
+ console.log(`Cleared ${cleared} expired cache entries.`);
463
+ break;
464
+ }
465
+ case 'purge': {
466
+ const cleared = clearCache(true);
467
+ console.log(`Purged all ${cleared} cache entries.`);
468
+ break;
469
+ }
470
+ default:
471
+ console.error('Unknown cache action. Use: stats, clear, or purge');
472
+ process.exit(1);
473
+ }
474
+ process.exit(0);
475
+ });
476
+ }
@@ -0,0 +1,6 @@
1
+ /**
2
+ * Fetch commands: default URL handler, read, pipe
3
+ */
4
+ import type { Command } from 'commander';
5
+ export declare function runFetch(url: string | undefined, options: any): Promise<void>;
6
+ export declare function registerFetchCommands(program: Command): void;