-
6cf7b0c: Enforce a configurable request body size limit in
HTTPReceiverandExpressReceiverto prevent unauthenticated large-body denial-of-service attempts. Both receivers previously buffered the entire request body into memory before signature verification, so a flood of large invalid requests could exhaust memory and crash a publicly exposed app.Both receivers now reject request bodies larger than a new
bodyLimitoption with an HTTP413response before the whole body is buffered. The limit is enforced on the bytes actually received (not theContent-Lengthheader, which a client controls) and applies even whensignatureVerificationisfalse. It defaults to4194304(4 MB); pass a differentnumberof bytes, abytes-style string like'4mb', orInfinityto disable it (not recommended in production).This is a security fix with a minor behavioral change: requests with bodies larger than 4 MB are now rejected with
413by default (previously unbounded). Apps that legitimately receive larger payloads can raisebodyLimiton the receiver.
- b9acd4f: Fix
AwsEventV1.multiValueQueryStringParametersto allownull, matching the actual AWS API Gateway payload and the@types/aws-lambdaAPIGatewayProxyEventtype. This resolves the type error when passing anAPIGatewayProxyEventdirectly to the handler returned byAwsLambdaReceiver.
-
d284e69: Drop Node.js 18 support. The minimum required runtime is now Node.js 20 (npm >=9.6.4).
-
d284e69: Remove deprecated
WorkflowStepclass and all associated types, middleware, and utilities. UseCustomFunctionandapp.function()instead. -
d284e69: Replace axios with native fetch for response_url calls. Remove
agentandclientTlsoptions fromAppOptions— useclientOptions.fetchto provide a custom fetch implementation for proxy/TLS needs. Add adispatcheroption toSocketModeReceiverfor proxy/TLS configuration in socket mode.respond()now throws aRespondErrorwhen theresponse_urlrequest returns a non-2xx status (restoring the throw-on-failure behavior that axios provided) and resolves to aResponseon success rather than an axios response object.
- d284e69: Improve error handling by leveraging
@slack/web-apiv8 error classes. Authorization errors are now properly wrapped in anAuthorizationError, preserving the original thrown value (non-Errorrejections are retained via thecauseof the wrapped original). Default error handlers log richer details for web-api errors (API error codes, rate limit durations, HTTP status codes) alongside the full error object, so stack traces and causes remain available. The@slack/web-apierror classes (SlackError,WebAPIPlatformError,WebAPIRequestError,WebAPIHTTPError,WebAPIRateLimitedError) can be imported from@slack/web-apiforinstanceofchecks.
-
9839a50: Pass the App's named
bolt-appConsoleLoggerto the default receivers when nologgeroption is provided. Previously the App constructor built a named logger onthis.loggerbut threaded the raw (potentially undefined) constructor argument intoinitReceiver, soHTTPReceiver/SocketModeReceivereach built their own anonymous logger and receiver-side log lines (e.g. unhandled HTTP requests on custom routes) appeared without thebolt-appprefix.Behaviour change for the no-
loggercase: the default receiver now shares the sameLoggerinstance asapp.logger, so a downstreamapp.logger.setLevel(...)after construction will affect receiver-side logging too. This is consistent with the existing behaviour that already mutatesthis.logger's level via thelogLevelconstructor option. Apps that supplied their ownloggerare unaffected; apps that relied on the receiver's logger being independent ofapp.loggerwill need to pass a separateloggerinto the receiver explicitly. -
e1c21d7: Fix
AwsLambdaReceiver.toHandler()so Bolt apps on the AWS Lambda Node.js 24+ runtime no longer fail at startup withRuntime.CallbackHandlerDeprecated. The returned handler is now a 2-arg promise-based function; the unused trailingcallbackparameter has been removed from theAwsHandlertype. The legacyAwsCallbackexport is retained and marked@deprecated. -
f2de079: Add
context_team_idandcontext_enterprise_idas optional fields on theEnvelopedEventtype. Slack's Events API delivers these on the envelope for Slack Connect channels and Enterprise Grid org-wide apps, whereteam_idmay refer to a workspace different from the one the bot is installed in. Without the typed fields, downstream code had to reach for@ts-expect-erroror unsafe casts to route by the correct workspace.
- 341b60e: Reject empty
signingSecretat initialization to prevent accidental HMAC signature forgery.
- 4545150: Require exact
ssl_check=1value to bypass signature verification, preventing truthy but incorrect values from skipping authentication checks.
- a18c359: fix: correct InvalidCustomPropertyError code and MemoryStore promise handling