bloom_errors 0.2.2
bloom_errors: ^0.2.2 copied to clipboard
Strongly-typed HTTP error hierarchy, sibling package error mapping, and dev/prod error-rendering middleware for Bloom.
Changelog #
0.2.2 - 2026-09-04 #
Added #
- New common HTTP exception types (#30):
BloomMethodNotAllowedException(405method_not_allowed, with optionalallowedmethods indetails),BloomServiceUnavailableException(503service_unavailable), plusBloomRequestTimeoutException(408) andBloomUnsupportedMediaTypeException(415) following the existing patterns. - Request correlation in
onError(#30):BloomErrorMiddlewaregainsonErrorWithContext(error, stackTrace, request), giving observability callbacks access to the originatingBloomRequest(method/URI) for correlation. The existing two-parameteronErrorcallback is unchanged and remains source-compatible; set either or both.
Fixed #
- Throwing
onErrorno longer escapes (#30): exceptions thrown by theBloomErrorMiddleware.onErrorlogging callback are caught (and logged to the console) instead of propagating out of the error path and breaking the error response. - 429
Retry-Afterheader merge (#30):BloomTooManyRequestsException.toResponsenow spreads caller-supplied headers first so the computedRetry-Aftervalue wins instead of being clobbered by a caller-provided (possibly stale) header.
Documentation #
- Warned against putting secrets/PII in
BloomApiException.details(echoed verbatim to clients and included intoString()output that gets logged).
Security #
- Mapped 500s use generic messages (#28): ORM, storage, migrate, and
mapToHttpException-fallback mappings no longer embed rawerror.toString()(driver/SQL/filesystem internals) intoBloomApiExceptions, which render verbatim in every environment. Raw details remain available viaonErrorand non-prod output. - Deny-by-default environment masking (#29): 500s are masked unless the environment is an explicit dev value (
local,dev,development,test).staging/prod/qa/preview/unknown values no longer leak stack traces. Recognized values are documented onBloomErrorMiddleware.
0.2.1 - 2026-08-25 #
Fixed #
- fix: bump bloom_server dependency constraint from ^0.1.0 to ^0.2.0 — the stale constraint was incompatible with any sibling package (bloom_cache, bloom_i18n) requiring bloom_server ^0.2.0, breaking pub get in any app combining them.
0.2.0 - 2026-08-23 #
Breaking #
- Now depends on
bloom_serverinstead ofbloom_framework. Imports change frompackage:bloom_framework/bloom_server.darttopackage:bloom_server/bloom_server.dart. - No longer requires Flutter. The package now resolves against the Flutter-free
bloom_servercore, so it can be used from a plaindart run/dart compilebackend.
0.1.0 #
- Initial release of
bloom_errors. BloomHttpExceptionbase class and standard subclasses:BloomBadRequestException(bad_request, 400)BloomUnauthorizedException(unauthorized, 401)BloomForbiddenException(forbidden, 403)BloomNotFoundException(not_found, 404)BloomConflictException(conflict, 409)BloomValidationFailedException(validation_failed, 422)BloomTooManyRequestsException(too_many_requests, 429)BloomInternalException(internal_server_error, 500)
BloomErrorMapperregistry for mapping arbitrary domain and sibling package exceptions (frombloom_db,bloom_auth_server,bloom_storage,bloom_validate,bloom_migrate, etc.) to HTTP exceptions without introducing tight coupling or dependency cycles.BloomErrorMiddlewarefor global exception interception, dev-vs-prod masking viaAPP_ENV, and uniform JSON error payloads.