recker 1.0.20-next.9796be9 → 1.0.20-next.a5aea1e
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/dist/ai/adaptive-timeout.d.ts +0 -1
- package/dist/ai/client.d.ts +0 -1
- package/dist/ai/index.d.ts +0 -1
- package/dist/ai/providers/anthropic.d.ts +0 -1
- package/dist/ai/providers/base.d.ts +0 -1
- package/dist/ai/providers/index.d.ts +0 -1
- package/dist/ai/providers/openai.d.ts +0 -1
- package/dist/ai/rate-limiter.d.ts +0 -1
- package/dist/bench/generator.d.ts +0 -1
- package/dist/bench/stats.d.ts +0 -1
- package/dist/cache/file-storage.d.ts +0 -1
- 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 -1
- package/dist/cli/index.js +504 -4
- 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/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 +0 -1
- 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 +0 -1
- package/dist/mcp/types.d.ts +0 -1
- package/dist/plugins/auth.d.ts +0 -1
- package/dist/plugins/cache.d.ts +0 -1
- package/dist/plugins/cache.js +1 -1
- 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/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/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 +8 -1
- package/dist/testing/index.js +4 -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 +0 -1
- package/dist/testing/mock-http-server.d.ts +0 -1
- package/dist/testing/mock-sse-server.d.ts +0 -1
- 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 +0 -1
- 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 +1 -1
- 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-hls-server.d.ts.map +0 -1
- package/dist/testing/mock-http-server.d.ts.map +0 -1
- package/dist/testing/mock-sse-server.d.ts.map +0 -1
- package/dist/testing/mock-udp-server.d.ts.map +0 -1
- package/dist/testing/mock-websocket-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
|
@@ -0,0 +1,273 @@
|
|
|
1
|
+
import { EventEmitter } from 'node:events';
|
|
2
|
+
import * as net from 'node:net';
|
|
3
|
+
export class MockTelnetServer extends EventEmitter {
|
|
4
|
+
options;
|
|
5
|
+
server = null;
|
|
6
|
+
sessions = new Map();
|
|
7
|
+
commands = new Map();
|
|
8
|
+
started = false;
|
|
9
|
+
sessionCounter = 0;
|
|
10
|
+
stats = {
|
|
11
|
+
connectionsTotal: 0,
|
|
12
|
+
connectionsActive: 0,
|
|
13
|
+
commandsReceived: 0,
|
|
14
|
+
commandLog: [],
|
|
15
|
+
};
|
|
16
|
+
constructor(options = {}) {
|
|
17
|
+
super();
|
|
18
|
+
this.options = {
|
|
19
|
+
port: 2323,
|
|
20
|
+
host: '127.0.0.1',
|
|
21
|
+
echo: true,
|
|
22
|
+
banner: 'Welcome to Recker Mock Telnet Server\r\nType "help" for available commands.\r\n',
|
|
23
|
+
prompt: '> ',
|
|
24
|
+
delay: 0,
|
|
25
|
+
...options,
|
|
26
|
+
};
|
|
27
|
+
this.addDefaultCommands();
|
|
28
|
+
}
|
|
29
|
+
get isRunning() {
|
|
30
|
+
return this.started;
|
|
31
|
+
}
|
|
32
|
+
get port() {
|
|
33
|
+
return this.options.port;
|
|
34
|
+
}
|
|
35
|
+
get host() {
|
|
36
|
+
return this.options.host;
|
|
37
|
+
}
|
|
38
|
+
get url() {
|
|
39
|
+
return `telnet://${this.options.host}:${this.options.port}`;
|
|
40
|
+
}
|
|
41
|
+
get activeSessions() {
|
|
42
|
+
return this.sessions.size;
|
|
43
|
+
}
|
|
44
|
+
get statistics() {
|
|
45
|
+
return {
|
|
46
|
+
...this.stats,
|
|
47
|
+
connectionsActive: this.sessions.size,
|
|
48
|
+
};
|
|
49
|
+
}
|
|
50
|
+
addCommand(name, handler) {
|
|
51
|
+
this.commands.set(name.toLowerCase(), handler);
|
|
52
|
+
}
|
|
53
|
+
removeCommand(name) {
|
|
54
|
+
this.commands.delete(name.toLowerCase());
|
|
55
|
+
}
|
|
56
|
+
getCommand(name) {
|
|
57
|
+
return this.commands.get(name.toLowerCase());
|
|
58
|
+
}
|
|
59
|
+
clearCommands() {
|
|
60
|
+
this.commands.clear();
|
|
61
|
+
this.addDefaultCommands();
|
|
62
|
+
}
|
|
63
|
+
addDefaultCommands() {
|
|
64
|
+
this.addCommand('help', () => {
|
|
65
|
+
const cmds = Array.from(this.commands.keys()).sort();
|
|
66
|
+
return `Available commands:\r\n${cmds.map((c) => ` ${c}`).join('\r\n')}\r\n`;
|
|
67
|
+
});
|
|
68
|
+
this.addCommand('echo', (args) => args.join(' '));
|
|
69
|
+
this.addCommand('date', () => new Date().toDateString());
|
|
70
|
+
this.addCommand('time', () => new Date().toTimeString());
|
|
71
|
+
this.addCommand('datetime', () => new Date().toISOString());
|
|
72
|
+
this.addCommand('uptime', () => `${Math.floor(process.uptime())} seconds`);
|
|
73
|
+
this.addCommand('version', () => 'Recker Mock Telnet Server v1.0.0');
|
|
74
|
+
this.addCommand('whoami', (_args, session) => `Session ID: ${session.id}`);
|
|
75
|
+
this.addCommand('sessions', () => `Active sessions: ${this.sessions.size}`);
|
|
76
|
+
this.addCommand('clear', () => '\x1b[2J\x1b[H');
|
|
77
|
+
this.addCommand('quit', (_args, session) => {
|
|
78
|
+
session.socket.end('Goodbye!\r\n');
|
|
79
|
+
return '';
|
|
80
|
+
});
|
|
81
|
+
this.addCommand('exit', (_args, session) => {
|
|
82
|
+
session.socket.end('Goodbye!\r\n');
|
|
83
|
+
return '';
|
|
84
|
+
});
|
|
85
|
+
this.addCommand('ping', () => 'pong');
|
|
86
|
+
this.addCommand('reverse', (args) => args.join(' ').split('').reverse().join(''));
|
|
87
|
+
this.addCommand('upper', (args) => args.join(' ').toUpperCase());
|
|
88
|
+
this.addCommand('lower', (args) => args.join(' ').toLowerCase());
|
|
89
|
+
this.addCommand('count', (args) => `${args.join(' ').length} characters`);
|
|
90
|
+
this.addCommand('sleep', async (args) => {
|
|
91
|
+
const ms = parseInt(args[0]) || 1000;
|
|
92
|
+
await new Promise((resolve) => setTimeout(resolve, Math.min(ms, 10000)));
|
|
93
|
+
return `Slept for ${ms}ms`;
|
|
94
|
+
});
|
|
95
|
+
}
|
|
96
|
+
broadcast(message) {
|
|
97
|
+
for (const session of this.sessions.values()) {
|
|
98
|
+
session.socket.write(`\r\n[BROADCAST] ${message}\r\n${this.options.prompt}`);
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
getSession(id) {
|
|
102
|
+
return this.sessions.get(id);
|
|
103
|
+
}
|
|
104
|
+
disconnectSession(id) {
|
|
105
|
+
const session = this.sessions.get(id);
|
|
106
|
+
if (session) {
|
|
107
|
+
session.socket.end('Disconnected by server.\r\n');
|
|
108
|
+
return true;
|
|
109
|
+
}
|
|
110
|
+
return false;
|
|
111
|
+
}
|
|
112
|
+
async start() {
|
|
113
|
+
if (this.started) {
|
|
114
|
+
throw new Error('Server already started');
|
|
115
|
+
}
|
|
116
|
+
return new Promise((resolve, reject) => {
|
|
117
|
+
this.server = net.createServer((socket) => {
|
|
118
|
+
this.handleConnection(socket);
|
|
119
|
+
});
|
|
120
|
+
this.server.on('error', (err) => {
|
|
121
|
+
this.emit('error', err);
|
|
122
|
+
if (!this.started) {
|
|
123
|
+
reject(err);
|
|
124
|
+
}
|
|
125
|
+
});
|
|
126
|
+
this.server.listen(this.options.port, this.options.host, () => {
|
|
127
|
+
this.started = true;
|
|
128
|
+
this.emit('start');
|
|
129
|
+
resolve();
|
|
130
|
+
});
|
|
131
|
+
});
|
|
132
|
+
}
|
|
133
|
+
async stop() {
|
|
134
|
+
if (!this.started || !this.server)
|
|
135
|
+
return;
|
|
136
|
+
for (const session of this.sessions.values()) {
|
|
137
|
+
session.socket.end('Server shutting down.\r\n');
|
|
138
|
+
}
|
|
139
|
+
this.sessions.clear();
|
|
140
|
+
return new Promise((resolve) => {
|
|
141
|
+
this.server.close(() => {
|
|
142
|
+
this.server = null;
|
|
143
|
+
this.started = false;
|
|
144
|
+
this.emit('stop');
|
|
145
|
+
resolve();
|
|
146
|
+
});
|
|
147
|
+
});
|
|
148
|
+
}
|
|
149
|
+
reset() {
|
|
150
|
+
this.stats = {
|
|
151
|
+
connectionsTotal: 0,
|
|
152
|
+
connectionsActive: 0,
|
|
153
|
+
commandsReceived: 0,
|
|
154
|
+
commandLog: [],
|
|
155
|
+
};
|
|
156
|
+
this.clearCommands();
|
|
157
|
+
this.emit('reset');
|
|
158
|
+
}
|
|
159
|
+
handleConnection(socket) {
|
|
160
|
+
const sessionId = `session-${++this.sessionCounter}`;
|
|
161
|
+
const session = {
|
|
162
|
+
id: sessionId,
|
|
163
|
+
socket,
|
|
164
|
+
connectedAt: new Date(),
|
|
165
|
+
lastActivity: new Date(),
|
|
166
|
+
data: {},
|
|
167
|
+
};
|
|
168
|
+
this.sessions.set(sessionId, session);
|
|
169
|
+
this.stats.connectionsTotal++;
|
|
170
|
+
this.emit('connect', session);
|
|
171
|
+
socket.write(this.options.banner);
|
|
172
|
+
socket.write(this.options.prompt);
|
|
173
|
+
let inputBuffer = '';
|
|
174
|
+
socket.on('data', async (data) => {
|
|
175
|
+
session.lastActivity = new Date();
|
|
176
|
+
const filtered = this.filterTelnetCommands(data);
|
|
177
|
+
const text = filtered.toString('utf8');
|
|
178
|
+
if (this.options.echo) {
|
|
179
|
+
socket.write(text);
|
|
180
|
+
}
|
|
181
|
+
inputBuffer += text;
|
|
182
|
+
while (inputBuffer.includes('\n') || inputBuffer.includes('\r')) {
|
|
183
|
+
const lineEnd = Math.max(inputBuffer.indexOf('\n'), inputBuffer.indexOf('\r'));
|
|
184
|
+
if (lineEnd === -1)
|
|
185
|
+
break;
|
|
186
|
+
let line = inputBuffer.substring(0, lineEnd).trim();
|
|
187
|
+
inputBuffer = inputBuffer.substring(lineEnd + 1).replace(/^[\r\n]+/, '');
|
|
188
|
+
if (!line) {
|
|
189
|
+
socket.write(this.options.prompt);
|
|
190
|
+
continue;
|
|
191
|
+
}
|
|
192
|
+
await this.handleCommand(line, session);
|
|
193
|
+
}
|
|
194
|
+
});
|
|
195
|
+
socket.on('close', () => {
|
|
196
|
+
this.sessions.delete(sessionId);
|
|
197
|
+
this.emit('disconnect', session);
|
|
198
|
+
});
|
|
199
|
+
socket.on('error', (err) => {
|
|
200
|
+
this.emit('error', err, session);
|
|
201
|
+
this.sessions.delete(sessionId);
|
|
202
|
+
});
|
|
203
|
+
}
|
|
204
|
+
filterTelnetCommands(data) {
|
|
205
|
+
const filtered = [];
|
|
206
|
+
let i = 0;
|
|
207
|
+
while (i < data.length) {
|
|
208
|
+
if (data[i] === 255) {
|
|
209
|
+
if (i + 1 < data.length) {
|
|
210
|
+
const cmd = data[i + 1];
|
|
211
|
+
if (cmd >= 251 && cmd <= 254) {
|
|
212
|
+
i += 3;
|
|
213
|
+
continue;
|
|
214
|
+
}
|
|
215
|
+
else if (cmd === 255) {
|
|
216
|
+
filtered.push(255);
|
|
217
|
+
i += 2;
|
|
218
|
+
continue;
|
|
219
|
+
}
|
|
220
|
+
else {
|
|
221
|
+
i += 2;
|
|
222
|
+
continue;
|
|
223
|
+
}
|
|
224
|
+
}
|
|
225
|
+
}
|
|
226
|
+
filtered.push(data[i]);
|
|
227
|
+
i++;
|
|
228
|
+
}
|
|
229
|
+
return Buffer.from(filtered);
|
|
230
|
+
}
|
|
231
|
+
async handleCommand(input, session) {
|
|
232
|
+
this.stats.commandsReceived++;
|
|
233
|
+
this.stats.commandLog.push({
|
|
234
|
+
command: input,
|
|
235
|
+
sessionId: session.id,
|
|
236
|
+
timestamp: Date.now(),
|
|
237
|
+
});
|
|
238
|
+
this.emit('command', input, session);
|
|
239
|
+
if (this.options.delay > 0) {
|
|
240
|
+
await new Promise((resolve) => setTimeout(resolve, this.options.delay));
|
|
241
|
+
}
|
|
242
|
+
const parts = input.trim().split(/\s+/);
|
|
243
|
+
const cmdName = parts[0].toLowerCase();
|
|
244
|
+
const args = parts.slice(1);
|
|
245
|
+
const handler = this.commands.get(cmdName);
|
|
246
|
+
let response;
|
|
247
|
+
if (!handler) {
|
|
248
|
+
response = `Unknown command: ${cmdName}\r\nType "help" for available commands.`;
|
|
249
|
+
}
|
|
250
|
+
else if (typeof handler === 'string') {
|
|
251
|
+
response = handler;
|
|
252
|
+
}
|
|
253
|
+
else {
|
|
254
|
+
try {
|
|
255
|
+
response = await handler(args, session);
|
|
256
|
+
}
|
|
257
|
+
catch (err) {
|
|
258
|
+
response = `Error: ${err instanceof Error ? err.message : 'Unknown error'}`;
|
|
259
|
+
}
|
|
260
|
+
}
|
|
261
|
+
if (response) {
|
|
262
|
+
session.socket.write(`${response}\r\n`);
|
|
263
|
+
}
|
|
264
|
+
if (!session.socket.destroyed) {
|
|
265
|
+
session.socket.write(this.options.prompt);
|
|
266
|
+
}
|
|
267
|
+
}
|
|
268
|
+
static async create(options = {}) {
|
|
269
|
+
const server = new MockTelnetServer(options);
|
|
270
|
+
await server.start();
|
|
271
|
+
return server;
|
|
272
|
+
}
|
|
273
|
+
}
|
|
@@ -41,4 +41,3 @@ export declare class MockUDPServer extends EventEmitter {
|
|
|
41
41
|
static create(options?: MockUDPServerOptions): Promise<MockUDPServer>;
|
|
42
42
|
}
|
|
43
43
|
export declare function createMockUDPServer(responses?: Record<string, Buffer | string>, options?: MockUDPServerOptions): Promise<MockUDPServer>;
|
|
44
|
-
//# sourceMappingURL=mock-udp-server.d.ts.map
|
|
@@ -75,4 +75,3 @@ export declare class MockWebSocketServer extends EventEmitter {
|
|
|
75
75
|
static create(options?: MockWebSocketServerOptions): Promise<MockWebSocketServer>;
|
|
76
76
|
}
|
|
77
77
|
export declare function createMockWebSocketServer(responses?: Record<string, string>, options?: MockWebSocketServerOptions): Promise<MockWebSocketServer>;
|
|
78
|
-
//# sourceMappingURL=mock-websocket-server.d.ts.map
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
import { EventEmitter } from 'node:events';
|
|
2
|
+
export interface MockWhoisServerOptions {
|
|
3
|
+
port?: number;
|
|
4
|
+
host?: string;
|
|
5
|
+
delay?: number;
|
|
6
|
+
}
|
|
7
|
+
export interface WhoisDomainData {
|
|
8
|
+
registrar?: string;
|
|
9
|
+
registrarUrl?: string;
|
|
10
|
+
createdDate?: string;
|
|
11
|
+
updatedDate?: string;
|
|
12
|
+
expiryDate?: string;
|
|
13
|
+
status?: string[];
|
|
14
|
+
nameservers?: string[];
|
|
15
|
+
registrantName?: string;
|
|
16
|
+
registrantOrg?: string;
|
|
17
|
+
registrantEmail?: string;
|
|
18
|
+
adminEmail?: string;
|
|
19
|
+
techEmail?: string;
|
|
20
|
+
dnssec?: string;
|
|
21
|
+
}
|
|
22
|
+
export interface MockWhoisStats {
|
|
23
|
+
queriesReceived: number;
|
|
24
|
+
responseSent: number;
|
|
25
|
+
queryLog: Array<{
|
|
26
|
+
query: string;
|
|
27
|
+
timestamp: number;
|
|
28
|
+
}>;
|
|
29
|
+
}
|
|
30
|
+
export declare class MockWhoisServer extends EventEmitter {
|
|
31
|
+
private options;
|
|
32
|
+
private server;
|
|
33
|
+
private domains;
|
|
34
|
+
private started;
|
|
35
|
+
private stats;
|
|
36
|
+
constructor(options?: MockWhoisServerOptions);
|
|
37
|
+
get isRunning(): boolean;
|
|
38
|
+
get port(): number;
|
|
39
|
+
get host(): string;
|
|
40
|
+
get url(): string;
|
|
41
|
+
get statistics(): MockWhoisStats;
|
|
42
|
+
addDomain(domain: string, data: WhoisDomainData): void;
|
|
43
|
+
removeDomain(domain: string): void;
|
|
44
|
+
getDomain(domain: string): WhoisDomainData | undefined;
|
|
45
|
+
clearDomains(): void;
|
|
46
|
+
private addDefaultDomains;
|
|
47
|
+
start(): Promise<void>;
|
|
48
|
+
stop(): Promise<void>;
|
|
49
|
+
reset(): void;
|
|
50
|
+
private handleConnection;
|
|
51
|
+
private handleQuery;
|
|
52
|
+
private buildResponse;
|
|
53
|
+
private buildNotFoundResponse;
|
|
54
|
+
private buildDomainResponse;
|
|
55
|
+
static create(options?: MockWhoisServerOptions): Promise<MockWhoisServer>;
|
|
56
|
+
}
|
|
@@ -0,0 +1,234 @@
|
|
|
1
|
+
import { EventEmitter } from 'node:events';
|
|
2
|
+
import * as net from 'node:net';
|
|
3
|
+
export class MockWhoisServer extends EventEmitter {
|
|
4
|
+
options;
|
|
5
|
+
server = null;
|
|
6
|
+
domains = new Map();
|
|
7
|
+
started = false;
|
|
8
|
+
stats = {
|
|
9
|
+
queriesReceived: 0,
|
|
10
|
+
responseSent: 0,
|
|
11
|
+
queryLog: [],
|
|
12
|
+
};
|
|
13
|
+
constructor(options = {}) {
|
|
14
|
+
super();
|
|
15
|
+
this.options = {
|
|
16
|
+
port: 4343,
|
|
17
|
+
host: '127.0.0.1',
|
|
18
|
+
delay: 0,
|
|
19
|
+
...options,
|
|
20
|
+
};
|
|
21
|
+
this.addDefaultDomains();
|
|
22
|
+
}
|
|
23
|
+
get isRunning() {
|
|
24
|
+
return this.started;
|
|
25
|
+
}
|
|
26
|
+
get port() {
|
|
27
|
+
return this.options.port;
|
|
28
|
+
}
|
|
29
|
+
get host() {
|
|
30
|
+
return this.options.host;
|
|
31
|
+
}
|
|
32
|
+
get url() {
|
|
33
|
+
return `${this.options.host}:${this.options.port}`;
|
|
34
|
+
}
|
|
35
|
+
get statistics() {
|
|
36
|
+
return { ...this.stats };
|
|
37
|
+
}
|
|
38
|
+
addDomain(domain, data) {
|
|
39
|
+
this.domains.set(domain.toLowerCase(), data);
|
|
40
|
+
}
|
|
41
|
+
removeDomain(domain) {
|
|
42
|
+
this.domains.delete(domain.toLowerCase());
|
|
43
|
+
}
|
|
44
|
+
getDomain(domain) {
|
|
45
|
+
return this.domains.get(domain.toLowerCase());
|
|
46
|
+
}
|
|
47
|
+
clearDomains() {
|
|
48
|
+
this.domains.clear();
|
|
49
|
+
this.addDefaultDomains();
|
|
50
|
+
}
|
|
51
|
+
addDefaultDomains() {
|
|
52
|
+
this.addDomain('example.com', {
|
|
53
|
+
registrar: 'RESERVED-Internet Assigned Numbers Authority',
|
|
54
|
+
registrarUrl: 'http://www.iana.org',
|
|
55
|
+
createdDate: '1995-08-14T04:00:00Z',
|
|
56
|
+
updatedDate: '2023-08-14T07:01:38Z',
|
|
57
|
+
expiryDate: '2024-08-13T04:00:00Z',
|
|
58
|
+
status: ['client delete prohibited', 'client transfer prohibited', 'client update prohibited'],
|
|
59
|
+
nameservers: ['a.iana-servers.net', 'b.iana-servers.net'],
|
|
60
|
+
dnssec: 'signedDelegation',
|
|
61
|
+
});
|
|
62
|
+
this.addDomain('google.com', {
|
|
63
|
+
registrar: 'MarkMonitor Inc.',
|
|
64
|
+
registrarUrl: 'http://www.markmonitor.com',
|
|
65
|
+
createdDate: '1997-09-15T04:00:00Z',
|
|
66
|
+
updatedDate: '2019-09-09T15:39:04Z',
|
|
67
|
+
expiryDate: '2028-09-14T04:00:00Z',
|
|
68
|
+
status: ['client delete prohibited', 'client transfer prohibited', 'client update prohibited', 'server delete prohibited', 'server transfer prohibited', 'server update prohibited'],
|
|
69
|
+
nameservers: ['ns1.google.com', 'ns2.google.com', 'ns3.google.com', 'ns4.google.com'],
|
|
70
|
+
registrantOrg: 'Google LLC',
|
|
71
|
+
registrantEmail: 'Select Request Email Form at https://domains.markmonitor.com/whois/google.com',
|
|
72
|
+
dnssec: 'unsigned',
|
|
73
|
+
});
|
|
74
|
+
this.addDomain('test.local', {
|
|
75
|
+
registrar: 'Mock Registrar',
|
|
76
|
+
registrarUrl: 'http://localhost',
|
|
77
|
+
createdDate: '2020-01-01T00:00:00Z',
|
|
78
|
+
updatedDate: '2024-01-01T00:00:00Z',
|
|
79
|
+
expiryDate: '2030-01-01T00:00:00Z',
|
|
80
|
+
status: ['ok'],
|
|
81
|
+
nameservers: ['ns1.test.local', 'ns2.test.local'],
|
|
82
|
+
registrantName: 'Test User',
|
|
83
|
+
registrantOrg: 'Test Organization',
|
|
84
|
+
registrantEmail: 'admin@test.local',
|
|
85
|
+
});
|
|
86
|
+
}
|
|
87
|
+
async start() {
|
|
88
|
+
if (this.started) {
|
|
89
|
+
throw new Error('Server already started');
|
|
90
|
+
}
|
|
91
|
+
return new Promise((resolve, reject) => {
|
|
92
|
+
this.server = net.createServer((socket) => {
|
|
93
|
+
this.handleConnection(socket);
|
|
94
|
+
});
|
|
95
|
+
this.server.on('error', (err) => {
|
|
96
|
+
this.emit('error', err);
|
|
97
|
+
if (!this.started) {
|
|
98
|
+
reject(err);
|
|
99
|
+
}
|
|
100
|
+
});
|
|
101
|
+
this.server.listen(this.options.port, this.options.host, () => {
|
|
102
|
+
this.started = true;
|
|
103
|
+
this.emit('start');
|
|
104
|
+
resolve();
|
|
105
|
+
});
|
|
106
|
+
});
|
|
107
|
+
}
|
|
108
|
+
async stop() {
|
|
109
|
+
if (!this.started || !this.server)
|
|
110
|
+
return;
|
|
111
|
+
return new Promise((resolve) => {
|
|
112
|
+
this.server.close(() => {
|
|
113
|
+
this.server = null;
|
|
114
|
+
this.started = false;
|
|
115
|
+
this.emit('stop');
|
|
116
|
+
resolve();
|
|
117
|
+
});
|
|
118
|
+
});
|
|
119
|
+
}
|
|
120
|
+
reset() {
|
|
121
|
+
this.stats = {
|
|
122
|
+
queriesReceived: 0,
|
|
123
|
+
responseSent: 0,
|
|
124
|
+
queryLog: [],
|
|
125
|
+
};
|
|
126
|
+
this.clearDomains();
|
|
127
|
+
this.emit('reset');
|
|
128
|
+
}
|
|
129
|
+
handleConnection(socket) {
|
|
130
|
+
let data = '';
|
|
131
|
+
socket.on('data', (chunk) => {
|
|
132
|
+
data += chunk.toString();
|
|
133
|
+
if (data.includes('\n') || data.includes('\r')) {
|
|
134
|
+
this.handleQuery(data.trim(), socket);
|
|
135
|
+
}
|
|
136
|
+
});
|
|
137
|
+
socket.on('error', (err) => {
|
|
138
|
+
this.emit('error', err);
|
|
139
|
+
});
|
|
140
|
+
}
|
|
141
|
+
async handleQuery(query, socket) {
|
|
142
|
+
this.stats.queriesReceived++;
|
|
143
|
+
this.stats.queryLog.push({ query, timestamp: Date.now() });
|
|
144
|
+
this.emit('query', query);
|
|
145
|
+
if (this.options.delay > 0) {
|
|
146
|
+
await new Promise((resolve) => setTimeout(resolve, this.options.delay));
|
|
147
|
+
}
|
|
148
|
+
const response = this.buildResponse(query);
|
|
149
|
+
socket.write(response, () => {
|
|
150
|
+
this.stats.responseSent++;
|
|
151
|
+
this.emit('response', query);
|
|
152
|
+
socket.end();
|
|
153
|
+
});
|
|
154
|
+
}
|
|
155
|
+
buildResponse(query) {
|
|
156
|
+
const domain = query.toLowerCase().trim();
|
|
157
|
+
const data = this.domains.get(domain);
|
|
158
|
+
if (!data) {
|
|
159
|
+
return this.buildNotFoundResponse(domain);
|
|
160
|
+
}
|
|
161
|
+
return this.buildDomainResponse(domain, data);
|
|
162
|
+
}
|
|
163
|
+
buildNotFoundResponse(domain) {
|
|
164
|
+
return `
|
|
165
|
+
% WHOIS Mock Server
|
|
166
|
+
|
|
167
|
+
No match for domain "${domain}".
|
|
168
|
+
|
|
169
|
+
>>> Last update of WHOIS database: ${new Date().toISOString()} <<<
|
|
170
|
+
|
|
171
|
+
NOTICE: This is a mock WHOIS server for testing purposes.
|
|
172
|
+
`.trim() + '\n';
|
|
173
|
+
}
|
|
174
|
+
buildDomainResponse(domain, data) {
|
|
175
|
+
const lines = [
|
|
176
|
+
'% WHOIS Mock Server',
|
|
177
|
+
'',
|
|
178
|
+
`Domain Name: ${domain.toUpperCase()}`,
|
|
179
|
+
];
|
|
180
|
+
if (data.registrar) {
|
|
181
|
+
lines.push(`Registrar: ${data.registrar}`);
|
|
182
|
+
}
|
|
183
|
+
if (data.registrarUrl) {
|
|
184
|
+
lines.push(`Registrar URL: ${data.registrarUrl}`);
|
|
185
|
+
}
|
|
186
|
+
if (data.createdDate) {
|
|
187
|
+
lines.push(`Creation Date: ${data.createdDate}`);
|
|
188
|
+
}
|
|
189
|
+
if (data.updatedDate) {
|
|
190
|
+
lines.push(`Updated Date: ${data.updatedDate}`);
|
|
191
|
+
}
|
|
192
|
+
if (data.expiryDate) {
|
|
193
|
+
lines.push(`Registry Expiry Date: ${data.expiryDate}`);
|
|
194
|
+
}
|
|
195
|
+
if (data.status && data.status.length > 0) {
|
|
196
|
+
for (const status of data.status) {
|
|
197
|
+
lines.push(`Domain Status: ${status}`);
|
|
198
|
+
}
|
|
199
|
+
}
|
|
200
|
+
if (data.nameservers && data.nameservers.length > 0) {
|
|
201
|
+
for (const ns of data.nameservers) {
|
|
202
|
+
lines.push(`Name Server: ${ns}`);
|
|
203
|
+
}
|
|
204
|
+
}
|
|
205
|
+
if (data.registrantName) {
|
|
206
|
+
lines.push(`Registrant Name: ${data.registrantName}`);
|
|
207
|
+
}
|
|
208
|
+
if (data.registrantOrg) {
|
|
209
|
+
lines.push(`Registrant Organization: ${data.registrantOrg}`);
|
|
210
|
+
}
|
|
211
|
+
if (data.registrantEmail) {
|
|
212
|
+
lines.push(`Registrant Email: ${data.registrantEmail}`);
|
|
213
|
+
}
|
|
214
|
+
if (data.adminEmail) {
|
|
215
|
+
lines.push(`Admin Email: ${data.adminEmail}`);
|
|
216
|
+
}
|
|
217
|
+
if (data.techEmail) {
|
|
218
|
+
lines.push(`Tech Email: ${data.techEmail}`);
|
|
219
|
+
}
|
|
220
|
+
if (data.dnssec) {
|
|
221
|
+
lines.push(`DNSSEC: ${data.dnssec}`);
|
|
222
|
+
}
|
|
223
|
+
lines.push('');
|
|
224
|
+
lines.push(`>>> Last update of WHOIS database: ${new Date().toISOString()} <<<`);
|
|
225
|
+
lines.push('');
|
|
226
|
+
lines.push('NOTICE: This is a mock WHOIS server for testing purposes.');
|
|
227
|
+
return lines.join('\n') + '\n';
|
|
228
|
+
}
|
|
229
|
+
static async create(options = {}) {
|
|
230
|
+
const server = new MockWhoisServer(options);
|
|
231
|
+
await server.start();
|
|
232
|
+
return server;
|
|
233
|
+
}
|
|
234
|
+
}
|
package/dist/testing/mock.d.ts
CHANGED
package/dist/transport/udp.d.ts
CHANGED
package/dist/transport/undici.js
CHANGED
|
@@ -23,7 +23,7 @@ undiciRequestChannel.subscribe((message) => {
|
|
|
23
23
|
});
|
|
24
24
|
undiciBodySentChannel.subscribe((message) => {
|
|
25
25
|
const store = requestStorage.getStore();
|
|
26
|
-
if (store
|
|
26
|
+
if (store?.hooks && store.hooks.onRequestSent) {
|
|
27
27
|
store.hooks.onRequestSent();
|
|
28
28
|
}
|
|
29
29
|
});
|
package/dist/types/ai.d.ts
CHANGED
package/dist/types/index.d.ts
CHANGED
package/dist/types/logger.d.ts
CHANGED
|
@@ -14,4 +14,3 @@ export type MinimalLogger = Partial<Logger> & {
|
|
|
14
14
|
export declare const consoleLogger: Logger;
|
|
15
15
|
export declare const silentLogger: Logger;
|
|
16
16
|
export declare function createLevelLogger(baseLogger: Logger, minLevel: 'debug' | 'info' | 'warn' | 'error'): Logger;
|
|
17
|
-
//# sourceMappingURL=logger.d.ts.map
|
package/dist/types/udp.d.ts
CHANGED
package/dist/udp/index.d.ts
CHANGED
|
@@ -3,4 +3,3 @@ export { UDPResponseWrapper, StreamingUDPResponse } from '../transport/udp-respo
|
|
|
3
3
|
export { BaseUDPTransport, udpRequestStorage } from '../transport/base-udp.js';
|
|
4
4
|
export type { UDPRequestContext } from '../transport/base-udp.js';
|
|
5
5
|
export type { UDPTimings, DTLSTimings, QUICTimings, UDPConnection, DTLSConnection, QUICConnection, BaseUDPTransportOptions, UDPTransportOptions, DTLSTransportOptions, QUICTransportOptions, UDPRequestOptions, UDPRequest, UDPResponse, UDPTransport as UDPTransportInterface, DTLSTransportInterface, QUICTransportInterface, UDPBatchResult, UDPDiscoveryResult, SimpleUDPAPI, } from '../types/udp.js';
|
|
6
|
-
//# sourceMappingURL=index.d.ts.map
|
package/dist/utils/body.d.ts
CHANGED
|
@@ -8,4 +8,3 @@ export declare function processBody(body: BodyInput): ProcessedBody;
|
|
|
8
8
|
export declare function createFormData(data: Record<string, any>): FormData;
|
|
9
9
|
export declare function createMultipart(data: Record<string, any>): FormData;
|
|
10
10
|
export declare function isFileUpload(body: any): boolean;
|
|
11
|
-
//# sourceMappingURL=body.d.ts.map
|
package/dist/utils/cert.d.ts
CHANGED
package/dist/utils/charset.d.ts
CHANGED
|
@@ -13,4 +13,3 @@ export declare function detectCharset(buffer: Uint8Array, contentType?: string |
|
|
|
13
13
|
export declare function decodeText(buffer: Uint8Array, charsetOrInfo?: string | CharsetInfo): string;
|
|
14
14
|
export declare function getSupportedEncodings(): string[];
|
|
15
15
|
export declare function isCharsetSupported(charset: string): boolean;
|
|
16
|
-
//# sourceMappingURL=charset.d.ts.map
|
package/dist/utils/chart.d.ts
CHANGED