social-mcp 2.10.0 → 2.10.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/dist/services/beehiiv-service.d.ts +2 -0
- package/dist/services/beehiiv-service.js +21 -8
- package/dist/services/beehiiv-service.js.map +1 -1
- package/dist/services/devto-service.d.ts +2 -0
- package/dist/services/devto-service.js +7 -2
- package/dist/services/devto-service.js.map +1 -1
- package/dist/services/hashnode-service.d.ts +2 -0
- package/dist/services/hashnode-service.js +26 -11
- package/dist/services/hashnode-service.js.map +1 -1
- package/package.json +1 -1
|
@@ -1,11 +1,13 @@
|
|
|
1
1
|
export interface BeehiivCredentials {
|
|
2
2
|
apiKey: string;
|
|
3
3
|
publicationId?: string;
|
|
4
|
+
proxyUrl?: string;
|
|
4
5
|
}
|
|
5
6
|
export declare class BeehiivService {
|
|
6
7
|
private baseUrl;
|
|
7
8
|
private headers;
|
|
8
9
|
private publicationId;
|
|
10
|
+
private dispatcher?;
|
|
9
11
|
constructor(credentials?: BeehiivCredentials);
|
|
10
12
|
private getPublicationId;
|
|
11
13
|
getPosts(publicationId?: string, page?: number, limit?: number): Promise<{
|
|
@@ -2,6 +2,7 @@ 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";
|
|
5
6
|
const postSchema = z.object({
|
|
6
7
|
id: z.string(),
|
|
7
8
|
title: z.string().optional(),
|
|
@@ -13,13 +14,17 @@ const postSchema = z.object({
|
|
|
13
14
|
slug: z.string().optional(),
|
|
14
15
|
audience: z.string().optional(),
|
|
15
16
|
email_sent_to_count: z.number().nullable().optional(),
|
|
16
|
-
stats: z
|
|
17
|
-
|
|
17
|
+
stats: z
|
|
18
|
+
.object({
|
|
19
|
+
email: z
|
|
20
|
+
.object({
|
|
18
21
|
recipients: z.number().optional(),
|
|
19
22
|
open_rate: z.number().optional(),
|
|
20
23
|
click_rate: z.number().optional(),
|
|
21
|
-
})
|
|
22
|
-
|
|
24
|
+
})
|
|
25
|
+
.optional(),
|
|
26
|
+
})
|
|
27
|
+
.optional(),
|
|
23
28
|
});
|
|
24
29
|
const postsResponseSchema = z.object({
|
|
25
30
|
data: z.array(postSchema),
|
|
@@ -47,17 +52,20 @@ export class BeehiivService {
|
|
|
47
52
|
baseUrl = config.beehiiv.baseUrl;
|
|
48
53
|
headers;
|
|
49
54
|
publicationId;
|
|
55
|
+
dispatcher;
|
|
50
56
|
constructor(credentials) {
|
|
51
57
|
const apiKey = credentials?.apiKey ?? config.beehiiv.apiKey;
|
|
52
58
|
if (!apiKey) {
|
|
53
59
|
throw new CredentialsError("Beehiiv", ["BEEHIIV_API_KEY"]);
|
|
54
60
|
}
|
|
55
|
-
this.publicationId =
|
|
61
|
+
this.publicationId =
|
|
62
|
+
credentials?.publicationId ?? config.beehiiv.publicationId;
|
|
56
63
|
this.headers = {
|
|
57
64
|
Authorization: `Bearer ${apiKey}`,
|
|
58
65
|
"Content-Type": "application/json",
|
|
59
66
|
Accept: "application/json",
|
|
60
67
|
};
|
|
68
|
+
this.dispatcher = createProxyDispatcher(credentials?.proxyUrl);
|
|
61
69
|
}
|
|
62
70
|
getPublicationId(override) {
|
|
63
71
|
const id = override ?? this.publicationId;
|
|
@@ -67,7 +75,7 @@ export class BeehiivService {
|
|
|
67
75
|
}
|
|
68
76
|
async getPosts(publicationId, page = 1, limit = 10) {
|
|
69
77
|
const id = this.getPublicationId(publicationId);
|
|
70
|
-
return fetchJson(`${this.baseUrl}/publications/${id}/posts?page=${page}&limit=${limit}&expand[]=stats`, { method: "GET", headers: this.headers }, postsResponseSchema);
|
|
78
|
+
return fetchJson(`${this.baseUrl}/publications/${id}/posts?page=${page}&limit=${limit}&expand[]=stats`, { method: "GET", headers: this.headers, dispatcher: this.dispatcher }, postsResponseSchema);
|
|
71
79
|
}
|
|
72
80
|
async createPost(publicationId, title, bodyHtml, subtitle, status = "draft", audience = "free", sendAt) {
|
|
73
81
|
const id = this.getPublicationId(publicationId);
|
|
@@ -81,11 +89,16 @@ export class BeehiivService {
|
|
|
81
89
|
body.preview_text = subtitle;
|
|
82
90
|
if (sendAt)
|
|
83
91
|
body.send_at = sendAt;
|
|
84
|
-
return fetchJson(`${this.baseUrl}/publications/${id}/posts`, {
|
|
92
|
+
return fetchJson(`${this.baseUrl}/publications/${id}/posts`, {
|
|
93
|
+
method: "POST",
|
|
94
|
+
headers: this.headers,
|
|
95
|
+
body: JSON.stringify(body),
|
|
96
|
+
dispatcher: this.dispatcher,
|
|
97
|
+
}, createPostResponseSchema);
|
|
85
98
|
}
|
|
86
99
|
async getSubscribers(publicationId, page = 1, limit = 10) {
|
|
87
100
|
const id = this.getPublicationId(publicationId);
|
|
88
|
-
return fetchJson(`${this.baseUrl}/publications/${id}/subscriptions?page=${page}&limit=${limit}`, { method: "GET", headers: this.headers }, subscribersResponseSchema);
|
|
101
|
+
return fetchJson(`${this.baseUrl}/publications/${id}/subscriptions?page=${page}&limit=${limit}`, { method: "GET", headers: this.headers, dispatcher: this.dispatcher }, subscribersResponseSchema);
|
|
89
102
|
}
|
|
90
103
|
}
|
|
91
104
|
let _instance;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"beehiiv-service.js","sourceRoot":"","sources":["../../src/services/beehiiv-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;
|
|
1
|
+
{"version":3,"file":"beehiiv-service.js","sourceRoot":"","sources":["../../src/services/beehiiv-service.ts"],"names":[],"mappings":"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"}
|
|
@@ -18,10 +18,12 @@ declare const articleSchema: z.ZodObject<{
|
|
|
18
18
|
export type DevToArticle = z.infer<typeof articleSchema>;
|
|
19
19
|
export interface DevToCredentials {
|
|
20
20
|
apiKey: string;
|
|
21
|
+
proxyUrl?: string;
|
|
21
22
|
}
|
|
22
23
|
export declare class DevToService {
|
|
23
24
|
private baseUrl;
|
|
24
25
|
private headers;
|
|
26
|
+
private dispatcher?;
|
|
25
27
|
constructor(credentials?: DevToCredentials);
|
|
26
28
|
getMyArticles(page?: number, perPage?: number): Promise<{
|
|
27
29
|
id: number;
|
|
@@ -2,6 +2,7 @@ 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";
|
|
5
6
|
const articleSchema = z.object({
|
|
6
7
|
id: z.number(),
|
|
7
8
|
title: z.string(),
|
|
@@ -37,6 +38,7 @@ const articleResponseSchema = z.object({
|
|
|
37
38
|
export class DevToService {
|
|
38
39
|
baseUrl = config.devto.baseUrl;
|
|
39
40
|
headers;
|
|
41
|
+
dispatcher;
|
|
40
42
|
constructor(credentials) {
|
|
41
43
|
const apiKey = credentials?.apiKey ?? config.devto.apiKey;
|
|
42
44
|
if (!apiKey) {
|
|
@@ -47,12 +49,13 @@ export class DevToService {
|
|
|
47
49
|
"Content-Type": "application/json",
|
|
48
50
|
Accept: "application/vnd.forem.api-v1+json",
|
|
49
51
|
};
|
|
52
|
+
this.dispatcher = createProxyDispatcher(credentials?.proxyUrl);
|
|
50
53
|
}
|
|
51
54
|
async getMyArticles(page = 1, perPage = 30) {
|
|
52
|
-
return fetchJson(`${this.baseUrl}/articles/me?page=${page}&per_page=${perPage}`, { method: "GET", headers: this.headers }, z.array(articleSchema));
|
|
55
|
+
return fetchJson(`${this.baseUrl}/articles/me?page=${page}&per_page=${perPage}`, { method: "GET", headers: this.headers, dispatcher: this.dispatcher }, z.array(articleSchema));
|
|
53
56
|
}
|
|
54
57
|
async getArticle(id) {
|
|
55
|
-
return fetchJson(`${this.baseUrl}/articles/${id}`, { method: "GET", headers: this.headers }, articleResponseSchema);
|
|
58
|
+
return fetchJson(`${this.baseUrl}/articles/${id}`, { method: "GET", headers: this.headers, dispatcher: this.dispatcher }, articleResponseSchema);
|
|
56
59
|
}
|
|
57
60
|
async createArticle(title, bodyMarkdown, tags = [], published = false, description, canonicalUrl, series, mainImage) {
|
|
58
61
|
const article = {
|
|
@@ -73,6 +76,7 @@ export class DevToService {
|
|
|
73
76
|
method: "POST",
|
|
74
77
|
headers: this.headers,
|
|
75
78
|
body: JSON.stringify({ article }),
|
|
79
|
+
dispatcher: this.dispatcher,
|
|
76
80
|
}, articleResponseSchema);
|
|
77
81
|
}
|
|
78
82
|
async updateArticle(id, updates) {
|
|
@@ -80,6 +84,7 @@ export class DevToService {
|
|
|
80
84
|
method: "PUT",
|
|
81
85
|
headers: this.headers,
|
|
82
86
|
body: JSON.stringify({ article: updates }),
|
|
87
|
+
dispatcher: this.dispatcher,
|
|
83
88
|
}, articleResponseSchema);
|
|
84
89
|
}
|
|
85
90
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"devto-service.js","sourceRoot":"","sources":["../../src/services/devto-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;
|
|
1
|
+
{"version":3,"file":"devto-service.js","sourceRoot":"","sources":["../../src/services/devto-service.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,11 +1,13 @@
|
|
|
1
1
|
export interface HashnodeCredentials {
|
|
2
2
|
accessToken: string;
|
|
3
3
|
publicationId?: string;
|
|
4
|
+
proxyUrl?: string;
|
|
4
5
|
}
|
|
5
6
|
export declare class HashnodeService {
|
|
6
7
|
private baseUrl;
|
|
7
8
|
private accessToken;
|
|
8
9
|
private publicationId;
|
|
10
|
+
private dispatcher?;
|
|
9
11
|
constructor(credentials?: HashnodeCredentials);
|
|
10
12
|
private gql;
|
|
11
13
|
getPublication(publicationId?: string): Promise<{
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { z } from "zod";
|
|
2
2
|
import { config } from "../lib/config.js";
|
|
3
3
|
import { CredentialsError } from "../lib/errors.js";
|
|
4
|
+
import { createProxyDispatcher } from "../lib/proxy.js";
|
|
4
5
|
const publicationSchema = z.object({
|
|
5
6
|
id: z.string(),
|
|
6
7
|
title: z.string().optional(),
|
|
@@ -19,7 +20,8 @@ const postSchema = z.object({
|
|
|
19
20
|
responseCount: z.number().optional(),
|
|
20
21
|
});
|
|
21
22
|
const publishPostResponseSchema = z.object({
|
|
22
|
-
data: z
|
|
23
|
+
data: z
|
|
24
|
+
.object({
|
|
23
25
|
publishPost: z.object({
|
|
24
26
|
post: z.object({
|
|
25
27
|
id: z.string(),
|
|
@@ -28,38 +30,50 @@ const publishPostResponseSchema = z.object({
|
|
|
28
30
|
url: z.string().optional(),
|
|
29
31
|
}),
|
|
30
32
|
}),
|
|
31
|
-
})
|
|
33
|
+
})
|
|
34
|
+
.optional(),
|
|
32
35
|
errors: z.array(z.object({ message: z.string() })).optional(),
|
|
33
36
|
});
|
|
34
37
|
const publicationQuerySchema = z.object({
|
|
35
|
-
data: z
|
|
36
|
-
|
|
38
|
+
data: z
|
|
39
|
+
.object({
|
|
40
|
+
publication: z
|
|
41
|
+
.object({
|
|
37
42
|
id: z.string(),
|
|
38
43
|
title: z.string().optional(),
|
|
39
44
|
url: z.string().optional(),
|
|
40
45
|
displayTitle: z.string().optional(),
|
|
41
|
-
posts: z
|
|
46
|
+
posts: z
|
|
47
|
+
.object({
|
|
42
48
|
edges: z.array(z.object({ node: postSchema })),
|
|
43
|
-
pageInfo: z
|
|
49
|
+
pageInfo: z
|
|
50
|
+
.object({
|
|
44
51
|
hasNextPage: z.boolean().optional(),
|
|
45
52
|
endCursor: z.string().nullable().optional(),
|
|
46
|
-
})
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
53
|
+
})
|
|
54
|
+
.optional(),
|
|
55
|
+
})
|
|
56
|
+
.optional(),
|
|
57
|
+
})
|
|
58
|
+
.nullable(),
|
|
59
|
+
})
|
|
60
|
+
.optional(),
|
|
50
61
|
errors: z.array(z.object({ message: z.string() })).optional(),
|
|
51
62
|
});
|
|
52
63
|
export class HashnodeService {
|
|
53
64
|
baseUrl = config.hashnode.baseUrl;
|
|
54
65
|
accessToken;
|
|
55
66
|
publicationId;
|
|
67
|
+
dispatcher;
|
|
56
68
|
constructor(credentials) {
|
|
57
69
|
const accessToken = credentials?.accessToken ?? config.hashnode.accessToken;
|
|
58
70
|
if (!accessToken) {
|
|
59
71
|
throw new CredentialsError("Hashnode", ["HASHNODE_ACCESS_TOKEN"]);
|
|
60
72
|
}
|
|
61
73
|
this.accessToken = accessToken;
|
|
62
|
-
this.publicationId =
|
|
74
|
+
this.publicationId =
|
|
75
|
+
credentials?.publicationId ?? config.hashnode.publicationId;
|
|
76
|
+
this.dispatcher = createProxyDispatcher(credentials?.proxyUrl);
|
|
63
77
|
}
|
|
64
78
|
async gql(query, variables, schema) {
|
|
65
79
|
const response = await fetch(this.baseUrl, {
|
|
@@ -69,6 +83,7 @@ export class HashnodeService {
|
|
|
69
83
|
Authorization: this.accessToken,
|
|
70
84
|
},
|
|
71
85
|
body: JSON.stringify({ query, variables }),
|
|
86
|
+
dispatcher: this.dispatcher,
|
|
72
87
|
});
|
|
73
88
|
if (!response.ok) {
|
|
74
89
|
throw new Error(`Hashnode API error ${response.status}: ${response.statusText}`);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"hashnode-service.js","sourceRoot":"","sources":["../../src/services/hashnode-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;
|
|
1
|
+
{"version":3,"file":"hashnode-service.js","sourceRoot":"","sources":["../../src/services/hashnode-service.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "social-mcp",
|
|
3
|
-
"version": "2.10.
|
|
3
|
+
"version": "2.10.1",
|
|
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",
|