social-mcp 1.2.1 → 1.3.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +41 -22
- package/dist/index.js +67 -25
- package/dist/index.js.map +1 -1
- package/dist/lib/config.d.ts +1 -0
- package/dist/lib/config.js +5 -3
- package/dist/lib/config.js.map +1 -1
- package/dist/lib/errors.d.ts +3 -0
- package/dist/lib/errors.js +7 -0
- package/dist/lib/errors.js.map +1 -0
- package/dist/services/discord-service.d.ts +8 -0
- package/dist/services/discord-service.js +25 -5
- package/dist/services/discord-service.js.map +1 -1
- package/dist/services/facebook-service.d.ts +10 -1
- package/dist/services/facebook-service.js +33 -6
- package/dist/services/facebook-service.js.map +1 -1
- package/dist/services/instagram-service.d.ts +10 -0
- package/dist/services/instagram-service.js +33 -7
- package/dist/services/instagram-service.js.map +1 -1
- package/dist/services/slack-service.d.ts +12 -0
- package/dist/services/slack-service.js +39 -3
- package/dist/services/slack-service.js.map +1 -1
- package/dist/services/telegram-service.d.ts +3 -0
- package/dist/services/telegram-service.js +34 -1
- package/dist/services/telegram-service.js.map +1 -1
- package/dist/services/twitter-service.d.ts +11 -0
- package/dist/services/twitter-service.js +50 -7
- package/dist/services/twitter-service.js.map +1 -1
- package/dist/services/whatsapp-service.d.ts +3 -17
- package/dist/services/whatsapp-service.js +25 -20
- package/dist/services/whatsapp-service.js.map +1 -1
- package/dist/tools/discord-tools/get-messages.d.ts +16 -0
- package/dist/tools/discord-tools/get-messages.js +36 -0
- package/dist/tools/discord-tools/get-messages.js.map +1 -0
- package/dist/tools/discord-tools/send-message.js +7 -18
- package/dist/tools/discord-tools/send-message.js.map +1 -1
- package/dist/tools/facebook-tools/create-post.js +7 -17
- package/dist/tools/facebook-tools/create-post.js.map +1 -1
- package/dist/tools/facebook-tools/get-posts.d.ts +16 -0
- package/dist/tools/facebook-tools/get-posts.js +36 -0
- package/dist/tools/facebook-tools/get-posts.js.map +1 -0
- package/dist/tools/instagram-tools/create-post.d.ts +3 -3
- package/dist/tools/instagram-tools/create-post.js +9 -18
- package/dist/tools/instagram-tools/create-post.js.map +1 -1
- package/dist/tools/instagram-tools/get-posts.d.ts +16 -0
- package/dist/tools/instagram-tools/get-posts.js +36 -0
- package/dist/tools/instagram-tools/get-posts.js.map +1 -0
- package/dist/tools/slack-tools/get-messages.d.ts +16 -0
- package/dist/tools/slack-tools/get-messages.js +36 -0
- package/dist/tools/slack-tools/get-messages.js.map +1 -0
- package/dist/tools/slack-tools/list-channels.d.ts +14 -0
- package/dist/tools/slack-tools/list-channels.js +35 -0
- package/dist/tools/slack-tools/list-channels.js.map +1 -0
- package/dist/tools/slack-tools/send-message.js +7 -17
- package/dist/tools/slack-tools/send-message.js.map +1 -1
- package/dist/tools/telegram-tools/delete-message.d.ts +16 -0
- package/dist/tools/telegram-tools/delete-message.js +26 -0
- package/dist/tools/telegram-tools/delete-message.js.map +1 -0
- package/dist/tools/telegram-tools/edit-message.d.ts +18 -0
- package/dist/tools/telegram-tools/edit-message.js +27 -0
- package/dist/tools/telegram-tools/edit-message.js.map +1 -0
- package/dist/tools/telegram-tools/forward-message.d.ts +2 -4
- package/dist/tools/telegram-tools/forward-message.js +9 -24
- package/dist/tools/telegram-tools/forward-message.js.map +1 -1
- package/dist/tools/telegram-tools/get-channel-info.d.ts +1 -1
- package/dist/tools/telegram-tools/get-channel-info.js +8 -22
- package/dist/tools/telegram-tools/get-channel-info.js.map +1 -1
- package/dist/tools/telegram-tools/get-channel-members.d.ts +1 -1
- package/dist/tools/telegram-tools/get-channel-members.js +13 -29
- package/dist/tools/telegram-tools/get-channel-members.js.map +1 -1
- package/dist/tools/telegram-tools/pin-message.d.ts +1 -1
- package/dist/tools/telegram-tools/pin-message.js +8 -22
- package/dist/tools/telegram-tools/pin-message.js.map +1 -1
- package/dist/tools/telegram-tools/send-message.d.ts +1 -1
- package/dist/tools/telegram-tools/send-message.js +8 -20
- package/dist/tools/telegram-tools/send-message.js.map +1 -1
- package/dist/tools/twitter-tools/delete-tweet.d.ts +14 -0
- package/dist/tools/twitter-tools/delete-tweet.js +23 -0
- package/dist/tools/twitter-tools/delete-tweet.js.map +1 -0
- package/dist/tools/twitter-tools/get-user-info.d.ts +2 -2
- package/dist/tools/twitter-tools/get-user-info.js +13 -25
- package/dist/tools/twitter-tools/get-user-info.js.map +1 -1
- package/dist/tools/twitter-tools/like-tweet.d.ts +14 -0
- package/dist/tools/twitter-tools/like-tweet.js +23 -0
- package/dist/tools/twitter-tools/like-tweet.js.map +1 -0
- package/dist/tools/twitter-tools/reply-tweet.d.ts +16 -0
- package/dist/tools/twitter-tools/reply-tweet.js +28 -0
- package/dist/tools/twitter-tools/reply-tweet.js.map +1 -0
- package/dist/tools/twitter-tools/search-tweets.d.ts +1 -1
- package/dist/tools/twitter-tools/search-tweets.js +11 -24
- package/dist/tools/twitter-tools/search-tweets.js.map +1 -1
- package/dist/tools/twitter-tools/send-tweet.d.ts +1 -1
- package/dist/tools/twitter-tools/send-tweet.js +8 -18
- package/dist/tools/twitter-tools/send-tweet.js.map +1 -1
- package/dist/tools/whatsapp-tools/get-messages.d.ts +0 -13
- package/dist/tools/whatsapp-tools/get-messages.js +1 -39
- package/dist/tools/whatsapp-tools/get-messages.js.map +1 -1
- package/dist/tools/whatsapp-tools/send-message.d.ts +1 -1
- package/dist/tools/whatsapp-tools/send-message.js +11 -19
- package/dist/tools/whatsapp-tools/send-message.js.map +1 -1
- package/package.json +9 -6
- package/dist/constants.d.ts +0 -2
- package/dist/constants.js +0 -4
- package/dist/constants.js.map +0 -1
- package/dist/run_tools_discord.d.ts +0 -19
- package/dist/run_tools_discord.js +0 -49
- package/dist/run_tools_discord.js.map +0 -1
- package/dist/run_tools_facebook.d.ts +0 -19
- package/dist/run_tools_facebook.js +0 -49
- package/dist/run_tools_facebook.js.map +0 -1
- package/dist/run_tools_instagram.d.ts +0 -20
- package/dist/run_tools_instagram.js +0 -54
- package/dist/run_tools_instagram.js.map +0 -1
- package/dist/run_tools_slack.d.ts +0 -19
- package/dist/run_tools_slack.js +0 -49
- package/dist/run_tools_slack.js.map +0 -1
- package/dist/run_tools_telegram.d.ts +0 -20
- package/dist/run_tools_telegram.js +0 -107
- package/dist/run_tools_telegram.js.map +0 -1
- package/dist/run_tools_twitter.d.ts +0 -23
- package/dist/run_tools_twitter.js +0 -74
- package/dist/run_tools_twitter.js.map +0 -1
- package/dist/run_tools_whatsapp.d.ts +0 -20
- package/dist/run_tools_whatsapp.js +0 -58
- package/dist/run_tools_whatsapp.js.map +0 -1
- package/dist/types.d.ts +0 -4
- package/dist/types.js +0 -4
- package/dist/types.js.map +0 -1
package/README.md
CHANGED
|
@@ -6,13 +6,13 @@ An MCP (Model Context Protocol) server that lets AI assistants post and interact
|
|
|
6
6
|
|
|
7
7
|
| Platform | Tools |
|
|
8
8
|
|-----------|-------|
|
|
9
|
-
| Telegram | Send message, get channel info, forward message, pin message, get channel administrators |
|
|
10
|
-
| Twitter/X | Send tweet, get user info, search tweets |
|
|
11
|
-
| Discord | Send message |
|
|
12
|
-
| WhatsApp | Send message
|
|
13
|
-
| Facebook | Create post |
|
|
14
|
-
| Instagram | Create post |
|
|
15
|
-
| Slack | Send message |
|
|
9
|
+
| Telegram | Send message, get channel info, forward message, pin message, get channel administrators, edit message, delete message |
|
|
10
|
+
| Twitter/X | Send tweet, reply to tweet, like tweet, delete tweet, get user info, search tweets |
|
|
11
|
+
| Discord | Send message, get messages |
|
|
12
|
+
| WhatsApp | Send message |
|
|
13
|
+
| Facebook | Create post, get posts |
|
|
14
|
+
| Instagram | Create post, get posts |
|
|
15
|
+
| Slack | Send message, get messages, list channels |
|
|
16
16
|
|
|
17
17
|
## Quick Start
|
|
18
18
|
|
|
@@ -75,7 +75,7 @@ Add to `~/Library/Application Support/Claude/claude_desktop_config.json` (macOS)
|
|
|
75
75
|
}
|
|
76
76
|
```
|
|
77
77
|
|
|
78
|
-
Only include env vars for the platforms you actually use —
|
|
78
|
+
Only include env vars for the platforms you actually use — unconfigured platforms are reported at startup but do not prevent the server from running.
|
|
79
79
|
|
|
80
80
|
## Environment Variables
|
|
81
81
|
|
|
@@ -97,7 +97,7 @@ Copy `example.env` to `.env` and fill in the credentials for the platforms you w
|
|
|
97
97
|
### Discord
|
|
98
98
|
| Variable | Description |
|
|
99
99
|
|----------|-------------|
|
|
100
|
-
| `DISCORD_BOT_TOKEN` | Bot token from the [Discord Developer Portal](https://discord.com/developers/applications) — bot must have Send Messages
|
|
100
|
+
| `DISCORD_BOT_TOKEN` | Bot token from the [Discord Developer Portal](https://discord.com/developers/applications) — bot must have Send Messages and Read Message History permissions |
|
|
101
101
|
|
|
102
102
|
### WhatsApp Business
|
|
103
103
|
| Variable | Description |
|
|
@@ -118,46 +118,65 @@ Copy `example.env` to `.env` and fill in the credentials for the platforms you w
|
|
|
118
118
|
### Slack
|
|
119
119
|
| Variable | Description |
|
|
120
120
|
|----------|-------------|
|
|
121
|
-
| `SLACK_BOT_TOKEN` | Bot token from [api.slack.com](https://api.slack.com/apps) — requires `chat:write`
|
|
121
|
+
| `SLACK_BOT_TOKEN` | Bot token from [api.slack.com](https://api.slack.com/apps) — requires `chat:write`, `channels:history`, `channels:read` scopes |
|
|
122
122
|
|
|
123
123
|
## Available Tools
|
|
124
124
|
|
|
125
125
|
### Telegram
|
|
126
|
-
- **
|
|
127
|
-
- **
|
|
128
|
-
- **
|
|
129
|
-
- **
|
|
130
|
-
- **
|
|
126
|
+
- **TELEGRAM_SEND_MESSAGE** — Send a message to a chat or channel (`chatId`, `text`)
|
|
127
|
+
- **TELEGRAM_GET_CHANNEL_INFO** — Get channel metadata (`channelId`)
|
|
128
|
+
- **TELEGRAM_FORWARD_MESSAGE** — Forward a message between chats (`fromChatId`, `toChatId`, `messageId`)
|
|
129
|
+
- **TELEGRAM_PIN_MESSAGE** — Pin a message in a chat (`chatId`, `messageId`)
|
|
130
|
+
- **TELEGRAM_GET_CHANNEL_MEMBERS** — List channel administrators (`channelId`, `limit`)
|
|
131
|
+
- **TELEGRAM_EDIT_MESSAGE** — Edit the text of a message (`chatId`, `messageId`, `text`)
|
|
132
|
+
- **TELEGRAM_DELETE_MESSAGE** — Delete a message (`chatId`, `messageId`)
|
|
131
133
|
|
|
132
134
|
### Twitter / X
|
|
133
135
|
- **SEND_TWEET** — Post a tweet (`text`, max 280 chars)
|
|
134
|
-
- **
|
|
136
|
+
- **REPLY_TWEET** — Reply to a tweet (`tweetId`, `text`)
|
|
137
|
+
- **LIKE_TWEET** — Like a tweet (`tweetId`)
|
|
138
|
+
- **DELETE_TWEET** — Delete a tweet (`tweetId`)
|
|
139
|
+
- **GET_TWITTER_USER_INFO** — Get a user's profile and metrics (`username`)
|
|
135
140
|
- **SEARCH_TWEETS** — Search recent tweets (`query`, `maxResults`)
|
|
136
141
|
|
|
137
142
|
### Discord
|
|
138
143
|
- **SEND_DISCORD_MESSAGE** — Send a message to a channel (`channelId`, `content`)
|
|
144
|
+
- **GET_DISCORD_MESSAGES** — Retrieve recent messages from a channel (`channelId`, `limit`)
|
|
139
145
|
|
|
140
146
|
### WhatsApp
|
|
141
147
|
- **SEND_WHATSAPP_MESSAGE** — Send a message to a phone number in E.164 format (`to`, `text`)
|
|
142
|
-
|
|
148
|
+
|
|
149
|
+
> **Note:** WhatsApp message retrieval requires webhook setup and cannot be polled via the API.
|
|
143
150
|
|
|
144
151
|
### Facebook
|
|
145
152
|
- **CREATE_FACEBOOK_POST** — Create a post on a Facebook page (`pageId`, `message`)
|
|
153
|
+
- **GET_FACEBOOK_POSTS** — Retrieve recent posts from a page (`pageId`, `limit`)
|
|
146
154
|
|
|
147
155
|
### Instagram
|
|
148
|
-
- **CREATE_INSTAGRAM_POST** — Publish an image post (`userId`, `imageUrl`, `
|
|
156
|
+
- **CREATE_INSTAGRAM_POST** — Publish an image post (`userId`, `imageUrl`, `caption`)
|
|
157
|
+
- **GET_INSTAGRAM_POSTS** — Retrieve recent posts from an account (`userId`, `limit`)
|
|
149
158
|
|
|
150
159
|
### Slack
|
|
151
160
|
- **SEND_SLACK_MESSAGE** — Send a message to a channel (`channelId`, `text`)
|
|
161
|
+
- **GET_SLACK_MESSAGES** — Retrieve recent messages from a channel (`channelId`, `limit`)
|
|
162
|
+
- **LIST_SLACK_CHANNELS** — List public channels in the workspace (`limit`)
|
|
152
163
|
|
|
153
164
|
## Development
|
|
154
165
|
|
|
155
166
|
```bash
|
|
156
167
|
pnpm install
|
|
157
|
-
pnpm run build
|
|
158
|
-
pnpm run
|
|
159
|
-
pnpm run
|
|
160
|
-
pnpm run
|
|
168
|
+
pnpm run build # compile TypeScript
|
|
169
|
+
pnpm run clean # remove dist/
|
|
170
|
+
pnpm run watch # watch mode
|
|
171
|
+
pnpm run test # run tests
|
|
172
|
+
pnpm run lint # lint with Biome
|
|
173
|
+
pnpm run format # format with Biome
|
|
174
|
+
```
|
|
175
|
+
|
|
176
|
+
For a clean rebuild:
|
|
177
|
+
|
|
178
|
+
```bash
|
|
179
|
+
pnpm run clean && pnpm run build
|
|
161
180
|
```
|
|
162
181
|
|
|
163
182
|
## License
|
package/dist/index.js
CHANGED
|
@@ -1,54 +1,96 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
|
+
import { createRequire } from "node:module";
|
|
2
3
|
import { FastMCP } from "fastmcp";
|
|
4
|
+
import { CredentialsError } from "./lib/errors.js";
|
|
5
|
+
import { getDiscordService } from "./services/discord-service.js";
|
|
6
|
+
import { getFacebookService } from "./services/facebook-service.js";
|
|
7
|
+
import { getInstagramService } from "./services/instagram-service.js";
|
|
8
|
+
import { getSlackService } from "./services/slack-service.js";
|
|
9
|
+
import { getTelegramService } from "./services/telegram-service.js";
|
|
10
|
+
import { getTwitterService } from "./services/twitter-service.js";
|
|
11
|
+
import { getWhatsappService } from "./services/whatsapp-service.js";
|
|
12
|
+
import { getMessagesTool as discordGetMessagesTool } from "./tools/discord-tools/get-messages.js";
|
|
13
|
+
import { sendMessageTool as discordSendMessageTool } from "./tools/discord-tools/send-message.js";
|
|
14
|
+
import { createPostTool as facebookCreatePostTool } from "./tools/facebook-tools/create-post.js";
|
|
15
|
+
import { getPostsTool as facebookGetPostsTool } from "./tools/facebook-tools/get-posts.js";
|
|
16
|
+
import { createPostTool as instagramCreatePostTool } from "./tools/instagram-tools/create-post.js";
|
|
17
|
+
import { getPostsTool as instagramGetPostsTool } from "./tools/instagram-tools/get-posts.js";
|
|
18
|
+
import { getMessagesTool as slackGetMessagesTool } from "./tools/slack-tools/get-messages.js";
|
|
19
|
+
import { listChannelsTool as slackListChannelsTool } from "./tools/slack-tools/list-channels.js";
|
|
20
|
+
import { sendMessageTool as slackSendMessageTool } from "./tools/slack-tools/send-message.js";
|
|
21
|
+
import { deleteMessageTool } from "./tools/telegram-tools/delete-message.js";
|
|
22
|
+
import { editMessageTool } from "./tools/telegram-tools/edit-message.js";
|
|
3
23
|
import { forwardMessageTool } from "./tools/telegram-tools/forward-message.js";
|
|
4
24
|
import { getChannelInfoTool } from "./tools/telegram-tools/get-channel-info.js";
|
|
5
25
|
import { getChannelMembersTool } from "./tools/telegram-tools/get-channel-members.js";
|
|
6
26
|
import { pinMessageTool } from "./tools/telegram-tools/pin-message.js";
|
|
7
27
|
import { sendMessageTool } from "./tools/telegram-tools/send-message.js";
|
|
28
|
+
import { deleteTweetTool } from "./tools/twitter-tools/delete-tweet.js";
|
|
8
29
|
import { getUserInfoTool } from "./tools/twitter-tools/get-user-info.js";
|
|
30
|
+
import { likeTweetTool } from "./tools/twitter-tools/like-tweet.js";
|
|
31
|
+
import { replyTweetTool } from "./tools/twitter-tools/reply-tweet.js";
|
|
9
32
|
import { searchTweetsTool } from "./tools/twitter-tools/search-tweets.js";
|
|
10
33
|
import { sendTweetTool } from "./tools/twitter-tools/send-tweet.js";
|
|
11
|
-
// Discord tools
|
|
12
|
-
import { sendMessageTool as discordSendMessageTool } from "./tools/discord-tools/send-message.js";
|
|
13
|
-
// WhatsApp tools
|
|
14
34
|
import { sendMessageTool as whatsappSendMessageTool } from "./tools/whatsapp-tools/send-message.js";
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
35
|
+
const require = createRequire(import.meta.url);
|
|
36
|
+
const { version } = require("../package.json");
|
|
37
|
+
function checkPlatform(name, init) {
|
|
38
|
+
try {
|
|
39
|
+
init();
|
|
40
|
+
console.error(` [ok] ${name}`);
|
|
41
|
+
}
|
|
42
|
+
catch (err) {
|
|
43
|
+
if (err instanceof CredentialsError) {
|
|
44
|
+
console.error(` [--] ${name}: ${err.message}`);
|
|
45
|
+
}
|
|
46
|
+
else {
|
|
47
|
+
console.error(` [!!] ${name}: ${err instanceof Error ? err.message : String(err)}`);
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
}
|
|
22
51
|
async function main() {
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
52
|
+
console.error("Social MCP Server — platform availability:");
|
|
53
|
+
checkPlatform("Telegram", getTelegramService);
|
|
54
|
+
checkPlatform("Twitter/X", getTwitterService);
|
|
55
|
+
checkPlatform("Discord", getDiscordService);
|
|
56
|
+
checkPlatform("WhatsApp", getWhatsappService);
|
|
57
|
+
checkPlatform("Facebook", getFacebookService);
|
|
58
|
+
checkPlatform("Instagram", getInstagramService);
|
|
59
|
+
checkPlatform("Slack", getSlackService);
|
|
60
|
+
console.error("");
|
|
61
|
+
const server = new FastMCP({ name: "Social MCP Server", version });
|
|
62
|
+
// Telegram
|
|
28
63
|
server.addTool(sendMessageTool);
|
|
29
64
|
server.addTool(getChannelInfoTool);
|
|
30
65
|
server.addTool(forwardMessageTool);
|
|
31
66
|
server.addTool(pinMessageTool);
|
|
32
67
|
server.addTool(getChannelMembersTool);
|
|
33
|
-
|
|
68
|
+
server.addTool(deleteMessageTool);
|
|
69
|
+
server.addTool(editMessageTool);
|
|
70
|
+
// Twitter
|
|
34
71
|
server.addTool(sendTweetTool);
|
|
35
72
|
server.addTool(getUserInfoTool);
|
|
36
73
|
server.addTool(searchTweetsTool);
|
|
37
|
-
|
|
74
|
+
server.addTool(replyTweetTool);
|
|
75
|
+
server.addTool(likeTweetTool);
|
|
76
|
+
server.addTool(deleteTweetTool);
|
|
77
|
+
// Discord
|
|
38
78
|
server.addTool(discordSendMessageTool);
|
|
39
|
-
|
|
79
|
+
server.addTool(discordGetMessagesTool);
|
|
80
|
+
// WhatsApp
|
|
40
81
|
server.addTool(whatsappSendMessageTool);
|
|
41
|
-
|
|
42
|
-
// Add Facebook tools
|
|
82
|
+
// Facebook
|
|
43
83
|
server.addTool(facebookCreatePostTool);
|
|
44
|
-
|
|
84
|
+
server.addTool(facebookGetPostsTool);
|
|
85
|
+
// Instagram
|
|
45
86
|
server.addTool(instagramCreatePostTool);
|
|
46
|
-
|
|
87
|
+
server.addTool(instagramGetPostsTool);
|
|
88
|
+
// Slack
|
|
47
89
|
server.addTool(slackSendMessageTool);
|
|
90
|
+
server.addTool(slackGetMessagesTool);
|
|
91
|
+
server.addTool(slackListChannelsTool);
|
|
48
92
|
try {
|
|
49
|
-
await server.start({
|
|
50
|
-
transportType: "stdio",
|
|
51
|
-
});
|
|
93
|
+
await server.start({ transportType: "stdio" });
|
|
52
94
|
}
|
|
53
95
|
catch (error) {
|
|
54
96
|
console.error("Failed to start Social MCP Server:", error);
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AACA,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAClC,OAAO,EAAE,kBAAkB,EAAE,MAAM,2CAA2C,CAAC;AAC/E,OAAO,EAAE,kBAAkB,EAAE,MAAM,4CAA4C,CAAC;AAChF,OAAO,EAAE,qBAAqB,EAAE,MAAM,+CAA+C,CAAC;AACtF,OAAO,EAAE,cAAc,EAAE,MAAM,uCAAuC,CAAC;AACvE,OAAO,EAAE,eAAe,EAAE,MAAM,wCAAwC,CAAC;AACzE,OAAO,EAAE,eAAe,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/dist/lib/config.d.ts
CHANGED
package/dist/lib/config.js
CHANGED
|
@@ -1,19 +1,21 @@
|
|
|
1
|
+
export const META_API_VERSION = "v21.0";
|
|
2
|
+
const META_BASE = `https://graph.facebook.com/${META_API_VERSION}`;
|
|
1
3
|
export const config = {
|
|
2
4
|
discord: {
|
|
3
5
|
baseUrl: "https://discord.com/api/v10",
|
|
4
6
|
botToken: process.env.DISCORD_BOT_TOKEN || "",
|
|
5
7
|
},
|
|
6
8
|
whatsapp: {
|
|
7
|
-
baseUrl:
|
|
9
|
+
baseUrl: META_BASE,
|
|
8
10
|
accessToken: process.env.WHATSAPP_ACCESS_TOKEN || "",
|
|
9
11
|
phoneNumberId: process.env.WHATSAPP_PHONE_NUMBER_ID || "",
|
|
10
12
|
},
|
|
11
13
|
facebook: {
|
|
12
|
-
baseUrl:
|
|
14
|
+
baseUrl: META_BASE,
|
|
13
15
|
accessToken: process.env.FACEBOOK_ACCESS_TOKEN || "",
|
|
14
16
|
},
|
|
15
17
|
instagram: {
|
|
16
|
-
baseUrl:
|
|
18
|
+
baseUrl: META_BASE,
|
|
17
19
|
accessToken: process.env.INSTAGRAM_ACCESS_TOKEN || "",
|
|
18
20
|
},
|
|
19
21
|
};
|
package/dist/lib/config.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/lib/config.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,MAAM,GAAG;
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/lib/config.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,gBAAgB,GAAG,OAAO,CAAC;AACxC,MAAM,SAAS,GAAG,8BAA8B,gBAAgB,EAAE,CAAC;AAEnE,MAAM,CAAC,MAAM,MAAM,GAAG;IACrB,OAAO,EAAE;QACR,OAAO,EAAE,6BAA6B;QACtC,QAAQ,EAAE,OAAO,CAAC,GAAG,CAAC,iBAAiB,IAAI,EAAE;KAC7C;IACD,QAAQ,EAAE;QACT,OAAO,EAAE,SAAS;QAClB,WAAW,EAAE,OAAO,CAAC,GAAG,CAAC,qBAAqB,IAAI,EAAE;QACpD,aAAa,EAAE,OAAO,CAAC,GAAG,CAAC,wBAAwB,IAAI,EAAE;KACzD;IACD,QAAQ,EAAE;QACT,OAAO,EAAE,SAAS;QAClB,WAAW,EAAE,OAAO,CAAC,GAAG,CAAC,qBAAqB,IAAI,EAAE;KACpD;IACD,SAAS,EAAE;QACV,OAAO,EAAE,SAAS;QAClB,WAAW,EAAE,OAAO,CAAC,GAAG,CAAC,sBAAsB,IAAI,EAAE;KACrD;CACD,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"errors.js","sourceRoot":"","sources":["../../src/lib/errors.ts"],"names":[],"mappings":"AAAA,MAAM,OAAO,gBAAiB,SAAQ,KAAK;IAC1C,YAAY,QAAgB,EAAE,WAAqB;QAClD,KAAK,CACJ,GAAG,QAAQ,4CAA4C,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAC/E,CAAC;QACF,IAAI,CAAC,IAAI,GAAG,kBAAkB,CAAC;IAChC,CAAC;CACD"}
|
|
@@ -1,10 +1,18 @@
|
|
|
1
1
|
export declare class DiscordService {
|
|
2
2
|
private baseUrl;
|
|
3
3
|
private headers;
|
|
4
|
+
constructor();
|
|
4
5
|
sendMessage(channelId: string, content: string): Promise<{
|
|
5
6
|
id: string;
|
|
6
7
|
channel_id: string;
|
|
7
8
|
content: string;
|
|
8
9
|
timestamp: string;
|
|
9
10
|
}>;
|
|
11
|
+
getMessages(channelId: string, limit?: number): Promise<{
|
|
12
|
+
id: string;
|
|
13
|
+
channel_id: string;
|
|
14
|
+
content: string;
|
|
15
|
+
timestamp: string;
|
|
16
|
+
}[]>;
|
|
10
17
|
}
|
|
18
|
+
export declare function getDiscordService(): DiscordService;
|
|
@@ -1,18 +1,26 @@
|
|
|
1
1
|
import { z } from "zod";
|
|
2
|
-
import { fetchJson } from "../lib/http.js";
|
|
3
2
|
import { config } from "../lib/config.js";
|
|
3
|
+
import { CredentialsError } from "../lib/errors.js";
|
|
4
|
+
import { fetchJson } from "../lib/http.js";
|
|
4
5
|
const discordMessageSchema = z.object({
|
|
5
6
|
id: z.string(),
|
|
6
7
|
channel_id: z.string(),
|
|
7
8
|
content: z.string(),
|
|
8
9
|
timestamp: z.string(),
|
|
9
10
|
});
|
|
11
|
+
const discordMessagesSchema = z.array(discordMessageSchema);
|
|
10
12
|
export class DiscordService {
|
|
11
13
|
baseUrl = config.discord.baseUrl;
|
|
12
|
-
headers
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
14
|
+
headers;
|
|
15
|
+
constructor() {
|
|
16
|
+
if (!config.discord.botToken) {
|
|
17
|
+
throw new CredentialsError("Discord", ["DISCORD_BOT_TOKEN"]);
|
|
18
|
+
}
|
|
19
|
+
this.headers = {
|
|
20
|
+
"Content-Type": "application/json",
|
|
21
|
+
Authorization: `Bot ${config.discord.botToken}`,
|
|
22
|
+
};
|
|
23
|
+
}
|
|
16
24
|
async sendMessage(channelId, content) {
|
|
17
25
|
return fetchJson(`${this.baseUrl}/channels/${channelId}/messages`, {
|
|
18
26
|
method: "POST",
|
|
@@ -20,5 +28,17 @@ export class DiscordService {
|
|
|
20
28
|
body: JSON.stringify({ content }),
|
|
21
29
|
}, discordMessageSchema);
|
|
22
30
|
}
|
|
31
|
+
async getMessages(channelId, limit = 50) {
|
|
32
|
+
return fetchJson(`${this.baseUrl}/channels/${channelId}/messages?limit=${limit}`, {
|
|
33
|
+
method: "GET",
|
|
34
|
+
headers: this.headers,
|
|
35
|
+
}, discordMessagesSchema);
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
let _instance;
|
|
39
|
+
export function getDiscordService() {
|
|
40
|
+
if (!_instance)
|
|
41
|
+
_instance = new DiscordService();
|
|
42
|
+
return _instance;
|
|
23
43
|
}
|
|
24
44
|
//# sourceMappingURL=discord-service.js.map
|
|
@@ -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,
|
|
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;AAE5D,MAAM,OAAO,cAAc;IAClB,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC;IACjC,OAAO,CAAyB;IAExC;QACC,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,QAAQ,EAAE,CAAC;YAC9B,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,MAAM,CAAC,OAAO,CAAC,QAAQ,EAAE;SAC/C,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,8 +1,17 @@
|
|
|
1
1
|
export declare class FacebookService {
|
|
2
2
|
private baseUrl;
|
|
3
3
|
private headers;
|
|
4
|
+
constructor();
|
|
4
5
|
createPost(pageId: string, message: string): Promise<{
|
|
5
6
|
id: string;
|
|
6
|
-
post_id
|
|
7
|
+
post_id?: string | undefined;
|
|
8
|
+
}>;
|
|
9
|
+
getPosts(pageId: string, limit?: number): Promise<{
|
|
10
|
+
data: {
|
|
11
|
+
id: string;
|
|
12
|
+
created_time: string;
|
|
13
|
+
message?: string | undefined;
|
|
14
|
+
}[];
|
|
7
15
|
}>;
|
|
8
16
|
}
|
|
17
|
+
export declare function getFacebookService(): FacebookService;
|
|
@@ -1,16 +1,31 @@
|
|
|
1
1
|
import { z } from "zod";
|
|
2
|
-
import { fetchJson } from "../lib/http.js";
|
|
3
2
|
import { config } from "../lib/config.js";
|
|
3
|
+
import { CredentialsError } from "../lib/errors.js";
|
|
4
|
+
import { fetchJson } from "../lib/http.js";
|
|
4
5
|
const facebookPostSchema = z.object({
|
|
5
6
|
id: z.string(),
|
|
6
|
-
post_id: z.string(),
|
|
7
|
+
post_id: z.string().optional(),
|
|
8
|
+
});
|
|
9
|
+
const facebookPostDetailSchema = z.object({
|
|
10
|
+
id: z.string(),
|
|
11
|
+
message: z.string().optional(),
|
|
12
|
+
created_time: z.string(),
|
|
13
|
+
});
|
|
14
|
+
const facebookPostsResponseSchema = z.object({
|
|
15
|
+
data: z.array(facebookPostDetailSchema),
|
|
7
16
|
});
|
|
8
17
|
export class FacebookService {
|
|
9
18
|
baseUrl = config.facebook.baseUrl;
|
|
10
|
-
headers
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
19
|
+
headers;
|
|
20
|
+
constructor() {
|
|
21
|
+
if (!config.facebook.accessToken) {
|
|
22
|
+
throw new CredentialsError("Facebook", ["FACEBOOK_ACCESS_TOKEN"]);
|
|
23
|
+
}
|
|
24
|
+
this.headers = {
|
|
25
|
+
"Content-Type": "application/json",
|
|
26
|
+
Authorization: `Bearer ${config.facebook.accessToken}`,
|
|
27
|
+
};
|
|
28
|
+
}
|
|
14
29
|
async createPost(pageId, message) {
|
|
15
30
|
return fetchJson(`${this.baseUrl}/${pageId}/feed`, {
|
|
16
31
|
method: "POST",
|
|
@@ -18,5 +33,17 @@ export class FacebookService {
|
|
|
18
33
|
body: JSON.stringify({ message }),
|
|
19
34
|
}, facebookPostSchema);
|
|
20
35
|
}
|
|
36
|
+
async getPosts(pageId, limit = 10) {
|
|
37
|
+
return fetchJson(`${this.baseUrl}/${pageId}/posts?fields=id,message,created_time&limit=${limit}`, {
|
|
38
|
+
method: "GET",
|
|
39
|
+
headers: this.headers,
|
|
40
|
+
}, facebookPostsResponseSchema);
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
let _instance;
|
|
44
|
+
export function getFacebookService() {
|
|
45
|
+
if (!_instance)
|
|
46
|
+
_instance = new FacebookService();
|
|
47
|
+
return _instance;
|
|
21
48
|
}
|
|
22
49
|
//# sourceMappingURL=facebook-service.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"facebook-service.js","sourceRoot":"","sources":["../../src/services/facebook-service.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"facebook-service.js","sourceRoot":"","sources":["../../src/services/facebook-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,kBAAkB,GAAG,CAAC,CAAC,MAAM,CAAC;IACnC,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE;IACd,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;CAC9B,CAAC,CAAC;AAEH,MAAM,wBAAwB,GAAG,CAAC,CAAC,MAAM,CAAC;IACzC,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE;IACd,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAC9B,YAAY,EAAE,CAAC,CAAC,MAAM,EAAE;CACxB,CAAC,CAAC;AAEH,MAAM,2BAA2B,GAAG,CAAC,CAAC,MAAM,CAAC;IAC5C,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,wBAAwB,CAAC;CACvC,CAAC,CAAC;AAEH,MAAM,OAAO,eAAe;IACnB,OAAO,GAAG,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC;IAClC,OAAO,CAAyB;IAExC;QACC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,WAAW,EAAE,CAAC;YAClC,MAAM,IAAI,gBAAgB,CAAC,UAAU,EAAE,CAAC,uBAAuB,CAAC,CAAC,CAAC;QACnE,CAAC;QACD,IAAI,CAAC,OAAO,GAAG;YACd,cAAc,EAAE,kBAAkB;YAClC,aAAa,EAAE,UAAU,MAAM,CAAC,QAAQ,CAAC,WAAW,EAAE;SACtD,CAAC;IACH,CAAC;IAED,KAAK,CAAC,UAAU,CAAC,MAAc,EAAE,OAAe;QAC/C,OAAO,SAAS,CACf,GAAG,IAAI,CAAC,OAAO,IAAI,MAAM,OAAO,EAChC;YACC,MAAM,EAAE,MAAM;YACd,OAAO,EAAE,IAAI,CAAC,OAAO;YACrB,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,OAAO,EAAE,CAAC;SACjC,EACD,kBAAkB,CAClB,CAAC;IACH,CAAC;IAED,KAAK,CAAC,QAAQ,CAAC,MAAc,EAAE,KAAK,GAAG,EAAE;QACxC,OAAO,SAAS,CACf,GAAG,IAAI,CAAC,OAAO,IAAI,MAAM,+CAA+C,KAAK,EAAE,EAC/E;YACC,MAAM,EAAE,KAAK;YACb,OAAO,EAAE,IAAI,CAAC,OAAO;SACrB,EACD,2BAA2B,CAC3B,CAAC;IACH,CAAC;CACD;AAED,IAAI,SAAsC,CAAC;AAC3C,MAAM,UAAU,kBAAkB;IACjC,IAAI,CAAC,SAAS;QAAE,SAAS,GAAG,IAAI,eAAe,EAAE,CAAC;IAClD,OAAO,SAAS,CAAC;AAClB,CAAC"}
|
|
@@ -1,7 +1,17 @@
|
|
|
1
1
|
export declare class InstagramService {
|
|
2
2
|
private baseUrl;
|
|
3
3
|
private headers;
|
|
4
|
+
constructor();
|
|
4
5
|
createPost(userId: string, imageUrl: string, caption: string): Promise<{
|
|
5
6
|
id: string;
|
|
6
7
|
}>;
|
|
8
|
+
getPosts(userId: string, limit?: number): Promise<{
|
|
9
|
+
data: {
|
|
10
|
+
id: string;
|
|
11
|
+
media_type: string;
|
|
12
|
+
timestamp: string;
|
|
13
|
+
caption?: string | undefined;
|
|
14
|
+
}[];
|
|
15
|
+
}>;
|
|
7
16
|
}
|
|
17
|
+
export declare function getInstagramService(): InstagramService;
|
|
@@ -1,28 +1,54 @@
|
|
|
1
1
|
import { z } from "zod";
|
|
2
|
-
import { fetchJson } from "../lib/http.js";
|
|
3
2
|
import { config } from "../lib/config.js";
|
|
3
|
+
import { CredentialsError } from "../lib/errors.js";
|
|
4
|
+
import { fetchJson } from "../lib/http.js";
|
|
4
5
|
const instagramMediaSchema = z.object({
|
|
5
6
|
id: z.string(),
|
|
6
7
|
});
|
|
8
|
+
const instagramMediaDetailSchema = z.object({
|
|
9
|
+
id: z.string(),
|
|
10
|
+
caption: z.string().optional(),
|
|
11
|
+
media_type: z.string(),
|
|
12
|
+
timestamp: z.string(),
|
|
13
|
+
});
|
|
14
|
+
const instagramMediaListSchema = z.object({
|
|
15
|
+
data: z.array(instagramMediaDetailSchema),
|
|
16
|
+
});
|
|
7
17
|
export class InstagramService {
|
|
8
18
|
baseUrl = config.instagram.baseUrl;
|
|
9
|
-
headers
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
19
|
+
headers;
|
|
20
|
+
constructor() {
|
|
21
|
+
if (!config.instagram.accessToken) {
|
|
22
|
+
throw new CredentialsError("Instagram", ["INSTAGRAM_ACCESS_TOKEN"]);
|
|
23
|
+
}
|
|
24
|
+
this.headers = {
|
|
25
|
+
"Content-Type": "application/json",
|
|
26
|
+
Authorization: `Bearer ${config.instagram.accessToken}`,
|
|
27
|
+
};
|
|
28
|
+
}
|
|
13
29
|
async createPost(userId, imageUrl, caption) {
|
|
14
|
-
// First, create the media container
|
|
15
30
|
const containerResponse = await fetchJson(`${this.baseUrl}/${userId}/media`, {
|
|
16
31
|
method: "POST",
|
|
17
32
|
headers: this.headers,
|
|
18
33
|
body: JSON.stringify({ image_url: imageUrl, caption }),
|
|
19
34
|
}, z.object({ id: z.string() }));
|
|
20
|
-
// Then, publish the media
|
|
21
35
|
return fetchJson(`${this.baseUrl}/${userId}/media_publish`, {
|
|
22
36
|
method: "POST",
|
|
23
37
|
headers: this.headers,
|
|
24
38
|
body: JSON.stringify({ creation_id: containerResponse.id }),
|
|
25
39
|
}, instagramMediaSchema);
|
|
26
40
|
}
|
|
41
|
+
async getPosts(userId, limit = 10) {
|
|
42
|
+
return fetchJson(`${this.baseUrl}/${userId}/media?fields=id,caption,media_type,timestamp&limit=${limit}`, {
|
|
43
|
+
method: "GET",
|
|
44
|
+
headers: this.headers,
|
|
45
|
+
}, instagramMediaListSchema);
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
let _instance;
|
|
49
|
+
export function getInstagramService() {
|
|
50
|
+
if (!_instance)
|
|
51
|
+
_instance = new InstagramService();
|
|
52
|
+
return _instance;
|
|
27
53
|
}
|
|
28
54
|
//# sourceMappingURL=instagram-service.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"instagram-service.js","sourceRoot":"","sources":["../../src/services/instagram-service.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"instagram-service.js","sourceRoot":"","sources":["../../src/services/instagram-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;CACd,CAAC,CAAC;AAEH,MAAM,0BAA0B,GAAG,CAAC,CAAC,MAAM,CAAC;IAC3C,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE;IACd,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAC9B,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE;IACtB,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE;CACrB,CAAC,CAAC;AAEH,MAAM,wBAAwB,GAAG,CAAC,CAAC,MAAM,CAAC;IACzC,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,0BAA0B,CAAC;CACzC,CAAC,CAAC;AAEH,MAAM,OAAO,gBAAgB;IACpB,OAAO,GAAG,MAAM,CAAC,SAAS,CAAC,OAAO,CAAC;IACnC,OAAO,CAAyB;IAExC;QACC,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,WAAW,EAAE,CAAC;YACnC,MAAM,IAAI,gBAAgB,CAAC,WAAW,EAAE,CAAC,wBAAwB,CAAC,CAAC,CAAC;QACrE,CAAC;QACD,IAAI,CAAC,OAAO,GAAG;YACd,cAAc,EAAE,kBAAkB;YAClC,aAAa,EAAE,UAAU,MAAM,CAAC,SAAS,CAAC,WAAW,EAAE;SACvD,CAAC;IACH,CAAC;IAED,KAAK,CAAC,UAAU,CAAC,MAAc,EAAE,QAAgB,EAAE,OAAe;QACjE,MAAM,iBAAiB,GAAG,MAAM,SAAS,CACxC,GAAG,IAAI,CAAC,OAAO,IAAI,MAAM,QAAQ,EACjC;YACC,MAAM,EAAE,MAAM;YACd,OAAO,EAAE,IAAI,CAAC,OAAO;YACrB,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,SAAS,EAAE,QAAQ,EAAE,OAAO,EAAE,CAAC;SACtD,EACD,CAAC,CAAC,MAAM,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAC5B,CAAC;QACF,OAAO,SAAS,CACf,GAAG,IAAI,CAAC,OAAO,IAAI,MAAM,gBAAgB,EACzC;YACC,MAAM,EAAE,MAAM;YACd,OAAO,EAAE,IAAI,CAAC,OAAO;YACrB,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,WAAW,EAAE,iBAAiB,CAAC,EAAE,EAAE,CAAC;SAC3D,EACD,oBAAoB,CACpB,CAAC;IACH,CAAC;IAED,KAAK,CAAC,QAAQ,CAAC,MAAc,EAAE,KAAK,GAAG,EAAE;QACxC,OAAO,SAAS,CACf,GAAG,IAAI,CAAC,OAAO,IAAI,MAAM,uDAAuD,KAAK,EAAE,EACvF;YACC,MAAM,EAAE,KAAK;YACb,OAAO,EAAE,IAAI,CAAC,OAAO;SACrB,EACD,wBAAwB,CACxB,CAAC;IACH,CAAC;CACD;AAED,IAAI,SAAuC,CAAC;AAC5C,MAAM,UAAU,mBAAmB;IAClC,IAAI,CAAC,SAAS;QAAE,SAAS,GAAG,IAAI,gBAAgB,EAAE,CAAC;IACnD,OAAO,SAAS,CAAC;AAClB,CAAC"}
|
|
@@ -6,4 +6,16 @@ export declare class SlackService {
|
|
|
6
6
|
channelId: string | undefined;
|
|
7
7
|
text: string;
|
|
8
8
|
}>;
|
|
9
|
+
getMessages(channelId: string, limit?: number): Promise<{
|
|
10
|
+
ts: string | undefined;
|
|
11
|
+
userId: string | undefined;
|
|
12
|
+
text: string | undefined;
|
|
13
|
+
}[]>;
|
|
14
|
+
listChannels(limit?: number): Promise<{
|
|
15
|
+
id: string | undefined;
|
|
16
|
+
name: string | undefined;
|
|
17
|
+
isPrivate: boolean | undefined;
|
|
18
|
+
memberCount: number | undefined;
|
|
19
|
+
}[]>;
|
|
9
20
|
}
|
|
21
|
+
export declare function getSlackService(): SlackService;
|