summaryrefslogtreecommitdiffstats
path: root/vendor/github.com/slack-go/slack/socket_mode.go
blob: 69e40d99ddcb854fccbd74fab2d563b35b24c5ca (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
package slack

import (
	"context"
)

// SocketModeConnection contains various details about the SocketMode connection.
// It is returned by an "apps.connections.open" API call.
type SocketModeConnection struct {
	URL  string                 `json:"url,omitempty"`
	Data map[string]interface{} `json:"-"`
}

type openResponseFull struct {
	SlackResponse
	SocketModeConnection
}

// StartSocketModeContext calls the "apps.connections.open" endpoint and returns the provided URL and the full Info block with a custom context.
//
// To have a fully managed Socket Mode connection, use `socketmode.New()`, and call `Run()` on it.
func (api *Client) StartSocketModeContext(ctx context.Context) (info *SocketModeConnection, websocketURL string, err error) {
	response := &openResponseFull{}
	err = postJSON(ctx, api.httpclient, api.endpoint+"apps.connections.open", api.appLevelToken, nil, response, api)
	if err != nil {
		return nil, "", err
	}

	if response.Err() == nil {
		api.Debugln("Using URL:", response.SocketModeConnection.URL)
	}

	return &response.SocketModeConnection, response.SocketModeConnection.URL, response.Err()
}