search()now returns a clean, denormalised structure:{ offers, lowestPrices }. Each offer already has itsmerchant,editionandregionresolved to a readable name (instead of numeric ids), pluscurrentPrice,minDiscountPrice,couponCodeandlastUpdate.lowestPrices.officialandlowestPrices.keyshopsexpose the cheapest official-store and key-reseller price (either may benull). This replaces the previous{ success, offers, merchants, editions, regions }shape.
- Fix search returning no results: migrated to the
price_history_apiendpoint, as the oldadmin-ajaxoffers endpoint had stopped returning data. - Cache the game catalog in the OS temp directory instead of inside the package, so it keeps working when installed as a read-only dependency.
- Only cache successful catalog responses (previously an error payload could be written to disk and read back as valid for a day).
- Deduplicate concurrent catalog downloads onto a single in-flight request.
- Reuse the fuzzy-search index across searches instead of rebuilding it every call.
- Behavioural test suite covering the transform, store/name filtering, currency handling and the error/empty paths.
- The build no longer emits test files into
dist.
- Upgrade all dependencies to their latest versions (TypeScript 6.0, Jest 30,
@types/node26, …). - Modernise
tsconfigfor TypeScript 6.0:moduleResolution: nodenextand an explicittypesfield (TS 6.0 no longer auto-includes@types/*). - Replace ESLint + Prettier with Biome (
npm run check).
- Remove axios dependency and use fetch instead.
- Upgrade dev dependencies.
- Improve performance and reduce memory usage when searching multiple games at once.
- Dramatic improvement in the search method. From 8 seconds to 0.2
- When using the
searchmethod and no games are found, it will return an object with success: false instead of rejecting the promise.
- Refactor the code to make it simpler and more readable. Add unit tests and actions to automate the release process.