bn-telegram-mcp-server 0.0.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 (99) hide show
  1. package/README.md +1031 -0
  2. package/dist/debug-middleware.d.ts +12 -0
  3. package/dist/debug-middleware.d.ts.map +1 -0
  4. package/dist/debug-middleware.js +36 -0
  5. package/dist/debug-middleware.js.map +1 -0
  6. package/dist/encryption.d.ts +11 -0
  7. package/dist/encryption.d.ts.map +1 -0
  8. package/dist/encryption.js +26 -0
  9. package/dist/encryption.js.map +1 -0
  10. package/dist/helpers.d.ts +27 -0
  11. package/dist/helpers.d.ts.map +1 -0
  12. package/dist/helpers.js +103 -0
  13. package/dist/helpers.js.map +1 -0
  14. package/dist/index.d.ts +3 -0
  15. package/dist/index.d.ts.map +1 -0
  16. package/dist/index.js +176 -0
  17. package/dist/index.js.map +1 -0
  18. package/dist/logger.d.ts +29 -0
  19. package/dist/logger.d.ts.map +1 -0
  20. package/dist/logger.js +114 -0
  21. package/dist/logger.js.map +1 -0
  22. package/dist/request-context.d.ts +24 -0
  23. package/dist/request-context.d.ts.map +1 -0
  24. package/dist/request-context.js +32 -0
  25. package/dist/request-context.js.map +1 -0
  26. package/dist/resolvers.d.ts +36 -0
  27. package/dist/resolvers.d.ts.map +1 -0
  28. package/dist/resolvers.js +252 -0
  29. package/dist/resolvers.js.map +1 -0
  30. package/dist/schemas.d.ts +150 -0
  31. package/dist/schemas.d.ts.map +1 -0
  32. package/dist/schemas.js +216 -0
  33. package/dist/schemas.js.map +1 -0
  34. package/dist/telegram-client.d.ts +19 -0
  35. package/dist/telegram-client.d.ts.map +1 -0
  36. package/dist/telegram-client.js +112 -0
  37. package/dist/telegram-client.js.map +1 -0
  38. package/dist/tool-loader.d.ts +31 -0
  39. package/dist/tool-loader.d.ts.map +1 -0
  40. package/dist/tool-loader.js +121 -0
  41. package/dist/tool-loader.js.map +1 -0
  42. package/dist/tool-registry.d.ts +47 -0
  43. package/dist/tool-registry.d.ts.map +1 -0
  44. package/dist/tool-registry.js +58 -0
  45. package/dist/tool-registry.js.map +1 -0
  46. package/dist/tools/getChat.d.ts +28 -0
  47. package/dist/tools/getChat.d.ts.map +1 -0
  48. package/dist/tools/getChat.js +69 -0
  49. package/dist/tools/getChat.js.map +1 -0
  50. package/dist/tools/getChatMembers.d.ts +34 -0
  51. package/dist/tools/getChatMembers.d.ts.map +1 -0
  52. package/dist/tools/getChatMembers.js +150 -0
  53. package/dist/tools/getChatMembers.js.map +1 -0
  54. package/dist/tools/getContacts.d.ts +28 -0
  55. package/dist/tools/getContacts.d.ts.map +1 -0
  56. package/dist/tools/getContacts.js +73 -0
  57. package/dist/tools/getContacts.js.map +1 -0
  58. package/dist/tools/getFile.d.ts +21 -0
  59. package/dist/tools/getFile.d.ts.map +1 -0
  60. package/dist/tools/getFile.js +33 -0
  61. package/dist/tools/getFile.js.map +1 -0
  62. package/dist/tools/getGroup.d.ts +27 -0
  63. package/dist/tools/getGroup.d.ts.map +1 -0
  64. package/dist/tools/getGroup.js +100 -0
  65. package/dist/tools/getGroup.js.map +1 -0
  66. package/dist/tools/getMe.d.ts +17 -0
  67. package/dist/tools/getMe.d.ts.map +1 -0
  68. package/dist/tools/getMe.js +20 -0
  69. package/dist/tools/getMe.js.map +1 -0
  70. package/dist/tools/getMessageContext.d.ts +21 -0
  71. package/dist/tools/getMessageContext.d.ts.map +1 -0
  72. package/dist/tools/getMessageContext.js +164 -0
  73. package/dist/tools/getMessageContext.js.map +1 -0
  74. package/dist/tools/getMessages.d.ts +38 -0
  75. package/dist/tools/getMessages.d.ts.map +1 -0
  76. package/dist/tools/getMessages.js +123 -0
  77. package/dist/tools/getMessages.js.map +1 -0
  78. package/dist/tools/getUser.d.ts +22 -0
  79. package/dist/tools/getUser.d.ts.map +1 -0
  80. package/dist/tools/getUser.js +38 -0
  81. package/dist/tools/getUser.js.map +1 -0
  82. package/dist/tools/index.d.ts +11 -0
  83. package/dist/tools/index.d.ts.map +1 -0
  84. package/dist/tools/index.js +12 -0
  85. package/dist/tools/index.js.map +1 -0
  86. package/dist/tools/sendMessage.d.ts +39 -0
  87. package/dist/tools/sendMessage.d.ts.map +1 -0
  88. package/dist/tools/sendMessage.js +116 -0
  89. package/dist/tools/sendMessage.js.map +1 -0
  90. package/dist/transformers.d.ts +133 -0
  91. package/dist/transformers.d.ts.map +1 -0
  92. package/dist/transformers.js +335 -0
  93. package/dist/transformers.js.map +1 -0
  94. package/dist/types.d.ts +55 -0
  95. package/dist/types.d.ts.map +1 -0
  96. package/dist/types.js +2 -0
  97. package/dist/types.js.map +1 -0
  98. package/package.json +45 -0
  99. package/tools.json +252 -0
@@ -0,0 +1,28 @@
1
+ import type { Request } from "express";
2
+ import type { z } from "zod";
3
+ import type { GetChatSchema } from "../schemas.js";
4
+ import { type TransformedChat, type TransformedChatList } from "../transformers.js";
5
+ type GetChatResult = TransformedChat | TransformedChatList;
6
+ /**
7
+ * Get chat information - either a specific chat or list all chats
8
+ *
9
+ * Modes:
10
+ * - If `chat` is provided: Get detailed info for a specific chat
11
+ * - If `chat` is not provided: List all chats
12
+ *
13
+ * Parameters:
14
+ * - chat: Optional - Chat identifier (numeric ID or title/name to search)
15
+ * - chat_list: "main" or "archive" (default: "main")
16
+ * - limit: Max chats to return when listing (default: 100, max: 4000)
17
+ *
18
+ * Returns (single chat):
19
+ * - id, title, type, unread_count, last_message, is_pinned, is_muted
20
+ *
21
+ * Returns (list):
22
+ * - chats: Array of chat objects
23
+ * - total_count: Total number of chats
24
+ * - summary: Brief summary (e.g., "15 chats loaded, 3 unread messages")
25
+ */
26
+ export declare function getChat(req: Request, args: z.infer<typeof GetChatSchema>): Promise<GetChatResult>;
27
+ export {};
28
+ //# sourceMappingURL=getChat.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"getChat.d.ts","sourceRoot":"","sources":["../../src/tools/getChat.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AACvC,OAAO,KAAK,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAC7B,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAInD,OAAO,EAGL,KAAK,eAAe,EACpB,KAAK,mBAAmB,EACzB,MAAM,oBAAoB,CAAC;AAE5B,KAAK,aAAa,GAAG,eAAe,GAAG,mBAAmB,CAAC;AAE3D;;;;;;;;;;;;;;;;;;;GAmBG;AACH,wBAAsB,OAAO,CAC3B,GAAG,EAAE,OAAO,EACZ,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,OAAO,aAAa,CAAC,GAClC,OAAO,CAAC,aAAa,CAAC,CAoDxB"}
@@ -0,0 +1,69 @@
1
+ import { withClient } from "../helpers.js";
2
+ import { resolveChat } from "../resolvers.js";
3
+ import { transformChat, transformChatList, } from "../transformers.js";
4
+ /**
5
+ * Get chat information - either a specific chat or list all chats
6
+ *
7
+ * Modes:
8
+ * - If `chat` is provided: Get detailed info for a specific chat
9
+ * - If `chat` is not provided: List all chats
10
+ *
11
+ * Parameters:
12
+ * - chat: Optional - Chat identifier (numeric ID or title/name to search)
13
+ * - chat_list: "main" or "archive" (default: "main")
14
+ * - limit: Max chats to return when listing (default: 100, max: 4000)
15
+ *
16
+ * Returns (single chat):
17
+ * - id, title, type, unread_count, last_message, is_pinned, is_muted
18
+ *
19
+ * Returns (list):
20
+ * - chats: Array of chat objects
21
+ * - total_count: Total number of chats
22
+ * - summary: Brief summary (e.g., "15 chats loaded, 3 unread messages")
23
+ */
24
+ export async function getChat(req, args) {
25
+ return withClient(req, async (client) => {
26
+ const chatList = args.chat_list === "archive"
27
+ ? { _: "chatListArchive" }
28
+ : { _: "chatListMain" };
29
+ const limit = args.limit ?? 100;
30
+ // First, load the chat list
31
+ await client.invoke({
32
+ _: "loadChats",
33
+ chat_list: chatList,
34
+ limit: limit,
35
+ });
36
+ // If chat is provided, get single chat info
37
+ if (args.chat !== undefined) {
38
+ // Resolve chat identifier (supports name-based lookup)
39
+ const chatId = await resolveChat(client, args.chat);
40
+ const result = await client.invoke({
41
+ _: "getChat",
42
+ chat_id: chatId,
43
+ });
44
+ return transformChat(result);
45
+ }
46
+ // Otherwise, list all chats
47
+ const chatsResult = (await client.invoke({
48
+ _: "getChats",
49
+ chat_list: chatList,
50
+ limit: limit,
51
+ }));
52
+ // Fetch full chat info for each chat
53
+ const chats = [];
54
+ for (const chatId of chatsResult.chat_ids) {
55
+ try {
56
+ const chat = await client.invoke({
57
+ _: "getChat",
58
+ chat_id: chatId,
59
+ });
60
+ chats.push(chat);
61
+ }
62
+ catch {
63
+ // Skip chats that fail to load
64
+ }
65
+ }
66
+ return transformChatList(chats, chatsResult.total_count);
67
+ });
68
+ }
69
+ //# sourceMappingURL=getChat.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"getChat.js","sourceRoot":"","sources":["../../src/tools/getChat.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAC3C,OAAO,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAC9C,OAAO,EACL,aAAa,EACb,iBAAiB,GAGlB,MAAM,oBAAoB,CAAC;AAI5B;;;;;;;;;;;;;;;;;;;GAmBG;AACH,MAAM,CAAC,KAAK,UAAU,OAAO,CAC3B,GAAY,EACZ,IAAmC;IAEnC,OAAO,UAAU,CAAC,GAAG,EAAE,KAAK,EAAE,MAAM,EAAE,EAAE;QACtC,MAAM,QAAQ,GACZ,IAAI,CAAC,SAAS,KAAK,SAAS;YAC1B,CAAC,CAAC,EAAE,CAAC,EAAE,iBAA0B,EAAE;YACnC,CAAC,CAAC,EAAE,CAAC,EAAE,cAAuB,EAAE,CAAC;QAErC,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,IAAI,GAAG,CAAC;QAEhC,4BAA4B;QAC5B,MAAM,MAAM,CAAC,MAAM,CAAC;YAClB,CAAC,EAAE,WAAW;YACd,SAAS,EAAE,QAAQ;YACnB,KAAK,EAAE,KAAK;SACb,CAAC,CAAC;QAEH,4CAA4C;QAC5C,IAAI,IAAI,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;YAC5B,uDAAuD;YACvD,MAAM,MAAM,GAAG,MAAM,WAAW,CAAC,MAAM,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC;YAEpD,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,MAAM,CAAC;gBACjC,CAAC,EAAE,SAAS;gBACZ,OAAO,EAAE,MAAM;aAChB,CAAC,CAAC;YAEH,OAAO,aAAa,CAAC,MAAM,CAAC,CAAC;QAC/B,CAAC;QAED,4BAA4B;QAC5B,MAAM,WAAW,GAAG,CAAC,MAAM,MAAM,CAAC,MAAM,CAAC;YACvC,CAAC,EAAE,UAAU;YACb,SAAS,EAAE,QAAQ;YACnB,KAAK,EAAE,KAAK;SACb,CAAC,CAA6B,CAAC;QAEhC,qCAAqC;QACrC,MAAM,KAAK,GAAc,EAAE,CAAC;QAC5B,KAAK,MAAM,MAAM,IAAI,WAAW,CAAC,QAAQ,EAAE,CAAC;YAC1C,IAAI,CAAC;gBACH,MAAM,IAAI,GAAG,MAAM,MAAM,CAAC,MAAM,CAAC;oBAC/B,CAAC,EAAE,SAAS;oBACZ,OAAO,EAAE,MAAM;iBAChB,CAAC,CAAC;gBACH,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACnB,CAAC;YAAC,MAAM,CAAC;gBACP,+BAA+B;YACjC,CAAC;QACH,CAAC;QAED,OAAO,iBAAiB,CAAC,KAAK,EAAE,WAAW,CAAC,WAAW,CAAC,CAAC;IAC3D,CAAC,CAAC,CAAC;AACL,CAAC"}
@@ -0,0 +1,34 @@
1
+ import type { Request } from "express";
2
+ import type { z } from "zod";
3
+ import type { GetChatMembersSchema } from "../schemas.js";
4
+ import { type TransformedMember } from "../transformers.js";
5
+ interface GetChatMembersResult {
6
+ members: TransformedMember[];
7
+ total_count: number;
8
+ chat_title?: string;
9
+ }
10
+ /**
11
+ * Get members of a chat - supports filtering and search
12
+ *
13
+ * Filters:
14
+ * - filter="recent" (default): Get recently active members
15
+ * - filter="administrators": Get only administrators
16
+ * - filter="banned": Get banned members
17
+ * - filter="bots": Get bot members
18
+ * - filter="search": Search members by name/username
19
+ *
20
+ * Parameters:
21
+ * - chat: Chat identifier (numeric ID or chat title)
22
+ * - filter: "recent" | "administrators" | "banned" | "bots" | "search"
23
+ * - query: Search query (only used with "search" and "banned" filters)
24
+ * - offset: Pagination offset (default: 0)
25
+ * - limit: Max members to return (default: 200, max: 200)
26
+ *
27
+ * Returns:
28
+ * - members: Array of members with user_id, name, username, role
29
+ * - total_count: Total member count
30
+ * - chat_title: Name of the chat
31
+ */
32
+ export declare function getChatMembers(req: Request, args: z.infer<typeof GetChatMembersSchema>): Promise<GetChatMembersResult>;
33
+ export {};
34
+ //# sourceMappingURL=getChatMembers.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"getChatMembers.d.ts","sourceRoot":"","sources":["../../src/tools/getChatMembers.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AACvC,OAAO,KAAK,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAE7B,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,eAAe,CAAC;AAI1D,OAAO,EAAoB,KAAK,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AAE9E,UAAU,oBAAoB;IAC5B,OAAO,EAAE,iBAAiB,EAAE,CAAC;IAC7B,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,wBAAsB,cAAc,CAClC,GAAG,EAAE,OAAO,EACZ,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,OAAO,oBAAoB,CAAC,GACzC,OAAO,CAAC,oBAAoB,CAAC,CA0J/B"}
@@ -0,0 +1,150 @@
1
+ import { withClient } from "../helpers.js";
2
+ import { resolveChat } from "../resolvers.js";
3
+ import { transformMembers } from "../transformers.js";
4
+ /**
5
+ * Get members of a chat - supports filtering and search
6
+ *
7
+ * Filters:
8
+ * - filter="recent" (default): Get recently active members
9
+ * - filter="administrators": Get only administrators
10
+ * - filter="banned": Get banned members
11
+ * - filter="bots": Get bot members
12
+ * - filter="search": Search members by name/username
13
+ *
14
+ * Parameters:
15
+ * - chat: Chat identifier (numeric ID or chat title)
16
+ * - filter: "recent" | "administrators" | "banned" | "bots" | "search"
17
+ * - query: Search query (only used with "search" and "banned" filters)
18
+ * - offset: Pagination offset (default: 0)
19
+ * - limit: Max members to return (default: 200, max: 200)
20
+ *
21
+ * Returns:
22
+ * - members: Array of members with user_id, name, username, role
23
+ * - total_count: Total member count
24
+ * - chat_title: Name of the chat
25
+ */
26
+ export async function getChatMembers(req, args) {
27
+ return withClient(req, async (client) => {
28
+ const filter = args.filter ?? "recent";
29
+ const limit = args.limit ?? 200;
30
+ const offset = args.offset ?? 0;
31
+ // Load chats first
32
+ await client.invoke({
33
+ _: "loadChats",
34
+ chat_list: { _: "chatListMain" },
35
+ limit: 100,
36
+ });
37
+ // Resolve chat identifier
38
+ const chatId = await resolveChat(client, args.chat);
39
+ // Get chat info for title and type detection
40
+ const chat = (await client.invoke({
41
+ _: "getChat",
42
+ chat_id: chatId,
43
+ }));
44
+ const chatType = chat.type;
45
+ // For administrators filter, we can use getChatAdministrators which works for all chat types
46
+ if (filter === "administrators") {
47
+ const result = (await client.invoke({
48
+ _: "getChatAdministrators",
49
+ chat_id: chatId,
50
+ }));
51
+ // Build user cache for admin names
52
+ const userCache = new Map();
53
+ for (const admin of result.administrators ?? []) {
54
+ const a = admin;
55
+ if (a.user_id) {
56
+ try {
57
+ const user = (await client.invoke({
58
+ _: "getUser",
59
+ user_id: a.user_id,
60
+ }));
61
+ userCache.set(a.user_id, {
62
+ name: `${user.first_name ?? ""} ${user.last_name ?? ""}`.trim(),
63
+ username: user.usernames?.active_usernames?.[0],
64
+ });
65
+ }
66
+ catch {
67
+ // User info not available
68
+ }
69
+ }
70
+ }
71
+ // Transform administrators (they use a different format)
72
+ const admins = (result.administrators ?? []).map((admin) => {
73
+ const a = admin;
74
+ const userInfo = userCache.get(a.user_id ?? 0);
75
+ return {
76
+ user_id: a.user_id ?? 0,
77
+ name: userInfo?.name ?? `User ${a.user_id}`,
78
+ username: userInfo?.username,
79
+ status: "administrator",
80
+ role: a.is_owner ? "owner" : a.custom_title || "administrator",
81
+ };
82
+ });
83
+ return {
84
+ members: admins,
85
+ total_count: admins.length,
86
+ chat_title: chat.title,
87
+ };
88
+ }
89
+ // For other filters, need supergroup
90
+ if (chatType?._ !== "chatTypeSupergroup" || !chatType.supergroup_id) {
91
+ throw new Error(`Filter "${filter}" is only supported for supergroups and channels. Use filter="administrators" for basic groups.`);
92
+ }
93
+ // Build supergroup filter
94
+ let supergroupFilter;
95
+ switch (filter) {
96
+ case "banned":
97
+ supergroupFilter = {
98
+ _: "supergroupMembersFilterBanned",
99
+ query: args.query ?? "",
100
+ };
101
+ break;
102
+ case "bots":
103
+ supergroupFilter = { _: "supergroupMembersFilterBots" };
104
+ break;
105
+ case "search":
106
+ supergroupFilter = {
107
+ _: "supergroupMembersFilterSearch",
108
+ query: args.query ?? "",
109
+ };
110
+ break;
111
+ case "recent":
112
+ default:
113
+ supergroupFilter = { _: "supergroupMembersFilterRecent" };
114
+ break;
115
+ }
116
+ const result = (await client.invoke({
117
+ _: "getSupergroupMembers",
118
+ supergroup_id: chatType.supergroup_id,
119
+ filter: supergroupFilter,
120
+ offset: offset,
121
+ limit: limit,
122
+ }));
123
+ // Build user cache for member names
124
+ const userCache = new Map();
125
+ for (const member of result.members ?? []) {
126
+ const m = member;
127
+ if (m.member_id?.user_id) {
128
+ try {
129
+ const user = (await client.invoke({
130
+ _: "getUser",
131
+ user_id: m.member_id.user_id,
132
+ }));
133
+ userCache.set(m.member_id.user_id, {
134
+ name: `${user.first_name ?? ""} ${user.last_name ?? ""}`.trim(),
135
+ username: user.usernames?.active_usernames?.[0],
136
+ });
137
+ }
138
+ catch {
139
+ // User info not available
140
+ }
141
+ }
142
+ }
143
+ return {
144
+ members: transformMembers(result.members ?? [], userCache),
145
+ total_count: result.total_count,
146
+ chat_title: chat.title,
147
+ };
148
+ });
149
+ }
150
+ //# sourceMappingURL=getChatMembers.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"getChatMembers.js","sourceRoot":"","sources":["../../src/tools/getChatMembers.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,28 @@
1
+ import type { Request } from "express";
2
+ import type { z } from "zod";
3
+ import type { GetContactsSchema } from "../schemas.js";
4
+ import { type TransformedContact } from "../transformers.js";
5
+ interface GetContactsResult {
6
+ contacts: TransformedContact[];
7
+ total_count: number;
8
+ query?: string;
9
+ }
10
+ /**
11
+ * Get contacts - list all or search by name/username
12
+ *
13
+ * Modes:
14
+ * - If `query` is not provided: List all contacts
15
+ * - If `query` is provided: Search contacts by name or username
16
+ *
17
+ * Parameters:
18
+ * - query: Optional search text (name or username)
19
+ * - limit: Max results when searching (default: 50, max: 200)
20
+ *
21
+ * Returns:
22
+ * - contacts: Array of contacts with id, name, username, phone, status
23
+ * - total_count: Total number of contacts/matches
24
+ * - query: The search query used (only when searching)
25
+ */
26
+ export declare function getContacts(req: Request, args: z.infer<typeof GetContactsSchema>): Promise<GetContactsResult>;
27
+ export {};
28
+ //# sourceMappingURL=getContacts.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"getContacts.d.ts","sourceRoot":"","sources":["../../src/tools/getContacts.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AACvC,OAAO,KAAK,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAC7B,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAC;AAGvD,OAAO,EAAqB,KAAK,kBAAkB,EAAE,MAAM,oBAAoB,CAAC;AAEhF,UAAU,iBAAiB;IACzB,QAAQ,EAAE,kBAAkB,EAAE,CAAC;IAC/B,WAAW,EAAE,MAAM,CAAC;IACpB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED;;;;;;;;;;;;;;;GAeG;AACH,wBAAsB,WAAW,CAC/B,GAAG,EAAE,OAAO,EACZ,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,OAAO,iBAAiB,CAAC,GACtC,OAAO,CAAC,iBAAiB,CAAC,CAyD5B"}
@@ -0,0 +1,73 @@
1
+ import { withClient } from "../helpers.js";
2
+ import { transformContacts } from "../transformers.js";
3
+ /**
4
+ * Get contacts - list all or search by name/username
5
+ *
6
+ * Modes:
7
+ * - If `query` is not provided: List all contacts
8
+ * - If `query` is provided: Search contacts by name or username
9
+ *
10
+ * Parameters:
11
+ * - query: Optional search text (name or username)
12
+ * - limit: Max results when searching (default: 50, max: 200)
13
+ *
14
+ * Returns:
15
+ * - contacts: Array of contacts with id, name, username, phone, status
16
+ * - total_count: Total number of contacts/matches
17
+ * - query: The search query used (only when searching)
18
+ */
19
+ export async function getContacts(req, args) {
20
+ return withClient(req, async (client) => {
21
+ const limit = args.limit ?? 50;
22
+ if (args.query) {
23
+ // Search contacts by name/username
24
+ const result = (await client.invoke({
25
+ _: "searchContacts",
26
+ query: args.query,
27
+ limit: limit,
28
+ }));
29
+ // Fetch full user info for each contact
30
+ const users = [];
31
+ for (const userId of result.user_ids) {
32
+ try {
33
+ const user = await client.invoke({
34
+ _: "getUser",
35
+ user_id: userId,
36
+ });
37
+ users.push(user);
38
+ }
39
+ catch {
40
+ // Skip users that fail to load
41
+ }
42
+ }
43
+ return {
44
+ contacts: transformContacts(users),
45
+ total_count: result.total_count,
46
+ query: args.query,
47
+ };
48
+ }
49
+ // List all contacts
50
+ const result = (await client.invoke({
51
+ _: "getContacts",
52
+ }));
53
+ // Fetch full user info for each contact
54
+ const users = [];
55
+ for (const userId of result.user_ids) {
56
+ try {
57
+ const user = await client.invoke({
58
+ _: "getUser",
59
+ user_id: userId,
60
+ });
61
+ users.push(user);
62
+ }
63
+ catch {
64
+ // Skip users that fail to load
65
+ }
66
+ }
67
+ return {
68
+ contacts: transformContacts(users),
69
+ total_count: result.total_count,
70
+ };
71
+ });
72
+ }
73
+ //# sourceMappingURL=getContacts.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"getContacts.js","sourceRoot":"","sources":["../../src/tools/getContacts.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAC3C,OAAO,EAAE,iBAAiB,EAA2B,MAAM,oBAAoB,CAAC;AAQhF;;;;;;;;;;;;;;;GAeG;AACH,MAAM,CAAC,KAAK,UAAU,WAAW,CAC/B,GAAY,EACZ,IAAuC;IAEvC,OAAO,UAAU,CAAC,GAAG,EAAE,KAAK,EAAE,MAAM,EAAE,EAAE;QACtC,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,IAAI,EAAE,CAAC;QAE/B,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;YACf,mCAAmC;YACnC,MAAM,MAAM,GAAG,CAAC,MAAM,MAAM,CAAC,MAAM,CAAC;gBAClC,CAAC,EAAE,gBAAgB;gBACnB,KAAK,EAAE,IAAI,CAAC,KAAK;gBACjB,KAAK,EAAE,KAAK;aACb,CAAC,CAAkB,CAAC;YAErB,wCAAwC;YACxC,MAAM,KAAK,GAAc,EAAE,CAAC;YAC5B,KAAK,MAAM,MAAM,IAAI,MAAM,CAAC,QAAQ,EAAE,CAAC;gBACrC,IAAI,CAAC;oBACH,MAAM,IAAI,GAAG,MAAM,MAAM,CAAC,MAAM,CAAC;wBAC/B,CAAC,EAAE,SAAS;wBACZ,OAAO,EAAE,MAAM;qBAChB,CAAC,CAAC;oBACH,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;gBACnB,CAAC;gBAAC,MAAM,CAAC;oBACP,+BAA+B;gBACjC,CAAC;YACH,CAAC;YAED,OAAO;gBACL,QAAQ,EAAE,iBAAiB,CAAC,KAAK,CAAC;gBAClC,WAAW,EAAE,MAAM,CAAC,WAAW;gBAC/B,KAAK,EAAE,IAAI,CAAC,KAAK;aAClB,CAAC;QACJ,CAAC;QAED,oBAAoB;QACpB,MAAM,MAAM,GAAG,CAAC,MAAM,MAAM,CAAC,MAAM,CAAC;YAClC,CAAC,EAAE,aAAa;SACjB,CAAC,CAAkB,CAAC;QAErB,wCAAwC;QACxC,MAAM,KAAK,GAAc,EAAE,CAAC;QAC5B,KAAK,MAAM,MAAM,IAAI,MAAM,CAAC,QAAQ,EAAE,CAAC;YACrC,IAAI,CAAC;gBACH,MAAM,IAAI,GAAG,MAAM,MAAM,CAAC,MAAM,CAAC;oBAC/B,CAAC,EAAE,SAAS;oBACZ,OAAO,EAAE,MAAM;iBAChB,CAAC,CAAC;gBACH,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACnB,CAAC;YAAC,MAAM,CAAC;gBACP,+BAA+B;YACjC,CAAC;QACH,CAAC;QAED,OAAO;YACL,QAAQ,EAAE,iBAAiB,CAAC,KAAK,CAAC;YAClC,WAAW,EAAE,MAAM,CAAC,WAAW;SAChC,CAAC;IACJ,CAAC,CAAC,CAAC;AACL,CAAC"}
@@ -0,0 +1,21 @@
1
+ import type { Request } from "express";
2
+ import type { z } from "zod";
3
+ import type { GetFileSchema } from "../schemas.js";
4
+ import { type TransformedFile } from "../transformers.js";
5
+ /**
6
+ * Get file metadata
7
+ *
8
+ * Parameters:
9
+ * - file_id: File identifier (from message content)
10
+ *
11
+ * Returns:
12
+ * - id: File identifier
13
+ * - size: Human-readable size (e.g., "1.5 MB")
14
+ * - size_bytes: Size in bytes
15
+ * - remote_id: Remote file identifier
16
+ *
17
+ * Note: Download functionality is not supported in stateless mode since
18
+ * session files are cleaned up after each request.
19
+ */
20
+ export declare function getFile(req: Request, args: z.infer<typeof GetFileSchema>): Promise<TransformedFile>;
21
+ //# sourceMappingURL=getFile.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"getFile.d.ts","sourceRoot":"","sources":["../../src/tools/getFile.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AACvC,OAAO,KAAK,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAC7B,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAEnD,OAAO,EAAiB,KAAK,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAEzE;;;;;;;;;;;;;;GAcG;AACH,wBAAsB,OAAO,CAC3B,GAAG,EAAE,OAAO,EACZ,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,OAAO,aAAa,CAAC,GAClC,OAAO,CAAC,eAAe,CAAC,CAgB1B"}
@@ -0,0 +1,33 @@
1
+ import { withClient } from "../helpers.js";
2
+ import { transformFile } from "../transformers.js";
3
+ /**
4
+ * Get file metadata
5
+ *
6
+ * Parameters:
7
+ * - file_id: File identifier (from message content)
8
+ *
9
+ * Returns:
10
+ * - id: File identifier
11
+ * - size: Human-readable size (e.g., "1.5 MB")
12
+ * - size_bytes: Size in bytes
13
+ * - remote_id: Remote file identifier
14
+ *
15
+ * Note: Download functionality is not supported in stateless mode since
16
+ * session files are cleaned up after each request.
17
+ */
18
+ export async function getFile(req, args) {
19
+ return withClient(req, async (client) => {
20
+ // Load chats first to populate file references in local database
21
+ await client.invoke({
22
+ _: "loadChats",
23
+ chat_list: { _: "chatListMain" },
24
+ limit: 100,
25
+ });
26
+ const result = await client.invoke({
27
+ _: "getFile",
28
+ file_id: args.file_id,
29
+ });
30
+ return transformFile(result);
31
+ });
32
+ }
33
+ //# sourceMappingURL=getFile.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"getFile.js","sourceRoot":"","sources":["../../src/tools/getFile.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAC3C,OAAO,EAAE,aAAa,EAAwB,MAAM,oBAAoB,CAAC;AAEzE;;;;;;;;;;;;;;GAcG;AACH,MAAM,CAAC,KAAK,UAAU,OAAO,CAC3B,GAAY,EACZ,IAAmC;IAEnC,OAAO,UAAU,CAAC,GAAG,EAAE,KAAK,EAAE,MAAM,EAAE,EAAE;QACtC,iEAAiE;QACjE,MAAM,MAAM,CAAC,MAAM,CAAC;YAClB,CAAC,EAAE,WAAW;YACd,SAAS,EAAE,EAAE,CAAC,EAAE,cAAc,EAAE;YAChC,KAAK,EAAE,GAAG;SACX,CAAC,CAAC;QAEH,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,MAAM,CAAC;YACjC,CAAC,EAAE,SAAS;YACZ,OAAO,EAAE,IAAI,CAAC,OAAO;SACtB,CAAC,CAAC;QAEH,OAAO,aAAa,CAAC,MAAM,CAAC,CAAC;IAC/B,CAAC,CAAC,CAAC;AACL,CAAC"}
@@ -0,0 +1,27 @@
1
+ import type { Request } from "express";
2
+ import type { z } from "zod";
3
+ import type { GetGroupSchema } from "../schemas.js";
4
+ import { type TransformedGroup } from "../transformers.js";
5
+ /**
6
+ * Get group information - supports basic groups, supergroups, and channels
7
+ *
8
+ * Type detection:
9
+ * - type="auto" (default): Automatically detect group type from chat
10
+ * - type="supergroup": Treat as supergroup/channel
11
+ * - type="basic_group": Treat as basic group
12
+ *
13
+ * Parameters:
14
+ * - group: Group identifier (numeric ID or group name)
15
+ * - type: "auto" | "supergroup" | "basic_group" (default: "auto")
16
+ *
17
+ * Returns:
18
+ * - id: Group's numeric ID
19
+ * - name: Group name
20
+ * - type: "basic_group", "supergroup", or "channel"
21
+ * - member_count: Number of members
22
+ * - is_verified: Whether group is verified (supergroups only)
23
+ * - is_scam: Whether group is marked as scam (supergroups only)
24
+ * - join_date: When user joined the group
25
+ */
26
+ export declare function getGroup(req: Request, args: z.infer<typeof GetGroupSchema>): Promise<TransformedGroup>;
27
+ //# sourceMappingURL=getGroup.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"getGroup.d.ts","sourceRoot":"","sources":["../../src/tools/getGroup.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AACvC,OAAO,KAAK,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAC7B,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAIpD,OAAO,EAGL,KAAK,gBAAgB,EACtB,MAAM,oBAAoB,CAAC;AAE5B;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,wBAAsB,QAAQ,CAC5B,GAAG,EAAE,OAAO,EACZ,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,OAAO,cAAc,CAAC,GACnC,OAAO,CAAC,gBAAgB,CAAC,CA8F3B"}
@@ -0,0 +1,100 @@
1
+ import { withClient } from "../helpers.js";
2
+ import { resolveChat, resolveSupergroup, resolveBasicGroup } from "../resolvers.js";
3
+ import { transformSupergroup, transformBasicGroup, } from "../transformers.js";
4
+ /**
5
+ * Get group information - supports basic groups, supergroups, and channels
6
+ *
7
+ * Type detection:
8
+ * - type="auto" (default): Automatically detect group type from chat
9
+ * - type="supergroup": Treat as supergroup/channel
10
+ * - type="basic_group": Treat as basic group
11
+ *
12
+ * Parameters:
13
+ * - group: Group identifier (numeric ID or group name)
14
+ * - type: "auto" | "supergroup" | "basic_group" (default: "auto")
15
+ *
16
+ * Returns:
17
+ * - id: Group's numeric ID
18
+ * - name: Group name
19
+ * - type: "basic_group", "supergroup", or "channel"
20
+ * - member_count: Number of members
21
+ * - is_verified: Whether group is verified (supergroups only)
22
+ * - is_scam: Whether group is marked as scam (supergroups only)
23
+ * - join_date: When user joined the group
24
+ */
25
+ export async function getGroup(req, args) {
26
+ return withClient(req, async (client) => {
27
+ const groupType = args.type ?? "auto";
28
+ // Load chats first
29
+ await client.invoke({
30
+ _: "loadChats",
31
+ chat_list: { _: "chatListMain" },
32
+ limit: 100,
33
+ });
34
+ if (groupType === "basic_group") {
35
+ // Explicitly treat as basic group
36
+ const basicGroupId = await resolveBasicGroup(client, args.group);
37
+ const result = await client.invoke({
38
+ _: "getBasicGroup",
39
+ basic_group_id: basicGroupId,
40
+ });
41
+ // Get chat info for name
42
+ const chatId = -basicGroupId;
43
+ let chatInfo;
44
+ try {
45
+ chatInfo = (await client.invoke({
46
+ _: "getChat",
47
+ chat_id: chatId,
48
+ }));
49
+ }
50
+ catch {
51
+ // Chat info not available
52
+ }
53
+ return transformBasicGroup(result, chatInfo);
54
+ }
55
+ if (groupType === "supergroup") {
56
+ // Explicitly treat as supergroup
57
+ const supergroupId = await resolveSupergroup(client, args.group);
58
+ const result = await client.invoke({
59
+ _: "getSupergroup",
60
+ supergroup_id: supergroupId,
61
+ });
62
+ // Get chat info for name
63
+ const chatId = -1000000000000 - supergroupId;
64
+ let chatInfo;
65
+ try {
66
+ chatInfo = (await client.invoke({
67
+ _: "getChat",
68
+ chat_id: chatId,
69
+ }));
70
+ }
71
+ catch {
72
+ // Chat info not available
73
+ }
74
+ return transformSupergroup(result, chatInfo);
75
+ }
76
+ // Auto-detect: First resolve to chat, then determine type
77
+ const chatId = await resolveChat(client, args.group);
78
+ const chat = (await client.invoke({
79
+ _: "getChat",
80
+ chat_id: chatId,
81
+ }));
82
+ const chatType = chat.type;
83
+ if (chatType?._ === "chatTypeSupergroup" && chatType.supergroup_id) {
84
+ const result = await client.invoke({
85
+ _: "getSupergroup",
86
+ supergroup_id: chatType.supergroup_id,
87
+ });
88
+ return transformSupergroup(result, chat);
89
+ }
90
+ if (chatType?._ === "chatTypeBasicGroup" && chatType.basic_group_id) {
91
+ const result = await client.invoke({
92
+ _: "getBasicGroup",
93
+ basic_group_id: chatType.basic_group_id,
94
+ });
95
+ return transformBasicGroup(result, chat);
96
+ }
97
+ throw new Error(`"${args.group}" is not a group. It appears to be a ${chatType?._?.replace("chatType", "").toLowerCase() ?? "unknown"} chat.`);
98
+ });
99
+ }
100
+ //# sourceMappingURL=getGroup.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"getGroup.js","sourceRoot":"","sources":["../../src/tools/getGroup.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,17 @@
1
+ import type { Request } from "express";
2
+ import type { z } from "zod";
3
+ import type { GetMeSchema } from "../schemas.js";
4
+ import { type TransformedUser } from "../transformers.js";
5
+ /**
6
+ * Get information about the current Telegram user (the authenticated user)
7
+ *
8
+ * Returns a simplified user profile with:
9
+ * - id: User's numeric ID
10
+ * - name: Full name
11
+ * - username: @username if set
12
+ * - phone: Phone number if visible
13
+ * - status: Online status (e.g., "online", "last seen 2 hours ago")
14
+ * - is_premium: Whether user has Telegram Premium
15
+ */
16
+ export declare function getMe(req: Request, _args: z.infer<typeof GetMeSchema>): Promise<TransformedUser>;
17
+ //# sourceMappingURL=getMe.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"getMe.d.ts","sourceRoot":"","sources":["../../src/tools/getMe.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AACvC,OAAO,KAAK,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAC7B,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAEjD,OAAO,EAAiB,KAAK,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAEzE;;;;;;;;;;GAUG;AACH,wBAAsB,KAAK,CACzB,GAAG,EAAE,OAAO,EACZ,KAAK,EAAE,CAAC,CAAC,KAAK,CAAC,OAAO,WAAW,CAAC,GACjC,OAAO,CAAC,eAAe,CAAC,CAK1B"}