# Changelog

## 2026-06-20 - v6.1.2

Хамрах хүрээ: `3b06fe8918484b9e9d69e7192d90db105a4cbb3b`-оос `0985002ce39717a34d729427c7c4eae07e257e82` хүртэл болон одоогийн `6.1.1` version bump.

### Breaking change

- Action contract бүр explicit `/`-ээр эхэлсэн `path` тодорхойлдог болсон. `action.name`-ээс route үүсгэдэг fallback-ийг хассан.
- Method omitted үед client, server, route uniqueness болон signing flow бүгд `GET` гэж resolve хийдэг болсон.
- `GET` action дээр body schema тодорхойлохыг хориглосон. `DELETE` action body-г explicit contract-той үед дэмжинэ.
- Query parameter-ийг flat scalar object хэлбэрээр хязгаарлаж, array, nested object, `null`, non-finite number болон бусад complex value-г reject хийдэг болсон.
- Signing canonical payload-оос protocol marker болон `action.name`-ийг хассан. Хуучин client/server signing protocol шинэ version-тэй wire-compatible биш.

### Feature

- Typed path parameter contract, client-side URL encoding болон server-side schema validation нэмсэн.
- Client global signing-ийг нэг call дээр `sign: false` ашиглан disable хийх боломжтой болсон.
- Signing header names-ийг client/server `sign.headerNames` config-оор full эсвэл partial override хийх боломжтой болсон.
- JSON response дээр application-ийн custom success status болон headers-ийг хадгалж, `204`/`205` bodyless success response-ийг дэмжсэн.
- File response дээр dynamic `filename`, `Content-Type`, Unicode `filename*` болон safe ASCII fallback дэмжлэг нэмсэн.

### Security

- Signing header name-ийг HTTP token syntax, whitespace болон case-insensitive uniqueness дүрмээр startup/request-ээс өмнө validate хийдэг болсон.
- Signing timestamp-ийг strict `YYYY-MM-DDTHH:mm:ss.sssZ` format болон calendar validity-аар validate хийдэг болсон.
- Server `toleranceMs` config-ийг positive safe integer эсэхээр startup үед шалгадаг болсон.
- Nonce TTL-ийг signed timestamp-ийн хүчинтэй үлдсэн хугацаанаас derive хийж, replay хамгаалалтын window-ийг бүрэн хамардаг болсон.
- File download filename дээр path separator, control character, `.`, `..` болон header injection эрсдэлтэй утгуудыг reject хийдэг болсон.

### Integration change

- `@napp/dti-server` package-д standards-compatible `Content-Disposition` serializer зориулалтаар `content-disposition` runtime dependency нэмсэн.
- Text response-ийн custom `Content-Type` болон charset утгыг library өөрчлөхгүй дамжуулдаг болсон.
- File response-ийн `Content-Type` өгөөгүй үед Blob metadata-аас таахгүй, `application/octet-stream` ашигладаг болсон.

### Documentation

- README-г Монгол/English хос хэлтэй v6.1.1 developer guide хэлбэрээр шинэчилж, install, quick start, contract rules, client/server usage, signing, raw REST, production checklist болон migration хэсгүүд нэмсэн.
- `ADR-0007` typed path params шийдвэрийг өргөтгөсөн.
- Configurable signing headers, explicit action path, default `GET`/GET body болон flat scalar query-д зориулсан `ADR-0008`–`ADR-0011` нэмсэн.
- Signing, response status, file metadata, auth context болон header merge-ийн existing ADR-уудыг шинэ behavior-тэй нийцүүлсэн.

### Test

- Action contract, default `GET`, DELETE body, flat scalar query болон bodyless response-ийн test нэмсэн.
- Custom signing headers, mapping mismatch, strict timestamp, nonce TTL болон canonical payload-ийн test нэмсэн.
- Unicode filename, unsafe filename, content type precedence болон custom text charset-ийн test нэмсэн.
- Нийт `66` TypeScript test `node:test`, `node:assert/strict` ашиглан амжилттай ажилладаг болсон.

### Version

- Root болон package lock version `6.1.1` болсон.
- Build хийх үед `@napp/dti-core`, `@napp/dti-client`, `@napp/dti-server` package бүгд `6.1.1` version-оор үүснэ.

## 2026-06-02 - v5.2.1 - 3b06fe8

Хамрах хүрээ: `02568848262be19fc226b46e1e85a24e5dd7ac6d`-оос `3b06fe8918484b9e9d69e7192d90db105a4cbb3b` хүртэл болон одоогийн `5.2.1` version bump.

### Feature

- `DTIExpressRouter` дээр router-level custom error parser нэмсэн.
- `error.parse` нь `DTIError` биш domain/custom error-ийг `DTIError` болгон map хийх боломжтой болсон.
- Error parser-д тухайн `error`, `action`, `req`, `res` context дамждаг болсон.
- Parser `DTIError` буцаавал client талд тухайн `code`, `status`, `details` бүхий error очно.
- Parser `undefined` буцаавал generic `DTI_INTERNAL_ERROR` response хэвээр үлдэнэ.

### Release process

- `release:check` script нь `verify`, `build`, `pack:check` дарааллаар release шалгалт хийдэг болсон.
- `release:publish` script нь `build`, `pack:check`, `publish:packages` дарааллаар publish хийдэг болсон.
- `release` script дотор автоматаар `npm version` ажиллуулдаг behavior-ийг хассан.

### Documentation

- README дээр router-level custom error parser-ийн хэрэглээний жишээ нэмсэн.

### Test

- Custom domain error parser-аар `DTIError` рүү map хийгдэх test нэмсэн.
- Parser map хийхгүй үед generic `DTI_INTERNAL_ERROR` хэвээр буцах test нэмсэн.

### Version

- Root package version `5.2.1` болсон.

## 2026-05-17 - v5.1.1 - 0256884

Хамрах хүрээ: `fac8c17a6b0ec41080efee16520dd247b5051cd3`-оос `02568848262be19fc226b46e1e85a24e5dd7ac6d` хүртэл.

### Feature

- `createDTIExpressRouter` дээр typed `meta` context option нэмсэн.
- `meta` нь static object эсвэл request бүр дээр ажиллах async resolver байж болно.
- Action handler param дээр `meta` context дамждаг болсон.
- `meta` resolver нь `auth` verify хийгдсэний дараа ажиллаж, configured үед verified `auth` context ашиглах боломжтой болсон.
- Router `auth` callback дээр тухайн request-д тохирох `@napp/dti-core` `DTIAction` contract `action` param-аар дамждаг болсон.

### Integration change

- `@napp/dti-core`, `@napp/dti-client`, `@napp/dti-server` publish package-уудад `README.md`, `CHANGELOG.md`, `docs/use-cases.md`, `docs/decisions/` орох build тохиргоо нэмсэн.
- Package `files` whitelist-д documentation файлуудыг нэмж, npm publish дээр README link эвдрэхгүй болгосон.

### Documentation

- README дээр router `auth` callback-ийн `action` param хэрэглээний жишээ нэмсэн.
- README дээр `meta` context-ийн static болон async resolver хэрэглээний жишээ нэмсэн.
- README-ийн `More Docs` хэсэгт `CHANGELOG.md` link нэмсэн.

### Test

- Static `meta` context handler руу дамжих test нэмсэн.
- `auth`-ын дараа request-level `meta` resolve хийгдэх test нэмсэн.
- Router `auth` callback real registered action contract авч байгааг шалгасан.

### Version

- Root болон package lock version `5.1.1` болсон.

## 2026-05-15 - v5.0.2 - fac8c17

Хамрах хүрээ: `df2d99f50b6eb6314aba46aebe242d7f31604b9f`-оос `fac8c17a6b0ec41080efee16520dd247b5051cd3` хүртэл.

### Behavior change

- `DTIExpressRouter` дээр action бүртгэх үед duplicate `action.name`-ийг шалгадаг болсон.
- Ижил `method + path` route давхар бүртгэгдэхийг хориглосон. Давхардвал `DTI_ACTION_ROUTE_DUPLICATE` code-той `DTIError` шиднэ.
- Ижил `path` боловч өөр `method`-той action-уудыг зөвшөөрсөн хэвээр үлдээсэн.
- Route path-ийн төгсгөлийн `/`-ийг duplicate шалгалтад normalize хийдэг болсон.

