@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.
Files changed (113) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +247 -0
  3. package/dist/circuit-breaker.d.ts +34 -0
  4. package/dist/circuit-breaker.d.ts.map +1 -0
  5. package/dist/circuit-breaker.js +64 -0
  6. package/dist/circuit-breaker.js.map +1 -0
  7. package/dist/config.d.ts +29 -0
  8. package/dist/config.d.ts.map +1 -0
  9. package/dist/config.js +22 -0
  10. package/dist/config.js.map +1 -0
  11. package/dist/index.d.ts +3 -0
  12. package/dist/index.d.ts.map +1 -0
  13. package/dist/index.js +15 -0
  14. package/dist/index.js.map +1 -0
  15. package/dist/method-registry.d.ts +78 -0
  16. package/dist/method-registry.d.ts.map +1 -0
  17. package/dist/method-registry.js +117 -0
  18. package/dist/method-registry.js.map +1 -0
  19. package/dist/methods/bot.d.ts +3 -0
  20. package/dist/methods/bot.d.ts.map +1 -0
  21. package/dist/methods/bot.js +258 -0
  22. package/dist/methods/bot.js.map +1 -0
  23. package/dist/methods/business.d.ts +3 -0
  24. package/dist/methods/business.d.ts.map +1 -0
  25. package/dist/methods/business.js +137 -0
  26. package/dist/methods/business.js.map +1 -0
  27. package/dist/methods/chat.d.ts +3 -0
  28. package/dist/methods/chat.d.ts.map +1 -0
  29. package/dist/methods/chat.js +458 -0
  30. package/dist/methods/chat.js.map +1 -0
  31. package/dist/methods/editing.d.ts +3 -0
  32. package/dist/methods/editing.d.ts.map +1 -0
  33. package/dist/methods/editing.js +153 -0
  34. package/dist/methods/editing.js.map +1 -0
  35. package/dist/methods/forum.d.ts +3 -0
  36. package/dist/methods/forum.d.ts.map +1 -0
  37. package/dist/methods/forum.js +184 -0
  38. package/dist/methods/forum.js.map +1 -0
  39. package/dist/methods/forwarding.d.ts +3 -0
  40. package/dist/methods/forwarding.d.ts.map +1 -0
  41. package/dist/methods/forwarding.js +84 -0
  42. package/dist/methods/forwarding.js.map +1 -0
  43. package/dist/methods/games.d.ts +3 -0
  44. package/dist/methods/games.d.ts.map +1 -0
  45. package/dist/methods/games.js +43 -0
  46. package/dist/methods/games.js.map +1 -0
  47. package/dist/methods/gifts.d.ts +3 -0
  48. package/dist/methods/gifts.d.ts.map +1 -0
  49. package/dist/methods/gifts.js +87 -0
  50. package/dist/methods/gifts.js.map +1 -0
  51. package/dist/methods/index.d.ts +13 -0
  52. package/dist/methods/index.d.ts.map +1 -0
  53. package/dist/methods/index.js +57 -0
  54. package/dist/methods/index.js.map +1 -0
  55. package/dist/methods/inline.d.ts +3 -0
  56. package/dist/methods/inline.d.ts.map +1 -0
  57. package/dist/methods/inline.js +32 -0
  58. package/dist/methods/inline.js.map +1 -0
  59. package/dist/methods/managed-bots.d.ts +3 -0
  60. package/dist/methods/managed-bots.d.ts.map +1 -0
  61. package/dist/methods/managed-bots.js +33 -0
  62. package/dist/methods/managed-bots.js.map +1 -0
  63. package/dist/methods/messages.d.ts +3 -0
  64. package/dist/methods/messages.d.ts.map +1 -0
  65. package/dist/methods/messages.js +357 -0
  66. package/dist/methods/messages.js.map +1 -0
  67. package/dist/methods/other.d.ts +3 -0
  68. package/dist/methods/other.d.ts.map +1 -0
  69. package/dist/methods/other.js +247 -0
  70. package/dist/methods/other.js.map +1 -0
  71. package/dist/methods/passport.d.ts +3 -0
  72. package/dist/methods/passport.d.ts.map +1 -0
  73. package/dist/methods/passport.js +15 -0
  74. package/dist/methods/passport.js.map +1 -0
  75. package/dist/methods/payments.d.ts +3 -0
  76. package/dist/methods/payments.d.ts.map +1 -0
  77. package/dist/methods/payments.js +128 -0
  78. package/dist/methods/payments.js.map +1 -0
  79. package/dist/methods/stickers.d.ts +3 -0
  80. package/dist/methods/stickers.d.ts.map +1 -0
  81. package/dist/methods/stickers.js +208 -0
  82. package/dist/methods/stickers.js.map +1 -0
  83. package/dist/methods/stories.d.ts +3 -0
  84. package/dist/methods/stories.d.ts.map +1 -0
  85. package/dist/methods/stories.js +58 -0
  86. package/dist/methods/stories.js.map +1 -0
  87. package/dist/methods/updates.d.ts +3 -0
  88. package/dist/methods/updates.d.ts.map +1 -0
  89. package/dist/methods/updates.js +48 -0
  90. package/dist/methods/updates.js.map +1 -0
  91. package/dist/post-log.d.ts +14 -0
  92. package/dist/post-log.d.ts.map +1 -0
  93. package/dist/post-log.js +48 -0
  94. package/dist/post-log.js.map +1 -0
  95. package/dist/rate-limiter.d.ts +25 -0
  96. package/dist/rate-limiter.d.ts.map +1 -0
  97. package/dist/rate-limiter.js +93 -0
  98. package/dist/rate-limiter.js.map +1 -0
  99. package/dist/server.d.ts +3 -0
  100. package/dist/server.d.ts.map +1 -0
  101. package/dist/server.js +287 -0
  102. package/dist/server.js.map +1 -0
  103. package/dist/telegram-client.d.ts +28 -0
  104. package/dist/telegram-client.d.ts.map +1 -0
  105. package/dist/telegram-client.js +254 -0
  106. package/dist/telegram-client.js.map +1 -0
  107. package/dist/trail.d.ts +86 -0
  108. package/dist/trail.d.ts.map +1 -0
  109. package/dist/trail.js +185 -0
  110. package/dist/trail.js.map +1 -0
  111. package/package.json +61 -0
  112. package/server.json +18 -0
  113. 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,3 @@
1
+ import { MethodDef } from "../method-registry.js";
2
+ export declare const storyMethods: MethodDef[];
3
+ //# sourceMappingURL=stories.d.ts.map
@@ -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":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAa,MAAM,EAAI,WAAW,EAAE,MAAM,uBAAuB,CAAC;AAEzE,MAAM,CAAC,MAAM,YAAY,GAAgB;IACvC;QACE,WAAW,EAAE,WAAW,CAAC,IAAI;QAC7B,SAAS,EAAE,WAAW,EAAE,QAAQ,EAAE,YAAY;QAC9C,WAAW,EAAE,sDAAsD,EAAE,QAAQ,EAAE,SAAS;QACxF,WAAW,EAAE,KAAK,EAAE,cAAc,EAAE,KAAK,EAAE,OAAO,EAAE,OAAO;QAC3D,MAAM,EAAE;YACN,EAAE,IAAI,EAAE,wBAAwB,EAAE,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,WAAW,EAAE,wBAAwB,EAAE;YAC3G,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC,GAAG,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,WAAW,EAAE,oCAAoC,EAAE;YACrG,EAAE,IAAI,EAAE,eAAe,EAAE,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,WAAW,EAAE,gCAAgC,EAAE;YAChH,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,EAAE,QAAQ,EAAE,KAAK,EAAE,WAAW,EAAE,eAAe,EAAE;YACpF,EAAE,IAAI,EAAE,YAAY,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,UAAU,EAAE,YAAY,CAAC,CAAC,EAAE,QAAQ,EAAE,KAAK,EAAE,WAAW,EAAE,oBAAoB,EAAE;YAC5H,EAAE,IAAI,EAAE,kBAAkB,EAAE,IAAI,EAAE,CAAC,CAAC,GAAG,EAAE,EAAE,QAAQ,EAAE,KAAK,EAAE,WAAW,EAAE,kBAAkB,EAAE;YAC7F,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC,GAAG,EAAE,EAAE,QAAQ,EAAE,KAAK,EAAE,WAAW,EAAE,oBAAoB,EAAE;YACpF,EAAE,IAAI,EAAE,iBAAiB,EAAE,IAAI,EAAE,CAAC,CAAC,OAAO,EAAE,EAAE,QAAQ,EAAE,KAAK,EAAE,WAAW,EAAE,yBAAyB,EAAE;YACvG,EAAE,IAAI,EAAE,mBAAmB,EAAE,IAAI,EAAE,CAAC,CAAC,OAAO,EAAE,EAAE,QAAQ,EAAE,KAAK,EAAE,WAAW,EAAE,6BAA6B,EAAE;SAC9G;KACF;IACD;QACE,WAAW,EAAE,WAAW,CAAC,MAAM;QAC/B,SAAS,EAAE,WAAW,EAAE,QAAQ,EAAE,YAAY;QAC9C,WAAW,EAAE,6BAA6B,EAAE,QAAQ,EAAE,SAAS;QAC/D,WAAW,EAAE,KAAK,EAAE,cAAc,EAAE,KAAK,EAAE,OAAO,EAAE,OAAO;QAC3D,MAAM,EAAE;YACN,EAAE,IAAI,EAAE,wBAAwB,EAAE,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,WAAW,EAAE,wBAAwB,EAAE;YAC3G,EAAE,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,WAAW,EAAE,UAAU,EAAE;YACrF,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC,GAAG,EAAE,EAAE,QAAQ,EAAE,KAAK,EAAE,WAAW,EAAE,uBAAuB,EAAE;YACzF,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,EAAE,QAAQ,EAAE,KAAK,EAAE,WAAW,EAAE,aAAa,EAAE;YAClF,EAAE,IAAI,EAAE,YAAY,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,UAAU,EAAE,YAAY,CAAC,CAAC,EAAE,QAAQ,EAAE,KAAK,EAAE,WAAW,EAAE,oBAAoB,EAAE;YAC5H,EAAE,IAAI,EAAE,kBAAkB,EAAE,IAAI,EAAE,CAAC,CAAC,GAAG,EAAE,EAAE,QAAQ,EAAE,KAAK,EAAE,WAAW,EAAE,kBAAkB,EAAE;YAC7F,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC,GAAG,EAAE,EAAE,QAAQ,EAAE,KAAK,EAAE,WAAW,EAAE,oBAAoB,EAAE;SACrF;KACF;IACD;QACE,WAAW,EAAE,WAAW,CAAC,WAAW;QACpC,SAAS,EAAE,aAAa,EAAE,QAAQ,EAAE,cAAc;QAClD,WAAW,EAAE,wBAAwB,EAAE,QAAQ,EAAE,SAAS;QAC1D,WAAW,EAAE,KAAK,EAAE,cAAc,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM;QAC1D,MAAM,EAAE;YACN,EAAE,IAAI,EAAE,wBAAwB,EAAE,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,WAAW,EAAE,wBAAwB,EAAE;YAC3G,EAAE,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,WAAW,EAAE,UAAU,EAAE;SACtF;KACF;IACD;QACE,WAAW,EAAE,WAAW,CAAC,IAAI;QAC7B,SAAS,EAAE,aAAa,EAAE,QAAQ,EAAE,cAAc;QAClD,WAAW,EAAE,wCAAwC,EAAE,QAAQ,EAAE,SAAS;QAC1E,WAAW,EAAE,IAAI,EAAE,cAAc,EAAE,KAAK,EAAE,OAAO,EAAE,OAAO;QAC1D,MAAM,EAAE;YACN,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,IAAI,EAAE,WAAW,EAAE,gBAAgB,EAAE;YAChF,EAAE,IAAI,EAAE,sBAAsB,EAAE,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,WAAW,EAAE,+BAA+B,EAAE;YACtH,EAAE,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,WAAW,EAAE,oBAAoB,EAAE;SAChG;KACF;CACF,CAAC"}
@@ -0,0 +1,3 @@
1
+ import { MethodDef } from "../method-registry.js";
2
+ export declare const updateMethods: MethodDef[];
3
+ //# sourceMappingURL=updates.d.ts.map
@@ -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"}
@@ -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":"AAAA;;;GAGG;AACH,MAAM,OAAO,WAAW;IACd,YAAY,CAAS;IACrB,SAAS,CAAS;IAClB,gBAAgB,CAAS;IAEzB,WAAW,GAAG,IAAI,GAAG,EAAkD,CAAC;IACxE,OAAO,CAAS;IAExB,2EAA2E;IACnE,KAAK,GAAkB,OAAO,CAAC,OAAO,EAAE,CAAC;IAEjD,YAAY,eAAuB,EAAE,gBAAwB;QAC3D,IAAI,CAAC,SAAS,GAAG,eAAe,CAAC;QACjC,IAAI,CAAC,YAAY,GAAG,eAAe,CAAC;QACpC,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QACnC,IAAI,CAAC,OAAO,GAAG,gBAAgB,CAAC;IAClC,CAAC;IAED;;;OAGG;IACH,KAAK,CAAC,OAAO,CAAC,MAAe;QAC3B,OAAO,IAAI,OAAO,CAAS,CAAC,OAAO,EAAE,EAAE;YACrC,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,IAAI,EAAE;gBACtC,IAAI,SAAS,GAAG,CAAC,CAAC;gBAClB,SAAS,IAAI,MAAM,IAAI,CAAC,aAAa,EAAE,CAAC;gBACxC,IAAI,MAAM,EAAE,CAAC;oBACX,SAAS,IAAI,MAAM,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC;gBACtD,CAAC;gBACD,OAAO,CAAC,SAAS,CAAC,CAAC;YACrB,CAAC,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;IACL,CAAC;IAEO,KAAK,CAAC,aAAa;QACzB,IAAI,CAAC,YAAY,EAAE,CAAC;QAEpB,IAAI,IAAI,CAAC,YAAY,IAAI,CAAC,EAAE,CAAC;YAC3B,IAAI,CAAC,YAAY,IAAI,CAAC,CAAC;YACvB,OAAO,CAAC,CAAC;QACX,CAAC;QAED,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC;QAChD,MAAM,KAAK,CAAC,MAAM,CAAC,CAAC;QACpB,IAAI,CAAC,YAAY,EAAE,CAAC;QACpB,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,YAAY,GAAG,CAAC,CAAC,CAAC;QACvD,OAAO,MAAM,CAAC;IAChB,CAAC;IAEO,YAAY;QAClB,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QACvB,MAAM,OAAO,GAAG,GAAG,GAAG,IAAI,CAAC,gBAAgB,CAAC;QAC5C,MAAM,MAAM,GAAG,CAAC,OAAO,GAAG,IAAI,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC;QACjD,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,YAAY,GAAG,MAAM,CAAC,CAAC;QACzE,IAAI,CAAC,gBAAgB,GAAG,GAAG,CAAC;IAC9B,CAAC;IAEO,KAAK,CAAC,WAAW,CAAC,MAAc;QACtC,IAAI,MAAM,GAAG,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;QAC1C,IAAI,CAAC,MAAM,EAAE,CAAC;YACZ,MAAM,GAAG,EAAE,MAAM,EAAE,IAAI,CAAC,OAAO,EAAE,UAAU,EAAE,IAAI,CAAC,GAAG,EAAE,EAAE,CAAC;YAC1D,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;QACvC,CAAC;QAED,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QACvB,MAAM,OAAO,GAAG,GAAG,GAAG,MAAM,CAAC,UAAU,CAAC;QACxC,MAAM,MAAM,GAAG,CAAC,OAAO,GAAG,KAAK,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC;QAChD,MAAM,CAAC,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,EAAE,MAAM,CAAC,MAAM,GAAG,MAAM,CAAC,CAAC;QAC/D,MAAM,CAAC,UAAU,GAAG,GAAG,CAAC;QAExB,IAAI,MAAM,CAAC,MAAM,IAAI,CAAC,EAAE,CAAC;YACvB,MAAM,CAAC,MAAM,IAAI,CAAC,CAAC;YACnB,OAAO,CAAC,CAAC;QACX,CAAC;QAED,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,CAAC;QAC/C,MAAM,KAAK,CAAC,MAAM,CAAC,CAAC;QACpB,4DAA4D;QAC5D,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QAC5B,MAAM,YAAY,GAAG,QAAQ,GAAG,MAAM,CAAC,UAAU,CAAC;QAClD,MAAM,WAAW,GAAG,CAAC,YAAY,GAAG,KAAK,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC;QAC1D,MAAM,CAAC,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,EAAE,MAAM,CAAC,MAAM,GAAG,WAAW,CAAC,CAAC;QACpE,MAAM,CAAC,UAAU,GAAG,QAAQ,CAAC;QAC7B,MAAM,CAAC,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;QAC/C,OAAO,MAAM,CAAC;IAChB,CAAC;IAED,2DAA2D;IAC3D,OAAO;QACL,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,OAAO,CAAC;QACpC,KAAK,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,IAAI,IAAI,CAAC,WAAW,EAAE,CAAC;YAChD,IAAI,MAAM,CAAC,UAAU,GAAG,MAAM,EAAE,CAAC;gBAC/B,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;YAClC,CAAC;QACH,CAAC;IACH,CAAC;CACF;AAED,SAAS,KAAK,CAAC,EAAU;IACvB,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,CAAC;AAC3D,CAAC"}
@@ -0,0 +1,3 @@
1
+ import { Config } from "./config.js";
2
+ export declare function startServer(config: Config): Promise<void>;
3
+ //# sourceMappingURL=server.d.ts.map
@@ -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"}