social-mcp 2.5.0 → 2.7.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 (115) hide show
  1. package/README.md +64 -28
  2. package/dist/index.js +37 -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/bluesky-service.d.ts +7 -1
  10. package/dist/services/bluesky-service.js +17 -2
  11. package/dist/services/bluesky-service.js.map +1 -1
  12. package/dist/services/discord-service.d.ts +24 -1
  13. package/dist/services/discord-service.js +46 -5
  14. package/dist/services/discord-service.js.map +1 -1
  15. package/dist/services/facebook-service.d.ts +17 -1
  16. package/dist/services/facebook-service.js +63 -5
  17. package/dist/services/facebook-service.js.map +1 -1
  18. package/dist/services/ghost-service.d.ts +4 -1
  19. package/dist/services/ghost-service.js +55 -9
  20. package/dist/services/ghost-service.js.map +1 -1
  21. package/dist/services/instagram-service.d.ts +6 -1
  22. package/dist/services/instagram-service.js +40 -3
  23. package/dist/services/instagram-service.js.map +1 -1
  24. package/dist/services/linkedin-service.d.ts +9 -1
  25. package/dist/services/linkedin-service.js +65 -8
  26. package/dist/services/linkedin-service.js.map +1 -1
  27. package/dist/services/mastodon-service.d.ts +10 -1
  28. package/dist/services/mastodon-service.js +35 -6
  29. package/dist/services/mastodon-service.js.map +1 -1
  30. package/dist/services/pinterest-service.d.ts +28 -2
  31. package/dist/services/pinterest-service.js +32 -8
  32. package/dist/services/pinterest-service.js.map +1 -1
  33. package/dist/services/reddit-service.d.ts +10 -1
  34. package/dist/services/reddit-service.js +62 -5
  35. package/dist/services/reddit-service.js.map +1 -1
  36. package/dist/services/slack-service.d.ts +14 -1
  37. package/dist/services/slack-service.js +22 -2
  38. package/dist/services/slack-service.js.map +1 -1
  39. package/dist/services/telegram-service.d.ts +4 -0
  40. package/dist/services/telegram-service.js +60 -1
  41. package/dist/services/telegram-service.js.map +1 -1
  42. package/dist/services/threads-service.d.ts +8 -1
  43. package/dist/services/threads-service.js +46 -7
  44. package/dist/services/threads-service.js.map +1 -1
  45. package/dist/services/tumblr-service.d.ts +25 -5
  46. package/dist/services/tumblr-service.js +51 -8
  47. package/dist/services/tumblr-service.js.map +1 -1
  48. package/dist/services/twitter-service.d.ts +13 -5
  49. package/dist/services/twitter-service.js +24 -3
  50. package/dist/services/twitter-service.js.map +1 -1
  51. package/dist/services/whatsapp-service.d.ts +10 -1
  52. package/dist/services/whatsapp-service.js +60 -9
  53. package/dist/services/whatsapp-service.js.map +1 -1
  54. package/dist/services/youtube-service.d.ts +21 -0
  55. package/dist/services/youtube-service.js +57 -7
  56. package/dist/services/youtube-service.js.map +1 -1
  57. package/dist/tools/bluesky-tools/create-post.d.ts +11 -1
  58. package/dist/tools/bluesky-tools/create-post.js +11 -2
  59. package/dist/tools/bluesky-tools/create-post.js.map +1 -1
  60. package/dist/tools/discord-tools/get-messages.js +6 -1
  61. package/dist/tools/discord-tools/get-messages.js.map +1 -1
  62. package/dist/tools/discord-tools/send-message.d.ts +11 -1
  63. package/dist/tools/discord-tools/send-message.js +17 -3
  64. package/dist/tools/discord-tools/send-message.js.map +1 -1
  65. package/dist/tools/facebook-tools/create-post.d.ts +5 -1
  66. package/dist/tools/facebook-tools/create-post.js +12 -2
  67. package/dist/tools/facebook-tools/create-post.js.map +1 -1
  68. package/dist/tools/facebook-tools/create-video-post.d.ts +20 -0
  69. package/dist/tools/facebook-tools/create-video-post.js +31 -0
  70. package/dist/tools/facebook-tools/create-video-post.js.map +1 -0
  71. package/dist/tools/ghost-tools/create-post.d.ts +4 -0
  72. package/dist/tools/ghost-tools/create-post.js +27 -4
  73. package/dist/tools/ghost-tools/create-post.js.map +1 -1
  74. package/dist/tools/instagram-tools/create-post.d.ts +11 -1
  75. package/dist/tools/instagram-tools/create-post.js +8 -3
  76. package/dist/tools/instagram-tools/create-post.js.map +1 -1
  77. package/dist/tools/linkedin-tools/create-post.d.ts +5 -1
  78. package/dist/tools/linkedin-tools/create-post.js +9 -2
  79. package/dist/tools/linkedin-tools/create-post.js.map +1 -1
  80. package/dist/tools/mastodon-tools/create-post.d.ts +11 -1
  81. package/dist/tools/mastodon-tools/create-post.js +18 -2
  82. package/dist/tools/mastodon-tools/create-post.js.map +1 -1
  83. package/dist/tools/medium-tools/create-post.d.ts +2 -2
  84. package/dist/tools/pinterest-tools/create-pin.d.ts +4 -2
  85. package/dist/tools/pinterest-tools/create-pin.js +8 -2
  86. package/dist/tools/pinterest-tools/create-pin.js.map +1 -1
  87. package/dist/tools/reddit-tools/submit-post.d.ts +9 -1
  88. package/dist/tools/reddit-tools/submit-post.js +19 -4
  89. package/dist/tools/reddit-tools/submit-post.js.map +1 -1
  90. package/dist/tools/slack-tools/send-message.d.ts +9 -1
  91. package/dist/tools/slack-tools/send-message.js +9 -2
  92. package/dist/tools/slack-tools/send-message.js.map +1 -1
  93. package/dist/tools/telegram-tools/send-document.d.ts +20 -0
  94. package/dist/tools/telegram-tools/send-document.js +33 -0
  95. package/dist/tools/telegram-tools/send-document.js.map +1 -0
  96. package/dist/tools/telegram-tools/send-photo.d.ts +20 -0
  97. package/dist/tools/telegram-tools/send-photo.js +33 -0
  98. package/dist/tools/telegram-tools/send-photo.js.map +1 -0
  99. package/dist/tools/threads-tools/create-post.d.ts +13 -1
  100. package/dist/tools/threads-tools/create-post.js +14 -2
  101. package/dist/tools/threads-tools/create-post.js.map +1 -1
  102. package/dist/tools/tumblr-tools/create-post.d.ts +6 -2
  103. package/dist/tools/tumblr-tools/create-post.js +39 -8
  104. package/dist/tools/tumblr-tools/create-post.js.map +1 -1
  105. package/dist/tools/tumblr-tools/get-posts.d.ts +2 -2
  106. package/dist/tools/twitter-tools/send-tweet.d.ts +9 -1
  107. package/dist/tools/twitter-tools/send-tweet.js +10 -2
  108. package/dist/tools/twitter-tools/send-tweet.js.map +1 -1
  109. package/dist/tools/whatsapp-tools/send-message.d.ts +19 -3
  110. package/dist/tools/whatsapp-tools/send-message.js +29 -3
  111. package/dist/tools/whatsapp-tools/send-message.js.map +1 -1
  112. package/dist/tools/youtube-tools/upload-video.d.ts +34 -0
  113. package/dist/tools/youtube-tools/upload-video.js +39 -0
  114. package/dist/tools/youtube-tools/upload-video.js.map +1 -0
  115. package/package.json +3 -1
@@ -4,24 +4,32 @@ declare const submitPostParams: z.ZodObject<{
4
4
  title: z.ZodString;
5
5
  kind: z.ZodDefault<z.ZodEnum<{
6
6
  link: "link";
7
+ image: "image";
7
8
  self: "self";
8
9
  }>>;
9
10
  text: z.ZodOptional<z.ZodString>;
10
11
  url: z.ZodOptional<z.ZodString>;
12
+ image: z.ZodOptional<z.ZodString>;
13
+ imageFilename: z.ZodOptional<z.ZodString>;
14
+ imageMimeType: z.ZodOptional<z.ZodString>;
11
15
  }, z.core.$strip>;
12
16
  type SubmitPostParams = z.infer<typeof submitPostParams>;
13
17
  export declare const submitPostTool: {
14
18
  readonly name: "REDDIT_SUBMIT_POST";
15
- readonly description: "Submit a post to a Reddit subreddit (text or link)";
19
+ readonly description: "Submit a post to a Reddit subreddit (text, link, or image)";
16
20
  readonly parameters: z.ZodObject<{
17
21
  subreddit: z.ZodString;
18
22
  title: z.ZodString;
19
23
  kind: z.ZodDefault<z.ZodEnum<{
20
24
  link: "link";
25
+ image: "image";
21
26
  self: "self";
22
27
  }>>;
23
28
  text: z.ZodOptional<z.ZodString>;
24
29
  url: z.ZodOptional<z.ZodString>;
30
+ image: z.ZodOptional<z.ZodString>;
31
+ imageFilename: z.ZodOptional<z.ZodString>;
32
+ imageMimeType: z.ZodOptional<z.ZodString>;
25
33
  }, z.core.$strip>;
26
34
  readonly execute: (params: SubmitPostParams) => Promise<string>;
27
35
  };
@@ -8,19 +8,34 @@ const submitPostParams = z.object({
8
8
  .describe("The subreddit to post to (without r/ prefix)"),
9
9
  title: z.string().min(1).max(300).describe("Title of the post"),
10
10
  kind: z
11
- .enum(["self", "link"])
11
+ .enum(["self", "link", "image"])
12
12
  .default("self")
13
- .describe("Post type: 'self' for text post, 'link' for link post"),
13
+ .describe("Post type: 'self' for text, 'link' for a URL, 'image' for a photo"),
14
14
  text: z.string().optional().describe("Text content for self posts"),
15
15
  url: z.string().url().optional().describe("URL for link posts"),
16
+ image: z
17
+ .string()
18
+ .optional()
19
+ .describe("Base64-encoded image/video bytes, for kind='image'."),
20
+ imageFilename: z.string().optional().describe("Filename for the image."),
21
+ imageMimeType: z
22
+ .string()
23
+ .optional()
24
+ .describe("MIME type for the image, e.g. image/png."),
16
25
  });
17
26
  export const submitPostTool = {
18
27
  name: "REDDIT_SUBMIT_POST",
19
- description: "Submit a post to a Reddit subreddit (text or link)",
28
+ description: "Submit a post to a Reddit subreddit (text, link, or image)",
20
29
  parameters: submitPostParams,
21
30
  execute: async (params) => {
22
31
  try {
23
- const result = await getRedditService().submitPost(params.subreddit, params.title, params.kind, params.text, params.url);
32
+ const result = await getRedditService().submitPost(params.subreddit, params.title, params.kind, params.text, params.url, params.image
33
+ ? {
34
+ content: params.image,
35
+ filename: params.imageFilename ?? "image.jpg",
36
+ mimeType: params.imageMimeType ?? "image/jpeg",
37
+ }
38
+ : undefined);
24
39
  if (result.json.errors.length > 0) {
25
40
  return `Reddit post errors: ${JSON.stringify(result.json.errors)}`;
26
41
  }
@@ -1 +1 @@
1
- {"version":3,"file":"submit-post.js","sourceRoot":"","sources":["../../../src/tools/reddit-tools/submit-post.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AACvD,OAAO,EAAE,gBAAgB,EAAE,MAAM,kCAAkC,CAAC;AAEpE,MAAM,gBAAgB,GAAG,CAAC,CAAC,MAAM,CAAC;IACjC,SAAS,EAAE,CAAC;SACV,MAAM,EAAE;SACR,GAAG,CAAC,CAAC,CAAC;SACN,QAAQ,CAAC,8CAA8C,CAAC;IAC1D,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,QAAQ,CAAC,mBAAmB,CAAC;IAC/D,IAAI,EAAE,CAAC;SACL,IAAI,CAAC,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;SACtB,OAAO,CAAC,MAAM,CAAC;SACf,QAAQ,CAAC,uDAAuD,CAAC;IACnE,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,6BAA6B,CAAC;IACnE,GAAG,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,oBAAoB,CAAC;CAC/D,CAAC,CAAC;AAIH,MAAM,CAAC,MAAM,cAAc,GAAG;IAC7B,IAAI,EAAE,oBAAoB;IAC1B,WAAW,EAAE,oDAAoD;IACjE,UAAU,EAAE,gBAAgB;IAC5B,OAAO,EAAE,KAAK,EAAE,MAAwB,EAAE,EAAE;QAC3C,IAAI,CAAC;YACJ,MAAM,MAAM,GAAG,MAAM,gBAAgB,EAAE,CAAC,UAAU,CACjD,MAAM,CAAC,SAAS,EAChB,MAAM,CAAC,KAAK,EACZ,MAAM,CAAC,IAAI,EACX,MAAM,CAAC,IAAI,EACX,MAAM,CAAC,GAAG,CACV,CAAC;YACF,IAAI,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBACnC,OAAO,uBAAuB,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC;YACpE,CAAC;YACD,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC;YAC9B,OAAO,oCAAoC,MAAM,CAAC,SAAS,iBAAiB,IAAI,EAAE,IAAI,IAAI,SAAS,UAAU,IAAI,EAAE,GAAG,IAAI,SAAS,EAAE,CAAC;QACvI,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YAChB,IAAI,KAAK,YAAY,gBAAgB;gBAAE,OAAO,UAAU,KAAK,CAAC,OAAO,EAAE,CAAC;YACxE,OAAO,iCAAiC,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,eAAe,EAAE,CAAC;QACpG,CAAC;IACF,CAAC;CACQ,CAAC"}
1
+ {"version":3,"file":"submit-post.js","sourceRoot":"","sources":["../../../src/tools/reddit-tools/submit-post.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AACvD,OAAO,EAAE,gBAAgB,EAAE,MAAM,kCAAkC,CAAC;AAEpE,MAAM,gBAAgB,GAAG,CAAC,CAAC,MAAM,CAAC;IACjC,SAAS,EAAE,CAAC;SACV,MAAM,EAAE;SACR,GAAG,CAAC,CAAC,CAAC;SACN,QAAQ,CAAC,8CAA8C,CAAC;IAC1D,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,QAAQ,CAAC,mBAAmB,CAAC;IAC/D,IAAI,EAAE,CAAC;SACL,IAAI,CAAC,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC;SAC/B,OAAO,CAAC,MAAM,CAAC;SACf,QAAQ,CACR,mEAAmE,CACnE;IACF,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,6BAA6B,CAAC;IACnE,GAAG,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,oBAAoB,CAAC;IAC/D,KAAK,EAAE,CAAC;SACN,MAAM,EAAE;SACR,QAAQ,EAAE;SACV,QAAQ,CAAC,qDAAqD,CAAC;IACjE,aAAa,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,yBAAyB,CAAC;IACxE,aAAa,EAAE,CAAC;SACd,MAAM,EAAE;SACR,QAAQ,EAAE;SACV,QAAQ,CAAC,0CAA0C,CAAC;CACtD,CAAC,CAAC;AAIH,MAAM,CAAC,MAAM,cAAc,GAAG;IAC7B,IAAI,EAAE,oBAAoB;IAC1B,WAAW,EAAE,4DAA4D;IACzE,UAAU,EAAE,gBAAgB;IAC5B,OAAO,EAAE,KAAK,EAAE,MAAwB,EAAE,EAAE;QAC3C,IAAI,CAAC;YACJ,MAAM,MAAM,GAAG,MAAM,gBAAgB,EAAE,CAAC,UAAU,CACjD,MAAM,CAAC,SAAS,EAChB,MAAM,CAAC,KAAK,EACZ,MAAM,CAAC,IAAI,EACX,MAAM,CAAC,IAAI,EACX,MAAM,CAAC,GAAG,EACV,MAAM,CAAC,KAAK;gBACX,CAAC,CAAC;oBACA,OAAO,EAAE,MAAM,CAAC,KAAK;oBACrB,QAAQ,EAAE,MAAM,CAAC,aAAa,IAAI,WAAW;oBAC7C,QAAQ,EAAE,MAAM,CAAC,aAAa,IAAI,YAAY;iBAC9C;gBACF,CAAC,CAAC,SAAS,CACZ,CAAC;YACF,IAAI,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBACnC,OAAO,uBAAuB,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC;YACpE,CAAC;YACD,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC;YAC9B,OAAO,oCAAoC,MAAM,CAAC,SAAS,iBAAiB,IAAI,EAAE,IAAI,IAAI,SAAS,UAAU,IAAI,EAAE,GAAG,IAAI,SAAS,EAAE,CAAC;QACvI,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YAChB,IAAI,KAAK,YAAY,gBAAgB;gBAAE,OAAO,UAAU,KAAK,CAAC,OAAO,EAAE,CAAC;YACxE,OAAO,iCAAiC,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,eAAe,EAAE,CAAC;QACpG,CAAC;IACF,CAAC;CACQ,CAAC"}
@@ -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"}
@@ -1,13 +1,25 @@
1
1
  import { z } from "zod";
2
2
  declare const createPostParams: z.ZodObject<{
3
3
  text: z.ZodString;
4
+ replyToId: z.ZodOptional<z.ZodString>;
5
+ mediaUrl: z.ZodOptional<z.ZodString>;
6
+ mediaType: z.ZodOptional<z.ZodEnum<{
7
+ IMAGE: "IMAGE";
8
+ VIDEO: "VIDEO";
9
+ }>>;
4
10
  }, z.core.$strip>;
5
11
  type CreatePostParams = z.infer<typeof createPostParams>;
6
12
  export declare const createPostTool: {
7
13
  readonly name: "THREADS_CREATE_POST";
8
- readonly description: "Create a new text post on Threads";
14
+ readonly description: "Create a new post on Threads, optionally with an image or video";
9
15
  readonly parameters: z.ZodObject<{
10
16
  text: z.ZodString;
17
+ replyToId: z.ZodOptional<z.ZodString>;
18
+ mediaUrl: z.ZodOptional<z.ZodString>;
19
+ mediaType: z.ZodOptional<z.ZodEnum<{
20
+ IMAGE: "IMAGE";
21
+ VIDEO: "VIDEO";
22
+ }>>;
11
23
  }, z.core.$strip>;
12
24
  readonly execute: (params: CreatePostParams) => Promise<string>;
13
25
  };
@@ -7,14 +7,26 @@ const createPostParams = z.object({
7
7
  .min(1)
8
8
  .max(500)
9
9
  .describe("The text content of the Threads post"),
10
+ replyToId: z.string().optional().describe("ID of the post to reply to."),
11
+ mediaUrl: z
12
+ .string()
13
+ .url()
14
+ .optional()
15
+ .describe("Public image or video URL to attach."),
16
+ mediaType: z
17
+ .enum(["IMAGE", "VIDEO"])
18
+ .optional()
19
+ .describe("Required when `mediaUrl` is set."),
10
20
  });
11
21
  export const createPostTool = {
12
22
  name: "THREADS_CREATE_POST",
13
- description: "Create a new text post on Threads",
23
+ description: "Create a new post on Threads, optionally with an image or video",
14
24
  parameters: createPostParams,
15
25
  execute: async (params) => {
16
26
  try {
17
- const result = await getThreadsService().createPost(params.text);
27
+ const result = await getThreadsService().createPost(params.text, params.replyToId, params.mediaUrl && params.mediaType
28
+ ? { url: params.mediaUrl, type: params.mediaType }
29
+ : undefined);
18
30
  return `Post created successfully on Threads!\n\nPost ID: ${result.id}`;
19
31
  }
20
32
  catch (error) {
@@ -1 +1 @@
1
- {"version":3,"file":"create-post.js","sourceRoot":"","sources":["../../../src/tools/threads-tools/create-post.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,gBAAgB,GAAG,CAAC,CAAC,MAAM,CAAC;IACjC,IAAI,EAAE,CAAC;SACL,MAAM,EAAE;SACR,GAAG,CAAC,CAAC,CAAC;SACN,GAAG,CAAC,GAAG,CAAC;SACR,QAAQ,CAAC,sCAAsC,CAAC;CAClD,CAAC,CAAC;AAIH,MAAM,CAAC,MAAM,cAAc,GAAG;IAC7B,IAAI,EAAE,qBAAqB;IAC3B,WAAW,EAAE,mCAAmC;IAChD,UAAU,EAAE,gBAAgB;IAC5B,OAAO,EAAE,KAAK,EAAE,MAAwB,EAAE,EAAE;QAC3C,IAAI,CAAC;YACJ,MAAM,MAAM,GAAG,MAAM,iBAAiB,EAAE,CAAC,UAAU,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;YACjE,OAAO,qDAAqD,MAAM,CAAC,EAAE,EAAE,CAAC;QACzE,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YAChB,IAAI,KAAK,YAAY,gBAAgB;gBAAE,OAAO,UAAU,KAAK,CAAC,OAAO,EAAE,CAAC;YACxE,OAAO,gCAAgC,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,eAAe,EAAE,CAAC;QACnG,CAAC;IACF,CAAC;CACQ,CAAC"}
1
+ {"version":3,"file":"create-post.js","sourceRoot":"","sources":["../../../src/tools/threads-tools/create-post.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,gBAAgB,GAAG,CAAC,CAAC,MAAM,CAAC;IACjC,IAAI,EAAE,CAAC;SACL,MAAM,EAAE;SACR,GAAG,CAAC,CAAC,CAAC;SACN,GAAG,CAAC,GAAG,CAAC;SACR,QAAQ,CAAC,sCAAsC,CAAC;IAClD,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,6BAA6B,CAAC;IACxE,QAAQ,EAAE,CAAC;SACT,MAAM,EAAE;SACR,GAAG,EAAE;SACL,QAAQ,EAAE;SACV,QAAQ,CAAC,sCAAsC,CAAC;IAClD,SAAS,EAAE,CAAC;SACV,IAAI,CAAC,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;SACxB,QAAQ,EAAE;SACV,QAAQ,CAAC,kCAAkC,CAAC;CAC9C,CAAC,CAAC;AAIH,MAAM,CAAC,MAAM,cAAc,GAAG;IAC7B,IAAI,EAAE,qBAAqB;IAC3B,WAAW,EACV,iEAAiE;IAClE,UAAU,EAAE,gBAAgB;IAC5B,OAAO,EAAE,KAAK,EAAE,MAAwB,EAAE,EAAE;QAC3C,IAAI,CAAC;YACJ,MAAM,MAAM,GAAG,MAAM,iBAAiB,EAAE,CAAC,UAAU,CAClD,MAAM,CAAC,IAAI,EACX,MAAM,CAAC,SAAS,EAChB,MAAM,CAAC,QAAQ,IAAI,MAAM,CAAC,SAAS;gBAClC,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM,CAAC,QAAQ,EAAE,IAAI,EAAE,MAAM,CAAC,SAAS,EAAE;gBAClD,CAAC,CAAC,SAAS,CACZ,CAAC;YACF,OAAO,qDAAqD,MAAM,CAAC,EAAE,EAAE,CAAC;QACzE,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YAChB,IAAI,KAAK,YAAY,gBAAgB;gBAAE,OAAO,UAAU,KAAK,CAAC,OAAO,EAAE,CAAC;YACxE,OAAO,gCAAgC,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,eAAe,EAAE,CAAC;QACnG,CAAC;IACF,CAAC;CACQ,CAAC"}
@@ -3,10 +3,12 @@ declare const params: z.ZodObject<{
3
3
  text: z.ZodString;
4
4
  title: z.ZodOptional<z.ZodString>;
5
5
  tags: z.ZodOptional<z.ZodArray<z.ZodString>>;
6
+ image: z.ZodOptional<z.ZodString>;
7
+ imageContentType: z.ZodDefault<z.ZodOptional<z.ZodString>>;
6
8
  state: z.ZodDefault<z.ZodOptional<z.ZodEnum<{
7
- private: "private";
8
9
  draft: "draft";
9
10
  published: "published";
11
+ private: "private";
10
12
  queue: "queue";
11
13
  }>>>;
12
14
  blogIdentifier: z.ZodOptional<z.ZodString>;
@@ -20,10 +22,12 @@ export declare const createPostTool: {
20
22
  text: z.ZodString;
21
23
  title: z.ZodOptional<z.ZodString>;
22
24
  tags: z.ZodOptional<z.ZodArray<z.ZodString>>;
25
+ image: z.ZodOptional<z.ZodString>;
26
+ imageContentType: z.ZodDefault<z.ZodOptional<z.ZodString>>;
23
27
  state: z.ZodDefault<z.ZodOptional<z.ZodEnum<{
24
- private: "private";
25
28
  draft: "draft";
26
29
  published: "published";
30
+ private: "private";
27
31
  queue: "queue";
28
32
  }>>>;
29
33
  blogIdentifier: z.ZodOptional<z.ZodString>;
@@ -1,17 +1,32 @@
1
1
  import { z } from "zod";
2
2
  import { CredentialsError } from "../../lib/errors.js";
3
- import { TumblrService, getTumblrService } from "../../services/tumblr-service.js";
3
+ import { getTumblrService, TumblrService, } from "../../services/tumblr-service.js";
4
4
  const params = z.object({
5
5
  text: z.string().min(1).describe("Post text content (Markdown supported)"),
6
6
  title: z.string().optional().describe("Optional heading/title for the post"),
7
7
  tags: z.array(z.string()).optional().describe("Tags for the post"),
8
+ image: z
9
+ .string()
10
+ .optional()
11
+ .describe("A public image URL, or base64-encoded image bytes to attach."),
12
+ imageContentType: z
13
+ .string()
14
+ .optional()
15
+ .default("image/jpeg")
16
+ .describe("MIME type, required when `image` is base64-encoded bytes."),
8
17
  state: z
9
18
  .enum(["published", "draft", "queue", "private"])
10
19
  .optional()
11
20
  .default("published")
12
21
  .describe("Post state (default: published)"),
13
- blogIdentifier: z.string().optional().describe("Blog name or URL (overrides TUMBLR_BLOG_IDENTIFIER env var)"),
14
- accessToken: z.string().optional().describe("Tumblr OAuth token (overrides TUMBLR_ACCESS_TOKEN env var)"),
22
+ blogIdentifier: z
23
+ .string()
24
+ .optional()
25
+ .describe("Blog name or URL (overrides TUMBLR_BLOG_IDENTIFIER env var)"),
26
+ accessToken: z
27
+ .string()
28
+ .optional()
29
+ .describe("Tumblr OAuth token (overrides TUMBLR_ACCESS_TOKEN env var)"),
15
30
  });
16
31
  export const createPostTool = {
17
32
  name: "TUMBLR_CREATE_POST",
@@ -20,12 +35,28 @@ export const createPostTool = {
20
35
  execute: async (p) => {
21
36
  try {
22
37
  const service = p.accessToken
23
- ? new TumblrService({ accessToken: p.accessToken, blogIdentifier: p.blogIdentifier })
38
+ ? new TumblrService({
39
+ accessToken: p.accessToken,
40
+ blogIdentifier: p.blogIdentifier,
41
+ })
24
42
  : getTumblrService();
25
- const content = [
26
- { type: "text", text: p.text },
27
- ];
28
- const result = await service.createPost(p.blogIdentifier, content, p.tags ?? [], p.state ?? "published", p.title);
43
+ const content = [{ type: "text", text: p.text }];
44
+ const isUrl = p.image?.startsWith("http://") || p.image?.startsWith("https://");
45
+ if (p.image && isUrl) {
46
+ content.push({ type: "image", media: { url: p.image } });
47
+ }
48
+ else if (p.image) {
49
+ content.push({ type: "image", media: { identifier: "image0" } });
50
+ }
51
+ const result = await service.createPost(p.blogIdentifier, content, p.tags ?? [], p.state ?? "published", p.title, false, p.image && !isUrl
52
+ ? [
53
+ {
54
+ content: p.image,
55
+ contentType: p.imageContentType ?? "image/jpeg",
56
+ identifier: "image0",
57
+ },
58
+ ]
59
+ : undefined);
29
60
  const post = result.response;
30
61
  return [
31
62
  `Tumblr post ${p.state === "draft" ? "saved as draft" : p.state === "queue" ? "added to queue" : "published"}!`,
@@ -1 +1 @@
1
- {"version":3,"file":"create-post.js","sourceRoot":"","sources":["../../../src/tools/tumblr-tools/create-post.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"create-post.js","sourceRoot":"","sources":["../../../src/tools/tumblr-tools/create-post.ts"],"names":[],"mappings":"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"}
@@ -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";
@@ -1,13 +1,21 @@
1
1
  import { z } from "zod";
2
2
  declare const sendTweetParams: z.ZodObject<{
3
3
  text: z.ZodString;
4
+ media: z.ZodOptional<z.ZodArray<z.ZodObject<{
5
+ content: z.ZodString;
6
+ mimeType: z.ZodString;
7
+ }, z.core.$strip>>>;
4
8
  }, z.core.$strip>;
5
9
  type SendTweetParams = z.infer<typeof sendTweetParams>;
6
10
  export declare const sendTweetTool: {
7
11
  readonly name: "SEND_TWEET";
8
- readonly description: "Post a tweet on Twitter/X";
12
+ readonly description: "Post a tweet on Twitter/X, optionally with image/gif/video attachments";
9
13
  readonly parameters: z.ZodObject<{
10
14
  text: z.ZodString;
15
+ media: z.ZodOptional<z.ZodArray<z.ZodObject<{
16
+ content: z.ZodString;
17
+ mimeType: z.ZodString;
18
+ }, z.core.$strip>>>;
11
19
  }, z.core.$strip>;
12
20
  readonly execute: (params: SendTweetParams) => Promise<string>;
13
21
  };
@@ -3,14 +3,22 @@ import { CredentialsError } from "../../lib/errors.js";
3
3
  import { getTwitterService } from "../../services/twitter-service.js";
4
4
  const sendTweetParams = z.object({
5
5
  text: z.string().min(1).max(280).describe("The text of the tweet to send"),
6
+ media: z
7
+ .array(z.object({
8
+ content: z.string().describe("Base64-encoded image/gif/video bytes."),
9
+ mimeType: z.string().describe("MIME type, e.g. image/png, video/mp4."),
10
+ }))
11
+ .max(4)
12
+ .optional()
13
+ .describe("Media attachments (up to 4 images, or 1 gif/video)."),
6
14
  });
7
15
  export const sendTweetTool = {
8
16
  name: "SEND_TWEET",
9
- description: "Post a tweet on Twitter/X",
17
+ description: "Post a tweet on Twitter/X, optionally with image/gif/video attachments",
10
18
  parameters: sendTweetParams,
11
19
  execute: async (params) => {
12
20
  try {
13
- const tweet = await getTwitterService().sendTweet(params.text);
21
+ const tweet = await getTwitterService().sendTweet(params.text, params.media);
14
22
  return `Tweet sent successfully!\n\nTweet ID: ${tweet.id}\nText: ${tweet.text}`;
15
23
  }
16
24
  catch (error) {
@@ -1 +1 @@
1
- {"version":3,"file":"send-tweet.js","sourceRoot":"","sources":["../../../src/tools/twitter-tools/send-tweet.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,eAAe,GAAG,CAAC,CAAC,MAAM,CAAC;IAChC,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,QAAQ,CAAC,+BAA+B,CAAC;CAC1E,CAAC,CAAC;AAIH,MAAM,CAAC,MAAM,aAAa,GAAG;IAC5B,IAAI,EAAE,YAAY;IAClB,WAAW,EAAE,2BAA2B;IACxC,UAAU,EAAE,eAAe;IAC3B,OAAO,EAAE,KAAK,EAAE,MAAuB,EAAE,EAAE;QAC1C,IAAI,CAAC;YACJ,MAAM,KAAK,GAAG,MAAM,iBAAiB,EAAE,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;YAC/D,OAAO,yCAAyC,KAAK,CAAC,EAAE,WAAW,KAAK,CAAC,IAAI,EAAE,CAAC;QACjF,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"}
1
+ {"version":3,"file":"send-tweet.js","sourceRoot":"","sources":["../../../src/tools/twitter-tools/send-tweet.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,eAAe,GAAG,CAAC,CAAC,MAAM,CAAC;IAChC,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,QAAQ,CAAC,+BAA+B,CAAC;IAC1E,KAAK,EAAE,CAAC;SACN,KAAK,CACL,CAAC,CAAC,MAAM,CAAC;QACR,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,uCAAuC,CAAC;QACrE,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,uCAAuC,CAAC;KACtE,CAAC,CACF;SACA,GAAG,CAAC,CAAC,CAAC;SACN,QAAQ,EAAE;SACV,QAAQ,CAAC,qDAAqD,CAAC;CACjE,CAAC,CAAC;AAIH,MAAM,CAAC,MAAM,aAAa,GAAG;IAC5B,IAAI,EAAE,YAAY;IAClB,WAAW,EACV,wEAAwE;IACzE,UAAU,EAAE,eAAe;IAC3B,OAAO,EAAE,KAAK,EAAE,MAAuB,EAAE,EAAE;QAC1C,IAAI,CAAC;YACJ,MAAM,KAAK,GAAG,MAAM,iBAAiB,EAAE,CAAC,SAAS,CAChD,MAAM,CAAC,IAAI,EACX,MAAM,CAAC,KAAK,CACZ,CAAC;YACF,OAAO,yCAAyC,KAAK,CAAC,EAAE,WAAW,KAAK,CAAC,IAAI,EAAE,CAAC;QACjF,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"}
@@ -1,15 +1,31 @@
1
1
  import { z } from "zod";
2
2
  declare const sendMessageParams: z.ZodObject<{
3
3
  to: z.ZodString;
4
- text: z.ZodString;
4
+ text: z.ZodOptional<z.ZodString>;
5
+ media: z.ZodOptional<z.ZodString>;
6
+ mediaKind: z.ZodDefault<z.ZodOptional<z.ZodEnum<{
7
+ image: "image";
8
+ document: "document";
9
+ video: "video";
10
+ }>>>;
11
+ mediaContentType: z.ZodOptional<z.ZodString>;
12
+ mediaFilename: z.ZodOptional<z.ZodString>;
5
13
  }, z.core.$strip>;
6
14
  type SendMessageParams = z.infer<typeof sendMessageParams>;
7
15
  export declare const sendMessageTool: {
8
16
  readonly name: "SEND_WHATSAPP_MESSAGE";
9
- readonly description: "Send a WhatsApp message to a phone number";
17
+ readonly description: "Send a WhatsApp message to a phone number, optionally with an image, video, or document";
10
18
  readonly parameters: z.ZodObject<{
11
19
  to: z.ZodString;
12
- text: z.ZodString;
20
+ text: z.ZodOptional<z.ZodString>;
21
+ media: z.ZodOptional<z.ZodString>;
22
+ mediaKind: z.ZodDefault<z.ZodOptional<z.ZodEnum<{
23
+ image: "image";
24
+ document: "document";
25
+ video: "video";
26
+ }>>>;
27
+ mediaContentType: z.ZodOptional<z.ZodString>;
28
+ mediaFilename: z.ZodOptional<z.ZodString>;
13
29
  }, z.core.$strip>;
14
30
  readonly execute: (params: SendMessageParams) => Promise<string>;
15
31
  };
@@ -5,15 +5,41 @@ const sendMessageParams = z.object({
5
5
  to: z
6
6
  .string()
7
7
  .describe("Recipient phone number in E.164 format (e.g. +2348012345678)"),
8
- text: z.string().min(1).describe("The message text to send"),
8
+ text: z
9
+ .string()
10
+ .optional()
11
+ .describe("The message text, or caption when media is attached."),
12
+ media: z
13
+ .string()
14
+ .optional()
15
+ .describe("A public media URL, or base64-encoded bytes."),
16
+ mediaKind: z
17
+ .enum(["image", "video", "document"])
18
+ .optional()
19
+ .default("image")
20
+ .describe("Media type, used when `media` is set."),
21
+ mediaContentType: z
22
+ .string()
23
+ .optional()
24
+ .describe("MIME type, required when `media` is base64-encoded bytes."),
25
+ mediaFilename: z
26
+ .string()
27
+ .optional()
28
+ .describe("Filename, used for document messages or base64 uploads."),
9
29
  });
10
30
  export const sendMessageTool = {
11
31
  name: "SEND_WHATSAPP_MESSAGE",
12
- description: "Send a WhatsApp message to a phone number",
32
+ description: "Send a WhatsApp message to a phone number, optionally with an image, video, or document",
13
33
  parameters: sendMessageParams,
14
34
  execute: async (params) => {
15
35
  try {
16
- const message = await getWhatsappService().sendMessage(params.to, params.text);
36
+ const message = await getWhatsappService().sendMessage(params.to, params.text ?? "", params.media
37
+ ? {
38
+ media: params.media,
39
+ contentType: params.mediaContentType,
40
+ filename: params.mediaFilename,
41
+ }
42
+ : undefined, params.mediaKind);
17
43
  return `Message sent successfully via WhatsApp!\n\nMessage ID: ${message.messages[0].id}\nRecipient: ${message.contacts[0].input}`;
18
44
  }
19
45
  catch (error) {
@@ -1 +1 @@
1
- {"version":3,"file":"send-message.js","sourceRoot":"","sources":["../../../src/tools/whatsapp-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,kBAAkB,EAAE,MAAM,oCAAoC,CAAC;AAExE,MAAM,iBAAiB,GAAG,CAAC,CAAC,MAAM,CAAC;IAClC,EAAE,EAAE,CAAC;SACH,MAAM,EAAE;SACR,QAAQ,CAAC,8DAA8D,CAAC;IAC1E,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,uBAAuB;IAC7B,WAAW,EAAE,2CAA2C;IACxD,UAAU,EAAE,iBAAiB;IAC7B,OAAO,EAAE,KAAK,EAAE,MAAyB,EAAE,EAAE;QAC5C,IAAI,CAAC;YACJ,MAAM,OAAO,GAAG,MAAM,kBAAkB,EAAE,CAAC,WAAW,CACrD,MAAM,CAAC,EAAE,EACT,MAAM,CAAC,IAAI,CACX,CAAC;YACF,OAAO,0DAA0D,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,EAAE,gBAAgB,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC;QACpI,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/whatsapp-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,kBAAkB,EAAE,MAAM,oCAAoC,CAAC;AAExE,MAAM,iBAAiB,GAAG,CAAC,CAAC,MAAM,CAAC;IAClC,EAAE,EAAE,CAAC;SACH,MAAM,EAAE;SACR,QAAQ,CAAC,8DAA8D,CAAC;IAC1E,IAAI,EAAE,CAAC;SACL,MAAM,EAAE;SACR,QAAQ,EAAE;SACV,QAAQ,CAAC,sDAAsD,CAAC;IAClE,KAAK,EAAE,CAAC;SACN,MAAM,EAAE;SACR,QAAQ,EAAE;SACV,QAAQ,CAAC,8CAA8C,CAAC;IAC1D,SAAS,EAAE,CAAC;SACV,IAAI,CAAC,CAAC,OAAO,EAAE,OAAO,EAAE,UAAU,CAAC,CAAC;SACpC,QAAQ,EAAE;SACV,OAAO,CAAC,OAAO,CAAC;SAChB,QAAQ,CAAC,uCAAuC,CAAC;IACnD,gBAAgB,EAAE,CAAC;SACjB,MAAM,EAAE;SACR,QAAQ,EAAE;SACV,QAAQ,CAAC,2DAA2D,CAAC;IACvE,aAAa,EAAE,CAAC;SACd,MAAM,EAAE;SACR,QAAQ,EAAE;SACV,QAAQ,CAAC,yDAAyD,CAAC;CACrE,CAAC,CAAC;AAIH,MAAM,CAAC,MAAM,eAAe,GAAG;IAC9B,IAAI,EAAE,uBAAuB;IAC7B,WAAW,EACV,yFAAyF;IAC1F,UAAU,EAAE,iBAAiB;IAC7B,OAAO,EAAE,KAAK,EAAE,MAAyB,EAAE,EAAE;QAC5C,IAAI,CAAC;YACJ,MAAM,OAAO,GAAG,MAAM,kBAAkB,EAAE,CAAC,WAAW,CACrD,MAAM,CAAC,EAAE,EACT,MAAM,CAAC,IAAI,IAAI,EAAE,EACjB,MAAM,CAAC,KAAK;gBACX,CAAC,CAAC;oBACA,KAAK,EAAE,MAAM,CAAC,KAAK;oBACnB,WAAW,EAAE,MAAM,CAAC,gBAAgB;oBACpC,QAAQ,EAAE,MAAM,CAAC,aAAa;iBAC9B;gBACF,CAAC,CAAC,SAAS,EACZ,MAAM,CAAC,SAAS,CAChB,CAAC;YACF,OAAO,0DAA0D,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,EAAE,gBAAgB,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC;QACpI,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"}