social-mcp 2.5.0 → 2.6.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 (35) hide show
  1. package/README.md +21 -3
  2. package/dist/index.js +33 -29
  3. package/dist/index.js.map +1 -1
  4. package/dist/lib/http.d.ts +5 -1
  5. package/dist/lib/http.js.map +1 -1
  6. package/dist/lib/proxy.d.ts +4 -0
  7. package/dist/lib/proxy.js +13 -0
  8. package/dist/lib/proxy.js.map +1 -0
  9. package/dist/services/discord-service.d.ts +24 -1
  10. package/dist/services/discord-service.js +46 -5
  11. package/dist/services/discord-service.js.map +1 -1
  12. package/dist/services/slack-service.d.ts +14 -1
  13. package/dist/services/slack-service.js +22 -2
  14. package/dist/services/slack-service.js.map +1 -1
  15. package/dist/services/telegram-service.d.ts +4 -0
  16. package/dist/services/telegram-service.js +60 -1
  17. package/dist/services/telegram-service.js.map +1 -1
  18. package/dist/tools/discord-tools/get-messages.js +6 -1
  19. package/dist/tools/discord-tools/get-messages.js.map +1 -1
  20. package/dist/tools/discord-tools/send-message.d.ts +11 -1
  21. package/dist/tools/discord-tools/send-message.js +17 -3
  22. package/dist/tools/discord-tools/send-message.js.map +1 -1
  23. package/dist/tools/medium-tools/create-post.d.ts +2 -2
  24. package/dist/tools/slack-tools/send-message.d.ts +9 -1
  25. package/dist/tools/slack-tools/send-message.js +9 -2
  26. package/dist/tools/slack-tools/send-message.js.map +1 -1
  27. package/dist/tools/telegram-tools/send-document.d.ts +20 -0
  28. package/dist/tools/telegram-tools/send-document.js +33 -0
  29. package/dist/tools/telegram-tools/send-document.js.map +1 -0
  30. package/dist/tools/telegram-tools/send-photo.d.ts +20 -0
  31. package/dist/tools/telegram-tools/send-photo.js +33 -0
  32. package/dist/tools/telegram-tools/send-photo.js.map +1 -0
  33. package/dist/tools/tumblr-tools/create-post.d.ts +2 -2
  34. package/dist/tools/tumblr-tools/get-posts.d.ts +2 -2
  35. package/package.json +3 -1
package/README.md CHANGED
@@ -335,6 +335,8 @@ Set `MAIL_MAILER` to select your provider (`smtp`, `sendgrid`, `mailgun`, or `se
335
335
  ### Telegram
336
336
 
337
337
  - **TELEGRAM_SEND_MESSAGE** — Send a message to a chat or channel (`chatId`, `text`)
338
+ - **TELEGRAM_SEND_PHOTO** — Send a photo from a public URL or base64 bytes (`chatId`, `photo`, `filename`, `caption`)
339
+ - **TELEGRAM_SEND_DOCUMENT** — Send a file from a public URL or base64 bytes (`chatId`, `document`, `filename`, `caption`)
338
340
  - **TELEGRAM_GET_CHANNEL_INFO** — Get channel metadata (`channelId`)
339
341
  - **TELEGRAM_FORWARD_MESSAGE** — Forward a message between chats (`fromChatId`, `toChatId`, `messageId`)
340
342
  - **TELEGRAM_PIN_MESSAGE** — Pin a message in a chat (`chatId`, `messageId`)
@@ -342,6 +344,8 @@ Set `MAIL_MAILER` to select your provider (`smtp`, `sendgrid`, `mailgun`, or `se
342
344
  - **TELEGRAM_EDIT_MESSAGE** — Edit the text of a message (`chatId`, `messageId`, `text`)
343
345
  - **TELEGRAM_DELETE_MESSAGE** — Delete a message (`chatId`, `messageId`)
344
346
 
347
+ > **Note:** Captions over 1024 characters (Telegram's limit) are automatically sent as a follow-up reply instead of failing the call.
348
+
345
349
  ### Twitter / X
346
350
 
347
351
  - **SEND_TWEET** — Post a tweet (`text`, max 280 chars)
@@ -353,8 +357,10 @@ Set `MAIL_MAILER` to select your provider (`smtp`, `sendgrid`, `mailgun`, or `se
353
357
 
354
358
  ### Discord
355
359
 
356
- - **SEND_DISCORD_MESSAGE** — Send a message to a channel (`channelId`, `content`)
357
- - **GET_DISCORD_MESSAGES** — Retrieve recent messages from a channel (`channelId`, `limit`)
360
+ - **SEND_DISCORD_MESSAGE** — Send a message to a channel, optionally with file attachments (`channelId`, `content`, `attachments`)
361
+ - **GET_DISCORD_MESSAGES** — Retrieve recent messages from a channel, including attachment filenames/URLs (`channelId`, `limit`)
362
+
363
+ > **Note:** `attachments` take `{ filename, content, contentType? }` with `content` as base64 and are uploaded as real multipart attachments (not just an embedded image URL).
358
364
 
359
365
  ### WhatsApp
360
366
 
@@ -374,10 +380,12 @@ Set `MAIL_MAILER` to select your provider (`smtp`, `sendgrid`, `mailgun`, or `se
374
380
 
375
381
  ### Slack
376
382
 
377
- - **SEND_SLACK_MESSAGE** — Send a message to a channel (`channelId`, `text`)
383
+ - **SEND_SLACK_MESSAGE** — Send a message to a channel, optionally with file attachments (`channelId`, `text`, `attachments`)
378
384
  - **GET_SLACK_MESSAGES** — Retrieve recent messages from a channel (`channelId`, `limit`)
379
385
  - **LIST_SLACK_CHANNELS** — List public channels in the workspace (`limit`)
380
386
 
387
+ > **Note:** `attachments` take `{ filename, content }` with `content` as base64, uploaded via Slack's `files.uploadV2`. When present, `text` becomes the initial comment on the first file.
388
+
381
389
  ### LinkedIn
382
390
 
383
391
  - **GET_LINKEDIN_PROFILE** — Get the authenticated user's profile information
@@ -576,6 +584,16 @@ Both email tools accept **inline credentials** as optional parameters. When prov
576
584
 
577
585
  When `mailer` and `fromAddress` are omitted, the tool falls back to the env var configuration (`MAIL_MAILER`, `MAIL_FROM_ADDRESS`, etc.).
578
586
 
587
+ ## Proxy Support
588
+
589
+ `DiscordService`, `SlackService`, and `TelegramService` accept an optional `proxyUrl` in their credentials (e.g. `new DiscordService({ botToken, proxyUrl: "http://user:pass@host:port" })`), routing that account's API calls through an HTTP(S) proxy — useful for a multi-tenant host that wants each connected account's traffic to originate from a distinct, consistent IP. This is a constructor-level option for programmatic/library consumers (not an MCP tool parameter, since it's server-operator infrastructure rather than message content).
590
+
591
+ Two mechanisms are used depending on how each service talks to its platform, since passing the wrong one is a silent no-op rather than an error:
592
+ - `createProxyDispatcher()` (undici `ProxyAgent`) for services using raw `fetch()`.
593
+ - `createProxyAgent()` (`https-proxy-agent`) for services built on SDKs that take a classic `http.Agent` (Slack's `@slack/web-api`, Telegram's `telegraf`).
594
+
595
+ Both are exported from `social-mcp/dist/lib/proxy.js` if you need to build the agent/dispatcher yourself.
596
+
579
597
  ## Development
580
598
 
581
599
  ```bash
package/dist/index.js CHANGED
@@ -2,10 +2,14 @@
2
2
  import { createRequire } from "node:module";
3
3
  import { FastMCP } from "fastmcp";
4
4
  import { CredentialsError } from "./lib/errors.js";
5
+ import { getBeehiivService } from "./services/beehiiv-service.js";
5
6
  import { getBlueskyService } from "./services/bluesky-service.js";
7
+ import { getDevToService } from "./services/devto-service.js";
6
8
  import { getDiscordService } from "./services/discord-service.js";
7
9
  import { getEmailService } from "./services/email-service.js";
8
10
  import { getFacebookService } from "./services/facebook-service.js";
11
+ import { getGhostService } from "./services/ghost-service.js";
12
+ import { getHashnodeService } from "./services/hashnode-service.js";
9
13
  import { getInstagramService } from "./services/instagram-service.js";
10
14
  import { getLinkedInService } from "./services/linkedin-service.js";
11
15
  import { getMastodonService } from "./services/mastodon-service.js";
@@ -16,27 +20,37 @@ import { getSlackService } from "./services/slack-service.js";
16
20
  import { getTelegramService } from "./services/telegram-service.js";
17
21
  import { getThreadsService } from "./services/threads-service.js";
18
22
  import { getTikTokService } from "./services/tiktok-service.js";
23
+ import { getTumblrService } from "./services/tumblr-service.js";
24
+ import { getTwitchService } from "./services/twitch-service.js";
19
25
  import { getTwitterService } from "./services/twitter-service.js";
20
26
  import { getWhatsappService } from "./services/whatsapp-service.js";
21
27
  import { getYouTubeService } from "./services/youtube-service.js";
22
- import { getBeehiivService } from "./services/beehiiv-service.js";
23
- import { getDevToService } from "./services/devto-service.js";
24
- import { getGhostService } from "./services/ghost-service.js";
25
- import { getHashnodeService } from "./services/hashnode-service.js";
26
- import { getTumblrService } from "./services/tumblr-service.js";
27
- import { getTwitchService } from "./services/twitch-service.js";
28
+ import { createPostTool as beehiivCreatePostTool } from "./tools/beehiiv-tools/create-post.js";
29
+ import { getPostsTool as beehiivGetPostsTool } from "./tools/beehiiv-tools/get-posts.js";
30
+ import { getSubscribersTool as beehiivGetSubscribersTool } from "./tools/beehiiv-tools/get-subscribers.js";
28
31
  import { createPostTool as blueskyCreatePostTool } from "./tools/bluesky-tools/create-post.js";
29
32
  import { deletePostTool as blueskyDeletePostTool } from "./tools/bluesky-tools/delete-post.js";
30
33
  import { getProfileTool as blueskyGetProfileTool } from "./tools/bluesky-tools/get-profile.js";
31
34
  import { likePostTool as blueskyLikePostTool } from "./tools/bluesky-tools/like-post.js";
32
35
  import { replyToPostTool as blueskyReplyToPostTool } from "./tools/bluesky-tools/reply-to-post.js";
33
36
  import { searchPostsTool as blueskySearchPostsTool } from "./tools/bluesky-tools/search-posts.js";
37
+ import { createArticleTool as devtoCreateArticleTool } from "./tools/devto-tools/create-article.js";
38
+ import { getArticleTool as devtoGetArticleTool } from "./tools/devto-tools/get-article.js";
39
+ import { getArticlesTool as devtoGetArticlesTool } from "./tools/devto-tools/get-articles.js";
40
+ import { updateArticleTool as devtoUpdateArticleTool } from "./tools/devto-tools/update-article.js";
34
41
  import { getMessagesTool as discordGetMessagesTool } from "./tools/discord-tools/get-messages.js";
35
42
  import { sendMessageTool as discordSendMessageTool } from "./tools/discord-tools/send-message.js";
36
43
  import { sendBulkEmailTool } from "./tools/email-tools/send-bulk-email.js";
37
44
  import { sendEmailTool } from "./tools/email-tools/send-email.js";
38
45
  import { createPostTool as facebookCreatePostTool } from "./tools/facebook-tools/create-post.js";
39
46
  import { getPostsTool as facebookGetPostsTool } from "./tools/facebook-tools/get-posts.js";
47
+ import { createPostTool as ghostCreatePostTool } from "./tools/ghost-tools/create-post.js";
48
+ import { deletePostTool as ghostDeletePostTool } from "./tools/ghost-tools/delete-post.js";
49
+ import { getPostsTool as ghostGetPostsTool } from "./tools/ghost-tools/get-posts.js";
50
+ import { updatePostTool as ghostUpdatePostTool } from "./tools/ghost-tools/update-post.js";
51
+ import { createPostTool as hashnodeCreatePostTool } from "./tools/hashnode-tools/create-post.js";
52
+ import { getPostsTool as hashnodeGetPostsTool } from "./tools/hashnode-tools/get-posts.js";
53
+ import { getPublicationTool as hashnodeGetPublicationTool } from "./tools/hashnode-tools/get-publication.js";
40
54
  import { createPostTool as instagramCreatePostTool } from "./tools/instagram-tools/create-post.js";
41
55
  import { getPostsTool as instagramGetPostsTool } from "./tools/instagram-tools/get-posts.js";
42
56
  import { addCommentTool as linkedInAddCommentTool } from "./tools/linkedin-tools/add-comment.js";
@@ -76,7 +90,9 @@ import { forwardMessageTool } from "./tools/telegram-tools/forward-message.js";
76
90
  import { getChannelInfoTool } from "./tools/telegram-tools/get-channel-info.js";
77
91
  import { getChannelMembersTool } from "./tools/telegram-tools/get-channel-members.js";
78
92
  import { pinMessageTool } from "./tools/telegram-tools/pin-message.js";
93
+ import { sendDocumentTool } from "./tools/telegram-tools/send-document.js";
79
94
  import { sendMessageTool } from "./tools/telegram-tools/send-message.js";
95
+ import { sendPhotoTool } from "./tools/telegram-tools/send-photo.js";
80
96
  import { createPostTool as threadsCreatePostTool } from "./tools/threads-tools/create-post.js";
81
97
  import { deletePostTool as threadsDeletePostTool } from "./tools/threads-tools/delete-post.js";
82
98
  import { getPostsTool as threadsGetPostsTool } from "./tools/threads-tools/get-posts.js";
@@ -87,6 +103,15 @@ import { getPostStatusTool as tiktokGetPostStatusTool } from "./tools/tiktok-too
87
103
  import { getUserInfoTool as tiktokGetUserInfoTool } from "./tools/tiktok-tools/get-user-info.js";
88
104
  import { photoPostTool as tiktokPhotoPostTool } from "./tools/tiktok-tools/photo-post.js";
89
105
  import { queryCreatorInfoTool as tiktokQueryCreatorInfoTool } from "./tools/tiktok-tools/query-creator-info.js";
106
+ import { createPostTool as tumblrCreatePostTool } from "./tools/tumblr-tools/create-post.js";
107
+ import { deletePostTool as tumblrDeletePostTool } from "./tools/tumblr-tools/delete-post.js";
108
+ import { getBlogInfoTool as tumblrGetBlogInfoTool } from "./tools/tumblr-tools/get-blog-info.js";
109
+ import { getPostsTool as tumblrGetPostsTool } from "./tools/tumblr-tools/get-posts.js";
110
+ import { getChannelInfoTool as twitchGetChannelInfoTool } from "./tools/twitch-tools/get-channel-info.js";
111
+ import { getStreamsTool as twitchGetStreamsTool } from "./tools/twitch-tools/get-streams.js";
112
+ import { getUserTool as twitchGetUserTool } from "./tools/twitch-tools/get-user.js";
113
+ import { searchChannelsTool as twitchSearchChannelsTool } from "./tools/twitch-tools/search-channels.js";
114
+ import { sendChatMessageTool as twitchSendChatMessageTool } from "./tools/twitch-tools/send-chat-message.js";
90
115
  import { deleteTweetTool } from "./tools/twitter-tools/delete-tweet.js";
91
116
  import { getUserInfoTool } from "./tools/twitter-tools/get-user-info.js";
92
117
  import { likeTweetTool } from "./tools/twitter-tools/like-tweet.js";
@@ -101,29 +126,6 @@ import { listChannelVideosTool as youtubeListChannelVideosTool } from "./tools/y
101
126
  import { postCommentTool as youtubePostCommentTool } from "./tools/youtube-tools/post-comment.js";
102
127
  import { searchVideosTool as youtubeSearchVideosTool } from "./tools/youtube-tools/search-videos.js";
103
128
  import { updateVideoTool as youtubeUpdateVideoTool } from "./tools/youtube-tools/update-video.js";
104
- import { createArticleTool as devtoCreateArticleTool } from "./tools/devto-tools/create-article.js";
105
- import { getArticlesTool as devtoGetArticlesTool } from "./tools/devto-tools/get-articles.js";
106
- import { getArticleTool as devtoGetArticleTool } from "./tools/devto-tools/get-article.js";
107
- import { updateArticleTool as devtoUpdateArticleTool } from "./tools/devto-tools/update-article.js";
108
- import { createPostTool as hashnodeCreatePostTool } from "./tools/hashnode-tools/create-post.js";
109
- import { getPostsTool as hashnodeGetPostsTool } from "./tools/hashnode-tools/get-posts.js";
110
- import { getPublicationTool as hashnodeGetPublicationTool } from "./tools/hashnode-tools/get-publication.js";
111
- import { createPostTool as beehiivCreatePostTool } from "./tools/beehiiv-tools/create-post.js";
112
- import { getPostsTool as beehiivGetPostsTool } from "./tools/beehiiv-tools/get-posts.js";
113
- import { getSubscribersTool as beehiivGetSubscribersTool } from "./tools/beehiiv-tools/get-subscribers.js";
114
- import { createPostTool as ghostCreatePostTool } from "./tools/ghost-tools/create-post.js";
115
- import { getPostsTool as ghostGetPostsTool } from "./tools/ghost-tools/get-posts.js";
116
- import { updatePostTool as ghostUpdatePostTool } from "./tools/ghost-tools/update-post.js";
117
- import { deletePostTool as ghostDeletePostTool } from "./tools/ghost-tools/delete-post.js";
118
- import { getUserTool as twitchGetUserTool } from "./tools/twitch-tools/get-user.js";
119
- import { getStreamsTool as twitchGetStreamsTool } from "./tools/twitch-tools/get-streams.js";
120
- import { getChannelInfoTool as twitchGetChannelInfoTool } from "./tools/twitch-tools/get-channel-info.js";
121
- import { searchChannelsTool as twitchSearchChannelsTool } from "./tools/twitch-tools/search-channels.js";
122
- import { sendChatMessageTool as twitchSendChatMessageTool } from "./tools/twitch-tools/send-chat-message.js";
123
- import { createPostTool as tumblrCreatePostTool } from "./tools/tumblr-tools/create-post.js";
124
- import { getPostsTool as tumblrGetPostsTool } from "./tools/tumblr-tools/get-posts.js";
125
- import { deletePostTool as tumblrDeletePostTool } from "./tools/tumblr-tools/delete-post.js";
126
- import { getBlogInfoTool as tumblrGetBlogInfoTool } from "./tools/tumblr-tools/get-blog-info.js";
127
129
  const require = createRequire(import.meta.url);
128
130
  const { version } = require("../package.json");
129
131
  async function checkPlatform(name, init) {
@@ -172,6 +174,8 @@ async function main() {
172
174
  const server = new FastMCP({ name: "Social MCP Server", version });
173
175
  // Telegram
174
176
  server.addTool(sendMessageTool);
177
+ server.addTool(sendPhotoTool);
178
+ server.addTool(sendDocumentTool);
175
179
  server.addTool(getChannelInfoTool);
176
180
  server.addTool(forwardMessageTool);
177
181
  server.addTool(pinMessageTool);
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
@@ -1,7 +1,11 @@
1
+ import type { Dispatcher } from "undici";
1
2
  import type { z } from "zod";
2
3
  export declare class HttpError extends Error {
3
4
  readonly status: number;
4
5
  readonly data?: unknown | undefined;
5
6
  constructor(status: number, message: string, data?: unknown | undefined);
6
7
  }
7
- export declare function fetchJson<T>(url: string, options?: RequestInit, schema?: z.ZodType<T>): Promise<T>;
8
+ export type FetchOptions = RequestInit & {
9
+ dispatcher?: Dispatcher;
10
+ };
11
+ export declare function fetchJson<T>(url: string, options?: FetchOptions, schema?: z.ZodType<T>): Promise<T>;
@@ -1 +1 @@
1
- {"version":3,"file":"http.js","sourceRoot":"","sources":["../../src/lib/http.ts"],"names":[],"mappings":"AAEA,MAAM,OAAO,SAAU,SAAQ,KAAK;IAElB;IAEA;IAHjB,YACiB,MAAc,EAC9B,OAAe,EACC,IAAc;QAE9B,KAAK,CAAC,OAAO,CAAC,CAAC;QAJC,WAAM,GAAN,MAAM,CAAQ;QAEd,SAAI,GAAJ,IAAI,CAAU;QAG9B,IAAI,CAAC,IAAI,GAAG,WAAW,CAAC;IACzB,CAAC;CACD;AAED,MAAM,CAAC,KAAK,UAAU,SAAS,CAC9B,GAAW,EACX,OAAqB,EACrB,MAAqB;IAErB,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC;IAE3C,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;QAClB,MAAM,IAAI,SAAS,CAClB,QAAQ,CAAC,MAAM,EACf,cAAc,QAAQ,CAAC,MAAM,KAAK,QAAQ,CAAC,UAAU,EAAE,EACvD,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,CAC5C,CAAC;IACH,CAAC;IAED,MAAM,IAAI,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;IAEnC,IAAI,MAAM,EAAE,CAAC;QACZ,IAAI,CAAC;YACJ,OAAO,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QAC3B,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YAChB,MAAM,IAAI,KAAK,CACd,0BAA0B,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAClF,CAAC;QACH,CAAC;IACF,CAAC;IAED,OAAO,IAAS,CAAC;AAClB,CAAC"}
1
+ {"version":3,"file":"http.js","sourceRoot":"","sources":["../../src/lib/http.ts"],"names":[],"mappings":"AAGA,MAAM,OAAO,SAAU,SAAQ,KAAK;IAElB;IAEA;IAHjB,YACiB,MAAc,EAC9B,OAAe,EACC,IAAc;QAE9B,KAAK,CAAC,OAAO,CAAC,CAAC;QAJC,WAAM,GAAN,MAAM,CAAQ;QAEd,SAAI,GAAJ,IAAI,CAAU;QAG9B,IAAI,CAAC,IAAI,GAAG,WAAW,CAAC;IACzB,CAAC;CACD;AAOD,MAAM,CAAC,KAAK,UAAU,SAAS,CAC9B,GAAW,EACX,OAAsB,EACtB,MAAqB;IAErB,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,EAAE,OAAsB,CAAC,CAAC;IAE1D,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;QAClB,MAAM,IAAI,SAAS,CAClB,QAAQ,CAAC,MAAM,EACf,cAAc,QAAQ,CAAC,MAAM,KAAK,QAAQ,CAAC,UAAU,EAAE,EACvD,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,CAC5C,CAAC;IACH,CAAC;IAED,MAAM,IAAI,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;IAEnC,IAAI,MAAM,EAAE,CAAC;QACZ,IAAI,CAAC;YACJ,OAAO,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QAC3B,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YAChB,MAAM,IAAI,KAAK,CACd,0BAA0B,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAClF,CAAC;QACH,CAAC;IACF,CAAC;IAED,OAAO,IAAS,CAAC;AAClB,CAAC"}
@@ -0,0 +1,4 @@
1
+ import { HttpsProxyAgent } from "https-proxy-agent";
2
+ import { type Dispatcher } from "undici";
3
+ export declare function createProxyAgent(proxyUrl?: string): HttpsProxyAgent<string> | undefined;
4
+ export declare function createProxyDispatcher(proxyUrl?: string): Dispatcher | undefined;
@@ -0,0 +1,13 @@
1
+ import { HttpsProxyAgent } from "https-proxy-agent";
2
+ import { ProxyAgent } from "undici";
3
+ // Two flavors because Node has two incompatible HTTP client worlds: SDKs built on
4
+ // axios/http.request (Slack, Telegram) take a classic http.Agent, while raw fetch()
5
+ // (undici under the hood) takes a Dispatcher instead — passing the wrong one is a
6
+ // silent no-op, not an error, so callers must pick the one matching their client.
7
+ export function createProxyAgent(proxyUrl) {
8
+ return proxyUrl ? new HttpsProxyAgent(proxyUrl) : undefined;
9
+ }
10
+ export function createProxyDispatcher(proxyUrl) {
11
+ return proxyUrl ? new ProxyAgent(proxyUrl) : undefined;
12
+ }
13
+ //# sourceMappingURL=proxy.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"proxy.js","sourceRoot":"","sources":["../../src/lib/proxy.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AACpD,OAAO,EAAmB,UAAU,EAAE,MAAM,QAAQ,CAAC;AAErD,kFAAkF;AAClF,oFAAoF;AACpF,kFAAkF;AAClF,kFAAkF;AAElF,MAAM,UAAU,gBAAgB,CAC/B,QAAiB;IAEjB,OAAO,QAAQ,CAAC,CAAC,CAAC,IAAI,eAAe,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;AAC7D,CAAC;AAED,MAAM,UAAU,qBAAqB,CACpC,QAAiB;IAEjB,OAAO,QAAQ,CAAC,CAAC,CAAC,IAAI,UAAU,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;AACxD,CAAC"}
@@ -1,21 +1,44 @@
1
+ export interface DiscordFileAttachment {
2
+ filename: string;
3
+ /** Base64-encoded file contents. */
4
+ content: string;
5
+ contentType?: string;
6
+ }
1
7
  export interface DiscordCredentials {
2
8
  botToken: string;
9
+ /** Routes API calls through this proxy (e.g. per-tenant IP isolation). */
10
+ proxyUrl?: string;
3
11
  }
4
12
  export declare class DiscordService {
5
13
  private baseUrl;
6
14
  private headers;
15
+ private dispatcher?;
7
16
  constructor(credentials?: DiscordCredentials);
8
- sendMessage(channelId: string, content: string): Promise<{
17
+ sendMessage(channelId: string, content: string, attachments?: DiscordFileAttachment[]): Promise<{
9
18
  id: string;
10
19
  channel_id: string;
11
20
  content: string;
12
21
  timestamp: string;
22
+ attachments?: {
23
+ id: string;
24
+ filename: string;
25
+ url: string;
26
+ content_type?: string | undefined;
27
+ size?: number | undefined;
28
+ }[] | undefined;
13
29
  }>;
14
30
  getMessages(channelId: string, limit?: number): Promise<{
15
31
  id: string;
16
32
  channel_id: string;
17
33
  content: string;
18
34
  timestamp: string;
35
+ attachments?: {
36
+ id: string;
37
+ filename: string;
38
+ url: string;
39
+ content_type?: string | undefined;
40
+ size?: number | undefined;
41
+ }[] | undefined;
19
42
  }[]>;
20
43
  }
21
44
  export declare function getDiscordService(): DiscordService;
@@ -2,16 +2,26 @@ import { z } from "zod";
2
2
  import { config } from "../lib/config.js";
3
3
  import { CredentialsError } from "../lib/errors.js";
4
4
  import { fetchJson } from "../lib/http.js";
5
+ import { createProxyDispatcher } from "../lib/proxy.js";
6
+ const discordAttachmentSchema = z.object({
7
+ id: z.string(),
8
+ filename: z.string(),
9
+ url: z.string(),
10
+ content_type: z.string().optional(),
11
+ size: z.number().optional(),
12
+ });
5
13
  const discordMessageSchema = z.object({
6
14
  id: z.string(),
7
15
  channel_id: z.string(),
8
16
  content: z.string(),
9
17
  timestamp: z.string(),
18
+ attachments: z.array(discordAttachmentSchema).optional(),
10
19
  });
11
20
  const discordMessagesSchema = z.array(discordMessageSchema);
12
21
  export class DiscordService {
13
22
  baseUrl = config.discord.baseUrl;
14
23
  headers;
24
+ dispatcher;
15
25
  constructor(credentials) {
16
26
  const botToken = credentials?.botToken ?? config.discord.botToken;
17
27
  if (!botToken) {
@@ -21,18 +31,49 @@ export class DiscordService {
21
31
  "Content-Type": "application/json",
22
32
  Authorization: `Bot ${botToken}`,
23
33
  };
34
+ this.dispatcher = createProxyDispatcher(credentials?.proxyUrl);
24
35
  }
25
- async sendMessage(channelId, content) {
26
- return fetchJson(`${this.baseUrl}/channels/${channelId}/messages`, {
36
+ async sendMessage(channelId, content, attachments) {
37
+ if (!attachments?.length) {
38
+ return fetchJson(`${this.baseUrl}/channels/${channelId}/messages`, {
39
+ method: "POST",
40
+ headers: this.headers,
41
+ body: JSON.stringify({ content }),
42
+ dispatcher: this.dispatcher,
43
+ }, discordMessageSchema);
44
+ }
45
+ // Attachments require multipart/form-data — a JSON body can't carry file bytes.
46
+ // payload_json + files[n] is Discord's documented shape for this.
47
+ const formData = new FormData();
48
+ formData.append("payload_json", JSON.stringify({
49
+ content,
50
+ attachments: attachments.map((attachment, index) => ({
51
+ id: index,
52
+ filename: attachment.filename,
53
+ })),
54
+ }));
55
+ attachments.forEach((attachment, index) => {
56
+ const buffer = Buffer.from(attachment.content, "base64");
57
+ formData.append(`files[${index}]`, new Blob([buffer], {
58
+ type: attachment.contentType || "application/octet-stream",
59
+ }), attachment.filename);
60
+ });
61
+ const response = await fetch(`${this.baseUrl}/channels/${channelId}/messages`, {
27
62
  method: "POST",
28
- headers: this.headers,
29
- body: JSON.stringify({ content }),
30
- }, discordMessageSchema);
63
+ headers: { Authorization: this.headers.Authorization ?? "" },
64
+ body: formData,
65
+ dispatcher: this.dispatcher,
66
+ });
67
+ if (!response.ok) {
68
+ throw new Error(`Discord API error (${response.status}): ${await response.text()}`);
69
+ }
70
+ return discordMessageSchema.parse(await response.json());
31
71
  }
32
72
  async getMessages(channelId, limit = 50) {
33
73
  return fetchJson(`${this.baseUrl}/channels/${channelId}/messages?limit=${limit}`, {
34
74
  method: "GET",
35
75
  headers: this.headers,
76
+ dispatcher: this.dispatcher,
36
77
  }, discordMessagesSchema);
37
78
  }
38
79
  }
@@ -1 +1 @@
1
- {"version":3,"file":"discord-service.js","sourceRoot":"","sources":["../../src/services/discord-service.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAC1C,OAAO,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AACpD,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAE3C,MAAM,oBAAoB,GAAG,CAAC,CAAC,MAAM,CAAC;IACrC,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE;IACd,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE;IACtB,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE;IACnB,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE;CACrB,CAAC,CAAC;AAEH,MAAM,qBAAqB,GAAG,CAAC,CAAC,KAAK,CAAC,oBAAoB,CAAC,CAAC;AAM5D,MAAM,OAAO,cAAc;IAClB,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC;IACjC,OAAO,CAAyB;IAExC,YAAY,WAAgC;QAC3C,MAAM,QAAQ,GAAG,WAAW,EAAE,QAAQ,IAAI,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC;QAClE,IAAI,CAAC,QAAQ,EAAE,CAAC;YACf,MAAM,IAAI,gBAAgB,CAAC,SAAS,EAAE,CAAC,mBAAmB,CAAC,CAAC,CAAC;QAC9D,CAAC;QACD,IAAI,CAAC,OAAO,GAAG;YACd,cAAc,EAAE,kBAAkB;YAClC,aAAa,EAAE,OAAO,QAAQ,EAAE;SAChC,CAAC;IACH,CAAC;IAED,KAAK,CAAC,WAAW,CAAC,SAAiB,EAAE,OAAe;QACnD,OAAO,SAAS,CACf,GAAG,IAAI,CAAC,OAAO,aAAa,SAAS,WAAW,EAChD;YACC,MAAM,EAAE,MAAM;YACd,OAAO,EAAE,IAAI,CAAC,OAAO;YACrB,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,OAAO,EAAE,CAAC;SACjC,EACD,oBAAoB,CACpB,CAAC;IACH,CAAC;IAED,KAAK,CAAC,WAAW,CAAC,SAAiB,EAAE,KAAK,GAAG,EAAE;QAC9C,OAAO,SAAS,CACf,GAAG,IAAI,CAAC,OAAO,aAAa,SAAS,mBAAmB,KAAK,EAAE,EAC/D;YACC,MAAM,EAAE,KAAK;YACb,OAAO,EAAE,IAAI,CAAC,OAAO;SACrB,EACD,qBAAqB,CACrB,CAAC;IACH,CAAC;CACD;AAED,IAAI,SAAqC,CAAC;AAC1C,MAAM,UAAU,iBAAiB;IAChC,IAAI,CAAC,SAAS;QAAE,SAAS,GAAG,IAAI,cAAc,EAAE,CAAC;IACjD,OAAO,SAAS,CAAC;AAClB,CAAC"}
1
+ {"version":3,"file":"discord-service.js","sourceRoot":"","sources":["../../src/services/discord-service.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAC1C,OAAO,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AACpD,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAC3C,OAAO,EAAE,qBAAqB,EAAE,MAAM,iBAAiB,CAAC;AAExD,MAAM,uBAAuB,GAAG,CAAC,CAAC,MAAM,CAAC;IACxC,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE;IACd,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE;IACpB,GAAG,EAAE,CAAC,CAAC,MAAM,EAAE;IACf,YAAY,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IACnC,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;CAC3B,CAAC,CAAC;AAEH,MAAM,oBAAoB,GAAG,CAAC,CAAC,MAAM,CAAC;IACrC,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE;IACd,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE;IACtB,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE;IACnB,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE;IACrB,WAAW,EAAE,CAAC,CAAC,KAAK,CAAC,uBAAuB,CAAC,CAAC,QAAQ,EAAE;CACxD,CAAC,CAAC;AAEH,MAAM,qBAAqB,GAAG,CAAC,CAAC,KAAK,CAAC,oBAAoB,CAAC,CAAC;AAe5D,MAAM,OAAO,cAAc;IAClB,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC;IACjC,OAAO,CAAyB;IAChC,UAAU,CAA4C;IAE9D,YAAY,WAAgC;QAC3C,MAAM,QAAQ,GAAG,WAAW,EAAE,QAAQ,IAAI,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC;QAClE,IAAI,CAAC,QAAQ,EAAE,CAAC;YACf,MAAM,IAAI,gBAAgB,CAAC,SAAS,EAAE,CAAC,mBAAmB,CAAC,CAAC,CAAC;QAC9D,CAAC;QACD,IAAI,CAAC,OAAO,GAAG;YACd,cAAc,EAAE,kBAAkB;YAClC,aAAa,EAAE,OAAO,QAAQ,EAAE;SAChC,CAAC;QACF,IAAI,CAAC,UAAU,GAAG,qBAAqB,CAAC,WAAW,EAAE,QAAQ,CAAC,CAAC;IAChE,CAAC;IAED,KAAK,CAAC,WAAW,CAChB,SAAiB,EACjB,OAAe,EACf,WAAqC;QAErC,IAAI,CAAC,WAAW,EAAE,MAAM,EAAE,CAAC;YAC1B,OAAO,SAAS,CACf,GAAG,IAAI,CAAC,OAAO,aAAa,SAAS,WAAW,EAChD;gBACC,MAAM,EAAE,MAAM;gBACd,OAAO,EAAE,IAAI,CAAC,OAAO;gBACrB,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,OAAO,EAAE,CAAC;gBACjC,UAAU,EAAE,IAAI,CAAC,UAAU;aAC3B,EACD,oBAAoB,CACpB,CAAC;QACH,CAAC;QAED,gFAAgF;QAChF,kEAAkE;QAClE,MAAM,QAAQ,GAAG,IAAI,QAAQ,EAAE,CAAC;QAChC,QAAQ,CAAC,MAAM,CACd,cAAc,EACd,IAAI,CAAC,SAAS,CAAC;YACd,OAAO;YACP,WAAW,EAAE,WAAW,CAAC,GAAG,CAAC,CAAC,UAAU,EAAE,KAAK,EAAE,EAAE,CAAC,CAAC;gBACpD,EAAE,EAAE,KAAK;gBACT,QAAQ,EAAE,UAAU,CAAC,QAAQ;aAC7B,CAAC,CAAC;SACH,CAAC,CACF,CAAC;QACF,WAAW,CAAC,OAAO,CAAC,CAAC,UAAU,EAAE,KAAK,EAAE,EAAE;YACzC,MAAM,MAAM,GAAG,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;YACzD,QAAQ,CAAC,MAAM,CACd,SAAS,KAAK,GAAG,EACjB,IAAI,IAAI,CAAC,CAAC,MAAM,CAAC,EAAE;gBAClB,IAAI,EAAE,UAAU,CAAC,WAAW,IAAI,0BAA0B;aAC1D,CAAC,EACF,UAAU,CAAC,QAAQ,CACnB,CAAC;QACH,CAAC,CAAC,CAAC;QAEH,MAAM,QAAQ,GAAG,MAAM,KAAK,CAC3B,GAAG,IAAI,CAAC,OAAO,aAAa,SAAS,WAAW,EAChD;YACC,MAAM,EAAE,MAAM;YACd,OAAO,EAAE,EAAE,aAAa,EAAE,IAAI,CAAC,OAAO,CAAC,aAAa,IAAI,EAAE,EAAE;YAC5D,IAAI,EAAE,QAAQ;YACd,UAAU,EAAE,IAAI,CAAC,UAAU;SACZ,CAChB,CAAC;QACF,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;YAClB,MAAM,IAAI,KAAK,CACd,sBAAsB,QAAQ,CAAC,MAAM,MAAM,MAAM,QAAQ,CAAC,IAAI,EAAE,EAAE,CAClE,CAAC;QACH,CAAC;QACD,OAAO,oBAAoB,CAAC,KAAK,CAAC,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC,CAAC;IAC1D,CAAC;IAED,KAAK,CAAC,WAAW,CAAC,SAAiB,EAAE,KAAK,GAAG,EAAE;QAC9C,OAAO,SAAS,CACf,GAAG,IAAI,CAAC,OAAO,aAAa,SAAS,mBAAmB,KAAK,EAAE,EAC/D;YACC,MAAM,EAAE,KAAK;YACb,OAAO,EAAE,IAAI,CAAC,OAAO;YACrB,UAAU,EAAE,IAAI,CAAC,UAAU;SAC3B,EACD,qBAAqB,CACrB,CAAC;IACH,CAAC;CACD;AAED,IAAI,SAAqC,CAAC;AAC1C,MAAM,UAAU,iBAAiB;IAChC,IAAI,CAAC,SAAS;QAAE,SAAS,GAAG,IAAI,cAAc,EAAE,CAAC;IACjD,OAAO,SAAS,CAAC;AAClB,CAAC"}
@@ -1,13 +1,26 @@
1
+ export interface SlackFileAttachment {
2
+ filename: string;
3
+ /** Base64-encoded file contents. */
4
+ content: string;
5
+ }
1
6
  export interface SlackCredentials {
2
7
  botToken: string;
8
+ /** Routes API calls through this proxy (e.g. per-tenant IP isolation). */
9
+ proxyUrl?: string;
3
10
  }
4
11
  export declare class SlackService {
5
12
  private web;
6
13
  constructor(credentials?: SlackCredentials);
7
- sendMessage(channelId: string, text: string): Promise<{
14
+ sendMessage(channelId: string, text: string, attachments?: SlackFileAttachment[]): Promise<{
15
+ messageId: undefined;
16
+ channelId: string;
17
+ text: string;
18
+ files: import("@slack/web-api").FilesCompleteUploadExternalResponse[];
19
+ } | {
8
20
  messageId: string | undefined;
9
21
  channelId: string | undefined;
10
22
  text: string;
23
+ files?: undefined;
11
24
  }>;
12
25
  getMessages(channelId: string, limit?: number): Promise<{
13
26
  ts: string | undefined;
@@ -1,5 +1,6 @@
1
1
  import { WebClient } from "@slack/web-api";
2
2
  import { CredentialsError } from "../lib/errors.js";
3
+ import { createProxyAgent } from "../lib/proxy.js";
3
4
  export class SlackService {
4
5
  web;
5
6
  constructor(credentials) {
@@ -7,9 +8,28 @@ export class SlackService {
7
8
  if (!token) {
8
9
  throw new CredentialsError("Slack", ["SLACK_BOT_TOKEN"]);
9
10
  }
10
- this.web = new WebClient(token);
11
+ this.web = new WebClient(token, {
12
+ agent: createProxyAgent(credentials?.proxyUrl),
13
+ });
11
14
  }
12
- async sendMessage(channelId, text) {
15
+ async sendMessage(channelId, text, attachments) {
16
+ if (attachments && attachments.length > 0) {
17
+ const [first, ...rest] = attachments;
18
+ const uploaded = await this.web.filesUploadV2({
19
+ channel_id: channelId,
20
+ file: Buffer.from(first.content, "base64"),
21
+ filename: first.filename,
22
+ initial_comment: text,
23
+ });
24
+ for (const attachment of rest) {
25
+ await this.web.filesUploadV2({
26
+ channel_id: channelId,
27
+ file: Buffer.from(attachment.content, "base64"),
28
+ filename: attachment.filename,
29
+ });
30
+ }
31
+ return { messageId: undefined, channelId, text, files: uploaded.files };
32
+ }
13
33
  const result = await this.web.chat.postMessage({
14
34
  channel: channelId,
15
35
  text,
@@ -1 +1 @@
1
- {"version":3,"file":"slack-service.js","sourceRoot":"","sources":["../../src/services/slack-service.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAC3C,OAAO,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AAMpD,MAAM,OAAO,YAAY;IAChB,GAAG,CAAY;IAEvB,YAAY,WAA8B;QACzC,MAAM,KAAK,GAAG,WAAW,EAAE,QAAQ,IAAI,OAAO,CAAC,GAAG,CAAC,eAAe,CAAC;QACnE,IAAI,CAAC,KAAK,EAAE,CAAC;YACZ,MAAM,IAAI,gBAAgB,CAAC,OAAO,EAAE,CAAC,iBAAiB,CAAC,CAAC,CAAC;QAC1D,CAAC;QACD,IAAI,CAAC,GAAG,GAAG,IAAI,SAAS,CAAC,KAAK,CAAC,CAAC;IACjC,CAAC;IAED,KAAK,CAAC,WAAW,CAAC,SAAiB,EAAE,IAAY;QAChD,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,WAAW,CAAC;YAC9C,OAAO,EAAE,SAAS;YAClB,IAAI;SACJ,CAAC,CAAC;QACH,IAAI,CAAC,MAAM,CAAC,EAAE,EAAE,CAAC;YAChB,MAAM,IAAI,KAAK,CAAC,oBAAoB,MAAM,CAAC,KAAK,IAAI,eAAe,EAAE,CAAC,CAAC;QACxE,CAAC;QACD,OAAO;YACN,SAAS,EAAE,MAAM,CAAC,EAAE;YACpB,SAAS,EAAE,MAAM,CAAC,OAAO;YACzB,IAAI;SACJ,CAAC;IACH,CAAC;IAED,KAAK,CAAC,WAAW,CAAC,SAAiB,EAAE,KAAK,GAAG,EAAE;QAC9C,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,GAAG,CAAC,aAAa,CAAC,OAAO,CAAC;YACnD,OAAO,EAAE,SAAS;YAClB,KAAK;SACL,CAAC,CAAC;QACH,IAAI,CAAC,MAAM,CAAC,EAAE,EAAE,CAAC;YAChB,MAAM,IAAI,KAAK,CAAC,oBAAoB,MAAM,CAAC,KAAK,IAAI,eAAe,EAAE,CAAC,CAAC;QACxE,CAAC;QACD,OAAO,CAAC,MAAM,CAAC,QAAQ,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;YAC5C,EAAE,EAAE,GAAG,CAAC,EAAE;YACV,MAAM,EAAE,GAAG,CAAC,IAAI;YAChB,IAAI,EAAE,GAAG,CAAC,IAAI;SACd,CAAC,CAAC,CAAC;IACL,CAAC;IAED,KAAK,CAAC,YAAY,CAAC,KAAK,GAAG,GAAG;QAC7B,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,GAAG,CAAC,aAAa,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC;QAC5D,IAAI,CAAC,MAAM,CAAC,EAAE,EAAE,CAAC;YAChB,MAAM,IAAI,KAAK,CAAC,oBAAoB,MAAM,CAAC,KAAK,IAAI,eAAe,EAAE,CAAC,CAAC;QACxE,CAAC;QACD,OAAO,CAAC,MAAM,CAAC,QAAQ,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;YAC3C,EAAE,EAAE,EAAE,CAAC,EAAE;YACT,IAAI,EAAE,EAAE,CAAC,IAAI;YACb,SAAS,EAAE,EAAE,CAAC,UAAU;YACxB,WAAW,EAAE,EAAE,CAAC,WAAW;SAC3B,CAAC,CAAC,CAAC;IACL,CAAC;CACD;AAED,IAAI,SAAmC,CAAC;AACxC,MAAM,UAAU,eAAe;IAC9B,IAAI,CAAC,SAAS;QAAE,SAAS,GAAG,IAAI,YAAY,EAAE,CAAC;IAC/C,OAAO,SAAS,CAAC;AAClB,CAAC"}
1
+ {"version":3,"file":"slack-service.js","sourceRoot":"","sources":["../../src/services/slack-service.ts"],"names":[],"mappings":"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"}
@@ -1,5 +1,7 @@
1
1
  export interface TelegramCredentials {
2
2
  botToken: string;
3
+ /** Routes API calls through this proxy (e.g. per-tenant IP isolation). */
4
+ proxyUrl?: string;
3
5
  }
4
6
  export interface ChannelInfo {
5
7
  id: number;
@@ -18,6 +20,8 @@ export interface MessageInfo {
18
20
  export declare class TelegramService {
19
21
  private bot;
20
22
  constructor(credentials?: TelegramCredentials);
23
+ sendPhoto(chatId: string | number, photo: string, filename?: string, caption?: string): Promise<MessageInfo>;
24
+ sendDocument(chatId: string | number, document: string, filename?: string, caption?: string): Promise<MessageInfo>;
21
25
  sendMessage(chatId: string | number, text: string): Promise<MessageInfo>;
22
26
  editMessage(chatId: string | number, messageId: number, text: string): Promise<MessageInfo>;
23
27
  deleteMessage(chatId: string | number, messageId: number): Promise<boolean>;
@@ -1,5 +1,13 @@
1
1
  import { Telegraf } from "telegraf";
2
2
  import { CredentialsError } from "../lib/errors.js";
3
+ import { createProxyAgent } from "../lib/proxy.js";
4
+ // Telegram truncates/rejects captions over 1024 chars, so a photo/document with a
5
+ // long caption is sent without one and followed by a plain text message instead —
6
+ // otherwise the API call would fail outright rather than just dropping the caption.
7
+ const MAX_CAPTION_LENGTH = 1024;
8
+ function isHttpUrl(value) {
9
+ return value.startsWith("http://") || value.startsWith("https://");
10
+ }
3
11
  export class TelegramService {
4
12
  bot;
5
13
  constructor(credentials) {
@@ -7,7 +15,58 @@ export class TelegramService {
7
15
  if (!botToken) {
8
16
  throw new CredentialsError("Telegram", ["TELEGRAM_BOT_TOKEN"]);
9
17
  }
10
- this.bot = new Telegraf(botToken);
18
+ const agent = createProxyAgent(credentials?.proxyUrl);
19
+ this.bot = new Telegraf(botToken, agent ? { telegram: { agent } } : undefined);
20
+ }
21
+ // Accepts a public URL or base64-encoded bytes. Splits into photo + follow-up
22
+ // message when the caption is too long instead of letting the API call fail.
23
+ async sendPhoto(chatId, photo, filename, caption) {
24
+ try {
25
+ const source = isHttpUrl(photo)
26
+ ? photo
27
+ : { source: Buffer.from(photo, "base64"), filename };
28
+ const fitsCaption = !caption || caption.length <= MAX_CAPTION_LENGTH;
29
+ const message = await this.bot.telegram.sendPhoto(chatId, source, {
30
+ caption: fitsCaption ? caption : undefined,
31
+ });
32
+ if (caption && !fitsCaption) {
33
+ await this.bot.telegram.sendMessage(chatId, caption, {
34
+ reply_parameters: { message_id: message.message_id },
35
+ });
36
+ }
37
+ return {
38
+ messageId: message.message_id,
39
+ chatId: message.chat.id,
40
+ date: message.date,
41
+ };
42
+ }
43
+ catch (error) {
44
+ throw new Error(`Failed to send photo: ${error instanceof Error ? error.message : "Unknown error"}`);
45
+ }
46
+ }
47
+ async sendDocument(chatId, document, filename, caption) {
48
+ try {
49
+ const source = isHttpUrl(document)
50
+ ? document
51
+ : { source: Buffer.from(document, "base64"), filename };
52
+ const fitsCaption = !caption || caption.length <= MAX_CAPTION_LENGTH;
53
+ const message = await this.bot.telegram.sendDocument(chatId, source, {
54
+ caption: fitsCaption ? caption : undefined,
55
+ });
56
+ if (caption && !fitsCaption) {
57
+ await this.bot.telegram.sendMessage(chatId, caption, {
58
+ reply_parameters: { message_id: message.message_id },
59
+ });
60
+ }
61
+ return {
62
+ messageId: message.message_id,
63
+ chatId: message.chat.id,
64
+ date: message.date,
65
+ };
66
+ }
67
+ catch (error) {
68
+ throw new Error(`Failed to send document: ${error instanceof Error ? error.message : "Unknown error"}`);
69
+ }
11
70
  }
12
71
  async sendMessage(chatId, text) {
13
72
  try {
@@ -1 +1 @@
1
- {"version":3,"file":"telegram-service.js","sourceRoot":"","sources":["../../src/services/telegram-service.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"telegram-service.js","sourceRoot":"","sources":["../../src/services/telegram-service.ts"],"names":[],"mappings":"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"}
@@ -22,7 +22,12 @@ export const getMessagesTool = {
22
22
  return "No messages found in this channel.";
23
23
  }
24
24
  const list = messages
25
- .map((m) => `[${m.timestamp}] ID: ${m.id}\n${m.content}`)
25
+ .map((m) => {
26
+ const attachmentLines = m.attachments?.length
27
+ ? `\n${m.attachments.map((a) => ` [attachment] ${a.filename}: ${a.url}`).join("\n")}`
28
+ : "";
29
+ return `[${m.timestamp}] ID: ${m.id}\n${m.content}${attachmentLines}`;
30
+ })
26
31
  .join("\n\n");
27
32
  return `Retrieved ${messages.length} message(s) from channel ${params.channelId}:\n\n${list}`;
28
33
  }
@@ -1 +1 @@
1
- {"version":3,"file":"get-messages.js","sourceRoot":"","sources":["../../../src/tools/discord-tools/get-messages.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AACvD,OAAO,EAAE,iBAAiB,EAAE,MAAM,mCAAmC,CAAC;AAEtE,MAAM,iBAAiB,GAAG,CAAC,CAAC,MAAM,CAAC;IAClC,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,+BAA+B,CAAC;IAC/D,KAAK,EAAE,CAAC;SACN,MAAM,EAAE;SACR,GAAG,EAAE;SACL,GAAG,CAAC,CAAC,CAAC;SACN,GAAG,CAAC,GAAG,CAAC;SACR,OAAO,CAAC,EAAE,CAAC;SACX,QAAQ,CAAC,wCAAwC,CAAC;CACpD,CAAC,CAAC;AAIH,MAAM,CAAC,MAAM,eAAe,GAAG;IAC9B,IAAI,EAAE,sBAAsB;IAC5B,WAAW,EAAE,iDAAiD;IAC9D,UAAU,EAAE,iBAAiB;IAC7B,OAAO,EAAE,KAAK,EAAE,MAAyB,EAAE,EAAE;QAC5C,IAAI,CAAC;YACJ,MAAM,QAAQ,GAAG,MAAM,iBAAiB,EAAE,CAAC,WAAW,CACrD,MAAM,CAAC,SAAS,EAChB,MAAM,CAAC,KAAK,CACZ,CAAC;YACF,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBAC3B,OAAO,oCAAoC,CAAC;YAC7C,CAAC;YACD,MAAM,IAAI,GAAG,QAAQ;iBACnB,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,CAAC,SAAS,SAAS,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,OAAO,EAAE,CAAC;iBACxD,IAAI,CAAC,MAAM,CAAC,CAAC;YACf,OAAO,aAAa,QAAQ,CAAC,MAAM,4BAA4B,MAAM,CAAC,SAAS,QAAQ,IAAI,EAAE,CAAC;QAC/F,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YAChB,IAAI,KAAK,YAAY,gBAAgB;gBAAE,OAAO,UAAU,KAAK,CAAC,OAAO,EAAE,CAAC;YACxE,OAAO,8BAA8B,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,eAAe,EAAE,CAAC;QACjG,CAAC;IACF,CAAC;CACQ,CAAC"}
1
+ {"version":3,"file":"get-messages.js","sourceRoot":"","sources":["../../../src/tools/discord-tools/get-messages.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AACvD,OAAO,EAAE,iBAAiB,EAAE,MAAM,mCAAmC,CAAC;AAEtE,MAAM,iBAAiB,GAAG,CAAC,CAAC,MAAM,CAAC;IAClC,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,+BAA+B,CAAC;IAC/D,KAAK,EAAE,CAAC;SACN,MAAM,EAAE;SACR,GAAG,EAAE;SACL,GAAG,CAAC,CAAC,CAAC;SACN,GAAG,CAAC,GAAG,CAAC;SACR,OAAO,CAAC,EAAE,CAAC;SACX,QAAQ,CAAC,wCAAwC,CAAC;CACpD,CAAC,CAAC;AAIH,MAAM,CAAC,MAAM,eAAe,GAAG;IAC9B,IAAI,EAAE,sBAAsB;IAC5B,WAAW,EAAE,iDAAiD;IAC9D,UAAU,EAAE,iBAAiB;IAC7B,OAAO,EAAE,KAAK,EAAE,MAAyB,EAAE,EAAE;QAC5C,IAAI,CAAC;YACJ,MAAM,QAAQ,GAAG,MAAM,iBAAiB,EAAE,CAAC,WAAW,CACrD,MAAM,CAAC,SAAS,EAChB,MAAM,CAAC,KAAK,CACZ,CAAC;YACF,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBAC3B,OAAO,oCAAoC,CAAC;YAC7C,CAAC;YACD,MAAM,IAAI,GAAG,QAAQ;iBACnB,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE;gBACV,MAAM,eAAe,GAAG,CAAC,CAAC,WAAW,EAAE,MAAM;oBAC5C,CAAC,CAAC,KAAK,CAAC,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,kBAAkB,CAAC,CAAC,QAAQ,KAAK,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;oBACtF,CAAC,CAAC,EAAE,CAAC;gBACN,OAAO,IAAI,CAAC,CAAC,SAAS,SAAS,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,OAAO,GAAG,eAAe,EAAE,CAAC;YACvE,CAAC,CAAC;iBACD,IAAI,CAAC,MAAM,CAAC,CAAC;YACf,OAAO,aAAa,QAAQ,CAAC,MAAM,4BAA4B,MAAM,CAAC,SAAS,QAAQ,IAAI,EAAE,CAAC;QAC/F,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YAChB,IAAI,KAAK,YAAY,gBAAgB;gBAAE,OAAO,UAAU,KAAK,CAAC,OAAO,EAAE,CAAC;YACxE,OAAO,8BAA8B,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,eAAe,EAAE,CAAC;QACjG,CAAC;IACF,CAAC;CACQ,CAAC"}
@@ -2,14 +2,24 @@ import { z } from "zod";
2
2
  declare const sendMessageParams: z.ZodObject<{
3
3
  channelId: z.ZodString;
4
4
  content: z.ZodString;
5
+ attachments: z.ZodOptional<z.ZodArray<z.ZodObject<{
6
+ filename: z.ZodString;
7
+ content: z.ZodString;
8
+ contentType: z.ZodOptional<z.ZodString>;
9
+ }, z.core.$strip>>>;
5
10
  }, z.core.$strip>;
6
11
  type SendMessageParams = z.infer<typeof sendMessageParams>;
7
12
  export declare const sendMessageTool: {
8
13
  readonly name: "SEND_DISCORD_MESSAGE";
9
- readonly description: "Send a message to a Discord channel";
14
+ readonly description: "Send a message to a Discord channel, optionally with file attachments";
10
15
  readonly parameters: z.ZodObject<{
11
16
  channelId: z.ZodString;
12
17
  content: z.ZodString;
18
+ attachments: z.ZodOptional<z.ZodArray<z.ZodObject<{
19
+ filename: z.ZodString;
20
+ content: z.ZodString;
21
+ contentType: z.ZodOptional<z.ZodString>;
22
+ }, z.core.$strip>>>;
13
23
  }, z.core.$strip>;
14
24
  readonly execute: (params: SendMessageParams) => Promise<string>;
15
25
  };
@@ -4,15 +4,29 @@ import { getDiscordService } from "../../services/discord-service.js";
4
4
  const sendMessageParams = z.object({
5
5
  channelId: z.string().describe("The ID of the Discord channel"),
6
6
  content: z.string().min(1).describe("The message content to send"),
7
+ attachments: z
8
+ .array(z.object({
9
+ filename: z.string().describe("Attachment file name."),
10
+ content: z.string().describe("Base64-encoded file contents."),
11
+ contentType: z
12
+ .string()
13
+ .optional()
14
+ .describe("MIME type, e.g. image/png."),
15
+ }))
16
+ .optional()
17
+ .describe("File attachments to upload with the message."),
7
18
  });
8
19
  export const sendMessageTool = {
9
20
  name: "SEND_DISCORD_MESSAGE",
10
- description: "Send a message to a Discord channel",
21
+ description: "Send a message to a Discord channel, optionally with file attachments",
11
22
  parameters: sendMessageParams,
12
23
  execute: async (params) => {
13
24
  try {
14
- const message = await getDiscordService().sendMessage(params.channelId, params.content);
15
- return `Message sent successfully to Discord channel ${message.channel_id}!\n\nMessage ID: ${message.id}\nContent: ${message.content}\nTimestamp: ${message.timestamp}`;
25
+ const message = await getDiscordService().sendMessage(params.channelId, params.content, params.attachments);
26
+ const attachmentLine = message.attachments?.length
27
+ ? `\nAttachments: ${message.attachments.map((a) => a.filename).join(", ")}`
28
+ : "";
29
+ return `Message sent successfully to Discord channel ${message.channel_id}!\n\nMessage ID: ${message.id}\nContent: ${message.content}\nTimestamp: ${message.timestamp}${attachmentLine}`;
16
30
  }
17
31
  catch (error) {
18
32
  if (error instanceof CredentialsError)
@@ -1 +1 @@
1
- {"version":3,"file":"send-message.js","sourceRoot":"","sources":["../../../src/tools/discord-tools/send-message.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AACvD,OAAO,EAAE,iBAAiB,EAAE,MAAM,mCAAmC,CAAC;AAEtE,MAAM,iBAAiB,GAAG,CAAC,CAAC,MAAM,CAAC;IAClC,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,+BAA+B,CAAC;IAC/D,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,6BAA6B,CAAC;CAClE,CAAC,CAAC;AAIH,MAAM,CAAC,MAAM,eAAe,GAAG;IAC9B,IAAI,EAAE,sBAAsB;IAC5B,WAAW,EAAE,qCAAqC;IAClD,UAAU,EAAE,iBAAiB;IAC7B,OAAO,EAAE,KAAK,EAAE,MAAyB,EAAE,EAAE;QAC5C,IAAI,CAAC;YACJ,MAAM,OAAO,GAAG,MAAM,iBAAiB,EAAE,CAAC,WAAW,CACpD,MAAM,CAAC,SAAS,EAChB,MAAM,CAAC,OAAO,CACd,CAAC;YACF,OAAO,gDAAgD,OAAO,CAAC,UAAU,oBAAoB,OAAO,CAAC,EAAE,cAAc,OAAO,CAAC,OAAO,gBAAgB,OAAO,CAAC,SAAS,EAAE,CAAC;QACzK,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YAChB,IAAI,KAAK,YAAY,gBAAgB;gBAAE,OAAO,UAAU,KAAK,CAAC,OAAO,EAAE,CAAC;YACxE,OAAO,0BAA0B,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,eAAe,EAAE,CAAC;QAC7F,CAAC;IACF,CAAC;CACQ,CAAC"}
1
+ {"version":3,"file":"send-message.js","sourceRoot":"","sources":["../../../src/tools/discord-tools/send-message.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AACvD,OAAO,EAAE,iBAAiB,EAAE,MAAM,mCAAmC,CAAC;AAEtE,MAAM,iBAAiB,GAAG,CAAC,CAAC,MAAM,CAAC;IAClC,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,+BAA+B,CAAC;IAC/D,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,6BAA6B,CAAC;IAClE,WAAW,EAAE,CAAC;SACZ,KAAK,CACL,CAAC,CAAC,MAAM,CAAC;QACR,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,uBAAuB,CAAC;QACtD,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,+BAA+B,CAAC;QAC7D,WAAW,EAAE,CAAC;aACZ,MAAM,EAAE;aACR,QAAQ,EAAE;aACV,QAAQ,CAAC,4BAA4B,CAAC;KACxC,CAAC,CACF;SACA,QAAQ,EAAE;SACV,QAAQ,CAAC,8CAA8C,CAAC;CAC1D,CAAC,CAAC;AAIH,MAAM,CAAC,MAAM,eAAe,GAAG;IAC9B,IAAI,EAAE,sBAAsB;IAC5B,WAAW,EACV,uEAAuE;IACxE,UAAU,EAAE,iBAAiB;IAC7B,OAAO,EAAE,KAAK,EAAE,MAAyB,EAAE,EAAE;QAC5C,IAAI,CAAC;YACJ,MAAM,OAAO,GAAG,MAAM,iBAAiB,EAAE,CAAC,WAAW,CACpD,MAAM,CAAC,SAAS,EAChB,MAAM,CAAC,OAAO,EACd,MAAM,CAAC,WAAW,CAClB,CAAC;YACF,MAAM,cAAc,GAAG,OAAO,CAAC,WAAW,EAAE,MAAM;gBACjD,CAAC,CAAC,kBAAkB,OAAO,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;gBAC3E,CAAC,CAAC,EAAE,CAAC;YACN,OAAO,gDAAgD,OAAO,CAAC,UAAU,oBAAoB,OAAO,CAAC,EAAE,cAAc,OAAO,CAAC,OAAO,gBAAgB,OAAO,CAAC,SAAS,GAAG,cAAc,EAAE,CAAC;QAC1L,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YAChB,IAAI,KAAK,YAAY,gBAAgB;gBAAE,OAAO,UAAU,KAAK,CAAC,OAAO,EAAE,CAAC;YACxE,OAAO,0BAA0B,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,eAAe,EAAE,CAAC;QAC7F,CAAC;IACF,CAAC;CACQ,CAAC"}
@@ -5,9 +5,9 @@ declare const createPostParams: z.ZodObject<{
5
5
  content: z.ZodString;
6
6
  tags: z.ZodOptional<z.ZodArray<z.ZodString>>;
7
7
  publishStatus: z.ZodDefault<z.ZodOptional<z.ZodEnum<{
8
+ draft: "draft";
8
9
  public: "public";
9
10
  unlisted: "unlisted";
10
- draft: "draft";
11
11
  }>>>;
12
12
  canonicalUrl: z.ZodOptional<z.ZodString>;
13
13
  accessToken: z.ZodOptional<z.ZodString>;
@@ -22,9 +22,9 @@ export declare const createPostTool: {
22
22
  content: z.ZodString;
23
23
  tags: z.ZodOptional<z.ZodArray<z.ZodString>>;
24
24
  publishStatus: z.ZodDefault<z.ZodOptional<z.ZodEnum<{
25
+ draft: "draft";
25
26
  public: "public";
26
27
  unlisted: "unlisted";
27
- draft: "draft";
28
28
  }>>>;
29
29
  canonicalUrl: z.ZodOptional<z.ZodString>;
30
30
  accessToken: z.ZodOptional<z.ZodString>;
@@ -2,14 +2,22 @@ import { z } from "zod";
2
2
  declare const sendMessageParams: z.ZodObject<{
3
3
  channelId: z.ZodString;
4
4
  text: z.ZodString;
5
+ attachments: z.ZodOptional<z.ZodArray<z.ZodObject<{
6
+ filename: z.ZodString;
7
+ content: z.ZodString;
8
+ }, z.core.$strip>>>;
5
9
  }, z.core.$strip>;
6
10
  type SendMessageParams = z.infer<typeof sendMessageParams>;
7
11
  export declare const sendMessageTool: {
8
12
  readonly name: "SEND_SLACK_MESSAGE";
9
- readonly description: "Send a message to a Slack channel";
13
+ readonly description: "Send a message to a Slack channel, optionally with file attachments";
10
14
  readonly parameters: z.ZodObject<{
11
15
  channelId: z.ZodString;
12
16
  text: z.ZodString;
17
+ attachments: z.ZodOptional<z.ZodArray<z.ZodObject<{
18
+ filename: z.ZodString;
19
+ content: z.ZodString;
20
+ }, z.core.$strip>>>;
13
21
  }, z.core.$strip>;
14
22
  readonly execute: (params: SendMessageParams) => Promise<string>;
15
23
  };
@@ -4,14 +4,21 @@ import { getSlackService } from "../../services/slack-service.js";
4
4
  const sendMessageParams = z.object({
5
5
  channelId: z.string().describe("The Slack channel ID or name"),
6
6
  text: z.string().min(1).describe("The message text to send"),
7
+ attachments: z
8
+ .array(z.object({
9
+ filename: z.string().describe("Attachment file name."),
10
+ content: z.string().describe("Base64-encoded file contents."),
11
+ }))
12
+ .optional()
13
+ .describe("Files to upload. When present, `text` becomes the initial comment on the first file."),
7
14
  });
8
15
  export const sendMessageTool = {
9
16
  name: "SEND_SLACK_MESSAGE",
10
- description: "Send a message to a Slack channel",
17
+ description: "Send a message to a Slack channel, optionally with file attachments",
11
18
  parameters: sendMessageParams,
12
19
  execute: async (params) => {
13
20
  try {
14
- const message = await getSlackService().sendMessage(params.channelId, params.text);
21
+ const message = await getSlackService().sendMessage(params.channelId, params.text, params.attachments);
15
22
  return `Message sent successfully to Slack channel ${message.channelId}!\n\nMessage ID: ${message.messageId}\nContent: ${message.text}`;
16
23
  }
17
24
  catch (error) {
@@ -1 +1 @@
1
- {"version":3,"file":"send-message.js","sourceRoot":"","sources":["../../../src/tools/slack-tools/send-message.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AACvD,OAAO,EAAE,eAAe,EAAE,MAAM,iCAAiC,CAAC;AAElE,MAAM,iBAAiB,GAAG,CAAC,CAAC,MAAM,CAAC;IAClC,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,8BAA8B,CAAC;IAC9D,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,0BAA0B,CAAC;CAC5D,CAAC,CAAC;AAIH,MAAM,CAAC,MAAM,eAAe,GAAG;IAC9B,IAAI,EAAE,oBAAoB;IAC1B,WAAW,EAAE,mCAAmC;IAChD,UAAU,EAAE,iBAAiB;IAC7B,OAAO,EAAE,KAAK,EAAE,MAAyB,EAAE,EAAE;QAC5C,IAAI,CAAC;YACJ,MAAM,OAAO,GAAG,MAAM,eAAe,EAAE,CAAC,WAAW,CAClD,MAAM,CAAC,SAAS,EAChB,MAAM,CAAC,IAAI,CACX,CAAC;YACF,OAAO,8CAA8C,OAAO,CAAC,SAAS,oBAAoB,OAAO,CAAC,SAAS,cAAc,OAAO,CAAC,IAAI,EAAE,CAAC;QACzI,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YAChB,IAAI,KAAK,YAAY,gBAAgB;gBAAE,OAAO,UAAU,KAAK,CAAC,OAAO,EAAE,CAAC;YACxE,OAAO,0BAA0B,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,eAAe,EAAE,CAAC;QAC7F,CAAC;IACF,CAAC;CACQ,CAAC"}
1
+ {"version":3,"file":"send-message.js","sourceRoot":"","sources":["../../../src/tools/slack-tools/send-message.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AACvD,OAAO,EAAE,eAAe,EAAE,MAAM,iCAAiC,CAAC;AAElE,MAAM,iBAAiB,GAAG,CAAC,CAAC,MAAM,CAAC;IAClC,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,8BAA8B,CAAC;IAC9D,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,0BAA0B,CAAC;IAC5D,WAAW,EAAE,CAAC;SACZ,KAAK,CACL,CAAC,CAAC,MAAM,CAAC;QACR,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,uBAAuB,CAAC;QACtD,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,+BAA+B,CAAC;KAC7D,CAAC,CACF;SACA,QAAQ,EAAE;SACV,QAAQ,CACR,sFAAsF,CACtF;CACF,CAAC,CAAC;AAIH,MAAM,CAAC,MAAM,eAAe,GAAG;IAC9B,IAAI,EAAE,oBAAoB;IAC1B,WAAW,EACV,qEAAqE;IACtE,UAAU,EAAE,iBAAiB;IAC7B,OAAO,EAAE,KAAK,EAAE,MAAyB,EAAE,EAAE;QAC5C,IAAI,CAAC;YACJ,MAAM,OAAO,GAAG,MAAM,eAAe,EAAE,CAAC,WAAW,CAClD,MAAM,CAAC,SAAS,EAChB,MAAM,CAAC,IAAI,EACX,MAAM,CAAC,WAAW,CAClB,CAAC;YACF,OAAO,8CAA8C,OAAO,CAAC,SAAS,oBAAoB,OAAO,CAAC,SAAS,cAAc,OAAO,CAAC,IAAI,EAAE,CAAC;QACzI,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YAChB,IAAI,KAAK,YAAY,gBAAgB;gBAAE,OAAO,UAAU,KAAK,CAAC,OAAO,EAAE,CAAC;YACxE,OAAO,0BAA0B,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,eAAe,EAAE,CAAC;QAC7F,CAAC;IACF,CAAC;CACQ,CAAC"}
@@ -0,0 +1,20 @@
1
+ import { z } from "zod";
2
+ declare const sendDocumentParams: z.ZodObject<{
3
+ chatId: z.ZodUnion<readonly [z.ZodString, z.ZodNumber]>;
4
+ document: z.ZodString;
5
+ filename: z.ZodOptional<z.ZodString>;
6
+ caption: z.ZodOptional<z.ZodString>;
7
+ }, z.core.$strip>;
8
+ type SendDocumentParams = z.infer<typeof sendDocumentParams>;
9
+ export declare const sendDocumentTool: {
10
+ readonly name: "TELEGRAM_SEND_DOCUMENT";
11
+ readonly description: "Send a file/document to a Telegram chat or channel, from a public URL or base64-encoded bytes. Captions over 1024 characters are sent as a separate follow-up message.";
12
+ readonly parameters: z.ZodObject<{
13
+ chatId: z.ZodUnion<readonly [z.ZodString, z.ZodNumber]>;
14
+ document: z.ZodString;
15
+ filename: z.ZodOptional<z.ZodString>;
16
+ caption: z.ZodOptional<z.ZodString>;
17
+ }, z.core.$strip>;
18
+ readonly execute: (params: SendDocumentParams) => Promise<string>;
19
+ };
20
+ export {};
@@ -0,0 +1,33 @@
1
+ import { z } from "zod";
2
+ import { CredentialsError } from "../../lib/errors.js";
3
+ import { getTelegramService } from "../../services/telegram-service.js";
4
+ const sendDocumentParams = z.object({
5
+ chatId: z
6
+ .union([z.string(), z.number()])
7
+ .describe("The chat ID or channel username (e.g., @channelname or -1001234567890)"),
8
+ document: z
9
+ .string()
10
+ .describe("A public file URL, or base64-encoded file bytes."),
11
+ filename: z
12
+ .string()
13
+ .optional()
14
+ .describe("Filename to use when `document` is base64-encoded bytes."),
15
+ caption: z.string().optional().describe("Optional caption for the document."),
16
+ });
17
+ export const sendDocumentTool = {
18
+ name: "TELEGRAM_SEND_DOCUMENT",
19
+ description: "Send a file/document to a Telegram chat or channel, from a public URL or base64-encoded bytes. Captions over 1024 characters are sent as a separate follow-up message.",
20
+ parameters: sendDocumentParams,
21
+ execute: async (params) => {
22
+ try {
23
+ const messageInfo = await getTelegramService().sendDocument(params.chatId, params.document, params.filename, params.caption);
24
+ return `Document sent successfully!\n\nMessage ID: ${messageInfo.messageId}\nChat ID: ${messageInfo.chatId}\nSent at: ${new Date(messageInfo.date * 1000).toISOString()}`;
25
+ }
26
+ catch (error) {
27
+ if (error instanceof CredentialsError)
28
+ return `Error: ${error.message}`;
29
+ return `Error sending document: ${error instanceof Error ? error.message : "Unknown error"}`;
30
+ }
31
+ },
32
+ };
33
+ //# sourceMappingURL=send-document.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"send-document.js","sourceRoot":"","sources":["../../../src/tools/telegram-tools/send-document.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AACvD,OAAO,EAAE,kBAAkB,EAAE,MAAM,oCAAoC,CAAC;AAExE,MAAM,kBAAkB,GAAG,CAAC,CAAC,MAAM,CAAC;IACnC,MAAM,EAAE,CAAC;SACP,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC;SAC/B,QAAQ,CACR,wEAAwE,CACxE;IACF,QAAQ,EAAE,CAAC;SACT,MAAM,EAAE;SACR,QAAQ,CAAC,kDAAkD,CAAC;IAC9D,QAAQ,EAAE,CAAC;SACT,MAAM,EAAE;SACR,QAAQ,EAAE;SACV,QAAQ,CAAC,0DAA0D,CAAC;IACtE,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,oCAAoC,CAAC;CAC7E,CAAC,CAAC;AAIH,MAAM,CAAC,MAAM,gBAAgB,GAAG;IAC/B,IAAI,EAAE,wBAAwB;IAC9B,WAAW,EACV,wKAAwK;IACzK,UAAU,EAAE,kBAAkB;IAC9B,OAAO,EAAE,KAAK,EAAE,MAA0B,EAAE,EAAE;QAC7C,IAAI,CAAC;YACJ,MAAM,WAAW,GAAG,MAAM,kBAAkB,EAAE,CAAC,YAAY,CAC1D,MAAM,CAAC,MAAM,EACb,MAAM,CAAC,QAAQ,EACf,MAAM,CAAC,QAAQ,EACf,MAAM,CAAC,OAAO,CACd,CAAC;YACF,OAAO,8CAA8C,WAAW,CAAC,SAAS,cAAc,WAAW,CAAC,MAAM,cAAc,IAAI,IAAI,CAAC,WAAW,CAAC,IAAI,GAAG,IAAI,CAAC,CAAC,WAAW,EAAE,EAAE,CAAC;QAC3K,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YAChB,IAAI,KAAK,YAAY,gBAAgB;gBAAE,OAAO,UAAU,KAAK,CAAC,OAAO,EAAE,CAAC;YACxE,OAAO,2BAA2B,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,eAAe,EAAE,CAAC;QAC9F,CAAC;IACF,CAAC;CACQ,CAAC"}
@@ -0,0 +1,20 @@
1
+ import { z } from "zod";
2
+ declare const sendPhotoParams: z.ZodObject<{
3
+ chatId: z.ZodUnion<readonly [z.ZodString, z.ZodNumber]>;
4
+ photo: z.ZodString;
5
+ filename: z.ZodOptional<z.ZodString>;
6
+ caption: z.ZodOptional<z.ZodString>;
7
+ }, z.core.$strip>;
8
+ type SendPhotoParams = z.infer<typeof sendPhotoParams>;
9
+ export declare const sendPhotoTool: {
10
+ readonly name: "TELEGRAM_SEND_PHOTO";
11
+ readonly description: "Send a photo to a Telegram chat or channel, from a public URL or base64-encoded bytes. Captions over 1024 characters are sent as a separate follow-up message.";
12
+ readonly parameters: z.ZodObject<{
13
+ chatId: z.ZodUnion<readonly [z.ZodString, z.ZodNumber]>;
14
+ photo: z.ZodString;
15
+ filename: z.ZodOptional<z.ZodString>;
16
+ caption: z.ZodOptional<z.ZodString>;
17
+ }, z.core.$strip>;
18
+ readonly execute: (params: SendPhotoParams) => Promise<string>;
19
+ };
20
+ export {};
@@ -0,0 +1,33 @@
1
+ import { z } from "zod";
2
+ import { CredentialsError } from "../../lib/errors.js";
3
+ import { getTelegramService } from "../../services/telegram-service.js";
4
+ const sendPhotoParams = z.object({
5
+ chatId: z
6
+ .union([z.string(), z.number()])
7
+ .describe("The chat ID or channel username (e.g., @channelname or -1001234567890)"),
8
+ photo: z
9
+ .string()
10
+ .describe("A public image URL, or base64-encoded image bytes."),
11
+ filename: z
12
+ .string()
13
+ .optional()
14
+ .describe("Filename to use when `photo` is base64-encoded bytes."),
15
+ caption: z.string().optional().describe("Optional caption for the photo."),
16
+ });
17
+ export const sendPhotoTool = {
18
+ name: "TELEGRAM_SEND_PHOTO",
19
+ description: "Send a photo to a Telegram chat or channel, from a public URL or base64-encoded bytes. Captions over 1024 characters are sent as a separate follow-up message.",
20
+ parameters: sendPhotoParams,
21
+ execute: async (params) => {
22
+ try {
23
+ const messageInfo = await getTelegramService().sendPhoto(params.chatId, params.photo, params.filename, params.caption);
24
+ return `Photo sent successfully!\n\nMessage ID: ${messageInfo.messageId}\nChat ID: ${messageInfo.chatId}\nSent at: ${new Date(messageInfo.date * 1000).toISOString()}`;
25
+ }
26
+ catch (error) {
27
+ if (error instanceof CredentialsError)
28
+ return `Error: ${error.message}`;
29
+ return `Error sending photo: ${error instanceof Error ? error.message : "Unknown error"}`;
30
+ }
31
+ },
32
+ };
33
+ //# sourceMappingURL=send-photo.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"send-photo.js","sourceRoot":"","sources":["../../../src/tools/telegram-tools/send-photo.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AACvD,OAAO,EAAE,kBAAkB,EAAE,MAAM,oCAAoC,CAAC;AAExE,MAAM,eAAe,GAAG,CAAC,CAAC,MAAM,CAAC;IAChC,MAAM,EAAE,CAAC;SACP,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC;SAC/B,QAAQ,CACR,wEAAwE,CACxE;IACF,KAAK,EAAE,CAAC;SACN,MAAM,EAAE;SACR,QAAQ,CAAC,oDAAoD,CAAC;IAChE,QAAQ,EAAE,CAAC;SACT,MAAM,EAAE;SACR,QAAQ,EAAE;SACV,QAAQ,CAAC,uDAAuD,CAAC;IACnE,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,iCAAiC,CAAC;CAC1E,CAAC,CAAC;AAIH,MAAM,CAAC,MAAM,aAAa,GAAG;IAC5B,IAAI,EAAE,qBAAqB;IAC3B,WAAW,EACV,gKAAgK;IACjK,UAAU,EAAE,eAAe;IAC3B,OAAO,EAAE,KAAK,EAAE,MAAuB,EAAE,EAAE;QAC1C,IAAI,CAAC;YACJ,MAAM,WAAW,GAAG,MAAM,kBAAkB,EAAE,CAAC,SAAS,CACvD,MAAM,CAAC,MAAM,EACb,MAAM,CAAC,KAAK,EACZ,MAAM,CAAC,QAAQ,EACf,MAAM,CAAC,OAAO,CACd,CAAC;YACF,OAAO,2CAA2C,WAAW,CAAC,SAAS,cAAc,WAAW,CAAC,MAAM,cAAc,IAAI,IAAI,CAAC,WAAW,CAAC,IAAI,GAAG,IAAI,CAAC,CAAC,WAAW,EAAE,EAAE,CAAC;QACxK,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YAChB,IAAI,KAAK,YAAY,gBAAgB;gBAAE,OAAO,UAAU,KAAK,CAAC,OAAO,EAAE,CAAC;YACxE,OAAO,wBAAwB,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,eAAe,EAAE,CAAC;QAC3F,CAAC;IACF,CAAC;CACQ,CAAC"}
@@ -4,9 +4,9 @@ declare const params: z.ZodObject<{
4
4
  title: z.ZodOptional<z.ZodString>;
5
5
  tags: z.ZodOptional<z.ZodArray<z.ZodString>>;
6
6
  state: z.ZodDefault<z.ZodOptional<z.ZodEnum<{
7
- private: "private";
8
7
  draft: "draft";
9
8
  published: "published";
9
+ private: "private";
10
10
  queue: "queue";
11
11
  }>>>;
12
12
  blogIdentifier: z.ZodOptional<z.ZodString>;
@@ -21,9 +21,9 @@ export declare const createPostTool: {
21
21
  title: z.ZodOptional<z.ZodString>;
22
22
  tags: z.ZodOptional<z.ZodArray<z.ZodString>>;
23
23
  state: z.ZodDefault<z.ZodOptional<z.ZodEnum<{
24
- private: "private";
25
24
  draft: "draft";
26
25
  published: "published";
26
+ private: "private";
27
27
  queue: "queue";
28
28
  }>>>;
29
29
  blogIdentifier: z.ZodOptional<z.ZodString>;
@@ -3,8 +3,8 @@ declare const params: z.ZodObject<{
3
3
  offset: z.ZodDefault<z.ZodOptional<z.ZodNumber>>;
4
4
  limit: z.ZodDefault<z.ZodOptional<z.ZodNumber>>;
5
5
  type: z.ZodOptional<z.ZodEnum<{
6
- text: "text";
7
6
  link: "link";
7
+ text: "text";
8
8
  chat: "chat";
9
9
  photo: "photo";
10
10
  audio: "audio";
@@ -23,8 +23,8 @@ export declare const getPostsTool: {
23
23
  offset: z.ZodDefault<z.ZodOptional<z.ZodNumber>>;
24
24
  limit: z.ZodDefault<z.ZodOptional<z.ZodNumber>>;
25
25
  type: z.ZodOptional<z.ZodEnum<{
26
- text: "text";
27
26
  link: "link";
27
+ text: "text";
28
28
  chat: "chat";
29
29
  photo: "photo";
30
30
  audio: "audio";
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "social-mcp",
3
- "version": "2.5.0",
3
+ "version": "2.6.0",
4
4
  "description": "MCP server for posting and interacting across social media platforms: Twitter, Instagram, Facebook, WhatsApp, Discord, Telegram, Slack, LinkedIn, Reddit, Threads, TikTok, Pinterest, Medium, and Email (SMTP/SendGrid/Mailgun/SES)",
5
5
  "main": "dist/index.js",
6
6
  "type": "module",
@@ -59,9 +59,11 @@
59
59
  "@slack/web-api": "^7.14.1",
60
60
  "dotenv": "^17.3.1",
61
61
  "fastmcp": "^3.33.0",
62
+ "https-proxy-agent": "^9.1.0",
62
63
  "nodemailer": "^8.0.6",
63
64
  "telegraf": "^4.16.3",
64
65
  "twitter-api-v2": "^1.29.0",
66
+ "undici": "^8.7.0",
65
67
  "zod": "^4.3.6"
66
68
  },
67
69
  "devDependencies": {