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
@@ -2,6 +2,17 @@ import { z } from "zod";
2
2
  import { config } from "../lib/config.js";
3
3
  import { CredentialsError } from "../lib/errors.js";
4
4
  import { fetchJson } from "../lib/http.js";
5
+ import { createProxyDispatcher } from "../lib/proxy.js";
6
+ const registerUploadSchema = z.object({
7
+ value: z.object({
8
+ asset: z.string(),
9
+ uploadMechanism: z.object({
10
+ "com.linkedin.digitalmedia.uploading.MediaUploadHttpRequest": z.object({
11
+ uploadUrl: z.string(),
12
+ }),
13
+ }),
14
+ }),
15
+ });
5
16
  const linkedInProfileSchema = z.object({
6
17
  id: z.string(),
7
18
  localizedFirstName: z.string().optional(),
@@ -52,6 +63,7 @@ const linkedInSearchResponseSchema = z.object({
52
63
  export class LinkedInService {
53
64
  baseUrl = config.linkedin.baseUrl;
54
65
  headers;
66
+ dispatcher;
55
67
  constructor(credentials) {
56
68
  const accessToken = credentials?.accessToken ?? config.linkedin.accessToken;
57
69
  if (!accessToken) {
@@ -62,19 +74,60 @@ export class LinkedInService {
62
74
  Authorization: `Bearer ${accessToken}`,
63
75
  "X-Restli-Protocol-Version": "2.0.0",
64
76
  };
77
+ this.dispatcher = createProxyDispatcher(credentials?.proxyUrl);
65
78
  }
66
79
  async getProfile() {
67
- return fetchJson(`${this.baseUrl}/me`, { method: "GET", headers: this.headers }, linkedInProfileSchema);
80
+ return fetchJson(`${this.baseUrl}/me`, { method: "GET", headers: this.headers, dispatcher: this.dispatcher }, linkedInProfileSchema);
81
+ }
82
+ // LinkedIn's UGC API has no "give me a URL" shortcut for media — every image goes
83
+ // through: register an upload slot, PUT the bytes to it, then reference the asset
84
+ // URN it gave you. Three round trips just to attach one picture.
85
+ async uploadImage(authorUrn, content) {
86
+ const registered = await fetchJson(`${this.baseUrl}/assets?action=registerUpload`, {
87
+ method: "POST",
88
+ headers: this.headers,
89
+ body: JSON.stringify({
90
+ registerUploadRequest: {
91
+ recipes: ["urn:li:digitalmediaRecipe:feedshare-image"],
92
+ owner: authorUrn,
93
+ serviceRelationships: [
94
+ {
95
+ relationshipType: "OWNER",
96
+ identifier: "urn:li:userGeneratedContent",
97
+ },
98
+ ],
99
+ },
100
+ }),
101
+ dispatcher: this.dispatcher,
102
+ }, registerUploadSchema);
103
+ const uploadUrl = registered.value.uploadMechanism["com.linkedin.digitalmedia.uploading.MediaUploadHttpRequest"].uploadUrl;
104
+ const uploadRes = await fetch(uploadUrl, {
105
+ method: "PUT",
106
+ headers: { Authorization: this.headers.Authorization ?? "" },
107
+ body: Buffer.from(content, "base64"),
108
+ dispatcher: this.dispatcher,
109
+ });
110
+ if (!uploadRes.ok) {
111
+ throw new Error(`LinkedIn image upload error (${uploadRes.status}): ${await uploadRes.text()}`);
112
+ }
113
+ return registered.value.asset;
68
114
  }
69
- async createPost(authorUrn, text, visibility = "PUBLIC") {
115
+ async createPost(authorUrn, text, visibility = "PUBLIC", image) {
116
+ const shareContent = {
117
+ shareCommentary: { text },
118
+ shareMediaCategory: image ? "IMAGE" : "NONE",
119
+ };
120
+ if (image) {
121
+ const asset = await this.uploadImage(authorUrn, image.content);
122
+ shareContent.media = [
123
+ { status: "READY", media: asset, title: { text: image.title ?? "" } },
124
+ ];
125
+ }
70
126
  const body = {
71
127
  author: authorUrn,
72
128
  lifecycleState: "PUBLISHED",
73
129
  specificContent: {
74
- "com.linkedin.ugc.ShareContent": {
75
- shareCommentary: { text },
76
- shareMediaCategory: "NONE",
77
- },
130
+ "com.linkedin.ugc.ShareContent": shareContent,
78
131
  },
79
132
  visibility: {
80
133
  "com.linkedin.ugc.MemberNetworkVisibility": visibility,
@@ -84,11 +137,12 @@ export class LinkedInService {
84
137
  method: "POST",
85
138
  headers: this.headers,
86
139
  body: JSON.stringify(body),
140
+ dispatcher: this.dispatcher,
87
141
  }, linkedInUGCPostSchema);
88
142
  }
89
143
  async getPosts(authorUrn, count = 10) {
90
144
  const encoded = encodeURIComponent(authorUrn);
91
- return fetchJson(`${this.baseUrl}/ugcPosts?q=authors&authors=List(${encoded})&count=${count}`, { method: "GET", headers: this.headers }, linkedInPostsResponseSchema);
145
+ return fetchJson(`${this.baseUrl}/ugcPosts?q=authors&authors=List(${encoded})&count=${count}`, { method: "GET", headers: this.headers, dispatcher: this.dispatcher }, linkedInPostsResponseSchema);
92
146
  }
93
147
  async likePost(actorUrn, ugcPostUrn) {
94
148
  const encoded = encodeURIComponent(ugcPostUrn);
@@ -100,6 +154,7 @@ export class LinkedInService {
100
154
  method: "POST",
101
155
  headers: this.headers,
102
156
  body: JSON.stringify(body),
157
+ dispatcher: this.dispatcher,
103
158
  }, linkedInShareSchema);
104
159
  }
105
160
  async addComment(actorUrn, ugcPostUrn, text) {
@@ -113,6 +168,7 @@ export class LinkedInService {
113
168
  method: "POST",
114
169
  headers: this.headers,
115
170
  body: JSON.stringify(body),
171
+ dispatcher: this.dispatcher,
116
172
  }, linkedInShareSchema);
117
173
  }
118
174
  async deletePost(ugcPostUrn) {
@@ -120,6 +176,7 @@ export class LinkedInService {
120
176
  const response = await fetch(`${this.baseUrl}/ugcPosts/${encoded}`, {
121
177
  method: "DELETE",
122
178
  headers: this.headers,
179
+ dispatcher: this.dispatcher,
123
180
  });
124
181
  if (!response.ok) {
125
182
  throw new Error(`LinkedIn API error ${response.status}: ${await response.text()}`);
@@ -131,7 +188,7 @@ export class LinkedInService {
131
188
  keywords,
132
189
  count: String(count),
133
190
  });
134
- return fetchJson(`${this.baseUrl}/search?${params}`, { method: "GET", headers: this.headers }, linkedInSearchResponseSchema);
191
+ return fetchJson(`${this.baseUrl}/search?${params}`, { method: "GET", headers: this.headers, dispatcher: this.dispatcher }, linkedInSearchResponseSchema);
135
192
  }
136
193
  }
137
194
  let _instance;
@@ -1 +1 @@
1
- {"version":3,"file":"linkedin-service.js","sourceRoot":"","sources":["../../src/services/linkedin-service.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"linkedin-service.js","sourceRoot":"","sources":["../../src/services/linkedin-service.ts"],"names":[],"mappings":"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"}
@@ -1,10 +1,18 @@
1
1
  export interface MastodonCredentials {
2
2
  accessToken: string;
3
3
  instanceUrl?: string;
4
+ proxyUrl?: string;
5
+ }
6
+ export interface MastodonMediaAttachment {
7
+ /** Base64-encoded file bytes. */
8
+ content: string;
9
+ filename?: string;
10
+ description?: string;
4
11
  }
5
12
  export declare class MastodonService {
6
13
  private baseUrl;
7
14
  private headers;
15
+ private dispatcher?;
8
16
  constructor(credentials?: MastodonCredentials);
9
17
  getProfile(): Promise<{
10
18
  id: string;
@@ -17,7 +25,8 @@ export declare class MastodonService {
17
25
  statuses_count?: number | undefined;
18
26
  url?: string | undefined;
19
27
  }>;
20
- createPost(status: string, visibility?: "public" | "unlisted" | "private" | "direct"): Promise<{
28
+ uploadMedia(attachment: MastodonMediaAttachment): Promise<string>;
29
+ createPost(status: string, visibility?: "public" | "unlisted" | "private" | "direct", mediaIds?: string[]): Promise<{
21
30
  id: string;
22
31
  content: string;
23
32
  url?: string | undefined;
@@ -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 mastodonAccountSchema = z.object({
6
7
  id: z.string(),
7
8
  username: z.string(),
@@ -28,6 +29,7 @@ const mastodonSearchSchema = z.object({
28
29
  export class MastodonService {
29
30
  baseUrl;
30
31
  headers;
32
+ dispatcher;
31
33
  constructor(credentials) {
32
34
  const accessToken = credentials?.accessToken ?? config.mastodon.accessToken;
33
35
  const instanceUrl = credentials?.instanceUrl ?? config.mastodon.instanceUrl;
@@ -39,15 +41,40 @@ export class MastodonService {
39
41
  "Content-Type": "application/json",
40
42
  Authorization: `Bearer ${accessToken}`,
41
43
  };
44
+ this.dispatcher = createProxyDispatcher(credentials?.proxyUrl);
42
45
  }
43
46
  async getProfile() {
44
- return fetchJson(`${this.baseUrl}/accounts/verify_credentials`, { method: "GET", headers: this.headers }, mastodonAccountSchema);
47
+ return fetchJson(`${this.baseUrl}/accounts/verify_credentials`, { method: "GET", headers: this.headers, dispatcher: this.dispatcher }, mastodonAccountSchema);
45
48
  }
46
- async createPost(status, visibility = "public") {
49
+ // v2/media uploads a file and returns its attachment id, which a status then
50
+ // references via media_ids — Mastodon has no way to carry bytes inline on a post.
51
+ async uploadMedia(attachment) {
52
+ const formData = new FormData();
53
+ const buffer = Buffer.from(attachment.content, "base64");
54
+ formData.append("file", new Blob([buffer]), attachment.filename ?? "file");
55
+ if (attachment.description)
56
+ formData.append("description", attachment.description);
57
+ const response = await fetch(`${this.baseUrl.replace("/api/v1", "/api/v2")}/media`, {
58
+ method: "POST",
59
+ headers: { Authorization: this.headers.Authorization ?? "" },
60
+ body: formData,
61
+ dispatcher: this.dispatcher,
62
+ });
63
+ if (!response.ok) {
64
+ throw new Error(`Mastodon media upload error (${response.status}): ${await response.text()}`);
65
+ }
66
+ return z.object({ id: z.string() }).parse(await response.json()).id;
67
+ }
68
+ async createPost(status, visibility = "public", mediaIds) {
47
69
  return fetchJson(`${this.baseUrl}/statuses`, {
48
70
  method: "POST",
49
71
  headers: this.headers,
50
- body: JSON.stringify({ status, visibility }),
72
+ body: JSON.stringify({
73
+ status,
74
+ visibility,
75
+ ...(mediaIds?.length ? { media_ids: mediaIds } : {}),
76
+ }),
77
+ dispatcher: this.dispatcher,
51
78
  }, mastodonStatusSchema);
52
79
  }
53
80
  async replyToPost(status, inReplyToId, visibility = "public") {
@@ -59,22 +86,24 @@ export class MastodonService {
59
86
  in_reply_to_id: inReplyToId,
60
87
  visibility,
61
88
  }),
89
+ dispatcher: this.dispatcher,
62
90
  }, mastodonStatusSchema);
63
91
  }
64
92
  async deletePost(statusId) {
65
93
  const response = await fetch(`${this.baseUrl}/statuses/${statusId}`, {
66
94
  method: "DELETE",
67
95
  headers: this.headers,
96
+ dispatcher: this.dispatcher,
68
97
  });
69
98
  if (!response.ok) {
70
99
  throw new Error(`Mastodon API error ${response.status}: ${await response.text()}`);
71
100
  }
72
101
  }
73
102
  async boostPost(statusId) {
74
- return fetchJson(`${this.baseUrl}/statuses/${statusId}/reblog`, { method: "POST", headers: this.headers }, mastodonStatusSchema);
103
+ return fetchJson(`${this.baseUrl}/statuses/${statusId}/reblog`, { method: "POST", headers: this.headers, dispatcher: this.dispatcher }, mastodonStatusSchema);
75
104
  }
76
105
  async favouritePost(statusId) {
77
- return fetchJson(`${this.baseUrl}/statuses/${statusId}/favourite`, { method: "POST", headers: this.headers }, mastodonStatusSchema);
106
+ return fetchJson(`${this.baseUrl}/statuses/${statusId}/favourite`, { method: "POST", headers: this.headers, dispatcher: this.dispatcher }, mastodonStatusSchema);
78
107
  }
79
108
  async searchPosts(query, limit = 10) {
80
109
  const params = new URLSearchParams({
@@ -82,7 +111,7 @@ export class MastodonService {
82
111
  type: "statuses",
83
112
  limit: String(limit),
84
113
  });
85
- return fetchJson(`${this.baseUrl}/search?${params}`, { method: "GET", headers: this.headers }, mastodonSearchSchema);
114
+ return fetchJson(`${this.baseUrl}/search?${params}`, { method: "GET", headers: this.headers, dispatcher: this.dispatcher }, mastodonSearchSchema);
86
115
  }
87
116
  }
88
117
  let _instance;
@@ -1 +1 @@
1
- {"version":3,"file":"mastodon-service.js","sourceRoot":"","sources":["../../src/services/mastodon-service.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"mastodon-service.js","sourceRoot":"","sources":["../../src/services/mastodon-service.ts"],"names":[],"mappings":"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"}
@@ -1,7 +1,18 @@
1
+ export interface PinterestCredentials {
2
+ accessToken: string;
3
+ proxyUrl?: string;
4
+ }
5
+ export interface PinterestImage {
6
+ /** A public image URL, or base64-encoded image bytes. */
7
+ image: string;
8
+ /** Required when `image` is base64-encoded bytes, e.g. "image/jpeg". */
9
+ contentType?: string;
10
+ }
1
11
  export declare class PinterestService {
2
12
  private baseUrl;
3
13
  private headers;
4
- constructor();
14
+ private dispatcher?;
15
+ constructor(credentials?: PinterestCredentials);
5
16
  getBoards(pageSize?: number): Promise<{
6
17
  items: {
7
18
  id: string;
@@ -18,13 +29,18 @@ export declare class PinterestService {
18
29
  pin_count?: number | undefined;
19
30
  created_at?: string | undefined;
20
31
  }>;
21
- createPin(boardId: string, title: string, description: string, link: string, imageUrl: string): Promise<{
32
+ createPin(boardId: string, title: string, description: string, link: string, image: PinterestImage): Promise<{
22
33
  id: string;
23
34
  title?: string | undefined;
24
35
  description?: string | undefined;
25
36
  link?: string | undefined;
26
37
  board_id?: string | undefined;
27
38
  created_at?: string | undefined;
39
+ media?: {
40
+ images?: Record<string, {
41
+ url: string;
42
+ }> | undefined;
43
+ } | undefined;
28
44
  }>;
29
45
  getPin(pinId: string): Promise<{
30
46
  id: string;
@@ -33,6 +49,11 @@ export declare class PinterestService {
33
49
  link?: string | undefined;
34
50
  board_id?: string | undefined;
35
51
  created_at?: string | undefined;
52
+ media?: {
53
+ images?: Record<string, {
54
+ url: string;
55
+ }> | undefined;
56
+ } | undefined;
36
57
  }>;
37
58
  getBoardPins(boardId: string, pageSize?: number): Promise<{
38
59
  items: {
@@ -42,6 +63,11 @@ export declare class PinterestService {
42
63
  link?: string | undefined;
43
64
  board_id?: string | undefined;
44
65
  created_at?: string | undefined;
66
+ media?: {
67
+ images?: Record<string, {
68
+ url: string;
69
+ }> | undefined;
70
+ } | undefined;
45
71
  }[];
46
72
  }>;
47
73
  deletePin(pinId: string): Promise<void>;
@@ -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 boardSchema = z.object({
6
7
  id: z.string(),
7
8
  name: z.string(),
@@ -19,6 +20,11 @@ const pinSchema = z.object({
19
20
  link: z.string().optional(),
20
21
  board_id: z.string().optional(),
21
22
  created_at: z.string().optional(),
23
+ media: z
24
+ .object({
25
+ images: z.record(z.string(), z.object({ url: z.string() })).optional(),
26
+ })
27
+ .optional(),
22
28
  });
23
29
  const pinListSchema = z.object({
24
30
  items: z.array(pinSchema),
@@ -26,26 +32,39 @@ const pinListSchema = z.object({
26
32
  export class PinterestService {
27
33
  baseUrl = config.pinterest.baseUrl;
28
34
  headers;
29
- constructor() {
30
- if (!config.pinterest.accessToken) {
35
+ dispatcher;
36
+ constructor(credentials) {
37
+ const accessToken = credentials?.accessToken ?? config.pinterest.accessToken;
38
+ if (!accessToken) {
31
39
  throw new CredentialsError("Pinterest", ["PINTEREST_ACCESS_TOKEN"]);
32
40
  }
33
41
  this.headers = {
34
42
  "Content-Type": "application/json",
35
- Authorization: `Bearer ${config.pinterest.accessToken}`,
43
+ Authorization: `Bearer ${accessToken}`,
36
44
  };
45
+ this.dispatcher = createProxyDispatcher(credentials?.proxyUrl);
37
46
  }
38
47
  async getBoards(pageSize = 25) {
39
- return fetchJson(`${this.baseUrl}/boards?page_size=${pageSize}`, { method: "GET", headers: this.headers }, boardListSchema);
48
+ return fetchJson(`${this.baseUrl}/boards?page_size=${pageSize}`, { method: "GET", headers: this.headers, dispatcher: this.dispatcher }, boardListSchema);
40
49
  }
41
50
  async createBoard(name, description) {
42
51
  return fetchJson(`${this.baseUrl}/boards`, {
43
52
  method: "POST",
44
53
  headers: this.headers,
45
54
  body: JSON.stringify({ name, description }),
55
+ dispatcher: this.dispatcher,
46
56
  }, boardSchema);
47
57
  }
48
- async createPin(boardId, title, description, link, imageUrl) {
58
+ async createPin(boardId, title, description, link, image) {
59
+ // Pinterest's v5 API accepts base64 image bytes directly in the pin body —
60
+ // no separate upload step or asset registration needed, unlike most platforms.
61
+ const mediaSource = isHttpUrl(image.image)
62
+ ? { source_type: "image_url", url: image.image }
63
+ : {
64
+ source_type: "image_base64",
65
+ content_type: image.contentType ?? "image/jpeg",
66
+ data: image.image,
67
+ };
49
68
  return fetchJson(`${this.baseUrl}/pins`, {
50
69
  method: "POST",
51
70
  headers: this.headers,
@@ -54,20 +73,22 @@ export class PinterestService {
54
73
  title,
55
74
  description,
56
75
  link,
57
- media_source: { source_type: "image_url", url: imageUrl },
76
+ media_source: mediaSource,
58
77
  }),
78
+ dispatcher: this.dispatcher,
59
79
  }, pinSchema);
60
80
  }
61
81
  async getPin(pinId) {
62
- return fetchJson(`${this.baseUrl}/pins/${pinId}`, { method: "GET", headers: this.headers }, pinSchema);
82
+ return fetchJson(`${this.baseUrl}/pins/${pinId}`, { method: "GET", headers: this.headers, dispatcher: this.dispatcher }, pinSchema);
63
83
  }
64
84
  async getBoardPins(boardId, pageSize = 25) {
65
- return fetchJson(`${this.baseUrl}/boards/${boardId}/pins?page_size=${pageSize}`, { method: "GET", headers: this.headers }, pinListSchema);
85
+ return fetchJson(`${this.baseUrl}/boards/${boardId}/pins?page_size=${pageSize}`, { method: "GET", headers: this.headers, dispatcher: this.dispatcher }, pinListSchema);
66
86
  }
67
87
  async deletePin(pinId) {
68
88
  const response = await fetch(`${this.baseUrl}/pins/${pinId}`, {
69
89
  method: "DELETE",
70
90
  headers: this.headers,
91
+ dispatcher: this.dispatcher,
71
92
  });
72
93
  if (!response.ok) {
73
94
  const text = await response.text();
@@ -75,6 +96,9 @@ export class PinterestService {
75
96
  }
76
97
  }
77
98
  }
99
+ function isHttpUrl(value) {
100
+ return value.startsWith("http://") || value.startsWith("https://");
101
+ }
78
102
  let _instance;
79
103
  export function getPinterestService() {
80
104
  if (!_instance)
@@ -1 +1 @@
1
- {"version":3,"file":"pinterest-service.js","sourceRoot":"","sources":["../../src/services/pinterest-service.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"pinterest-service.js","sourceRoot":"","sources":["../../src/services/pinterest-service.ts"],"names":[],"mappings":"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"}
@@ -4,6 +4,13 @@ export interface RedditCredentials {
4
4
  username: string;
5
5
  password: string;
6
6
  userAgent?: string;
7
+ proxyUrl?: string;
8
+ }
9
+ export interface RedditMedia {
10
+ /** Base64-encoded image/video bytes. */
11
+ content: string;
12
+ filename: string;
13
+ mimeType: string;
7
14
  }
8
15
  export declare class RedditService {
9
16
  private baseUrl;
@@ -13,10 +20,12 @@ export declare class RedditService {
13
20
  private username;
14
21
  private password;
15
22
  private _accessToken;
23
+ private dispatcher?;
16
24
  constructor(credentials?: RedditCredentials);
17
25
  private authenticate;
18
26
  private headers;
19
- submitPost(subreddit: string, title: string, kind: "self" | "link", text?: string, url?: string): Promise<{
27
+ uploadMedia(media: RedditMedia): Promise<string>;
28
+ submitPost(subreddit: string, title: string, kind: "self" | "link" | "image", text?: string, url?: string, media?: RedditMedia): Promise<{
20
29
  json: {
21
30
  errors: unknown[];
22
31
  data?: {