Skip to content

Commit b3e3af5

Browse files
authored
Merge pull request #288 from IzaakPrats/izaak/feature/issue-277
Feature: Modal to allow users to list directly from inventory to CSFloat
2 parents a4d9188 + f977a2f commit b3e3af5

File tree

14 files changed

+1495
-8
lines changed

14 files changed

+1495
-8
lines changed
Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
import {SimpleHandler} from './main';
2+
import {RequestType} from './types';
3+
import {gPriceFetcher} from '../../services/price_fetcher';
4+
5+
export interface FetchRecommendedPriceRequest {
6+
market_hash_name: string;
7+
paint_index?: number;
8+
}
9+
10+
export interface FetchRecommendedPriceResponse {
11+
price: number;
12+
}
13+
14+
export const FetchRecommendedPrice = new SimpleHandler<FetchRecommendedPriceRequest, FetchRecommendedPriceResponse>(
15+
RequestType.FETCH_RECOMMENDED_PRICE,
16+
async (req) => ({price: await gPriceFetcher.fetch(req.market_hash_name, req.paint_index)})
17+
);

src/lib/bridge/handlers/handlers.ts

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,8 @@ import {FetchSteamTrades} from './fetch_steam_trades';
2727
import {FetchBlockedUsers} from './fetch_blocked_users';
2828
import {PingBlockedUsers} from './ping_blocked_users';
2929
import {FetchBluegem} from './fetch_bluegem';
30+
import {ListItem} from './list_item';
31+
import {FetchRecommendedPrice} from './fetch_recommended_price';
3032

3133
export const HANDLERS_MAP: {[key in RequestType]: RequestHandler<any, any>} = {
3234
[RequestType.EXECUTE_SCRIPT_ON_PAGE]: ExecuteScriptOnPage,
@@ -56,4 +58,6 @@ export const HANDLERS_MAP: {[key in RequestType]: RequestHandler<any, any>} = {
5658
[RequestType.FETCH_BLOCKED_USERS]: FetchBlockedUsers,
5759
[RequestType.PING_BLOCKED_USERS]: PingBlockedUsers,
5860
[RequestType.FETCH_BLUEGEM]: FetchBluegem,
61+
[RequestType.LIST_ITEM]: ListItem,
62+
[RequestType.FETCH_RECOMMENDED_PRICE]: FetchRecommendedPrice,
5963
};

src/lib/bridge/handlers/list_item.ts

Lines changed: 61 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,61 @@
1+
import {SimpleHandler} from './main';
2+
import {RequestType} from './types';
3+
import {environment} from '../../../environment';
4+
import {CSFError, CSFErrorCode} from '../../utils/errors';
5+
6+
type ListingType = 'buy_now' | 'auction';
7+
8+
interface BaseListItemRequest {
9+
asset_id: string;
10+
type: ListingType;
11+
description?: string;
12+
private?: boolean;
13+
}
14+
15+
interface BuyNowListItemRequest extends BaseListItemRequest {
16+
type: 'buy_now';
17+
price: number;
18+
max_offer_discount?: number;
19+
}
20+
21+
interface AuctionListItemRequest extends BaseListItemRequest {
22+
type: 'auction';
23+
reserve_price: number;
24+
duration_days: 1 | 3 | 5 | 7 | 14;
25+
}
26+
27+
type ListItemRequest = BuyNowListItemRequest | AuctionListItemRequest;
28+
29+
interface ListItemResponse {
30+
success: boolean;
31+
error?: string;
32+
id?: string;
33+
}
34+
35+
export const ListItem = new SimpleHandler<ListItemRequest, ListItemResponse>(RequestType.LIST_ITEM, async (req) => {
36+
const response = await fetch(`${environment.csfloat_base_api_url}/v1/listings`, {
37+
method: 'POST',
38+
headers: {
39+
'Content-Type': 'application/json',
40+
},
41+
body: JSON.stringify(req),
42+
credentials: 'include',
43+
});
44+
45+
if (!response.ok) {
46+
// Error comes with this body format: { message: string, code: number }
47+
const error = await response.json();
48+
if (response.status === 401) {
49+
// This is here for normalized auth errors across all handlers
50+
throw new CSFError(CSFErrorCode.NOT_AUTHENTICATED);
51+
}
52+
53+
throw new Error(`Failed to List Item: ${error.message} - ${error.code}`);
54+
}
55+
56+
const data = await response.json();
57+
return {
58+
success: true,
59+
id: data.id,
60+
};
61+
});

src/lib/bridge/handlers/types.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,4 +26,6 @@ export enum RequestType {
2626
FETCH_BLOCKED_USERS = 24,
2727
PING_BLOCKED_USERS = 25,
2828
FETCH_BLUEGEM = 26,
29+
LIST_ITEM = 27,
30+
FETCH_RECOMMENDED_PRICE = 28,
2931
}

0 commit comments

Comments
 (0)