recker 1.0.20 → 1.0.21-next.b21cd45

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 (449) hide show
  1. package/README.md +31 -0
  2. package/dist/ai/adaptive-timeout.d.ts +0 -1
  3. package/dist/ai/client.d.ts +0 -1
  4. package/dist/ai/client.js +6 -0
  5. package/dist/ai/index.d.ts +3 -1
  6. package/dist/ai/index.js +3 -0
  7. package/dist/ai/providers/anthropic.d.ts +0 -1
  8. package/dist/ai/providers/base.d.ts +0 -1
  9. package/dist/ai/providers/google.d.ts +59 -0
  10. package/dist/ai/providers/google.js +305 -0
  11. package/dist/ai/providers/index.d.ts +4 -1
  12. package/dist/ai/providers/index.js +2 -0
  13. package/dist/ai/providers/ollama.d.ts +44 -0
  14. package/dist/ai/providers/ollama.js +240 -0
  15. package/dist/ai/providers/openai.d.ts +0 -1
  16. package/dist/ai/rate-limiter.d.ts +0 -1
  17. package/dist/ai/vector/index.d.ts +2 -0
  18. package/dist/ai/vector/index.js +2 -0
  19. package/dist/ai/vector/similarity.d.ts +2 -0
  20. package/dist/ai/vector/similarity.js +27 -0
  21. package/dist/ai/vector/store.d.ts +27 -0
  22. package/dist/ai/vector/store.js +82 -0
  23. package/dist/bare.d.ts +22 -0
  24. package/dist/bare.js +91 -0
  25. package/dist/bench/generator.d.ts +0 -1
  26. package/dist/bench/stats.d.ts +0 -1
  27. package/dist/cache/basic-file-storage.d.ts +12 -0
  28. package/dist/cache/basic-file-storage.js +50 -0
  29. package/dist/cache/file-storage.d.ts +25 -11
  30. package/dist/cache/file-storage.js +175 -30
  31. package/dist/cache/memory-limits.d.ts +0 -1
  32. package/dist/cache/memory-storage.d.ts +0 -1
  33. package/dist/cache/redis-storage.d.ts +0 -1
  34. package/dist/cli/handler.d.ts +2 -1
  35. package/dist/cli/handler.js +36 -5
  36. package/dist/cli/index.d.ts +0 -2
  37. package/dist/cli/index.js +559 -6
  38. package/dist/cli/presets.d.ts +0 -1
  39. package/dist/cli/tui/ai-chat.d.ts +0 -1
  40. package/dist/cli/tui/load-dashboard.d.ts +0 -1
  41. package/dist/cli/tui/scroll-buffer.d.ts +0 -1
  42. package/dist/cli/tui/search-panel.d.ts +0 -1
  43. package/dist/cli/tui/shell-search.d.ts +0 -1
  44. package/dist/cli/tui/shell.d.ts +0 -1
  45. package/dist/cli/tui/shell.js +1 -1
  46. package/dist/cli/tui/websocket.d.ts +0 -1
  47. package/dist/constants/http-status.d.ts +0 -1
  48. package/dist/constants.d.ts +0 -1
  49. package/dist/contract/index.d.ts +0 -1
  50. package/dist/cookies/memory-cookie-jar.d.ts +0 -1
  51. package/dist/core/client.d.ts +2 -1
  52. package/dist/core/client.js +11 -7
  53. package/dist/core/errors.d.ts +0 -1
  54. package/dist/core/index.d.ts +0 -1
  55. package/dist/core/request-promise.d.ts +0 -1
  56. package/dist/core/request.d.ts +0 -1
  57. package/dist/core/response.d.ts +0 -1
  58. package/dist/dns/index.d.ts +0 -1
  59. package/dist/dns/propagation.d.ts +0 -1
  60. package/dist/events/request-events.d.ts +0 -1
  61. package/dist/index.d.ts +2 -1
  62. package/dist/index.js +2 -0
  63. package/dist/mcp/cli.d.ts +2 -0
  64. package/dist/mcp/cli.js +136 -0
  65. package/dist/mcp/client.d.ts +0 -1
  66. package/dist/mcp/contract.d.ts +0 -1
  67. package/dist/mcp/embeddings-loader.d.ts +0 -1
  68. package/dist/mcp/geoip-loader.d.ts +0 -1
  69. package/dist/mcp/index.d.ts +0 -1
  70. package/dist/mcp/ip-intel.d.ts +0 -1
  71. package/dist/mcp/search/hybrid-search.d.ts +0 -1
  72. package/dist/mcp/search/index.d.ts +0 -1
  73. package/dist/mcp/search/math.d.ts +0 -1
  74. package/dist/mcp/search/types.d.ts +0 -1
  75. package/dist/mcp/server.d.ts +6 -2
  76. package/dist/mcp/server.js +193 -151
  77. package/dist/mcp/tools/loader.d.ts +2 -0
  78. package/dist/mcp/tools/loader.js +41 -0
  79. package/dist/mcp/tools/network.d.ts +3 -0
  80. package/dist/mcp/tools/network.js +267 -0
  81. package/dist/mcp/tools/registry.d.ts +17 -0
  82. package/dist/mcp/tools/registry.js +37 -0
  83. package/dist/mcp/types.d.ts +0 -1
  84. package/dist/plugins/auth/api-key.d.ts +8 -0
  85. package/dist/plugins/auth/api-key.js +27 -0
  86. package/dist/plugins/auth/auth0.d.ts +33 -0
  87. package/dist/plugins/auth/auth0.js +94 -0
  88. package/dist/plugins/auth/aws-sigv4.d.ts +10 -0
  89. package/dist/plugins/auth/aws-sigv4.js +88 -0
  90. package/dist/plugins/auth/azure-ad.d.ts +48 -0
  91. package/dist/plugins/auth/azure-ad.js +152 -0
  92. package/dist/plugins/auth/basic.d.ts +7 -0
  93. package/dist/plugins/auth/basic.js +13 -0
  94. package/dist/plugins/auth/bearer.d.ts +8 -0
  95. package/dist/plugins/auth/bearer.js +17 -0
  96. package/dist/plugins/auth/cognito.d.ts +45 -0
  97. package/dist/plugins/auth/cognito.js +208 -0
  98. package/dist/plugins/auth/digest.d.ts +8 -0
  99. package/dist/plugins/auth/digest.js +100 -0
  100. package/dist/plugins/auth/firebase.d.ts +32 -0
  101. package/dist/plugins/auth/firebase.js +195 -0
  102. package/dist/plugins/auth/github-app.d.ts +36 -0
  103. package/dist/plugins/auth/github-app.js +170 -0
  104. package/dist/plugins/auth/google-service-account.d.ts +49 -0
  105. package/dist/plugins/auth/google-service-account.js +172 -0
  106. package/dist/plugins/auth/index.d.ts +15 -0
  107. package/dist/plugins/auth/index.js +15 -0
  108. package/dist/plugins/auth/mtls.d.ts +37 -0
  109. package/dist/plugins/auth/mtls.js +140 -0
  110. package/dist/plugins/auth/oauth2.d.ts +8 -0
  111. package/dist/plugins/auth/oauth2.js +26 -0
  112. package/dist/plugins/auth/oidc.d.ts +55 -0
  113. package/dist/plugins/auth/oidc.js +222 -0
  114. package/dist/plugins/auth/okta.d.ts +47 -0
  115. package/dist/plugins/auth/okta.js +157 -0
  116. package/dist/plugins/auth.d.ts +1 -45
  117. package/dist/plugins/auth.js +1 -268
  118. package/dist/plugins/cache.d.ts +1 -2
  119. package/dist/plugins/cache.js +2 -2
  120. package/dist/plugins/certificate-pinning.d.ts +59 -0
  121. package/dist/plugins/certificate-pinning.js +236 -0
  122. package/dist/plugins/circuit-breaker.d.ts +1 -2
  123. package/dist/plugins/circuit-breaker.js +1 -1
  124. package/dist/plugins/compression.d.ts +0 -1
  125. package/dist/plugins/cookie-jar.d.ts +1 -2
  126. package/dist/plugins/cookie-jar.js +1 -1
  127. package/dist/plugins/dedup.d.ts +1 -2
  128. package/dist/plugins/dedup.js +1 -1
  129. package/dist/plugins/graphql.d.ts +0 -1
  130. package/dist/plugins/grpc-web.d.ts +0 -1
  131. package/dist/plugins/har-player.d.ts +1 -2
  132. package/dist/plugins/har-player.js +1 -1
  133. package/dist/plugins/har-recorder.d.ts +1 -2
  134. package/dist/plugins/har-recorder.js +1 -1
  135. package/dist/plugins/hls.d.ts +90 -18
  136. package/dist/plugins/hls.js +343 -173
  137. package/dist/plugins/http2-push.d.ts +0 -1
  138. package/dist/plugins/http3.d.ts +0 -1
  139. package/dist/plugins/index.d.ts +27 -0
  140. package/dist/plugins/index.js +27 -0
  141. package/dist/plugins/interface-rotator.d.ts +1 -2
  142. package/dist/plugins/interface-rotator.js +1 -1
  143. package/dist/plugins/jsonrpc.d.ts +0 -1
  144. package/dist/plugins/logger.d.ts +1 -2
  145. package/dist/plugins/logger.js +1 -1
  146. package/dist/plugins/odata.d.ts +0 -1
  147. package/dist/plugins/pagination.d.ts +0 -1
  148. package/dist/plugins/proxy-rotator.d.ts +1 -2
  149. package/dist/plugins/proxy-rotator.js +1 -1
  150. package/dist/plugins/rate-limit.d.ts +15 -0
  151. package/dist/plugins/rate-limit.js +162 -0
  152. package/dist/plugins/retry.d.ts +1 -2
  153. package/dist/plugins/retry.js +3 -3
  154. package/dist/plugins/scrape.d.ts +0 -1
  155. package/dist/plugins/server-timing.d.ts +1 -2
  156. package/dist/plugins/server-timing.js +1 -1
  157. package/dist/plugins/soap.d.ts +0 -1
  158. package/dist/plugins/user-agent.d.ts +1 -2
  159. package/dist/plugins/user-agent.js +1 -1
  160. package/dist/plugins/xml.d.ts +0 -1
  161. package/dist/plugins/xsrf.d.ts +1 -2
  162. package/dist/plugins/xsrf.js +3 -3
  163. package/dist/presets/anthropic.d.ts +0 -1
  164. package/dist/presets/aws.d.ts +0 -1
  165. package/dist/presets/azure-openai.d.ts +0 -1
  166. package/dist/presets/azure.d.ts +0 -1
  167. package/dist/presets/cloudflare.d.ts +0 -1
  168. package/dist/presets/cohere.d.ts +0 -1
  169. package/dist/presets/deepseek.d.ts +0 -1
  170. package/dist/presets/digitalocean.d.ts +0 -1
  171. package/dist/presets/discord.d.ts +0 -1
  172. package/dist/presets/fireworks.d.ts +0 -1
  173. package/dist/presets/gcp.d.ts +0 -1
  174. package/dist/presets/gemini.d.ts +0 -1
  175. package/dist/presets/github.d.ts +0 -1
  176. package/dist/presets/gitlab.d.ts +0 -1
  177. package/dist/presets/groq.d.ts +0 -1
  178. package/dist/presets/huggingface.d.ts +0 -1
  179. package/dist/presets/index.d.ts +0 -1
  180. package/dist/presets/linear.d.ts +0 -1
  181. package/dist/presets/mailgun.d.ts +0 -1
  182. package/dist/presets/meta.d.ts +0 -1
  183. package/dist/presets/mistral.d.ts +0 -1
  184. package/dist/presets/notion.d.ts +0 -1
  185. package/dist/presets/openai.d.ts +0 -1
  186. package/dist/presets/oracle.d.ts +0 -1
  187. package/dist/presets/perplexity.d.ts +0 -1
  188. package/dist/presets/registry.d.ts +0 -1
  189. package/dist/presets/replicate.d.ts +0 -1
  190. package/dist/presets/sinch.d.ts +0 -1
  191. package/dist/presets/slack.d.ts +0 -1
  192. package/dist/presets/stripe.d.ts +0 -1
  193. package/dist/presets/supabase.d.ts +0 -1
  194. package/dist/presets/tiktok.d.ts +0 -1
  195. package/dist/presets/together.d.ts +0 -1
  196. package/dist/presets/twilio.d.ts +0 -1
  197. package/dist/presets/vercel.d.ts +0 -1
  198. package/dist/presets/vultr.d.ts +0 -1
  199. package/dist/presets/xai.d.ts +0 -1
  200. package/dist/presets/youtube.d.ts +0 -1
  201. package/dist/protocols/ftp.d.ts +0 -1
  202. package/dist/protocols/index.d.ts +0 -1
  203. package/dist/protocols/sftp.d.ts +0 -1
  204. package/dist/protocols/telnet.d.ts +0 -1
  205. package/dist/recker.d.ts +0 -1
  206. package/dist/runner/request-runner.d.ts +0 -1
  207. package/dist/scrape/document.d.ts +0 -1
  208. package/dist/scrape/element.d.ts +0 -1
  209. package/dist/scrape/extractors.d.ts +0 -1
  210. package/dist/scrape/index.d.ts +0 -1
  211. package/dist/scrape/types.d.ts +0 -1
  212. package/dist/testing/index.d.ts +16 -1
  213. package/dist/testing/index.js +8 -0
  214. package/dist/testing/mock-dns-server.d.ts +69 -0
  215. package/dist/testing/mock-dns-server.js +269 -0
  216. package/dist/testing/mock-ftp-server.d.ts +89 -0
  217. package/dist/testing/mock-ftp-server.js +562 -0
  218. package/dist/testing/mock-hls-server.d.ts +80 -0
  219. package/dist/testing/mock-hls-server.js +381 -0
  220. package/dist/testing/mock-http-server.d.ts +99 -0
  221. package/dist/testing/mock-http-server.js +298 -0
  222. package/dist/testing/mock-sse-server.d.ts +76 -0
  223. package/dist/testing/mock-sse-server.js +291 -0
  224. package/dist/testing/mock-telnet-server.d.ts +59 -0
  225. package/dist/testing/mock-telnet-server.js +273 -0
  226. package/dist/testing/mock-udp-server.d.ts +0 -1
  227. package/dist/testing/mock-websocket-server.d.ts +77 -0
  228. package/dist/testing/mock-websocket-server.js +316 -0
  229. package/dist/testing/mock-whois-server.d.ts +56 -0
  230. package/dist/testing/mock-whois-server.js +234 -0
  231. package/dist/testing/mock.d.ts +0 -1
  232. package/dist/transport/base-udp.d.ts +0 -1
  233. package/dist/transport/fetch.d.ts +0 -1
  234. package/dist/transport/udp-response.d.ts +0 -1
  235. package/dist/transport/udp.d.ts +0 -1
  236. package/dist/transport/undici.d.ts +0 -1
  237. package/dist/transport/undici.js +1 -1
  238. package/dist/types/ai.d.ts +0 -1
  239. package/dist/types/index.d.ts +0 -1
  240. package/dist/types/logger.d.ts +0 -1
  241. package/dist/types/udp.d.ts +0 -1
  242. package/dist/udp/index.d.ts +0 -1
  243. package/dist/utils/agent-manager.d.ts +0 -1
  244. package/dist/utils/body.d.ts +0 -1
  245. package/dist/utils/cert.d.ts +0 -1
  246. package/dist/utils/charset.d.ts +0 -1
  247. package/dist/utils/chart.d.ts +0 -1
  248. package/dist/utils/client-pool.d.ts +0 -1
  249. package/dist/utils/colors.d.ts +0 -1
  250. package/dist/utils/concurrency.d.ts +0 -1
  251. package/dist/utils/dns-toolkit.d.ts +0 -1
  252. package/dist/utils/dns-toolkit.js +1 -1
  253. package/dist/utils/dns.d.ts +0 -1
  254. package/dist/utils/dns.js +2 -2
  255. package/dist/utils/doh.d.ts +0 -1
  256. package/dist/utils/download.d.ts +0 -1
  257. package/dist/utils/env-proxy.d.ts +0 -1
  258. package/dist/utils/header-parser.d.ts +0 -1
  259. package/dist/utils/html-cleaner.d.ts +0 -1
  260. package/dist/utils/link-header.d.ts +0 -1
  261. package/dist/utils/optional-require.d.ts +0 -1
  262. package/dist/utils/optional-require.js +1 -1
  263. package/dist/utils/progress.d.ts +0 -1
  264. package/dist/utils/rdap.d.ts +0 -1
  265. package/dist/utils/request-pool.d.ts +0 -1
  266. package/dist/utils/security-grader.d.ts +0 -1
  267. package/dist/utils/sparkline.d.ts +0 -1
  268. package/dist/utils/sse.d.ts +0 -1
  269. package/dist/utils/streaming.d.ts +0 -1
  270. package/dist/utils/system-metrics.d.ts +0 -1
  271. package/dist/utils/tls-inspector.d.ts +0 -1
  272. package/dist/utils/try-fn.d.ts +0 -1
  273. package/dist/utils/upload.d.ts +0 -1
  274. package/dist/utils/user-agent.d.ts +0 -1
  275. package/dist/utils/whois.d.ts +0 -1
  276. package/dist/webrtc/index.d.ts +0 -1
  277. package/dist/webrtc/index.js +1 -1
  278. package/dist/websocket/client.d.ts +0 -1
  279. package/package.json +35 -3
  280. package/dist/ai/adaptive-timeout.d.ts.map +0 -1
  281. package/dist/ai/client.d.ts.map +0 -1
  282. package/dist/ai/index.d.ts.map +0 -1
  283. package/dist/ai/providers/anthropic.d.ts.map +0 -1
  284. package/dist/ai/providers/base.d.ts.map +0 -1
  285. package/dist/ai/providers/index.d.ts.map +0 -1
  286. package/dist/ai/providers/openai.d.ts.map +0 -1
  287. package/dist/ai/rate-limiter.d.ts.map +0 -1
  288. package/dist/bench/generator.d.ts.map +0 -1
  289. package/dist/bench/stats.d.ts.map +0 -1
  290. package/dist/cache/file-storage.d.ts.map +0 -1
  291. package/dist/cache/memory-limits.d.ts.map +0 -1
  292. package/dist/cache/memory-storage.d.ts.map +0 -1
  293. package/dist/cache/redis-storage.d.ts.map +0 -1
  294. package/dist/cli/handler.d.ts.map +0 -1
  295. package/dist/cli/index.d.ts.map +0 -1
  296. package/dist/cli/presets.d.ts.map +0 -1
  297. package/dist/cli/tui/ai-chat.d.ts.map +0 -1
  298. package/dist/cli/tui/load-dashboard.d.ts.map +0 -1
  299. package/dist/cli/tui/scroll-buffer.d.ts.map +0 -1
  300. package/dist/cli/tui/search-panel.d.ts.map +0 -1
  301. package/dist/cli/tui/shell-search.d.ts.map +0 -1
  302. package/dist/cli/tui/shell.d.ts.map +0 -1
  303. package/dist/cli/tui/websocket.d.ts.map +0 -1
  304. package/dist/constants/http-status.d.ts.map +0 -1
  305. package/dist/constants.d.ts.map +0 -1
  306. package/dist/contract/index.d.ts.map +0 -1
  307. package/dist/cookies/memory-cookie-jar.d.ts.map +0 -1
  308. package/dist/core/client.d.ts.map +0 -1
  309. package/dist/core/errors.d.ts.map +0 -1
  310. package/dist/core/index.d.ts.map +0 -1
  311. package/dist/core/request-promise.d.ts.map +0 -1
  312. package/dist/core/request.d.ts.map +0 -1
  313. package/dist/core/response.d.ts.map +0 -1
  314. package/dist/dns/index.d.ts.map +0 -1
  315. package/dist/dns/propagation.d.ts.map +0 -1
  316. package/dist/events/request-events.d.ts.map +0 -1
  317. package/dist/index.d.ts.map +0 -1
  318. package/dist/mcp/client.d.ts.map +0 -1
  319. package/dist/mcp/contract.d.ts.map +0 -1
  320. package/dist/mcp/embeddings-loader.d.ts.map +0 -1
  321. package/dist/mcp/geoip-loader.d.ts.map +0 -1
  322. package/dist/mcp/index.d.ts.map +0 -1
  323. package/dist/mcp/ip-intel.d.ts.map +0 -1
  324. package/dist/mcp/search/hybrid-search.d.ts.map +0 -1
  325. package/dist/mcp/search/index.d.ts.map +0 -1
  326. package/dist/mcp/search/math.d.ts.map +0 -1
  327. package/dist/mcp/search/types.d.ts.map +0 -1
  328. package/dist/mcp/server.d.ts.map +0 -1
  329. package/dist/mcp/types.d.ts.map +0 -1
  330. package/dist/plugins/auth.d.ts.map +0 -1
  331. package/dist/plugins/cache.d.ts.map +0 -1
  332. package/dist/plugins/circuit-breaker.d.ts.map +0 -1
  333. package/dist/plugins/compression.d.ts.map +0 -1
  334. package/dist/plugins/cookie-jar.d.ts.map +0 -1
  335. package/dist/plugins/dedup.d.ts.map +0 -1
  336. package/dist/plugins/graphql.d.ts.map +0 -1
  337. package/dist/plugins/grpc-web.d.ts.map +0 -1
  338. package/dist/plugins/har-player.d.ts.map +0 -1
  339. package/dist/plugins/har-recorder.d.ts.map +0 -1
  340. package/dist/plugins/hls.d.ts.map +0 -1
  341. package/dist/plugins/http2-push.d.ts.map +0 -1
  342. package/dist/plugins/http3.d.ts.map +0 -1
  343. package/dist/plugins/interface-rotator.d.ts.map +0 -1
  344. package/dist/plugins/jsonrpc.d.ts.map +0 -1
  345. package/dist/plugins/logger.d.ts.map +0 -1
  346. package/dist/plugins/odata.d.ts.map +0 -1
  347. package/dist/plugins/pagination.d.ts.map +0 -1
  348. package/dist/plugins/proxy-rotator.d.ts.map +0 -1
  349. package/dist/plugins/retry.d.ts.map +0 -1
  350. package/dist/plugins/scrape.d.ts.map +0 -1
  351. package/dist/plugins/server-timing.d.ts.map +0 -1
  352. package/dist/plugins/soap.d.ts.map +0 -1
  353. package/dist/plugins/user-agent.d.ts.map +0 -1
  354. package/dist/plugins/xml.d.ts.map +0 -1
  355. package/dist/plugins/xsrf.d.ts.map +0 -1
  356. package/dist/presets/anthropic.d.ts.map +0 -1
  357. package/dist/presets/aws.d.ts.map +0 -1
  358. package/dist/presets/azure-openai.d.ts.map +0 -1
  359. package/dist/presets/azure.d.ts.map +0 -1
  360. package/dist/presets/cloudflare.d.ts.map +0 -1
  361. package/dist/presets/cohere.d.ts.map +0 -1
  362. package/dist/presets/deepseek.d.ts.map +0 -1
  363. package/dist/presets/digitalocean.d.ts.map +0 -1
  364. package/dist/presets/discord.d.ts.map +0 -1
  365. package/dist/presets/fireworks.d.ts.map +0 -1
  366. package/dist/presets/gcp.d.ts.map +0 -1
  367. package/dist/presets/gemini.d.ts.map +0 -1
  368. package/dist/presets/github.d.ts.map +0 -1
  369. package/dist/presets/gitlab.d.ts.map +0 -1
  370. package/dist/presets/groq.d.ts.map +0 -1
  371. package/dist/presets/huggingface.d.ts.map +0 -1
  372. package/dist/presets/index.d.ts.map +0 -1
  373. package/dist/presets/linear.d.ts.map +0 -1
  374. package/dist/presets/mailgun.d.ts.map +0 -1
  375. package/dist/presets/meta.d.ts.map +0 -1
  376. package/dist/presets/mistral.d.ts.map +0 -1
  377. package/dist/presets/notion.d.ts.map +0 -1
  378. package/dist/presets/openai.d.ts.map +0 -1
  379. package/dist/presets/oracle.d.ts.map +0 -1
  380. package/dist/presets/perplexity.d.ts.map +0 -1
  381. package/dist/presets/registry.d.ts.map +0 -1
  382. package/dist/presets/replicate.d.ts.map +0 -1
  383. package/dist/presets/sinch.d.ts.map +0 -1
  384. package/dist/presets/slack.d.ts.map +0 -1
  385. package/dist/presets/stripe.d.ts.map +0 -1
  386. package/dist/presets/supabase.d.ts.map +0 -1
  387. package/dist/presets/tiktok.d.ts.map +0 -1
  388. package/dist/presets/together.d.ts.map +0 -1
  389. package/dist/presets/twilio.d.ts.map +0 -1
  390. package/dist/presets/vercel.d.ts.map +0 -1
  391. package/dist/presets/vultr.d.ts.map +0 -1
  392. package/dist/presets/xai.d.ts.map +0 -1
  393. package/dist/presets/youtube.d.ts.map +0 -1
  394. package/dist/protocols/ftp.d.ts.map +0 -1
  395. package/dist/protocols/index.d.ts.map +0 -1
  396. package/dist/protocols/sftp.d.ts.map +0 -1
  397. package/dist/protocols/telnet.d.ts.map +0 -1
  398. package/dist/recker.d.ts.map +0 -1
  399. package/dist/runner/request-runner.d.ts.map +0 -1
  400. package/dist/scrape/document.d.ts.map +0 -1
  401. package/dist/scrape/element.d.ts.map +0 -1
  402. package/dist/scrape/extractors.d.ts.map +0 -1
  403. package/dist/scrape/index.d.ts.map +0 -1
  404. package/dist/scrape/types.d.ts.map +0 -1
  405. package/dist/testing/index.d.ts.map +0 -1
  406. package/dist/testing/mock-udp-server.d.ts.map +0 -1
  407. package/dist/testing/mock.d.ts.map +0 -1
  408. package/dist/transport/base-udp.d.ts.map +0 -1
  409. package/dist/transport/fetch.d.ts.map +0 -1
  410. package/dist/transport/udp-response.d.ts.map +0 -1
  411. package/dist/transport/udp.d.ts.map +0 -1
  412. package/dist/transport/undici.d.ts.map +0 -1
  413. package/dist/types/ai.d.ts.map +0 -1
  414. package/dist/types/index.d.ts.map +0 -1
  415. package/dist/types/logger.d.ts.map +0 -1
  416. package/dist/types/udp.d.ts.map +0 -1
  417. package/dist/udp/index.d.ts.map +0 -1
  418. package/dist/utils/agent-manager.d.ts.map +0 -1
  419. package/dist/utils/body.d.ts.map +0 -1
  420. package/dist/utils/cert.d.ts.map +0 -1
  421. package/dist/utils/charset.d.ts.map +0 -1
  422. package/dist/utils/chart.d.ts.map +0 -1
  423. package/dist/utils/client-pool.d.ts.map +0 -1
  424. package/dist/utils/colors.d.ts.map +0 -1
  425. package/dist/utils/concurrency.d.ts.map +0 -1
  426. package/dist/utils/dns-toolkit.d.ts.map +0 -1
  427. package/dist/utils/dns.d.ts.map +0 -1
  428. package/dist/utils/doh.d.ts.map +0 -1
  429. package/dist/utils/download.d.ts.map +0 -1
  430. package/dist/utils/env-proxy.d.ts.map +0 -1
  431. package/dist/utils/header-parser.d.ts.map +0 -1
  432. package/dist/utils/html-cleaner.d.ts.map +0 -1
  433. package/dist/utils/link-header.d.ts.map +0 -1
  434. package/dist/utils/optional-require.d.ts.map +0 -1
  435. package/dist/utils/progress.d.ts.map +0 -1
  436. package/dist/utils/rdap.d.ts.map +0 -1
  437. package/dist/utils/request-pool.d.ts.map +0 -1
  438. package/dist/utils/security-grader.d.ts.map +0 -1
  439. package/dist/utils/sparkline.d.ts.map +0 -1
  440. package/dist/utils/sse.d.ts.map +0 -1
  441. package/dist/utils/streaming.d.ts.map +0 -1
  442. package/dist/utils/system-metrics.d.ts.map +0 -1
  443. package/dist/utils/tls-inspector.d.ts.map +0 -1
  444. package/dist/utils/try-fn.d.ts.map +0 -1
  445. package/dist/utils/upload.d.ts.map +0 -1
  446. package/dist/utils/user-agent.d.ts.map +0 -1
  447. package/dist/utils/whois.d.ts.map +0 -1
  448. package/dist/webrtc/index.d.ts.map +0 -1
  449. package/dist/websocket/client.d.ts.map +0 -1
@@ -0,0 +1,240 @@
1
+ import { BaseAIProvider, AIError, RateLimitError, OverloadedError, } from './base.js';
2
+ import { StreamError } from '../../core/errors.js';
3
+ export class OllamaProvider extends BaseAIProvider {
4
+ ollamaConfig;
5
+ constructor(config = {}) {
6
+ super({ ...config, name: 'ollama' });
7
+ this.ollamaConfig = config;
8
+ }
9
+ getEnvApiKey() {
10
+ return undefined;
11
+ }
12
+ getBaseUrl() {
13
+ return this.config.baseUrl || 'http://127.0.0.1:11434/api';
14
+ }
15
+ buildHeaders() {
16
+ return {
17
+ 'Content-Type': 'application/json',
18
+ ...this.config.headers,
19
+ };
20
+ }
21
+ transformMessages(messages) {
22
+ return messages.map((msg) => {
23
+ const { content, images } = this.extractContentAndImages(msg.content);
24
+ return {
25
+ role: msg.role,
26
+ content,
27
+ images: images.length > 0 ? images : undefined,
28
+ };
29
+ });
30
+ }
31
+ extractContentAndImages(content) {
32
+ if (typeof content === 'string') {
33
+ return { content, images: [] };
34
+ }
35
+ let text = '';
36
+ const images = [];
37
+ for (const part of content) {
38
+ if (part.type === 'text') {
39
+ text += part.text;
40
+ }
41
+ else if (part.type === 'image') {
42
+ images.push(Buffer.from(part.data).toString('base64'));
43
+ }
44
+ else if (part.type === 'image_url') {
45
+ if (part.image_url.url.startsWith('data:')) {
46
+ const base64 = part.image_url.url.split(',')[1];
47
+ if (base64)
48
+ images.push(base64);
49
+ }
50
+ }
51
+ }
52
+ return { content: text, images };
53
+ }
54
+ async chat(options) {
55
+ const context = {
56
+ startTime: performance.now(),
57
+ tokenCount: 0,
58
+ };
59
+ const body = this.buildChatBody(options, false);
60
+ const response = await this.makeRequest('/chat', body, options.signal);
61
+ const data = await response.json();
62
+ return this.parseResponse(data, context);
63
+ }
64
+ async stream(options) {
65
+ const context = {
66
+ startTime: performance.now(),
67
+ tokenCount: 0,
68
+ };
69
+ const body = this.buildChatBody(options, true);
70
+ const response = await this.makeRequest('/chat', body, options.signal);
71
+ return this.parseNDJSONStream(response, context);
72
+ }
73
+ async embed(options) {
74
+ const startTime = performance.now();
75
+ const body = {
76
+ model: options.model || this.config.defaultModel || 'nomic-embed-text',
77
+ input: options.input,
78
+ };
79
+ if (this.ollamaConfig.keepAlive) {
80
+ body.keep_alive = this.ollamaConfig.keepAlive;
81
+ }
82
+ const response = await this.makeRequest('/embed', body, options.signal);
83
+ const data = await response.json();
84
+ const latency = {
85
+ ttft: performance.now() - startTime,
86
+ tps: 0,
87
+ total: performance.now() - startTime,
88
+ };
89
+ const usage = {
90
+ inputTokens: data.prompt_eval_count || 0,
91
+ outputTokens: 0,
92
+ totalTokens: data.prompt_eval_count || 0,
93
+ };
94
+ return {
95
+ embeddings: data.embeddings,
96
+ usage,
97
+ model: data.model,
98
+ provider: 'ollama',
99
+ latency,
100
+ };
101
+ }
102
+ buildChatBody(options, stream) {
103
+ const body = {
104
+ model: options.model || this.config.defaultModel || 'llama3',
105
+ messages: this.transformMessages(options.messages),
106
+ stream,
107
+ options: {},
108
+ };
109
+ if (options.responseFormat?.type === 'json_object') {
110
+ body.format = 'json';
111
+ }
112
+ if (this.ollamaConfig.keepAlive) {
113
+ body.keep_alive = this.ollamaConfig.keepAlive;
114
+ }
115
+ if (options.temperature !== undefined)
116
+ body.options.temperature = options.temperature;
117
+ if (options.topP !== undefined)
118
+ body.options.top_p = options.topP;
119
+ if (options.maxTokens !== undefined)
120
+ body.options.num_predict = options.maxTokens;
121
+ if (options.stop)
122
+ body.options.stop = options.stop;
123
+ return body;
124
+ }
125
+ async makeRequest(endpoint, body, signal) {
126
+ const url = `${this.getBaseUrl()}${endpoint}`;
127
+ const headers = this.buildHeaders();
128
+ const response = await fetch(url, {
129
+ method: 'POST',
130
+ headers,
131
+ body: JSON.stringify(body),
132
+ signal,
133
+ });
134
+ if (!response.ok) {
135
+ let errorMsg = response.statusText;
136
+ try {
137
+ const err = await response.json();
138
+ if (err.error)
139
+ errorMsg = err.error;
140
+ }
141
+ catch { }
142
+ if (response.status === 429)
143
+ throw new RateLimitError('ollama');
144
+ if (response.status === 503)
145
+ throw new OverloadedError('ollama');
146
+ throw new AIError(errorMsg, 'ollama', String(response.status), response.status);
147
+ }
148
+ return response;
149
+ }
150
+ parseResponse(data, context) {
151
+ const usage = {
152
+ inputTokens: data.prompt_eval_count || 0,
153
+ outputTokens: data.eval_count || 0,
154
+ totalTokens: (data.prompt_eval_count || 0) + (data.eval_count || 0),
155
+ };
156
+ context.tokenCount = usage.outputTokens;
157
+ return {
158
+ content: data.message.content,
159
+ usage,
160
+ latency: this.calculateLatency(context),
161
+ model: data.model,
162
+ provider: 'ollama',
163
+ cached: false,
164
+ finishReason: data.done ? 'stop' : undefined,
165
+ raw: data,
166
+ };
167
+ }
168
+ parseStreamEvent(_chunk, _context) {
169
+ return null;
170
+ }
171
+ async *parseNDJSONStream(response, context) {
172
+ const reader = response.body?.getReader();
173
+ if (!reader)
174
+ throw new StreamError('Response body is not readable', { streamType: 'ndjson' });
175
+ const decoder = new TextDecoder();
176
+ let buffer = '';
177
+ try {
178
+ while (true) {
179
+ const { done, value } = await reader.read();
180
+ if (done)
181
+ break;
182
+ buffer += decoder.decode(value, { stream: true });
183
+ const lines = buffer.split('\n');
184
+ buffer = lines.pop() || '';
185
+ for (const line of lines) {
186
+ if (!line.trim())
187
+ continue;
188
+ try {
189
+ const data = JSON.parse(line);
190
+ if (data.message?.content) {
191
+ if (!context.firstTokenTime)
192
+ context.firstTokenTime = performance.now();
193
+ context.tokenCount++;
194
+ yield { type: 'text', content: data.message.content };
195
+ }
196
+ if (data.done) {
197
+ const usage = {
198
+ inputTokens: data.prompt_eval_count || 0,
199
+ outputTokens: data.eval_count || 0,
200
+ totalTokens: (data.prompt_eval_count || 0) + (data.eval_count || 0),
201
+ };
202
+ yield { type: 'done', finishReason: 'stop', usage };
203
+ }
204
+ }
205
+ catch (e) {
206
+ }
207
+ }
208
+ }
209
+ if (buffer.trim()) {
210
+ const lines = buffer.split('\n');
211
+ for (const line of lines) {
212
+ if (!line.trim())
213
+ continue;
214
+ try {
215
+ const data = JSON.parse(line);
216
+ if (data.message?.content) {
217
+ if (!context.firstTokenTime)
218
+ context.firstTokenTime = performance.now();
219
+ context.tokenCount++;
220
+ yield { type: 'text', content: data.message.content };
221
+ }
222
+ if (data.done) {
223
+ const usage = {
224
+ inputTokens: data.prompt_eval_count || 0,
225
+ outputTokens: data.eval_count || 0,
226
+ totalTokens: (data.prompt_eval_count || 0) + (data.eval_count || 0),
227
+ };
228
+ yield { type: 'done', finishReason: 'stop', usage };
229
+ }
230
+ }
231
+ catch (e) {
232
+ }
233
+ }
234
+ }
235
+ }
236
+ finally {
237
+ reader.releaseLock();
238
+ }
239
+ }
240
+ }
@@ -62,4 +62,3 @@ export declare class OpenAIProvider extends BaseAIProvider {
62
62
  protected parseStreamEvent(chunk: string, context: ProviderRequestContext): StreamEvent | null;
63
63
  }
64
64
  export {};
65
- //# sourceMappingURL=openai.d.ts.map
@@ -41,4 +41,3 @@ export declare const tokenEstimators: {
41
41
  estimateMessage(content: string): number;
42
42
  estimateChatTokens(options: ChatOptions): number;
43
43
  };
44
- //# sourceMappingURL=rate-limiter.d.ts.map
@@ -0,0 +1,2 @@
1
+ export * from './similarity.js';
2
+ export * from './store.js';
@@ -0,0 +1,2 @@
1
+ export * from './similarity.js';
2
+ export * from './store.js';
@@ -0,0 +1,2 @@
1
+ export declare function cosineSimilarity(a: number[], b: number[]): number;
2
+ export declare function euclideanDistance(a: number[], b: number[]): number;
@@ -0,0 +1,27 @@
1
+ export function cosineSimilarity(a, b) {
2
+ if (a.length !== b.length) {
3
+ throw new Error(`Vector dimension mismatch: ${a.length} vs ${b.length}`);
4
+ }
5
+ let dot = 0;
6
+ let normA = 0;
7
+ let normB = 0;
8
+ for (let i = 0; i < a.length; i++) {
9
+ dot += a[i] * b[i];
10
+ normA += a[i] * a[i];
11
+ normB += b[i] * b[i];
12
+ }
13
+ if (normA === 0 || normB === 0)
14
+ return 0;
15
+ return dot / (Math.sqrt(normA) * Math.sqrt(normB));
16
+ }
17
+ export function euclideanDistance(a, b) {
18
+ if (a.length !== b.length) {
19
+ throw new Error(`Vector dimension mismatch: ${a.length} vs ${b.length}`);
20
+ }
21
+ let sum = 0;
22
+ for (let i = 0; i < a.length; i++) {
23
+ const diff = a[i] - b[i];
24
+ sum += diff * diff;
25
+ }
26
+ return Math.sqrt(sum);
27
+ }
@@ -0,0 +1,27 @@
1
+ import type { AIClient } from '../../types/ai.js';
2
+ export interface VectorDocument {
3
+ id: string;
4
+ content: string;
5
+ embedding?: number[];
6
+ metadata?: Record<string, unknown>;
7
+ }
8
+ export interface SearchResult extends VectorDocument {
9
+ score: number;
10
+ }
11
+ export interface VectorStoreOptions {
12
+ client?: AIClient;
13
+ model?: string;
14
+ }
15
+ export declare class MemoryVectorStore {
16
+ private documents;
17
+ private client?;
18
+ private model?;
19
+ constructor(options?: VectorStoreOptions);
20
+ add(docs: Array<Partial<VectorDocument> & {
21
+ content: string;
22
+ }>): Promise<void>;
23
+ search(query: string, limit?: number, threshold?: number): Promise<SearchResult[]>;
24
+ delete(id: string): boolean;
25
+ clear(): void;
26
+ get count(): number;
27
+ }
@@ -0,0 +1,82 @@
1
+ import { cosineSimilarity } from './similarity.js';
2
+ export class MemoryVectorStore {
3
+ documents = new Map();
4
+ client;
5
+ model;
6
+ constructor(options = {}) {
7
+ this.client = options.client;
8
+ this.model = options.model;
9
+ }
10
+ async add(docs) {
11
+ const docsToEmbed = [];
12
+ const readyDocs = [];
13
+ for (const doc of docs) {
14
+ const id = doc.id || Math.random().toString(36).substring(7);
15
+ const fullDoc = {
16
+ id,
17
+ content: doc.content,
18
+ metadata: doc.metadata || {},
19
+ embedding: doc.embedding,
20
+ };
21
+ if (!fullDoc.embedding) {
22
+ docsToEmbed.push(fullDoc);
23
+ }
24
+ else {
25
+ readyDocs.push(fullDoc);
26
+ }
27
+ }
28
+ if (docsToEmbed.length > 0) {
29
+ if (!this.client) {
30
+ throw new Error('AI Client required to generate embeddings. Pass "client" to constructor or provide "embedding" in document.');
31
+ }
32
+ const contents = docsToEmbed.map(d => d.content);
33
+ const response = await this.client.embed({
34
+ model: this.model,
35
+ input: contents,
36
+ });
37
+ docsToEmbed.forEach((doc, i) => {
38
+ doc.embedding = response.embeddings[i];
39
+ readyDocs.push(doc);
40
+ });
41
+ }
42
+ for (const doc of readyDocs) {
43
+ this.documents.set(doc.id, doc);
44
+ }
45
+ }
46
+ async search(query, limit = 3, threshold = 0.0) {
47
+ if (this.documents.size === 0)
48
+ return [];
49
+ if (!this.client) {
50
+ throw new Error('AI Client required to search by text query.');
51
+ }
52
+ const response = await this.client.embed({
53
+ model: this.model,
54
+ input: query,
55
+ });
56
+ const queryEmbedding = response.embeddings[0];
57
+ const results = [];
58
+ for (const doc of this.documents.values()) {
59
+ if (!doc.embedding)
60
+ continue;
61
+ const score = cosineSimilarity(queryEmbedding, doc.embedding);
62
+ if (score >= threshold) {
63
+ results.push({
64
+ ...doc,
65
+ score,
66
+ });
67
+ }
68
+ }
69
+ return results
70
+ .sort((a, b) => b.score - a.score)
71
+ .slice(0, limit);
72
+ }
73
+ delete(id) {
74
+ return this.documents.delete(id);
75
+ }
76
+ clear() {
77
+ this.documents.clear();
78
+ }
79
+ get count() {
80
+ return this.documents.size;
81
+ }
82
+ }
package/dist/bare.d.ts ADDED
@@ -0,0 +1,22 @@
1
+ export interface BareClientOptions {
2
+ baseUrl: string;
3
+ headers?: Record<string, string>;
4
+ }
5
+ export interface BareResponse<T = unknown> {
6
+ status: number;
7
+ headers: Headers;
8
+ json(): Promise<T>;
9
+ text(): Promise<string>;
10
+ arrayBuffer(): Promise<ArrayBuffer>;
11
+ blob(): Promise<Blob>;
12
+ }
13
+ export interface BareClient {
14
+ get<T = unknown>(path: string): Promise<BareResponse<T>>;
15
+ post<T = unknown>(path: string, body?: unknown): Promise<BareResponse<T>>;
16
+ put<T = unknown>(path: string, body?: unknown): Promise<BareResponse<T>>;
17
+ patch<T = unknown>(path: string, body?: unknown): Promise<BareResponse<T>>;
18
+ delete<T = unknown>(path: string): Promise<BareResponse<T>>;
19
+ }
20
+ export declare function createBareClient(options: BareClientOptions): BareClient;
21
+ export declare function bareGet<T = unknown>(url: string, headers?: Record<string, string>): Promise<BareResponse<T>>;
22
+ export declare function barePost<T = unknown>(url: string, data?: unknown, headers?: Record<string, string>): Promise<BareResponse<T>>;
package/dist/bare.js ADDED
@@ -0,0 +1,91 @@
1
+ import { request as undiciRequest } from 'undici';
2
+ export function createBareClient(options) {
3
+ const base = options.baseUrl.endsWith('/')
4
+ ? options.baseUrl.slice(0, -1)
5
+ : options.baseUrl;
6
+ const defaultHeaders = options.headers || {};
7
+ const jsonHeaders = {
8
+ ...defaultHeaders,
9
+ 'Content-Type': 'application/json'
10
+ };
11
+ const wrapResponse = (statusCode, headers, body) => ({
12
+ status: statusCode,
13
+ headers: new Headers(Object.fromEntries(Object.entries(headers).map(([k, v]) => [k, Array.isArray(v) ? v.join(', ') : String(v)]))),
14
+ json: () => body.json(),
15
+ text: () => body.text(),
16
+ arrayBuffer: () => body.arrayBuffer(),
17
+ blob: async () => new Blob([await body.arrayBuffer()])
18
+ });
19
+ return {
20
+ async get(path) {
21
+ const { statusCode, headers, body } = await undiciRequest(base + path, {
22
+ method: 'GET',
23
+ headers: defaultHeaders
24
+ });
25
+ return wrapResponse(statusCode, headers, body);
26
+ },
27
+ async post(path, data) {
28
+ const { statusCode, headers, body } = await undiciRequest(base + path, {
29
+ method: 'POST',
30
+ headers: jsonHeaders,
31
+ body: data !== undefined ? JSON.stringify(data) : undefined
32
+ });
33
+ return wrapResponse(statusCode, headers, body);
34
+ },
35
+ async put(path, data) {
36
+ const { statusCode, headers, body } = await undiciRequest(base + path, {
37
+ method: 'PUT',
38
+ headers: jsonHeaders,
39
+ body: data !== undefined ? JSON.stringify(data) : undefined
40
+ });
41
+ return wrapResponse(statusCode, headers, body);
42
+ },
43
+ async patch(path, data) {
44
+ const { statusCode, headers, body } = await undiciRequest(base + path, {
45
+ method: 'PATCH',
46
+ headers: jsonHeaders,
47
+ body: data !== undefined ? JSON.stringify(data) : undefined
48
+ });
49
+ return wrapResponse(statusCode, headers, body);
50
+ },
51
+ async delete(path) {
52
+ const { statusCode, headers, body } = await undiciRequest(base + path, {
53
+ method: 'DELETE',
54
+ headers: defaultHeaders
55
+ });
56
+ return wrapResponse(statusCode, headers, body);
57
+ }
58
+ };
59
+ }
60
+ export async function bareGet(url, headers) {
61
+ const { statusCode, headers: resHeaders, body } = await undiciRequest(url, {
62
+ method: 'GET',
63
+ headers
64
+ });
65
+ return {
66
+ status: statusCode,
67
+ headers: new Headers(Object.fromEntries(Object.entries(resHeaders).map(([k, v]) => [k, Array.isArray(v) ? v.join(', ') : String(v)]))),
68
+ json: () => body.json(),
69
+ text: () => body.text(),
70
+ arrayBuffer: () => body.arrayBuffer(),
71
+ blob: async () => new Blob([await body.arrayBuffer()])
72
+ };
73
+ }
74
+ export async function barePost(url, data, headers) {
75
+ const { statusCode, headers: resHeaders, body } = await undiciRequest(url, {
76
+ method: 'POST',
77
+ headers: {
78
+ 'Content-Type': 'application/json',
79
+ ...headers
80
+ },
81
+ body: data !== undefined ? JSON.stringify(data) : undefined
82
+ });
83
+ return {
84
+ status: statusCode,
85
+ headers: new Headers(Object.fromEntries(Object.entries(resHeaders).map(([k, v]) => [k, Array.isArray(v) ? v.join(', ') : String(v)]))),
86
+ json: () => body.json(),
87
+ text: () => body.text(),
88
+ arrayBuffer: () => body.arrayBuffer(),
89
+ blob: async () => new Blob([await body.arrayBuffer()])
90
+ };
91
+ }
@@ -16,4 +16,3 @@ export declare class LoadGenerator {
16
16
  start(): Promise<void[]>;
17
17
  stop(): void;
18
18
  }
19
- //# sourceMappingURL=generator.d.ts.map
@@ -46,4 +46,3 @@ export declare class LoadStats {
46
46
  errors: Record<string, number>;
47
47
  };
48
48
  }
49
- //# sourceMappingURL=stats.d.ts.map
@@ -0,0 +1,12 @@
1
+ import { CacheEntry, CacheStorage } from '../types/index.js';
2
+ export declare class FileStorage implements CacheStorage {
3
+ private dir;
4
+ constructor(baseDir?: string);
5
+ private getHash;
6
+ private getPath;
7
+ private ensureDir;
8
+ get(key: string): Promise<CacheEntry | undefined>;
9
+ set(key: string, entry: CacheEntry, ttl?: number): Promise<void>;
10
+ delete(key: string): Promise<void>;
11
+ clear(): Promise<void>;
12
+ }
@@ -0,0 +1,50 @@
1
+ import { mkdir, readFile, writeFile, unlink, rm } from 'node:fs/promises';
2
+ import { join } from 'node:path';
3
+ import { createHash } from 'node:crypto';
4
+ import { existsSync } from 'node:fs';
5
+ export class FileStorage {
6
+ dir;
7
+ constructor(baseDir = '.recker/cache') {
8
+ this.dir = baseDir;
9
+ }
10
+ getHash(key) {
11
+ return createHash('md5').update(key).digest('hex');
12
+ }
13
+ getPath(key) {
14
+ return join(this.dir, `${this.getHash(key)}.json`);
15
+ }
16
+ async ensureDir() {
17
+ if (!existsSync(this.dir)) {
18
+ await mkdir(this.dir, { recursive: true });
19
+ }
20
+ }
21
+ async get(key) {
22
+ try {
23
+ const path = this.getPath(key);
24
+ if (!existsSync(path))
25
+ return undefined;
26
+ const content = await readFile(path, 'utf-8');
27
+ const data = JSON.parse(content);
28
+ return data;
29
+ }
30
+ catch (error) {
31
+ return undefined;
32
+ }
33
+ }
34
+ async set(key, entry, ttl) {
35
+ await this.ensureDir();
36
+ const path = this.getPath(key);
37
+ await writeFile(path, JSON.stringify(entry), 'utf-8');
38
+ }
39
+ async delete(key) {
40
+ const path = this.getPath(key);
41
+ if (existsSync(path)) {
42
+ await unlink(path);
43
+ }
44
+ }
45
+ async clear() {
46
+ if (existsSync(this.dir)) {
47
+ await rm(this.dir, { recursive: true, force: true });
48
+ }
49
+ }
50
+ }
@@ -1,13 +1,27 @@
1
- import { CacheEntry, CacheStorage } from '../types/index.js';
2
- export declare class FileStorage implements CacheStorage {
3
- private dir;
4
- constructor(baseDir?: string);
5
- private getHash;
6
- private getPath;
7
- private ensureDir;
8
- get(key: string): Promise<CacheEntry | undefined>;
9
- set(key: string, entry: CacheEntry, ttl?: number): Promise<void>;
1
+ import type { CacheStorage, CacheEntry } from '../types/index.js';
2
+ export interface FileSystemStorageOptions {
3
+ path?: string;
4
+ ttl?: number;
5
+ cleanupInterval?: number;
6
+ maxSize?: number;
7
+ }
8
+ export declare class FileSystemStorage implements CacheStorage {
9
+ private cacheDir;
10
+ private defaultTtl;
11
+ private cleanupInterval;
12
+ private maxSize;
13
+ private cleanupTimer;
14
+ constructor(options?: FileSystemStorageOptions);
15
+ private initCacheDir;
16
+ private getFilePath;
17
+ private isExpired;
18
+ get(key: string): Promise<CacheEntry | undefined | null>;
19
+ set(key: string, value: CacheEntry, ttl?: number): Promise<void>;
10
20
  delete(key: string): Promise<void>;
11
- clear(): Promise<void>;
21
+ clear(prefix?: string): Promise<void>;
22
+ size(): Promise<number>;
23
+ keys(): Promise<string[]>;
24
+ private cleanupExpired;
25
+ private enforceMaxSize;
26
+ shutdown(): void;
12
27
  }
13
- //# sourceMappingURL=file-storage.d.ts.map