chenhg5/cc-connect · error
%s
Error message
%s
What it means
The authenticated GET of a Slack file URL failed at transport level. The error text is passed through with the bot token redacted via core.RedactToken before wrapping, since the raw error can echo request details.
Source
Thrown at platform/slack/slack.go:570
ThreadTimestamp: rc.timestamp,
})
if err != nil {
return fmt.Errorf("slack: send file: %w", err)
}
return nil
}
var _ core.FileSender = (*Platform)(nil)
func (p *Platform) downloadSlackFile(url string) ([]byte, error) {
if url == "" {
return nil, fmt.Errorf("empty URL")
}
req, _ := http.NewRequest("GET", url, nil)
req.Header.Set("Authorization", "Bearer "+p.botToken)
resp, err := core.HTTPClient.Do(req)
if err != nil {
return nil, fmt.Errorf("%s", core.RedactToken(err.Error(), p.botToken))
}
defer resp.Body.Close()
// Check if we got an unexpected status code (e.g., redirect to login page)
if resp.StatusCode != http.StatusOK {
body, _ := io.ReadAll(io.LimitReader(resp.Body, 1024))
return nil, fmt.Errorf("download failed with status %d: %s", resp.StatusCode, string(body))
}
data, err := io.ReadAll(resp.Body)
if err != nil {
return nil, fmt.Errorf("read response body: %w", err)
}
// Basic sanity check: detect if we received HTML instead of binary data
if len(data) > 0 && (bytes.HasPrefix(data, []byte("<!DOCTYPE")) || bytes.HasPrefix(data, []byte("<html"))) {
return nil, fmt.Errorf("received HTML response (likely missing auth); first 100 bytes: %s", string(data[:min(100, len(data))]))
}View on GitHub (pinned to 4000b2338a)
Solutions
- Retry; check network/proxy access to files.slack.com
Defensive patterns
Strategy: try-catch
When it happens
Trigger: Thrown at platform/slack/slack.go:570 when the library encounters an invalid state.
Common situations: See trigger scenarios.
AI-assisted analysis of chenhg5/cc-connect@4000b2338a (2026-09-06).
Data as JSON: /api/errors/d3ec9963eb1f8338.
Report an issue: GitHub.