slackapi / slackapi/node-slack-sdk

Feature Request: Expose hello event data (e.g., num_connections, debug_info) in SocketModeClient

Open
#2,253 1 comment 0 reactions 0 assignees View on GitHub

Nobody has claimed this yet.

discussion enhancement pkg:socket-mode
Dominant language
TypeScript
Stars
3.4k
Forks
688
Avg merge
15h 31m
Merged PRs (30d)
27

Description

(Describe your issue and goal here)

Goal:
Our goal is to programmatically access crucial information from the hello event sent by Slack upon establishing a Socket Mode connection. Specifically, we need num_connections to implement reliable "double-launch detection" for our application. Additionally, debug_info and connection_info.app_id (as provided in the hello event) would be very useful for enhanced diagnostics and connection verification.

Issue:
The @slack/socket-mode client successfully receives the hello event from Slack. This is evident from the SDK's own DEBUG logs, which show the complete hello payload including num_connections, debug_info, and connection_info.app_id. For example:
[timestamp] DEBUG (slack-socket/pid): Received a message on the WebSocket: {"type":"hello","num_connections":N,"debug_info":{...},"connection_info":{"app_id":"A..."}}

However, despite the SDK receiving this information, its contents (especially num_connections) are not exposed to the SDK user through any readily accessible public API:

This lack of access prevents developers from:

  1. Using num_connections to programmatically detect and manage multiple running instances of their Socket Mode application.
  2. Easily accessing debug_info or connection_info.app_id (from the hello event context) for application-level logging, diagnostics, or connection verification.

Proposed Solution/Suggestion:
We request that the SocketModeClient expose key information from the hello event. Ideal ways to implement this could be:

  1. Emit a new, dedicated hello event with the parsed hello message payload:
    client.on('hello', (payload) => {
      // payload would be the parsed content of the hello message
      // const { num_connections, debug_info, connection_info } = payload;
      console.log(`App ${payload.connection_info.app_id} connected. Active connections: ${payload.num_connections}`);
    });
    
  2. Enhance the connected event's payload to include the hello payload or selected fields from it.
  3. Expose relevant hello data as properties on the SocketModeClient instance after the hello message is processed (e.g., client.numConnections, client.socketDebugInfo, client.socketAppId).

Access to num_connections is the primary motivation, but making debug_info and connection_info also available would greatly benefit developers.

Packages:

Select all that apply:

  • @slack/web-api
  • @slack/rtm-api
  • @slack/webhooks
  • @slack/oauth
  • @slack/socket-mode
  • @slack/types
  • I don't know
Requirements

Please read the Contributing guidelines and Code of Conduct before creating this issue or pull request. By submitting, you are agreeing to those rules.


Use Case Example / Motivation:

The primary use case is "double-launch detection" . A bot developer wants to ensure only one instance of their Socket Mode bot is running using a specific app-level token. By checking num_connections upon startup, if it's greater than 1, the newly started instance can decide to log a warning, shut itself down gracefully, or enter a standby mode. This helps prevent redundant processing, unexpected behavior, and potential rate limit issues.

Current Limitations / Workarounds:

Currently, this vital information (num_connections, etc., from the hello event) is only visible within the SDK's internal DEBUG logs. Relying on parsing DEBUG logs is not a robust or recommended programmatic approach. Implementing alternative instance tracking mechanisms (e.g., using an external datastore like Redis) adds significant complexity compared to directly utilizing a value that Slack already provides to the client.

Environment:
  • Package Version (@slack/socket-mode): 2.0.4 (as observed in logs, but request applies to current/future versions)
  • Node.js Version: v22.12.0
Additional Context:

The DEBUG logs clearly show the hello message being received internally by the SDK:
[13:11:46.908] DEBUG (slack-socket/80817): Received a message on the WebSocket: {"type":"hello","num_connections":2,"debug_info":{"host":"applink-8",...},"connection_info":{"app_id":"A08SDQ16LUV"}}

The challenge is the absence of a public API to access these details programmatically.

Thank you for considering this feature request. Exposing this information would greatly improve the capabilities for developers building robust and diagnosable applications using Socket Mode.

Contributor guide

Open the contributing guide

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

Research direction

Start by reading the SocketModeClient.ts section linked in the issue, around lines 318-321, and compare it with the DEBUG output for the received hello message. Determine the public API needed for num_connections, debug_info, and connection_info.app_id; the work is done when those values are available programmatically rather than only in logs.

Written by the indexing model from the issue text.

Assessment

Tech stack
typescript
Domain
api
Issue type
Feature
Difficulty
5/5
Estimated time
Over a week
Activity status
Stale
Clarity
Mostly clear
Newbie friendliness
35/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.