feat: add Slack as an installable connector - #1537
Merged
Merged
Conversation
samxu01
force-pushed
the
kai/slack-installable-backend
branch
2 times, most recently
from
September 4, 2026 13:44
f3b864d to
01bce2a
Compare
samxu01
pushed a commit
that referenced
this pull request
Sep 4, 2026
… time — no digest Matches #1537 b801a6e. The hashed cookie was CodeQL's js/insufficient-password-hash (#1779) on every digest variant, and the hash defended against nothing: a row reader already holds state in the same document. Confirm is the wall. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
samxu01
force-pushed
the
kai/slack-installable-backend
branch
from
September 4, 2026 19:04
54256df to
35e79a3
Compare
samxu01
force-pushed
the
kai/slack-installable-backend
branch
from
September 4, 2026 20:04
d1b31d8 to
18b4d46
Compare
lilyshen0722
added a commit
that referenced
this pull request
Sep 4, 2026
…(TASK-006) (#1535) * docs(plans): Slack as the second installable connector — design note (TASK-006) Telegram with two substitutions: the OAuth state is the connect code and the callback is the enable command; the per-workspace bot token makes ADR-025 D6's secret reference a prerequisite. Everything else in #1527/#1531 is reused. * docs(plans): Slack note — the #1527 invariants checked one by one, and the one secret that enters outside the activation CAS * docs(plans): Slack note — the callback proves a Slack identity, not the right one: session nonce + confirm-in-Commonly before any bind routes (Vera) * docs(plans): Slack note — the one-write window after the exchange, and why token rotation stays off * docs(plans): Slack note — pending-bind expiry enforced at Confirm; reconciler goes on the scheduler (Vera) * docs(plans): Slack note — cite Slack's OAuth and rotation docs; drop the uncited same-token claim from the crash path * docs(plans): Slack note — the dropped-exchange log line names the workspace (Vera) * docs(plans): Slack note — shared event_id receipts (rollouts run two processes) and a key ring with a re-wrap path (Vera) * docs(plans): Slack note — the event receipt is a claim with state; stale processing is taken over by CAS (Vera) * docs(slack): the OAuth nonce is stored plain and compared in constant time — no digest Matches #1537 b801a6e. The hashed cookie was CodeQL's js/insufficient-password-hash (#1779) on every digest variant, and the hash defended against nothing: a row reader already holds state in the same document. Confirm is the wall. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com> --------- Co-authored-by: Claude Fable 5.1 <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
Verification
cd backend && npx jest --runInBand __tests__/unit/routes/slackOAuth.installables.test.js __tests__/unit/routes/slack.webhook.signature.test.js __tests__/unit/services/slackBridgeService.test.js __tests__/unit/services/installableInstallationService.test.js __tests__/unit/services/slackEventReceiptService.test.js __tests__/unit/services/installableEventHandlers.test.js __tests__/unit/services/connectorSecrets.test.js __tests__/unit/services/installableReconciler.schedule.test.js(43 passed)cd backend && npm run tsc:checkFollow-up / operator setup
SLACK_CLIENT_ID,SLACK_CLIENT_SECRET,SLACK_SIGNING_SECRET,CONNECTOR_SECRET_KEYS, andCONNECTOR_SECRET_ACTIVE_KEY; register the Slack Events, commands, and OAuth redirect URLs documented in docs(plans): Slack as the second installable connector — design note (TASK-006) #1535.