social-mcp 2.9.0 → 2.10.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.
package/README.md CHANGED
@@ -436,7 +436,7 @@ Set `MAIL_MAILER` to select your provider (`smtp`, `sendgrid`, `mailgun`, or `se
436
436
  - **BLUESKY_LIKE_POST** — Like a post (`uri`, `cid`)
437
437
  - **BLUESKY_SEARCH_POSTS** — Search for posts on Bluesky (`query`, `limit`)
438
438
 
439
- > **Note:** `images` take `{ content, mimeType, alt? }[]` with `content` as base64 — AT Proto has no URL-reference option, every image is uploaded as a blob (`uploadBlob`) and referenced in the post's embed.
439
+ > **Note:** `images` take `{ content, mimeType, alt? }[]` with `content` as base64 — AT Proto has no URL-reference option, every image is uploaded as a blob (`uploadBlob`) and referenced in the post's embed. For library consumers managing their own session (e.g. an app that already exchanged an identifier/app-password for a session and refreshes it independently), `BlueskyCredentials` also accepts `{ did, handle?, accessJwt, refreshJwt }` to resume that session instead of logging in fresh — call `getSession()` afterward to read back the session in case AT Proto rotated the refresh token during the call, so you can persist the new one.
440
440
 
441
441
  ### Mastodon
442
442
 
@@ -604,13 +604,14 @@ When `mailer` and `fromAddress` are omitted, the tool falls back to the env var
604
604
 
605
605
  Most services accept an optional `proxyUrl` in their credentials (e.g. `new DiscordService({ botToken, proxyUrl: "http://user:pass@host:port" })`), routing that account's API calls through an HTTP(S) proxy — useful for a multi-tenant host that wants each connected account's traffic to originate from a distinct, consistent IP. This is a constructor-level option for programmatic/library consumers (not an MCP tool parameter, since it's server-operator infrastructure rather than message content).
606
606
 
607
- Supported today: Discord, Slack, Telegram, Twitter/X, Instagram, Facebook, WhatsApp, Threads, LinkedIn, Reddit, Pinterest, Mastodon, YouTube, Ghost, Tumblr. Not yet wired: Bluesky (`@atproto/api`'s `BskyAgent` doesn't expose a documented fetch/agent override), TikTok, Medium, Dev.to, Hashnode, Beehiiv, Twitch — these currently ignore any `proxyUrl` passed to them.
607
+ Supported today: Discord, Slack, Telegram, Twitter/X, Instagram, Facebook, WhatsApp, Threads, LinkedIn, Reddit, Pinterest, Mastodon, YouTube, Ghost, Tumblr, TikTok, Medium, Bluesky. Not yet wired: Dev.to, Hashnode, Beehiiv, Twitch — these currently ignore any `proxyUrl` passed to them.
608
608
 
609
- Two mechanisms are used depending on how each service talks to its platform, since passing the wrong one is a silent no-op rather than an error:
609
+ Three mechanisms are used depending on how each service talks to its platform, since passing the wrong one is a silent no-op rather than an error:
610
610
  - `createProxyDispatcher()` (undici `ProxyAgent`) for services using raw `fetch()` — most of the list above.
611
611
  - `createProxyAgent()` (`https-proxy-agent`) for services built on SDKs that take a classic `http.Agent` (Slack's `@slack/web-api`, Telegram's `telegraf`, Twitter's `twitter-api-v2` via its `httpAgent` client option).
612
+ - Bluesky's `BskyAgent` takes a custom `fetch` function directly (`AtpAgentOptions.fetch`) — `BlueskyService` wraps `createProxyDispatcher()`'s dispatcher in one when `proxyUrl` is set.
612
613
 
613
- Both are exported from `social-mcp/dist/lib/proxy.js` if you need to build the agent/dispatcher yourself.
614
+ `createProxyDispatcher`/`createProxyAgent` are exported from `social-mcp/dist/lib/proxy.js` if you need to build the agent/dispatcher yourself.
614
615
 
615
616
  ## Development
616
617
 
@@ -1,7 +1,13 @@
1
1
  export interface BlueskyCredentials {
2
- identifier: string;
3
- appPassword: string;
2
+ identifier?: string;
3
+ appPassword?: string;
4
+ did?: string;
5
+ handle?: string;
6
+ accessJwt?: string;
7
+ refreshJwt?: string;
4
8
  service?: string;
9
+ /** Routes API calls through this proxy (e.g. per-tenant IP isolation). */
10
+ proxyUrl?: string;
5
11
  }
6
12
  export interface BlueskyImage {
7
13
  /** Base64-encoded image bytes. Max 4 per post (AT Proto's own limit). */
@@ -9,13 +15,22 @@ export interface BlueskyImage {
9
15
  mimeType: string;
10
16
  alt?: string;
11
17
  }
18
+ export interface BlueskySession {
19
+ did: string;
20
+ handle: string;
21
+ accessJwt: string;
22
+ refreshJwt: string;
23
+ }
12
24
  export declare class BlueskyService {
13
25
  private agent;
14
- private identifier;
15
- private appPassword;
26
+ private identifier?;
27
+ private appPassword?;
28
+ private resumeSessionData?;
16
29
  private loggedIn;
30
+ private latestSession?;
17
31
  constructor(credentials?: BlueskyCredentials);
18
32
  private ensureLoggedIn;
33
+ getSession(): BlueskySession | undefined;
19
34
  createPost(text: string, images?: BlueskyImage[]): Promise<{
20
35
  uri: string;
21
36
  cid: string;
@@ -1,33 +1,83 @@
1
1
  import { BskyAgent } from "@atproto/api";
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
  export class BlueskyService {
5
6
  agent;
6
7
  identifier;
7
8
  appPassword;
9
+ resumeSessionData;
8
10
  loggedIn = false;
11
+ latestSession;
9
12
  constructor(credentials) {
10
13
  const identifier = credentials?.identifier ?? config.bluesky.identifier;
11
14
  const appPassword = credentials?.appPassword ?? config.bluesky.appPassword;
12
15
  const service = credentials?.service ?? config.bluesky.service;
13
- if (!identifier || !appPassword) {
16
+ if (credentials?.did && credentials.accessJwt && credentials.refreshJwt) {
17
+ this.resumeSessionData = {
18
+ did: credentials.did,
19
+ handle: credentials.handle ?? credentials.did,
20
+ accessJwt: credentials.accessJwt,
21
+ refreshJwt: credentials.refreshJwt,
22
+ active: true,
23
+ };
24
+ }
25
+ else if (!identifier || !appPassword) {
14
26
  throw new CredentialsError("Bluesky", [
15
27
  "BLUESKY_IDENTIFIER",
16
28
  "BLUESKY_APP_PASSWORD",
29
+ "(or did/accessJwt/refreshJwt to resume a session)",
17
30
  ]);
18
31
  }
19
32
  this.identifier = identifier;
20
33
  this.appPassword = appPassword;
21
- this.agent = new BskyAgent({ service });
34
+ const dispatcher = createProxyDispatcher(credentials?.proxyUrl);
35
+ this.agent = new BskyAgent({
36
+ service,
37
+ // AT Proto rotates the refresh token on use — this is the SDK's own hook for
38
+ // finding out, so a session-resume caller can persist the new one via
39
+ // getSession() rather than silently working with a token that's gone stale.
40
+ persistSession: (_evt, session) => {
41
+ if (session) {
42
+ this.latestSession = {
43
+ did: session.did,
44
+ handle: session.handle,
45
+ accessJwt: session.accessJwt,
46
+ refreshJwt: session.refreshJwt,
47
+ };
48
+ }
49
+ },
50
+ ...(dispatcher
51
+ ? {
52
+ fetch: ((input, init) => fetch(input, {
53
+ ...init,
54
+ dispatcher,
55
+ })),
56
+ }
57
+ : {}),
58
+ });
22
59
  }
23
60
  async ensureLoggedIn() {
24
- if (!this.loggedIn) {
61
+ if (this.loggedIn)
62
+ return;
63
+ if (this.resumeSessionData) {
64
+ await this.agent.resumeSession(this.resumeSessionData);
65
+ }
66
+ else if (this.identifier && this.appPassword) {
25
67
  await this.agent.login({
26
68
  identifier: this.identifier,
27
69
  password: this.appPassword,
28
70
  });
29
- this.loggedIn = true;
30
71
  }
72
+ else {
73
+ throw new Error("Bluesky credentials are missing");
74
+ }
75
+ this.loggedIn = true;
76
+ }
77
+ // Only meaningful in session-resume mode: the (possibly refreshed) session after
78
+ // an operation, for the caller to persist if it rotated mid-call.
79
+ getSession() {
80
+ return this.latestSession;
31
81
  }
32
82
  async createPost(text, images) {
33
83
  await this.ensureLoggedIn();
@@ -1 +1 @@
1
- {"version":3,"file":"bluesky-service.js","sourceRoot":"","sources":["../../src/services/bluesky-service.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"bluesky-service.js","sourceRoot":"","sources":["../../src/services/bluesky-service.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AACzC,OAAO,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAC1C,OAAO,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AACpD,OAAO,EAAE,qBAAqB,EAAE,MAAM,iBAAiB,CAAC;AAgCxD,MAAM,OAAO,cAAc;IAClB,KAAK,CAAY;IACjB,UAAU,CAAU;IACpB,WAAW,CAAU;IACrB,iBAAiB,CAMvB;IACM,QAAQ,GAAG,KAAK,CAAC;IACjB,aAAa,CAAkB;IAEvC,YAAY,WAAgC;QAC3C,MAAM,UAAU,GAAG,WAAW,EAAE,UAAU,IAAI,MAAM,CAAC,OAAO,CAAC,UAAU,CAAC;QACxE,MAAM,WAAW,GAAG,WAAW,EAAE,WAAW,IAAI,MAAM,CAAC,OAAO,CAAC,WAAW,CAAC;QAC3E,MAAM,OAAO,GAAG,WAAW,EAAE,OAAO,IAAI,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC;QAE/D,IAAI,WAAW,EAAE,GAAG,IAAI,WAAW,CAAC,SAAS,IAAI,WAAW,CAAC,UAAU,EAAE,CAAC;YACzE,IAAI,CAAC,iBAAiB,GAAG;gBACxB,GAAG,EAAE,WAAW,CAAC,GAAG;gBACpB,MAAM,EAAE,WAAW,CAAC,MAAM,IAAI,WAAW,CAAC,GAAG;gBAC7C,SAAS,EAAE,WAAW,CAAC,SAAS;gBAChC,UAAU,EAAE,WAAW,CAAC,UAAU;gBAClC,MAAM,EAAE,IAAI;aACZ,CAAC;QACH,CAAC;aAAM,IAAI,CAAC,UAAU,IAAI,CAAC,WAAW,EAAE,CAAC;YACxC,MAAM,IAAI,gBAAgB,CAAC,SAAS,EAAE;gBACrC,oBAAoB;gBACpB,sBAAsB;gBACtB,mDAAmD;aACnD,CAAC,CAAC;QACJ,CAAC;QACD,IAAI,CAAC,UAAU,GAAG,UAAU,CAAC;QAC7B,IAAI,CAAC,WAAW,GAAG,WAAW,CAAC;QAE/B,MAAM,UAAU,GAAG,qBAAqB,CAAC,WAAW,EAAE,QAAQ,CAAC,CAAC;QAChE,IAAI,CAAC,KAAK,GAAG,IAAI,SAAS,CAAC;YAC1B,OAAO;YACP,6EAA6E;YAC7E,sEAAsE;YACtE,4EAA4E;YAC5E,cAAc,EAAE,CAAC,IAAI,EAAE,OAAO,EAAE,EAAE;gBACjC,IAAI,OAAO,EAAE,CAAC;oBACb,IAAI,CAAC,aAAa,GAAG;wBACpB,GAAG,EAAE,OAAO,CAAC,GAAG;wBAChB,MAAM,EAAE,OAAO,CAAC,MAAM;wBACtB,SAAS,EAAE,OAAO,CAAC,SAAS;wBAC5B,UAAU,EAAE,OAAO,CAAC,UAAU;qBAC9B,CAAC;gBACH,CAAC;YACF,CAAC;YACD,GAAG,CAAC,UAAU;gBACb,CAAC,CAAC;oBACA,KAAK,EAAE,CAAC,CAAC,KAAwB,EAAE,IAAkB,EAAE,EAAE,CACxD,KAAK,CAAC,KAAK,EAAE;wBACZ,GAAG,IAAI;wBACP,UAAU;qBACK,CAAC,CAA4B;iBAC9C;gBACF,CAAC,CAAC,EAAE,CAAC;SACN,CAAC,CAAC;IACJ,CAAC;IAEO,KAAK,CAAC,cAAc;QAC3B,IAAI,IAAI,CAAC,QAAQ;YAAE,OAAO;QAC1B,IAAI,IAAI,CAAC,iBAAiB,EAAE,CAAC;YAC5B,MAAM,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC;QACxD,CAAC;aAAM,IAAI,IAAI,CAAC,UAAU,IAAI,IAAI,CAAC,WAAW,EAAE,CAAC;YAChD,MAAM,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC;gBACtB,UAAU,EAAE,IAAI,CAAC,UAAU;gBAC3B,QAAQ,EAAE,IAAI,CAAC,WAAW;aAC1B,CAAC,CAAC;QACJ,CAAC;aAAM,CAAC;YACP,MAAM,IAAI,KAAK,CAAC,iCAAiC,CAAC,CAAC;QACpD,CAAC;QACD,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC;IACtB,CAAC;IAED,iFAAiF;IACjF,kEAAkE;IAClE,UAAU;QACT,OAAO,IAAI,CAAC,aAAa,CAAC;IAC3B,CAAC;IAED,KAAK,CAAC,UAAU,CAAC,IAAY,EAAE,MAAuB;QACrD,MAAM,IAAI,CAAC,cAAc,EAAE,CAAC;QAC5B,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC;YACrB,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC;QAClC,CAAC;QAED,8EAA8E;QAC9E,kFAAkF;QAClF,MAAM,WAAW,GAAG,MAAM,OAAO,CAAC,GAAG,CACpC,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE;YACtC,MAAM,MAAM,GAAG,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;YACpD,MAAM,EAAE,IAAI,EAAE,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,MAAM,EAAE;gBACpD,QAAQ,EAAE,KAAK,CAAC,QAAQ;aACxB,CAAC,CAAC;YACH,OAAO,EAAE,KAAK,EAAE,IAAI,CAAC,IAAI,EAAE,GAAG,EAAE,KAAK,CAAC,GAAG,IAAI,EAAE,EAAE,CAAC;QACnD,CAAC,CAAC,CACF,CAAC;QAEF,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC;YACtB,IAAI;YACJ,KAAK,EAAE,EAAE,KAAK,EAAE,uBAAuB,EAAE,MAAM,EAAE,WAAW,EAAE;SAC9D,CAAC,CAAC;IACJ,CAAC;IAED,KAAK,CAAC,WAAW,CAChB,IAAY,EACZ,SAAiB,EACjB,SAAiB,EACjB,OAAe,EACf,OAAe;QAEf,MAAM,IAAI,CAAC,cAAc,EAAE,CAAC;QAC5B,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC;YACtB,IAAI;YACJ,KAAK,EAAE;gBACN,IAAI,EAAE,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,OAAO,EAAE;gBACpC,MAAM,EAAE,EAAE,GAAG,EAAE,SAAS,EAAE,GAAG,EAAE,SAAS,EAAE;aAC1C;SACD,CAAC,CAAC;IACJ,CAAC;IAED,KAAK,CAAC,UAAU,CAAC,OAAe;QAC/B,MAAM,IAAI,CAAC,cAAc,EAAE,CAAC;QAC5B,MAAM,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC;IACtC,CAAC;IAED,KAAK,CAAC,QAAQ,CAAC,OAAe,EAAE,OAAe;QAC9C,MAAM,IAAI,CAAC,cAAc,EAAE,CAAC;QAC5B,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;IAC1C,CAAC;IAED,KAAK,CAAC,UAAU,CAAC,MAAc;QAC9B,MAAM,IAAI,CAAC,cAAc,EAAE,CAAC;QAC5B,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,CAAC;QAC9D,OAAO,MAAM,CAAC,IAAI,CAAC;IACpB,CAAC;IAED,KAAK,CAAC,WAAW,CAAC,KAAa,EAAE,KAAK,GAAG,EAAE;QAC1C,MAAM,IAAI,CAAC,cAAc,EAAE,CAAC;QAC5B,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC;YACzD,CAAC,EAAE,KAAK;YACR,KAAK;SACL,CAAC,CAAC;QACH,OAAO,MAAM,CAAC,IAAI,CAAC;IACpB,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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "social-mcp",
3
- "version": "2.9.0",
3
+ "version": "2.10.0",
4
4
  "description": "MCP server for posting and interacting across social media platforms: Twitter, Instagram, Facebook, WhatsApp, Discord, Telegram, Slack, LinkedIn, Reddit, Threads, TikTok, Pinterest, Medium, and Email (SMTP/SendGrid/Mailgun/SES)",
5
5
  "main": "dist/index.js",
6
6
  "type": "module",