recker 1.0.20-next.de24f7d → 1.0.20-next.e194d90
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +31 -0
- package/dist/ai/adaptive-timeout.d.ts +0 -1
- package/dist/ai/client.d.ts +0 -1
- package/dist/ai/client.js +6 -0
- package/dist/ai/index.d.ts +3 -1
- package/dist/ai/index.js +3 -0
- package/dist/ai/providers/anthropic.d.ts +0 -1
- package/dist/ai/providers/base.d.ts +0 -1
- package/dist/ai/providers/google.d.ts +59 -0
- package/dist/ai/providers/google.js +305 -0
- package/dist/ai/providers/index.d.ts +4 -1
- package/dist/ai/providers/index.js +2 -0
- package/dist/ai/providers/ollama.d.ts +44 -0
- package/dist/ai/providers/ollama.js +240 -0
- package/dist/ai/providers/openai.d.ts +0 -1
- package/dist/ai/rate-limiter.d.ts +0 -1
- package/dist/ai/vector/index.d.ts +2 -0
- package/dist/ai/vector/index.js +2 -0
- package/dist/ai/vector/similarity.d.ts +2 -0
- package/dist/ai/vector/similarity.js +27 -0
- package/dist/ai/vector/store.d.ts +27 -0
- package/dist/ai/vector/store.js +82 -0
- package/dist/bench/generator.d.ts +0 -1
- package/dist/bench/stats.d.ts +0 -1
- package/dist/cache/basic-file-storage.d.ts +12 -0
- package/dist/cache/basic-file-storage.js +50 -0
- package/dist/cache/file-storage.d.ts +25 -11
- package/dist/cache/file-storage.js +175 -30
- package/dist/cache/memory-limits.d.ts +0 -1
- package/dist/cache/memory-storage.d.ts +0 -1
- package/dist/cache/redis-storage.d.ts +0 -1
- package/dist/cli/handler.d.ts +2 -1
- package/dist/cli/handler.js +36 -5
- package/dist/cli/index.d.ts +0 -2
- package/dist/cli/index.js +559 -6
- package/dist/cli/presets.d.ts +0 -1
- package/dist/cli/tui/ai-chat.d.ts +0 -1
- package/dist/cli/tui/load-dashboard.d.ts +0 -1
- package/dist/cli/tui/scroll-buffer.d.ts +0 -1
- package/dist/cli/tui/search-panel.d.ts +0 -1
- package/dist/cli/tui/shell-search.d.ts +0 -1
- package/dist/cli/tui/shell.d.ts +0 -1
- package/dist/cli/tui/shell.js +1 -1
- package/dist/cli/tui/websocket.d.ts +0 -1
- package/dist/constants/http-status.d.ts +0 -1
- package/dist/constants.d.ts +0 -1
- package/dist/contract/index.d.ts +0 -1
- package/dist/cookies/memory-cookie-jar.d.ts +0 -1
- package/dist/core/client.d.ts +0 -1
- package/dist/core/client.js +1 -1
- package/dist/core/errors.d.ts +0 -1
- package/dist/core/index.d.ts +0 -1
- package/dist/core/request-promise.d.ts +0 -1
- package/dist/core/request.d.ts +0 -1
- package/dist/core/response.d.ts +0 -1
- package/dist/dns/index.d.ts +0 -1
- package/dist/dns/propagation.d.ts +0 -1
- package/dist/events/request-events.d.ts +0 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.js +1 -0
- package/dist/mcp/client.d.ts +0 -1
- package/dist/mcp/contract.d.ts +0 -1
- package/dist/mcp/embeddings-loader.d.ts +0 -1
- package/dist/mcp/geoip-loader.d.ts +0 -1
- package/dist/mcp/index.d.ts +0 -1
- package/dist/mcp/ip-intel.d.ts +0 -1
- package/dist/mcp/search/hybrid-search.d.ts +0 -1
- package/dist/mcp/search/index.d.ts +0 -1
- package/dist/mcp/search/math.d.ts +0 -1
- package/dist/mcp/search/types.d.ts +0 -1
- package/dist/mcp/server.d.ts +6 -2
- package/dist/mcp/server.js +193 -151
- package/dist/mcp/tools/loader.d.ts +2 -0
- package/dist/mcp/tools/loader.js +41 -0
- package/dist/mcp/tools/network.d.ts +3 -0
- package/dist/mcp/tools/network.js +267 -0
- package/dist/mcp/tools/registry.d.ts +17 -0
- package/dist/mcp/tools/registry.js +37 -0
- package/dist/mcp/types.d.ts +0 -1
- package/dist/plugins/auth/api-key.d.ts +8 -0
- package/dist/plugins/auth/api-key.js +27 -0
- package/dist/plugins/auth/auth0.d.ts +33 -0
- package/dist/plugins/auth/auth0.js +94 -0
- package/dist/plugins/auth/aws-sigv4.d.ts +10 -0
- package/dist/plugins/auth/aws-sigv4.js +88 -0
- package/dist/plugins/auth/azure-ad.d.ts +48 -0
- package/dist/plugins/auth/azure-ad.js +152 -0
- package/dist/plugins/auth/basic.d.ts +7 -0
- package/dist/plugins/auth/basic.js +13 -0
- package/dist/plugins/auth/bearer.d.ts +8 -0
- package/dist/plugins/auth/bearer.js +17 -0
- package/dist/plugins/auth/cognito.d.ts +45 -0
- package/dist/plugins/auth/cognito.js +208 -0
- package/dist/plugins/auth/digest.d.ts +8 -0
- package/dist/plugins/auth/digest.js +100 -0
- package/dist/plugins/auth/firebase.d.ts +32 -0
- package/dist/plugins/auth/firebase.js +195 -0
- package/dist/plugins/auth/github-app.d.ts +36 -0
- package/dist/plugins/auth/github-app.js +170 -0
- package/dist/plugins/auth/google-service-account.d.ts +49 -0
- package/dist/plugins/auth/google-service-account.js +172 -0
- package/dist/plugins/auth/index.d.ts +15 -0
- package/dist/plugins/auth/index.js +15 -0
- package/dist/plugins/auth/mtls.d.ts +37 -0
- package/dist/plugins/auth/mtls.js +140 -0
- package/dist/plugins/auth/oauth2.d.ts +8 -0
- package/dist/plugins/auth/oauth2.js +26 -0
- package/dist/plugins/auth/oidc.d.ts +55 -0
- package/dist/plugins/auth/oidc.js +222 -0
- package/dist/plugins/auth/okta.d.ts +47 -0
- package/dist/plugins/auth/okta.js +157 -0
- package/dist/plugins/auth.d.ts +1 -45
- package/dist/plugins/auth.js +1 -268
- package/dist/plugins/cache.d.ts +0 -1
- package/dist/plugins/cache.js +1 -1
- package/dist/plugins/certificate-pinning.d.ts +59 -0
- package/dist/plugins/certificate-pinning.js +236 -0
- package/dist/plugins/circuit-breaker.d.ts +0 -1
- package/dist/plugins/compression.d.ts +0 -1
- package/dist/plugins/cookie-jar.d.ts +0 -1
- package/dist/plugins/dedup.d.ts +0 -1
- package/dist/plugins/graphql.d.ts +0 -1
- package/dist/plugins/grpc-web.d.ts +0 -1
- package/dist/plugins/har-player.d.ts +0 -1
- package/dist/plugins/har-recorder.d.ts +0 -1
- package/dist/plugins/hls.d.ts +0 -1
- package/dist/plugins/http2-push.d.ts +0 -1
- package/dist/plugins/http3.d.ts +0 -1
- package/dist/plugins/index.d.ts +27 -0
- package/dist/plugins/index.js +27 -0
- package/dist/plugins/interface-rotator.d.ts +0 -1
- package/dist/plugins/jsonrpc.d.ts +0 -1
- package/dist/plugins/logger.d.ts +0 -1
- package/dist/plugins/odata.d.ts +0 -1
- package/dist/plugins/pagination.d.ts +0 -1
- package/dist/plugins/proxy-rotator.d.ts +0 -1
- package/dist/plugins/rate-limit.d.ts +15 -0
- package/dist/plugins/rate-limit.js +162 -0
- package/dist/plugins/retry.d.ts +0 -1
- package/dist/plugins/retry.js +2 -2
- package/dist/plugins/scrape.d.ts +0 -1
- package/dist/plugins/server-timing.d.ts +0 -1
- package/dist/plugins/soap.d.ts +0 -1
- package/dist/plugins/user-agent.d.ts +0 -1
- package/dist/plugins/xml.d.ts +0 -1
- package/dist/plugins/xsrf.d.ts +0 -1
- package/dist/presets/anthropic.d.ts +0 -1
- package/dist/presets/aws.d.ts +0 -1
- package/dist/presets/azure-openai.d.ts +0 -1
- package/dist/presets/azure.d.ts +0 -1
- package/dist/presets/cloudflare.d.ts +0 -1
- package/dist/presets/cohere.d.ts +0 -1
- package/dist/presets/deepseek.d.ts +0 -1
- package/dist/presets/digitalocean.d.ts +0 -1
- package/dist/presets/discord.d.ts +0 -1
- package/dist/presets/fireworks.d.ts +0 -1
- package/dist/presets/gcp.d.ts +0 -1
- package/dist/presets/gemini.d.ts +0 -1
- package/dist/presets/github.d.ts +0 -1
- package/dist/presets/gitlab.d.ts +0 -1
- package/dist/presets/groq.d.ts +0 -1
- package/dist/presets/huggingface.d.ts +0 -1
- package/dist/presets/index.d.ts +0 -1
- package/dist/presets/linear.d.ts +0 -1
- package/dist/presets/mailgun.d.ts +0 -1
- package/dist/presets/meta.d.ts +0 -1
- package/dist/presets/mistral.d.ts +0 -1
- package/dist/presets/notion.d.ts +0 -1
- package/dist/presets/openai.d.ts +0 -1
- package/dist/presets/oracle.d.ts +0 -1
- package/dist/presets/perplexity.d.ts +0 -1
- package/dist/presets/registry.d.ts +0 -1
- package/dist/presets/replicate.d.ts +0 -1
- package/dist/presets/sinch.d.ts +0 -1
- package/dist/presets/slack.d.ts +0 -1
- package/dist/presets/stripe.d.ts +0 -1
- package/dist/presets/supabase.d.ts +0 -1
- package/dist/presets/tiktok.d.ts +0 -1
- package/dist/presets/together.d.ts +0 -1
- package/dist/presets/twilio.d.ts +0 -1
- package/dist/presets/vercel.d.ts +0 -1
- package/dist/presets/vultr.d.ts +0 -1
- package/dist/presets/xai.d.ts +0 -1
- package/dist/presets/youtube.d.ts +0 -1
- package/dist/protocols/ftp.d.ts +0 -1
- package/dist/protocols/index.d.ts +0 -1
- package/dist/protocols/sftp.d.ts +0 -1
- package/dist/protocols/telnet.d.ts +0 -1
- package/dist/recker.d.ts +0 -1
- package/dist/runner/request-runner.d.ts +0 -1
- package/dist/scrape/document.d.ts +0 -1
- package/dist/scrape/element.d.ts +0 -1
- package/dist/scrape/extractors.d.ts +0 -1
- package/dist/scrape/index.d.ts +0 -1
- package/dist/scrape/types.d.ts +0 -1
- package/dist/testing/index.d.ts +16 -1
- package/dist/testing/index.js +8 -0
- package/dist/testing/mock-dns-server.d.ts +69 -0
- package/dist/testing/mock-dns-server.js +269 -0
- package/dist/testing/mock-ftp-server.d.ts +89 -0
- package/dist/testing/mock-ftp-server.js +562 -0
- package/dist/testing/mock-hls-server.d.ts +80 -0
- package/dist/testing/mock-hls-server.js +381 -0
- package/dist/testing/mock-http-server.d.ts +99 -0
- package/dist/testing/mock-http-server.js +298 -0
- package/dist/testing/mock-sse-server.d.ts +76 -0
- package/dist/testing/mock-sse-server.js +291 -0
- package/dist/testing/mock-telnet-server.d.ts +59 -0
- package/dist/testing/mock-telnet-server.js +273 -0
- package/dist/testing/mock-udp-server.d.ts +0 -1
- package/dist/testing/mock-websocket-server.d.ts +77 -0
- package/dist/testing/mock-websocket-server.js +316 -0
- package/dist/testing/mock-whois-server.d.ts +56 -0
- package/dist/testing/mock-whois-server.js +234 -0
- package/dist/testing/mock.d.ts +0 -1
- package/dist/transport/base-udp.d.ts +0 -1
- package/dist/transport/fetch.d.ts +0 -1
- package/dist/transport/udp-response.d.ts +0 -1
- package/dist/transport/udp.d.ts +0 -1
- package/dist/transport/undici.d.ts +0 -1
- package/dist/transport/undici.js +1 -1
- package/dist/types/ai.d.ts +0 -1
- package/dist/types/index.d.ts +0 -1
- package/dist/types/logger.d.ts +0 -1
- package/dist/types/udp.d.ts +0 -1
- package/dist/udp/index.d.ts +0 -1
- package/dist/utils/agent-manager.d.ts +0 -1
- package/dist/utils/body.d.ts +0 -1
- package/dist/utils/cert.d.ts +0 -1
- package/dist/utils/charset.d.ts +0 -1
- package/dist/utils/chart.d.ts +0 -1
- package/dist/utils/client-pool.d.ts +0 -1
- package/dist/utils/colors.d.ts +0 -1
- package/dist/utils/concurrency.d.ts +0 -1
- package/dist/utils/dns-toolkit.d.ts +0 -1
- package/dist/utils/dns-toolkit.js +1 -1
- package/dist/utils/dns.d.ts +0 -1
- package/dist/utils/dns.js +2 -2
- package/dist/utils/doh.d.ts +0 -1
- package/dist/utils/download.d.ts +0 -1
- package/dist/utils/env-proxy.d.ts +0 -1
- package/dist/utils/header-parser.d.ts +0 -1
- package/dist/utils/html-cleaner.d.ts +0 -1
- package/dist/utils/link-header.d.ts +0 -1
- package/dist/utils/optional-require.d.ts +0 -1
- package/dist/utils/optional-require.js +1 -1
- package/dist/utils/progress.d.ts +0 -1
- package/dist/utils/rdap.d.ts +0 -1
- package/dist/utils/request-pool.d.ts +0 -1
- package/dist/utils/security-grader.d.ts +0 -1
- package/dist/utils/sparkline.d.ts +0 -1
- package/dist/utils/sse.d.ts +0 -1
- package/dist/utils/streaming.d.ts +0 -1
- package/dist/utils/system-metrics.d.ts +0 -1
- package/dist/utils/tls-inspector.d.ts +0 -1
- package/dist/utils/try-fn.d.ts +0 -1
- package/dist/utils/upload.d.ts +0 -1
- package/dist/utils/user-agent.d.ts +0 -1
- package/dist/utils/whois.d.ts +0 -1
- package/dist/webrtc/index.d.ts +0 -1
- package/dist/webrtc/index.js +1 -1
- package/dist/websocket/client.d.ts +0 -1
- package/package.json +12 -3
- package/dist/ai/adaptive-timeout.d.ts.map +0 -1
- package/dist/ai/client.d.ts.map +0 -1
- package/dist/ai/index.d.ts.map +0 -1
- package/dist/ai/providers/anthropic.d.ts.map +0 -1
- package/dist/ai/providers/base.d.ts.map +0 -1
- package/dist/ai/providers/index.d.ts.map +0 -1
- package/dist/ai/providers/openai.d.ts.map +0 -1
- package/dist/ai/rate-limiter.d.ts.map +0 -1
- package/dist/bench/generator.d.ts.map +0 -1
- package/dist/bench/stats.d.ts.map +0 -1
- package/dist/cache/file-storage.d.ts.map +0 -1
- package/dist/cache/memory-limits.d.ts.map +0 -1
- package/dist/cache/memory-storage.d.ts.map +0 -1
- package/dist/cache/redis-storage.d.ts.map +0 -1
- package/dist/cli/handler.d.ts.map +0 -1
- package/dist/cli/index.d.ts.map +0 -1
- package/dist/cli/presets.d.ts.map +0 -1
- package/dist/cli/tui/ai-chat.d.ts.map +0 -1
- package/dist/cli/tui/load-dashboard.d.ts.map +0 -1
- package/dist/cli/tui/scroll-buffer.d.ts.map +0 -1
- package/dist/cli/tui/search-panel.d.ts.map +0 -1
- package/dist/cli/tui/shell-search.d.ts.map +0 -1
- package/dist/cli/tui/shell.d.ts.map +0 -1
- package/dist/cli/tui/websocket.d.ts.map +0 -1
- package/dist/constants/http-status.d.ts.map +0 -1
- package/dist/constants.d.ts.map +0 -1
- package/dist/contract/index.d.ts.map +0 -1
- package/dist/cookies/memory-cookie-jar.d.ts.map +0 -1
- package/dist/core/client.d.ts.map +0 -1
- package/dist/core/errors.d.ts.map +0 -1
- package/dist/core/index.d.ts.map +0 -1
- package/dist/core/request-promise.d.ts.map +0 -1
- package/dist/core/request.d.ts.map +0 -1
- package/dist/core/response.d.ts.map +0 -1
- package/dist/dns/index.d.ts.map +0 -1
- package/dist/dns/propagation.d.ts.map +0 -1
- package/dist/events/request-events.d.ts.map +0 -1
- package/dist/index.d.ts.map +0 -1
- package/dist/mcp/client.d.ts.map +0 -1
- package/dist/mcp/contract.d.ts.map +0 -1
- package/dist/mcp/embeddings-loader.d.ts.map +0 -1
- package/dist/mcp/geoip-loader.d.ts.map +0 -1
- package/dist/mcp/index.d.ts.map +0 -1
- package/dist/mcp/ip-intel.d.ts.map +0 -1
- package/dist/mcp/search/hybrid-search.d.ts.map +0 -1
- package/dist/mcp/search/index.d.ts.map +0 -1
- package/dist/mcp/search/math.d.ts.map +0 -1
- package/dist/mcp/search/types.d.ts.map +0 -1
- package/dist/mcp/server.d.ts.map +0 -1
- package/dist/mcp/types.d.ts.map +0 -1
- package/dist/plugins/auth.d.ts.map +0 -1
- package/dist/plugins/cache.d.ts.map +0 -1
- package/dist/plugins/circuit-breaker.d.ts.map +0 -1
- package/dist/plugins/compression.d.ts.map +0 -1
- package/dist/plugins/cookie-jar.d.ts.map +0 -1
- package/dist/plugins/dedup.d.ts.map +0 -1
- package/dist/plugins/graphql.d.ts.map +0 -1
- package/dist/plugins/grpc-web.d.ts.map +0 -1
- package/dist/plugins/har-player.d.ts.map +0 -1
- package/dist/plugins/har-recorder.d.ts.map +0 -1
- package/dist/plugins/hls.d.ts.map +0 -1
- package/dist/plugins/http2-push.d.ts.map +0 -1
- package/dist/plugins/http3.d.ts.map +0 -1
- package/dist/plugins/interface-rotator.d.ts.map +0 -1
- package/dist/plugins/jsonrpc.d.ts.map +0 -1
- package/dist/plugins/logger.d.ts.map +0 -1
- package/dist/plugins/odata.d.ts.map +0 -1
- package/dist/plugins/pagination.d.ts.map +0 -1
- package/dist/plugins/proxy-rotator.d.ts.map +0 -1
- package/dist/plugins/retry.d.ts.map +0 -1
- package/dist/plugins/scrape.d.ts.map +0 -1
- package/dist/plugins/server-timing.d.ts.map +0 -1
- package/dist/plugins/soap.d.ts.map +0 -1
- package/dist/plugins/user-agent.d.ts.map +0 -1
- package/dist/plugins/xml.d.ts.map +0 -1
- package/dist/plugins/xsrf.d.ts.map +0 -1
- package/dist/presets/anthropic.d.ts.map +0 -1
- package/dist/presets/aws.d.ts.map +0 -1
- package/dist/presets/azure-openai.d.ts.map +0 -1
- package/dist/presets/azure.d.ts.map +0 -1
- package/dist/presets/cloudflare.d.ts.map +0 -1
- package/dist/presets/cohere.d.ts.map +0 -1
- package/dist/presets/deepseek.d.ts.map +0 -1
- package/dist/presets/digitalocean.d.ts.map +0 -1
- package/dist/presets/discord.d.ts.map +0 -1
- package/dist/presets/fireworks.d.ts.map +0 -1
- package/dist/presets/gcp.d.ts.map +0 -1
- package/dist/presets/gemini.d.ts.map +0 -1
- package/dist/presets/github.d.ts.map +0 -1
- package/dist/presets/gitlab.d.ts.map +0 -1
- package/dist/presets/groq.d.ts.map +0 -1
- package/dist/presets/huggingface.d.ts.map +0 -1
- package/dist/presets/index.d.ts.map +0 -1
- package/dist/presets/linear.d.ts.map +0 -1
- package/dist/presets/mailgun.d.ts.map +0 -1
- package/dist/presets/meta.d.ts.map +0 -1
- package/dist/presets/mistral.d.ts.map +0 -1
- package/dist/presets/notion.d.ts.map +0 -1
- package/dist/presets/openai.d.ts.map +0 -1
- package/dist/presets/oracle.d.ts.map +0 -1
- package/dist/presets/perplexity.d.ts.map +0 -1
- package/dist/presets/registry.d.ts.map +0 -1
- package/dist/presets/replicate.d.ts.map +0 -1
- package/dist/presets/sinch.d.ts.map +0 -1
- package/dist/presets/slack.d.ts.map +0 -1
- package/dist/presets/stripe.d.ts.map +0 -1
- package/dist/presets/supabase.d.ts.map +0 -1
- package/dist/presets/tiktok.d.ts.map +0 -1
- package/dist/presets/together.d.ts.map +0 -1
- package/dist/presets/twilio.d.ts.map +0 -1
- package/dist/presets/vercel.d.ts.map +0 -1
- package/dist/presets/vultr.d.ts.map +0 -1
- package/dist/presets/xai.d.ts.map +0 -1
- package/dist/presets/youtube.d.ts.map +0 -1
- package/dist/protocols/ftp.d.ts.map +0 -1
- package/dist/protocols/index.d.ts.map +0 -1
- package/dist/protocols/sftp.d.ts.map +0 -1
- package/dist/protocols/telnet.d.ts.map +0 -1
- package/dist/recker.d.ts.map +0 -1
- package/dist/runner/request-runner.d.ts.map +0 -1
- package/dist/scrape/document.d.ts.map +0 -1
- package/dist/scrape/element.d.ts.map +0 -1
- package/dist/scrape/extractors.d.ts.map +0 -1
- package/dist/scrape/index.d.ts.map +0 -1
- package/dist/scrape/types.d.ts.map +0 -1
- package/dist/testing/index.d.ts.map +0 -1
- package/dist/testing/mock-udp-server.d.ts.map +0 -1
- package/dist/testing/mock.d.ts.map +0 -1
- package/dist/transport/base-udp.d.ts.map +0 -1
- package/dist/transport/fetch.d.ts.map +0 -1
- package/dist/transport/udp-response.d.ts.map +0 -1
- package/dist/transport/udp.d.ts.map +0 -1
- package/dist/transport/undici.d.ts.map +0 -1
- package/dist/types/ai.d.ts.map +0 -1
- package/dist/types/index.d.ts.map +0 -1
- package/dist/types/logger.d.ts.map +0 -1
- package/dist/types/udp.d.ts.map +0 -1
- package/dist/udp/index.d.ts.map +0 -1
- package/dist/utils/agent-manager.d.ts.map +0 -1
- package/dist/utils/body.d.ts.map +0 -1
- package/dist/utils/cert.d.ts.map +0 -1
- package/dist/utils/charset.d.ts.map +0 -1
- package/dist/utils/chart.d.ts.map +0 -1
- package/dist/utils/client-pool.d.ts.map +0 -1
- package/dist/utils/colors.d.ts.map +0 -1
- package/dist/utils/concurrency.d.ts.map +0 -1
- package/dist/utils/dns-toolkit.d.ts.map +0 -1
- package/dist/utils/dns.d.ts.map +0 -1
- package/dist/utils/doh.d.ts.map +0 -1
- package/dist/utils/download.d.ts.map +0 -1
- package/dist/utils/env-proxy.d.ts.map +0 -1
- package/dist/utils/header-parser.d.ts.map +0 -1
- package/dist/utils/html-cleaner.d.ts.map +0 -1
- package/dist/utils/link-header.d.ts.map +0 -1
- package/dist/utils/optional-require.d.ts.map +0 -1
- package/dist/utils/progress.d.ts.map +0 -1
- package/dist/utils/rdap.d.ts.map +0 -1
- package/dist/utils/request-pool.d.ts.map +0 -1
- package/dist/utils/security-grader.d.ts.map +0 -1
- package/dist/utils/sparkline.d.ts.map +0 -1
- package/dist/utils/sse.d.ts.map +0 -1
- package/dist/utils/streaming.d.ts.map +0 -1
- package/dist/utils/system-metrics.d.ts.map +0 -1
- package/dist/utils/tls-inspector.d.ts.map +0 -1
- package/dist/utils/try-fn.d.ts.map +0 -1
- package/dist/utils/upload.d.ts.map +0 -1
- package/dist/utils/user-agent.d.ts.map +0 -1
- package/dist/utils/whois.d.ts.map +0 -1
- package/dist/webrtc/index.d.ts.map +0 -1
- package/dist/websocket/client.d.ts.map +0 -1
package/dist/cli/index.js
CHANGED
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
#!/usr/bin/env node
|
|
2
1
|
import { program } from 'commander';
|
|
3
2
|
import { promises as fs } from 'node:fs';
|
|
4
3
|
import { join } from 'node:path';
|
|
@@ -127,6 +126,8 @@ async function main() {
|
|
|
127
126
|
.version(version)
|
|
128
127
|
.argument('[args...]', 'URL, Method, Headers (Key:Value), Data (key=value)')
|
|
129
128
|
.option('-v, --verbose', 'Show full request/response details')
|
|
129
|
+
.option('-q, --quiet', 'Output only response body (no colors, perfect for piping)')
|
|
130
|
+
.option('-o, --output <file>', 'Write response body to file')
|
|
130
131
|
.option('-j, --json', 'Force JSON content-type')
|
|
131
132
|
.option('-e, --env [path]', 'Load .env file from current directory or specified path')
|
|
132
133
|
.addHelpText('after', `
|
|
@@ -179,7 +180,59 @@ ${colors.bold(colors.yellow('Available Presets:'))}
|
|
|
179
180
|
return;
|
|
180
181
|
}
|
|
181
182
|
if (url.startsWith('udp://')) {
|
|
182
|
-
|
|
183
|
+
const dgram = await import('node:dgram');
|
|
184
|
+
const { Buffer } = await import('node:buffer');
|
|
185
|
+
const u = new URL(url);
|
|
186
|
+
const host = u.hostname;
|
|
187
|
+
const port = parseInt(u.port || '9000');
|
|
188
|
+
const client = dgram.createSocket('udp4');
|
|
189
|
+
let payload;
|
|
190
|
+
let bodyData = undefined;
|
|
191
|
+
if (stdinData) {
|
|
192
|
+
bodyData = stdinData;
|
|
193
|
+
}
|
|
194
|
+
else if (Object.keys(data).length > 0) {
|
|
195
|
+
bodyData = JSON.stringify(data);
|
|
196
|
+
}
|
|
197
|
+
else {
|
|
198
|
+
bodyData = '';
|
|
199
|
+
}
|
|
200
|
+
if (typeof bodyData === 'string') {
|
|
201
|
+
payload = Buffer.from(bodyData);
|
|
202
|
+
}
|
|
203
|
+
else {
|
|
204
|
+
payload = Buffer.from(JSON.stringify(bodyData));
|
|
205
|
+
}
|
|
206
|
+
console.log(colors.gray(`Sending ${payload.length} bytes to ${host}:${port}...`));
|
|
207
|
+
client.on('message', (msg, rinfo) => {
|
|
208
|
+
if (!options.quiet) {
|
|
209
|
+
console.log(colors.green(`\nResponse from ${rinfo.address}:${rinfo.port}:`));
|
|
210
|
+
}
|
|
211
|
+
console.log(msg.toString());
|
|
212
|
+
client.close();
|
|
213
|
+
});
|
|
214
|
+
client.on('error', (err) => {
|
|
215
|
+
console.error(colors.red(`UDP Error: ${err.message}`));
|
|
216
|
+
client.close();
|
|
217
|
+
process.exit(1);
|
|
218
|
+
});
|
|
219
|
+
client.send(payload, port, host, (err) => {
|
|
220
|
+
if (err) {
|
|
221
|
+
console.error(colors.red(`Send Error: ${err.message}`));
|
|
222
|
+
client.close();
|
|
223
|
+
process.exit(1);
|
|
224
|
+
}
|
|
225
|
+
if (!options.quiet) {
|
|
226
|
+
console.log(colors.gray('Message sent. Waiting for response (2s timeout)...'));
|
|
227
|
+
}
|
|
228
|
+
});
|
|
229
|
+
setTimeout(() => {
|
|
230
|
+
if (!options.quiet) {
|
|
231
|
+
console.log(colors.gray('\nNo response received (timeout).'));
|
|
232
|
+
}
|
|
233
|
+
client.close();
|
|
234
|
+
process.exit(0);
|
|
235
|
+
}, 2000);
|
|
183
236
|
return;
|
|
184
237
|
}
|
|
185
238
|
try {
|
|
@@ -201,14 +254,18 @@ ${colors.bold(colors.yellow('Available Presets:'))}
|
|
|
201
254
|
headers,
|
|
202
255
|
body,
|
|
203
256
|
verbose: options.verbose,
|
|
257
|
+
quiet: options.quiet,
|
|
258
|
+
output: options.output,
|
|
204
259
|
presetConfig
|
|
205
260
|
});
|
|
206
261
|
}
|
|
207
262
|
catch (error) {
|
|
208
|
-
|
|
263
|
+
if (!options.quiet) {
|
|
264
|
+
console.error(colors.red(`
|
|
209
265
|
Error: ${error.message}`));
|
|
210
|
-
|
|
211
|
-
|
|
266
|
+
if (options.verbose && error.cause) {
|
|
267
|
+
console.error(error.cause);
|
|
268
|
+
}
|
|
212
269
|
}
|
|
213
270
|
process.exit(1);
|
|
214
271
|
}
|
|
@@ -725,7 +782,7 @@ ${colors.gray('Status:')} ${statusIcon}
|
|
|
725
782
|
.command('generate-dmarc')
|
|
726
783
|
.description('Generate a DMARC record interactively')
|
|
727
784
|
.option('-p, --policy <policy>', 'Policy: none, quarantine, reject', 'none')
|
|
728
|
-
.option('
|
|
785
|
+
.option('--subdomain-policy <policy>', 'Subdomain policy')
|
|
729
786
|
.option('--pct <percent>', 'Percentage of emails to apply policy', '100')
|
|
730
787
|
.option('--rua <emails>', 'Aggregate report email(s), comma-separated')
|
|
731
788
|
.option('--ruf <emails>', 'Forensic report email(s), comma-separated')
|
|
@@ -880,12 +937,507 @@ ${colors.bold(colors.yellow('Examples:'))}
|
|
|
880
937
|
const { startLoadDashboard } = await import('./tui/load-dashboard.js');
|
|
881
938
|
await startLoadDashboard({ url, users, duration, mode, http2, rampUp });
|
|
882
939
|
});
|
|
940
|
+
const serve = program.command('serve').description('Start mock servers for testing protocols');
|
|
941
|
+
serve
|
|
942
|
+
.command('http')
|
|
943
|
+
.description('Start a mock HTTP server')
|
|
944
|
+
.option('-p, --port <number>', 'Port to listen on', '3000')
|
|
945
|
+
.option('-h, --host <string>', 'Host to bind to', '127.0.0.1')
|
|
946
|
+
.option('--echo', 'Echo request body back in response')
|
|
947
|
+
.option('--delay <ms>', 'Add delay to responses (milliseconds)', '0')
|
|
948
|
+
.option('--cors', 'Enable CORS', true)
|
|
949
|
+
.addHelpText('after', `
|
|
950
|
+
${colors.bold(colors.yellow('Examples:'))}
|
|
951
|
+
${colors.green('$ rek serve http')} ${colors.gray('Start on port 3000')}
|
|
952
|
+
${colors.green('$ rek serve http -p 8080')} ${colors.gray('Start on port 8080')}
|
|
953
|
+
${colors.green('$ rek serve http --echo')} ${colors.gray('Echo mode')}
|
|
954
|
+
${colors.green('$ rek serve http --delay 500')} ${colors.gray('Add 500ms delay')}
|
|
955
|
+
`)
|
|
956
|
+
.action(async (options) => {
|
|
957
|
+
const { MockHttpServer } = await import('../testing/mock-http-server.js');
|
|
958
|
+
const server = await MockHttpServer.create({
|
|
959
|
+
port: parseInt(options.port),
|
|
960
|
+
host: options.host,
|
|
961
|
+
delay: parseInt(options.delay),
|
|
962
|
+
cors: options.cors,
|
|
963
|
+
});
|
|
964
|
+
if (options.echo) {
|
|
965
|
+
server.any('/*', (req) => ({
|
|
966
|
+
status: 200,
|
|
967
|
+
body: {
|
|
968
|
+
method: req.method,
|
|
969
|
+
path: req.path,
|
|
970
|
+
query: req.query,
|
|
971
|
+
headers: req.headers,
|
|
972
|
+
body: req.body,
|
|
973
|
+
},
|
|
974
|
+
}));
|
|
975
|
+
}
|
|
976
|
+
console.log(colors.green(`
|
|
977
|
+
┌─────────────────────────────────────────────┐
|
|
978
|
+
│ ${colors.bold('Recker Mock HTTP Server')} │
|
|
979
|
+
├─────────────────────────────────────────────┤
|
|
980
|
+
│ URL: ${colors.cyan(server.url.padEnd(37))}│
|
|
981
|
+
│ Mode: ${colors.yellow((options.echo ? 'Echo' : 'Default').padEnd(36))}│
|
|
982
|
+
│ Delay: ${colors.gray((options.delay + 'ms').padEnd(35))}│
|
|
983
|
+
├─────────────────────────────────────────────┤
|
|
984
|
+
│ Press ${colors.bold('Ctrl+C')} to stop │
|
|
985
|
+
└─────────────────────────────────────────────┘
|
|
986
|
+
`));
|
|
987
|
+
server.on('request', (req) => {
|
|
988
|
+
console.log(colors.gray(`${new Date().toISOString()} `) + colors.cyan(req.method.padEnd(7)) + req.path);
|
|
989
|
+
});
|
|
990
|
+
process.on('SIGINT', async () => {
|
|
991
|
+
console.log(colors.yellow('\nShutting down...'));
|
|
992
|
+
await server.stop();
|
|
993
|
+
process.exit(0);
|
|
994
|
+
});
|
|
995
|
+
});
|
|
996
|
+
serve
|
|
997
|
+
.command('websocket')
|
|
998
|
+
.alias('ws')
|
|
999
|
+
.description('Start a mock WebSocket server')
|
|
1000
|
+
.option('-p, --port <number>', 'Port to listen on', '8080')
|
|
1001
|
+
.option('-h, --host <string>', 'Host to bind to', '127.0.0.1')
|
|
1002
|
+
.option('--echo', 'Echo messages back (default: true)', true)
|
|
1003
|
+
.option('--no-echo', 'Disable echo mode')
|
|
1004
|
+
.option('--delay <ms>', 'Add delay to responses (milliseconds)', '0')
|
|
1005
|
+
.addHelpText('after', `
|
|
1006
|
+
${colors.bold(colors.yellow('Examples:'))}
|
|
1007
|
+
${colors.green('$ rek serve websocket')} ${colors.gray('Start on port 8080')}
|
|
1008
|
+
${colors.green('$ rek serve ws -p 9000')} ${colors.gray('Start on port 9000')}
|
|
1009
|
+
${colors.green('$ rek serve ws --no-echo')} ${colors.gray('Disable echo')}
|
|
1010
|
+
`)
|
|
1011
|
+
.action(async (options) => {
|
|
1012
|
+
const { MockWebSocketServer } = await import('../testing/mock-websocket-server.js');
|
|
1013
|
+
const server = await MockWebSocketServer.create({
|
|
1014
|
+
port: parseInt(options.port),
|
|
1015
|
+
host: options.host,
|
|
1016
|
+
echo: options.echo,
|
|
1017
|
+
delay: parseInt(options.delay),
|
|
1018
|
+
});
|
|
1019
|
+
console.log(colors.green(`
|
|
1020
|
+
┌─────────────────────────────────────────────┐
|
|
1021
|
+
│ ${colors.bold('Recker Mock WebSocket Server')} │
|
|
1022
|
+
├─────────────────────────────────────────────┤
|
|
1023
|
+
│ URL: ${colors.cyan(server.url.padEnd(37))}│
|
|
1024
|
+
│ Echo: ${colors.yellow((options.echo ? 'Enabled' : 'Disabled').padEnd(36))}│
|
|
1025
|
+
│ Delay: ${colors.gray((options.delay + 'ms').padEnd(35))}│
|
|
1026
|
+
├─────────────────────────────────────────────┤
|
|
1027
|
+
│ Press ${colors.bold('Ctrl+C')} to stop │
|
|
1028
|
+
└─────────────────────────────────────────────┘
|
|
1029
|
+
`));
|
|
1030
|
+
server.on('connection', (client) => {
|
|
1031
|
+
console.log(colors.green(`+ Connected: ${client.id}`));
|
|
1032
|
+
});
|
|
1033
|
+
server.on('message', (msg, client) => {
|
|
1034
|
+
const data = msg.data.toString().slice(0, 50);
|
|
1035
|
+
console.log(colors.gray(`${new Date().toISOString()} `) + colors.cyan(client.id) + ` ${data}${msg.data.toString().length > 50 ? '...' : ''}`);
|
|
1036
|
+
});
|
|
1037
|
+
server.on('disconnect', (client) => {
|
|
1038
|
+
console.log(colors.red(`- Disconnected: ${client.id}`));
|
|
1039
|
+
});
|
|
1040
|
+
process.on('SIGINT', async () => {
|
|
1041
|
+
console.log(colors.yellow('\nShutting down...'));
|
|
1042
|
+
await server.stop();
|
|
1043
|
+
process.exit(0);
|
|
1044
|
+
});
|
|
1045
|
+
});
|
|
1046
|
+
serve
|
|
1047
|
+
.command('sse')
|
|
1048
|
+
.description('Start a mock SSE (Server-Sent Events) server')
|
|
1049
|
+
.option('-p, --port <number>', 'Port to listen on', '8081')
|
|
1050
|
+
.option('-h, --host <string>', 'Host to bind to', '127.0.0.1')
|
|
1051
|
+
.option('--path <string>', 'SSE endpoint path', '/events')
|
|
1052
|
+
.option('--heartbeat <ms>', 'Send heartbeat every N ms (0 = disabled)', '0')
|
|
1053
|
+
.addHelpText('after', `
|
|
1054
|
+
${colors.bold(colors.yellow('Examples:'))}
|
|
1055
|
+
${colors.green('$ rek serve sse')} ${colors.gray('Start on port 8081')}
|
|
1056
|
+
${colors.green('$ rek serve sse -p 9000')} ${colors.gray('Start on port 9000')}
|
|
1057
|
+
${colors.green('$ rek serve sse --heartbeat 5000')} ${colors.gray('Send heartbeat every 5s')}
|
|
1058
|
+
|
|
1059
|
+
${colors.bold(colors.yellow('Interactive Commands:'))}
|
|
1060
|
+
Type a message and press Enter to broadcast it to all clients.
|
|
1061
|
+
`)
|
|
1062
|
+
.action(async (options) => {
|
|
1063
|
+
const { MockSSEServer } = await import('../testing/mock-sse-server.js');
|
|
1064
|
+
const readline = await import('node:readline');
|
|
1065
|
+
const server = await MockSSEServer.create({
|
|
1066
|
+
port: parseInt(options.port),
|
|
1067
|
+
host: options.host,
|
|
1068
|
+
path: options.path,
|
|
1069
|
+
});
|
|
1070
|
+
if (parseInt(options.heartbeat) > 0) {
|
|
1071
|
+
server.startPeriodicEvents('heartbeat', parseInt(options.heartbeat));
|
|
1072
|
+
}
|
|
1073
|
+
console.log(colors.green(`
|
|
1074
|
+
┌─────────────────────────────────────────────┐
|
|
1075
|
+
│ ${colors.bold('Recker Mock SSE Server')} │
|
|
1076
|
+
├─────────────────────────────────────────────┤
|
|
1077
|
+
│ URL: ${colors.cyan(server.url.padEnd(37))}│
|
|
1078
|
+
│ Heartbeat: ${colors.yellow((options.heartbeat === '0' ? 'Disabled' : options.heartbeat + 'ms').padEnd(31))}│
|
|
1079
|
+
├─────────────────────────────────────────────┤
|
|
1080
|
+
│ Type message + Enter to broadcast │
|
|
1081
|
+
│ Press ${colors.bold('Ctrl+C')} to stop │
|
|
1082
|
+
└─────────────────────────────────────────────┘
|
|
1083
|
+
`));
|
|
1084
|
+
server.on('connection', (client) => {
|
|
1085
|
+
console.log(colors.green(`+ Connected: ${client.id}`));
|
|
1086
|
+
});
|
|
1087
|
+
server.on('disconnect', (client) => {
|
|
1088
|
+
console.log(colors.red(`- Disconnected: ${client.id}`));
|
|
1089
|
+
});
|
|
1090
|
+
const rl = readline.createInterface({
|
|
1091
|
+
input: process.stdin,
|
|
1092
|
+
output: process.stdout,
|
|
1093
|
+
});
|
|
1094
|
+
rl.on('line', (line) => {
|
|
1095
|
+
if (line.trim()) {
|
|
1096
|
+
const sent = server.sendData(line.trim());
|
|
1097
|
+
console.log(colors.gray(`Broadcast to ${sent} client(s): ${line.trim()}`));
|
|
1098
|
+
}
|
|
1099
|
+
});
|
|
1100
|
+
process.on('SIGINT', async () => {
|
|
1101
|
+
console.log(colors.yellow('\nShutting down...'));
|
|
1102
|
+
rl.close();
|
|
1103
|
+
await server.stop();
|
|
1104
|
+
process.exit(0);
|
|
1105
|
+
});
|
|
1106
|
+
});
|
|
1107
|
+
serve
|
|
1108
|
+
.command('hls')
|
|
1109
|
+
.description('Start a mock HLS streaming server')
|
|
1110
|
+
.option('-p, --port <number>', 'Port to listen on', '8082')
|
|
1111
|
+
.option('-h, --host <string>', 'Host to bind to', '127.0.0.1')
|
|
1112
|
+
.option('--mode <type>', 'Stream mode: vod, live, event', 'vod')
|
|
1113
|
+
.option('--segments <number>', 'Number of segments (VOD mode)', '10')
|
|
1114
|
+
.option('--duration <seconds>', 'Segment duration in seconds', '6')
|
|
1115
|
+
.option('--qualities <list>', 'Comma-separated quality variants', '720p,480p,360p')
|
|
1116
|
+
.addHelpText('after', `
|
|
1117
|
+
${colors.bold(colors.yellow('Examples:'))}
|
|
1118
|
+
${colors.green('$ rek serve hls')} ${colors.gray('Start VOD server')}
|
|
1119
|
+
${colors.green('$ rek serve hls --mode live')} ${colors.gray('Start live stream')}
|
|
1120
|
+
${colors.green('$ rek serve hls --segments 20')} ${colors.gray('VOD with 20 segments')}
|
|
1121
|
+
${colors.green('$ rek serve hls --qualities 1080p,720p,480p')}
|
|
1122
|
+
|
|
1123
|
+
${colors.bold(colors.yellow('Endpoints:'))}
|
|
1124
|
+
${colors.cyan('/master.m3u8')} Master playlist (multi-quality)
|
|
1125
|
+
${colors.cyan('/playlist.m3u8')} Single quality playlist
|
|
1126
|
+
${colors.cyan('/<quality>/playlist.m3u8')} Quality-specific playlist
|
|
1127
|
+
`)
|
|
1128
|
+
.action(async (options) => {
|
|
1129
|
+
const { MockHlsServer } = await import('../testing/mock-hls-server.js');
|
|
1130
|
+
const http = await import('node:http');
|
|
1131
|
+
const port = parseInt(options.port);
|
|
1132
|
+
const host = options.host;
|
|
1133
|
+
const qualities = options.qualities.split(',').map(q => q.trim());
|
|
1134
|
+
const resolutions = ['1920x1080', '1280x720', '854x480', '640x360', '426x240'];
|
|
1135
|
+
const bandwidths = [5000000, 2500000, 1400000, 800000, 500000];
|
|
1136
|
+
const variants = qualities.map((name, i) => ({
|
|
1137
|
+
name,
|
|
1138
|
+
bandwidth: bandwidths[i] || 500000,
|
|
1139
|
+
resolution: resolutions[i] || '640x360',
|
|
1140
|
+
}));
|
|
1141
|
+
const baseUrl = `http://${host}:${port}`;
|
|
1142
|
+
const hlsServer = await MockHlsServer.create({
|
|
1143
|
+
baseUrl,
|
|
1144
|
+
mode: options.mode,
|
|
1145
|
+
segmentCount: parseInt(options.segments),
|
|
1146
|
+
segmentDuration: parseInt(options.duration),
|
|
1147
|
+
multiQuality: variants.length > 1,
|
|
1148
|
+
variants: variants.length > 1 ? variants : undefined,
|
|
1149
|
+
});
|
|
1150
|
+
const httpServer = http.createServer(async (req, res) => {
|
|
1151
|
+
const url = `${baseUrl}${req.url}`;
|
|
1152
|
+
try {
|
|
1153
|
+
const response = await hlsServer.transport.dispatch({ url, method: req.method || 'GET' });
|
|
1154
|
+
res.statusCode = response.status;
|
|
1155
|
+
response.headers.forEach((value, key) => {
|
|
1156
|
+
res.setHeader(key, value);
|
|
1157
|
+
});
|
|
1158
|
+
const body = await response.arrayBuffer();
|
|
1159
|
+
res.end(Buffer.from(body));
|
|
1160
|
+
}
|
|
1161
|
+
catch {
|
|
1162
|
+
res.statusCode = 404;
|
|
1163
|
+
res.end('Not Found');
|
|
1164
|
+
}
|
|
1165
|
+
});
|
|
1166
|
+
httpServer.listen(port, host, () => {
|
|
1167
|
+
console.log(colors.green(`
|
|
1168
|
+
┌─────────────────────────────────────────────┐
|
|
1169
|
+
│ ${colors.bold('Recker Mock HLS Server')} │
|
|
1170
|
+
├─────────────────────────────────────────────┤
|
|
1171
|
+
│ Master: ${colors.cyan((hlsServer.manifestUrl).padEnd(34))}│
|
|
1172
|
+
│ Mode: ${colors.yellow(options.mode.padEnd(36))}│
|
|
1173
|
+
│ Segments: ${colors.gray(options.segments.padEnd(32))}│
|
|
1174
|
+
│ Duration: ${colors.gray((options.duration + 's').padEnd(32))}│
|
|
1175
|
+
│ Qualities: ${colors.cyan(qualities.join(', ').padEnd(31))}│
|
|
1176
|
+
├─────────────────────────────────────────────┤
|
|
1177
|
+
│ Press ${colors.bold('Ctrl+C')} to stop │
|
|
1178
|
+
└─────────────────────────────────────────────┘
|
|
1179
|
+
`));
|
|
1180
|
+
});
|
|
1181
|
+
process.on('SIGINT', async () => {
|
|
1182
|
+
console.log(colors.yellow('\nShutting down...'));
|
|
1183
|
+
httpServer.close();
|
|
1184
|
+
await hlsServer.stop();
|
|
1185
|
+
process.exit(0);
|
|
1186
|
+
});
|
|
1187
|
+
});
|
|
1188
|
+
serve
|
|
1189
|
+
.command('udp')
|
|
1190
|
+
.description('Start a mock UDP server')
|
|
1191
|
+
.option('-p, --port <number>', 'Port to listen on', '9000')
|
|
1192
|
+
.option('-h, --host <string>', 'Host to bind to', '127.0.0.1')
|
|
1193
|
+
.option('--echo', 'Echo messages back (default: true)', true)
|
|
1194
|
+
.option('--no-echo', 'Disable echo mode')
|
|
1195
|
+
.addHelpText('after', `
|
|
1196
|
+
${colors.bold(colors.yellow('Examples:'))}
|
|
1197
|
+
${colors.green('$ rek serve udp')} ${colors.gray('Start on port 9000')}
|
|
1198
|
+
${colors.green('$ rek serve udp -p 5353')} ${colors.gray('Start on port 5353')}
|
|
1199
|
+
${colors.green('$ rek serve udp --no-echo')} ${colors.gray('Disable echo')}
|
|
1200
|
+
`)
|
|
1201
|
+
.action(async (options) => {
|
|
1202
|
+
const { MockUDPServer } = await import('../testing/mock-udp-server.js');
|
|
1203
|
+
const server = new MockUDPServer({
|
|
1204
|
+
port: parseInt(options.port),
|
|
1205
|
+
host: options.host,
|
|
1206
|
+
echo: options.echo,
|
|
1207
|
+
});
|
|
1208
|
+
await server.start();
|
|
1209
|
+
console.log(colors.green(`
|
|
1210
|
+
┌─────────────────────────────────────────────┐
|
|
1211
|
+
│ ${colors.bold('Recker Mock UDP Server')} │
|
|
1212
|
+
├─────────────────────────────────────────────┤
|
|
1213
|
+
│ Address: ${colors.cyan(`${options.host}:${options.port}`.padEnd(33))}│
|
|
1214
|
+
│ Echo: ${colors.yellow((options.echo ? 'Enabled' : 'Disabled').padEnd(36))}│
|
|
1215
|
+
├─────────────────────────────────────────────┤
|
|
1216
|
+
│ Press ${colors.bold('Ctrl+C')} to stop │
|
|
1217
|
+
└─────────────────────────────────────────────┘
|
|
1218
|
+
`));
|
|
1219
|
+
server.on('message', (msg) => {
|
|
1220
|
+
const data = msg.data.toString().slice(0, 50);
|
|
1221
|
+
console.log(colors.gray(`${new Date().toISOString()} `) + colors.cyan(`${msg.rinfo.address}:${msg.rinfo.port}`) + ` ${data}${msg.data.toString().length > 50 ? '...' : ''}`);
|
|
1222
|
+
});
|
|
1223
|
+
process.on('SIGINT', async () => {
|
|
1224
|
+
console.log(colors.yellow('\nShutting down...'));
|
|
1225
|
+
await server.stop();
|
|
1226
|
+
process.exit(0);
|
|
1227
|
+
});
|
|
1228
|
+
});
|
|
1229
|
+
serve
|
|
1230
|
+
.command('dns')
|
|
1231
|
+
.description('Start a mock DNS server')
|
|
1232
|
+
.option('-p, --port <number>', 'Port to listen on', '5353')
|
|
1233
|
+
.option('-h, --host <string>', 'Host to bind to', '127.0.0.1')
|
|
1234
|
+
.option('--delay <ms>', 'Add delay to responses (milliseconds)', '0')
|
|
1235
|
+
.addHelpText('after', `
|
|
1236
|
+
${colors.bold(colors.yellow('Examples:'))}
|
|
1237
|
+
${colors.green('$ rek serve dns')} ${colors.gray('Start on port 5353')}
|
|
1238
|
+
${colors.green('$ rek serve dns -p 53')} ${colors.gray('Start on standard port (requires root)')}
|
|
1239
|
+
${colors.green('$ dig @127.0.0.1 -p 5353 example.com')} ${colors.gray('Test with dig')}
|
|
1240
|
+
|
|
1241
|
+
${colors.bold(colors.yellow('Default Records:'))}
|
|
1242
|
+
${colors.cyan('localhost')} A: 127.0.0.1, AAAA: ::1
|
|
1243
|
+
${colors.cyan('example.com')} A, AAAA, NS, MX, TXT records
|
|
1244
|
+
${colors.cyan('test.local')} A: 192.168.1.100
|
|
1245
|
+
`)
|
|
1246
|
+
.action(async (options) => {
|
|
1247
|
+
const { MockDnsServer } = await import('../testing/mock-dns-server.js');
|
|
1248
|
+
const server = await MockDnsServer.create({
|
|
1249
|
+
port: parseInt(options.port),
|
|
1250
|
+
host: options.host,
|
|
1251
|
+
delay: parseInt(options.delay),
|
|
1252
|
+
});
|
|
1253
|
+
console.log(colors.green(`
|
|
1254
|
+
┌─────────────────────────────────────────────┐
|
|
1255
|
+
│ ${colors.bold('Recker Mock DNS Server')} │
|
|
1256
|
+
├─────────────────────────────────────────────┤
|
|
1257
|
+
│ Address: ${colors.cyan(`${options.host}:${options.port}`.padEnd(33))}│
|
|
1258
|
+
│ Protocol: ${colors.yellow('UDP'.padEnd(32))}│
|
|
1259
|
+
├─────────────────────────────────────────────┤
|
|
1260
|
+
│ Test: dig @${options.host} -p ${options.port} example.com │
|
|
1261
|
+
│ Press ${colors.bold('Ctrl+C')} to stop │
|
|
1262
|
+
└─────────────────────────────────────────────┘
|
|
1263
|
+
`));
|
|
1264
|
+
server.on('query', (query) => {
|
|
1265
|
+
console.log(colors.gray(`${new Date().toISOString()} `) + colors.cyan(query.type.padEnd(6)) + ` ${query.domain}`);
|
|
1266
|
+
});
|
|
1267
|
+
process.on('SIGINT', async () => {
|
|
1268
|
+
console.log(colors.yellow('\nShutting down...'));
|
|
1269
|
+
await server.stop();
|
|
1270
|
+
process.exit(0);
|
|
1271
|
+
});
|
|
1272
|
+
});
|
|
1273
|
+
serve
|
|
1274
|
+
.command('whois')
|
|
1275
|
+
.description('Start a mock WHOIS server')
|
|
1276
|
+
.option('-p, --port <number>', 'Port to listen on', '4343')
|
|
1277
|
+
.option('-h, --host <string>', 'Host to bind to', '127.0.0.1')
|
|
1278
|
+
.option('--delay <ms>', 'Add delay to responses (milliseconds)', '0')
|
|
1279
|
+
.addHelpText('after', `
|
|
1280
|
+
${colors.bold(colors.yellow('Examples:'))}
|
|
1281
|
+
${colors.green('$ rek serve whois')} ${colors.gray('Start on port 4343')}
|
|
1282
|
+
${colors.green('$ whois -h 127.0.0.1 -p 4343 example.com')} ${colors.gray('Test with whois')}
|
|
1283
|
+
|
|
1284
|
+
${colors.bold(colors.yellow('Default Domains:'))}
|
|
1285
|
+
${colors.cyan('example.com')} IANA reserved domain
|
|
1286
|
+
${colors.cyan('google.com')} MarkMonitor registrar
|
|
1287
|
+
${colors.cyan('test.local')} Test domain
|
|
1288
|
+
`)
|
|
1289
|
+
.action(async (options) => {
|
|
1290
|
+
const { MockWhoisServer } = await import('../testing/mock-whois-server.js');
|
|
1291
|
+
const server = await MockWhoisServer.create({
|
|
1292
|
+
port: parseInt(options.port),
|
|
1293
|
+
host: options.host,
|
|
1294
|
+
delay: parseInt(options.delay),
|
|
1295
|
+
});
|
|
1296
|
+
console.log(colors.green(`
|
|
1297
|
+
┌─────────────────────────────────────────────┐
|
|
1298
|
+
│ ${colors.bold('Recker Mock WHOIS Server')} │
|
|
1299
|
+
├─────────────────────────────────────────────┤
|
|
1300
|
+
│ Address: ${colors.cyan(`${options.host}:${options.port}`.padEnd(33))}│
|
|
1301
|
+
│ Protocol: ${colors.yellow('TCP'.padEnd(32))}│
|
|
1302
|
+
├─────────────────────────────────────────────┤
|
|
1303
|
+
│ Test: whois -h ${options.host} -p ${options.port} example.com │
|
|
1304
|
+
│ Press ${colors.bold('Ctrl+C')} to stop │
|
|
1305
|
+
└─────────────────────────────────────────────┘
|
|
1306
|
+
`));
|
|
1307
|
+
server.on('query', (query) => {
|
|
1308
|
+
console.log(colors.gray(`${new Date().toISOString()} `) + `Query: ${colors.cyan(query)}`);
|
|
1309
|
+
});
|
|
1310
|
+
process.on('SIGINT', async () => {
|
|
1311
|
+
console.log(colors.yellow('\nShutting down...'));
|
|
1312
|
+
await server.stop();
|
|
1313
|
+
process.exit(0);
|
|
1314
|
+
});
|
|
1315
|
+
});
|
|
1316
|
+
serve
|
|
1317
|
+
.command('telnet')
|
|
1318
|
+
.description('Start a mock Telnet server')
|
|
1319
|
+
.option('-p, --port <number>', 'Port to listen on', '2323')
|
|
1320
|
+
.option('-h, --host <string>', 'Host to bind to', '127.0.0.1')
|
|
1321
|
+
.option('--echo', 'Echo input back (default: true)', true)
|
|
1322
|
+
.option('--no-echo', 'Disable echo mode')
|
|
1323
|
+
.option('--delay <ms>', 'Add delay to responses (milliseconds)', '0')
|
|
1324
|
+
.addHelpText('after', `
|
|
1325
|
+
${colors.bold(colors.yellow('Examples:'))}
|
|
1326
|
+
${colors.green('$ rek serve telnet')} ${colors.gray('Start on port 2323')}
|
|
1327
|
+
${colors.green('$ telnet localhost 2323')} ${colors.gray('Connect to server')}
|
|
1328
|
+
|
|
1329
|
+
${colors.bold(colors.yellow('Built-in Commands:'))}
|
|
1330
|
+
${colors.cyan('help')} Show available commands
|
|
1331
|
+
${colors.cyan('echo <msg>')} Echo message back
|
|
1332
|
+
${colors.cyan('date')} Show current date
|
|
1333
|
+
${colors.cyan('time')} Show current time
|
|
1334
|
+
${colors.cyan('ping')} Returns "pong"
|
|
1335
|
+
${colors.cyan('quit')} Disconnect
|
|
1336
|
+
`)
|
|
1337
|
+
.action(async (options) => {
|
|
1338
|
+
const { MockTelnetServer } = await import('../testing/mock-telnet-server.js');
|
|
1339
|
+
const server = await MockTelnetServer.create({
|
|
1340
|
+
port: parseInt(options.port),
|
|
1341
|
+
host: options.host,
|
|
1342
|
+
echo: options.echo,
|
|
1343
|
+
delay: parseInt(options.delay),
|
|
1344
|
+
});
|
|
1345
|
+
console.log(colors.green(`
|
|
1346
|
+
┌─────────────────────────────────────────────┐
|
|
1347
|
+
│ ${colors.bold('Recker Mock Telnet Server')} │
|
|
1348
|
+
├─────────────────────────────────────────────┤
|
|
1349
|
+
│ Address: ${colors.cyan(`${options.host}:${options.port}`.padEnd(33))}│
|
|
1350
|
+
│ Echo: ${colors.yellow((options.echo ? 'Enabled' : 'Disabled').padEnd(36))}│
|
|
1351
|
+
├─────────────────────────────────────────────┤
|
|
1352
|
+
│ Connect: telnet ${options.host} ${options.port} │
|
|
1353
|
+
│ Press ${colors.bold('Ctrl+C')} to stop │
|
|
1354
|
+
└─────────────────────────────────────────────┘
|
|
1355
|
+
`));
|
|
1356
|
+
server.on('connect', (session) => {
|
|
1357
|
+
console.log(colors.gray(`${new Date().toISOString()} `) + colors.green('+ Connected: ') + colors.cyan(session.id));
|
|
1358
|
+
});
|
|
1359
|
+
server.on('disconnect', (session) => {
|
|
1360
|
+
console.log(colors.gray(`${new Date().toISOString()} `) + colors.red('- Disconnected: ') + colors.cyan(session.id));
|
|
1361
|
+
});
|
|
1362
|
+
server.on('command', (cmd, session) => {
|
|
1363
|
+
console.log(colors.gray(`${new Date().toISOString()} `) + colors.cyan(session.id) + ` $ ${cmd}`);
|
|
1364
|
+
});
|
|
1365
|
+
process.on('SIGINT', async () => {
|
|
1366
|
+
console.log(colors.yellow('\nShutting down...'));
|
|
1367
|
+
await server.stop();
|
|
1368
|
+
process.exit(0);
|
|
1369
|
+
});
|
|
1370
|
+
});
|
|
1371
|
+
serve
|
|
1372
|
+
.command('ftp')
|
|
1373
|
+
.description('Start a mock FTP server')
|
|
1374
|
+
.option('-p, --port <number>', 'Port to listen on', '2121')
|
|
1375
|
+
.option('-h, --host <string>', 'Host to bind to', '127.0.0.1')
|
|
1376
|
+
.option('-u, --username <user>', 'Username for auth', 'user')
|
|
1377
|
+
.option('--password <pass>', 'Password for auth', 'pass')
|
|
1378
|
+
.option('--anonymous', 'Allow anonymous login (default: true)', true)
|
|
1379
|
+
.option('--no-anonymous', 'Disable anonymous login')
|
|
1380
|
+
.option('--delay <ms>', 'Add delay to responses (milliseconds)', '0')
|
|
1381
|
+
.addHelpText('after', `
|
|
1382
|
+
${colors.bold(colors.yellow('Examples:'))}
|
|
1383
|
+
${colors.green('$ rek serve ftp')} ${colors.gray('Start on port 2121')}
|
|
1384
|
+
${colors.green('$ ftp localhost 2121')} ${colors.gray('Connect to server')}
|
|
1385
|
+
${colors.green('$ rek serve ftp --no-anonymous')} ${colors.gray('Require authentication')}
|
|
1386
|
+
|
|
1387
|
+
${colors.bold(colors.yellow('Default Files:'))}
|
|
1388
|
+
${colors.cyan('/welcome.txt')} Welcome message
|
|
1389
|
+
${colors.cyan('/readme.md')} README file
|
|
1390
|
+
${colors.cyan('/data/sample.json')} Sample JSON data
|
|
1391
|
+
${colors.cyan('/public/index.html')} HTML file
|
|
1392
|
+
|
|
1393
|
+
${colors.bold(colors.yellow('Credentials:'))}
|
|
1394
|
+
Username: ${colors.cyan('user')} Password: ${colors.cyan('pass')}
|
|
1395
|
+
Or use anonymous login with user: ${colors.cyan('anonymous')}
|
|
1396
|
+
`)
|
|
1397
|
+
.action(async (options) => {
|
|
1398
|
+
const { MockFtpServer } = await import('../testing/mock-ftp-server.js');
|
|
1399
|
+
const server = await MockFtpServer.create({
|
|
1400
|
+
port: parseInt(options.port),
|
|
1401
|
+
host: options.host,
|
|
1402
|
+
username: options.username,
|
|
1403
|
+
password: options.password,
|
|
1404
|
+
anonymous: options.anonymous,
|
|
1405
|
+
delay: parseInt(options.delay),
|
|
1406
|
+
});
|
|
1407
|
+
console.log(colors.green(`
|
|
1408
|
+
┌─────────────────────────────────────────────┐
|
|
1409
|
+
│ ${colors.bold('Recker Mock FTP Server')} │
|
|
1410
|
+
├─────────────────────────────────────────────┤
|
|
1411
|
+
│ Address: ${colors.cyan(`${options.host}:${options.port}`.padEnd(33))}│
|
|
1412
|
+
│ Anonymous: ${colors.yellow((options.anonymous ? 'Allowed' : 'Disabled').padEnd(31))}│
|
|
1413
|
+
│ User: ${colors.cyan(options.username.padEnd(36))}│
|
|
1414
|
+
├─────────────────────────────────────────────┤
|
|
1415
|
+
│ Connect: ftp ${options.host} ${options.port} │
|
|
1416
|
+
│ Press ${colors.bold('Ctrl+C')} to stop │
|
|
1417
|
+
└─────────────────────────────────────────────┘
|
|
1418
|
+
`));
|
|
1419
|
+
server.on('connect', (session) => {
|
|
1420
|
+
console.log(colors.gray(`${new Date().toISOString()} `) + colors.green('+ Connected: ') + colors.cyan(session.id));
|
|
1421
|
+
});
|
|
1422
|
+
server.on('disconnect', (session) => {
|
|
1423
|
+
console.log(colors.gray(`${new Date().toISOString()} `) + colors.red('- Disconnected: ') + colors.cyan(session.id));
|
|
1424
|
+
});
|
|
1425
|
+
server.on('command', (cmd, _args, session) => {
|
|
1426
|
+
console.log(colors.gray(`${new Date().toISOString()} `) + colors.cyan(session.id) + ` ${cmd}`);
|
|
1427
|
+
});
|
|
1428
|
+
process.on('SIGINT', async () => {
|
|
1429
|
+
console.log(colors.yellow('\nShutting down...'));
|
|
1430
|
+
await server.stop();
|
|
1431
|
+
process.exit(0);
|
|
1432
|
+
});
|
|
1433
|
+
});
|
|
883
1434
|
program
|
|
884
1435
|
.command('mcp')
|
|
885
1436
|
.description('Start MCP server for AI agents to access Recker documentation')
|
|
886
1437
|
.option('-t, --transport <mode>', 'Transport mode: stdio, http, sse', 'stdio')
|
|
887
1438
|
.option('-p, --port <number>', 'Server port (for http/sse modes)', '3100')
|
|
888
1439
|
.option('-d, --docs <path>', 'Path to documentation folder')
|
|
1440
|
+
.option('-T, --tools <paths...>', 'Paths to external tool modules to load')
|
|
889
1441
|
.option('--debug', 'Enable debug logging')
|
|
890
1442
|
.addHelpText('after', `
|
|
891
1443
|
${colors.bold(colors.yellow('Transport Modes:'))}
|
|
@@ -921,6 +1473,7 @@ ${colors.bold(colors.yellow('Claude Code config (~/.claude.json):'))}
|
|
|
921
1473
|
port: parseInt(options.port),
|
|
922
1474
|
docsPath: options.docs,
|
|
923
1475
|
debug: options.debug,
|
|
1476
|
+
toolPaths: options.tools,
|
|
924
1477
|
});
|
|
925
1478
|
if (transport === 'stdio') {
|
|
926
1479
|
await server.start();
|
package/dist/cli/presets.d.ts
CHANGED
|
@@ -40,4 +40,3 @@ export declare function parseScrollKey(data: Buffer): 'pageUp' | 'pageDown' | 's
|
|
|
40
40
|
export declare function parseMouseScroll(data: Buffer): 'scrollUp' | 'scrollDown' | null;
|
|
41
41
|
export declare function enableMouseReporting(): void;
|
|
42
42
|
export declare function disableMouseReporting(): void;
|
|
43
|
-
//# sourceMappingURL=scroll-buffer.d.ts.map
|
package/dist/cli/tui/shell.d.ts
CHANGED