@cyberdrk/tg 0.1.1

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 (91) hide show
  1. package/README.md +123 -0
  2. package/SKILL.md +110 -0
  3. package/dist/auth.d.ts +4 -0
  4. package/dist/auth.d.ts.map +1 -0
  5. package/dist/auth.js +61 -0
  6. package/dist/auth.js.map +1 -0
  7. package/dist/client.d.ts +63 -0
  8. package/dist/client.d.ts.map +1 -0
  9. package/dist/client.js +396 -0
  10. package/dist/client.js.map +1 -0
  11. package/dist/commands/auth.d.ts +3 -0
  12. package/dist/commands/auth.d.ts.map +1 -0
  13. package/dist/commands/auth.js +21 -0
  14. package/dist/commands/auth.js.map +1 -0
  15. package/dist/commands/chats.d.ts +3 -0
  16. package/dist/commands/chats.d.ts.map +1 -0
  17. package/dist/commands/chats.js +42 -0
  18. package/dist/commands/chats.js.map +1 -0
  19. package/dist/commands/check.d.ts +3 -0
  20. package/dist/commands/check.d.ts.map +1 -0
  21. package/dist/commands/check.js +28 -0
  22. package/dist/commands/check.js.map +1 -0
  23. package/dist/commands/contact.d.ts +3 -0
  24. package/dist/commands/contact.d.ts.map +1 -0
  25. package/dist/commands/contact.js +38 -0
  26. package/dist/commands/contact.js.map +1 -0
  27. package/dist/commands/groups.d.ts +3 -0
  28. package/dist/commands/groups.d.ts.map +1 -0
  29. package/dist/commands/groups.js +45 -0
  30. package/dist/commands/groups.js.map +1 -0
  31. package/dist/commands/inbox.d.ts +3 -0
  32. package/dist/commands/inbox.d.ts.map +1 -0
  33. package/dist/commands/inbox.js +42 -0
  34. package/dist/commands/inbox.js.map +1 -0
  35. package/dist/commands/index.d.ts +14 -0
  36. package/dist/commands/index.d.ts.map +1 -0
  37. package/dist/commands/index.js +14 -0
  38. package/dist/commands/index.js.map +1 -0
  39. package/dist/commands/members.d.ts +4 -0
  40. package/dist/commands/members.d.ts.map +1 -0
  41. package/dist/commands/members.js +73 -0
  42. package/dist/commands/members.js.map +1 -0
  43. package/dist/commands/read.d.ts +3 -0
  44. package/dist/commands/read.d.ts.map +1 -0
  45. package/dist/commands/read.js +69 -0
  46. package/dist/commands/read.js.map +1 -0
  47. package/dist/commands/reply.d.ts +3 -0
  48. package/dist/commands/reply.d.ts.map +1 -0
  49. package/dist/commands/reply.js +37 -0
  50. package/dist/commands/reply.js.map +1 -0
  51. package/dist/commands/search.d.ts +3 -0
  52. package/dist/commands/search.d.ts.map +1 -0
  53. package/dist/commands/search.js +53 -0
  54. package/dist/commands/search.js.map +1 -0
  55. package/dist/commands/send.d.ts +3 -0
  56. package/dist/commands/send.d.ts.map +1 -0
  57. package/dist/commands/send.js +35 -0
  58. package/dist/commands/send.js.map +1 -0
  59. package/dist/commands/sync.d.ts +3 -0
  60. package/dist/commands/sync.d.ts.map +1 -0
  61. package/dist/commands/sync.js +89 -0
  62. package/dist/commands/sync.js.map +1 -0
  63. package/dist/commands/whoami.d.ts +3 -0
  64. package/dist/commands/whoami.d.ts.map +1 -0
  65. package/dist/commands/whoami.js +40 -0
  66. package/dist/commands/whoami.js.map +1 -0
  67. package/dist/config.d.ts +18 -0
  68. package/dist/config.d.ts.map +1 -0
  69. package/dist/config.js +106 -0
  70. package/dist/config.js.map +1 -0
  71. package/dist/formatters/index.d.ts +10 -0
  72. package/dist/formatters/index.d.ts.map +1 -0
  73. package/dist/formatters/index.js +11 -0
  74. package/dist/formatters/index.js.map +1 -0
  75. package/dist/formatters/json.d.ts +2 -0
  76. package/dist/formatters/json.d.ts.map +1 -0
  77. package/dist/formatters/json.js +4 -0
  78. package/dist/formatters/json.js.map +1 -0
  79. package/dist/formatters/markdown.d.ts +21 -0
  80. package/dist/formatters/markdown.d.ts.map +1 -0
  81. package/dist/formatters/markdown.js +87 -0
  82. package/dist/formatters/markdown.js.map +1 -0
  83. package/dist/formatters/plain.d.ts +27 -0
  84. package/dist/formatters/plain.d.ts.map +1 -0
  85. package/dist/formatters/plain.js +121 -0
  86. package/dist/formatters/plain.js.map +1 -0
  87. package/dist/index.d.ts +3 -0
  88. package/dist/index.d.ts.map +1 -0
  89. package/dist/index.js +29 -0
  90. package/dist/index.js.map +1 -0
  91. package/package.json +52 -0
@@ -0,0 +1,40 @@
1
+ import { Command } from 'commander';
2
+ import { getClient, getMe, disconnectClient } from '../client.js';
3
+ import { formatJson } from '../formatters/json.js';
4
+ import { formatUser } from '../formatters/plain.js';
5
+ import ora from 'ora';
6
+ export const whoamiCommand = new Command('whoami')
7
+ .description('Show logged-in account information')
8
+ .option('--json', 'Output as JSON')
9
+ .action(async (options) => {
10
+ const spinner = ora('Fetching account info...').start();
11
+ try {
12
+ const client = await getClient();
13
+ const me = await getMe(client);
14
+ spinner.stop();
15
+ if (options.json) {
16
+ console.log(formatJson({
17
+ id: me.id.toString(),
18
+ firstName: me.firstName,
19
+ lastName: me.lastName,
20
+ username: me.username,
21
+ phone: me.phone,
22
+ }));
23
+ }
24
+ else {
25
+ console.log(formatUser({
26
+ firstName: me.firstName ?? undefined,
27
+ lastName: me.lastName ?? undefined,
28
+ username: me.username ?? undefined,
29
+ phone: me.phone ?? undefined,
30
+ }));
31
+ }
32
+ await disconnectClient();
33
+ }
34
+ catch (error) {
35
+ spinner.fail('Failed to get account info');
36
+ console.error(error instanceof Error ? error.message : error);
37
+ process.exit(1);
38
+ }
39
+ });
40
+ //# sourceMappingURL=whoami.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"whoami.js","sourceRoot":"","sources":["../../src/commands/whoami.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,SAAS,EAAE,KAAK,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC;AAClE,OAAO,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AACnD,OAAO,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AACpD,OAAO,GAAG,MAAM,KAAK,CAAC;AAEtB,MAAM,CAAC,MAAM,aAAa,GAAG,IAAI,OAAO,CAAC,QAAQ,CAAC;KAC/C,WAAW,CAAC,oCAAoC,CAAC;KACjD,MAAM,CAAC,QAAQ,EAAE,gBAAgB,CAAC;KAClC,MAAM,CAAC,KAAK,EAAE,OAAO,EAAE,EAAE;IACxB,MAAM,OAAO,GAAG,GAAG,CAAC,0BAA0B,CAAC,CAAC,KAAK,EAAE,CAAC;IAExD,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,MAAM,SAAS,EAAE,CAAC;QACjC,MAAM,EAAE,GAAG,MAAM,KAAK,CAAC,MAAM,CAAC,CAAC;QAE/B,OAAO,CAAC,IAAI,EAAE,CAAC;QAEf,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC;YACjB,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC;gBACrB,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,QAAQ,EAAE;gBACpB,SAAS,EAAE,EAAE,CAAC,SAAS;gBACvB,QAAQ,EAAE,EAAE,CAAC,QAAQ;gBACrB,QAAQ,EAAE,EAAE,CAAC,QAAQ;gBACrB,KAAK,EAAE,EAAE,CAAC,KAAK;aAChB,CAAC,CAAC,CAAC;QACN,CAAC;aAAM,CAAC;YACN,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC;gBACrB,SAAS,EAAE,EAAE,CAAC,SAAS,IAAI,SAAS;gBACpC,QAAQ,EAAE,EAAE,CAAC,QAAQ,IAAI,SAAS;gBAClC,QAAQ,EAAE,EAAE,CAAC,QAAQ,IAAI,SAAS;gBAClC,KAAK,EAAE,EAAE,CAAC,KAAK,IAAI,SAAS;aAC7B,CAAC,CAAC,CAAC;QACN,CAAC;QAED,MAAM,gBAAgB,EAAE,CAAC;IAC3B,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,IAAI,CAAC,4BAA4B,CAAC,CAAC;QAC3C,OAAO,CAAC,KAAK,CAAC,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;QAC9D,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC,CAAC,CAAC"}
@@ -0,0 +1,18 @@
1
+ export interface TgConfig {
2
+ apiId?: number;
3
+ apiHash?: string;
4
+ sessionString?: string;
5
+ defaultFormat?: 'plain' | 'json' | 'markdown';
6
+ }
7
+ export declare function loadConfig(warn?: (message: string) => void): TgConfig;
8
+ export declare function saveConfig(config: Partial<TgConfig>): void;
9
+ export declare function getConfigPath(): string;
10
+ export declare function isConfigured(): boolean;
11
+ export declare function setCredentials(apiId: number, apiHash: string): void;
12
+ export declare function getCredentials(): {
13
+ apiId: number;
14
+ apiHash: string;
15
+ };
16
+ export declare function setSessionString(session: string): void;
17
+ export declare function getSessionString(): string | undefined;
18
+ //# sourceMappingURL=config.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAKA,MAAM,WAAW,QAAQ;IACvB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,aAAa,CAAC,EAAE,OAAO,GAAG,MAAM,GAAG,UAAU,CAAC;CAC/C;AAwCD,wBAAgB,UAAU,CAAC,IAAI,GAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAmB,GAAG,QAAQ,CAkBnF;AAED,wBAAgB,UAAU,CAAC,MAAM,EAAE,OAAO,CAAC,QAAQ,CAAC,GAAG,IAAI,CAgC1D;AAED,wBAAgB,aAAa,IAAI,MAAM,CAEtC;AAED,wBAAgB,YAAY,IAAI,OAAO,CAGtC;AAED,wBAAgB,cAAc,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,IAAI,CAEnE;AAED,wBAAgB,cAAc,IAAI;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CAMnE;AAED,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAEtD;AAED,wBAAgB,gBAAgB,IAAI,MAAM,GAAG,SAAS,CAGrD"}
package/dist/config.js ADDED
@@ -0,0 +1,106 @@
1
+ import { existsSync, mkdirSync, readFileSync, writeFileSync } from 'node:fs';
2
+ import { homedir } from 'node:os';
3
+ import { dirname, join } from 'node:path';
4
+ import JSON5 from 'json5';
5
+ const DEFAULT_CONFIG = {
6
+ defaultFormat: 'plain',
7
+ };
8
+ // Cache loaded config to avoid repeated file I/O
9
+ let cachedConfig = null;
10
+ let cachedConfigTime = 0;
11
+ const CONFIG_CACHE_TTL_MS = 1000; // 1 second cache
12
+ function getGlobalConfigPath() {
13
+ return join(homedir(), '.config', 'tg', 'config.json5');
14
+ }
15
+ function isPlainObject(value) {
16
+ return typeof value === 'object' && value !== null && !Array.isArray(value);
17
+ }
18
+ function readConfigFile(path, warn) {
19
+ if (!existsSync(path)) {
20
+ return {};
21
+ }
22
+ try {
23
+ const raw = readFileSync(path, 'utf8');
24
+ const parsed = JSON5.parse(raw);
25
+ // Validate that parsed result is a plain object
26
+ if (!isPlainObject(parsed)) {
27
+ warn(`Config at ${path} must be an object, got ${typeof parsed}`);
28
+ return {};
29
+ }
30
+ return parsed;
31
+ }
32
+ catch (error) {
33
+ warn(`Failed to parse config at ${path}: ${error instanceof Error ? error.message : String(error)}`);
34
+ return {};
35
+ }
36
+ }
37
+ export function loadConfig(warn = console.warn) {
38
+ // Return cached config if still valid
39
+ const now = Date.now();
40
+ if (cachedConfig && (now - cachedConfigTime) < CONFIG_CACHE_TTL_MS) {
41
+ return cachedConfig;
42
+ }
43
+ const globalPath = getGlobalConfigPath();
44
+ // Only load from global config - local config disabled for security
45
+ // (prevents attack where malicious .tgrc.json5 overrides credentials)
46
+ cachedConfig = {
47
+ ...DEFAULT_CONFIG,
48
+ ...readConfigFile(globalPath, warn),
49
+ };
50
+ cachedConfigTime = now;
51
+ return cachedConfig;
52
+ }
53
+ export function saveConfig(config) {
54
+ const path = getGlobalConfigPath();
55
+ const dir = dirname(path);
56
+ // Create directory with restrictive permissions (owner only)
57
+ if (!existsSync(dir)) {
58
+ mkdirSync(dir, { recursive: true, mode: 0o700 });
59
+ }
60
+ // Load existing config and merge, with proper error handling
61
+ let existing = {};
62
+ if (existsSync(path)) {
63
+ try {
64
+ const raw = readFileSync(path, 'utf8');
65
+ const parsed = JSON5.parse(raw);
66
+ if (isPlainObject(parsed)) {
67
+ existing = parsed;
68
+ }
69
+ }
70
+ catch (error) {
71
+ // Log but don't fail - we'll overwrite with new config
72
+ console.warn(`Warning: Could not read existing config, will be overwritten: ${error instanceof Error ? error.message : String(error)}`);
73
+ }
74
+ }
75
+ const merged = { ...existing, ...config };
76
+ const content = JSON5.stringify(merged, null, 2);
77
+ // Write with restrictive permissions (owner read/write only)
78
+ writeFileSync(path, content, { encoding: 'utf8', mode: 0o600 });
79
+ // Invalidate cache
80
+ cachedConfig = null;
81
+ }
82
+ export function getConfigPath() {
83
+ return getGlobalConfigPath();
84
+ }
85
+ export function isConfigured() {
86
+ const config = loadConfig(() => { });
87
+ return (config.apiId ?? 0) > 0 && (config.apiHash ?? '') !== '';
88
+ }
89
+ export function setCredentials(apiId, apiHash) {
90
+ saveConfig({ apiId, apiHash });
91
+ }
92
+ export function getCredentials() {
93
+ const config = loadConfig(() => { });
94
+ return {
95
+ apiId: config.apiId ?? 0,
96
+ apiHash: config.apiHash ?? '',
97
+ };
98
+ }
99
+ export function setSessionString(session) {
100
+ saveConfig({ sessionString: session });
101
+ }
102
+ export function getSessionString() {
103
+ const config = loadConfig(() => { });
104
+ return config.sessionString;
105
+ }
106
+ //# sourceMappingURL=config.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,10 @@
1
+ export * from './json.js';
2
+ export * from './plain.js';
3
+ export * from './markdown.js';
4
+ export type OutputFormat = 'plain' | 'json' | 'markdown';
5
+ export declare function getOutputFormat(options: {
6
+ json?: boolean;
7
+ markdown?: boolean;
8
+ plain?: boolean;
9
+ }): OutputFormat;
10
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/formatters/index.ts"],"names":[],"mappings":"AAAA,cAAc,WAAW,CAAC;AAC1B,cAAc,YAAY,CAAC;AAC3B,cAAc,eAAe,CAAC;AAE9B,MAAM,MAAM,YAAY,GAAG,OAAO,GAAG,MAAM,GAAG,UAAU,CAAC;AAEzD,wBAAgB,eAAe,CAAC,OAAO,EAAE;IAAE,IAAI,CAAC,EAAE,OAAO,CAAC;IAAC,QAAQ,CAAC,EAAE,OAAO,CAAC;IAAC,KAAK,CAAC,EAAE,OAAO,CAAA;CAAE,GAAG,YAAY,CAI9G"}
@@ -0,0 +1,11 @@
1
+ export * from './json.js';
2
+ export * from './plain.js';
3
+ export * from './markdown.js';
4
+ export function getOutputFormat(options) {
5
+ if (options.json)
6
+ return 'json';
7
+ if (options.markdown)
8
+ return 'markdown';
9
+ return 'plain';
10
+ }
11
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/formatters/index.ts"],"names":[],"mappings":"AAAA,cAAc,WAAW,CAAC;AAC1B,cAAc,YAAY,CAAC;AAC3B,cAAc,eAAe,CAAC;AAI9B,MAAM,UAAU,eAAe,CAAC,OAAgE;IAC9F,IAAI,OAAO,CAAC,IAAI;QAAE,OAAO,MAAM,CAAC;IAChC,IAAI,OAAO,CAAC,QAAQ;QAAE,OAAO,UAAU,CAAC;IACxC,OAAO,OAAO,CAAC;AACjB,CAAC"}
@@ -0,0 +1,2 @@
1
+ export declare function formatJson(data: unknown): string;
2
+ //# sourceMappingURL=json.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"json.d.ts","sourceRoot":"","sources":["../../src/formatters/json.ts"],"names":[],"mappings":"AAAA,wBAAgB,UAAU,CAAC,IAAI,EAAE,OAAO,GAAG,MAAM,CAEhD"}
@@ -0,0 +1,4 @@
1
+ export function formatJson(data) {
2
+ return JSON.stringify(data, null, 2);
3
+ }
4
+ //# sourceMappingURL=json.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"json.js","sourceRoot":"","sources":["../../src/formatters/json.ts"],"names":[],"mappings":"AAAA,MAAM,UAAU,UAAU,CAAC,IAAa;IACtC,OAAO,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;AACvC,CAAC"}
@@ -0,0 +1,21 @@
1
+ import type { ChatInfo, MessageInfo } from '../client.js';
2
+ export declare function formatChatsMarkdown(chats: ChatInfo[]): string;
3
+ export declare function formatMessagesMarkdown(messages: MessageInfo[], chatTitle?: string): string;
4
+ export declare function formatContactMarkdown(contact: {
5
+ id: string;
6
+ firstName?: string;
7
+ lastName?: string;
8
+ username?: string;
9
+ phone?: string;
10
+ bio?: string;
11
+ isBot: boolean;
12
+ isMutualContact: boolean;
13
+ }): string;
14
+ export declare function formatMembersMarkdown(members: {
15
+ id: string;
16
+ name: string;
17
+ username?: string;
18
+ isAdmin: boolean;
19
+ }[]): string;
20
+ export declare function formatInboxMarkdown(chats: ChatInfo[]): string;
21
+ //# sourceMappingURL=markdown.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"markdown.d.ts","sourceRoot":"","sources":["../../src/formatters/markdown.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAE1D,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,QAAQ,EAAE,GAAG,MAAM,CAyB7D;AAED,wBAAgB,sBAAsB,CAAC,QAAQ,EAAE,WAAW,EAAE,EAAE,SAAS,CAAC,EAAE,MAAM,GAAG,MAAM,CAmB1F;AAED,wBAAgB,qBAAqB,CAAC,OAAO,EAAE;IAC7C,EAAE,EAAE,MAAM,CAAC;IACX,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,OAAO,CAAC;IACf,eAAe,EAAE,OAAO,CAAC;CAC1B,GAAG,MAAM,CA0BT;AAED,wBAAgB,qBAAqB,CACnC,OAAO,EAAE;IAAE,EAAE,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,OAAO,CAAA;CAAE,EAAE,GAC3E,MAAM,CAaR;AAED,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,QAAQ,EAAE,GAAG,MAAM,CAwB7D"}
@@ -0,0 +1,87 @@
1
+ export function formatChatsMarkdown(chats) {
2
+ const lines = ['# Telegram Chats\n'];
3
+ for (const chat of chats) {
4
+ const type = chat.type.charAt(0).toUpperCase() + chat.type.slice(1);
5
+ const unread = chat.unreadCount > 0 ? ` **(${chat.unreadCount} unread)**` : '';
6
+ const username = chat.username ? ` (@${chat.username})` : '';
7
+ lines.push(`## ${chat.title}${username}${unread}`);
8
+ lines.push(`- Type: ${type}`);
9
+ lines.push(`- ID: ${chat.id}`);
10
+ if (chat.lastMessage) {
11
+ const preview = chat.lastMessage.substring(0, 100).replace(/\n/g, ' ');
12
+ lines.push(`- Last message: ${preview}${chat.lastMessage.length > 100 ? '...' : ''}`);
13
+ }
14
+ if (chat.lastMessageDate) {
15
+ lines.push(`- Last activity: ${chat.lastMessageDate.toISOString()}`);
16
+ }
17
+ lines.push('');
18
+ }
19
+ return lines.join('\n');
20
+ }
21
+ export function formatMessagesMarkdown(messages, chatTitle) {
22
+ const lines = [];
23
+ if (chatTitle) {
24
+ lines.push(`# Messages from ${chatTitle}\n`);
25
+ }
26
+ for (const msg of messages) {
27
+ const time = msg.date.toISOString();
28
+ const sender = msg.isOutgoing ? 'You' : msg.sender;
29
+ const reply = msg.replyToMsgId ? ` (reply to #${msg.replyToMsgId})` : '';
30
+ lines.push(`### ${sender} - ${time}${reply}`);
31
+ lines.push(`*Message ID: ${msg.id}*\n`);
32
+ lines.push(msg.text || '*(no text)*');
33
+ lines.push('\n---\n');
34
+ }
35
+ return lines.join('\n');
36
+ }
37
+ export function formatContactMarkdown(contact) {
38
+ const lines = [];
39
+ const name = [contact.firstName, contact.lastName].filter(Boolean).join(' ') || 'Unknown';
40
+ lines.push(`# ${name}\n`);
41
+ lines.push('| Field | Value |');
42
+ lines.push('|-------|-------|');
43
+ lines.push(`| ID | ${contact.id} |`);
44
+ if (contact.username) {
45
+ lines.push(`| Username | @${contact.username} |`);
46
+ }
47
+ if (contact.phone) {
48
+ lines.push(`| Phone | ${contact.phone} |`);
49
+ }
50
+ lines.push(`| Bot | ${contact.isBot ? 'Yes' : 'No'} |`);
51
+ lines.push(`| Mutual Contact | ${contact.isMutualContact ? 'Yes' : 'No'} |`);
52
+ if (contact.bio) {
53
+ lines.push(`\n## Bio\n${contact.bio}`);
54
+ }
55
+ return lines.join('\n');
56
+ }
57
+ export function formatMembersMarkdown(members) {
58
+ const lines = ['# Group Members\n'];
59
+ lines.push('| Name | Username | Role |');
60
+ lines.push('|------|----------|------|');
61
+ for (const member of members) {
62
+ const username = member.username ? `@${member.username}` : '-';
63
+ const role = member.isAdmin ? 'Admin' : 'Member';
64
+ lines.push(`| ${member.name} | ${username} | ${role} |`);
65
+ }
66
+ return lines.join('\n');
67
+ }
68
+ export function formatInboxMarkdown(chats) {
69
+ const unreadChats = chats.filter(c => c.unreadCount > 0);
70
+ if (unreadChats.length === 0) {
71
+ return '# Inbox\n\nNo unread messages!';
72
+ }
73
+ const lines = ['# Inbox\n'];
74
+ lines.push(`**${unreadChats.length} chats with unread messages**\n`);
75
+ // Sort by unread count descending
76
+ unreadChats.sort((a, b) => b.unreadCount - a.unreadCount);
77
+ lines.push('| Chat | Type | Unread | Last Message |');
78
+ lines.push('|------|------|--------|--------------|');
79
+ for (const chat of unreadChats) {
80
+ const preview = chat.lastMessage
81
+ ? chat.lastMessage.substring(0, 30).replace(/\n/g, ' ') + (chat.lastMessage.length > 30 ? '...' : '')
82
+ : '-';
83
+ lines.push(`| ${chat.title} | ${chat.type} | ${chat.unreadCount} | ${preview} |`);
84
+ }
85
+ return lines.join('\n');
86
+ }
87
+ //# sourceMappingURL=markdown.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"markdown.js","sourceRoot":"","sources":["../../src/formatters/markdown.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,27 @@
1
+ import type { ChatInfo, MessageInfo } from '../client.js';
2
+ export declare function formatChats(chats: ChatInfo[]): string;
3
+ export declare function formatMessages(messages: MessageInfo[], chatTitle?: string): string;
4
+ export declare function formatContact(contact: {
5
+ id: string;
6
+ firstName?: string;
7
+ lastName?: string;
8
+ username?: string;
9
+ phone?: string;
10
+ bio?: string;
11
+ isBot: boolean;
12
+ isMutualContact: boolean;
13
+ }): string;
14
+ export declare function formatMembers(members: {
15
+ id: string;
16
+ name: string;
17
+ username?: string;
18
+ isAdmin: boolean;
19
+ }[]): string;
20
+ export declare function formatInbox(chats: ChatInfo[]): string;
21
+ export declare function formatUser(user: {
22
+ firstName?: string;
23
+ lastName?: string;
24
+ username?: string;
25
+ phone?: string;
26
+ }): string;
27
+ //# sourceMappingURL=plain.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"plain.d.ts","sourceRoot":"","sources":["../../src/formatters/plain.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,QAAQ,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAE1D,wBAAgB,WAAW,CAAC,KAAK,EAAE,QAAQ,EAAE,GAAG,MAAM,CAiBrD;AAED,wBAAgB,cAAc,CAAC,QAAQ,EAAE,WAAW,EAAE,EAAE,SAAS,CAAC,EAAE,MAAM,GAAG,MAAM,CAmBlF;AAED,wBAAgB,aAAa,CAAC,OAAO,EAAE;IACrC,EAAE,EAAE,MAAM,CAAC;IACX,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,OAAO,CAAC;IACf,eAAe,EAAE,OAAO,CAAC;CAC1B,GAAG,MAAM,CA6BT;AAED,wBAAgB,aAAa,CAC3B,OAAO,EAAE;IAAE,EAAE,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,OAAO,CAAA;CAAE,EAAE,GAC3E,MAAM,CAUR;AAED,wBAAgB,WAAW,CAAC,KAAK,EAAE,QAAQ,EAAE,GAAG,MAAM,CAwBrD;AAED,wBAAgB,UAAU,CAAC,IAAI,EAAE;IAAE,SAAS,CAAC,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,GAAG,MAAM,CAMrH"}
@@ -0,0 +1,121 @@
1
+ import chalk from 'chalk';
2
+ export function formatChats(chats) {
3
+ const lines = [];
4
+ for (const chat of chats) {
5
+ const typeIcon = getTypeIcon(chat.type);
6
+ const unread = chat.unreadCount > 0 ? chalk.red(` (${chat.unreadCount})`) : '';
7
+ const username = chat.username ? chalk.gray(` @${chat.username}`) : '';
8
+ lines.push(`${typeIcon} ${chalk.bold(chat.title)}${username}${unread}`);
9
+ if (chat.lastMessage) {
10
+ const preview = chat.lastMessage.substring(0, 60).replace(/\n/g, ' ');
11
+ lines.push(chalk.gray(` ${preview}${chat.lastMessage.length > 60 ? '...' : ''}`));
12
+ }
13
+ }
14
+ return lines.join('\n');
15
+ }
16
+ export function formatMessages(messages, chatTitle) {
17
+ const lines = [];
18
+ if (chatTitle) {
19
+ lines.push(chalk.bold.blue(`\n--- ${chatTitle} ---\n`));
20
+ }
21
+ for (const msg of messages) {
22
+ const time = formatTime(msg.date);
23
+ const sender = msg.isOutgoing ? chalk.green('You') : chalk.cyan(msg.sender);
24
+ const reply = msg.replyToMsgId ? chalk.gray(` [reply to #${msg.replyToMsgId}]`) : '';
25
+ lines.push(`${chalk.gray(time)} ${sender}${reply}:`);
26
+ lines.push(` ${msg.text || chalk.gray('(no text)')}`);
27
+ lines.push(chalk.gray(` #${msg.id}`));
28
+ lines.push('');
29
+ }
30
+ return lines.join('\n');
31
+ }
32
+ export function formatContact(contact) {
33
+ const lines = [];
34
+ const name = [contact.firstName, contact.lastName].filter(Boolean).join(' ') || 'Unknown';
35
+ lines.push(chalk.bold(name));
36
+ if (contact.username) {
37
+ lines.push(chalk.cyan(`@${contact.username}`));
38
+ }
39
+ if (contact.phone) {
40
+ lines.push(chalk.gray(`Phone: ${contact.phone}`));
41
+ }
42
+ if (contact.bio) {
43
+ lines.push(chalk.gray(`Bio: ${contact.bio}`));
44
+ }
45
+ if (contact.isBot) {
46
+ lines.push(chalk.yellow('Bot'));
47
+ }
48
+ if (contact.isMutualContact) {
49
+ lines.push(chalk.green('Mutual contact'));
50
+ }
51
+ lines.push(chalk.gray(`ID: ${contact.id}`));
52
+ return lines.join('\n');
53
+ }
54
+ export function formatMembers(members) {
55
+ const lines = [];
56
+ for (const member of members) {
57
+ const admin = member.isAdmin ? chalk.yellow(' [admin]') : '';
58
+ const username = member.username ? chalk.gray(` @${member.username}`) : '';
59
+ lines.push(`${chalk.bold(member.name)}${username}${admin}`);
60
+ }
61
+ return lines.join('\n');
62
+ }
63
+ export function formatInbox(chats) {
64
+ const unreadChats = chats.filter(c => c.unreadCount > 0);
65
+ if (unreadChats.length === 0) {
66
+ return chalk.green('No unread messages!');
67
+ }
68
+ const lines = [];
69
+ lines.push(chalk.bold(`\n${unreadChats.length} chats with unread messages:\n`));
70
+ // Sort by unread count descending
71
+ unreadChats.sort((a, b) => b.unreadCount - a.unreadCount);
72
+ for (const chat of unreadChats) {
73
+ const typeIcon = getTypeIcon(chat.type);
74
+ lines.push(`${typeIcon} ${chalk.bold(chat.title)}: ${chalk.red(chat.unreadCount)} unread`);
75
+ if (chat.lastMessage) {
76
+ const preview = chat.lastMessage.substring(0, 50).replace(/\n/g, ' ');
77
+ lines.push(chalk.gray(` ${preview}${chat.lastMessage.length > 50 ? '...' : ''}`));
78
+ }
79
+ }
80
+ return lines.join('\n');
81
+ }
82
+ export function formatUser(user) {
83
+ const name = [user.firstName, user.lastName].filter(Boolean).join(' ');
84
+ const username = user.username ? chalk.cyan(`@${user.username}`) : '';
85
+ const phone = user.phone ? chalk.gray(` (${user.phone})`) : '';
86
+ return `${chalk.bold(name)} ${username}${phone}`;
87
+ }
88
+ function getTypeIcon(type) {
89
+ switch (type) {
90
+ case 'user':
91
+ return '👤';
92
+ case 'group':
93
+ return '👥';
94
+ case 'supergroup':
95
+ return '👥';
96
+ case 'channel':
97
+ return '📢';
98
+ default:
99
+ return '💬';
100
+ }
101
+ }
102
+ function formatTime(date) {
103
+ const now = new Date();
104
+ const isToday = date.toDateString() === now.toDateString();
105
+ if (isToday) {
106
+ return date.toLocaleTimeString('en-US', { hour: '2-digit', minute: '2-digit' });
107
+ }
108
+ const yesterday = new Date(now);
109
+ yesterday.setDate(yesterday.getDate() - 1);
110
+ const isYesterday = date.toDateString() === yesterday.toDateString();
111
+ if (isYesterday) {
112
+ return `Yesterday ${date.toLocaleTimeString('en-US', { hour: '2-digit', minute: '2-digit' })}`;
113
+ }
114
+ return date.toLocaleDateString('en-US', {
115
+ month: 'short',
116
+ day: 'numeric',
117
+ hour: '2-digit',
118
+ minute: '2-digit',
119
+ });
120
+ }
121
+ //# sourceMappingURL=plain.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"plain.js","sourceRoot":"","sources":["../../src/formatters/plain.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ #!/usr/bin/env node
2
+ export {};
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":""}
package/dist/index.js ADDED
@@ -0,0 +1,29 @@
1
+ #!/usr/bin/env node
2
+ import { Command } from 'commander';
3
+ import { authCommand, whoamiCommand, checkCommand, chatsCommand, readCommand, searchCommand, sendCommand, replyCommand, inboxCommand, contactCommand, membersCommand, adminsCommand, groupsCommand, syncCommand, } from './commands/index.js';
4
+ const program = new Command();
5
+ program
6
+ .name('tg')
7
+ .description('Fast Telegram CLI for reading, searching, and sending messages')
8
+ .version('0.1.0');
9
+ // Auth commands
10
+ program.addCommand(authCommand);
11
+ program.addCommand(checkCommand);
12
+ program.addCommand(whoamiCommand);
13
+ // Read commands
14
+ program.addCommand(chatsCommand);
15
+ program.addCommand(readCommand);
16
+ program.addCommand(searchCommand);
17
+ program.addCommand(inboxCommand);
18
+ // Contact/group commands
19
+ program.addCommand(contactCommand);
20
+ program.addCommand(membersCommand);
21
+ program.addCommand(adminsCommand);
22
+ program.addCommand(groupsCommand);
23
+ // Write commands
24
+ program.addCommand(sendCommand);
25
+ program.addCommand(replyCommand);
26
+ // Utilities
27
+ program.addCommand(syncCommand);
28
+ program.parse();
29
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAEA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EACL,WAAW,EACX,aAAa,EACb,YAAY,EACZ,YAAY,EACZ,WAAW,EACX,aAAa,EACb,WAAW,EACX,YAAY,EACZ,YAAY,EACZ,cAAc,EACd,cAAc,EACd,aAAa,EACb,aAAa,EACb,WAAW,GACZ,MAAM,qBAAqB,CAAC;AAE7B,MAAM,OAAO,GAAG,IAAI,OAAO,EAAE,CAAC;AAE9B,OAAO;KACJ,IAAI,CAAC,IAAI,CAAC;KACV,WAAW,CAAC,gEAAgE,CAAC;KAC7E,OAAO,CAAC,OAAO,CAAC,CAAC;AAEpB,gBAAgB;AAChB,OAAO,CAAC,UAAU,CAAC,WAAW,CAAC,CAAC;AAChC,OAAO,CAAC,UAAU,CAAC,YAAY,CAAC,CAAC;AACjC,OAAO,CAAC,UAAU,CAAC,aAAa,CAAC,CAAC;AAElC,gBAAgB;AAChB,OAAO,CAAC,UAAU,CAAC,YAAY,CAAC,CAAC;AACjC,OAAO,CAAC,UAAU,CAAC,WAAW,CAAC,CAAC;AAChC,OAAO,CAAC,UAAU,CAAC,aAAa,CAAC,CAAC;AAClC,OAAO,CAAC,UAAU,CAAC,YAAY,CAAC,CAAC;AAEjC,yBAAyB;AACzB,OAAO,CAAC,UAAU,CAAC,cAAc,CAAC,CAAC;AACnC,OAAO,CAAC,UAAU,CAAC,cAAc,CAAC,CAAC;AACnC,OAAO,CAAC,UAAU,CAAC,aAAa,CAAC,CAAC;AAClC,OAAO,CAAC,UAAU,CAAC,aAAa,CAAC,CAAC;AAElC,iBAAiB;AACjB,OAAO,CAAC,UAAU,CAAC,WAAW,CAAC,CAAC;AAChC,OAAO,CAAC,UAAU,CAAC,YAAY,CAAC,CAAC;AAEjC,YAAY;AACZ,OAAO,CAAC,UAAU,CAAC,WAAW,CAAC,CAAC;AAEhC,OAAO,CAAC,KAAK,EAAE,CAAC"}
package/package.json ADDED
@@ -0,0 +1,52 @@
1
+ {
2
+ "name": "@cyberdrk/tg",
3
+ "version": "0.1.1",
4
+ "description": "Fast Telegram CLI for reading, searching, and sending messages",
5
+ "type": "module",
6
+ "main": "dist/index.js",
7
+ "bin": {
8
+ "tg": "dist/index.js"
9
+ },
10
+ "scripts": {
11
+ "build": "tsc",
12
+ "dev": "tsc --watch",
13
+ "start": "node dist/index.js",
14
+ "prepublishOnly": "npm run build"
15
+ },
16
+ "keywords": [
17
+ "telegram",
18
+ "cli",
19
+ "messaging",
20
+ "chat"
21
+ ],
22
+ "author": "Derek Rein",
23
+ "license": "MIT",
24
+ "repository": {
25
+ "type": "git",
26
+ "url": "git+https://github.com/cyberdrk305/telegram.git"
27
+ },
28
+ "homepage": "https://github.com/cyberdrk305/telegram#readme",
29
+ "bugs": {
30
+ "url": "https://github.com/cyberdrk305/telegram/issues"
31
+ },
32
+ "dependencies": {
33
+ "big-integer": "^1.6.52",
34
+ "chalk": "^5.3.0",
35
+ "commander": "^12.1.0",
36
+ "input": "^1.0.1",
37
+ "json5": "^2.2.3",
38
+ "ora": "^8.1.0",
39
+ "telegram": "^2.25.15"
40
+ },
41
+ "devDependencies": {
42
+ "@types/node": "^22.10.0",
43
+ "typescript": "^5.7.0"
44
+ },
45
+ "engines": {
46
+ "node": ">=18.0.0"
47
+ },
48
+ "files": [
49
+ "dist",
50
+ "SKILL.md"
51
+ ]
52
+ }