recker 1.0.5 → 1.0.7

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 (106) hide show
  1. package/README.md +1 -1
  2. package/dist/ai/adaptive-timeout.d.ts +51 -0
  3. package/dist/ai/adaptive-timeout.d.ts.map +1 -0
  4. package/dist/ai/adaptive-timeout.js +208 -0
  5. package/dist/ai/client.d.ts +24 -0
  6. package/dist/ai/client.d.ts.map +1 -0
  7. package/dist/ai/client.js +289 -0
  8. package/dist/ai/index.d.ts +10 -0
  9. package/dist/ai/index.d.ts.map +1 -0
  10. package/dist/ai/index.js +6 -0
  11. package/dist/ai/providers/anthropic.d.ts +64 -0
  12. package/dist/ai/providers/anthropic.d.ts.map +1 -0
  13. package/dist/ai/providers/anthropic.js +367 -0
  14. package/dist/ai/providers/base.d.ts +49 -0
  15. package/dist/ai/providers/base.d.ts.map +1 -0
  16. package/dist/ai/providers/base.js +145 -0
  17. package/dist/ai/providers/index.d.ts +7 -0
  18. package/dist/ai/providers/index.d.ts.map +1 -0
  19. package/dist/ai/providers/index.js +3 -0
  20. package/dist/ai/providers/openai.d.ts +65 -0
  21. package/dist/ai/providers/openai.d.ts.map +1 -0
  22. package/dist/ai/providers/openai.js +298 -0
  23. package/dist/ai/rate-limiter.d.ts +44 -0
  24. package/dist/ai/rate-limiter.d.ts.map +1 -0
  25. package/dist/ai/rate-limiter.js +212 -0
  26. package/dist/bench/generator.d.ts +19 -0
  27. package/dist/bench/generator.d.ts.map +1 -0
  28. package/dist/bench/generator.js +86 -0
  29. package/dist/bench/stats.d.ts +35 -0
  30. package/dist/bench/stats.d.ts.map +1 -0
  31. package/dist/bench/stats.js +60 -0
  32. package/dist/cli/handler.d.ts +11 -0
  33. package/dist/cli/handler.d.ts.map +1 -0
  34. package/dist/cli/handler.js +92 -0
  35. package/dist/cli/index.d.ts +3 -0
  36. package/dist/cli/index.d.ts.map +1 -0
  37. package/dist/cli/index.js +255 -0
  38. package/dist/cli/presets.d.ts +2 -0
  39. package/dist/cli/presets.d.ts.map +1 -0
  40. package/dist/cli/presets.js +67 -0
  41. package/dist/cli/tui/ai-chat.d.ts +3 -0
  42. package/dist/cli/tui/ai-chat.d.ts.map +1 -0
  43. package/dist/cli/tui/ai-chat.js +100 -0
  44. package/dist/cli/tui/load-dashboard.d.ts +3 -0
  45. package/dist/cli/tui/load-dashboard.d.ts.map +1 -0
  46. package/dist/cli/tui/load-dashboard.js +117 -0
  47. package/dist/cli/tui/shell.d.ts +27 -0
  48. package/dist/cli/tui/shell.d.ts.map +1 -0
  49. package/dist/cli/tui/shell.js +386 -0
  50. package/dist/cli/tui/websocket.d.ts +2 -0
  51. package/dist/cli/tui/websocket.d.ts.map +1 -0
  52. package/dist/cli/tui/websocket.js +87 -0
  53. package/dist/contract/index.d.ts +2 -2
  54. package/dist/contract/index.d.ts.map +1 -1
  55. package/dist/core/client.d.ts +1 -0
  56. package/dist/core/client.d.ts.map +1 -1
  57. package/dist/core/client.js +4 -2
  58. package/dist/core/request-promise.d.ts +1 -1
  59. package/dist/core/request-promise.d.ts.map +1 -1
  60. package/dist/mcp/contract.d.ts +1 -1
  61. package/dist/mcp/contract.d.ts.map +1 -1
  62. package/dist/protocols/ftp.d.ts +28 -5
  63. package/dist/protocols/ftp.d.ts.map +1 -1
  64. package/dist/protocols/ftp.js +549 -136
  65. package/dist/protocols/sftp.d.ts +4 -2
  66. package/dist/protocols/sftp.d.ts.map +1 -1
  67. package/dist/protocols/sftp.js +16 -2
  68. package/dist/protocols/telnet.d.ts +37 -5
  69. package/dist/protocols/telnet.d.ts.map +1 -1
  70. package/dist/protocols/telnet.js +434 -58
  71. package/dist/scrape/document.d.ts.map +1 -1
  72. package/dist/scrape/document.js +7 -12
  73. package/dist/testing/index.d.ts +2 -0
  74. package/dist/testing/index.d.ts.map +1 -1
  75. package/dist/testing/index.js +1 -0
  76. package/dist/testing/mock-udp-server.d.ts +44 -0
  77. package/dist/testing/mock-udp-server.d.ts.map +1 -0
  78. package/dist/testing/mock-udp-server.js +188 -0
  79. package/dist/transport/base-udp.d.ts +36 -0
  80. package/dist/transport/base-udp.d.ts.map +1 -0
  81. package/dist/transport/base-udp.js +188 -0
  82. package/dist/transport/udp-response.d.ts +65 -0
  83. package/dist/transport/udp-response.d.ts.map +1 -0
  84. package/dist/transport/udp-response.js +269 -0
  85. package/dist/transport/udp.d.ts +22 -0
  86. package/dist/transport/udp.d.ts.map +1 -0
  87. package/dist/transport/udp.js +260 -0
  88. package/dist/types/ai.d.ts +268 -0
  89. package/dist/types/ai.d.ts.map +1 -0
  90. package/dist/types/ai.js +1 -0
  91. package/dist/types/udp.d.ts +138 -0
  92. package/dist/types/udp.d.ts.map +1 -0
  93. package/dist/types/udp.js +1 -0
  94. package/dist/udp/index.d.ts +6 -0
  95. package/dist/udp/index.d.ts.map +1 -0
  96. package/dist/udp/index.js +3 -0
  97. package/dist/utils/chart.d.ts +15 -0
  98. package/dist/utils/chart.d.ts.map +1 -0
  99. package/dist/utils/chart.js +94 -0
  100. package/dist/utils/colors.d.ts +27 -0
  101. package/dist/utils/colors.d.ts.map +1 -0
  102. package/dist/utils/colors.js +50 -0
  103. package/dist/utils/optional-require.d.ts +20 -0
  104. package/dist/utils/optional-require.d.ts.map +1 -0
  105. package/dist/utils/optional-require.js +105 -0
  106. package/package.json +53 -12
@@ -0,0 +1,105 @@
1
+ export const OPTIONAL_DEPENDENCIES = {
2
+ 'cardinal': {
3
+ package: 'cardinal',
4
+ submodule: 'recker/cli',
5
+ version: '^2.0.0',
6
+ feature: 'syntax highlighting',
7
+ },
8
+ 'ssh2-sftp-client': {
9
+ package: 'ssh2-sftp-client',
10
+ submodule: 'recker/protocols/sftp',
11
+ version: '^11.0.0',
12
+ feature: 'SFTP client',
13
+ },
14
+ 'cheerio': {
15
+ package: 'cheerio',
16
+ submodule: 'recker/scrape',
17
+ version: '^1.0.0',
18
+ feature: 'HTML parsing and scraping',
19
+ },
20
+ 'ioredis': {
21
+ package: 'ioredis',
22
+ submodule: 'recker/cache',
23
+ version: '^5.0.0',
24
+ feature: 'Redis cache storage',
25
+ },
26
+ };
27
+ export class MissingDependencyError extends Error {
28
+ packageName;
29
+ submodule;
30
+ installCommand;
31
+ constructor(packageName, submodule, installCommand) {
32
+ super(`Missing optional dependency: ${packageName}\n\n` +
33
+ `This dependency is required for ${submodule}.\n` +
34
+ `Install it with:\n\n ${installCommand}\n`);
35
+ this.packageName = packageName;
36
+ this.submodule = submodule;
37
+ this.installCommand = installCommand;
38
+ this.name = 'MissingDependencyError';
39
+ }
40
+ }
41
+ const moduleCache = new Map();
42
+ export function clearModuleCache() {
43
+ moduleCache.clear();
44
+ }
45
+ export async function requireOptional(packageName, submodule) {
46
+ if (moduleCache.has(packageName)) {
47
+ return moduleCache.get(packageName);
48
+ }
49
+ try {
50
+ const mod = await import(packageName);
51
+ moduleCache.set(packageName, mod);
52
+ return mod;
53
+ }
54
+ catch (error) {
55
+ const err = error;
56
+ const isModuleNotFound = err.code === 'ERR_MODULE_NOT_FOUND' ||
57
+ err.code === 'MODULE_NOT_FOUND' ||
58
+ (err.message && err.message.includes('Cannot find module'));
59
+ if (isModuleNotFound) {
60
+ const info = OPTIONAL_DEPENDENCIES[packageName];
61
+ const sub = submodule || info?.submodule || 'this feature';
62
+ const version = info?.version || '';
63
+ const pkg = version ? `${packageName}@${version.replace('^', '')}` : packageName;
64
+ throw new MissingDependencyError(packageName, sub, `pnpm add ${pkg}`);
65
+ }
66
+ throw error;
67
+ }
68
+ }
69
+ export function isPackageAvailable(packageName) {
70
+ try {
71
+ require.resolve(packageName);
72
+ return true;
73
+ }
74
+ catch {
75
+ return false;
76
+ }
77
+ }
78
+ export function getInstallCommand(packages) {
79
+ const pkgsWithVersions = packages.map((pkg) => {
80
+ const info = OPTIONAL_DEPENDENCIES[pkg];
81
+ return info?.version ? `${pkg}@${info.version.replace('^', '')}` : pkg;
82
+ });
83
+ return `pnpm add ${pkgsWithVersions.join(' ')}`;
84
+ }
85
+ export async function requireOptionalMany(packages, submodule) {
86
+ const missing = [];
87
+ const results = {};
88
+ for (const pkg of packages) {
89
+ try {
90
+ results[pkg] = await requireOptional(pkg, submodule);
91
+ }
92
+ catch (error) {
93
+ if (error instanceof MissingDependencyError) {
94
+ missing.push(pkg);
95
+ }
96
+ else {
97
+ throw error;
98
+ }
99
+ }
100
+ }
101
+ if (missing.length > 0) {
102
+ throw new MissingDependencyError(missing.join(', '), submodule, getInstallCommand(missing));
103
+ }
104
+ return results;
105
+ }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "recker",
3
- "version": "1.0.5",
3
+ "version": "1.0.7",
4
4
  "description": "AI & DevX focused HTTP client for Node.js 18+",
5
5
  "main": "./dist/index.js",
6
6
  "types": "./dist/index.d.ts",
@@ -21,17 +21,27 @@
21
21
  "hooks",
22
22
  "http2",
23
23
  "http3",
24
+ "quic",
25
+ "udp",
26
+ "dtls",
27
+ "webrtc",
24
28
  "sse",
25
29
  "websocket",
26
30
  "whois",
27
31
  "dns",
28
32
  "proxy",
29
33
  "ai",
34
+ "llm",
35
+ "openai",
36
+ "anthropic",
37
+ "gpt",
38
+ "claude",
39
+ "streaming",
30
40
  "scraping",
31
41
  "cheerio",
32
42
  "html-parser"
33
43
  ],
34
- "author": "fforattini",
44
+ "author": "filipeforattini",
35
45
  "license": "MIT",
36
46
  "homepage": "https://forattini-dev.github.io/recker",
37
47
  "repository": {
@@ -76,8 +86,27 @@
76
86
  "types": "./dist/utils/*.d.ts",
77
87
  "import": "./dist/utils/*.js"
78
88
  },
89
+ "./udp": {
90
+ "types": "./dist/udp/index.d.ts",
91
+ "import": "./dist/udp/index.js"
92
+ },
93
+ "./dns": {
94
+ "types": "./dist/dns/index.d.ts",
95
+ "import": "./dist/dns/index.js"
96
+ },
97
+ "./webrtc": {
98
+ "types": "./dist/webrtc/index.d.ts",
99
+ "import": "./dist/webrtc/index.js"
100
+ },
101
+ "./ai": {
102
+ "types": "./dist/ai/index.d.ts",
103
+ "import": "./dist/ai/index.js"
104
+ },
79
105
  "./package.json": "./package.json"
80
106
  },
107
+ "bin": {
108
+ "rek": "./dist/cli/index.js"
109
+ },
81
110
  "engines": {
82
111
  "node": ">=18"
83
112
  },
@@ -85,23 +114,29 @@
85
114
  "access": "public"
86
115
  },
87
116
  "dependencies": {
88
- "basic-ftp": "^5.0.5",
89
- "glob": "^13.0.0",
90
- "ssh2-sftp-client": "^12.0.1",
91
- "telnet-client": "^2.2.9",
117
+ "commander": "^12.0.0",
118
+ "ora": "^8.0.0",
92
119
  "undici": "^7.16.0",
93
- "zod": "^4.1.13"
120
+ "zod": "^3.24.0"
94
121
  },
95
122
  "peerDependencies": {
123
+ "cardinal": "^2.1.0",
96
124
  "cheerio": "^1.0.0",
97
- "ioredis": "^5.0.0"
125
+ "ioredis": "^5.0.0",
126
+ "ssh2-sftp-client": "^11.0.0"
98
127
  },
99
128
  "peerDependenciesMeta": {
129
+ "cardinal": {
130
+ "optional": true
131
+ },
100
132
  "cheerio": {
101
133
  "optional": true
102
134
  },
103
135
  "ioredis": {
104
136
  "optional": true
137
+ },
138
+ "ssh2-sftp-client": {
139
+ "optional": true
105
140
  }
106
141
  },
107
142
  "devDependencies": {
@@ -111,7 +146,9 @@
111
146
  "@types/superagent": "^8.1.9",
112
147
  "@vitest/coverage-v8": "^3.2.4",
113
148
  "axios": "^1.13.2",
149
+ "cardinal": "^2.1.1",
114
150
  "cheerio": "^1.0.0",
151
+ "commander": "^14.0.0",
115
152
  "docsify-cli": "^4.4.4",
116
153
  "domhandler": "^5.0.3",
117
154
  "got": "^14.6.5",
@@ -119,10 +156,14 @@
119
156
  "ky": "^1.14.0",
120
157
  "mitata": "^1.0.34",
121
158
  "needle": "^3.3.1",
159
+ "ora": "^9.0.0",
160
+ "picocolors": "^1.1.1",
161
+ "ssh2-sftp-client": "^12.0.1",
122
162
  "superagent": "^10.2.3",
123
163
  "tsx": "^4.20.6",
124
164
  "typescript": "^5.9.3",
125
- "vitest": "^3.2.4"
165
+ "vitest": "^3.2.4",
166
+ "zod": "^3.24.0"
126
167
  },
127
168
  "scripts": {
128
169
  "build": "tsc",
@@ -130,8 +171,8 @@
130
171
  "test:coverage": "vitest run --coverage",
131
172
  "bench": "tsx benchmark/index.ts",
132
173
  "bench:all": "tsx benchmark/run-all.ts",
133
- "docs:dev": "docsify serve docs --port 3000",
134
- "docs:preview": "npx -y docsify-cli serve docs --port 3000 --open",
135
- "lint": "echo \"No linting configured for this project.\" && exit 0"
174
+ "docs": "npx -y docsify-cli serve docs --port 3000 --open",
175
+ "lint": "echo \"No linting configured for this project.\" && exit 0",
176
+ "cli": "tsx src/cli/index.ts"
136
177
  }
137
178
  }