@mseep/telegram-api-mcp 0.1.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.
- package/LICENSE +21 -0
- package/README.md +247 -0
- package/dist/circuit-breaker.d.ts +34 -0
- package/dist/circuit-breaker.d.ts.map +1 -0
- package/dist/circuit-breaker.js +64 -0
- package/dist/circuit-breaker.js.map +1 -0
- package/dist/config.d.ts +29 -0
- package/dist/config.d.ts.map +1 -0
- package/dist/config.js +22 -0
- package/dist/config.js.map +1 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +15 -0
- package/dist/index.js.map +1 -0
- package/dist/method-registry.d.ts +78 -0
- package/dist/method-registry.d.ts.map +1 -0
- package/dist/method-registry.js +117 -0
- package/dist/method-registry.js.map +1 -0
- package/dist/methods/bot.d.ts +3 -0
- package/dist/methods/bot.d.ts.map +1 -0
- package/dist/methods/bot.js +258 -0
- package/dist/methods/bot.js.map +1 -0
- package/dist/methods/business.d.ts +3 -0
- package/dist/methods/business.d.ts.map +1 -0
- package/dist/methods/business.js +137 -0
- package/dist/methods/business.js.map +1 -0
- package/dist/methods/chat.d.ts +3 -0
- package/dist/methods/chat.d.ts.map +1 -0
- package/dist/methods/chat.js +458 -0
- package/dist/methods/chat.js.map +1 -0
- package/dist/methods/editing.d.ts +3 -0
- package/dist/methods/editing.d.ts.map +1 -0
- package/dist/methods/editing.js +153 -0
- package/dist/methods/editing.js.map +1 -0
- package/dist/methods/forum.d.ts +3 -0
- package/dist/methods/forum.d.ts.map +1 -0
- package/dist/methods/forum.js +184 -0
- package/dist/methods/forum.js.map +1 -0
- package/dist/methods/forwarding.d.ts +3 -0
- package/dist/methods/forwarding.d.ts.map +1 -0
- package/dist/methods/forwarding.js +84 -0
- package/dist/methods/forwarding.js.map +1 -0
- package/dist/methods/games.d.ts +3 -0
- package/dist/methods/games.d.ts.map +1 -0
- package/dist/methods/games.js +43 -0
- package/dist/methods/games.js.map +1 -0
- package/dist/methods/gifts.d.ts +3 -0
- package/dist/methods/gifts.d.ts.map +1 -0
- package/dist/methods/gifts.js +87 -0
- package/dist/methods/gifts.js.map +1 -0
- package/dist/methods/index.d.ts +13 -0
- package/dist/methods/index.d.ts.map +1 -0
- package/dist/methods/index.js +57 -0
- package/dist/methods/index.js.map +1 -0
- package/dist/methods/inline.d.ts +3 -0
- package/dist/methods/inline.d.ts.map +1 -0
- package/dist/methods/inline.js +32 -0
- package/dist/methods/inline.js.map +1 -0
- package/dist/methods/managed-bots.d.ts +3 -0
- package/dist/methods/managed-bots.d.ts.map +1 -0
- package/dist/methods/managed-bots.js +33 -0
- package/dist/methods/managed-bots.js.map +1 -0
- package/dist/methods/messages.d.ts +3 -0
- package/dist/methods/messages.d.ts.map +1 -0
- package/dist/methods/messages.js +357 -0
- package/dist/methods/messages.js.map +1 -0
- package/dist/methods/other.d.ts +3 -0
- package/dist/methods/other.d.ts.map +1 -0
- package/dist/methods/other.js +247 -0
- package/dist/methods/other.js.map +1 -0
- package/dist/methods/passport.d.ts +3 -0
- package/dist/methods/passport.d.ts.map +1 -0
- package/dist/methods/passport.js +15 -0
- package/dist/methods/passport.js.map +1 -0
- package/dist/methods/payments.d.ts +3 -0
- package/dist/methods/payments.d.ts.map +1 -0
- package/dist/methods/payments.js +128 -0
- package/dist/methods/payments.js.map +1 -0
- package/dist/methods/stickers.d.ts +3 -0
- package/dist/methods/stickers.d.ts.map +1 -0
- package/dist/methods/stickers.js +208 -0
- package/dist/methods/stickers.js.map +1 -0
- package/dist/methods/stories.d.ts +3 -0
- package/dist/methods/stories.d.ts.map +1 -0
- package/dist/methods/stories.js +58 -0
- package/dist/methods/stories.js.map +1 -0
- package/dist/methods/updates.d.ts +3 -0
- package/dist/methods/updates.d.ts.map +1 -0
- package/dist/methods/updates.js +48 -0
- package/dist/methods/updates.js.map +1 -0
- package/dist/post-log.d.ts +14 -0
- package/dist/post-log.d.ts.map +1 -0
- package/dist/post-log.js +48 -0
- package/dist/post-log.js.map +1 -0
- package/dist/rate-limiter.d.ts +25 -0
- package/dist/rate-limiter.d.ts.map +1 -0
- package/dist/rate-limiter.js +93 -0
- package/dist/rate-limiter.js.map +1 -0
- package/dist/server.d.ts +3 -0
- package/dist/server.d.ts.map +1 -0
- package/dist/server.js +287 -0
- package/dist/server.js.map +1 -0
- package/dist/telegram-client.d.ts +28 -0
- package/dist/telegram-client.d.ts.map +1 -0
- package/dist/telegram-client.js +254 -0
- package/dist/telegram-client.js.map +1 -0
- package/dist/trail.d.ts +86 -0
- package/dist/trail.d.ts.map +1 -0
- package/dist/trail.js +185 -0
- package/dist/trail.js.map +1 -0
- package/package.json +61 -0
- package/server.json +18 -0
- package/smithery.yaml +27 -0
|
@@ -0,0 +1,208 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
import { ChatId, FileInput, BooleanFlag, commonSendParams, ANNOTATIONS } from "../method-registry.js";
|
|
3
|
+
export const stickerMethods = [
|
|
4
|
+
{
|
|
5
|
+
apiMethod: "sendSticker",
|
|
6
|
+
annotations: ANNOTATIONS.send,
|
|
7
|
+
toolName: "send_sticker",
|
|
8
|
+
description: "Send a sticker.",
|
|
9
|
+
category: "stickers",
|
|
10
|
+
needsChatId: true,
|
|
11
|
+
canUploadFiles: true,
|
|
12
|
+
returns: "Message",
|
|
13
|
+
params: [
|
|
14
|
+
{ name: "chat_id", type: ChatId, required: true, description: "Target chat ID" },
|
|
15
|
+
{ name: "sticker", type: FileInput, required: true, description: "Sticker to send (file_id, URL, or path)" },
|
|
16
|
+
{ name: "emoji", type: z.string(), required: false, description: "Associated emoji" },
|
|
17
|
+
...commonSendParams(),
|
|
18
|
+
],
|
|
19
|
+
},
|
|
20
|
+
{
|
|
21
|
+
apiMethod: "getStickerSet",
|
|
22
|
+
annotations: ANNOTATIONS.readOnly,
|
|
23
|
+
toolName: "get_sticker_set",
|
|
24
|
+
description: "Get a sticker set by name.",
|
|
25
|
+
category: "stickers",
|
|
26
|
+
needsChatId: false,
|
|
27
|
+
canUploadFiles: false,
|
|
28
|
+
returns: "StickerSet",
|
|
29
|
+
params: [
|
|
30
|
+
{ name: "name", type: z.string(), required: true, description: "Sticker set name" },
|
|
31
|
+
],
|
|
32
|
+
},
|
|
33
|
+
{
|
|
34
|
+
apiMethod: "getCustomEmojiStickers",
|
|
35
|
+
annotations: ANNOTATIONS.readOnly,
|
|
36
|
+
toolName: "get_custom_emoji_stickers",
|
|
37
|
+
description: "Get information about custom emoji stickers by their identifiers.",
|
|
38
|
+
category: "stickers",
|
|
39
|
+
needsChatId: false,
|
|
40
|
+
canUploadFiles: false,
|
|
41
|
+
returns: "Array of Sticker",
|
|
42
|
+
params: [
|
|
43
|
+
{ name: "custom_emoji_ids", type: z.array(z.string()), required: true, description: "Custom emoji IDs" },
|
|
44
|
+
],
|
|
45
|
+
},
|
|
46
|
+
{
|
|
47
|
+
annotations: ANNOTATIONS.modify,
|
|
48
|
+
apiMethod: "uploadStickerFile",
|
|
49
|
+
toolName: "upload_sticker_file",
|
|
50
|
+
description: "Upload a sticker file to Telegram for later use in createNewStickerSet.",
|
|
51
|
+
category: "stickers",
|
|
52
|
+
needsChatId: false,
|
|
53
|
+
canUploadFiles: true,
|
|
54
|
+
returns: "File",
|
|
55
|
+
params: [
|
|
56
|
+
{ name: "user_id", type: z.number().int(), required: true, description: "User ID of sticker set owner" },
|
|
57
|
+
{ name: "sticker", type: FileInput, required: true, description: "Sticker file" },
|
|
58
|
+
{ name: "sticker_format", type: z.enum(["static", "animated", "video"]), required: true, description: "Sticker format" },
|
|
59
|
+
],
|
|
60
|
+
},
|
|
61
|
+
{
|
|
62
|
+
apiMethod: "createNewStickerSet",
|
|
63
|
+
annotations: ANNOTATIONS.send,
|
|
64
|
+
toolName: "create_new_sticker_set",
|
|
65
|
+
description: "Create a new sticker set owned by a user.",
|
|
66
|
+
category: "stickers",
|
|
67
|
+
needsChatId: false,
|
|
68
|
+
canUploadFiles: false,
|
|
69
|
+
returns: "StickerSet",
|
|
70
|
+
params: [
|
|
71
|
+
{ name: "user_id", type: z.number().int(), required: true, description: "User ID of sticker set owner" },
|
|
72
|
+
{ name: "name", type: z.string(), required: true, description: "Short name (e.g. animals_by_bot)" },
|
|
73
|
+
{ name: "title", type: z.string(), required: true, description: "Sticker set title" },
|
|
74
|
+
{ name: "stickers", type: z.any(), required: true, description: "Array of InputSticker objects" },
|
|
75
|
+
{ name: "sticker_type", type: z.enum(["regular", "mask", "custom_emoji"]), required: false, description: "Sticker type" },
|
|
76
|
+
{ name: "needs_repainting", type: BooleanFlag, required: false, description: "Allow repainting" },
|
|
77
|
+
],
|
|
78
|
+
},
|
|
79
|
+
{
|
|
80
|
+
annotations: ANNOTATIONS.modify,
|
|
81
|
+
apiMethod: "addStickerToSet",
|
|
82
|
+
toolName: "add_sticker_to_set",
|
|
83
|
+
description: "Add a sticker to an existing set.",
|
|
84
|
+
category: "stickers",
|
|
85
|
+
needsChatId: false,
|
|
86
|
+
canUploadFiles: false,
|
|
87
|
+
returns: "true",
|
|
88
|
+
params: [
|
|
89
|
+
{ name: "user_id", type: z.number().int(), required: true, description: "User ID of set owner" },
|
|
90
|
+
{ name: "name", type: z.string(), required: true, description: "Sticker set name" },
|
|
91
|
+
{ name: "sticker", type: z.any(), required: true, description: "InputSticker object" },
|
|
92
|
+
],
|
|
93
|
+
},
|
|
94
|
+
{
|
|
95
|
+
apiMethod: "setStickerPositionInSet",
|
|
96
|
+
annotations: ANNOTATIONS.modify,
|
|
97
|
+
toolName: "set_sticker_position_in_set",
|
|
98
|
+
description: "Move a sticker to a specific position in the set.",
|
|
99
|
+
category: "stickers",
|
|
100
|
+
needsChatId: false,
|
|
101
|
+
canUploadFiles: false,
|
|
102
|
+
returns: "true",
|
|
103
|
+
params: [
|
|
104
|
+
{ name: "sticker", type: z.string(), required: true, description: "Sticker file_id" },
|
|
105
|
+
{ name: "position", type: z.number().int().min(0), required: true, description: "New position (0-based)" },
|
|
106
|
+
],
|
|
107
|
+
},
|
|
108
|
+
{
|
|
109
|
+
apiMethod: "deleteStickerFromSet",
|
|
110
|
+
annotations: ANNOTATIONS.destructive,
|
|
111
|
+
toolName: "delete_sticker_from_set",
|
|
112
|
+
description: "Delete a sticker from a set.",
|
|
113
|
+
category: "stickers",
|
|
114
|
+
needsChatId: false,
|
|
115
|
+
canUploadFiles: false,
|
|
116
|
+
returns: "true",
|
|
117
|
+
params: [
|
|
118
|
+
{ name: "sticker", type: z.string(), required: true, description: "Sticker file_id" },
|
|
119
|
+
],
|
|
120
|
+
},
|
|
121
|
+
{
|
|
122
|
+
annotations: ANNOTATIONS.modify,
|
|
123
|
+
apiMethod: "replaceStickerInSet",
|
|
124
|
+
toolName: "replace_sticker_in_set",
|
|
125
|
+
description: "Replace an existing sticker in a set with a new one.",
|
|
126
|
+
category: "stickers",
|
|
127
|
+
needsChatId: false,
|
|
128
|
+
canUploadFiles: false,
|
|
129
|
+
returns: "true",
|
|
130
|
+
params: [
|
|
131
|
+
{ name: "user_id", type: z.number().int(), required: true, description: "User ID of set owner" },
|
|
132
|
+
{ name: "name", type: z.string(), required: true, description: "Sticker set name" },
|
|
133
|
+
{ name: "old_sticker", type: z.string(), required: true, description: "file_id of sticker to replace" },
|
|
134
|
+
{ name: "sticker", type: z.any(), required: true, description: "New InputSticker object" },
|
|
135
|
+
],
|
|
136
|
+
},
|
|
137
|
+
{
|
|
138
|
+
apiMethod: "setStickerSetTitle",
|
|
139
|
+
annotations: ANNOTATIONS.modify,
|
|
140
|
+
toolName: "set_sticker_set_title",
|
|
141
|
+
description: "Set the title of a sticker set.",
|
|
142
|
+
category: "stickers",
|
|
143
|
+
needsChatId: false,
|
|
144
|
+
canUploadFiles: false,
|
|
145
|
+
returns: "true",
|
|
146
|
+
params: [
|
|
147
|
+
{ name: "name", type: z.string(), required: true, description: "Sticker set name" },
|
|
148
|
+
{ name: "title", type: z.string(), required: true, description: "New title" },
|
|
149
|
+
],
|
|
150
|
+
},
|
|
151
|
+
{
|
|
152
|
+
apiMethod: "setStickerSetThumbnail",
|
|
153
|
+
annotations: ANNOTATIONS.modify,
|
|
154
|
+
toolName: "set_sticker_set_thumbnail",
|
|
155
|
+
description: "Set the thumbnail of a sticker set.",
|
|
156
|
+
category: "stickers",
|
|
157
|
+
needsChatId: false,
|
|
158
|
+
canUploadFiles: true,
|
|
159
|
+
returns: "true",
|
|
160
|
+
params: [
|
|
161
|
+
{ name: "name", type: z.string(), required: true, description: "Sticker set name" },
|
|
162
|
+
{ name: "user_id", type: z.number().int(), required: true, description: "User ID of set owner" },
|
|
163
|
+
{ name: "thumbnail", type: FileInput, required: false, description: "Thumbnail file" },
|
|
164
|
+
],
|
|
165
|
+
},
|
|
166
|
+
{
|
|
167
|
+
apiMethod: "setCustomEmojiStickerSetThumbnail",
|
|
168
|
+
annotations: ANNOTATIONS.modify,
|
|
169
|
+
toolName: "set_custom_emoji_sticker_set_thumbnail",
|
|
170
|
+
description: "Set the thumbnail of a custom emoji sticker set.",
|
|
171
|
+
category: "stickers",
|
|
172
|
+
needsChatId: false,
|
|
173
|
+
canUploadFiles: false,
|
|
174
|
+
returns: "true",
|
|
175
|
+
params: [
|
|
176
|
+
{ name: "name", type: z.string(), required: true, description: "Sticker set name" },
|
|
177
|
+
{ name: "custom_emoji_id", type: z.string(), required: false, description: "Custom emoji ID for thumbnail" },
|
|
178
|
+
],
|
|
179
|
+
},
|
|
180
|
+
{
|
|
181
|
+
apiMethod: "setStickerEmojiList",
|
|
182
|
+
annotations: ANNOTATIONS.modify,
|
|
183
|
+
toolName: "set_sticker_emoji_list",
|
|
184
|
+
description: "Change the list of emoji associated with a sticker.",
|
|
185
|
+
category: "stickers",
|
|
186
|
+
needsChatId: false,
|
|
187
|
+
canUploadFiles: false,
|
|
188
|
+
returns: "true",
|
|
189
|
+
params: [
|
|
190
|
+
{ name: "sticker", type: z.string(), required: true, description: "Sticker file_id" },
|
|
191
|
+
{ name: "emoji_list", type: z.array(z.string()), required: true, description: "Array of emoji" },
|
|
192
|
+
],
|
|
193
|
+
},
|
|
194
|
+
{
|
|
195
|
+
apiMethod: "deleteStickerSet",
|
|
196
|
+
annotations: ANNOTATIONS.destructive,
|
|
197
|
+
toolName: "delete_sticker_set",
|
|
198
|
+
description: "Delete a sticker set created by the bot.",
|
|
199
|
+
category: "stickers",
|
|
200
|
+
needsChatId: false,
|
|
201
|
+
canUploadFiles: false,
|
|
202
|
+
returns: "true",
|
|
203
|
+
params: [
|
|
204
|
+
{ name: "name", type: z.string(), required: true, description: "Sticker set name" },
|
|
205
|
+
],
|
|
206
|
+
},
|
|
207
|
+
];
|
|
208
|
+
//# sourceMappingURL=stickers.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"stickers.js","sourceRoot":"","sources":["../../src/methods/stickers.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"stories.d.ts","sourceRoot":"","sources":["../../src/methods/stories.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,SAAS,EAAyB,MAAM,uBAAuB,CAAC;AAEzE,eAAO,MAAM,YAAY,EAAE,SAAS,EAsDnC,CAAC"}
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
import { ChatId, ANNOTATIONS } from "../method-registry.js";
|
|
3
|
+
export const storyMethods = [
|
|
4
|
+
{
|
|
5
|
+
annotations: ANNOTATIONS.send,
|
|
6
|
+
apiMethod: "postStory", toolName: "post_story",
|
|
7
|
+
description: "Post a story on behalf of a business account (v9.0).", category: "stories",
|
|
8
|
+
needsChatId: false, canUploadFiles: false, returns: "Story",
|
|
9
|
+
params: [
|
|
10
|
+
{ name: "business_connection_id", type: z.string(), required: true, description: "Business connection ID" },
|
|
11
|
+
{ name: "content", type: z.any(), required: true, description: "InputStoryContent (photo or video)" },
|
|
12
|
+
{ name: "active_period", type: z.number().int(), required: true, description: "Story active period in seconds" },
|
|
13
|
+
{ name: "caption", type: z.string(), required: false, description: "Story caption" },
|
|
14
|
+
{ name: "parse_mode", type: z.enum(["HTML", "Markdown", "MarkdownV2"]), required: false, description: "Caption formatting" },
|
|
15
|
+
{ name: "caption_entities", type: z.any(), required: false, description: "Caption entities" },
|
|
16
|
+
{ name: "areas", type: z.any(), required: false, description: "Array of StoryArea" },
|
|
17
|
+
{ name: "protect_content", type: z.boolean(), required: false, description: "Protect from forwarding" },
|
|
18
|
+
{ name: "post_to_chat_page", type: z.boolean(), required: false, description: "Post story to the chat page" },
|
|
19
|
+
],
|
|
20
|
+
},
|
|
21
|
+
{
|
|
22
|
+
annotations: ANNOTATIONS.modify,
|
|
23
|
+
apiMethod: "editStory", toolName: "edit_story",
|
|
24
|
+
description: "Edit a posted story (v9.0).", category: "stories",
|
|
25
|
+
needsChatId: false, canUploadFiles: false, returns: "Story",
|
|
26
|
+
params: [
|
|
27
|
+
{ name: "business_connection_id", type: z.string(), required: true, description: "Business connection ID" },
|
|
28
|
+
{ name: "story_id", type: z.number().int(), required: true, description: "Story ID" },
|
|
29
|
+
{ name: "content", type: z.any(), required: false, description: "New InputStoryContent" },
|
|
30
|
+
{ name: "caption", type: z.string(), required: false, description: "New caption" },
|
|
31
|
+
{ name: "parse_mode", type: z.enum(["HTML", "Markdown", "MarkdownV2"]), required: false, description: "Caption formatting" },
|
|
32
|
+
{ name: "caption_entities", type: z.any(), required: false, description: "Caption entities" },
|
|
33
|
+
{ name: "areas", type: z.any(), required: false, description: "Array of StoryArea" },
|
|
34
|
+
],
|
|
35
|
+
},
|
|
36
|
+
{
|
|
37
|
+
annotations: ANNOTATIONS.destructive,
|
|
38
|
+
apiMethod: "deleteStory", toolName: "delete_story",
|
|
39
|
+
description: "Delete a story (v9.0).", category: "stories",
|
|
40
|
+
needsChatId: false, canUploadFiles: false, returns: "true",
|
|
41
|
+
params: [
|
|
42
|
+
{ name: "business_connection_id", type: z.string(), required: true, description: "Business connection ID" },
|
|
43
|
+
{ name: "story_id", type: z.number().int(), required: true, description: "Story ID" },
|
|
44
|
+
],
|
|
45
|
+
},
|
|
46
|
+
{
|
|
47
|
+
annotations: ANNOTATIONS.send,
|
|
48
|
+
apiMethod: "repostStory", toolName: "repost_story",
|
|
49
|
+
description: "Repost a story to another chat (v9.3).", category: "stories",
|
|
50
|
+
needsChatId: true, canUploadFiles: false, returns: "Story",
|
|
51
|
+
params: [
|
|
52
|
+
{ name: "chat_id", type: ChatId, required: true, description: "Target chat ID" },
|
|
53
|
+
{ name: "story_sender_chat_id", type: z.number().int(), required: true, description: "Original story sender chat ID" },
|
|
54
|
+
{ name: "story_id", type: z.number().int(), required: true, description: "Story ID to repost" },
|
|
55
|
+
],
|
|
56
|
+
},
|
|
57
|
+
];
|
|
58
|
+
//# sourceMappingURL=stories.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"stories.js","sourceRoot":"","sources":["../../src/methods/stories.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"updates.d.ts","sourceRoot":"","sources":["../../src/methods/updates.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,SAAS,EAA8B,MAAM,uBAAuB,CAAC;AAE9E,eAAO,MAAM,aAAa,EAAE,SAAS,EA4CpC,CAAC"}
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
import { BooleanFlag, ANNOTATIONS } from "../method-registry.js";
|
|
3
|
+
export const updateMethods = [
|
|
4
|
+
{
|
|
5
|
+
annotations: ANNOTATIONS.readOnly,
|
|
6
|
+
apiMethod: "getUpdates", toolName: "get_updates",
|
|
7
|
+
description: "Receive incoming updates via long polling.", category: "updates",
|
|
8
|
+
needsChatId: false, canUploadFiles: false, returns: "Array of Update",
|
|
9
|
+
params: [
|
|
10
|
+
{ name: "offset", type: z.number().int(), required: false, description: "First update ID to return" },
|
|
11
|
+
{ name: "limit", type: z.number().int().min(1).max(100), required: false, description: "Max updates (1-100, default: 100)" },
|
|
12
|
+
{ name: "timeout", type: z.number().int(), required: false, description: "Long polling timeout in seconds" },
|
|
13
|
+
{ name: "allowed_updates", type: z.array(z.string()), required: false, description: "Update types to receive" },
|
|
14
|
+
],
|
|
15
|
+
},
|
|
16
|
+
{
|
|
17
|
+
annotations: ANNOTATIONS.modify,
|
|
18
|
+
apiMethod: "setWebhook", toolName: "set_webhook",
|
|
19
|
+
description: "Set a webhook URL for receiving updates.", category: "updates",
|
|
20
|
+
needsChatId: false, canUploadFiles: true, returns: "true",
|
|
21
|
+
params: [
|
|
22
|
+
{ name: "url", type: z.string(), required: true, description: "HTTPS URL for webhook" },
|
|
23
|
+
{ name: "certificate", type: z.string(), required: false, description: "Public key certificate file" },
|
|
24
|
+
{ name: "ip_address", type: z.string(), required: false, description: "Fixed IP for webhook" },
|
|
25
|
+
{ name: "max_connections", type: z.number().int().min(1).max(100), required: false, description: "Max simultaneous connections (1-100)" },
|
|
26
|
+
{ name: "allowed_updates", type: z.array(z.string()), required: false, description: "Update types to receive" },
|
|
27
|
+
{ name: "drop_pending_updates", type: BooleanFlag, required: false, description: "Drop pending updates" },
|
|
28
|
+
{ name: "secret_token", type: z.string().max(256), required: false, description: "Secret token for verification (1-256 chars)" },
|
|
29
|
+
],
|
|
30
|
+
},
|
|
31
|
+
{
|
|
32
|
+
annotations: ANNOTATIONS.destructive,
|
|
33
|
+
apiMethod: "deleteWebhook", toolName: "delete_webhook",
|
|
34
|
+
description: "Remove webhook integration and switch back to getUpdates.", category: "updates",
|
|
35
|
+
needsChatId: false, canUploadFiles: false, returns: "true",
|
|
36
|
+
params: [
|
|
37
|
+
{ name: "drop_pending_updates", type: BooleanFlag, required: false, description: "Drop pending updates" },
|
|
38
|
+
],
|
|
39
|
+
},
|
|
40
|
+
{
|
|
41
|
+
annotations: ANNOTATIONS.readOnly,
|
|
42
|
+
apiMethod: "getWebhookInfo", toolName: "get_webhook_info",
|
|
43
|
+
description: "Get current webhook status.", category: "updates",
|
|
44
|
+
needsChatId: false, canUploadFiles: false, returns: "WebhookInfo",
|
|
45
|
+
params: [],
|
|
46
|
+
},
|
|
47
|
+
];
|
|
48
|
+
//# sourceMappingURL=updates.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"updates.js","sourceRoot":"","sources":["../../src/methods/updates.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
export interface PostLogEntry {
|
|
2
|
+
timestamp: string;
|
|
3
|
+
method: string;
|
|
4
|
+
chat_id: string | number;
|
|
5
|
+
message_id?: number;
|
|
6
|
+
/** External content ID (e.g. Civitai image ID) — for dedup by caller */
|
|
7
|
+
content_id?: string;
|
|
8
|
+
caption_preview?: string;
|
|
9
|
+
}
|
|
10
|
+
/** Append a log entry after a successful send/forward/copy. */
|
|
11
|
+
export declare function logPost(entry: PostLogEntry): Promise<void>;
|
|
12
|
+
/** Read post history, optionally filtered by chat_id. Returns newest first. */
|
|
13
|
+
export declare function getPostHistory(chatId?: string | number, limit?: number): Promise<PostLogEntry[]>;
|
|
14
|
+
//# sourceMappingURL=post-log.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"post-log.d.ts","sourceRoot":"","sources":["../src/post-log.ts"],"names":[],"mappings":"AAeA,MAAM,WAAW,YAAY;IAC3B,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,GAAG,MAAM,CAAC;IACzB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,wEAAwE;IACxE,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,eAAe,CAAC,EAAE,MAAM,CAAC;CAC1B;AAKD,+DAA+D;AAC/D,wBAAgB,OAAO,CAAC,KAAK,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC,CAO1D;AAED,+EAA+E;AAC/E,wBAAsB,cAAc,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,KAAK,SAAK,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC,CAoBlG"}
|
package/dist/post-log.js
ADDED
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
import { readFile, writeFile, mkdir } from "node:fs/promises";
|
|
2
|
+
import { dirname, join } from "node:path";
|
|
3
|
+
import { fileURLToPath } from "node:url";
|
|
4
|
+
const __dirname = dirname(fileURLToPath(import.meta.url));
|
|
5
|
+
const LOG_PATH = join(__dirname, "..", "data", "post-log.jsonl");
|
|
6
|
+
/** Ensure data dir exists — called once lazily. */
|
|
7
|
+
let dirReady = false;
|
|
8
|
+
async function ensureDir() {
|
|
9
|
+
if (dirReady)
|
|
10
|
+
return;
|
|
11
|
+
await mkdir(dirname(LOG_PATH), { recursive: true });
|
|
12
|
+
dirReady = true;
|
|
13
|
+
}
|
|
14
|
+
/** Async mutex: serializes writes to prevent race conditions. */
|
|
15
|
+
let writeQueue = Promise.resolve();
|
|
16
|
+
/** Append a log entry after a successful send/forward/copy. */
|
|
17
|
+
export function logPost(entry) {
|
|
18
|
+
writeQueue = writeQueue.then(async () => {
|
|
19
|
+
await ensureDir();
|
|
20
|
+
const line = JSON.stringify(entry) + "\n";
|
|
21
|
+
await writeFile(LOG_PATH, line, { flag: "a" });
|
|
22
|
+
});
|
|
23
|
+
return writeQueue;
|
|
24
|
+
}
|
|
25
|
+
/** Read post history, optionally filtered by chat_id. Returns newest first. */
|
|
26
|
+
export async function getPostHistory(chatId, limit = 50) {
|
|
27
|
+
let raw;
|
|
28
|
+
try {
|
|
29
|
+
raw = await readFile(LOG_PATH, "utf-8");
|
|
30
|
+
}
|
|
31
|
+
catch {
|
|
32
|
+
return [];
|
|
33
|
+
}
|
|
34
|
+
const lines = raw.trim().split("\n").filter(Boolean);
|
|
35
|
+
const entries = [];
|
|
36
|
+
for (const l of lines) {
|
|
37
|
+
try {
|
|
38
|
+
entries.push(JSON.parse(l));
|
|
39
|
+
}
|
|
40
|
+
catch { /* skip corrupt line */ }
|
|
41
|
+
}
|
|
42
|
+
if (chatId !== undefined) {
|
|
43
|
+
const filtered = entries.filter((e) => String(e.chat_id) === String(chatId));
|
|
44
|
+
return filtered.reverse().slice(0, limit);
|
|
45
|
+
}
|
|
46
|
+
return entries.reverse().slice(0, limit);
|
|
47
|
+
}
|
|
48
|
+
//# sourceMappingURL=post-log.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"post-log.js","sourceRoot":"","sources":["../src/post-log.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,kBAAkB,CAAC;AAC9D,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAC1C,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAEzC,MAAM,SAAS,GAAG,OAAO,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;AAC1D,MAAM,QAAQ,GAAG,IAAI,CAAC,SAAS,EAAE,IAAI,EAAE,MAAM,EAAE,gBAAgB,CAAC,CAAC;AAEjE,mDAAmD;AACnD,IAAI,QAAQ,GAAG,KAAK,CAAC;AACrB,KAAK,UAAU,SAAS;IACtB,IAAI,QAAQ;QAAE,OAAO;IACrB,MAAM,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IACpD,QAAQ,GAAG,IAAI,CAAC;AAClB,CAAC;AAYD,iEAAiE;AACjE,IAAI,UAAU,GAAkB,OAAO,CAAC,OAAO,EAAE,CAAC;AAElD,+DAA+D;AAC/D,MAAM,UAAU,OAAO,CAAC,KAAmB;IACzC,UAAU,GAAG,UAAU,CAAC,IAAI,CAAC,KAAK,IAAI,EAAE;QACtC,MAAM,SAAS,EAAE,CAAC;QAClB,MAAM,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC;QAC1C,MAAM,SAAS,CAAC,QAAQ,EAAE,IAAI,EAAE,EAAE,IAAI,EAAE,GAAG,EAAE,CAAC,CAAC;IACjD,CAAC,CAAC,CAAC;IACH,OAAO,UAAU,CAAC;AACpB,CAAC;AAED,+EAA+E;AAC/E,MAAM,CAAC,KAAK,UAAU,cAAc,CAAC,MAAwB,EAAE,KAAK,GAAG,EAAE;IACvE,IAAI,GAAW,CAAC;IAChB,IAAI,CAAC;QACH,GAAG,GAAG,MAAM,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;IAC1C,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,CAAC;IACZ,CAAC;IAED,MAAM,KAAK,GAAG,GAAG,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;IACrD,MAAM,OAAO,GAAmB,EAAE,CAAC;IACnC,KAAK,MAAM,CAAC,IAAI,KAAK,EAAE,CAAC;QACtB,IAAI,CAAC;YAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;QAAC,CAAC;QAAC,MAAM,CAAC,CAAC,uBAAuB,CAAC,CAAC;IACxE,CAAC;IAED,IAAI,MAAM,KAAK,SAAS,EAAE,CAAC;QACzB,MAAM,QAAQ,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC;QAC7E,OAAO,QAAQ,CAAC,OAAO,EAAE,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;IAC5C,CAAC;IAED,OAAO,OAAO,CAAC,OAAO,EAAE,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;AAC3C,CAAC"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Two-level rate limiter: global (per second) + per-chat (per minute).
|
|
3
|
+
* Uses token bucket algorithm with async mutex to prevent race conditions.
|
|
4
|
+
*/
|
|
5
|
+
export declare class RateLimiter {
|
|
6
|
+
private globalTokens;
|
|
7
|
+
private globalMax;
|
|
8
|
+
private globalLastRefill;
|
|
9
|
+
private chatBuckets;
|
|
10
|
+
private chatMax;
|
|
11
|
+
/** Async mutex: serializes all acquire calls to prevent race conditions */
|
|
12
|
+
private queue;
|
|
13
|
+
constructor(globalPerSecond: number, perChatPerMinute: number);
|
|
14
|
+
/**
|
|
15
|
+
* Wait until a request to the given chat is allowed.
|
|
16
|
+
* Serialized via promise chain — no concurrent access to token state.
|
|
17
|
+
*/
|
|
18
|
+
acquire(chatId?: string): Promise<number>;
|
|
19
|
+
private acquireGlobal;
|
|
20
|
+
private refillGlobal;
|
|
21
|
+
private acquireChat;
|
|
22
|
+
/** Clean up stale per-chat buckets (call periodically). */
|
|
23
|
+
cleanup(): void;
|
|
24
|
+
}
|
|
25
|
+
//# sourceMappingURL=rate-limiter.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"rate-limiter.d.ts","sourceRoot":"","sources":["../src/rate-limiter.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,qBAAa,WAAW;IACtB,OAAO,CAAC,YAAY,CAAS;IAC7B,OAAO,CAAC,SAAS,CAAS;IAC1B,OAAO,CAAC,gBAAgB,CAAS;IAEjC,OAAO,CAAC,WAAW,CAA6D;IAChF,OAAO,CAAC,OAAO,CAAS;IAExB,2EAA2E;IAC3E,OAAO,CAAC,KAAK,CAAoC;gBAErC,eAAe,EAAE,MAAM,EAAE,gBAAgB,EAAE,MAAM;IAO7D;;;OAGG;IACG,OAAO,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;YAajC,aAAa;IAe3B,OAAO,CAAC,YAAY;YAQN,WAAW;IA8BzB,2DAA2D;IAC3D,OAAO,IAAI,IAAI;CAQhB"}
|
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Two-level rate limiter: global (per second) + per-chat (per minute).
|
|
3
|
+
* Uses token bucket algorithm with async mutex to prevent race conditions.
|
|
4
|
+
*/
|
|
5
|
+
export class RateLimiter {
|
|
6
|
+
globalTokens;
|
|
7
|
+
globalMax;
|
|
8
|
+
globalLastRefill;
|
|
9
|
+
chatBuckets = new Map();
|
|
10
|
+
chatMax;
|
|
11
|
+
/** Async mutex: serializes all acquire calls to prevent race conditions */
|
|
12
|
+
queue = Promise.resolve();
|
|
13
|
+
constructor(globalPerSecond, perChatPerMinute) {
|
|
14
|
+
this.globalMax = globalPerSecond;
|
|
15
|
+
this.globalTokens = globalPerSecond;
|
|
16
|
+
this.globalLastRefill = Date.now();
|
|
17
|
+
this.chatMax = perChatPerMinute;
|
|
18
|
+
}
|
|
19
|
+
/**
|
|
20
|
+
* Wait until a request to the given chat is allowed.
|
|
21
|
+
* Serialized via promise chain — no concurrent access to token state.
|
|
22
|
+
*/
|
|
23
|
+
async acquire(chatId) {
|
|
24
|
+
return new Promise((resolve) => {
|
|
25
|
+
this.queue = this.queue.then(async () => {
|
|
26
|
+
let totalWait = 0;
|
|
27
|
+
totalWait += await this.acquireGlobal();
|
|
28
|
+
if (chatId) {
|
|
29
|
+
totalWait += await this.acquireChat(String(chatId));
|
|
30
|
+
}
|
|
31
|
+
resolve(totalWait);
|
|
32
|
+
});
|
|
33
|
+
});
|
|
34
|
+
}
|
|
35
|
+
async acquireGlobal() {
|
|
36
|
+
this.refillGlobal();
|
|
37
|
+
if (this.globalTokens >= 1) {
|
|
38
|
+
this.globalTokens -= 1;
|
|
39
|
+
return 0;
|
|
40
|
+
}
|
|
41
|
+
const waitMs = Math.ceil(1000 / this.globalMax);
|
|
42
|
+
await sleep(waitMs);
|
|
43
|
+
this.refillGlobal();
|
|
44
|
+
this.globalTokens = Math.max(0, this.globalTokens - 1);
|
|
45
|
+
return waitMs;
|
|
46
|
+
}
|
|
47
|
+
refillGlobal() {
|
|
48
|
+
const now = Date.now();
|
|
49
|
+
const elapsed = now - this.globalLastRefill;
|
|
50
|
+
const refill = (elapsed / 1000) * this.globalMax;
|
|
51
|
+
this.globalTokens = Math.min(this.globalMax, this.globalTokens + refill);
|
|
52
|
+
this.globalLastRefill = now;
|
|
53
|
+
}
|
|
54
|
+
async acquireChat(chatId) {
|
|
55
|
+
let bucket = this.chatBuckets.get(chatId);
|
|
56
|
+
if (!bucket) {
|
|
57
|
+
bucket = { tokens: this.chatMax, lastRefill: Date.now() };
|
|
58
|
+
this.chatBuckets.set(chatId, bucket);
|
|
59
|
+
}
|
|
60
|
+
const now = Date.now();
|
|
61
|
+
const elapsed = now - bucket.lastRefill;
|
|
62
|
+
const refill = (elapsed / 60000) * this.chatMax;
|
|
63
|
+
bucket.tokens = Math.min(this.chatMax, bucket.tokens + refill);
|
|
64
|
+
bucket.lastRefill = now;
|
|
65
|
+
if (bucket.tokens >= 1) {
|
|
66
|
+
bucket.tokens -= 1;
|
|
67
|
+
return 0;
|
|
68
|
+
}
|
|
69
|
+
const waitMs = Math.ceil(60000 / this.chatMax);
|
|
70
|
+
await sleep(waitMs);
|
|
71
|
+
// Re-refill after sleep (time passed, new tokens available)
|
|
72
|
+
const nowAfter = Date.now();
|
|
73
|
+
const elapsedAfter = nowAfter - bucket.lastRefill;
|
|
74
|
+
const refillAfter = (elapsedAfter / 60000) * this.chatMax;
|
|
75
|
+
bucket.tokens = Math.min(this.chatMax, bucket.tokens + refillAfter);
|
|
76
|
+
bucket.lastRefill = nowAfter;
|
|
77
|
+
bucket.tokens = Math.max(0, bucket.tokens - 1);
|
|
78
|
+
return waitMs;
|
|
79
|
+
}
|
|
80
|
+
/** Clean up stale per-chat buckets (call periodically). */
|
|
81
|
+
cleanup() {
|
|
82
|
+
const cutoff = Date.now() - 120_000;
|
|
83
|
+
for (const [chatId, bucket] of this.chatBuckets) {
|
|
84
|
+
if (bucket.lastRefill < cutoff) {
|
|
85
|
+
this.chatBuckets.delete(chatId);
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
function sleep(ms) {
|
|
91
|
+
return new Promise((resolve) => setTimeout(resolve, ms));
|
|
92
|
+
}
|
|
93
|
+
//# sourceMappingURL=rate-limiter.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"rate-limiter.js","sourceRoot":"","sources":["../src/rate-limiter.ts"],"names":[],"mappings":"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"}
|
package/dist/server.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAsBrC,wBAAsB,WAAW,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CA6B/D"}
|