@mono-agent/slack-adapter 0.3.0 → 0.4.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.
@@ -6,6 +6,7 @@ export class SlackApiError extends Error {
6
6
  needed;
7
7
  provided;
8
8
  warning;
9
+ retryAfterMs;
9
10
  cause;
10
11
  constructor(message, details) {
11
12
  super(message);
@@ -27,6 +28,9 @@ export class SlackApiError extends Error {
27
28
  if (details.warning !== undefined) {
28
29
  this.warning = details.warning;
29
30
  }
31
+ if (details.retryAfterMs !== undefined) {
32
+ this.retryAfterMs = details.retryAfterMs;
33
+ }
30
34
  if (details.cause !== undefined) {
31
35
  this.cause = details.cause;
32
36
  }
@@ -42,11 +46,11 @@ export class SlackWebApiClient {
42
46
  requestTimeoutMs;
43
47
  constructor(options) {
44
48
  const botToken = options.botToken.trim();
45
- const appToken = options.appToken.trim();
49
+ const appToken = options.appToken?.trim();
46
50
  if (botToken.length === 0) {
47
51
  throw new TypeError("Slack bot token is required.");
48
52
  }
49
- if (appToken.length === 0) {
53
+ if (appToken !== undefined && appToken.length === 0) {
50
54
  throw new TypeError("Slack app token is required.");
51
55
  }
52
56
  const fetchImpl = options.fetchImpl ?? globalThis.fetch;
@@ -62,15 +66,100 @@ export class SlackWebApiClient {
62
66
  authTest(options) {
63
67
  return this.request("auth.test", {}, this.botToken, options);
64
68
  }
65
- appsConnectionsOpen(options) {
66
- return this.request("apps.connections.open", {}, this.appToken, options);
69
+ async appsConnectionsOpen(options) {
70
+ return this.request("apps.connections.open", {}, this.requiredAppToken(), options);
67
71
  }
68
72
  chatPostMessage(params, options) {
69
73
  return this.request("chat.postMessage", params, this.botToken, options);
70
74
  }
75
+ requiredAppToken() {
76
+ if (this.appToken === undefined) {
77
+ throw new TypeError("Slack app token is required for Socket Mode.");
78
+ }
79
+ return this.appToken;
80
+ }
71
81
  chatUpdate(params, options) {
72
82
  return this.request("chat.update", params, this.botToken, options);
73
83
  }
84
+ async reactionsAdd(params, options) {
85
+ await this.request("reactions.add", params, this.botToken, options);
86
+ }
87
+ async setAssistantStatus(params, options) {
88
+ await this.request("assistant.threads.setStatus", { channel_id: params.channelId, thread_ts: params.threadTs, status: params.status }, this.botToken, options);
89
+ }
90
+ async viewsPublish(params, options) {
91
+ await this.request("views.publish", { user_id: params.userId, view: params.view }, this.botToken, options);
92
+ }
93
+ /**
94
+ * Download a private Slack file. Slack serves `url_private` only with an
95
+ * `Authorization: Bearer <bot token>` header. The download is bounded by the
96
+ * caller's request timeout and any external abort signal, and reads at most
97
+ * `maxBytes` (rejecting once the cap is exceeded) so a hostile or oversized
98
+ * file cannot exhaust memory.
99
+ */
100
+ async downloadFile(params, options) {
101
+ const method = "files.download";
102
+ const { signal, cleanup } = createRequestSignal(options?.signal, this.requestTimeoutMs);
103
+ let response;
104
+ try {
105
+ const init = {
106
+ method: "GET",
107
+ headers: {
108
+ authorization: `Bearer ${this.botToken}`,
109
+ },
110
+ };
111
+ if (signal !== undefined) {
112
+ init.signal = signal;
113
+ }
114
+ response = await this.fetchImpl(params.url, init);
115
+ }
116
+ catch (error) {
117
+ cleanup();
118
+ if (isAbortError(error) || options?.signal?.aborted === true) {
119
+ throw new SlackApiError(`Slack file download was aborted.`, {
120
+ kind: "aborted",
121
+ method,
122
+ });
123
+ }
124
+ throw new SlackApiError(`Network failure while downloading a Slack file.`, {
125
+ kind: "network",
126
+ method,
127
+ });
128
+ }
129
+ if (!response.ok) {
130
+ const retryAfterMs = parseRetryAfterMs(response);
131
+ await safelyDrainResponse(response);
132
+ cleanup();
133
+ throw new SlackApiError(`Slack file download failed with HTTP ${response.status}.`, {
134
+ kind: "http",
135
+ method,
136
+ status: response.status,
137
+ ...(retryAfterMs === undefined ? {} : { retryAfterMs }),
138
+ });
139
+ }
140
+ try {
141
+ const bytes = await readBodyWithCap(response, params.maxBytes);
142
+ cleanup();
143
+ return bytes;
144
+ }
145
+ catch (error) {
146
+ cleanup();
147
+ if (error instanceof SlackApiError) {
148
+ throw error;
149
+ }
150
+ if (isAbortError(error) || options?.signal?.aborted === true) {
151
+ throw new SlackApiError(`Slack file download was aborted.`, {
152
+ kind: "aborted",
153
+ method,
154
+ });
155
+ }
156
+ throw new SlackApiError(`Failed to read a downloaded Slack file.`, {
157
+ kind: "network",
158
+ method,
159
+ cause: error,
160
+ });
161
+ }
162
+ }
74
163
  async request(method, params, token, options) {
75
164
  const url = `${this.apiBaseUrl}/${method}`;
76
165
  const { signal, cleanup } = createRequestSignal(options?.signal, this.requestTimeoutMs);
@@ -104,11 +193,13 @@ export class SlackWebApiClient {
104
193
  }
105
194
  cleanup();
106
195
  if (!response.ok) {
196
+ const retryAfterMs = parseRetryAfterMs(response);
107
197
  await safelyDrainResponse(response);
108
198
  throw new SlackApiError(`Slack API ${method} failed with HTTP ${response.status}.`, {
109
199
  kind: "http",
110
200
  method,
111
201
  status: response.status,
202
+ ...(retryAfterMs === undefined ? {} : { retryAfterMs }),
112
203
  });
113
204
  }
114
205
  let payload;
@@ -187,12 +278,82 @@ function createRequestSignal(externalSignal, timeoutMs) {
187
278
  function stripTrailingSlashes(value) {
188
279
  return value.replace(/\/+$/u, "");
189
280
  }
281
+ /**
282
+ * Extract a `Retry-After` header (seconds) as milliseconds. Slack sends this on
283
+ * a rate-limited HTTP 429 response. Only the parsed integer is read so no raw
284
+ * response body or token material is carried.
285
+ */
286
+ function parseRetryAfterMs(response) {
287
+ const header = response.headers?.get?.("retry-after");
288
+ if (header === null || header === undefined) {
289
+ return undefined;
290
+ }
291
+ const seconds = Number.parseInt(header.trim(), 10);
292
+ if (!Number.isFinite(seconds) || seconds < 0) {
293
+ return undefined;
294
+ }
295
+ return seconds * 1000;
296
+ }
190
297
  function isAbortError(value) {
191
298
  return (value instanceof DOMException && value.name === "AbortError") || (value instanceof Error && value.name === "AbortError");
192
299
  }
193
300
  function isRecord(value) {
194
301
  return typeof value === "object" && value !== null;
195
302
  }
303
+ /**
304
+ * Read a response body into a single Uint8Array, rejecting once `maxBytes` is
305
+ * exceeded. Streams the body where possible so an oversized file is abandoned
306
+ * without buffering the whole thing; falls back to an arrayBuffer read (still
307
+ * cap-checked) when the runtime exposes no readable stream.
308
+ */
309
+ async function readBodyWithCap(response, maxBytes) {
310
+ const cap = maxBytes !== undefined && Number.isFinite(maxBytes) && maxBytes >= 0 ? maxBytes : undefined;
311
+ const body = response.body;
312
+ if (body === null || typeof body.getReader !== "function") {
313
+ const buffer = await response.arrayBuffer();
314
+ const bytes = new Uint8Array(buffer);
315
+ if (cap !== undefined && bytes.byteLength > cap) {
316
+ throw new SlackApiError("Slack file exceeded the configured byte cap.", {
317
+ kind: "malformed",
318
+ method: "files.download",
319
+ });
320
+ }
321
+ return bytes;
322
+ }
323
+ const reader = body.getReader();
324
+ const chunks = [];
325
+ let total = 0;
326
+ try {
327
+ for (;;) {
328
+ const { done, value } = await reader.read();
329
+ if (done) {
330
+ break;
331
+ }
332
+ if (value === undefined) {
333
+ continue;
334
+ }
335
+ total += value.byteLength;
336
+ if (cap !== undefined && total > cap) {
337
+ await reader.cancel();
338
+ throw new SlackApiError("Slack file exceeded the configured byte cap.", {
339
+ kind: "malformed",
340
+ method: "files.download",
341
+ });
342
+ }
343
+ chunks.push(value);
344
+ }
345
+ }
346
+ finally {
347
+ reader.releaseLock?.();
348
+ }
349
+ const out = new Uint8Array(total);
350
+ let offset = 0;
351
+ for (const chunk of chunks) {
352
+ out.set(chunk, offset);
353
+ offset += chunk.byteLength;
354
+ }
355
+ return out;
356
+ }
196
357
  async function safelyDrainResponse(response) {
197
358
  try {
198
359
  await response.text();
@@ -1 +1 @@
1
- {"version":3,"file":"slack-client.js","sourceRoot":"","sources":["../src/slack-client.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"slack-client.js","sourceRoot":"","sources":["../src/slack-client.ts"],"names":[],"mappings":"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"}
@@ -1,11 +1,72 @@
1
- import type { SlackEventCallback, SlackWebApi } from "./types.js";
1
+ import type { SlackEventCallback, SlackInteractivityPayload, SlackWebApi } from "./types.js";
2
2
  import type { SlackEventHandlingResult } from "./adapter.js";
3
3
  export interface SlackEventCallbackHandler {
4
4
  handleEventCallback(callback: SlackEventCallback): Promise<SlackEventHandlingResult>;
5
5
  }
6
+ /**
7
+ * Handles a Slack interactivity payload — a shortcut, message action, or a
8
+ * Block Kit button click (`block_actions`). Invoked AFTER the envelope is
9
+ * acknowledged, so a slow handler never risks Slack's 3-second ack deadline.
10
+ */
11
+ export type SlackInteractionHandler = (payload: SlackInteractivityPayload) => void | Promise<void>;
6
12
  export interface SlackSocketModeRunnerBackoffOptions {
7
13
  initialMs?: number;
8
14
  maxMs?: number;
15
+ /**
16
+ * Band jitter applied to each backoff sleep, as a fraction of the base delay
17
+ * (0 disables jitter). The actual sleep is uniformly within ±ratio of the base —
18
+ * `base * (1 - ratio + random() * 2 * ratio)` — so clients (or a process restarting
19
+ * in a loop) that would otherwise reconnect in lockstep de-synchronize instead of
20
+ * re-colliding on Slack's per-app connection budget.
21
+ */
22
+ jitterRatio?: number;
23
+ /**
24
+ * How long a freshly opened socket must stay up before the backoff resets to
25
+ * initial and a previously-degraded connection is reported recovered. The reset is
26
+ * gated on this window (not on a mere connect) so a connect→immediate-drop flap
27
+ * keeps accumulating backoff instead of re-hammering at the initial delay. Set to 0
28
+ * to disable the stability gate (the backoff then never auto-resets within a run).
29
+ */
30
+ stabilityMs?: number;
31
+ /**
32
+ * Grace window after `start()` during which a non-graceful disconnect that arrives
33
+ * before the first successful open is treated as an expected lingering prior-process
34
+ * socket (common right after a restart): it is retried quietly with backoff and does
35
+ * NOT flag the channel degraded. Set to 0 to disable the grace.
36
+ */
37
+ startupGraceMs?: number;
38
+ /**
39
+ * Backstop: after a watchdog-triggered `terminate()`, if the socket emits neither
40
+ * `close` nor `error` within this window, the attempt is force-settled so the
41
+ * reconnect loop can never wedge on a stuck socket. Set to 0 to disable.
42
+ */
43
+ drainDeadlineMs?: number;
44
+ /**
45
+ * Minimum (jittered) delay between reconnect attempts on the GRACEFUL path
46
+ * (refresh/warning/clean close), which otherwise reconnects immediately. This is
47
+ * NOT the failure backoff — it stays small — but it rate-limits the loop so a
48
+ * degenerate server that drops every socket at/before open cannot spin into a
49
+ * zero-delay reconnect storm (the very `too_many_websockets` failure mode this
50
+ * adapter guards against). Set to 0 to reconnect with no floor.
51
+ */
52
+ gracefulReconnectFloorMs?: number;
53
+ }
54
+ export interface SlackSocketModeRunnerHeartbeatOptions {
55
+ /**
56
+ * How often the watchdog wakes to probe an idle socket with a ping and to
57
+ * check for silence. Because the silence check only runs on these ticks,
58
+ * recycling can lag the `timeoutMs` deadline by up to one `intervalMs`.
59
+ * Setting this to 0 disables the watchdog entirely.
60
+ */
61
+ intervalMs?: number;
62
+ /**
63
+ * Silence budget: if no inbound frame (message, ping, or pong) arrives within
64
+ * this window, the socket is treated as silently dead and force-recycled on
65
+ * the next watchdog tick so the reconnect loop can re-establish it. The actual
66
+ * recycle therefore happens between `timeoutMs` and `timeoutMs + intervalMs`
67
+ * after the last frame. Setting this to 0 disables the watchdog entirely.
68
+ */
69
+ timeoutMs?: number;
9
70
  }
10
71
  export interface SlackSocketModeRunnerLogger {
11
72
  debug?(message: string, metadata?: Record<string, unknown>): void;
@@ -17,8 +78,31 @@ export interface SlackSocketModeRunnerOptions {
17
78
  api: SlackWebApi;
18
79
  handler: SlackEventCallbackHandler;
19
80
  reconnect?: SlackSocketModeRunnerBackoffOptions;
81
+ heartbeat?: SlackSocketModeRunnerHeartbeatOptions;
20
82
  webSocketFactory?: SlackWebSocketFactory;
21
83
  onEventResult?: (result: SlackEventHandlingResult) => void | Promise<void>;
84
+ /**
85
+ * Optional handler for shortcut interactivity payloads. When absent, interactive
86
+ * envelopes are acknowledged and ignored (the historical behavior); when set,
87
+ * shortcut payloads are routed to it after the envelope is acknowledged.
88
+ */
89
+ onInteraction?: SlackInteractionHandler;
90
+ /**
91
+ * Called once when an established connection drops into the reconnect/backoff loop
92
+ * (a real degradation — `too_many_websockets`, a socket error, a heartbeat timeout,
93
+ * an unknown disconnect reason). Suppressed for a graceful refresh and for a
94
+ * lingering prior-process socket inside the startup grace window. Wire this to the
95
+ * app's `onDegraded` so the channel reports `degraded` (responder kept alive) rather
96
+ * than churning silently.
97
+ */
98
+ onConnectionLost?: (reason: string) => void;
99
+ /**
100
+ * Called once a reconnect has stayed open for the stability window after a prior
101
+ * loss (never on the first connect). Wire this to the app's `onRecovered`.
102
+ */
103
+ onConnectionRestored?: () => void;
104
+ /** Injected RNG in [0, 1) for backoff jitter; defaults to `Math.random`. */
105
+ random?: () => number;
22
106
  logger?: SlackSocketModeRunnerLogger;
23
107
  }
24
108
  export interface SlackSocketModeRunnerStartOptions {
@@ -28,6 +112,10 @@ export type SlackWebSocketFactory = (url: string) => SlackWebSocketLike;
28
112
  export interface SlackWebSocketLike {
29
113
  send(data: string): void;
30
114
  close(code?: number, reason?: string): void;
115
+ /** Send a WebSocket ping frame (keepalive). Optional: not every transport exposes it. */
116
+ ping?(): void;
117
+ /** Forcibly destroy the socket without a closing handshake. Optional. */
118
+ terminate?(): void;
31
119
  on(event: "open", listener: () => void): this;
32
120
  on(event: "message", listener: (data: unknown) => void): this;
33
121
  on(event: "close", listener: (code?: number, reason?: unknown) => void): this;
@@ -38,12 +126,33 @@ export declare class SlackSocketModeRunner {
38
126
  private readonly handler;
39
127
  private readonly initialBackoffMs;
40
128
  private readonly maxBackoffMs;
129
+ private readonly heartbeatIntervalMs;
130
+ private readonly heartbeatTimeoutMs;
131
+ private readonly stabilityMs;
132
+ private readonly startupGraceMs;
133
+ private readonly drainDeadlineMs;
134
+ private readonly gracefulReconnectFloorMs;
135
+ private readonly jitterRatio;
136
+ private readonly random;
41
137
  private readonly webSocketFactory;
42
138
  private readonly onEventResult;
139
+ private readonly onInteraction;
140
+ private readonly onConnectionLost;
141
+ private readonly onConnectionRestored;
43
142
  private readonly logger;
44
143
  private activeSocket;
144
+ private currentBackoffMs;
145
+ private connectionDegraded;
146
+ private hasEverConnected;
147
+ private startedAt;
45
148
  constructor(options: SlackSocketModeRunnerOptions);
46
149
  start(options?: SlackSocketModeRunnerStartOptions): Promise<void>;
150
+ /**
151
+ * Apply band jitter to a backoff base: uniformly within ±`jitterRatio` of `baseMs`.
152
+ * De-synchronizes reconnect attempts so colliding clients (or a restart loop) stop
153
+ * re-triggering Slack's `too_many_websockets` in lockstep.
154
+ */
155
+ private jitteredDelay;
47
156
  private connectOnce;
48
157
  private handleEnvelope;
49
158
  }
@@ -1 +1 @@
1
- {"version":3,"file":"socket-mode-runner.d.ts","sourceRoot":"","sources":["../src/socket-mode-runner.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"socket-mode-runner.d.ts","sourceRoot":"","sources":["../src/socket-mode-runner.ts"],"names":[],"mappings":"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"}