@erfan_bahramali/tping 1.0.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 (51) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +118 -0
  3. package/dist/crypto/aes-ctr.d.ts +18 -0
  4. package/dist/crypto/aes-ctr.d.ts.map +1 -0
  5. package/dist/crypto/aes-ctr.js +30 -0
  6. package/dist/crypto/aes-ctr.js.map +1 -0
  7. package/dist/index.d.ts +3 -0
  8. package/dist/index.d.ts.map +1 -0
  9. package/dist/index.js +66 -0
  10. package/dist/index.js.map +1 -0
  11. package/dist/lib/checker.d.ts +6 -0
  12. package/dist/lib/checker.d.ts.map +1 -0
  13. package/dist/lib/checker.js +72 -0
  14. package/dist/lib/checker.js.map +1 -0
  15. package/dist/lib/parser.d.ts +7 -0
  16. package/dist/lib/parser.d.ts.map +1 -0
  17. package/dist/lib/parser.js +96 -0
  18. package/dist/lib/parser.js.map +1 -0
  19. package/dist/lib/ping.d.ts +10 -0
  20. package/dist/lib/ping.d.ts.map +1 -0
  21. package/dist/lib/ping.js +59 -0
  22. package/dist/lib/ping.js.map +1 -0
  23. package/dist/mtproto/connection.d.ts +59 -0
  24. package/dist/mtproto/connection.d.ts.map +1 -0
  25. package/dist/mtproto/connection.js +198 -0
  26. package/dist/mtproto/connection.js.map +1 -0
  27. package/dist/mtproto/fake-tls.d.ts +56 -0
  28. package/dist/mtproto/fake-tls.d.ts.map +1 -0
  29. package/dist/mtproto/fake-tls.js +175 -0
  30. package/dist/mtproto/fake-tls.js.map +1 -0
  31. package/dist/mtproto/messages.d.ts +48 -0
  32. package/dist/mtproto/messages.d.ts.map +1 -0
  33. package/dist/mtproto/messages.js +104 -0
  34. package/dist/mtproto/messages.js.map +1 -0
  35. package/dist/mtproto/obfuscation.d.ts +26 -0
  36. package/dist/mtproto/obfuscation.d.ts.map +1 -0
  37. package/dist/mtproto/obfuscation.js +78 -0
  38. package/dist/mtproto/obfuscation.js.map +1 -0
  39. package/dist/mtproto/socks5.d.ts +36 -0
  40. package/dist/mtproto/socks5.d.ts.map +1 -0
  41. package/dist/mtproto/socks5.js +148 -0
  42. package/dist/mtproto/socks5.js.map +1 -0
  43. package/dist/types/index.d.ts +49 -0
  44. package/dist/types/index.d.ts.map +1 -0
  45. package/dist/types/index.js +2 -0
  46. package/dist/types/index.js.map +1 -0
  47. package/dist/utils/format.d.ts +22 -0
  48. package/dist/utils/format.d.ts.map +1 -0
  49. package/dist/utils/format.js +131 -0
  50. package/dist/utils/format.js.map +1 -0
  51. package/package.json +57 -0
@@ -0,0 +1,78 @@
1
+ import { randomBytes, createHash } from 'crypto';
2
+ import { AESCTR } from '../crypto/aes-ctr.js';
3
+ /**
4
+ * Protocol tags for MTProto transports.
5
+ */
6
+ export const PROTO_TAG = {
7
+ ABRIDGED: Buffer.from([0xef, 0xef, 0xef, 0xef]),
8
+ INTERMEDIATE: Buffer.from([0xee, 0xee, 0xee, 0xee]),
9
+ SECURE: Buffer.from([0xdd, 0xdd, 0xdd, 0xdd]),
10
+ };
11
+ /**
12
+ * Reserved byte sequences that must be avoided in random nonce.
13
+ */
14
+ const RESERVED_KEYWORDS = [
15
+ Buffer.from([0x50, 0x56, 0x72, 0x47]), // PVrG
16
+ Buffer.from([0x47, 0x45, 0x54, 0x20]), // GET
17
+ Buffer.from([0x50, 0x4f, 0x53, 0x54]), // POST
18
+ Buffer.from([0xee, 0xee, 0xee, 0xee]), // eeee
19
+ ];
20
+ /**
21
+ * Initialize MTProto obfuscation layer.
22
+ * Generates random 64-byte header and derives encryption keys.
23
+ *
24
+ * @param secret - 16-byte secret from proxy
25
+ * @param dcId - Telegram datacenter ID
26
+ * @param protocolTag - Transport protocol tag (default: INTERMEDIATE)
27
+ * @returns Header buffer and encryptor/decryptor ciphers
28
+ */
29
+ export function initObfuscation(secret, dcId, protocolTag = PROTO_TAG.INTERMEDIATE) {
30
+ if (secret.length !== 16) {
31
+ throw new Error('Secret must be 16 bytes');
32
+ }
33
+ // Generate 64 random bytes, avoiding reserved patterns
34
+ let random;
35
+ while (true) {
36
+ random = randomBytes(64);
37
+ // Check if first byte is not 0xef
38
+ if (random[0] === 0xef)
39
+ continue;
40
+ // Check if bytes 4-8 are not all zeros
41
+ if (random.slice(4, 8).equals(Buffer.alloc(4)))
42
+ continue;
43
+ // Check if first 4 bytes don't match reserved keywords
44
+ const isReserved = RESERVED_KEYWORDS.some((keyword) => keyword.equals(random.slice(0, 4)));
45
+ if (isReserved)
46
+ continue;
47
+ break;
48
+ }
49
+ // Convert to mutable buffer
50
+ const header = Buffer.from(random);
51
+ // Reverse bytes 8-56 for decryption key derivation
52
+ const reversed = Buffer.from(header.slice(8, 56)).reverse();
53
+ // Derive encryption key and IV
54
+ const encryptKey = createHash('sha256')
55
+ .update(Buffer.concat([header.slice(8, 40), secret]))
56
+ .digest(); // 32 bytes
57
+ const encryptIv = header.slice(40, 56); // 16 bytes
58
+ // Derive decryption key and IV
59
+ const decryptKey = createHash('sha256')
60
+ .update(Buffer.concat([reversed.slice(0, 32), secret]))
61
+ .digest();
62
+ const decryptIv = reversed.slice(32, 48);
63
+ // Create AES-256-CTR ciphers
64
+ const encryptor = new AESCTR(encryptKey, encryptIv);
65
+ const decryptor = new AESCTR(decryptKey, decryptIv);
66
+ // Encode protocol tag and DC ID at positions 56-62
67
+ protocolTag.copy(header, 56);
68
+ // DC ID as signed 16-bit little-endian
69
+ header.writeInt16LE(dcId, 60);
70
+ // Encrypt the tail (tag + dc ID) in place. The cipher stream position must
71
+ // be 56 here: the proxy decrypts the whole 64-byte frame from position 0 and
72
+ // expects the tag to appear at bytes 56-60. Encrypting the whole header and
73
+ // taking the tail (as official clients do) yields exactly that.
74
+ const encryptedTail = encryptor.encrypt(header).subarray(56);
75
+ encryptedTail.copy(header, 56);
76
+ return { header, encryptor, decryptor };
77
+ }
78
+ //# sourceMappingURL=obfuscation.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"obfuscation.js","sourceRoot":"","sources":["../../src/mtproto/obfuscation.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,36 @@
1
+ export interface SOCKS5Options {
2
+ host: string;
3
+ port: number;
4
+ username?: string;
5
+ password?: string;
6
+ timeout?: number;
7
+ }
8
+ /**
9
+ * Simple SOCKS5 client for testing proxy connectivity.
10
+ * Connects to Telegram servers through SOCKS5 proxy.
11
+ */
12
+ export declare class SOCKS5Client {
13
+ private options;
14
+ private socket;
15
+ private connected;
16
+ constructor(options: SOCKS5Options);
17
+ /**
18
+ * Connect to SOCKS5 proxy and authenticate.
19
+ */
20
+ connect(): Promise<void>;
21
+ /**
22
+ * Authenticate with username/password.
23
+ */
24
+ private authenticate;
25
+ /**
26
+ * Test connection by connecting to Telegram server through SOCKS5.
27
+ *
28
+ * @returns True if connection successful
29
+ */
30
+ testConnection(): Promise<boolean>;
31
+ /**
32
+ * Close the connection.
33
+ */
34
+ close(): void;
35
+ }
36
+ //# sourceMappingURL=socks5.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"socks5.d.ts","sourceRoot":"","sources":["../../src/mtproto/socks5.ts"],"names":[],"mappings":"AAEA,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED;;;GAGG;AACH,qBAAa,YAAY;IAIX,OAAO,CAAC,OAAO;IAH3B,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,SAAS,CAAkB;gBAEf,OAAO,EAAE,aAAa;IAI1C;;OAEG;IACG,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;IA4D9B;;OAEG;YACW,YAAY;IA2B1B;;;;OAIG;IACG,cAAc,IAAI,OAAO,CAAC,OAAO,CAAC;IA0CxC;;OAEG;IACH,KAAK,IAAI,IAAI;CAMd"}
@@ -0,0 +1,148 @@
1
+ import { Socket } from 'net';
2
+ /**
3
+ * Simple SOCKS5 client for testing proxy connectivity.
4
+ * Connects to Telegram servers through SOCKS5 proxy.
5
+ */
6
+ export class SOCKS5Client {
7
+ options;
8
+ socket;
9
+ connected = false;
10
+ constructor(options) {
11
+ this.options = options;
12
+ this.socket = new Socket();
13
+ }
14
+ /**
15
+ * Connect to SOCKS5 proxy and authenticate.
16
+ */
17
+ async connect() {
18
+ const { host, port, username, password, timeout = 10000 } = this.options;
19
+ return new Promise((resolve, reject) => {
20
+ const timer = setTimeout(() => {
21
+ this.socket.destroy();
22
+ reject(new Error('Connection timeout'));
23
+ }, timeout);
24
+ this.socket.on('error', (err) => {
25
+ clearTimeout(timer);
26
+ reject(err);
27
+ });
28
+ this.socket.connect(port, host, () => {
29
+ clearTimeout(timer);
30
+ // SOCKS5 handshake
31
+ const authMethods = username && password ? [0x00, 0x02] : [0x00]; // No auth or Username/Password
32
+ const handshake = Buffer.from([
33
+ 0x05, // SOCKS version 5
34
+ authMethods.length, // Number of methods
35
+ ...authMethods,
36
+ ]);
37
+ this.socket.write(handshake);
38
+ this.socket.once('data', async (data) => {
39
+ try {
40
+ // Check SOCKS5 response
41
+ if (data[0] !== 0x05) {
42
+ throw new Error('Invalid SOCKS5 response');
43
+ }
44
+ const authMethod = data[1];
45
+ // If username/password auth required
46
+ if (authMethod === 0x02) {
47
+ if (!username || !password) {
48
+ throw new Error('Authentication required but not provided');
49
+ }
50
+ await this.authenticate(username, password);
51
+ }
52
+ else if (authMethod === 0x00) {
53
+ // No authentication required
54
+ this.connected = true;
55
+ }
56
+ else {
57
+ throw new Error('Unsupported authentication method');
58
+ }
59
+ resolve();
60
+ }
61
+ catch (err) {
62
+ this.socket.destroy();
63
+ reject(err);
64
+ }
65
+ });
66
+ });
67
+ });
68
+ }
69
+ /**
70
+ * Authenticate with username/password.
71
+ */
72
+ async authenticate(username, password) {
73
+ return new Promise((resolve, reject) => {
74
+ const userBuf = Buffer.from(username, 'utf8');
75
+ const passBuf = Buffer.from(password, 'utf8');
76
+ const authPacket = Buffer.concat([
77
+ Buffer.from([0x01]), // Auth version
78
+ Buffer.from([userBuf.length]),
79
+ userBuf,
80
+ Buffer.from([passBuf.length]),
81
+ passBuf,
82
+ ]);
83
+ this.socket.write(authPacket);
84
+ this.socket.once('data', (data) => {
85
+ if (data[0] === 0x01 && data[1] === 0x00) {
86
+ this.connected = true;
87
+ resolve();
88
+ }
89
+ else {
90
+ this.socket.destroy();
91
+ reject(new Error('Authentication failed'));
92
+ }
93
+ });
94
+ });
95
+ }
96
+ /**
97
+ * Test connection by connecting to Telegram server through SOCKS5.
98
+ *
99
+ * @returns True if connection successful
100
+ */
101
+ async testConnection() {
102
+ if (!this.connected) {
103
+ throw new Error('Not connected to SOCKS5 proxy');
104
+ }
105
+ return new Promise((resolve) => {
106
+ // Connect to Telegram server
107
+ const telegramHost = '149.154.167.50'; // DC 2
108
+ const telegramPort = 443;
109
+ const hostBuf = Buffer.from(telegramHost, 'utf8');
110
+ const connectCmd = Buffer.concat([
111
+ Buffer.from([
112
+ 0x05, // SOCKS version
113
+ 0x01, // Connect command
114
+ 0x00, // Reserved
115
+ 0x03, // Domain name
116
+ hostBuf.length, // Domain length
117
+ ]),
118
+ hostBuf,
119
+ Buffer.from([
120
+ (telegramPort >> 8) & 0xff, // Port high byte
121
+ telegramPort & 0xff, // Port low byte
122
+ ]),
123
+ ]);
124
+ this.socket.write(connectCmd);
125
+ this.socket.once('data', (data) => {
126
+ // Check SOCKS5 response
127
+ if (data[0] === 0x05 && data[1] === 0x00) {
128
+ // Success
129
+ resolve(true);
130
+ }
131
+ else {
132
+ resolve(false);
133
+ }
134
+ });
135
+ setTimeout(() => resolve(false), 5000);
136
+ });
137
+ }
138
+ /**
139
+ * Close the connection.
140
+ */
141
+ close() {
142
+ if (this.socket) {
143
+ this.socket.destroy();
144
+ this.connected = false;
145
+ }
146
+ }
147
+ }
148
+ //# sourceMappingURL=socks5.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"socks5.js","sourceRoot":"","sources":["../../src/mtproto/socks5.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,49 @@
1
+ /**
2
+ * Type of Telegram proxy.
3
+ */
4
+ export type ProxyType = 'mtproto' | 'socks5' | 'http';
5
+ /**
6
+ * Base proxy interface.
7
+ */
8
+ export interface BaseProxy {
9
+ readonly type: ProxyType;
10
+ readonly server: string;
11
+ readonly port: number;
12
+ }
13
+ /**
14
+ * MTProto proxy configuration.
15
+ */
16
+ export interface MTProtoProxy extends BaseProxy {
17
+ readonly type: 'mtproto';
18
+ readonly secret: string;
19
+ }
20
+ /**
21
+ * SOCKS5 proxy configuration.
22
+ */
23
+ export interface SOCKS5Proxy extends BaseProxy {
24
+ readonly type: 'socks5';
25
+ readonly username?: string;
26
+ readonly password?: string;
27
+ }
28
+ /**
29
+ * HTTP proxy configuration.
30
+ */
31
+ export interface HTTPProxy extends BaseProxy {
32
+ readonly type: 'http';
33
+ readonly username?: string;
34
+ readonly password?: string;
35
+ }
36
+ /**
37
+ * Union type for all proxy types.
38
+ */
39
+ export type TelegramProxy = MTProtoProxy | SOCKS5Proxy | HTTPProxy;
40
+ /**
41
+ * Result of a proxy check operation.
42
+ */
43
+ export interface CheckResult {
44
+ readonly proxy: TelegramProxy;
45
+ readonly success: boolean;
46
+ readonly latency?: number;
47
+ readonly error?: string;
48
+ }
49
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/types/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,MAAM,MAAM,SAAS,GAAG,SAAS,GAAG,QAAQ,GAAG,MAAM,CAAC;AAEtD;;GAEG;AACH,MAAM,WAAW,SAAS;IACtB,QAAQ,CAAC,IAAI,EAAE,SAAS,CAAC;IACzB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;CACzB;AAED;;GAEG;AACH,MAAM,WAAW,YAAa,SAAQ,SAAS;IAC3C,QAAQ,CAAC,IAAI,EAAE,SAAS,CAAC;IACzB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;CAC3B;AAED;;GAEG;AACH,MAAM,WAAW,WAAY,SAAQ,SAAS;IAC1C,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAC;IACxB,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;CAC9B;AAED;;GAEG;AACH,MAAM,WAAW,SAAU,SAAQ,SAAS;IACxC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;CAC9B;AAED;;GAEG;AACH,MAAM,MAAM,aAAa,GAAG,YAAY,GAAG,WAAW,GAAG,SAAS,CAAC;AAEnE;;GAEG;AACH,MAAM,WAAW,WAAW;IACxB,QAAQ,CAAC,KAAK,EAAE,aAAa,CAAC;IAC9B,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;IAC1B,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC;CAC3B"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/types/index.ts"],"names":[],"mappings":""}
@@ -0,0 +1,22 @@
1
+ import type { TelegramProxy, CheckResult } from '../types/index.js';
2
+ /**
3
+ * Format latency with color.
4
+ */
5
+ export declare const formatLatency: (latency: number) => string;
6
+ /**
7
+ * Format proxy type with color.
8
+ */
9
+ export declare const formatProxyType: (type: string) => string;
10
+ /**
11
+ * Format proxy address.
12
+ */
13
+ export declare const formatProxyAddress: (proxy: TelegramProxy) => string;
14
+ /**
15
+ * Print live result with in-place update.
16
+ */
17
+ export declare const printPingResult: (proxyIndex: number, proxies: readonly TelegramProxy[], sequence: number, status: "testing" | "done", result?: CheckResult) => void;
18
+ /**
19
+ * Print statistics table for all proxies.
20
+ */
21
+ export declare const printPingStatistics: (proxies: readonly TelegramProxy[], allResults: readonly (readonly CheckResult[])[]) => void;
22
+ //# sourceMappingURL=format.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"format.d.ts","sourceRoot":"","sources":["../../src/utils/format.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAEpE;;GAEG;AACH,eAAO,MAAM,aAAa,GAAI,SAAS,MAAM,KAAG,MAQ/C,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,eAAe,GAAI,MAAM,MAAM,KAAG,MAW9C,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,kBAAkB,GAAI,OAAO,aAAa,KAAG,MAGzD,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,eAAe,GAAI,YAAY,MAAM,EAAE,SAAS,SAAS,aAAa,EAAE,EAAE,UAAU,MAAM,EAAE,QAAQ,SAAS,GAAG,MAAM,EAAE,SAAS,WAAW,KAAG,IA0B3J,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,mBAAmB,GAAI,SAAS,SAAS,aAAa,EAAE,EAAE,YAAY,SAAS,CAAC,SAAS,WAAW,EAAE,CAAC,EAAE,KAAG,IAgExH,CAAC"}
@@ -0,0 +1,131 @@
1
+ import chalk from 'chalk';
2
+ import Table from 'cli-table3';
3
+ import readline from 'readline';
4
+ /**
5
+ * Format latency with color.
6
+ */
7
+ export const formatLatency = (latency) => {
8
+ if (latency < 100) {
9
+ return chalk.green(`${latency}ms`);
10
+ }
11
+ else if (latency < 300) {
12
+ return chalk.yellow(`${latency}ms`);
13
+ }
14
+ else {
15
+ return chalk.red(`${latency}ms`);
16
+ }
17
+ };
18
+ /**
19
+ * Format proxy type with color.
20
+ */
21
+ export const formatProxyType = (type) => {
22
+ switch (type) {
23
+ case 'mtproto':
24
+ return chalk.cyan('MTProto');
25
+ case 'socks5':
26
+ return chalk.magenta('SOCKS5');
27
+ case 'http':
28
+ return chalk.blue('HTTP');
29
+ default:
30
+ return chalk.dim(type);
31
+ }
32
+ };
33
+ /**
34
+ * Format proxy address.
35
+ */
36
+ export const formatProxyAddress = (proxy) => {
37
+ const server = proxy.server.length > 30 ? proxy.server.substring(0, 27) + '...' : proxy.server;
38
+ return `${server}:${proxy.port}`;
39
+ };
40
+ /**
41
+ * Print live result with in-place update.
42
+ */
43
+ export const printPingResult = (proxyIndex, proxies, sequence, status, result) => {
44
+ const proxy = result?.proxy || proxies[proxyIndex];
45
+ const proxyLabel = proxies.length > 1 ? `[${proxyIndex + 1}] ${formatProxyAddress(proxy)}` : formatProxyAddress(proxy);
46
+ const typeStr = formatProxyType(proxy.type);
47
+ const seqStr = chalk.gray(`#${sequence.toString()}`);
48
+ let line = '';
49
+ if (status === 'testing') {
50
+ const icon = chalk.cyan('⏳');
51
+ line = `${icon} ${seqStr} ${chalk.gray('│')} ${chalk.white(proxyLabel.padEnd(35))} ${chalk.gray('│')} ${typeStr.padEnd(17)} ${chalk.gray('│')} ${chalk.cyan('testing...')}`;
52
+ }
53
+ else if (result) {
54
+ if (result.success && result.latency !== undefined) {
55
+ const icon = chalk.green.bold('✅');
56
+ const latencyStr = formatLatency(result.latency);
57
+ line = `${icon} ${seqStr} ${chalk.gray('│')} ${chalk.white(proxyLabel.padEnd(35))} ${chalk.gray('│')} ${typeStr.padEnd(17)} ${chalk.gray('│')} ${latencyStr}`;
58
+ }
59
+ else {
60
+ const icon = chalk.red.bold('❌');
61
+ const errorStr = result.error || 'timeout';
62
+ line = `${icon} ${seqStr} ${chalk.gray('│')} ${chalk.white(proxyLabel.padEnd(35))} ${chalk.gray('│')} ${typeStr.padEnd(17)} ${chalk.gray('│')} ${chalk.red(errorStr)}`;
63
+ }
64
+ }
65
+ // Move cursor to start, clear line, and write new content
66
+ readline.clearLine(process.stdout, 0);
67
+ readline.cursorTo(process.stdout, 0);
68
+ process.stdout.write(line);
69
+ };
70
+ /**
71
+ * Print statistics table for all proxies.
72
+ */
73
+ export const printPingStatistics = (proxies, allResults) => {
74
+ console.log();
75
+ console.log(chalk.gray('━'.repeat(50)));
76
+ console.log();
77
+ console.log(chalk.bold.cyan('📊 Statistics'));
78
+ console.log();
79
+ const table = new Table({
80
+ head: [
81
+ chalk.bold('Proxy'),
82
+ chalk.bold('Type'),
83
+ chalk.bold('Sent'),
84
+ chalk.bold('Recv'),
85
+ chalk.bold('Loss'),
86
+ chalk.bold('Min'),
87
+ chalk.bold('Avg'),
88
+ chalk.bold('Max')
89
+ ],
90
+ style: {
91
+ head: ['cyan'],
92
+ border: ['gray']
93
+ }
94
+ });
95
+ proxies.forEach((proxy, index) => {
96
+ const results = allResults[index];
97
+ const proxyStr = formatProxyAddress(proxy);
98
+ const typeStr = formatProxyType(proxy.type);
99
+ const transmitted = results.length;
100
+ const received = results.filter((r) => r.success).length;
101
+ const loss = transmitted > 0 ? Math.round(((transmitted - received) / transmitted) * 100) : 0;
102
+ let minStr = '-';
103
+ let avgStr = '-';
104
+ let maxStr = '-';
105
+ if (received > 0) {
106
+ const latencies = results.filter((r) => r.success && r.latency !== undefined).map((r) => r.latency);
107
+ if (latencies.length > 0) {
108
+ const min = Math.min(...latencies);
109
+ const max = Math.max(...latencies);
110
+ const avg = Math.round(latencies.reduce((a, b) => a + b, 0) / latencies.length);
111
+ minStr = formatLatency(min);
112
+ avgStr = formatLatency(avg);
113
+ maxStr = formatLatency(max);
114
+ }
115
+ }
116
+ const lossColor = loss === 0 ? chalk.green : chalk.red;
117
+ table.push([
118
+ proxyStr,
119
+ typeStr,
120
+ chalk.white(transmitted),
121
+ chalk.green(received),
122
+ lossColor(`${loss}%`),
123
+ minStr,
124
+ avgStr,
125
+ maxStr
126
+ ]);
127
+ });
128
+ console.log(table.toString());
129
+ console.log();
130
+ };
131
+ //# sourceMappingURL=format.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"format.js","sourceRoot":"","sources":["../../src/utils/format.ts"],"names":[],"mappings":"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"}
package/package.json ADDED
@@ -0,0 +1,57 @@
1
+ {
2
+ "name": "@erfan_bahramali/tping",
3
+ "version": "1.0.0",
4
+ "description": "Ping for Telegram Proxies - Test connectivity to Telegram Proxies (MTProto, SOCKS5)",
5
+ "keywords": [
6
+ "telegram",
7
+ "mtproto",
8
+ "proxy",
9
+ "checker",
10
+ "cli",
11
+ "validator",
12
+ "ping",
13
+ "connection-test",
14
+ "network-tool"
15
+ ],
16
+ "author": "Erfan Bahramali",
17
+ "license": "MIT",
18
+ "repository": {
19
+ "type": "git",
20
+ "url": "git+https://github.com/ErfanBahramali/tping.git"
21
+ },
22
+ "bugs": {
23
+ "url": "https://github.com/ErfanBahramali/tping/issues"
24
+ },
25
+ "homepage": "https://github.com/ErfanBahramali/tping#readme",
26
+ "engines": {
27
+ "node": ">=18.0.0"
28
+ },
29
+ "type": "module",
30
+ "main": "./dist/index.js",
31
+ "types": "./dist/index.d.ts",
32
+ "bin": {
33
+ "tping": "dist/index.js"
34
+ },
35
+ "scripts": {
36
+ "dev": "bun src/index.ts",
37
+ "clean": "bun run rm -rf dist",
38
+ "prebuild": "bun run clean",
39
+ "build": "bun tsc",
40
+ "prepublishOnly": "bun run build"
41
+ },
42
+ "files": [
43
+ "dist",
44
+ "README.md",
45
+ "LICENSE"
46
+ ],
47
+ "dependencies": {
48
+ "chalk": "^5.4.1",
49
+ "cli-table3": "^0.6.5",
50
+ "commander": "^14.0.3"
51
+ },
52
+ "devDependencies": {
53
+ "@types/node": "^22.10.5",
54
+ "bun-types": "^1.4.0",
55
+ "typescript": "^5.9.3"
56
+ }
57
+ }