Here is the list of all the issues / pull requests included in the release: https://github.com/slackapi/bolt-js/milestone/26?closed=1
say type incorrectly inferred as never when using pin_added or reaction_* events (via #1473 and #1476) - thanks @seratch!ack() is not accessible in global middleware in TypeScript (via #1482) - thanks @seratch!Here is the list of all the issues / pull requests included in the release: https://github.com/slackapi/bolt-js/milestone/25?closed=1
Here is the list of all the issues / pull requests included in the release: https://github.com/slackapi/bolt-js/milestone/24?closed=1
Since this version, the default behavior of the OAuth flow has been changed for better security. The changes are:
InstallProvider (The underlying OAuth module) verifies not only the query string but also its corresponding browser cookie dataStateStore (ClearStateStore) makes sure that the state parameter is not too old (the default lifetime is 10 minutes)Refer to #1335 #1391 https://github.com/slackapi/node-slack-sdk/issues/1435 https://github.com/slackapi/node-slack-sdk/pull/1436 for the context. If you encounter behavior changes described at #1412, consider either changing your app code or setting installerOptions.legacyStateVerification: true for now.
EnvelopedEvent interface to users - Thanks @martin-cyclehttpServer.close error only when the server exists - Thanks @sbcguaHere are all the issues / pull requests included in the release.
🎁 🐛 New features / improvements:
deferInitialization of App - #248 #1303 - Thanks @seratch and @SpencerKaiserHTTPReceiver responses to /slack/install route - #1279 #1280 - Thanks @filmajtokens_authorize / app_uninstalled event #674 #1328, - Thanks @seratchSlackEvent union type to include ChannelIDChangedEvent - #1302 #1301 Thanks @pmezard and @srajiangUserChangeEvent.user.updated attribute #1320 #1322 - Thanks @seratch and @pmezard📝 Document updates:
deferInitialization #1304, #1308 - Thanks @filmaj, @wongjas, @seratch!userScopes property - #1295 - Thanks @wongjasrespond argument docs to include views listener #1313 - Thanks @seratchHere are all the issues / pull requests included in the release.
@slack/web-api dependency to at least v6.6.0 to address a security vulnerability in axios (via #1276) - thanks @filmaj!@slack/oauth dependency to at least v2.4.0 to address major bugs (via #1273) - thanks @seratch!$PORT fails to bind on Heroku (via #1210) - thanks @filmaj!Channel*MessageEvent types (via #1254) - thanks @seratch!updateConversation should accept expiration time (via #1221) - thanks @shubhamjajoo!state information from the Listening to Modals documentation (via #1236) - thanks @wongjas!logger instead of console.log (via #1242) - thanks @wongjas!processBeforeResponse (via #1229) - thanks @ramblingenzyme!extendedErrorHandler (via #1227) - thanks @wongjas!view_closed support (via #1214) - thanks @TheManWhoStaresAtCode!start method when using socket mode (via #1202) - thanks @filmaj!Here is the list of all the issues / pull requests included in the release: https://github.com/slackapi/bolt-js/milestone/16?closed=1
Here is the list of all the issues / pull requests included in the release: https://github.com/slackapi/bolt-js/milestone/15?closed=1
This version had a package file issue. Please use v3.8.1 or newer instead.
Loads of updates and improvements this go-around with the help of feedback from the community 🎉 Many many thanks!
FileInstallationStore (#941, #1003) - Thanks, @misscoded!axios options to include proxy:false to match @slack/web-api package (#979) - thanks @stevengillAwsLambdaReceiver failing to parse event.body if isBase64Encoded is true (#971, #972) - thanks @TheManWhoStaresAtCodeedited property to app_mention event payload (#960, #961) - thanks @seratch and @hi-seMany improvements (thanks to the awesome contributors!) are included in this release :tada:
Here is the list of all the issues / pull requests included in the release: https://github.com/slackapi/bolt-js/milestone/8?closed=1
SocketModeReceiver logging sentence (#807) - Thanks @KhushrajRathod!AwsLambdaReceiver (#784 #785) - Thanks @seratch!app.start() for Socket Mode by allowing extra arguments to be optional (#823) - Thanks @KhushrajRathodevent.user to correctly reference user ID (#790) - Thanks @mwbrooks@vendia/serverless-express (#799 #800 #804 #806) - Thanks @januswel @avery100 @mwbrookschannel_id_changed event (#779, #783) - thanks @stevengillUpdated @slack/socket-mode dependency to use a range (^1.0.0) instead of a specific version - thanks @stevengill
orgAuthorize option when initializing App. If you used this option previously, you must use authorize instead for both single workspace installs and org wide app installs. See the migration guide to learn more! (#730) - thanks @stevengillInstallationStore.fetchOrgInstallation() or InstallationStore.storeOrgInstallation(). If you used these previously, you must use InstallationStore.fetchInstallation() and InstallationStore.storeInstallation() instead. See the migration guide to learn more! (#730) - thanks @stevengillApp, use the socketMode: true option to choose connecting to Slack without an HTTP server (:wave: goodbye managing ngrok). In order to use Socket Mode, you must first enable it for your app’s configuration (https://api.slack.com/apps → Your App → Socket Mode).
SocketModeReceiver class. This receiver allows your app to receive events from Slack over a WebSocket connection.App, conditionally check for when you’re not in production (e.g. process.NODE_ENV !== '``production``' ) to set developerMode: ```true`. Developer Mode currently enables debug logging, enables SocketMode, adds a custom failure handler for OAuth, and outputs the body of every incoming request. (#714, #742) - thanks @stevengillHTTPReceiver is the new default receiver for App. This will allow Bolt for JavaScript apps to more easily work with other popular web frameworks (Hapi.js, Koa, etc). (#670, #753) - thanks @aoberoi
ExpressReceiver is still available to use for those of you that have usecases which aren’t covered by HTTPReceiver.requestListener property to selectively send it requests. This property follows the exact function signature as the first argument to Node’s built-in http.createServer(), so it’s very flexible. It will throw an HTTPReceiverDeferredRequestError, with a req and res property if it was not able to handle a given request.app.start() . This method now takes TLS options as its second parameter (after the port). The simplest example of starting an HTTP server is app.start(3000, { key: MY_TLS_KEY, cert: MY_TLS_CERT }). (#234, #658) - thanks @aoberoiis_enterprise_install check for slash commands (#737, #738) - thanks @mattcaseyAppMentionInterface (#735, #739) - thanks @misscoded, @BenAlderferchannel and other missing properties to all MessageEvent interfaces (#736, #740) - thanks @misscoded, @BenAlderfer