Skip to content

feat(standardized-auth): add an acme sample for standardized app auth - #324

Open
WilliamBergamin wants to merge 7 commits into
mainfrom
standardized-auth
Open

WilliamBergamin wants to merge 7 commits into
mainfrom
standardized-auth

Conversation

@WilliamBergamin

@WilliamBergamin WilliamBergamin commented Oct 16, 2026 •

Copy link
Copy Markdown

Summary

This pull request adds a standardized-auth sample: Acme, an app that lets users connect their account with Slack's built-in Connect and Manage connection controls. Rocket skates, anvils, and giant magnets not included.

  • App Home shows the connection with a Connect / Disconnect button.
  • Connect or Manage on the app's profile opens the connection modal.
  • When Slack asks whether a user is connected, the app answers.
  • Connecting takes one click, a stand-in for a real login. The README explains how to add your own sign-in page.
  • Runs over Socket Mode, so it needs no public URL, and saves connections to a local JSON file.

Before merging

Needs @slack/web-api 8.3.0 and @slack/types 3.3.0 to be released. The sample's CI job fails until then.

Testing

Use a workspace with standardized app authentication and Slack CLI v4.11.0 or newer.

  1. Run slack run in standardized-auth.
  2. On the app's Home tab, click Connect. The Acme row shows Connected. Click Disconnect and it shows Connect again.
  3. On the app's profile, click Connect. The modal opens with no error. Click Connect in the modal and it shows you as connected.
  4. On the profile, click Manage, then Disconnect. The modal and App Home both show Connect.
  5. As a user who has never opened the app, open its profile. It shows Connect.

🤖 Generated with Claude Code

WilliamBergamin and others added 7 commits October 16, 2026 12:22
Connects user accounts with the Slack-owned Connect and Manage connection
controls. Bolt's installation store holds each connection: the OAuth success
hook reports it with apps.user.connection.requestAuth, the disconnect
action forgets and revokes the user token, tokens_revoked forgets users
who remove the app, and the user_connection_status_requested event is
answered with apps.user.connection.update. App Home renders the
auth_provider block.

The user_connection request listener is written and tested but not yet
registered, since no Bolt routes that payload to action listeners yet.
This needs the next @slack/web-api, @slack/types, and @slack/oauth
releases before CI can pass.
Match slack-samples/bolt-python-examples#305: run over Socket Mode, keep
connections in a local JSON file, handle the user_connection event and the
fixed auth_provider_connect and auth_provider_disconnect action IDs, and
answer user_connection_status_requested. The OAuth flow, installation
store, tokens_revoked, and token revocation are gone.

Co-Authored-By: Claude <svc-devxp-claude@slack-corp.com>
The listener reads subtype, trigger_id, and user straight from the
event now that slackapi/node-slack-sdk#2783 types user_connection,
so the local typedef and cast are gone.

Co-Authored-By: Claude <svc-devxp-claude@slack-corp.com>
app.js only starts the app when import.meta.main is true, which needs
Node.js 24.2 or newer. Older versions exit without connecting, so the
engines field and README now say so. Biome skips the .slack directory,
since the Slack CLI writes .slack/apps.json without formatting it and
that failed npm run lint after slack run.

Co-Authored-By: Claude <svc-devxp-claude@slack-corp.com>
…es 3.3.0

These are the versions slackapi/node-slack-sdk#2764 will publish with requestAuth and the user_connection types. CI fails to install until they are on npm; refresh package-lock.json after the release.

Co-Authored-By: Claude <svc-devxp-claude@slack-corp.com>
…n tests

Listeners are now registered inline, so their argument types come from
Bolt and the JSDoc typedefs go away. The tests now drive the real app
through app.processEvent, with a fake globalThis.fetch in place of nock.

Co-Authored-By: Claude <svc-devxp-claude@slack-corp.com>
@WilliamBergamin WilliamBergamin self-assigned this Oct 23, 2026
@WilliamBergamin WilliamBergamin added the enhancement New feature or request label Oct 23, 2026
@WilliamBergamin
WilliamBergamin marked this pull request as ready for review October 23, 2026 16:03
@WilliamBergamin
WilliamBergamin requested a review from a team as a code owner October 23, 2026 16:03
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

enhancement New feature or request

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant