Peter Steinberger
b4ffa3106f
refactor(extensions): remove orphan test exports ( #122784 )
2026-08-12 12:45:33 -07:00
Sarah Fortune
cdaea2d6b6
fix(slack): route Enterprise Grid messages by workspace ( #120087 )
...
* fix(slack): route Grid messages by workspace
* fix(slack): use authorized Grid DM sender
* fix(slack): preserve ordinary client calls in grid routing
* test(slack): keep grid target coverage in scoped suite
* fix(slack): preserve workspace scope in approval routes
* feat(slack): scope Grid uploads and reactions by workspace
* fix(slack): preserve ordinary action read targets
* fix(slack): reuse Grid clients for thread status
* fix(slack): infer current Grid workspace for native actions
* fix(slack): record streamed thread participation promptly
* fix(slack): scope Grid member info to current workspace
* feat(slack): support Grid write actions
* feat(slack): support Grid read actions
* fix(slack): remove obsolete channel resolver
* fix(slack): route current Grid outbound delivery
* test(slack): cover Grid thread participation
* test(slack): use valid Grid team ID
* fix(slack): keep Grid thread participation without bot identity
* fix(slack): enable Grid pin reads
* fix(slack): keep current Grid sends workspace aware
* test(slack): assert Grid send routing synchronously
* refactor(slack): remove obsolete Grid action allowlist
* refactor(slack): derive Grid channel routing targets
* refactor(slack): pass optional team scope uniformly
* test(slack): expect uniform client options
* refactor(slack): name unscoped cache key explicitly
* refactor(slack): always pass action options
* refactor(slack): pass optional team scope directly
* refactor(slack): build team-scoped action options once
* refactor(slack): centralize optional team target formatting
* refactor(slack): construct reconciliation clients from scope
* refactor(slack): resolve delivery policy before sending
* refactor(slack): clarify inbound target roles
* refactor(slack): minimize validated event scope
* fix(slack): route outbound workspace through target
* fix(slack): format post response errors safely
---------
Co-authored-by: Sarah Fortune <sarah.fortune@gmail.com >
2026-08-08 15:38:24 -07:00
Peter Steinberger
7aacd1314d
fix(slack): recover bot identity after transient auth.test failure ( #117253 )
...
* fix(slack): recover bot identity after transient auth.test failure
* docs(slack): document identity selection invariant
* fix(slack): resolve startup auth fetch through plugin runtime
2026-08-01 00:23:03 -07:00
Sarah Fortune
cc0315a397
fix(slack): recover identity after transient startup auth failure ( #117060 )
...
* fix(slack): retry transient startup auth once
* fix(slack): allow two startup auth retries
* test(slack): cover stalled startup auth retries
---------
Co-authored-by: Sarah Fortune <sarah.fortune@gmail.com >
2026-07-31 15:50:32 -07:00
Peter Steinberger
78d6c6c047
fix(slack): bound read-only Web API calls ( #115018 )
...
Co-authored-by: zw-xysk <zhao.wang1@xydigit.com >
2026-07-28 03:37:54 -04:00
Alix-007
2dff17c754
fix(slack): add timeout to startup auth.test requests ( #105893 )
...
* fix(slack): add timeout to startup auth.test requests
* test(slack): format auth startup timeout proof
* fix(slack): keep startup timeout test helper private
* fix(slack): keep auth timeout state lean
* test(slack): settle stalled auth test during cleanup
* fix(slack): keep startup timeout within LOC guard
* fix(slack): terminate stalled startup auth checks
* test(slack): align startup logger mock type
2026-07-15 23:20:20 -07:00
zw-xysk
bdd060a40c
fix(slack): add 30s timeout to directory client API calls ( #106643 )
...
* fix(slack): add 30s timeout to directory client API calls
* fix(slack): bound directory lookups
* fix(slack): reject delayed lookup retries
* fix(slack): preserve directory timeout contract
* fix(slack): keep lookup policy internal
---------
Co-authored-by: Peter Steinberger <steipete@gmail.com >
2026-07-13 17:07:41 -07:00
xingzhou
babc287afe
fix(slack): time out stalled external file uploads ( #103442 )
...
* fix(slack): time out stalled external file uploads
* fix(slack): scope external upload timeout
* fix(slack): restrict external upload transport
* fix(slack): restrict external upload transport
* fix(slack): preserve external upload retry safety
* test(slack): use compatible guarded fetch runtime
* test(plugin-sdk): update public export baseline
* fix(slack): harden external upload delivery
* refactor(slack): isolate upload completion
Keep ordinary Enterprise Grid traffic on the Bolt listener client. Use a team-scoped no-retry client only for one-shot external upload completion, while preserving the bounded raw-upload timeout and safe durable replay classification.
* fix(slack): refresh upload release metadata
* chore(slack): leave release notes release-owned
* fix(slack): classify failed uploads before completion
* fix(slack): keep upload completion untimed
* test(plugin-sdk): refresh public export baseline
---------
Co-authored-by: Peter Steinberger <steipete@gmail.com >
2026-07-10 23:52:35 +01:00
Dallin Romney
39e1be080c
feat(slack): support alternate Web API roots ( #97154 )
...
* Allow Slack to target alternate Web API roots
* Protect Slack API URL routing
* Simplify Slack API URL routing
* Use env-only Slack API root routing
* Remove Slack client option alias
* Keep Slack API URL dotenv test inline
* Remove leftover Slack PR churn
* Block workspace Slack API URL dotenv
* Preserve Slack proxy HTTPS protocol
* Keep Slack option resolution explicit
* Remove Slack probe formatting diff
* fix(slack): preserve explicit API root precedence
* fix(slack): narrow cached write client options
2026-06-28 18:52:37 -07:00
Peter Steinberger
efd1a9ace6
docs: document messaging extension sources
2026-06-04 22:03:15 -04:00
Peter Steinberger
d399ac74f7
fix(slack): hash token cache keys
2026-04-25 01:17:55 +01:00
Peter Steinberger
b69e3b633b
refactor(slack): reuse default write clients
2026-04-25 01:13:55 +01:00
Peter Steinberger
0783090da0
test: split slack client option imports
2026-04-24 12:58:28 +01:00
Peter Steinberger
b4034b32c3
fix: honor Slack Socket Mode env proxies ( #62878 ) (thanks @mjamiv)
2026-04-08 05:38:45 +01:00
Michael Martello
5609a35f67
fix: handle leading-dot NO_PROXY entries matching apex domain
...
`.slack.com` in NO_PROXY should match both `slack.com` (apex) and
`wss-primary.slack.com` (subdomain). Strip the leading dot before
comparison so the suffix check works for both cases.
2026-04-08 05:38:45 +01:00
Michael Martello
4ab6a7b324
fix: address review — honor NO_PROXY, guard malformed URLs
...
- Check NO_PROXY/no_proxy before creating HttpsProxyAgent; skip proxy
when slack.com matches an exclusion entry (exact, suffix, or wildcard).
- Wrap HttpsProxyAgent construction in try/catch so malformed proxy URLs
degrade to direct connectivity instead of crashing Slack channel init.
- Extract resolveProxyUrlFromEnv and isHostExcludedByNoProxy as testable
helpers.
- Add tests for NO_PROXY exclusion, wildcard, unrelated hosts, and
malformed URL resilience.
2026-04-08 05:38:45 +01:00
Michael Martello
d4e5f250a0
fix(slack): honor HTTPS_PROXY for Socket Mode WebSocket connections
...
When HTTPS_PROXY or HTTP_PROXY env vars are set, create an
HttpsProxyAgent and pass it as the `agent` option through
@slack/bolt → @slack/socket-mode → ws, so the WebSocket upgrade
request is tunneled through the proxy.
This fixes Slack Socket Mode in environments where all outbound
traffic must go through an HTTP CONNECT proxy (e.g. sandboxed
containers, corporate networks). Previously the ws library opened
a direct connection to wss-primary.slack.com, ignoring proxy env
vars entirely.
The approach mirrors the existing Discord gateway proxy support
(extensions/discord/src/monitor/gateway-plugin.ts) which uses the
same https-proxy-agent library.
Fixes #57405
2026-04-08 05:38:45 +01:00
Peter Steinberger
eee37bf836
fix(slack): prevent duplicate draft replies
2026-03-31 21:22:50 +01:00
scoootscooob
8746362f5e
refactor(slack): move Slack channel code to extensions/slack/src/ ( #45621 )
...
Move all Slack channel implementation files from src/slack/ to
extensions/slack/src/ and replace originals with shim re-exports.
This follows the extension migration pattern for channel plugins.
- Copy all .ts files to extensions/slack/src/ (preserving directory
structure: monitor/, http/, monitor/events/, monitor/message-handler/)
- Transform import paths: external src/ imports use relative paths
back to src/, internal slack imports stay relative within extension
- Replace all src/slack/ files with shim re-exports pointing to
the extension copies
- Update tsconfig.plugin-sdk.dts.json rootDir from "src" to "." so
the DTS build can follow shim chains into extensions/
- Update write-plugin-sdk-entry-dts.ts re-export path accordingly
- Preserve extensions/slack/index.ts, package.json, openclaw.plugin.json,
src/channel.ts, src/runtime.ts, src/channel.test.ts (untouched)
2026-03-14 02:47:04 -07:00