zammy 1.2.0 → 1.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (33) hide show
  1. package/README.md +328 -214
  2. package/SECURITY.md +57 -0
  3. package/assets/zammy.gif +0 -0
  4. package/dist/index.js +3257 -450
  5. package/package.json +10 -3
  6. package/packages/plugins/docker/README.md +141 -0
  7. package/packages/plugins/docker/dist/index.d.ts +46 -0
  8. package/packages/plugins/docker/dist/index.d.ts.map +1 -0
  9. package/packages/plugins/docker/dist/index.js +402 -0
  10. package/packages/plugins/docker/dist/index.js.map +1 -0
  11. package/packages/plugins/docker/package.json +28 -0
  12. package/packages/plugins/docker/zammy-plugin.json +16 -0
  13. package/packages/plugins/faker/README.md +65 -0
  14. package/packages/plugins/faker/dist/index.d.ts +43 -0
  15. package/packages/plugins/faker/dist/index.d.ts.map +1 -0
  16. package/packages/plugins/faker/dist/index.js +349 -0
  17. package/packages/plugins/faker/dist/index.js.map +1 -0
  18. package/packages/plugins/faker/package.json +28 -0
  19. package/packages/plugins/faker/zammy-plugin.json +14 -0
  20. package/packages/plugins/network/README.md +126 -0
  21. package/packages/plugins/network/dist/index.d.ts +45 -0
  22. package/packages/plugins/network/dist/index.d.ts.map +1 -0
  23. package/packages/plugins/network/dist/index.js +406 -0
  24. package/packages/plugins/network/dist/index.js.map +1 -0
  25. package/packages/plugins/network/package.json +28 -0
  26. package/packages/plugins/network/zammy-plugin.json +17 -0
  27. package/packages/plugins/port/README.md +74 -0
  28. package/packages/plugins/port/dist/index.d.ts +47 -0
  29. package/packages/plugins/port/dist/index.d.ts.map +1 -0
  30. package/packages/plugins/port/dist/index.js +331 -0
  31. package/packages/plugins/port/dist/index.js.map +1 -0
  32. package/packages/plugins/port/package.json +28 -0
  33. package/packages/plugins/port/zammy-plugin.json +16 -0
@@ -0,0 +1,126 @@
1
+ # zammy-plugin-network
2
+
3
+ Network utilities and diagnostics for your terminal.
4
+
5
+ ## Installation
6
+
7
+ ```bash
8
+ /plugin install zammy-plugin-network
9
+ ```
10
+
11
+ ## Commands
12
+
13
+ ### `/net ip`
14
+
15
+ Show your local and public IP addresses.
16
+
17
+ ```
18
+ IP ADDRESSES
19
+
20
+ Local:
21
+ → 192.168.1.100
22
+
23
+ Public: 203.0.113.42
24
+ ```
25
+
26
+ ### `/net ping <host>`
27
+
28
+ Ping a host and show response times.
29
+
30
+ ```bash
31
+ /net ping google.com
32
+
33
+ Pinging google.com...
34
+
35
+ ✔ Reply 1: 15ms TTL=117
36
+ ✔ Reply 2: 14ms TTL=117
37
+ ✔ Reply 3: 16ms TTL=117
38
+ ✔ Reply 4: 14ms TTL=117
39
+
40
+ Min: 14ms Max: 16ms Avg: 14.8ms
41
+ ```
42
+
43
+ ### `/net dns <domain>`
44
+
45
+ Perform DNS lookup and show all records.
46
+
47
+ ```bash
48
+ /net dns github.com
49
+
50
+ DNS: GITHUB.COM
51
+
52
+ TYPE VALUE
53
+ ──────────────────────────────────────────────
54
+ A 140.82.112.3
55
+ AAAA 2606:50c0:8000::154
56
+ MX 10 alt1.aspmx.l.google.com
57
+ NS dns1.p08.nsone.net
58
+ ```
59
+
60
+ ### `/net speed`
61
+
62
+ Run a download speed test.
63
+
64
+ ```bash
65
+ /net speed
66
+
67
+ SPEED TEST
68
+
69
+ ✔ Test complete
70
+
71
+ Download: 95.42 Mbps
72
+ Latency: 45ms
73
+ Data: 5.0 MB in 0.4s
74
+ ```
75
+
76
+ ### `/net headers <url>`
77
+
78
+ Fetch and display HTTP headers for a URL.
79
+
80
+ ```bash
81
+ /net headers example.com
82
+
83
+ Status: 200 OK
84
+
85
+ Headers:
86
+ ──────────────────────────────────────────────
87
+ content-type: text/html; charset=UTF-8
88
+ content-length: 1256
89
+ server: nginx
90
+ cache-control: max-age=604800
91
+ ```
92
+
93
+ ### `/net ports`
94
+
95
+ Display a reference table of common ports.
96
+
97
+ ```
98
+ COMMON PORTS
99
+
100
+ PORT SERVICE PROTOCOL
101
+ ────────────────────────────────────────
102
+ 22 SSH TCP
103
+ 80 HTTP TCP
104
+ 443 HTTPS TCP
105
+ 3306 MySQL TCP
106
+ 5432 PostgreSQL TCP
107
+ 6379 Redis TCP
108
+ ...
109
+ ```
110
+
111
+ ## Cross-Platform Support
112
+
113
+ This plugin works on:
114
+ - **Windows** - Uses Windows ping
115
+ - **macOS** - Uses macOS ping
116
+ - **Linux** - Uses Linux ping
117
+
118
+ ## Permissions
119
+
120
+ This plugin requires:
121
+ - **shell** - For ping command
122
+ - **network** - For public IP and speed test
123
+
124
+ ## License
125
+
126
+ MIT
@@ -0,0 +1,45 @@
1
+ interface PluginAPI {
2
+ registerCommand(command: Command): void;
3
+ ui: {
4
+ theme: {
5
+ primary: (text: string) => string;
6
+ secondary: (text: string) => string;
7
+ success: (text: string) => string;
8
+ warning: (text: string) => string;
9
+ error: (text: string) => string;
10
+ dim: (text: string) => string;
11
+ gradient: (text: string) => string;
12
+ };
13
+ symbols: {
14
+ check: string;
15
+ cross: string;
16
+ warning: string;
17
+ info: string;
18
+ sparkles: string;
19
+ arrow: string;
20
+ };
21
+ progressBar: (current: number, total: number, width?: number) => string;
22
+ };
23
+ log: {
24
+ info: (message: string) => void;
25
+ error: (message: string) => void;
26
+ };
27
+ shell?: {
28
+ spawn: (command: string, args?: string[]) => Promise<{
29
+ stdout: string;
30
+ stderr: string;
31
+ code: number;
32
+ }>;
33
+ };
34
+ }
35
+ interface Command {
36
+ name: string;
37
+ description: string;
38
+ usage: string;
39
+ execute: (args: string[]) => Promise<void>;
40
+ }
41
+ declare const plugin: {
42
+ activate(api: PluginAPI): void;
43
+ };
44
+ export default plugin;
45
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AASA,UAAU,SAAS;IACjB,eAAe,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAAC;IACxC,EAAE,EAAE;QACF,KAAK,EAAE;YACL,OAAO,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,MAAM,CAAC;YAClC,SAAS,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,MAAM,CAAC;YACpC,OAAO,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,MAAM,CAAC;YAClC,OAAO,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,MAAM,CAAC;YAClC,KAAK,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,MAAM,CAAC;YAChC,GAAG,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,MAAM,CAAC;YAC9B,QAAQ,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,MAAM,CAAC;SACpC,CAAC;QACF,OAAO,EAAE;YACP,KAAK,EAAE,MAAM,CAAC;YACd,KAAK,EAAE,MAAM,CAAC;YACd,OAAO,EAAE,MAAM,CAAC;YAChB,IAAI,EAAE,MAAM,CAAC;YACb,QAAQ,EAAE,MAAM,CAAC;YACjB,KAAK,EAAE,MAAM,CAAC;SACf,CAAC;QACF,WAAW,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,KAAK,MAAM,CAAC;KACzE,CAAC;IACF,GAAG,EAAE;QACH,IAAI,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;QAChC,KAAK,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;KAClC,CAAC;IACF,KAAK,CAAC,EAAE;QACN,KAAK,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,EAAE,KAAK,OAAO,CAAC;YAAE,MAAM,EAAE,MAAM,CAAC;YAAC,MAAM,EAAE,MAAM,CAAC;YAAC,IAAI,EAAE,MAAM,CAAA;SAAE,CAAC,CAAC;KACxG,CAAC;CACH;AAED,UAAU,OAAO;IACf,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;CAC5C;AAkQD,QAAA,MAAM,MAAM;kBACI,SAAS;CAsPxB,CAAC;AAEF,eAAe,MAAM,CAAC"}
@@ -0,0 +1,406 @@
1
+ // Zammy Plugin: Network Tools
2
+ // Network utilities and diagnostics
3
+ import { platform } from 'os';
4
+ import { networkInterfaces } from 'os';
5
+ import { promises as dns } from 'dns';
6
+ import https from 'https';
7
+ import http from 'http';
8
+ const isWindows = platform() === 'win32';
9
+ // ============ COMMON PORTS ============
10
+ const COMMON_PORTS = [
11
+ { port: 20, service: 'FTP Data', protocol: 'TCP' },
12
+ { port: 21, service: 'FTP Control', protocol: 'TCP' },
13
+ { port: 22, service: 'SSH', protocol: 'TCP' },
14
+ { port: 23, service: 'Telnet', protocol: 'TCP' },
15
+ { port: 25, service: 'SMTP', protocol: 'TCP' },
16
+ { port: 53, service: 'DNS', protocol: 'TCP/UDP' },
17
+ { port: 67, service: 'DHCP Server', protocol: 'UDP' },
18
+ { port: 68, service: 'DHCP Client', protocol: 'UDP' },
19
+ { port: 80, service: 'HTTP', protocol: 'TCP' },
20
+ { port: 110, service: 'POP3', protocol: 'TCP' },
21
+ { port: 143, service: 'IMAP', protocol: 'TCP' },
22
+ { port: 443, service: 'HTTPS', protocol: 'TCP' },
23
+ { port: 465, service: 'SMTPS', protocol: 'TCP' },
24
+ { port: 587, service: 'SMTP Submission', protocol: 'TCP' },
25
+ { port: 993, service: 'IMAPS', protocol: 'TCP' },
26
+ { port: 995, service: 'POP3S', protocol: 'TCP' },
27
+ { port: 3000, service: 'Dev Server', protocol: 'TCP' },
28
+ { port: 3306, service: 'MySQL', protocol: 'TCP' },
29
+ { port: 3389, service: 'RDP', protocol: 'TCP' },
30
+ { port: 5432, service: 'PostgreSQL', protocol: 'TCP' },
31
+ { port: 5672, service: 'RabbitMQ', protocol: 'TCP' },
32
+ { port: 6379, service: 'Redis', protocol: 'TCP' },
33
+ { port: 8080, service: 'HTTP Alt', protocol: 'TCP' },
34
+ { port: 8443, service: 'HTTPS Alt', protocol: 'TCP' },
35
+ { port: 27017, service: 'MongoDB', protocol: 'TCP' },
36
+ ];
37
+ // ============ HELPERS ============
38
+ function getLocalIPs() {
39
+ const interfaces = networkInterfaces();
40
+ const ips = [];
41
+ for (const name of Object.keys(interfaces)) {
42
+ for (const iface of interfaces[name] || []) {
43
+ if (iface.family === 'IPv4' && !iface.internal) {
44
+ ips.push(iface.address);
45
+ }
46
+ }
47
+ }
48
+ return ips;
49
+ }
50
+ async function getPublicIP() {
51
+ return new Promise((resolve) => {
52
+ const timeout = setTimeout(() => resolve(null), 5000);
53
+ https.get('https://api.ipify.org', (res) => {
54
+ let data = '';
55
+ res.on('data', (chunk) => { data += chunk.toString(); });
56
+ res.on('end', () => {
57
+ clearTimeout(timeout);
58
+ resolve(data.trim());
59
+ });
60
+ }).on('error', () => {
61
+ clearTimeout(timeout);
62
+ resolve(null);
63
+ });
64
+ });
65
+ }
66
+ async function lookupDns(domain) {
67
+ const records = [];
68
+ try {
69
+ const addresses = await dns.resolve4(domain);
70
+ for (const addr of addresses) {
71
+ records.push({ type: 'A', value: addr });
72
+ }
73
+ }
74
+ catch { /* ignore */ }
75
+ try {
76
+ const addresses = await dns.resolve6(domain);
77
+ for (const addr of addresses) {
78
+ records.push({ type: 'AAAA', value: addr });
79
+ }
80
+ }
81
+ catch { /* ignore */ }
82
+ try {
83
+ const mx = await dns.resolveMx(domain);
84
+ for (const record of mx) {
85
+ records.push({ type: 'MX', value: `${record.priority} ${record.exchange}` });
86
+ }
87
+ }
88
+ catch { /* ignore */ }
89
+ try {
90
+ const ns = await dns.resolveNs(domain);
91
+ for (const record of ns) {
92
+ records.push({ type: 'NS', value: record });
93
+ }
94
+ }
95
+ catch { /* ignore */ }
96
+ try {
97
+ const txt = await dns.resolveTxt(domain);
98
+ for (const record of txt) {
99
+ records.push({ type: 'TXT', value: record.join('') });
100
+ }
101
+ }
102
+ catch { /* ignore */ }
103
+ if (records.length === 0) {
104
+ return { records: [], error: 'No DNS records found' };
105
+ }
106
+ return { records };
107
+ }
108
+ async function ping(shell, host, count = 4) {
109
+ try {
110
+ const args = isWindows
111
+ ? ['-n', count.toString(), host]
112
+ : ['-c', count.toString(), host];
113
+ const result = await shell.spawn('ping', args);
114
+ if (result.code !== 0 && !result.stdout.includes('time')) {
115
+ return { results: [], error: result.stderr || 'Host unreachable' };
116
+ }
117
+ const results = [];
118
+ const lines = result.stdout.split('\n');
119
+ for (const line of lines) {
120
+ // Windows: Reply from 8.8.8.8: bytes=32 time=15ms TTL=117
121
+ // Unix: 64 bytes from 8.8.8.8: icmp_seq=1 ttl=117 time=15.2 ms
122
+ const timeMatch = line.match(/time[=<](\d+\.?\d*)\s*ms/i);
123
+ const ttlMatch = line.match(/ttl[=:](\d+)/i);
124
+ if (timeMatch) {
125
+ results.push({
126
+ success: true,
127
+ time: parseFloat(timeMatch[1]),
128
+ ttl: ttlMatch ? parseInt(ttlMatch[1]) : undefined,
129
+ });
130
+ }
131
+ }
132
+ return { results };
133
+ }
134
+ catch (error) {
135
+ return { results: [], error: String(error) };
136
+ }
137
+ }
138
+ async function runSpeedTest(onProgress) {
139
+ const testUrl = 'https://speed.cloudflare.com/__down?bytes=5000000'; // 5MB
140
+ const testSize = 5_000_000;
141
+ return new Promise((resolve) => {
142
+ const timeout = setTimeout(() => {
143
+ resolve({ error: 'Speed test timed out' });
144
+ }, 30000);
145
+ const startTime = Date.now();
146
+ let latency = 0;
147
+ https.get(testUrl, (res) => {
148
+ latency = Date.now() - startTime;
149
+ let downloaded = 0;
150
+ res.on('data', (chunk) => {
151
+ downloaded += chunk.length;
152
+ if (onProgress) {
153
+ onProgress(Math.min(100, (downloaded / testSize) * 100));
154
+ }
155
+ });
156
+ res.on('end', () => {
157
+ clearTimeout(timeout);
158
+ const duration = Date.now() - startTime;
159
+ const speedBps = (downloaded * 8) / (duration / 1000);
160
+ const speedMbps = speedBps / 1_000_000;
161
+ resolve({
162
+ downloadSpeed: Math.round(speedMbps * 100) / 100,
163
+ latency,
164
+ testSize: downloaded,
165
+ duration,
166
+ });
167
+ });
168
+ }).on('error', (error) => {
169
+ clearTimeout(timeout);
170
+ resolve({ error: error.message });
171
+ });
172
+ });
173
+ }
174
+ async function getHeaders(url) {
175
+ return new Promise((resolve) => {
176
+ const timeout = setTimeout(() => {
177
+ resolve({ statusCode: 0, statusMessage: '', headers: {}, error: 'Request timed out' });
178
+ }, 10000);
179
+ try {
180
+ const parsedUrl = new URL(url.startsWith('http') ? url : `https://${url}`);
181
+ const client = parsedUrl.protocol === 'https:' ? https : http;
182
+ const req = client.request(parsedUrl, { method: 'HEAD' }, (res) => {
183
+ clearTimeout(timeout);
184
+ resolve({
185
+ statusCode: res.statusCode || 0,
186
+ statusMessage: res.statusMessage || '',
187
+ headers: res.headers,
188
+ });
189
+ });
190
+ req.on('error', (error) => {
191
+ clearTimeout(timeout);
192
+ resolve({ statusCode: 0, statusMessage: '', headers: {}, error: error.message });
193
+ });
194
+ req.end();
195
+ }
196
+ catch (error) {
197
+ clearTimeout(timeout);
198
+ resolve({ statusCode: 0, statusMessage: '', headers: {}, error: String(error) });
199
+ }
200
+ });
201
+ }
202
+ // ============ PLUGIN ============
203
+ const plugin = {
204
+ activate(api) {
205
+ const { theme, symbols, progressBar } = api.ui;
206
+ if (!api.shell) {
207
+ api.log.error('Network plugin requires shell permission');
208
+ return;
209
+ }
210
+ const shell = api.shell;
211
+ api.registerCommand({
212
+ name: 'net',
213
+ description: 'Network utilities and diagnostics',
214
+ usage: '/net <action> [args]\n\n Actions: ip, ping, dns, speed, headers, ports',
215
+ async execute(args) {
216
+ const action = args[0]?.toLowerCase();
217
+ if (!action) {
218
+ console.log('');
219
+ console.log(` ${symbols.sparkles} ${theme.gradient('NETWORK TOOLS')}`);
220
+ console.log('');
221
+ console.log(` ${theme.dim('Usage:')} /net <action> [args]`);
222
+ console.log('');
223
+ console.log(` ${theme.dim('Actions:')}`);
224
+ console.log(` ${theme.primary('ip')} ${theme.dim('Show local + public IP')}`);
225
+ console.log(` ${theme.primary('ping <host>')} ${theme.dim('Ping a host')}`);
226
+ console.log(` ${theme.primary('dns <domain>')} ${theme.dim('DNS lookup')}`);
227
+ console.log(` ${theme.primary('speed')} ${theme.dim('Speed test')}`);
228
+ console.log(` ${theme.primary('headers <url>')} ${theme.dim('Show HTTP headers')}`);
229
+ console.log(` ${theme.primary('ports')} ${theme.dim('Common ports reference')}`);
230
+ console.log('');
231
+ return;
232
+ }
233
+ console.log('');
234
+ switch (action) {
235
+ case 'ip': {
236
+ console.log(` ${symbols.sparkles} ${theme.gradient('IP ADDRESSES')}`);
237
+ console.log('');
238
+ const localIPs = getLocalIPs();
239
+ if (localIPs.length > 0) {
240
+ console.log(` ${theme.dim('Local:')}`);
241
+ for (const ip of localIPs) {
242
+ console.log(` ${symbols.arrow} ${theme.primary(ip)}`);
243
+ }
244
+ }
245
+ else {
246
+ console.log(` ${theme.dim('Local:')} ${theme.warning('No network interfaces found')}`);
247
+ }
248
+ console.log('');
249
+ console.log(` ${theme.dim('Fetching public IP...')}`);
250
+ const publicIP = await getPublicIP();
251
+ // Move cursor up and clear line
252
+ process.stdout.write('\x1b[1A\x1b[2K');
253
+ if (publicIP) {
254
+ console.log(` ${theme.dim('Public:')} ${theme.success(publicIP)}`);
255
+ }
256
+ else {
257
+ console.log(` ${theme.dim('Public:')} ${theme.warning('Could not determine (offline?)')}`);
258
+ }
259
+ break;
260
+ }
261
+ case 'ping': {
262
+ const host = args[1];
263
+ if (!host) {
264
+ console.log(` ${symbols.warning} ${theme.warning('Usage:')} /net ping <host>`);
265
+ break;
266
+ }
267
+ console.log(` ${theme.dim('Pinging')} ${theme.primary(host)}...`);
268
+ console.log('');
269
+ const { results, error } = await ping(shell, host);
270
+ if (error) {
271
+ console.log(` ${symbols.cross} ${theme.error(error)}`);
272
+ break;
273
+ }
274
+ if (results.length === 0) {
275
+ console.log(` ${symbols.cross} ${theme.error('No response from host')}`);
276
+ break;
277
+ }
278
+ for (let i = 0; i < results.length; i++) {
279
+ const r = results[i];
280
+ if (r.success) {
281
+ console.log(` ${symbols.check} ${theme.dim(`Reply ${i + 1}:`)} ` +
282
+ `${theme.success(`${r.time}ms`)} ` +
283
+ `${r.ttl ? theme.dim(`TTL=${r.ttl}`) : ''}`);
284
+ }
285
+ }
286
+ const times = results.filter(r => r.time).map(r => r.time);
287
+ if (times.length > 0) {
288
+ const avg = times.reduce((a, b) => a + b, 0) / times.length;
289
+ const min = Math.min(...times);
290
+ const max = Math.max(...times);
291
+ console.log('');
292
+ console.log(` ${theme.dim('Min:')} ${min}ms ${theme.dim('Max:')} ${max}ms ${theme.dim('Avg:')} ${avg.toFixed(1)}ms`);
293
+ }
294
+ break;
295
+ }
296
+ case 'dns': {
297
+ const domain = args[1];
298
+ if (!domain) {
299
+ console.log(` ${symbols.warning} ${theme.warning('Usage:')} /net dns <domain>`);
300
+ break;
301
+ }
302
+ console.log(` ${symbols.sparkles} ${theme.gradient(`DNS: ${domain.toUpperCase()}`)}`);
303
+ console.log('');
304
+ const { records, error } = await lookupDns(domain);
305
+ if (error) {
306
+ console.log(` ${symbols.cross} ${theme.error(error)}`);
307
+ break;
308
+ }
309
+ console.log(` ${theme.dim('TYPE'.padEnd(8))}${theme.dim('VALUE')}`);
310
+ console.log(` ${theme.dim('─'.repeat(50))}`);
311
+ for (const record of records) {
312
+ const typeColor = record.type === 'A' ? theme.success :
313
+ record.type === 'AAAA' ? theme.primary :
314
+ record.type === 'MX' ? theme.warning :
315
+ theme.secondary;
316
+ console.log(` ${typeColor(record.type.padEnd(8))}${record.value}`);
317
+ }
318
+ console.log('');
319
+ console.log(` ${theme.dim(`Found: ${records.length} records`)}`);
320
+ break;
321
+ }
322
+ case 'speed': {
323
+ console.log(` ${symbols.sparkles} ${theme.gradient('SPEED TEST')}`);
324
+ console.log('');
325
+ console.log(` ${theme.dim('Testing download speed...')}`);
326
+ console.log(` ${progressBar(0, 100, 30)}`);
327
+ const result = await runSpeedTest((percent) => {
328
+ // Move cursor up and update progress
329
+ process.stdout.write('\x1b[1A\x1b[2K');
330
+ console.log(` ${progressBar(percent, 100, 30)}`);
331
+ });
332
+ // Clear progress line
333
+ process.stdout.write('\x1b[1A\x1b[2K');
334
+ process.stdout.write('\x1b[1A\x1b[2K');
335
+ if ('error' in result) {
336
+ console.log(` ${symbols.cross} ${theme.error(result.error)}`);
337
+ break;
338
+ }
339
+ console.log(` ${symbols.check} ${theme.success('Test complete')}`);
340
+ console.log('');
341
+ console.log(` ${theme.dim('Download:')} ${theme.primary(`${result.downloadSpeed} Mbps`)}`);
342
+ console.log(` ${theme.dim('Latency:')} ${theme.secondary(`${result.latency}ms`)}`);
343
+ console.log(` ${theme.dim('Data:')} ${(result.testSize / 1_000_000).toFixed(1)} MB in ${(result.duration / 1000).toFixed(1)}s`);
344
+ break;
345
+ }
346
+ case 'headers': {
347
+ let url = args[1];
348
+ if (!url) {
349
+ console.log(` ${symbols.warning} ${theme.warning('Usage:')} /net headers <url>`);
350
+ break;
351
+ }
352
+ if (!url.startsWith('http')) {
353
+ url = `https://${url}`;
354
+ }
355
+ console.log(` ${theme.dim('Fetching headers from')} ${theme.primary(url)}...`);
356
+ console.log('');
357
+ const result = await getHeaders(url);
358
+ if (result.error) {
359
+ console.log(` ${symbols.cross} ${theme.error(result.error)}`);
360
+ break;
361
+ }
362
+ const statusColor = result.statusCode >= 200 && result.statusCode < 300 ? theme.success :
363
+ result.statusCode >= 300 && result.statusCode < 400 ? theme.warning :
364
+ theme.error;
365
+ console.log(` ${theme.dim('Status:')} ${statusColor(`${result.statusCode} ${result.statusMessage}`)}`);
366
+ console.log('');
367
+ console.log(` ${theme.dim('Headers:')}`);
368
+ console.log(` ${theme.dim('─'.repeat(50))}`);
369
+ const importantHeaders = [
370
+ 'content-type', 'content-length', 'server', 'cache-control',
371
+ 'x-powered-by', 'x-frame-options', 'strict-transport-security'
372
+ ];
373
+ for (const header of importantHeaders) {
374
+ if (result.headers[header]) {
375
+ const value = Array.isArray(result.headers[header])
376
+ ? result.headers[header].join(', ')
377
+ : result.headers[header];
378
+ console.log(` ${theme.primary(header)}: ${theme.dim(String(value))}`);
379
+ }
380
+ }
381
+ break;
382
+ }
383
+ case 'ports': {
384
+ console.log(` ${symbols.sparkles} ${theme.gradient('COMMON PORTS')}`);
385
+ console.log('');
386
+ console.log(` ${theme.dim('PORT'.padEnd(8))}${theme.dim('SERVICE'.padEnd(18))}${theme.dim('PROTOCOL')}`);
387
+ console.log(` ${theme.dim('─'.repeat(40))}`);
388
+ for (const p of COMMON_PORTS) {
389
+ console.log(` ${theme.primary(p.port.toString().padEnd(8))}` +
390
+ `${theme.secondary(p.service.padEnd(18))}` +
391
+ `${theme.dim(p.protocol)}`);
392
+ }
393
+ break;
394
+ }
395
+ default:
396
+ console.log(` ${symbols.cross} ${theme.error(`Unknown action: ${action}`)}`);
397
+ console.log(` ${theme.dim('Run /net to see available actions')}`);
398
+ }
399
+ console.log('');
400
+ }
401
+ });
402
+ api.log.info('Network Tools plugin activated');
403
+ }
404
+ };
405
+ export default plugin;
406
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,28 @@
1
+ {
2
+ "name": "zammy-plugin-network",
3
+ "version": "1.0.0",
4
+ "description": "Network utilities and diagnostics",
5
+ "type": "module",
6
+ "main": "dist/index.js",
7
+ "types": "dist/index.d.ts",
8
+ "files": ["dist", "zammy-plugin.json", "README.md"],
9
+ "scripts": {
10
+ "build": "tsc",
11
+ "dev": "tsc --watch"
12
+ },
13
+ "keywords": ["zammy-plugin", "zammy", "cli", "network", "ping", "dns", "ip", "speed-test"],
14
+ "author": "Aayush Adhikari",
15
+ "license": "MIT",
16
+ "repository": {
17
+ "type": "git",
18
+ "url": "git+https://github.com/aayushadhikari7/zammy-cli.git",
19
+ "directory": "packages/plugins/network"
20
+ },
21
+ "bugs": {
22
+ "url": "https://github.com/aayushadhikari7/zammy-cli/issues"
23
+ },
24
+ "homepage": "https://github.com/aayushadhikari7/zammy-cli/tree/main/packages/plugins/network#readme",
25
+ "devDependencies": {
26
+ "typescript": "^5.3.0"
27
+ }
28
+ }
@@ -0,0 +1,17 @@
1
+ {
2
+ "name": "zammy-plugin-network",
3
+ "version": "1.0.0",
4
+ "displayName": "Network Tools",
5
+ "description": "Network utilities and diagnostics",
6
+ "author": "Zammy CLI",
7
+ "license": "MIT",
8
+ "main": "./dist/index.js",
9
+ "commands": ["net"],
10
+ "zammy": {
11
+ "minVersion": "1.2.0"
12
+ },
13
+ "permissions": {
14
+ "shell": true,
15
+ "network": true
16
+ }
17
+ }