# Change Log - **Last updated**: 2026-07-02T14:22:52Z - **Generator**: [thi.ng/monopub](https://thi.ng/monopub) All notable changes to this project will be documented in this file. Only versions published since **2023-01-01** are listed here. Please consult the Git history for older version information. See [Conventional Commits](https://conventionalcommits.org/) for commit guidelines. **Note:** Unlisted _patch_ versions only involve non-code or otherwise excluded changes and/or version bumps of transitive dependencies. ### [0.12.22](https://codeberg.org/thi.ng/umbrella/src/tag/@thi.ng/server@0.12.22/packages/server) (2026-01-23) #### โ™ป๏ธ Refactoring - add ParsedFormData, fix parseSearchParams(), add docs/tests ([f9899f7](https://codeberg.org/thi.ng/umbrella/commit/f9899f7)) ### [0.12.19](https://codeberg.org/thi.ng/umbrella/src/tag/@thi.ng/server@0.12.19/packages/server) (2025-12-03) #### โ™ป๏ธ Refactoring - update for-loops (use const where possible) ([5ceaf1a](https://codeberg.org/thi.ng/umbrella/commit/5ceaf1a)) ### [0.12.6](https://codeberg.org/thi.ng/umbrella/src/tag/@thi.ng/server@0.12.6/packages/server) (2025-09-25) #### ๐Ÿฉน Bug fixes - update cacheControl() ([21b48a4](https://codeberg.org/thi.ng/umbrella/commit/21b48a4)) - don't set field if its value is false ### [0.12.5](https://codeberg.org/thi.ng/umbrella/src/tag/@thi.ng/server@0.12.5/packages/server) (2025-09-01) #### โ™ป๏ธ Refactoring - fix type import ([8e90657](https://codeberg.org/thi.ng/umbrella/commit/8e90657)) ## [0.12.0](https://codeberg.org/thi.ng/umbrella/src/tag/@thi.ng/server@0.12.0/packages/server) (2025-08-04) #### ๐Ÿš€ Features - add `SessionOpts.onInvalid` callback ([83c15ee](https://codeberg.org/thi.ng/umbrella/commit/83c15ee)) ## [0.11.0](https://codeberg.org/thi.ng/umbrella/src/tag/@thi.ng/server@0.11.0/packages/server) (2025-06-05) #### ๐Ÿš€ Features - force expire session cookie if invalid session ([ac6c208](https://codeberg.org/thi.ng/umbrella/commit/ac6c208)) ## [0.10.0](https://codeberg.org/thi.ng/umbrella/src/tag/@thi.ng/server@0.10.0/packages/server) (2025-04-16) #### ๐Ÿš€ Features - add `#` in URL safety check, update `RequestCtx` ([f0a7025](https://codeberg.org/thi.ng/umbrella/commit/f0a7025)) - respond with HTTP 400 if request URL contains `#` - this stops maliciously contructed requests via HTTP `request-target` - add docs ## [0.9.0](https://codeberg.org/thi.ng/umbrella/src/tag/@thi.ng/server@0.9.0/packages/server) (2025-03-22) #### ๐Ÿš€ Features - update static file serving ([e3ee3d6](https://codeberg.org/thi.ng/umbrella/commit/e3ee3d6)) - update `StaticOpts` to support multiple `filters` & individual `headers` per file - update `StaticOpts.prefix` type - consolidate GET & HEAD handlers - update `__fileHeaders()` to perform more checks and inject headers - update `etagFileTimeModified()` to return base36 timestamp - add `pathFilterASCII()` and `pathMaxLength()` filter predicates - use `pathFilterASCII()` as default filter ## [0.8.0](https://codeberg.org/thi.ng/umbrella/src/tag/@thi.ng/server@0.8.0/packages/server) (2025-03-13) #### ๐Ÿš€ Features - add method adapter, update `RequestCtx` ([360abda](https://codeberg.org/thi.ng/umbrella/commit/360abda)) - add `ServerOpts.method` to allow for method conversion - add `rejectUserAgents()` interceptor ([de0c373](https://codeberg.org/thi.ng/umbrella/commit/de0c373)) - add UA presets for AI bots & scrapers ## [0.7.0](https://codeberg.org/thi.ng/umbrella/src/tag/@thi.ng/server@0.7.0/packages/server) (2025-03-09) #### ๐Ÿš€ Features - update RateLimiter to use leaky buckets ([f342fde](https://codeberg.org/thi.ng/umbrella/commit/f342fde)) - update `RateLimterOpts` - update/simplify `RateLimiter` interceptor - update deps ## [0.6.0](https://codeberg.org/thi.ng/umbrella/src/tag/@thi.ng/server@0.6.0/packages/server) (2025-02-21) #### ๐Ÿš€ Features - update `sessionInterceptor()` cookie signing/handling ([bdd4d66](https://codeberg.org/thi.ng/umbrella/commit/bdd4d66)) - update `SessionInterceptor.newSession()` - pre-compute session metadata (HMAC & cookie values), store in WeakMap - update `.withSession()` - update `.validateSession()` to use cached signature - update tests - add/update `ServerOpts` ([23b5321](https://codeberg.org/thi.ng/umbrella/commit/23b5321)) ## [0.5.0](https://codeberg.org/thi.ng/umbrella/src/tag/@thi.ng/server@0.5.0/packages/server) (2025-02-19) #### ๐Ÿš€ Features - update interceptor handling ([9cdb8b8](https://codeberg.org/thi.ng/umbrella/commit/9cdb8b8)) - update post-interceptor execution logic & return values - update `Server.runHandler()`, `Server.compileRoute()` - update `logResponse()`, `measure()` interceptors #### โ™ป๏ธ Refactoring - rename `serverSession()` => `sessionInterceptor()` ([2ada168](https://codeberg.org/thi.ng/umbrella/commit/2ada168)) - add docs ## [0.4.0](https://codeberg.org/thi.ng/umbrella/src/tag/@thi.ng/server@0.4.0/packages/server) (2025-02-10) #### ๐Ÿš€ Features - update ServerSession & interceptor ([71d26bb](https://codeberg.org/thi.ng/umbrella/commit/71d26bb)) - add `ServerSession.ip` - update `SessionInterceptor` to validate stored IP addr - rename `.delete()` => `.deleteSession()` - add `.replaceSession()` - remove obsolete `FlashMsg` (for now) - update ServerResponse, update host matching ([25a07f3](https://codeberg.org/thi.ng/umbrella/commit/25a07f3)) - update `isMatchingHost()` - add `ServerResponse.rateLimit()` and `.noResponse()` - update tests - update SessionInterceptor to create signed cookie ([d240107](https://codeberg.org/thi.ng/umbrella/commit/d240107)) - add `SessionOpts.secret` - sign session ID with salt & SHA256 - add validateSession() - update pre() interceptor - add `rateLimiter()` interceptor ([245cc9d](https://codeberg.org/thi.ng/umbrella/commit/245cc9d)) - add `measure()` interceptor ([4702e84](https://codeberg.org/thi.ng/umbrella/commit/4702e84)) - refactor logRequest/Response() interceptors #### โฑ Performance improvements - update Server 404 & OPTIONS handling, remove method override ([71307af](https://codeberg.org/thi.ng/umbrella/commit/71307af)) - process 404 asap (without full request ctx) - process default HTTP OPTIONS handler asap - in both cases no interceptors will be run anymore #### ๐Ÿงช Tests - update tests (signed cookies) ([8af9f48](https://codeberg.org/thi.ng/umbrella/commit/8af9f48)) ## [0.3.0](https://codeberg.org/thi.ng/umbrella/src/tag/@thi.ng/server@0.3.0/packages/server) (2025-02-02) #### ๐Ÿš€ Features - add more HTTP error response methods ([5731ff3](https://codeberg.org/thi.ng/umbrella/commit/5731ff3)) - add ServerResponse, IPv6 support ([22f64c5](https://codeberg.org/thi.ng/umbrella/commit/22f64c5)) #### ๐Ÿงช Tests - add tests ([1522193](https://codeberg.org/thi.ng/umbrella/commit/1522193)) ## [0.2.0](https://codeberg.org/thi.ng/umbrella/src/tag/@thi.ng/server@0.2.0/packages/server) (2025-01-30) #### ๐Ÿš€ Features - add generics, various other updates ([a340f65](https://codeberg.org/thi.ng/umbrella/commit/a340f65)) - add generics to most main types/interfaces - refactor `SessionInterceptor` as class w/ pluggable storage - add `ISessionStore` and `InMemorySessionStore` impl - update ServerOpts to allow augmenting request context object - add default HTTP OPTIONS handler - update Server cookie parsing - add StaticOpts.auth flag - update logRequest() interceptor - update pkg exports - update tests ## [0.1.0](https://codeberg.org/thi.ng/umbrella/src/tag/@thi.ng/server@0.1.0/packages/server) (2025-01-29) #### ๐Ÿš€ Features - migrate/import as new pkg ([61035bb](https://codeberg.org/thi.ng/umbrella/commit/61035bb)) - re-import various security header interceptors ([036b9b2](https://codeberg.org/thi.ng/umbrella/commit/036b9b2)) - add interceptors: - `crossOriginOpenerPolicy()` - `crossOriginResourcePolicy()` - `referrerPolicy()` - `strictTransportSecurity()` - add/update tests - update sendFile(), staticFiles() and compression handling ([9f4d25a](https://codeberg.org/thi.ng/umbrella/commit/9f4d25a)) - add support for brotli, gzip, deflate - refactor sendFile() internals - disable compression by default - import refactored cacheControl() interceptor ([4eff206](https://codeberg.org/thi.ng/umbrella/commit/4eff206)) - update pkg deps & exports - update tests - re-add etag support/handlers ([13fb75e](https://codeberg.org/thi.ng/umbrella/commit/13fb75e)) - add `StaticOpts.etag` - update `staticFiles()` HEAD/GET handlers - add `Server.unmodified()` - add `etagFileTimeModified()` - add `etagFileHash()` - add `isUnmodified()` helper - remove "content-length" header from HEAD handler - update tests - add `server()` factory function (syntax sugar) ([ee22ea1](https://codeberg.org/thi.ng/umbrella/commit/ee22ea1))