You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Copy file name to clipboardExpand all lines: API_COVERAGE.md
+11-11Lines changed: 11 additions & 11 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -103,24 +103,24 @@ These routes were confirmed live during the 2026-03-07 recon sweep:
103
103
|`/listings?limit=5&min_ref_qty=20&type=buy_now&min_price=500`|`GET`| implemented | browser UI + live | current homepage-highlight feed shape; exposed via `listings.getListings(getHomepageFeedParams("top_deals"))` and `workflows.getPublicMarketFeeds()`|
104
104
|`/listings?limit=5&sort_by=most_recent&min_ref_qty=20&type=buy_now&min_price=500`|`GET`| implemented | browser UI + live | current homepage `Newest Items` feed shape; exposed via `listings.getListings(getHomepageFeedParams("newest"))` and `workflows.getPublicMarketFeeds()`|
105
105
|`/listings?limit=5&sort_by=most_recent&filter=unique&min_ref_qty=20&type=buy_now&min_price=500`|`GET`| implemented | browser UI + live | current homepage `Unique Items` feed shape; exposed via `listings.getListings(getHomepageFeedParams("unique"))` and `workflows.getPublicMarketFeeds()`|
106
-
|`/listings?filter=sticker_combos`|`GET`|discovered| live + browser UI + auth API | UI label `Sticker Combos`; requires auth; current live probes return sticker-heavy rows|
107
-
|`/listings?filter=unique`|`GET`|discovered| live + browser UI + auth API | UI label `Unique Items`; requires auth|
106
+
|`/listings?filter=sticker_combos`|`GET`|implemented| live + browser UI + auth API | UI label `Sticker Combos`; requires auth; current SDK exposes this through the typed `filter` param on `listings.getListings()`|
107
+
|`/listings?filter=unique`|`GET`|implemented| live + browser UI + auth API | UI label `Unique Items`; current SDK exposes this through the typed `filter` param on `listings.getListings()`|
108
108
|`/listings/{auction_id}/bids`|`GET`| implemented | live | returns bid array for auction listings; empty array when no bids |
109
109
|`/buy-orders/item`|`GET`| implemented | browser bundle + live | inspect-link oriented route using query params `{ url:<inspectLink>, limit }`; live happy-path returned an array like `[{ expression, qty, price }]`|
110
110
|`/buy-orders/matching-items/floatdb`|`POST`| discovered | browser bundle + live invalid probe | route exists but currently demands float-expression semantics; plain `market_hash_name` returned `condition and rules are required for an expression`|
111
-
|`/trades/{id}/cannot-deliver`|`POST`|discovered| browser bundle + live invalid probe |invalid `id=0` returned `500 record not found`; likely seller-side failure path, not executed happy-path due risk|
112
-
|`/trades/{id}/dispute`|`POST`|discovered| browser bundle + live invalid probe |invalid `id=0` returned `500 record not found`; not exercised on a real trade|
113
-
|`/trades/{id}/received`|`POST`|discovered| browser bundle + live | real pending buyer-side trade returned `400 missing steam offer ID`; route and state gating are clear, but no successful live sample yet|
111
+
|`/trades/{id}/cannot-deliver`|`POST`|implemented| browser bundle + live invalid probe |frontend-confirmed no-body payload; SDK exposes `account.cannotDeliverTrade()` as a low-level, seller-side failure helper|
112
+
|`/trades/{id}/dispute`|`POST`|implemented| browser bundle + live invalid probe |frontend-confirmed no-body payload; SDK exposes `account.disputeTrade()` conservatively as a low-level dispute helper|
113
+
|`/trades/{id}/received`|`POST`|implemented| browser bundle + live |frontend-confirmed no-body payload; real pending buyer-side trade returned `400 missing steam offer ID`, so the SDK keeps `account.markTradeReceived()` intentionally low-level and state-gated|
114
114
|`/trades/bulk/received`|`POST`| implemented | browser bundle + live | bundle-confirmed buyer flow using `{ trade_ids }`; invalid `trade_ids:["0"]` returned `400 invalid trade ids specified`, and a real pending buyer-side trade returned `400 missing steam offer ID` until a Steam offer exists |
115
-
|`/trades/{id}/rollback`|`POST`|discovered| browser bundle + live invalid probe |invalid `id=0` returned `500 record not found`; semantics still unmapped|
116
-
|`/trades/{id}/manual-verification`|`POST`|discovered| browser bundle + live invalid probe |invalid `id=0` returned `500 record not found`; semantics still unmapped|
117
-
|`/trades/{id}/rollback-verify`|`POST`|discovered| browser bundle + live invalid probe |invalid `id=0` returned `500 record not found`; semantics still unmapped|
115
+
|`/trades/{id}/rollback`|`POST`|implemented| browser bundle + live invalid probe |frontend-confirmed no-body payload; SDK exposes `account.rollbackTrade()` conservatively because the happy-path remains trade-state-specific|
116
+
|`/trades/{id}/manual-verification`|`POST`|implemented| browser bundle + live invalid probe |frontend-confirmed no-body payload; SDK exposes `account.manualVerifyTrade()` as a low-level helper|
117
+
|`/trades/{id}/rollback-verify`|`POST`|implemented| browser bundle + live invalid probe |frontend-confirmed no-body payload; SDK exposes `account.verifyTradeRollback()` as a low-level helper|
118
118
|`/trades/{id}/report-error`|`POST`| discovered | browser bundle + live invalid probe | invalid `id=0` returned `500 record not found`; likely support/reporting path |
119
119
|`/trades/notary`|`POST`| discovered | browser bundle + live invalid probe | empty payload returned `400 payload is required`; exact contract still unmapped |
120
-
|`/me/verify-sms`|`POST`| discovered | live + public wrapper source | invalid phone number returned Twilio validation error |
121
-
|`/trades/steam-status/new-offer`|`POST`| implemented | live + public wrapper source | low-level Steam sync route keyed by string-form `{ offer_id }`; safe live probes returned `200 {"message":"successfully updated offer state"}` even for `"0"`, but business side effects remain partially unmapped |
120
+
|`/me/verify-email`|`POST`| implemented | browser bundle + live invalid probe | invalid `email=not-an-email` returned `400 invalid email format`; SDK exposes `account.verifyEmail()` as a low-level request/confirm helper |
121
+
|`/me/verify-sms`|`POST`| implemented | browser bundle + live invalid probe | invalid `phone_number=abc` returned `400 twilio: Invalid phone number: abc`; SDK exposes `account.verifySms()` as a low-level request/confirm helper |
122
+
|`/trades/steam-status/new-offer`|`POST`| implemented | live + browser bundle | low-level Steam sync route keyed by `{ offer_id }`, with the current frontend also sending optional `{ given_asset_ids, received_asset_ids }`; safe live probes returned `200 {"message":"successfully updated offer state"}` even for `"0"`|
122
123
|`/trades/steam-status/offer`|`POST`| implemented | live + public wrapper source | low-level Steam sync route accepting `{ sent_offers }` and optional `{ trade_id }`; safe live probes returned `200 {"message":"successfully updated offer state"}`, while empty-array syncs produced no observed trade-state change |
123
-
|`/me` with `trade_url` PATCH field |`PATCH`| discovered | live + public wrapper source | invalid payload returned `missing partner id or token in trade url`, confirming field-level validation for `trade_url`|
124
124
## Likely Stale Or Wrapper-Only Routes
125
125
126
126
These routes appeared in public wrappers, but live probing on 2026-03-07 did not confirm them:
Copy file name to clipboardExpand all lines: CHANGELOG.md
+18Lines changed: 18 additions & 0 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -6,6 +6,24 @@ The format is based on Keep a Changelog.
6
6
7
7
## [Unreleased]
8
8
9
+
## [0.9.4] - 2026-03-11
10
+
11
+
### Added
12
+
13
+
1. low-level trade lifecycle helpers for the browser-confirmed single-trade routes: `account.cannotDeliverTrade()`, `account.disputeTrade()`, `account.markTradeReceived()`, `account.rollbackTrade()`, `account.manualVerifyTrade()`, and `account.verifyTradeRollback()`
14
+
2. low-level account verification helpers `account.verifyEmail()` and `account.verifySms()` based on current frontend payload shapes plus live invalid-payload validation
15
+
3. a public Vercel-ready docs site under `website/`, including the synced repository Markdown hub, search, sitemap, robots, and the refined dark-gold documentation shell
16
+
17
+
### Changed
18
+
19
+
1. widened `CsfloatTradeSteamStatusNewOfferRequest` and `account.syncSteamNewOffer()` to support the current frontend's optional `given_asset_ids` / `received_asset_ids` annotation payload
20
+
2. reconciled stale coverage rows so `filter=sticker_combos`, `filter=unique`, and `PATCH /me` with `trade_url` are no longer left as discovered-only when the SDK already supports them
21
+
3. promoted the browser-confirmed low-level trade lifecycle routes from discovered-only to implemented while keeping their docs explicitly conservative and state-gated
22
+
4. widened response typing again after a slow live shape-audit pass: notifications now expose `latest_notification_id`, inspect-linked buy-order lookups can surface `market_hash_name`, and listing/trade keychain payloads can carry `highlight_reel`
23
+
5. strengthened `audit:shapes` with slower default pacing, explicit skip support for state-driven routes, token-helper coverage, and better inspect-link selection for `buy-orders/item` / checker probes
24
+
6. expanded the package docs and docs-site content so the runtime surface, write payloads, stability notes, and low-level account/trade helpers stay synchronized in one source of truth
25
+
7. refined the docs-site UI with a calmer landing page, better sidebar collapse behavior, custom scrollbar styling, and a wide-screen max-width cap for large displays
Copy file name to clipboardExpand all lines: README.md
+11-4Lines changed: 11 additions & 4 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -19,7 +19,7 @@ The project is intentionally conservative about claims. Anything called `impleme
19
19
20
20
> The goal is simple: be the SDK you reach for first if you want serious CSFloat automation instead of a thin wrapper.
21
21
>
22
-
> Install from npm: [`csfloat-node-sdk@0.9.3`](https://www.npmjs.com/package/csfloat-node-sdk)
22
+
> Install from npm: [`csfloat-node-sdk@0.9.4`](https://www.npmjs.com/package/csfloat-node-sdk)
23
23
24
24
## Documentation
25
25
@@ -81,8 +81,9 @@ This SDK is optimized for:
81
81
82
82
- live-confirmed offer flows: create, counter, cancel, decline, history, plus a low-level `acceptOffer()` helper for the browser-observed accept route
83
83
- live-confirmed purchase flows: direct `buyNow`, buy-order create/update/delete, seller-side `acceptSale`
84
-
- state-gated trade lifecycle helpers, including seller-side `acceptSale()` and buyer-side `markTradesReceived()`
85
-
- low-level trade sync helpers for the browser-observed Steam status routes: `syncSteamNewOffer()` and `syncSteamOffers()`
84
+
- state-gated trade lifecycle helpers, including seller-side `acceptSale()`, buyer-side `markTradesReceived()`, and low-level single-trade helpers such as `markTradeReceived()`, `cannotDeliverTrade()`, and `rollbackTrade()`
85
+
- low-level trade sync helpers for the browser-observed Steam status routes: `syncSteamNewOffer()` and `syncSteamOffers()`, with optional asset-annotation payloads on the new-offer route
86
+
- low-level account verification helpers for `verifyEmail()` and `verifySms()`
86
87
- live-confirmed buy-order insight flows: inspect-based lookup and similar-order discovery
87
88
- live-confirmed buy-order expression workflows via `account.createBuyOrder({ expression, ... })`, `account.getSimilarBuyOrders({ expression }, ...)`, and composable builder helpers
88
89
- workflow-first helpers via `sdk.workflows` for public feed snapshots, account workspace snapshots, and single-skin buy-order insights
@@ -123,7 +124,7 @@ See [API_COVERAGE.md](./API_COVERAGE.md) for the endpoint-by-endpoint support ma
0 commit comments