Skip to content

Releases: slackapi/node-slack-sdk

@slack/webhook@8.0.2

Choose a tag to compare

@slackapi slackapi released this 27 Aug 20:20
e026671

Patch Changes

  • 0ee1d99: fix: revert internal packages requiring esm loading for backward compatible support (#2711)

@slack/webhook@8.0.1

Choose a tag to compare

@slackapi slackapi released this 27 Aug 06:50
c663dc0

Patch Changes

  • 3a459f6: fix: stop WebhookTrigger.send() from retrying after a successful delivery

    A 2xx response with an empty or non-JSON body no longer throws. It now resolves to { ok: true }. Before this fix that body threw a parse error, which was retried as a request error and caused duplicate Workflow Builder runs. A valid { ok: false, error } body is still surfaced to the caller.

  • Updated dependencies [916d8e9]

  • Updated dependencies [f5e9a01]

    • @slack/types@3.1.0

@slack/web-api@8.1.1

Choose a tag to compare

@slackapi slackapi released this 27 Aug 20:20
e026671

Patch Changes

  • 0ee1d99: fix: revert internal packages requiring esm loading for backward compatible support (#2711)

@slack/web-api@8.1.0

Choose a tag to compare

@slackapi slackapi released this 27 Aug 06:50
c663dc0

Minor Changes

  • 955e6b9: feat(web-api): add support for admin.users.getExpiration

  • 4322e14: feat(web-api): add agents.sessions.rename and agents.sessions.setStatus

  • 4ba30a1: feat(web-api): add session_status to chat.stopStream arguments

  • bff3398: feat(web-api): add webapi response changes as of 2026-08-21

    Regenerate response types with new stable response properties (e.g. agent_session on message-bearing responses, ListView grouping/sort/filter fields, bots.info connector/workflow flags).

    Two fields are removed from UsersListResponse, neither of which is a real success-response property:

    • Member.is_connector_bot — not returned by users.list; this flag is surfaced on bots.info (added here to BotsInfoResponse).
    • arg — an error-response echo field, not part of a successful users.list body.
  • f5fd35a: feat(web-api): add blocks.validate method

Patch Changes

  • Updated dependencies [916d8e9]
  • Updated dependencies [f5e9a01]
    • @slack/types@3.1.0

@slack/types@3.1.0

Choose a tag to compare

@slackapi slackapi released this 27 Aug 06:44
c663dc0

Minor Changes

@slack/socket-mode@3.0.1

Choose a tag to compare

@slackapi slackapi released this 27 Aug 20:34
e0fa745

Patch Changes

  • 5c2362c: Fix leaked TCP sockets on disconnect (#2709). Moving from ws to undici's WebSocket in 3.0.0 dropped every force-close mechanism, so ESTABLISHED sockets were never torn down and accumulated toward Slack's per-app connection cap.

    • disconnect() now arms a 30s close-handshake timeout, so a peer that never replies to the close frame no longer leaves the socket stuck in CLOSING indefinitely.
    • On the default dispatcher path, the underlying TCP socket is now captured and force-destroyed during cleanup. A user-supplied dispatcher owns its own socket and instead relies on the close-handshake timeout — this limitation is documented on the dispatcher option.
    • The close handler no longer schedules a reconnect on stale or overlapping close events, so at most one reconnect is scheduled per disconnect.

@slack/webhook@8.0.0

Choose a tag to compare

@slackapi slackapi released this 14 Jul 17:55
70e15b8

Major Changes

  • fc98c8c: Drop Node.js 18 support. The minimum supported Node.js version is now 20.

  • fc98c8c: Restructured error classes to use proper Error subclasses extending a new SlackWebhookError base class.

    Breaking changes to IncomingWebhookHTTPError:

    • The original property has been removed. HTTP response details are now direct properties:
      • statusCode: number
      • statusMessage: string
      • body: string
    • Migrate from error.original.response.status to error.statusCode, error.original.response.data to error.body, etc.

    Breaking changes to IncomingWebhookRequestError:

    • The original property is now a standard Error (previously it was an AxiosError). The original error is also available via the standard cause property.

    Removed factory functions (use new with the corresponding class instead):

    • requestErrorWithOriginal()new IncomingWebhookRequestError(original)
    • httpErrorWithOriginal()new IncomingWebhookHTTPError(statusCode, statusMessage, body)
    • errorWithCode() — Use the specific error class directly.

    Migration: Replace if (error.code === ErrorCode.HTTPError) with if (error instanceof IncomingWebhookHTTPError). You can also catch all webhook errors with if (error instanceof SlackWebhookError).

    The CodedError interface is deprecated — use instanceof checks with the SlackWebhookError base class or specific error subclasses instead.

  • fc98c8c: Replaced axios with the standard Fetch API for HTTP transport.

    Removed options from IncomingWebhookDefaultArguments:

    • agent — Use the new fetch option to provide a custom fetch implementation with proxy or TLS support. For proxies, prefer the built-in http.setGlobalProxyFromEnv() or NODE_USE_ENV_PROXY=1 (Node.js 24+). For advanced use cases:
      import { fetch, Agent } from "undici";
      const webhook = new IncomingWebhook(url, {
        fetch: (url, init) =>
          fetch(url, {
            ...init,
            dispatcher: new Agent({ connect: { ca: myCA } }),
          }),
      });

    The axios dependency has been removed. The default fetch implementation is globalThis.fetch (available in Node.js 20+). The timeout option remains available and is implemented via AbortController.

Minor Changes

  • fc98c8c: feat: add WebhookTrigger class for Workflow Builder triggers and opt-in retries for IncomingWebhook and WebhookTrigger

    WebhookTrigger surfaces its own WebhookTriggerHTTPError and WebhookTriggerRequestError (subclasses of SlackWebhookError), so trigger failures can be distinguished from IncomingWebhook failures via instanceof.

Patch Changes

  • Updated dependencies [fc98c8c]
    • @slack/types@3.0.0

@slack/web-api@8.0.0

Choose a tag to compare

@slackapi slackapi released this 14 Jul 17:55
70e15b8

Major Changes

  • fc98c8c: Drop Node.js 18 support. The minimum supported Node.js version is now 20.

  • fc98c8c: Redesigned error handling to use proper Error subclasses instead of plain objects with a code property.

    Migration: Replace if (error.code === ErrorCode.PlatformError) with if (error instanceof WebAPIPlatformError). All error classes extend a common SlackError base class (which extends Error), so you can also catch all SDK errors with if (error instanceof SlackError).

    New error class hierarchy:

    • SlackError (abstract base)
      • WebAPIPlatformError — Slack API returned ok: false
      • WebAPIRequestError — Network/transport failure (original error in cause)
      • WebAPIHTTPError — Non-200 HTTP status from Slack
      • WebAPIRateLimitedError — HTTP 429 with retryAfter seconds
      • WebAPIFileUploadInvalidArgumentsError — Invalid file upload arguments
      • WebAPIFileUploadReadFileDataError — Failed to read file data for upload

    Removed factory functions (these were internal but exported — use new with the corresponding class instead):

    • errorWithCode()
    • platformErrorFromResult()new WebAPIPlatformError(...)
    • requestErrorWithOriginal()new WebAPIRequestError(...)
    • httpErrorFromResponse()new WebAPIHTTPError(...)
    • rateLimitedErrorWithDelay()new WebAPIRateLimitedError(...)

    Other breaking type changes:

    • WebAPIHTTPError.headers type changed from IncomingHttpHeaders to Record<string, string>.
    • The CodedError interface is deprecated — use instanceof checks with specific error classes instead.
    • Error .name values changed from generic 'Error' to descriptive class names (e.g., 'WebAPIPlatformError').
  • fc98c8c: Replaced axios with the standard Fetch API for all HTTP transport. The following options and types have been removed from WebClientOptions:

    • agent — Use the new fetch option to provide a custom fetch implementation with proxy or keep-alive support. For proxies, prefer the built-in http.setGlobalProxyFromEnv() or NODE_USE_ENV_PROXY=1 (Node.js 24+). For advanced use cases:
      import { fetch, Agent } from "undici";
      const client = new WebClient(token, {
        fetch: (url, init) =>
          fetch(url, {
            ...init,
            dispatcher: new Agent({ keepAliveTimeout: 60_000 }),
          }),
      });
    • tls and TLSOptions — Configure TLS via a custom fetch implementation with an undici Agent, or use the NODE_EXTRA_CA_CERTS environment variable.
    • requestInterceptor and RequestInterceptor type — Wrap the fetch function to intercept or modify requests before they are sent.
    • adapter and AdapterConfig type — Use the fetch option instead.
    • RequestConfig type (was an alias for Axios' InternalAxiosRequestConfig) — Removed entirely.
    • attachOriginalToWebAPIRequestError option — Removed. The original error is now always available via the standard cause property on WebAPIRequestError.

    The dependencies axios, form-data, is-electron, and is-stream have been removed. The default fetch implementation is globalThis.fetch (available in Node.js 20+).

    New exported types for custom fetch implementations: FetchFunction, FetchResponse, FetchRequestInit, FetchHeaders.

  • fc98c8c: Removed previously-deprecated API methods and their associated request/response types:

    • files.upload — Use filesUploadV2 instead (available since v6.7). The filesUploadV2 method handles the multi-step upload process automatically.
    • rtm.start — Use rtm.connect instead. The rtm.start method was deprecated by Slack in favor of the lighter-weight rtm.connect.
    • workflows.stepCompleted, workflows.stepFailed, workflows.updateStep — These methods supported the retired Steps from Apps feature (deprecated August 2023, retired September 2024). The workflows.featured.* and admin.workflows.* methods for the current Workflow Builder remain available.

Minor Changes

  • fc98c8c: feat: expand app manifest types — add agent_view and assistant_view features, recent agent events (app_context_changed, assistant_thread_started, assistant_thread_context_changed), optional OAuth scopes (bot_optional/user_optional), and event metadata_subscriptions

Patch Changes

  • bb49d99: fix: apply redact() to API response bodies in debug logs and recurse into nested objects, preventing tokens from leaking into logs when debug logging is enabled
  • Updated dependencies [fc98c8c]
  • Updated dependencies [fc98c8c]
    • @slack/logger@5.0.0
    • @slack/types@3.0.0

@slack/types@3.0.0

Choose a tag to compare

@slackapi slackapi released this 14 Jul 17:53
70e15b8

Major Changes

  • fc98c8c: Drop Node.js 18 support. The minimum supported Node.js version is now 20.

@slack/socket-mode@3.0.0

Choose a tag to compare

@slackapi slackapi released this 14 Jul 17:56
70e15b8

Major Changes

  • fc98c8c: Drop Node.js 18 support. The minimum supported Node.js version is now 20.

  • fc98c8c: Redesigned error handling to use proper Error subclasses instead of plain objects with a code property.

    Migration: Replace if (error.code === ErrorCode.WebsocketError) with if (error instanceof SMWebsocketError).

    New error classes (all extend a common SlackSocketModeError abstract base class, which extends Error):

    • SMPlatformError — Slack platform returned an error event
    • SMWebsocketError — WebSocket connection failure (original error in cause)
    • SMNoReplyReceivedError — Timed out waiting for a reply to an acknowledgement
    • SMSendWhileDisconnectedError — Attempted to send while not connected
    • SMSendWhileNotReadyError — Attempted to send before the connection was ready

    Catch any socket-mode error with if (error instanceof SlackSocketModeError).

    Removed factory functions (use new with the corresponding class instead):

    • websocketErrorWithOriginal()new SMWebsocketError(original)
    • platformErrorFromEvent()new SMPlatformError(event)
    • noReplyReceivedError()new SMNoReplyReceivedError()
    • sendWhileDisconnectedError()new SMSendWhileDisconnectedError()
    • sendWhileNotReadyError()new SMSendWhileNotReadyError()

    The CodedError interface is deprecated — use instanceof checks with specific error classes instead. The error.code property still exists for backward-compatible checks, but error.name values changed from generic 'Error' to descriptive class names (e.g., 'SMWebsocketError').

  • fc98c8c: Replaced the ws WebSocket library with a spec-compliant WebSocket implementation backed by undici. undici@^7 is now a peer dependency that must be installed alongside @slack/socket-mode:

    npm install @slack/socket-mode undici@^7

    Removed options:

    • clientOptions.agent (the httpAgent passed to the underlying web-api client). Use the new top-level dispatcher option instead. The dispatcher handles both the WebSocket connection and HTTP API calls (unless clientOptions.fetch is also provided, in which case dispatcher only applies to WebSocket).

    New dispatcher option:

    import { SocketModeClient } from "@slack/socket-mode";
    import { ProxyAgent } from "undici";
    
    const client = new SocketModeClient({
      appToken: process.env.SLACK_APP_TOKEN,
      dispatcher: new ProxyAgent("http://proxy:3128"),
    });

    For simple proxy use cases, prefer the Node.js built-in proxy support: call http.setGlobalProxyFromEnv() at startup or set NODE_USE_ENV_PROXY=1 (Node.js 24+) with HTTP_PROXY/HTTPS_PROXY environment variables.

    The dispatcher option accepts any object implementing the SocketModeDispatcher interface (structurally compatible with undici's Agent, ProxyAgent, Client, etc.).

    This package now depends on @slack/web-api@^8 — any clientOptions you pass are subject to web-api v8 breaking changes (e.g., the agent and tls options are no longer available; use clientOptions.fetch instead).

Patch Changes

  • Updated dependencies [fc98c8c]
  • Updated dependencies [fc98c8c]
  • Updated dependencies [fc98c8c]
  • Updated dependencies [bb49d99]
  • Updated dependencies [fc98c8c]
  • Updated dependencies [fc98c8c]
  • Updated dependencies [fc98c8c]
    • @slack/logger@5.0.0
    • @slack/web-api@8.0.0