Skip to content

v1.0.0

Choose a tag to compare

@github-actions github-actions released this 23 Oct 21:19
· 7 commits to main since this release

1.0.0 (2026-10-23)

Bug Fixes

  • actually fix problem with releasing (465fa92)
  • actually fix problem with releasing (#29) (c03af82)
  • add missing redlock dependency when building (f6207a9)
  • add patched packages to generated package.json (#365) (6eeae74)
  • bot-data: correct trade changed event (8fb68f6)
  • bot-data: fix circular type (#213) (346f192)
  • bot-data: make old state nullable (97a0c66)
  • bot-manager-data: add missing full path (ea846f2)
  • bot-manager-data: add missing interfaces (#257) (12f5f0d)
  • bot-manager-data: exchange details event type (#271) (d1e8374)
  • bot-manager-data: use correct version of bot-data (4e3437f)
  • bot-manager: add missing param to swagger docs (d5565b4)
  • bot-manager: cache bots for longer (570ded2)
  • bot-manager: correct counter offer job type (#209) (cae8f40)
  • bot-manager: delete bots (40b99f1)
  • bot-manager: disable node env webpack optimization (fdaa2e8)
  • bot-manager: don't let stale heartbeat checks or failed heartbeats drop a running bot (#836) (100b9fd)
  • bot-manager: don't retry loading inventories on http 401 status (3e40c27)
  • bot-manager: don't retry on upstream 4xx errors when performing action on offer (5e38dbb)
  • bot-manager: ensure one job per offer (#262) (990bc58)
  • bot-manager: fix dockerfile (1a4ea31)
  • bot-manager: fix lock for saving and deleting bots (#261) (18ca3c2)
  • bot-manager: fix problem with getting escrow (#719) (d4d3ddc)
  • bot-manager: fix problem with not returning promise (d17d54c)
  • bot-manager: fix problem with validating ttl for escrow (1ffbe4e)
  • bot-manager: get exchange details no matter the status (fb001d0)
  • bot-manager: handle all trade errors (454ae26)
  • bot-manager: handle race condition when acting on offers (#729) (b52be87)
  • bot-manager: increase exchange details max retry delay (c0ffba5)
  • bot-manager: inventory inconsistency (dcbd70d)
  • bot-manager: job ids can't be integers (057d23e)
  • bot-manager: lock inventories when using them (3c5c1a7)
  • bot-manager: make inventory subscribers retry on error (3e7b5c7)
  • bot-manager: mark unreachable bots stopped after the last heartbeat check (#827) (72e7997)
  • bot-manager: match existing offers without a message when deduplicating trades (#852) (62f57ea)
  • bot-manager: only find matching offers created by us (c0718ed)
  • bot-manager: properly handle missed heartbeats with cleanly stopped bot (b7c7423)
  • bot-manager: publish correct event when bot is stopped (99dd406)
  • bot-manager: refetch escrow when a cached error is retried with a token or offer (#830) (1778856)
  • bot-manager: reject escrow ttl 0 instead of caching forever (#829) (f42ef00)
  • bot-manager: remove missed heartbeat check when bot marked as stopped (ed68662)
  • bot-manager: remove traded assetids from the right inventory on exchange details (#845) (d74264f)
  • bot-manager: retry jobs on missing or unreachable bots without rethrowing (#859) (5cb5ac1)
  • bot-manager: retry trade job when failing to get bot (#204) (5d68c56)
  • bot-manager: retry trade jobs on 429 instead of failing them (#835) (4138ee2)
  • bot-manager: set steamid64 metadata in heartbeat and inventory events (3cd2f1c), closes #577
  • bot-manager: throw error when bot is inaccessible (97a7927)
  • bot-manager: treat missing inventory timestamp as a cache miss (#749) (344fac4)
  • bot: accept mobile confirmations (d22003c)
  • bot: add eresult and cause to get trade errors (4ce949b)
  • bot: add missing parenthesis (98a7411)
  • bot: add missing validation for full poll interval (9de83cf)
  • bot: add username to login key file name (fb8d57e)
  • bot: better handle trade errors (1d6a710)
  • bot: calculate backoff after getting an inventory (b5fd5e7)
  • bot: cap login retry backoff (#826) (1861d12)
  • bot: catch common escrow errors (2f1552f)
  • bot: check offer state before accepting/removing/countering (d00f88a)
  • bot: clarify error for when API key is not set (0a056dc)
  • bot: clear cache when countering and canceling/declining (ec8bc95)
  • bot: connect to gc before doing task (83cd298)
  • bot: correctly check if offer is our/their (ec8e950)
  • bot: delete the disabled file after a successful login (#844) (8bc3c1b)
  • bot: don't accept offer if not active (#203) (ba88f17)
  • bot: don't assert when updating an offer (9a44bbb)
  • bot: don't delete bot when steamid not set (44f1c20)
  • bot: don't login if already connected (#231) (810fc4e)
  • bot: don't publish confirmation for all offers (ebbdd67)
  • bot: don't remove trade that is not active (cf6c221)
  • bot: don't remove trade that is not active (#8) (7dd0ed9)
  • bot: don't require api key to be defined (#669) (4536bc6)
  • bot: don't require tradeable only query when getting inventories (22ad63e)
  • bot: don't send multiple heartbeats (45196d5)
  • bot: ensure only newest offer is cached (#741) (a52b912)
  • bot: ensure that custom game is not an empty string (e2d5e0f)
  • bot: exit process on error when starting (39ca5eb)
  • bot: expire the shared inventory slot so a stopped bot cannot hold it (7deabe0)
  • bot: fetch the live offer when refreshing a trade (#858) (e75a3be)
  • bot: fix accepting confirmations (#740) (9b98d2e)
  • bot: fix active offer metrics (aaae651)
  • bot: fix check for offers not requiring confirmation (0b8eab4)
  • bot: fix custom game (#308) (f0b6fc8)
  • bot: fix error when cleaning up polldata (7e49c38)
  • bot: fix friend relationships metric (eab4037)
  • bot: fix issues with login key (#40) (aa2efee)
  • bot: fix our/their offer check (d93bd8b)
  • bot: fix problem with checking if offer is confirmed (4a1de31)
  • bot: fix problem with corrupted assets (8ca560a)
  • bot: fix problem with loading inventories (1a9858d)
  • bot: fix problem with not removing all items when countering an offer (afaa4fa)
  • bot: fix unable to delete trades (5c00f0e)
  • bot: fix unable to delete trades (#56) (d0b4345)
  • bot: fix url for getting specific friend (70edf08)
  • bot: fix url for getting specific friend (#16) (578acf5)
  • bot: handle 4xx errors when getting inventories from Steam (657cf8a)
  • bot: handle exchange details errors (a652e51)
  • bot: handle trade already canceled/declined (61516a2)
  • bot: handle trade already canceled/declined (#6) (815271a)
  • bot: ignore 404 when deleting bot (41367f8)
  • bot: ignore error when getting login key (6210148)
  • bot: ignore null items removed by the tf2 gc (#837) (407cf9d)
  • bot: improve delete bot on shutdown (6fa6b72)
  • bot: increase max reconnect timeout (711e689)
  • bot: invalidate cache before confirming and accepting offers (718310a)
  • bot: keep the inventory backoff steps without jitter (5380cc3), closes #846 #782
  • bot: only leave tf2 when refreshing the inventory (#418) (0c2b878)
  • bot: only listen when logged in to steam (844eb19)
  • bot: only resolve friend deletion on the target's relationship event (#833) (959dbfe)
  • bot: parse boolean when getting trade (6d02033)
  • bot: pass sort type to sortBackpack (#766) (8114ac3)
  • bot: permission denied using local storage (17b0282)
  • bot: prevent accepting our own offers (9038c50)
  • bot: prune completed offers from polldata (#824) (3ff5945)
  • bot: publish confirmation event for sent offer (#276) (220dba8)
  • bot: read from correct path when getting custom persona state (d5eaa9c)
  • bot: redo logging in (#334) (9fb668c), closes #331
  • bot: reduce spam when ensuring offers published (20772ba)
  • bot: reenter custom game after entering a game (9b584ca)
  • bot: refresh session on "HTTP error 500" error message (#387) (4abdedc)
  • bot: refresh the tf2 inventory through the task queue (#851) (6dd83d3)
  • bot: refresh web session when removing trades (#385) (37f809f)
  • bot: reject trade offers to the bot itself with a 400 (#856) (43a9134)
  • bot: release pipeline failed (070fcce)
  • bot: remove histogram timer entry after request completes (#753) (bf3c545)
  • bot: reset attempts when attempting to load private inventory (e819e08)
  • bot: reset confirmation flag when accepting an offer (efab105)
  • bot: reset poll interval when reconnected (#194) (f4cc869)
  • bot: reset poll interval when reconnected (#194) (98b63c2)
  • bot: retrigger release (af439a1)
  • bot: retry login when starting (9562247)
  • bot: return 429 when rate limited when loading inventories (63916c9)
  • bot: send correct ip in heartbeat (11a13ff)
  • bot: send steam eresults as numbers (#853) (ac978ca)
  • bot: set poll interval after reconnecting (55dc673)
  • bot: shutdown on error (ebb9ad3)
  • bot: space every inventory request and back off for minutes (eb3cbf5)
  • bot: start bot without checking if manager is running (ce0c7ec)
  • bot: stop fetching item schema (9468b72)
  • bot: stop poll timer on disconnect (b6f8478)
  • bot: storage on shutdown wait in correct order (6595bdf)
  • bot: storage on shutdown wait in correct order (#34) (0252640)
  • bot: use correct paths for friend (6ddc43d)
  • bot: use correct paths for friend (#50) (1be8b82)
  • bot: use host instead of ip (#730) (37f45ae)
  • bot: use http 200 for craft response (f71f251)
  • bot: validate profile games and persona state (#857) (5d1f2a6)
  • bot: wait before opening TF2 after quit (86e0eeb)
  • bot: wait for data to be saved before stopping (dfbedae)
  • bot: wait for writes (6052715)
  • bptf-manager-data: allow 0 in currencies (00726a9)
  • bptf-manager-data: check if currency values are positive (4ac5070)
  • bptf-manager-data: missing dependencies (#379) (dd8b1ad)
  • bptf-manager-data: reject listing details longer than 200 characters (#797) (37c941c)
  • bptf-manager-data: remove external build option (2b157b2)
  • bptf-manager: add missing await (030a0e9)
  • bptf-manager: add missing paths to lib (85af108)
  • bptf-manager: add missing space to log (20f68b4)
  • bptf-manager: cap job retry backoff with the shared queue settings (#781) (96503f2)
  • bptf-manager: delay rate limited jobs instead of holding worker slots (#786) (8ad212f)
  • bptf-manager: delete active listings with the rate limited v2 batch endpoint (#778) (38c1133)
  • bptf-manager: don't re-add listings deleted while updating (#811) (d64d37c)
  • bptf-manager: don't retry agent jobs without a token (#793) (bca8dcf)
  • bptf-manager: don't undo re-registering an agent while it unregisters (#816) (b19ffa6)
  • bptf-manager: exit early when removing desired listings but no match (cb46d58)
  • bptf-manager: fix drain delay error (29fd01d)
  • bptf-manager: fix listing sync bugs in create, update and delete queues (#773) (e59acd5)
  • bptf-manager: fix problem with updating desired listings (#326) (a497e2b)
  • bptf-manager: fix rate limiting (0bd6d84), closes #403
  • bptf-manager: fix various problems (#519) (53ba740)
  • bptf-manager: follow the rate limit backpack.tf returns on 429 (#785) (0e65464)
  • bptf-manager: force listing to be created if quantity changed (4927304)
  • bptf-manager: give each notification refresh its own temp key (#791) (c4452f4)
  • bptf-manager: incorrect log (1e82330)
  • bptf-manager: increase lock duration for desired listings (43bbf21)
  • bptf-manager: keep current listings when the refresh temp key expired (#780) (688fd98)
  • bptf-manager: keep listing changes made during refreshes (#779) (fd47f4a)
  • bptf-manager: only attempt to update listings with id (c0b563a)
  • bptf-manager: only clear limiters when their settings change (#783) (37ec8f3)
  • bptf-manager: only create job if listings changed (45238a7)
  • bptf-manager: only lock desired listings being added/updated/removed (#400) (e166c32)
  • bptf-manager: only queue jobs if nessesary (148754b)
  • bptf-manager: overwrite updated listings (50eb3e1)
  • bptf-manager: recreate rate limiters whose key expired (#804) (fb95b2d)
  • bptf-manager: remove removed desired listings from the update queue (#784) (cf46be6)
  • bptf-manager: stop and finish inventory refreshes under the lock (#812) (4fd8a88)
  • bptf-manager: stop retrying notification client errors and free the parent (b5eb3bc), closes #781
  • bptf-manager: stop waiting for listing limits refreshes (#788) (07e4c08)
  • bptf-manager: validate listing currencies (8e6fb9f)
  • broken release (#731) (a8609bb)
  • build: copy the pnpm-workspace.yaml into container (#739) (ab42ac4), closes #733
  • check if assetid and contextid is greater than 0 when sending offers (e86a306)
  • ci: fix problem with releasing affected projects (abf3c02)
  • ci: update qemu emulator to fix crashing runner (#754) (c334e00)
  • common-data: add missing keys to package.json (#710) (a2a5a57)
  • completely remove @types/steamid from all dependencies (6b49069)
  • config: fix problem with getting env var (28edf29)
  • config: parse boolean env values case-insensitively (#828) (00f676a)
  • config: require rabbitmq env vars when missing events type env var (b13fd95)
  • config: use correct type when getting env var (a7b083b)
  • config: use name from package.json (5b7c26e)
  • correct econ item types (eb47c39)
  • correct error status check for idempotency interceptor (#615) (4296653)
  • correct redis key prefixes (#421) (8af1363)
  • correct various redis keys (5310f30)
  • docker: use --prefer-offline for prod install (#774) (0611c9e)
  • don't attempt to release an already expired lock (496a7a8)
  • don't attempt to release an already expired lock (c296c26)
  • escrow: return offer on partner steamid match validation (#738) (45056f3)
  • events: allow subscribing to defined exchanges (#419) (141fc59)
  • events: clear identifier when no longer subscribed (#712) (e438171)
  • events: don't publish null data (#708) (e285d38)
  • export event types (6a9c171)
  • fix missing dependencies for libs (448a1ce)
  • fix problem with -1 ttl (#640) (6fcf690), closes #637
  • fix problem with releasing (d85b184)
  • fix problem with releasing (#28) (f17de66)
  • handle private inventories (86c75c5)
  • improve heartbeat error messages (b048bdf)
  • incorrect and inconsistent offer event types (#269) (e5de2df)
  • InventoryFailedEvent type (#239) (e1afe23)
  • is-refined-validator: use tf2-currencies for formatting (0b8e40a)
  • item-service: don't retry gained items event (7be46bf)
  • item-service: fix swagger docs for spell api (01456ac)
  • item-service: merge all prefabs of items with multiple prefabs (#806) (73e6b92)
  • item-service: only store one copy of schema files (89546df)
  • item-service: only update schema if newer than current (a13b5b3)
  • item-service: properly return spell when using id as defindex (e421f10)
  • item-service: return assetid when parsing fails (#699) (890372c)
  • item-service: return first instance of effect (ed51481)
  • item-service: spells were not being parsed by the tf2 parser (1968591)
  • item-service: use case insensitive keys for storing and fetching schema values (1c5866e)
  • locking: lock duplicate resources only once (#776) (17181c4)
  • make libraries buildable (0e8989a)
  • make libraries buildable (#30) (af08b18)
  • message-relay: fix logging time ago event was made (973859d)
  • message-relay: publish events in correct order (afddc09)
  • nestjs-events: fix problem with not cleaning up properly (ffacf2c)
  • nestjs: don't cache 5xx responses for idempotency keys (#838) (20e51bc)
  • notification: rename clearNotification method to clearNotifications (34b3ab0)
  • plural event prefix (323dc31)
  • plural event prefix (#33) (61defc2)
  • properly override steamid dependencies (d64040c)
  • properly type offers with items and assets (#410) (8ab84db)
  • queue: add the job again when it is removed while being updated (#800) (9fdb610)
  • queue: always run the job failed hook (#751) (52ff0a9)
  • queue: handle errors properly when processing queue jobs (8a66107)
  • queue: handle jobs leaving the delayed state while being re-added (#770) (a92c905)
  • queue: increase default max delay (#713) (2ca32ec)
  • queue: page jobs correctly across job states (#810) (ac1f314)
  • queue: retry job on 429 (952e055)
  • queue: return http status 504 when waiting for job to finish (4cd9b8b)
  • queue: run the error handling for a processJob that throws synchronously (2ec9cbe)
  • queue: update the data of existing jobs that are not running (#772) (806ca20)
  • remove all listeners when stopping bot (feda5b0)
  • retrigger release (8b14b80)
  • saving desired when planning listings (#329) (421f068)
  • scripts: run pnpm through a shell on windows (#767) (4b03d0e)
  • tf2-format: align recipe inputs and outputs between the tf2 parsers (#823) (2d9cd29)
  • tf2-format: check if attribute is a number before adding it to the sku (#671) (d7cc487)
  • tf2-format: do not modify econ item descriptions when parsing (#794) (3578cae)
  • tf2-format: fall back to full input name when stripped name is cached as an error (#801) (6f135d8)
  • tf2-format: fall back to full input name when stripped name is not found (#792) (8df611e)
  • tf2-format: fix normalize array reference (#705) (a0ac96f)
  • tf2-format: fix problem parsing items that target C.A.P.P.E.R (428f41e)
  • tf2-format: fix problem with parsing normal quality econ items (705891c)
  • tf2-format: fix problem with parsing spelled unusuals (#617) (5a29f48), closes #616
  • tf2-format: give paint cans their paint in the gc parser (#814) (fb7b795)
  • tf2-format: handle edge case with applied war paints on strange items (#622) (b90911c), closes #619
  • tf2-format: handle edge case with generating name of items with attribute 0 (#635) (c5d3ac1), closes #620
  • tf2-format: handle edge case with skins (#621) (e43d971), closes #618
  • tf2-format: make free contract rewards untradable (#813) (4758d8b)
  • tf2-format: match tf2 craftable and tradable checks for self-made and temporary items (#803) (724d6c2)
  • tf2-format: match tf2 craftable and tradable rules in the gc parser (#815) (c30dd36)
  • tf2-format: name unusuals with a null effect (#790) (b62ee09)
  • tf2-format: only handle ambiguities with skins (#686) (ea75e71)
  • tf2-format: only use effect and wear/texture when canonicalizing (f108240)
  • tf2-format: parse item quantities/uses (cdb5586)
  • tf2-format: parse SKU with only a defindex (#789) (076c3d7)
  • tf2-format: read the paintkit of war paints from the definition (#808) (9ef30f3)
  • tf2-format: read what TF2 keeps on the definition in the gc parser (9f2c3c0)
  • tf2-format: require can_craft_if_purchased for purchased items to be craftable (#807) (802c933)
  • tf2-format: return null inputs for backpack.tf items without inputs (#834) (927e573)
  • tf2-format: sort binary arrays bytewise (#787) (96d2ace)
  • tf2-format: stop reading econ inputs at the end of descriptions (#795) (9d0f918)
  • tf2-format: throw on unknown econ exteriors (#796) (46e4e65)
  • tf2-service: return 503 when tf2 backpack is not loaded (d86c612)
  • trades.exchange-details -> trades.exchange_details for consistency (ad4605a)
  • update dependencies (3ae8f1e)
  • update dependencies (#283) (0c988af)
  • use correct file option for container executor (1fb776c)
  • use correct id when getting jobs (#717) (4dba41d)
  • use correct paths (de5af48)
  • use correct paths (#31) (18ca9c2)
  • validate config before using it in nestjs storage module (ec8a8b9)
  • validate optional environment variable (04277ca)

Build System

  • add node engines to published packages (#748) (decd8d1)

Code Refactoring

  • bot-manager: renamed inventory property in inventory response (8acd645)
  • bot: centralize file path management (2f9162b)
  • nestjs-events: remove redis (17bc531)
  • tf2-format: don't reuse schema item method names (c6b3edc)
  • tf2-format: rename amount to quantity for better consistency (73ba2c7)

Features

  • add bot-data (8629d53)
  • add bptf-manager application (#278) (02e37bc)
  • add custom user agent to all apps (80db41e)
  • add full path constants for data libs (#309) (b1429e5)
  • add health checks (566f522)
  • add inventories controller (331788d)
  • add is-steamid-validator (7a0d18d)
  • add locking config options (f79f5d1)
  • add login timeout (98759e8)
  • add option to get non-tradable items when loading inventory (#264) (2514bf2), closes #263
  • add options to configure lock duration (bda027f)
  • add prometheus (fbbd111)
  • add support for redis sentinels (27595f1), closes #452
  • add swagger (76c4600)
  • add tf2 api parser (#682) (170875f)
  • add tf2 controller (7f0c8a8)
  • add tf2 module (7e07421)
  • add timeout when waiting for web session (0838e93)
  • add user agent to all events (7200b2a)
  • atomic file writes (670efd2)
  • bot-manager: add configurable redis key prefix (aec1fac)
  • bot-manager: add escrow job queue (f8201c4)
  • bot-manager: add health checks (9c340a3)
  • bot-manager: add heartbeat logging (71f5063)
  • bot-manager: add method to fetch inventories (366fcfb)
  • bot-manager: add methods to better manage inventory and trade queues (d24a29b), closes #605
  • bot-manager: add partial item to inventory on tf2 event (426630a), closes #284
  • bot-manager: add reason to inventory change event (#272) (9a7cbf5)
  • bot-manager: add received items to inventories (3bd2030)
  • bot-manager: add redis health check (4bf0e25)
  • bot-manager: add redis health check (57cd95b)
  • bot-manager: add refresh trade job type (692244c), closes #350
  • bot-manager: add swagger to methods (67c448c)
  • bot-manager: add tradable only option to fetch inventory method (9fd21f3)
  • bot-manager: add tradableOnly query to fetch and get inventory methods (ad08949)
  • bot-manager: add ttl query to inventory fetch method (68a2a2d)
  • bot-manager: always look for active matching offer when creating offers (47bbe16)
  • bot-manager: cache escrow error response (85c8730)
  • bot-manager: cache inventories (b420db5)
  • bot-manager: cache inventory error response (d29d27a)
  • bot-manager: configure escrow ttl (4f50698)
  • bot-manager: configure leader timeouts (#394) (b21835a)
  • bot-manager: cycle bots loading inventory based on attempts made (551205e)
  • bot-manager: delete bot if no heartbeat is made (#252) (f732ec4), closes #240
  • bot-manager: delete bots (85f8f2a)
  • bot-manager: delete inventory from cache (65bf9e7)
  • bot-manager: disable inventory cache ttl (#238) (5a15858)
  • bot-manager: do check before performing trade action (48538aa)
  • bot-manager: get all bots (dd53865)
  • bot-manager: get and cache escrow (032d1c8)
  • bot-manager: get and publish exchange details (7abcab6)
  • bot-manager: get escrow using specific bot (1c866d7)
  • bot-manager: get inventory (5ac6dcd)
  • bot-manager: get inventory using specific bot (64c1e88)
  • bot-manager: handle trade rollbacks (#265) (e2e8744)
  • bot-manager: inventory queue (#214) (dcce254)
  • bot-manager: keep track of assets in active offers (3518a46)
  • bot-manager: let inventory jobs outlast a bot backoff (9fe7cf7)
  • bot-manager: log missed heartbeats (1a308be)
  • bot-manager: look for matching offers when countering and create one if no matches (81ac060)
  • bot-manager: mark bots as not running instead of deleting them (5c84cd1)
  • bot-manager: optional token when countering offers (1fb887c)
  • bot-manager: publish event when job encounters error (#229) (b50df24)
  • bot-manager: publish heartbeat events (#249) (7eed754)
  • bot-manager: publish inventory loaded event (7a86be0)
  • bot-manager: publish message when inventory changes (b715a8c)
  • bot-manager: publish trade completed event (6271c26), closes #718
  • bot-manager: refetch escrow if dto is different than cached (701e81b)
  • bot-manager: remove items from cached inventories (e84b96a), closes #82
  • bot-manager: return ttl when getting cached inventories (3b1ffa0)
  • bot-manager: set inventory cache ttl (#237) (010b253), closes #236
  • bot-manager: support redis and rabbitmq events (3fb5b8a)
  • bot-manager: trade queue (#164) (dab0d6c)
  • bot-manager: use idempotency token when creating offers (e26f380), closes #530
  • bot: add active offers metric (bfd9480)
  • bot: add asset cache size metric (8bd3fa8)
  • bot: add error handling to tf2 tasks (#1) (ff84a9b)
  • bot: add event for when the tf2 schema updates (#417) (f1cdf3b)
  • bot: add friend message and typing events (4667bdc)
  • bot: add friend relationship event (1b7d912)
  • bot: add friend relationship metrics (09dcd4f)
  • bot: add friends controller (5d1bd91)
  • bot: add full poll interval option (2f2b1c1)
  • bot: add idempotency checks (62c4b5f), closes #530
  • bot: add inventory rate limit settings merge and backoff helpers (b0ad481)
  • bot: add items game url to schema events (9af7ba9)
  • bot: add method for getting specific trade (ea5ed33)
  • bot: add method for getting trades (aca410f)
  • bot: add method to accept trades (4a395dc), closes #22
  • bot: add method to accept trades (#25) (8035a73), closes #22
  • bot: add method to confirm trades (ff352bf)
  • bot: add method to get backpack items (503f0aa)
  • bot: add method to get steamid64 of bot (e3b6324)
  • bot: add method to remove trades (172e21a)
  • bot: add method to send offers (09a4c89)
  • bot: add method to sort backpack (049a861)
  • bot: add method to sort backpack (#3) (46b0aa8)
  • bot: add methods to block user (72a7588)
  • bot: add methods to block user (#36) (59ce331)
  • bot: add methods to check an offer (ab1ee6b)
  • bot: add methods to send friend messages (33bda35)
  • bot: add methods to send friend messages (#15) (974facd)
  • bot: add more trade methods (#27) (254b1b5)
  • bot: add notification support and clearing endpoint (8ecf147)
  • bot: add offer events (68f04b6)
  • bot: add optional Redis and inventory rate limit config (ea447cf)
  • bot: add polldata size metric (28fb50e)
  • bot: add profile controller (21cf8f0)
  • bot: add profile controller (#13) (0b81f8d)
  • bot: add proxy support (577a3fc)
  • bot: add proxy support (#38) (05b4591)
  • bot: add query string option to get trade offers from cache (3818fdd)
  • bot: add RabbitMQ publisher (c36e282)
  • bot: add RabbitMQ publisher (#21) (2017423)
  • bot: add rate limiting and backoff to inventory loading (dafccff)
  • bot: add reason to health checks (0133370), closes #349
  • bot: add request summary metric (02bdfd8)
  • bot: add s3 storage engine (4ff247d)
  • bot: add s3 storage engine (#37) (5f49c24)
  • bot: add sent and received offer count metrics (42f3487)
  • bot: add steamid64 label to all metrics (ee720bd)
  • bot: add steamid64 label to all metrics (#59) (e2d17e2)
  • bot: add swagger for various methods (e762c24)
  • bot: add tf2 item events (eb026cb)
  • bot: add trade protection acknowledgment (b72c66d)
  • bot: add trade refresh api (782a2a2)
  • bot: add trade timing options (b7fdab7)
  • bot: add trade timing options (#46) (741729f)
  • bot: add trades controller (#4) (6de065e)
  • bot: add type to events (5e79cb1)
  • bot: add username and accountName to Bot interface and service (e461d34)
  • bot: add web session check (#384) (e8249fe)
  • bot: add websession api (#359) (b8ba153), closes #356
  • bot: become online when logged in to steam (6acd401)
  • bot: become online when logged in to steam (#43) (6a6a00c)
  • bot: better handle rate limiting on login (2d6029c)
  • bot: check if bot-manager is running before starting (61d3153)
  • bot: check if item is in backpack before running task (0898b05)
  • bot: configure heartbeat interval (#245) (9ce2231)
  • bot: confirmation needed event (#251) (de08223), closes #250
  • bot: connect to the GC when the backpack is asked for without a session (ff5fe77), closes #851
  • bot: control what appids the bot is playing (c738b09)
  • bot: deduplicate writes (3274151)
  • bot: delete tf2 items (f23f57b)
  • bot: disable on fatal error (#335) (3bb814c)
  • bot: enable/disable bot-manager (6728f75)
  • bot: enable/disable tf2 module (#720) (0fe6c90), closes #678
  • bot: exponential backoff when failing to send heartbeat (9e8895c)
  • bot: get and change trade offer url (812d9c3)
  • bot: get API key (#235) (d982556), closes #234
  • bot: get escrow duration (8db3c3a)
  • bot: get offers from cache if recent (253f711)
  • bot: get received items (7f5fb0c)
  • bot: get trade exchange details (94bf1d6)
  • bot: improve offer and confirmation publishing (f8749f3)
  • bot: improve offer logging (f3a1dc7)
  • bot: improve offer logging (#41) (5729cbf)
  • bot: intercept get offer result (1e77123)
  • bot: let services delay their Steam community requests (bf93cd9)
  • bot: log startup errors (f2aba2d)
  • bot: log web session (0e935de)
  • bot: manually set Steam API key (3454f53)
  • bot: option to disable polling (15e8d47)
  • bot: play custom game (#307) (c6094b0)
  • bot: poll trades after confirming trade (336f692)
  • bot: poll trades after confirming trade (#11) (c328ac4)
  • bot: publish account limitations (#360) (09922f6), closes #332
  • bot: publish data together with metadata (50fa6f3)
  • bot: publish events to redis or rabbitmq (8bff63b)
  • bot: publish sent trades (18acbec)
  • bot: queue tf2 tasks (f41a897)
  • bot: queue writes (2879f16)
  • bot: rate limit ensure trades published (#174) (c4cc9ae)
  • bot: reconnect gracefully to Steam (#39) (a423ca6)
  • bot: reconnect to Steam (c4c5416)
  • bot: reconnect to tf2 gc when gained / lost items (499e127)
  • bot: reconnect to tf2 gc when gained / lost items (#42) (bef1394)
  • bot: refresh session on health checks (4bd6a49)
  • bot: remove old completed trades from polldata after some time (53917c6)
  • bot: return offer after accepting confirmation (3a0a673)
  • bot: send heartbeats (a1476a5)
  • bot: send heartbeats (#53) (cd889e1)
  • bot: set custom persona state (63b0f6e), closes #411
  • bot: set default game to play using env var (8e6dc6c)
  • bot: share the Steam inventory rate limit across bots through Redis (a36fcad)
  • bot: steam connected and disconnected events (bfc0618)
  • bot: stop heartbeats when disconnected from Steam (#195) (23f2a14)
  • bot: stop heartbeats when disconnected from Steam (#195) (b73a101)
  • bot: use cache when accepting/declining/confirming offers (35b8eea)
  • bot: use checks before performing action on trade (8f1580e)
  • bot: use dataloader when getting offers (1121074)
  • bot: use tf2 items (cfdb7f9)
  • bot: use tokens to log in to Steam (cf7b807)
  • bptf-manager: add lock to api calls (f0d23c0)
  • bptf-manager: add PUT desired endpoint to replace all desired listings (#775) (5ff4de6)
  • bptf-manager: check listings when they are changed (37a8192)
  • bptf-manager: concurrency (c7cf501)
  • bptf-manager: configurable per-token rate limits for backpack.tf requests (#799) (e4629a1)
  • bptf-manager: get notifications (#292) (5a10e87)
  • bptf-manager: increase max payload size (#281) (b56d598)
  • bptf-manager: simpler logs with the account in the log context (#805) (b4e7349)
  • bptf-manager: update listing if desired does not match current (8e92b38)
  • bptf-manager: use batch patch api (1ae2e1d)
  • create bot-manager (#48) (cc92de5)
  • create bot-manager app (8c23a03)
  • create nestjs-steamid-pipe library (1c2514a)
  • default to use RabbitMQ for events (af56af6)
  • don't share transactional outbox between services (f395b0a)
  • ensure offer events are published (6ee9f54)
  • escrow: get escrow days from the WebAPI with an HTML fallback (086b6fc)
  • escrow: support querying escrow duration by offerId (#732) (2fd9e06)
  • events: add circuit breaker to subscribers (#422) (22f2d1b)
  • filter tf2 events (96b2ffb)
  • improve startup error handling (dae083e)
  • initial commit (298fc8b)
  • item-service: add delay option for inventory loading (d47e825)
  • item-service: add endpoint to get strange parts by id or name (83a04a6)
  • item-service: add item service (#426) (5755093)
  • item-service: add method to delete schemas (be124e6)
  • item-service: add methods for managing prices (#676) (59fd2ef)
  • item-service: add optional time query to select schema (406239a)
  • item-service: add query option to select items from items_game.txt (a7eafd4)
  • item-service: add spell api methods (1f5f3b5)
  • item-service: add strange part name to response (521c92f)
  • item-service: check if schema is consistent (4ea12b9)
  • item-service: differentiate checked and updated time for schemas (d9c24f5)
  • item-service: fetch an inventory as items with all attributes (054a179)
  • item-service: force check and force update schema (a840c3e)
  • item-service: get items_game.txt (39809d5)
  • item-service: get paint by hex color code (fcf307c)
  • item-service: get schema items paginated (a559bbe)
  • item-service: get schema metadata (844bfc1)
  • item-service: keep track of all saved schemas (dcc4f8a)
  • item-service: load, parse and cache TF2 inventories (0e27a8f)
  • item-service: merge items and perfabs before saving (6f48018)
  • item-service: publish event when schema is updated (84a9855)
  • item-service: redirect the request to download schema overview and items_game.txt (476e253)
  • item-service: return a url to download schema overview and items_game.txt (dcf6966)
  • item-service: search for prices by base64 encoded item object (#687) (bca5641)
  • item-service: store schema files by time (7a6c04d)
  • item-service: store schema overview (dd7c190)
  • item-service: use binary format for storing inventory items (348ba40)
  • item-service: use item object instead of sku for pricelist (cc59aee)
  • keep alive timeout settings (0f8d159)
  • keep track of heartbeat interval (#246) (4926bf0)
  • log in to Steam (066edfd)
  • move message relay into bot-manager (9c96f1f)
  • nestjs-events: add broadcast support (23631ef)
  • nestjs-events: use managed channels for most things (4b10b69)
  • nestjs-storage: add prefix based on app name (1206ca3)
  • nestjs-storage: support deleting files (9b7b883)
  • only login when not already (c62fac3)
  • otel: add optional OpenTelemetry integration (20804d2), closes #805
  • otel: replace Prometheus metrics with OpenTelemetry (9886879)
  • persist steam-user data (efe6f4c)
  • persist trade data (a8a7f52)
  • properly handle spells (#681) (27023d6)
  • publish validators (#378) (ef53864)
  • queue: add configurable jitter to retry backoff (#782) (cd4225c)
  • queue: better error handling when waiting for job to finish (1cecfe3)
  • queue: run jobs in their own cls context with a ClsWorkerHost (#809) (8b12ce5)
  • refresh web session when expired (f23bbfe)
  • reset item notifications on new items (db924d6)
  • send bot version to manager (5247a1d)
  • send counter offers (#207) (4262bc7)
  • start bot when everything else has started (2484dec)
  • storage: add method to check if file exists (35690c1)
  • storage: make read and write concurrency configurable (#769) (d8c473a)
  • tf2-format: add binary format (#683) (1fd76eb)
  • tf2-format: add bptf listing item parser (4a03e70)
  • tf2-format: add bptf listing item parser (#680) (8cf0e78)
  • tf2-format: add support for paint, sheen and killstreaker for SKU parser (463651a)
  • tf2-format: add tf2-format library (#476) (1490925)
  • tf2-format: check if item has attribute (38a6a57)
  • tf2-format: generate name of items (2e07055)
  • tf2-format: get default item attributes (cf40cf3)
  • use transactional outbox (#248) (059caf4)
  • wait for API key before starting bot (fc73162)

Performance Improvements

  • bot: cache offers internally (c3dc61b)
  • bot: cache storage read calls (1b93b60)
  • bot: cache storage read calls (#10) (e5c5a27)
  • bptf-manager: don't lock listings (7a5fffa)
  • bptf-manager: remove lock from refreshing listings (783ed70)
  • bptf-manager: reuse mapped listings (ce02a1f)
  • item-service: store all spells in the same location (4cae267)
  • replace json data encoding and decoding with message pack (#423) (7328e41)
  • tf2-format: avoid copying attribute buffers in the tf2 gc parser (#832) (0de042e)
  • tf2-format: check for a parenthesis before the craftable lookup (#847) (91ab2e8)
  • tf2-format: encode binary array elements once when sorting (#822) (6ef0488)
  • tf2-format: encode binary items in one pass without copying (#849) (6cf30eb)
  • tf2-format: look up binary field names in an array (#850) (02d07dc)
  • tf2-format: parse econ wiki defindex with regex and skip empty async lookups (#818) (1da9e9d)
  • tf2-format: read tradable after date in the tf2 gc attribute loop (#841) (6360b8a)
  • tf2-format: reuse one buffer for tf2 api attribute values (#848) (4d32f58)
  • tf2-format: skip attribute parsing for skus without attributes (#819) (8e786e0)
  • tf2-format: skip empty lookups when parsing backpack.tf items (#831) (48bb021)
  • tf2-format: switch binary format from cbor to cbor-x (#821) (b5d87f3)

Reverts

  • accidentally committed pending work (afe32fa)
  • Revert "fix: don't attempt to release an already expired lock" (59a8e2d)
  • revert 734 (#735) (ae0f0cd)

BREAKING CHANGES

  • published packages now declare node 24 in engines
  • item-service: Existing schemas are no longer compatible
  • Renamed TF2GC parser and changed how strange parts are
    stored by item-service.
  • Spells are handled differently by item-service and
    tf2-format.
  • tf2-format: Renames getItemByDefindex into getSchemaItemByDefindex and
    getItemsGameItemByDefindex.
  • tf2-format: Rename amount to quantity.
  • bot-manager: New bot-manager API methods for checking escrow.
  • bot-manager: New API method for adding/removing job to/from the inventory queue.
  • bot: Organize bot files into shared and account specific directories
  • nestjs-storage: File paths have changed
  • nestjs-events: Dropped support for Redis events
  • bot-manager: Renamed inventory items property in inventory responses from inventory to
    items.
  • All existing data stored in redis has to be removed to
    ensure that no unexpected errors will happen when decoding
  • Because the keys have changed all existing data in
    redis will no longer be used
  • Removed the message-relay application as it is no longer needed
  • bot: New environment variables for choosing how to publish events
  • bot-manager: Inventory items can be partial and only consist of an appid, contextid and assetid
  • bot-manager: Renamed RabbitMQ queue
    "bot-manager.add-inventory-items" to
    "bot-manager.update-inventory-items"
  • bot-manager: HTTP status code 409 if a job already exists for a specific trade offer
  • Some events require the new message-relay application
    to run in order to be
    published
  • bot-manager: In order to load an inventory, you need to add it to
    the queue and wait for it to
    be fetched.