secondhand-mcp 0.1.0 → 0.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +62 -79
- package/dist/browser.d.ts +13 -0
- package/dist/browser.d.ts.map +1 -0
- package/dist/browser.js +85 -0
- package/dist/browser.js.map +1 -0
- package/dist/index.js +48 -2
- package/dist/index.js.map +1 -1
- package/dist/marketplaces/depop.d.ts +20 -0
- package/dist/marketplaces/depop.d.ts.map +1 -0
- package/dist/marketplaces/depop.js +203 -0
- package/dist/marketplaces/depop.js.map +1 -0
- package/dist/marketplaces/index.d.ts +2 -0
- package/dist/marketplaces/index.d.ts.map +1 -1
- package/dist/marketplaces/index.js +18 -1
- package/dist/marketplaces/index.js.map +1 -1
- package/dist/marketplaces/poshmark.d.ts +23 -0
- package/dist/marketplaces/poshmark.d.ts.map +1 -0
- package/dist/marketplaces/poshmark.js +345 -0
- package/dist/marketplaces/poshmark.js.map +1 -0
- package/dist/types.d.ts +7 -1
- package/dist/types.d.ts.map +1 -1
- package/package.json +15 -8
package/README.md
CHANGED
|
@@ -1,35 +1,20 @@
|
|
|
1
1
|
# Secondhand MCP
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
A [Model Context Protocol](https://modelcontextprotocol.io) (MCP) server that lets AI assistants search secondhand marketplaces. Search Facebook Marketplace, eBay, Depop, and Poshmark for used and secondhand items — filter by price, category, condition, size, and color, then get full listing details with photos, descriptions, and seller info.
|
|
4
4
|
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
- Search multiple marketplaces from a single interface
|
|
8
|
-
- Price filtering with min/max ranges
|
|
9
|
-
- Location-based search by city
|
|
10
|
-
- Detailed listing inspection (photos, descriptions, seller info)
|
|
11
|
-
- Availability filtering — sold/pending items excluded by default
|
|
12
|
-
- Works with Claude Desktop, Claude Code, Cursor, and other MCP clients
|
|
13
|
-
- Lightweight — no browser dependencies, native HTTP requests
|
|
5
|
+
Works with Claude Desktop, Claude Code, Cursor, and any MCP-compatible client.
|
|
14
6
|
|
|
15
7
|
## Supported Marketplaces
|
|
16
8
|
|
|
17
|
-
| Marketplace |
|
|
18
|
-
|
|
19
|
-
| Facebook Marketplace |
|
|
20
|
-
| eBay |
|
|
9
|
+
| Marketplace | Auth Required | Notes |
|
|
10
|
+
|-------------|---------------|-------|
|
|
11
|
+
| Facebook Marketplace | No | Location-based search |
|
|
12
|
+
| eBay | Yes (API keys) | Official Browse API |
|
|
13
|
+
| Depop | No | Requires Chrome installed |
|
|
14
|
+
| Poshmark | No | Requires Chrome installed |
|
|
21
15
|
|
|
22
16
|
## Setup
|
|
23
17
|
|
|
24
|
-
### From Source
|
|
25
|
-
|
|
26
|
-
```bash
|
|
27
|
-
git clone https://github.com/jlsookiki/secondhand-mcp.git
|
|
28
|
-
cd secondhand-mcp
|
|
29
|
-
npm install
|
|
30
|
-
npm run build
|
|
31
|
-
```
|
|
32
|
-
|
|
33
18
|
### Claude Desktop
|
|
34
19
|
|
|
35
20
|
Add to `~/Library/Application Support/Claude/claude_desktop_config.json`:
|
|
@@ -68,25 +53,31 @@ Add to `~/.claude/.mcp.json`:
|
|
|
68
53
|
}
|
|
69
54
|
```
|
|
70
55
|
|
|
71
|
-
eBay
|
|
56
|
+
eBay, Depop, and Poshmark are all optional — if eBay API keys are missing or Chrome isn't installed, those marketplaces are automatically disabled and the rest still work.
|
|
57
|
+
|
|
58
|
+
### Depop & Poshmark / Chrome Requirement
|
|
59
|
+
|
|
60
|
+
Depop and Poshmark require a headless browser. If **Google Chrome or Chromium** is installed on your system, both are automatically enabled — no config needed. If Chrome isn't found, they are silently skipped.
|
|
61
|
+
|
|
62
|
+
On macOS, the first time you search Depop or Poshmark, you may see a system prompt asking to allow Node.js to control Chrome. This is expected — puppeteer needs to launch Chrome in headless mode. Allow it once and it won't ask again.
|
|
63
|
+
|
|
64
|
+
The browser runs invisibly in the background and only launches when you actually search Depop or Poshmark.
|
|
72
65
|
|
|
73
66
|
## Configuration
|
|
74
67
|
|
|
75
68
|
### Choosing Marketplaces
|
|
76
69
|
|
|
77
|
-
By default all marketplaces are enabled. To limit which
|
|
70
|
+
By default all marketplaces are enabled. To limit which are active, set the `MARKETPLACES` env var (comma-separated):
|
|
78
71
|
|
|
79
72
|
```json
|
|
80
73
|
{
|
|
81
74
|
"env": {
|
|
82
|
-
"MARKETPLACES": "facebook"
|
|
83
|
-
"EBAY_CLIENT_ID": "...",
|
|
84
|
-
"EBAY_CLIENT_SECRET": "..."
|
|
75
|
+
"MARKETPLACES": "facebook,ebay"
|
|
85
76
|
}
|
|
86
77
|
}
|
|
87
78
|
```
|
|
88
79
|
|
|
89
|
-
Valid values: `facebook`, `ebay`
|
|
80
|
+
Valid values: `facebook`, `ebay`, `depop`, `poshmark`
|
|
90
81
|
|
|
91
82
|
### eBay API Keys
|
|
92
83
|
|
|
@@ -100,29 +91,36 @@ eBay uses the official [Browse API](https://developer.ebay.com/api-docs/buy/brow
|
|
|
100
91
|
|
|
101
92
|
### `search_marketplace`
|
|
102
93
|
|
|
103
|
-
Search for items across marketplaces.
|
|
94
|
+
Search for items across marketplaces.
|
|
104
95
|
|
|
105
96
|
| Parameter | Required | Default | Description |
|
|
106
97
|
|-----------|----------|---------|-------------|
|
|
107
98
|
| `query` | Yes | | Search terms |
|
|
108
|
-
| `marketplace` | No | `facebook` | `facebook`, `ebay`, or `all` |
|
|
99
|
+
| `marketplace` | No | `facebook` | `facebook`, `ebay`, `depop`, `poshmark`, or `all` |
|
|
109
100
|
| `location` | No | `san francisco` | City to search in (Facebook only) |
|
|
110
101
|
| `maxPrice` | No | | Maximum price |
|
|
111
102
|
| `minPrice` | No | | Minimum price |
|
|
112
103
|
| `limit` | No | `20` | Max results |
|
|
113
|
-
| `showSold` | No | `false` | Include sold
|
|
104
|
+
| `showSold` | No | `false` | Include sold items (Facebook only) |
|
|
114
105
|
| `includeImages` | No | `false` | Include image URLs in output |
|
|
106
|
+
| `sort` | No | `relevance` | Sort order (Depop, Poshmark): `relevance`, `newest`, `most_popular`, `price_low_to_high`, `price_high_to_low` |
|
|
107
|
+
| `condition` | No | | Item condition. eBay: `new`, `like_new`, `good`, `fair`. Depop: `new`, `like_new`, `excellent`, `good`, `fair`, `used`. Poshmark: `new` (NWT), `like_new` (NWOT), `good`, `fair` |
|
|
108
|
+
| `category` | No | | Product category. Depop: `tops`, `bottoms`, `dresses`, `coats-jackets`, `footwear`, `accessories`, `bags`, `jewellery`, `activewear`, `swimwear`. Poshmark: `Jackets_&_Coats`, `Dresses`, `Shoes`, `Accessories`, etc. |
|
|
109
|
+
| `brand` | No | | Brand filter (Poshmark only): e.g. `"Nike"`, `"Levi's"`, `"Gucci"` |
|
|
110
|
+
| `department` | No | | Department filter (Poshmark only): `Women`, `Men`, `Kids` |
|
|
111
|
+
| `sizes` | No | | Size filter (Depop, Poshmark): e.g. `["S", "M", "L"]` or `["US 9", "US 10"]` |
|
|
112
|
+
| `colors` | No | | Color filter (Depop, Poshmark): `black`, `white`, `red`, `blue`, `green`, `yellow`, `orange`, `pink`, `purple`, `brown`, `grey`, `cream`, `multi`, `silver`, `gold` |
|
|
115
113
|
|
|
116
114
|
**Data returned per marketplace:**
|
|
117
115
|
|
|
118
|
-
| Field | Facebook | eBay |
|
|
119
|
-
|
|
120
|
-
| Title | Yes | Yes |
|
|
121
|
-
| Price | Yes | Yes |
|
|
122
|
-
| Location | City
|
|
123
|
-
| Condition |
|
|
124
|
-
| Photo count |
|
|
125
|
-
| Seller | Yes | Yes |
|
|
116
|
+
| Field | Facebook | eBay | Depop | Poshmark |
|
|
117
|
+
|-------|----------|------|-------|----------|
|
|
118
|
+
| Title | Yes | Yes | Yes | Yes |
|
|
119
|
+
| Price | Yes | Yes | Yes | Yes |
|
|
120
|
+
| Location | City | City, State | — | — |
|
|
121
|
+
| Condition | — | Yes | — | — |
|
|
122
|
+
| Photo count | 1 thumbnail | 1 thumbnail | 1 thumbnail | 1 thumbnail |
|
|
123
|
+
| Seller | Yes | Yes | — | — |
|
|
126
124
|
|
|
127
125
|
### `get_listing_details`
|
|
128
126
|
|
|
@@ -131,71 +129,56 @@ Get full details for a specific listing using an ID from search results.
|
|
|
131
129
|
| Parameter | Required | Default | Description |
|
|
132
130
|
|-----------|----------|---------|-------------|
|
|
133
131
|
| `listingId` | Yes | | Listing ID from search results |
|
|
134
|
-
| `marketplace` | No | `facebook` | `facebook` or `
|
|
132
|
+
| `marketplace` | No | `facebook` | `facebook`, `ebay`, `depop`, or `poshmark` |
|
|
135
133
|
|
|
136
134
|
**Data returned per marketplace:**
|
|
137
135
|
|
|
138
|
-
| Field | Facebook | eBay |
|
|
139
|
-
|
|
140
|
-
| Description | Yes | Yes |
|
|
141
|
-
| All photos | Yes | Yes |
|
|
142
|
-
| Location | City | City, State, Country |
|
|
143
|
-
| Seller | Name | Username |
|
|
144
|
-
| Delivery types | Yes |
|
|
145
|
-
| Shipping
|
|
136
|
+
| Field | Facebook | eBay | Depop | Poshmark |
|
|
137
|
+
|-------|----------|------|-------|----------|
|
|
138
|
+
| Description | Yes | Yes | Yes | Yes |
|
|
139
|
+
| All photos | Yes | Yes | Yes | Yes |
|
|
140
|
+
| Location | City | City, State, Country | — | — |
|
|
141
|
+
| Seller | Name | Username | Username | Username |
|
|
142
|
+
| Delivery types | Yes | — | — | — |
|
|
143
|
+
| Shipping | Yes/No | Service codes | Yes/No | Always included |
|
|
146
144
|
|
|
147
145
|
### `list_marketplaces`
|
|
148
146
|
|
|
149
147
|
List all enabled marketplaces and their status.
|
|
150
148
|
|
|
151
|
-
## Example Output
|
|
152
|
-
|
|
153
|
-
```
|
|
154
|
-
Found 15 listings for "stroller" on facebook
|
|
155
|
-
Location: san francisco
|
|
156
|
-
|
|
157
|
-
**$25** - Baby stroller
|
|
158
|
-
San Francisco, CA
|
|
159
|
-
ID: 123456789
|
|
160
|
-
1 photo
|
|
161
|
-
|
|
162
|
-
**$50** - Thule Urban Glide Jogging Stroller
|
|
163
|
-
San Francisco, CA
|
|
164
|
-
ID: 987654321
|
|
165
|
-
1 photo
|
|
166
|
-
```
|
|
167
|
-
|
|
168
|
-
Use `get_listing_details` with a listing ID to see full photos, description, and seller info.
|
|
169
|
-
|
|
170
149
|
## How It Works
|
|
171
150
|
|
|
172
|
-
**Facebook Marketplace** —
|
|
151
|
+
**Facebook Marketplace** — Searches listings by location, price, and query. Resolves city names to coordinates. No login or browser needed.
|
|
173
152
|
|
|
174
153
|
**eBay** — Uses the official eBay Browse API with OAuth 2.0 client credentials. Tokens are cached and auto-refreshed.
|
|
175
154
|
|
|
176
|
-
|
|
155
|
+
**Depop** — Uses a headless browser to search listings with support for category, condition, size, and color filters. The browser instance is shared across requests.
|
|
177
156
|
|
|
178
|
-
|
|
179
|
-
2. Extend `BaseMarketplace` and implement `search()` and optionally `getListingDetails()`
|
|
180
|
-
3. Add the constructor to the `allMarketplaces` registry in `src/marketplaces/index.ts`
|
|
157
|
+
**Poshmark** — Uses a headless browser to search listings with support for condition, size, color, sort, and price filters. Poshmark is not location-based — all items ship nationally.
|
|
181
158
|
|
|
182
159
|
## Development
|
|
183
160
|
|
|
184
161
|
```bash
|
|
162
|
+
git clone https://github.com/jlsookiki/secondhand-mcp.git
|
|
163
|
+
cd secondhand-mcp
|
|
185
164
|
npm install
|
|
186
165
|
npm run build
|
|
187
166
|
```
|
|
188
167
|
|
|
168
|
+
### Adding a Marketplace
|
|
169
|
+
|
|
170
|
+
1. Create a new file in `src/marketplaces/`
|
|
171
|
+
2. Extend `BaseMarketplace` and implement `search()` and optionally `getListingDetails()`
|
|
172
|
+
3. Add the constructor to `allMarketplaces` in `src/marketplaces/index.ts`
|
|
173
|
+
|
|
189
174
|
## Limitations
|
|
190
175
|
|
|
191
|
-
- **Facebook
|
|
192
|
-
- **Rate limiting**: Don't make too many requests too quickly
|
|
176
|
+
- **Facebook**: May break if Facebook changes their frontend
|
|
193
177
|
- **eBay**: Requires developer API keys (free tier available)
|
|
178
|
+
- **Depop**: Requires Chrome/Chromium installed; slower than Facebook/eBay (~5s per search)
|
|
179
|
+
- **Poshmark**: Requires Chrome/Chromium installed; no official API so relies on page scraping
|
|
180
|
+
- **Rate limiting**: Don't make too many requests too quickly
|
|
194
181
|
|
|
195
182
|
## License
|
|
196
183
|
|
|
197
184
|
MIT
|
|
198
|
-
|
|
199
|
-
## Disclaimer
|
|
200
|
-
|
|
201
|
-
This tool is for personal use. Respect each marketplace's Terms of Service.
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Shared headless browser management for Cloudflare-protected marketplaces.
|
|
3
|
+
*
|
|
4
|
+
* Uses puppeteer-core with the stealth plugin to bypass TLS fingerprinting.
|
|
5
|
+
* Requires system Chrome/Chromium installed.
|
|
6
|
+
* Browser instance is lazy-initialized and shared across requests.
|
|
7
|
+
*/
|
|
8
|
+
import { Browser, Page } from 'puppeteer-core';
|
|
9
|
+
export declare function findChrome(): string | null;
|
|
10
|
+
export declare function getBrowser(): Promise<Browser>;
|
|
11
|
+
export declare function newPage(): Promise<Page>;
|
|
12
|
+
export declare function closeBrowser(): Promise<void>;
|
|
13
|
+
//# sourceMappingURL=browser.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"browser.d.ts","sourceRoot":"","sources":["../src/browser.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAIH,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,gBAAgB,CAAC;AAwB/C,wBAAgB,UAAU,IAAI,MAAM,GAAG,IAAI,CAM1C;AAED,wBAAsB,UAAU,IAAI,OAAO,CAAC,OAAO,CAAC,CAyBnD;AAED,wBAAsB,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC,CAK7C;AAED,wBAAsB,YAAY,IAAI,OAAO,CAAC,IAAI,CAAC,CAKlD"}
|
package/dist/browser.js
ADDED
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Shared headless browser management for Cloudflare-protected marketplaces.
|
|
4
|
+
*
|
|
5
|
+
* Uses puppeteer-core with the stealth plugin to bypass TLS fingerprinting.
|
|
6
|
+
* Requires system Chrome/Chromium installed.
|
|
7
|
+
* Browser instance is lazy-initialized and shared across requests.
|
|
8
|
+
*/
|
|
9
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
10
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
11
|
+
};
|
|
12
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
13
|
+
exports.findChrome = findChrome;
|
|
14
|
+
exports.getBrowser = getBrowser;
|
|
15
|
+
exports.newPage = newPage;
|
|
16
|
+
exports.closeBrowser = closeBrowser;
|
|
17
|
+
const puppeteer_extra_1 = __importDefault(require("puppeteer-extra"));
|
|
18
|
+
const puppeteer_extra_plugin_stealth_1 = __importDefault(require("puppeteer-extra-plugin-stealth"));
|
|
19
|
+
const fs_1 = require("fs");
|
|
20
|
+
puppeteer_extra_1.default.use((0, puppeteer_extra_plugin_stealth_1.default)());
|
|
21
|
+
let browser = null;
|
|
22
|
+
const CHROME_PATHS = {
|
|
23
|
+
darwin: [
|
|
24
|
+
'/Applications/Google Chrome.app/Contents/MacOS/Google Chrome',
|
|
25
|
+
'/Applications/Chromium.app/Contents/MacOS/Chromium',
|
|
26
|
+
],
|
|
27
|
+
linux: [
|
|
28
|
+
'/usr/bin/google-chrome',
|
|
29
|
+
'/usr/bin/google-chrome-stable',
|
|
30
|
+
'/usr/bin/chromium-browser',
|
|
31
|
+
'/usr/bin/chromium',
|
|
32
|
+
],
|
|
33
|
+
win32: [
|
|
34
|
+
'C:\\Program Files\\Google\\Chrome\\Application\\chrome.exe',
|
|
35
|
+
'C:\\Program Files (x86)\\Google\\Chrome\\Application\\chrome.exe',
|
|
36
|
+
],
|
|
37
|
+
};
|
|
38
|
+
function findChrome() {
|
|
39
|
+
const paths = CHROME_PATHS[process.platform] ?? [];
|
|
40
|
+
for (const p of paths) {
|
|
41
|
+
if ((0, fs_1.existsSync)(p))
|
|
42
|
+
return p;
|
|
43
|
+
}
|
|
44
|
+
return null;
|
|
45
|
+
}
|
|
46
|
+
async function getBrowser() {
|
|
47
|
+
if (browser && browser.connected) {
|
|
48
|
+
return browser;
|
|
49
|
+
}
|
|
50
|
+
const executablePath = findChrome();
|
|
51
|
+
if (!executablePath) {
|
|
52
|
+
throw new Error('Chrome/Chromium not found. Install Google Chrome or set a custom path. ' +
|
|
53
|
+
`Checked: ${(CHROME_PATHS[process.platform] ?? []).join(', ')}`);
|
|
54
|
+
}
|
|
55
|
+
browser = await puppeteer_extra_1.default.launch({
|
|
56
|
+
headless: true,
|
|
57
|
+
executablePath,
|
|
58
|
+
args: [
|
|
59
|
+
'--no-sandbox',
|
|
60
|
+
'--disable-setuid-sandbox',
|
|
61
|
+
'--disable-dev-shm-usage',
|
|
62
|
+
'--disable-gpu',
|
|
63
|
+
],
|
|
64
|
+
});
|
|
65
|
+
return browser;
|
|
66
|
+
}
|
|
67
|
+
async function newPage() {
|
|
68
|
+
const b = await getBrowser();
|
|
69
|
+
const page = await b.newPage();
|
|
70
|
+
await page.setViewport({ width: 1280, height: 800 });
|
|
71
|
+
return page;
|
|
72
|
+
}
|
|
73
|
+
async function closeBrowser() {
|
|
74
|
+
if (browser) {
|
|
75
|
+
await browser.close().catch(() => { });
|
|
76
|
+
browser = null;
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
// Clean shutdown
|
|
80
|
+
process.on('exit', () => {
|
|
81
|
+
if (browser) {
|
|
82
|
+
browser.close().catch(() => { });
|
|
83
|
+
}
|
|
84
|
+
});
|
|
85
|
+
//# sourceMappingURL=browser.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"browser.js","sourceRoot":"","sources":["../src/browser.ts"],"names":[],"mappings":";AAAA;;;;;;GAMG;;;;;AA4BH,gCAMC;AAED,gCAyBC;AAED,0BAKC;AAED,oCAKC;AAzED,sEAAwC;AACxC,oGAA2D;AAE3D,2BAAgC;AAEhC,yBAAS,CAAC,GAAG,CAAC,IAAA,wCAAa,GAAE,CAAC,CAAC;AAE/B,IAAI,OAAO,GAAmB,IAAI,CAAC;AAEnC,MAAM,YAAY,GAA6B;IAC7C,MAAM,EAAE;QACN,8DAA8D;QAC9D,oDAAoD;KACrD;IACD,KAAK,EAAE;QACL,wBAAwB;QACxB,+BAA+B;QAC/B,2BAA2B;QAC3B,mBAAmB;KACpB;IACD,KAAK,EAAE;QACL,4DAA4D;QAC5D,kEAAkE;KACnE;CACF,CAAC;AAEF,SAAgB,UAAU;IACxB,MAAM,KAAK,GAAG,YAAY,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC;IACnD,KAAK,MAAM,CAAC,IAAI,KAAK,EAAE,CAAC;QACtB,IAAI,IAAA,eAAU,EAAC,CAAC,CAAC;YAAE,OAAO,CAAC,CAAC;IAC9B,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAEM,KAAK,UAAU,UAAU;IAC9B,IAAI,OAAO,IAAI,OAAO,CAAC,SAAS,EAAE,CAAC;QACjC,OAAO,OAAO,CAAC;IACjB,CAAC;IAED,MAAM,cAAc,GAAG,UAAU,EAAE,CAAC;IACpC,IAAI,CAAC,cAAc,EAAE,CAAC;QACpB,MAAM,IAAI,KAAK,CACb,yEAAyE;YACzE,YAAY,CAAC,YAAY,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAChE,CAAC;IACJ,CAAC;IAED,OAAO,GAAG,MAAO,yBAAiB,CAAC,MAAM,CAAC;QACxC,QAAQ,EAAE,IAAI;QACd,cAAc;QACd,IAAI,EAAE;YACJ,cAAc;YACd,0BAA0B;YAC1B,yBAAyB;YACzB,eAAe;SAChB;KACF,CAAY,CAAC;IAEd,OAAO,OAAO,CAAC;AACjB,CAAC;AAEM,KAAK,UAAU,OAAO;IAC3B,MAAM,CAAC,GAAG,MAAM,UAAU,EAAE,CAAC;IAC7B,MAAM,IAAI,GAAG,MAAM,CAAC,CAAC,OAAO,EAAE,CAAC;IAC/B,MAAM,IAAI,CAAC,WAAW,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC,CAAC;IACrD,OAAO,IAAI,CAAC;AACd,CAAC;AAEM,KAAK,UAAU,YAAY;IAChC,IAAI,OAAO,EAAE,CAAC;QACZ,MAAM,OAAO,CAAC,KAAK,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC;QACtC,OAAO,GAAG,IAAI,CAAC;IACjB,CAAC;AACH,CAAC;AAED,iBAAiB;AACjB,OAAO,CAAC,EAAE,CAAC,MAAM,EAAE,GAAG,EAAE;IACtB,IAAI,OAAO,EAAE,CAAC;QACZ,OAAO,CAAC,KAAK,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC;IAClC,CAAC;AACH,CAAC,CAAC,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -17,7 +17,7 @@ const marketplaces_1 = require("./marketplaces");
|
|
|
17
17
|
const tools = [
|
|
18
18
|
{
|
|
19
19
|
name: 'search_marketplace',
|
|
20
|
-
description: `Search for items on secondary marketplaces. Supports: ${(0, marketplaces_1.listMarketplaceNames)().join(', ')}. Returns listing ID, title, price, location, and photo count. Facebook: location-based search, no auth. eBay: keyword search with condition filter, requires API keys. Use get_listing_details with a listing ID for full description, all photos, seller info, and shipping options.`,
|
|
20
|
+
description: `Search for items on secondary marketplaces. Supports: ${(0, marketplaces_1.listMarketplaceNames)().join(', ')}. Returns listing ID, title, price, location, and photo count. Facebook: location-based search, no auth. eBay: keyword search with condition filter, requires API keys. Depop: keyword search with filters for sort, condition, category, brands, sizes, colors (requires Chrome). Poshmark: keyword search with filters for sort, condition, sizes, colors (requires Chrome). Use get_listing_details with a listing ID for full description, all photos, seller info, and shipping options.`,
|
|
21
21
|
inputSchema: {
|
|
22
22
|
type: 'object',
|
|
23
23
|
properties: {
|
|
@@ -57,6 +57,37 @@ const tools = [
|
|
|
57
57
|
type: 'boolean',
|
|
58
58
|
description: 'Include full image URLs in results (default: false). Use get_listing_details for full photos.',
|
|
59
59
|
default: false
|
|
60
|
+
},
|
|
61
|
+
sort: {
|
|
62
|
+
type: 'string',
|
|
63
|
+
description: 'Sort order (Depop, Poshmark). Options: relevance, newest, most_popular, price_low_to_high, price_high_to_low',
|
|
64
|
+
default: 'relevance'
|
|
65
|
+
},
|
|
66
|
+
condition: {
|
|
67
|
+
type: 'string',
|
|
68
|
+
description: 'Item condition filter. eBay: new, like_new, good, fair. Depop: new, like_new, excellent, good, fair, used. Poshmark: new (NWT), like_new (NWOT), good, fair. Use "any" for no filter.',
|
|
69
|
+
},
|
|
70
|
+
category: {
|
|
71
|
+
type: 'string',
|
|
72
|
+
description: 'Product category. Depop: tops, bottoms, dresses, coats-jackets, footwear, accessories, bags, jewellery, activewear, swimwear. Poshmark: use underscore-separated names like Jackets_&_Coats, Dresses, Shoes, Accessories, etc.',
|
|
73
|
+
},
|
|
74
|
+
brand: {
|
|
75
|
+
type: 'string',
|
|
76
|
+
description: 'Filter by brand (Poshmark only). e.g. "Nike", "Levi\'s", "Gucci"',
|
|
77
|
+
},
|
|
78
|
+
department: {
|
|
79
|
+
type: 'string',
|
|
80
|
+
description: 'Filter by department (Poshmark only). Options: Women, Men, Kids',
|
|
81
|
+
},
|
|
82
|
+
sizes: {
|
|
83
|
+
type: 'array',
|
|
84
|
+
items: { type: 'string' },
|
|
85
|
+
description: 'Filter by sizes (Depop, Poshmark). Example: ["S", "M", "L"] or ["US 9", "US 10"]',
|
|
86
|
+
},
|
|
87
|
+
colors: {
|
|
88
|
+
type: 'array',
|
|
89
|
+
items: { type: 'string' },
|
|
90
|
+
description: 'Filter by colors (Depop, Poshmark). Options: black, white, red, blue, green, yellow, orange, pink, purple, brown, grey, cream, multi, silver, gold',
|
|
60
91
|
}
|
|
61
92
|
},
|
|
62
93
|
required: ['query']
|
|
@@ -64,7 +95,7 @@ const tools = [
|
|
|
64
95
|
},
|
|
65
96
|
{
|
|
66
97
|
name: 'get_listing_details',
|
|
67
|
-
description: 'Get full details for a specific listing using an ID from search results. Facebook returns: description, all photos, location, seller name, delivery types, shipping availability. eBay returns: description, all photos, location (city/state/country), seller username, shipping service options.',
|
|
98
|
+
description: 'Get full details for a specific listing using an ID from search results. Facebook returns: description, all photos, location, seller name, delivery types, shipping availability. eBay returns: description, all photos, location (city/state/country), seller username, shipping service options. Depop returns: description, all photos, seller username, shipping availability. Poshmark returns: description, all photos, seller username, shipping availability.',
|
|
68
99
|
inputSchema: {
|
|
69
100
|
type: 'object',
|
|
70
101
|
properties: {
|
|
@@ -116,6 +147,13 @@ server.setRequestHandler(types_js_1.CallToolRequestSchema, async (request) => {
|
|
|
116
147
|
minPrice: params.minPrice,
|
|
117
148
|
limit: params.limit || 20,
|
|
118
149
|
showSold: params.showSold || false,
|
|
150
|
+
sort: params.sort,
|
|
151
|
+
condition: params.condition,
|
|
152
|
+
category: params.category,
|
|
153
|
+
brand: params.brand,
|
|
154
|
+
department: params.department,
|
|
155
|
+
sizes: params.sizes,
|
|
156
|
+
colors: params.colors,
|
|
119
157
|
};
|
|
120
158
|
const marketplaceName = params.marketplace || 'facebook';
|
|
121
159
|
if (marketplaceName === 'all') {
|
|
@@ -197,6 +235,14 @@ server.setRequestHandler(types_js_1.CallToolRequestSchema, async (request) => {
|
|
|
197
235
|
const ebay = (0, marketplaces_1.getMarketplace)('ebay');
|
|
198
236
|
details = await ebay.getListingDetails(listingId);
|
|
199
237
|
}
|
|
238
|
+
else if (targetMp === 'depop') {
|
|
239
|
+
const depop = (0, marketplaces_1.getMarketplace)('depop');
|
|
240
|
+
details = await depop.getListingDetails(listingId);
|
|
241
|
+
}
|
|
242
|
+
else if (targetMp === 'poshmark') {
|
|
243
|
+
const poshmark = (0, marketplaces_1.getMarketplace)('poshmark');
|
|
244
|
+
details = await poshmark.getListingDetails(listingId);
|
|
245
|
+
}
|
|
200
246
|
else {
|
|
201
247
|
const fb = (0, marketplaces_1.getMarketplace)('facebook');
|
|
202
248
|
details = await fb.getListingDetails(listingId);
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Depop Marketplace implementation
|
|
3
|
+
*
|
|
4
|
+
* Uses a headless browser to bypass Cloudflare TLS fingerprinting,
|
|
5
|
+
* then calls the Depop web API directly from within the browser context.
|
|
6
|
+
* This gives us clean JSON without any DOM scraping.
|
|
7
|
+
* No Depop authentication required.
|
|
8
|
+
*/
|
|
9
|
+
import { BaseMarketplace } from './base';
|
|
10
|
+
import { SearchParams, SearchResult, ListingDetails } from '../types';
|
|
11
|
+
export declare class DepopMarketplace extends BaseMarketplace {
|
|
12
|
+
readonly name = "depop";
|
|
13
|
+
readonly displayName = "Depop";
|
|
14
|
+
readonly requiresAuth = false;
|
|
15
|
+
search(params: SearchParams): Promise<SearchResult>;
|
|
16
|
+
getListingDetails(slug: string): Promise<ListingDetails>;
|
|
17
|
+
healthCheck(): Promise<boolean>;
|
|
18
|
+
private humanizeSlug;
|
|
19
|
+
}
|
|
20
|
+
//# sourceMappingURL=depop.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"depop.d.ts","sourceRoot":"","sources":["../../src/marketplaces/depop.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAE,eAAe,EAAE,MAAM,QAAQ,CAAC;AACzC,OAAO,EAAE,YAAY,EAAE,YAAY,EAAW,cAAc,EAAE,MAAM,UAAU,CAAC;AAiB/E,qBAAa,gBAAiB,SAAQ,eAAe;IACnD,QAAQ,CAAC,IAAI,WAAW;IACxB,QAAQ,CAAC,WAAW,WAAW;IAC/B,QAAQ,CAAC,YAAY,SAAS;IAExB,MAAM,CAAC,MAAM,EAAE,YAAY,GAAG,OAAO,CAAC,YAAY,CAAC;IAgGnD,iBAAiB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,CAAC;IAqDxD,WAAW,IAAI,OAAO,CAAC,OAAO,CAAC;IAWrC,OAAO,CAAC,YAAY;CASrB"}
|
|
@@ -0,0 +1,203 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Depop Marketplace implementation
|
|
4
|
+
*
|
|
5
|
+
* Uses a headless browser to bypass Cloudflare TLS fingerprinting,
|
|
6
|
+
* then calls the Depop web API directly from within the browser context.
|
|
7
|
+
* This gives us clean JSON without any DOM scraping.
|
|
8
|
+
* No Depop authentication required.
|
|
9
|
+
*/
|
|
10
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
11
|
+
exports.DepopMarketplace = void 0;
|
|
12
|
+
const base_1 = require("./base");
|
|
13
|
+
const browser_1 = require("../browser");
|
|
14
|
+
const DEPOP_HOME = 'https://www.depop.com/';
|
|
15
|
+
const SEARCH_API = 'https://webapi.depop.com/api/v2/search/products/';
|
|
16
|
+
const EXTENDED_API = 'https://webapi.depop.com/api/v1/product/by-slug/';
|
|
17
|
+
const PRODUCT_URL = 'https://www.depop.com/products/';
|
|
18
|
+
// Map user-friendly condition names to Depop API values
|
|
19
|
+
const CONDITION_MAP = {
|
|
20
|
+
new: 'brand_new',
|
|
21
|
+
like_new: 'used_like_new',
|
|
22
|
+
excellent: 'used_excellent',
|
|
23
|
+
good: 'used_good',
|
|
24
|
+
fair: 'used_fair',
|
|
25
|
+
};
|
|
26
|
+
class DepopMarketplace extends base_1.BaseMarketplace {
|
|
27
|
+
name = 'depop';
|
|
28
|
+
displayName = 'Depop';
|
|
29
|
+
requiresAuth = false;
|
|
30
|
+
async search(params) {
|
|
31
|
+
const { query, maxPrice, minPrice, limit = 24, sort, condition, category, sizes, colors } = params;
|
|
32
|
+
let page;
|
|
33
|
+
try {
|
|
34
|
+
page = await (0, browser_1.newPage)();
|
|
35
|
+
// Navigate to Depop first to establish Cloudflare cookies/session
|
|
36
|
+
await page.goto(DEPOP_HOME, { waitUntil: 'networkidle2', timeout: 30000 });
|
|
37
|
+
// Build API URL
|
|
38
|
+
const apiUrl = new URL(SEARCH_API);
|
|
39
|
+
apiUrl.searchParams.set('what', query);
|
|
40
|
+
apiUrl.searchParams.set('itemsPerPage', String(limit));
|
|
41
|
+
apiUrl.searchParams.set('country', 'us');
|
|
42
|
+
apiUrl.searchParams.set('currency', 'USD');
|
|
43
|
+
apiUrl.searchParams.set('sort', sort || 'relevance');
|
|
44
|
+
if (minPrice != null)
|
|
45
|
+
apiUrl.searchParams.set('priceMin', String(minPrice));
|
|
46
|
+
if (maxPrice != null)
|
|
47
|
+
apiUrl.searchParams.set('priceMax', String(maxPrice));
|
|
48
|
+
if (condition && condition !== 'any') {
|
|
49
|
+
const depopCondition = CONDITION_MAP[condition];
|
|
50
|
+
if (depopCondition)
|
|
51
|
+
apiUrl.searchParams.set('conditions', depopCondition);
|
|
52
|
+
}
|
|
53
|
+
if (category)
|
|
54
|
+
apiUrl.searchParams.set('groups', category);
|
|
55
|
+
if (sizes)
|
|
56
|
+
for (const s of sizes)
|
|
57
|
+
apiUrl.searchParams.append('sizes', s);
|
|
58
|
+
if (colors)
|
|
59
|
+
for (const c of colors)
|
|
60
|
+
apiUrl.searchParams.append('colours', c);
|
|
61
|
+
// Call the API from within the browser context
|
|
62
|
+
const apiResponse = await page.evaluate(async (url) => {
|
|
63
|
+
try {
|
|
64
|
+
const res = await fetch(url, {
|
|
65
|
+
headers: {
|
|
66
|
+
'accept': 'application/json',
|
|
67
|
+
},
|
|
68
|
+
});
|
|
69
|
+
if (!res.ok)
|
|
70
|
+
return { error: `HTTP ${res.status}`, data: null };
|
|
71
|
+
const data = await res.json();
|
|
72
|
+
return { error: null, data };
|
|
73
|
+
}
|
|
74
|
+
catch (e) {
|
|
75
|
+
return { error: e.message || String(e), data: null };
|
|
76
|
+
}
|
|
77
|
+
}, apiUrl.toString());
|
|
78
|
+
if (apiResponse.error || !apiResponse.data) {
|
|
79
|
+
return this.createError(`Depop API error: ${apiResponse.error}`);
|
|
80
|
+
}
|
|
81
|
+
const data = apiResponse.data;
|
|
82
|
+
const products = data.products || [];
|
|
83
|
+
const listings = [];
|
|
84
|
+
for (const product of products) {
|
|
85
|
+
if (listings.length >= limit)
|
|
86
|
+
break;
|
|
87
|
+
const slug = product.slug;
|
|
88
|
+
if (!slug)
|
|
89
|
+
continue;
|
|
90
|
+
const priceAmount = product.price?.priceAmount;
|
|
91
|
+
const currency = product.price?.currencyName === 'GBP' ? '£' : '$';
|
|
92
|
+
const priceStr = priceAmount != null ? `${currency}${priceAmount}` : 'Price not listed';
|
|
93
|
+
const priceNumeric = priceAmount != null ? parseFloat(priceAmount) : undefined;
|
|
94
|
+
// Get best available preview image (values are direct URL strings)
|
|
95
|
+
const preview = product.preview;
|
|
96
|
+
const images = [];
|
|
97
|
+
if (preview) {
|
|
98
|
+
const imgUrl = preview['480'] || preview['320'] || preview['640'];
|
|
99
|
+
if (imgUrl)
|
|
100
|
+
images.push(imgUrl);
|
|
101
|
+
}
|
|
102
|
+
listings.push({
|
|
103
|
+
id: slug,
|
|
104
|
+
title: this.humanizeSlug(slug),
|
|
105
|
+
price: priceStr,
|
|
106
|
+
priceNumeric,
|
|
107
|
+
currency,
|
|
108
|
+
url: `${PRODUCT_URL}${slug}`,
|
|
109
|
+
images: images.length > 0 ? images : undefined,
|
|
110
|
+
marketplace: this.name,
|
|
111
|
+
scrapedAt: new Date().toISOString(),
|
|
112
|
+
});
|
|
113
|
+
}
|
|
114
|
+
return {
|
|
115
|
+
marketplace: this.name,
|
|
116
|
+
success: true,
|
|
117
|
+
listings,
|
|
118
|
+
totalFound: data.meta?.resultCount ?? listings.length,
|
|
119
|
+
};
|
|
120
|
+
}
|
|
121
|
+
catch (error) {
|
|
122
|
+
return this.createError(`Depop search failed: ${error}`);
|
|
123
|
+
}
|
|
124
|
+
finally {
|
|
125
|
+
if (page)
|
|
126
|
+
await page.close().catch(() => { });
|
|
127
|
+
}
|
|
128
|
+
}
|
|
129
|
+
async getListingDetails(slug) {
|
|
130
|
+
let page;
|
|
131
|
+
try {
|
|
132
|
+
page = await (0, browser_1.newPage)();
|
|
133
|
+
// Navigate to product page — JSON-LD has description + images
|
|
134
|
+
await page.goto(`${PRODUCT_URL}${slug}/`, { waitUntil: 'networkidle2', timeout: 30000 });
|
|
135
|
+
// Extract JSON-LD structured data (description, images, price, condition)
|
|
136
|
+
const jsonLd = await page.evaluate(`
|
|
137
|
+
(() => {
|
|
138
|
+
const el = document.querySelector('script[type="application/ld+json"]');
|
|
139
|
+
if (!el) return null;
|
|
140
|
+
try { return JSON.parse(el.textContent || ''); } catch { return null; }
|
|
141
|
+
})()
|
|
142
|
+
`);
|
|
143
|
+
// Call extended API for seller/shipping details
|
|
144
|
+
const extended = await page.evaluate(async (url) => {
|
|
145
|
+
try {
|
|
146
|
+
const res = await fetch(url);
|
|
147
|
+
if (res.ok)
|
|
148
|
+
return await res.json();
|
|
149
|
+
return null;
|
|
150
|
+
}
|
|
151
|
+
catch {
|
|
152
|
+
return null;
|
|
153
|
+
}
|
|
154
|
+
}, `${EXTENDED_API}${slug}/extended/?lang=en&force_fee_calculation=true`);
|
|
155
|
+
// Extract seller username from meta description ("... - Sold by @username")
|
|
156
|
+
const seller = await page.evaluate(`
|
|
157
|
+
(() => {
|
|
158
|
+
const meta = document.querySelector('meta[name="description"]');
|
|
159
|
+
const content = meta ? meta.getAttribute('content') || '' : '';
|
|
160
|
+
const match = content.match(/Sold by @(\\w+)/);
|
|
161
|
+
return match ? match[1] : undefined;
|
|
162
|
+
})()
|
|
163
|
+
`);
|
|
164
|
+
const images = jsonLd?.image || [];
|
|
165
|
+
const hasShipping = extended?.pricing?.national_shipping_cost != null
|
|
166
|
+
|| extended?.has_free_shipping === true;
|
|
167
|
+
return {
|
|
168
|
+
id: slug,
|
|
169
|
+
description: jsonLd?.description ?? undefined,
|
|
170
|
+
images,
|
|
171
|
+
seller,
|
|
172
|
+
isShippingOffered: hasShipping,
|
|
173
|
+
url: `${PRODUCT_URL}${slug}`,
|
|
174
|
+
};
|
|
175
|
+
}
|
|
176
|
+
finally {
|
|
177
|
+
if (page)
|
|
178
|
+
await page.close().catch(() => { });
|
|
179
|
+
}
|
|
180
|
+
}
|
|
181
|
+
async healthCheck() {
|
|
182
|
+
try {
|
|
183
|
+
const result = await this.search({ query: 'test', limit: 1 });
|
|
184
|
+
return result.success;
|
|
185
|
+
}
|
|
186
|
+
catch {
|
|
187
|
+
return false;
|
|
188
|
+
}
|
|
189
|
+
}
|
|
190
|
+
// ── Private helpers ──────────────────────────────────────────────
|
|
191
|
+
humanizeSlug(slug) {
|
|
192
|
+
const parts = slug.split('-');
|
|
193
|
+
if (parts.length <= 2)
|
|
194
|
+
return slug.replace(/-/g, ' ');
|
|
195
|
+
// Remove first part (username) and last part (random suffix)
|
|
196
|
+
const titleParts = parts.slice(1, -1);
|
|
197
|
+
return titleParts
|
|
198
|
+
.map(word => word.charAt(0).toUpperCase() + word.slice(1))
|
|
199
|
+
.join(' ');
|
|
200
|
+
}
|
|
201
|
+
}
|
|
202
|
+
exports.DepopMarketplace = DepopMarketplace;
|
|
203
|
+
//# sourceMappingURL=depop.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"depop.js","sourceRoot":"","sources":["../../src/marketplaces/depop.ts"],"names":[],"mappings":"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"}
|
|
@@ -5,6 +5,8 @@ import { Marketplace } from './base';
|
|
|
5
5
|
export { Marketplace, BaseMarketplace } from './base';
|
|
6
6
|
export { FacebookMarketplace } from './facebook';
|
|
7
7
|
export { EbayMarketplace } from './ebay';
|
|
8
|
+
export { DepopMarketplace } from './depop';
|
|
9
|
+
export { PoshmarkMarketplace } from './poshmark';
|
|
8
10
|
export declare function initializeMarketplaces(): void;
|
|
9
11
|
export declare function registerMarketplace(marketplace: Marketplace): void;
|
|
10
12
|
export declare function getMarketplace(name: string): Marketplace | undefined;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/marketplaces/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,WAAW,EAAE,MAAM,QAAQ,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/marketplaces/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,WAAW,EAAE,MAAM,QAAQ,CAAC;AAOrC,OAAO,EAAE,WAAW,EAAE,eAAe,EAAE,MAAM,QAAQ,CAAC;AACtD,OAAO,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAC;AACjD,OAAO,EAAE,eAAe,EAAE,MAAM,QAAQ,CAAC;AACzC,OAAO,EAAE,gBAAgB,EAAE,MAAM,SAAS,CAAC;AAC3C,OAAO,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAC;AAejD,wBAAgB,sBAAsB,IAAI,IAAI,CAwB7C;AAED,wBAAgB,mBAAmB,CAAC,WAAW,EAAE,WAAW,GAAG,IAAI,CAElE;AAED,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,WAAW,GAAG,SAAS,CAEpE;AAED,wBAAgB,kBAAkB,IAAI,WAAW,EAAE,CAElD;AAED,wBAAgB,oBAAoB,IAAI,MAAM,EAAE,CAE/C"}
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
* Marketplace registry - central place to register and access all marketplace implementations
|
|
4
4
|
*/
|
|
5
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
-
exports.EbayMarketplace = exports.FacebookMarketplace = exports.BaseMarketplace = void 0;
|
|
6
|
+
exports.PoshmarkMarketplace = exports.DepopMarketplace = exports.EbayMarketplace = exports.FacebookMarketplace = exports.BaseMarketplace = void 0;
|
|
7
7
|
exports.initializeMarketplaces = initializeMarketplaces;
|
|
8
8
|
exports.registerMarketplace = registerMarketplace;
|
|
9
9
|
exports.getMarketplace = getMarketplace;
|
|
@@ -11,18 +11,27 @@ exports.getAllMarketplaces = getAllMarketplaces;
|
|
|
11
11
|
exports.listMarketplaceNames = listMarketplaceNames;
|
|
12
12
|
const facebook_1 = require("./facebook");
|
|
13
13
|
const ebay_1 = require("./ebay");
|
|
14
|
+
const depop_1 = require("./depop");
|
|
15
|
+
const poshmark_1 = require("./poshmark");
|
|
16
|
+
const browser_1 = require("../browser");
|
|
14
17
|
var base_1 = require("./base");
|
|
15
18
|
Object.defineProperty(exports, "BaseMarketplace", { enumerable: true, get: function () { return base_1.BaseMarketplace; } });
|
|
16
19
|
var facebook_2 = require("./facebook");
|
|
17
20
|
Object.defineProperty(exports, "FacebookMarketplace", { enumerable: true, get: function () { return facebook_2.FacebookMarketplace; } });
|
|
18
21
|
var ebay_2 = require("./ebay");
|
|
19
22
|
Object.defineProperty(exports, "EbayMarketplace", { enumerable: true, get: function () { return ebay_2.EbayMarketplace; } });
|
|
23
|
+
var depop_2 = require("./depop");
|
|
24
|
+
Object.defineProperty(exports, "DepopMarketplace", { enumerable: true, get: function () { return depop_2.DepopMarketplace; } });
|
|
25
|
+
var poshmark_2 = require("./poshmark");
|
|
26
|
+
Object.defineProperty(exports, "PoshmarkMarketplace", { enumerable: true, get: function () { return poshmark_2.PoshmarkMarketplace; } });
|
|
20
27
|
// Registry of all available marketplaces
|
|
21
28
|
const marketplaces = new Map();
|
|
22
29
|
// All known marketplace constructors
|
|
23
30
|
const allMarketplaces = {
|
|
24
31
|
facebook: () => new facebook_1.FacebookMarketplace(),
|
|
25
32
|
ebay: () => new ebay_1.EbayMarketplace(),
|
|
33
|
+
depop: () => new depop_1.DepopMarketplace(),
|
|
34
|
+
poshmark: () => new poshmark_1.PoshmarkMarketplace(),
|
|
26
35
|
};
|
|
27
36
|
// Register marketplaces based on MARKETPLACES env var (comma-separated).
|
|
28
37
|
// If not set, all marketplaces are enabled by default.
|
|
@@ -39,6 +48,14 @@ function initializeMarketplaces() {
|
|
|
39
48
|
console.error('eBay marketplace enabled but EBAY_CLIENT_ID/EBAY_CLIENT_SECRET not set — skipping');
|
|
40
49
|
continue;
|
|
41
50
|
}
|
|
51
|
+
if (name === 'depop' && !(0, browser_1.findChrome)()) {
|
|
52
|
+
console.error('Depop marketplace enabled but Chrome/Chromium not found — skipping');
|
|
53
|
+
continue;
|
|
54
|
+
}
|
|
55
|
+
if (name === 'poshmark' && !(0, browser_1.findChrome)()) {
|
|
56
|
+
console.error('Poshmark marketplace enabled but Chrome/Chromium not found — skipping');
|
|
57
|
+
continue;
|
|
58
|
+
}
|
|
42
59
|
registerMarketplace(factory());
|
|
43
60
|
}
|
|
44
61
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/marketplaces/index.ts"],"names":[],"mappings":";AAAA;;GAEG;;;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/marketplaces/index.ts"],"names":[],"mappings":";AAAA;;GAEG;;;AA4BH,wDAwBC;AAED,kDAEC;AAED,wCAEC;AAED,gDAEC;AAED,oDAEC;AAjED,yCAAiD;AACjD,iCAAyC;AACzC,mCAA2C;AAC3C,yCAAiD;AACjD,wCAAwC;AAExC,+BAAsD;AAAhC,uGAAA,eAAe,OAAA;AACrC,uCAAiD;AAAxC,+GAAA,mBAAmB,OAAA;AAC5B,+BAAyC;AAAhC,uGAAA,eAAe,OAAA;AACxB,iCAA2C;AAAlC,yGAAA,gBAAgB,OAAA;AACzB,uCAAiD;AAAxC,+GAAA,mBAAmB,OAAA;AAE5B,yCAAyC;AACzC,MAAM,YAAY,GAA6B,IAAI,GAAG,EAAE,CAAC;AAEzD,qCAAqC;AACrC,MAAM,eAAe,GAAsC;IACzD,QAAQ,EAAE,GAAG,EAAE,CAAC,IAAI,8BAAmB,EAAE;IACzC,IAAI,EAAE,GAAG,EAAE,CAAC,IAAI,sBAAe,EAAE;IACjC,KAAK,EAAE,GAAG,EAAE,CAAC,IAAI,wBAAgB,EAAE;IACnC,QAAQ,EAAE,GAAG,EAAE,CAAC,IAAI,8BAAmB,EAAE;CAC1C,CAAC;AAEF,yEAAyE;AACzE,uDAAuD;AACvD,SAAgB,sBAAsB;IACpC,MAAM,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC,YAAY,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;IACtG,MAAM,OAAO,GAAG,OAAO,IAAI,MAAM,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;IAExD,KAAK,MAAM,IAAI,IAAI,OAAO,EAAE,CAAC;QAC3B,MAAM,OAAO,GAAG,eAAe,CAAC,IAAI,CAAC,CAAC;QACtC,IAAI,CAAC,OAAO,EAAE,CAAC;YACb,OAAO,CAAC,KAAK,CAAC,wBAAwB,IAAI,8BAA8B,CAAC,CAAC;YAC1E,SAAS;QACX,CAAC;QACD,IAAI,IAAI,KAAK,MAAM,IAAI,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,cAAc,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,kBAAkB,CAAC,EAAE,CAAC;YACxF,OAAO,CAAC,KAAK,CAAC,mFAAmF,CAAC,CAAC;YACnG,SAAS;QACX,CAAC;QACD,IAAI,IAAI,KAAK,OAAO,IAAI,CAAC,IAAA,oBAAU,GAAE,EAAE,CAAC;YACtC,OAAO,CAAC,KAAK,CAAC,oEAAoE,CAAC,CAAC;YACpF,SAAS;QACX,CAAC;QACD,IAAI,IAAI,KAAK,UAAU,IAAI,CAAC,IAAA,oBAAU,GAAE,EAAE,CAAC;YACzC,OAAO,CAAC,KAAK,CAAC,uEAAuE,CAAC,CAAC;YACvF,SAAS;QACX,CAAC;QACD,mBAAmB,CAAC,OAAO,EAAE,CAAC,CAAC;IACjC,CAAC;AACH,CAAC;AAED,SAAgB,mBAAmB,CAAC,WAAwB;IAC1D,YAAY,CAAC,GAAG,CAAC,WAAW,CAAC,IAAI,EAAE,WAAW,CAAC,CAAC;AAClD,CAAC;AAED,SAAgB,cAAc,CAAC,IAAY;IACzC,OAAO,YAAY,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;AAChC,CAAC;AAED,SAAgB,kBAAkB;IAChC,OAAO,KAAK,CAAC,IAAI,CAAC,YAAY,CAAC,MAAM,EAAE,CAAC,CAAC;AAC3C,CAAC;AAED,SAAgB,oBAAoB;IAClC,OAAO,KAAK,CAAC,IAAI,CAAC,YAAY,CAAC,IAAI,EAAE,CAAC,CAAC;AACzC,CAAC"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Poshmark Marketplace implementation
|
|
3
|
+
*
|
|
4
|
+
* Uses a headless browser to bypass anti-scraping measures,
|
|
5
|
+
* then intercepts Poshmark's internal API responses for clean JSON data.
|
|
6
|
+
* Falls back to DOM extraction if API interception fails.
|
|
7
|
+
* No authentication required for public search.
|
|
8
|
+
*/
|
|
9
|
+
import { BaseMarketplace } from './base';
|
|
10
|
+
import { SearchParams, SearchResult, ListingDetails } from '../types';
|
|
11
|
+
export declare class PoshmarkMarketplace extends BaseMarketplace {
|
|
12
|
+
readonly name = "poshmark";
|
|
13
|
+
readonly displayName = "Poshmark";
|
|
14
|
+
readonly requiresAuth = false;
|
|
15
|
+
search(params: SearchParams): Promise<SearchResult>;
|
|
16
|
+
getListingDetails(listingId: string): Promise<ListingDetails>;
|
|
17
|
+
healthCheck(): Promise<boolean>;
|
|
18
|
+
private buildSearchUrl;
|
|
19
|
+
private parseApiResponse;
|
|
20
|
+
private parseDomResults;
|
|
21
|
+
private humanizeSlug;
|
|
22
|
+
}
|
|
23
|
+
//# sourceMappingURL=poshmark.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"poshmark.d.ts","sourceRoot":"","sources":["../../src/marketplaces/poshmark.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAE,eAAe,EAAE,MAAM,QAAQ,CAAC;AACzC,OAAO,EAAE,YAAY,EAAE,YAAY,EAAW,cAAc,EAAE,MAAM,UAAU,CAAC;AA4B/E,qBAAa,mBAAoB,SAAQ,eAAe;IACtD,QAAQ,CAAC,IAAI,cAAc;IAC3B,QAAQ,CAAC,WAAW,cAAc;IAClC,QAAQ,CAAC,YAAY,SAAS;IAExB,MAAM,CAAC,MAAM,EAAE,YAAY,GAAG,OAAO,CAAC,YAAY,CAAC;IAgDnD,iBAAiB,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,CAAC;IA0D7D,WAAW,IAAI,OAAO,CAAC,OAAO,CAAC;IAWrC,OAAO,CAAC,cAAc;IAgDtB,OAAO,CAAC,gBAAgB;YAmDV,eAAe;IAsG7B,OAAO,CAAC,YAAY;CAUrB"}
|
|
@@ -0,0 +1,345 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Poshmark Marketplace implementation
|
|
4
|
+
*
|
|
5
|
+
* Uses a headless browser to bypass anti-scraping measures,
|
|
6
|
+
* then intercepts Poshmark's internal API responses for clean JSON data.
|
|
7
|
+
* Falls back to DOM extraction if API interception fails.
|
|
8
|
+
* No authentication required for public search.
|
|
9
|
+
*/
|
|
10
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
11
|
+
exports.PoshmarkMarketplace = void 0;
|
|
12
|
+
const base_1 = require("./base");
|
|
13
|
+
const browser_1 = require("../browser");
|
|
14
|
+
const POSHMARK_BASE = 'https://poshmark.com';
|
|
15
|
+
const SEARCH_URL = `${POSHMARK_BASE}/search`;
|
|
16
|
+
const LISTING_URL = `${POSHMARK_BASE}/listing/`;
|
|
17
|
+
// Poshmark's internal REST API path fragment for response interception
|
|
18
|
+
const VM_REST_PATTERN = '/vm-rest/';
|
|
19
|
+
// Map SearchParams condition values to Poshmark's condition identifiers
|
|
20
|
+
const CONDITION_MAP = {
|
|
21
|
+
new: 'nwt', // New With Tags
|
|
22
|
+
like_new: 'nwot', // New Without Tags
|
|
23
|
+
good: 'good',
|
|
24
|
+
fair: 'fair',
|
|
25
|
+
};
|
|
26
|
+
// Map SearchParams sort values to Poshmark URL sort_by values
|
|
27
|
+
const SORT_MAP = {
|
|
28
|
+
relevance: 'relevance',
|
|
29
|
+
newest: 'added_desc',
|
|
30
|
+
price_low_to_high: 'price_asc',
|
|
31
|
+
price_high_to_low: 'price_desc',
|
|
32
|
+
most_popular: 'like_count',
|
|
33
|
+
};
|
|
34
|
+
class PoshmarkMarketplace extends base_1.BaseMarketplace {
|
|
35
|
+
name = 'poshmark';
|
|
36
|
+
displayName = 'Poshmark';
|
|
37
|
+
requiresAuth = false;
|
|
38
|
+
async search(params) {
|
|
39
|
+
const { query, maxPrice, minPrice, limit = 48, sort, condition, category, brand, department, sizes, colors } = params;
|
|
40
|
+
let page;
|
|
41
|
+
try {
|
|
42
|
+
page = await (0, browser_1.newPage)();
|
|
43
|
+
// Prepare to intercept vm-rest API responses
|
|
44
|
+
let apiData = null;
|
|
45
|
+
page.on('response', async (response) => {
|
|
46
|
+
try {
|
|
47
|
+
const url = response.url();
|
|
48
|
+
if (url.includes(VM_REST_PATTERN) && response.status() === 200) {
|
|
49
|
+
const contentType = response.headers()['content-type'] || '';
|
|
50
|
+
if (contentType.includes('application/json')) {
|
|
51
|
+
apiData = await response.json();
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
catch { /* ignore parse failures */ }
|
|
56
|
+
});
|
|
57
|
+
// Build search URL with filters
|
|
58
|
+
const searchUrl = this.buildSearchUrl(query, {
|
|
59
|
+
sort, condition, minPrice, maxPrice, category, brand, department, sizes, colors,
|
|
60
|
+
});
|
|
61
|
+
await page.goto(searchUrl, { waitUntil: 'networkidle2', timeout: 30000 });
|
|
62
|
+
// Small buffer for late API responses
|
|
63
|
+
if (!apiData) {
|
|
64
|
+
await new Promise(r => setTimeout(r, 2000));
|
|
65
|
+
}
|
|
66
|
+
// Strategy 1: Parse intercepted API data
|
|
67
|
+
if (apiData?.data && Array.isArray(apiData.data)) {
|
|
68
|
+
return this.parseApiResponse(apiData, limit);
|
|
69
|
+
}
|
|
70
|
+
// Strategy 2: Fall back to DOM extraction
|
|
71
|
+
return await this.parseDomResults(page, limit);
|
|
72
|
+
}
|
|
73
|
+
catch (error) {
|
|
74
|
+
return this.createError(`Poshmark search failed: ${error}`);
|
|
75
|
+
}
|
|
76
|
+
finally {
|
|
77
|
+
if (page)
|
|
78
|
+
await page.close().catch(() => { });
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
async getListingDetails(listingId) {
|
|
82
|
+
let page;
|
|
83
|
+
try {
|
|
84
|
+
page = await (0, browser_1.newPage)();
|
|
85
|
+
await page.goto(`${LISTING_URL}${listingId}`, {
|
|
86
|
+
waitUntil: 'networkidle2',
|
|
87
|
+
timeout: 30000,
|
|
88
|
+
});
|
|
89
|
+
// Extract JSON-LD structured data (Product schema)
|
|
90
|
+
const jsonLd = await page.evaluate(`
|
|
91
|
+
(() => {
|
|
92
|
+
const el = document.querySelector('script[type="application/ld+json"]');
|
|
93
|
+
if (!el) return null;
|
|
94
|
+
try { return JSON.parse(el.textContent || ''); } catch { return null; }
|
|
95
|
+
})()
|
|
96
|
+
`);
|
|
97
|
+
// Extract additional details from DOM
|
|
98
|
+
const domData = await page.evaluate(`
|
|
99
|
+
(() => {
|
|
100
|
+
const descEl = document.querySelector('[data-test="listing-description"]')
|
|
101
|
+
|| document.querySelector('.listing__description');
|
|
102
|
+
const description = descEl ? descEl.textContent.trim() : undefined;
|
|
103
|
+
|
|
104
|
+
const images = [];
|
|
105
|
+
document.querySelectorAll('[data-test="listing-image"] img, .listing__slideshow img, .slideshow img').forEach(function(img) {
|
|
106
|
+
const src = img.getAttribute('src');
|
|
107
|
+
if (src && !src.includes('placeholder')) images.push(src);
|
|
108
|
+
});
|
|
109
|
+
|
|
110
|
+
const sellerEl = document.querySelector('[data-test="listing-seller-name"]')
|
|
111
|
+
|| document.querySelector('.listing__seller-name')
|
|
112
|
+
|| document.querySelector('.closet-header__name a');
|
|
113
|
+
const seller = sellerEl ? sellerEl.textContent.trim() : undefined;
|
|
114
|
+
|
|
115
|
+
return { description: description, images: images, seller: seller };
|
|
116
|
+
})()
|
|
117
|
+
`);
|
|
118
|
+
// Merge JSON-LD and DOM data
|
|
119
|
+
const images = jsonLd?.image
|
|
120
|
+
? (Array.isArray(jsonLd.image) ? jsonLd.image : [jsonLd.image])
|
|
121
|
+
: domData.images || [];
|
|
122
|
+
return {
|
|
123
|
+
id: listingId,
|
|
124
|
+
description: jsonLd?.description ?? domData.description ?? undefined,
|
|
125
|
+
images,
|
|
126
|
+
seller: domData.seller ?? undefined,
|
|
127
|
+
isShippingOffered: true, // Poshmark always includes shipping
|
|
128
|
+
url: `${LISTING_URL}${listingId}`,
|
|
129
|
+
};
|
|
130
|
+
}
|
|
131
|
+
finally {
|
|
132
|
+
if (page)
|
|
133
|
+
await page.close().catch(() => { });
|
|
134
|
+
}
|
|
135
|
+
}
|
|
136
|
+
async healthCheck() {
|
|
137
|
+
try {
|
|
138
|
+
const result = await this.search({ query: 'test', limit: 1 });
|
|
139
|
+
return result.success;
|
|
140
|
+
}
|
|
141
|
+
catch {
|
|
142
|
+
return false;
|
|
143
|
+
}
|
|
144
|
+
}
|
|
145
|
+
// ── Private helpers ──────────────────────────────────────────────
|
|
146
|
+
buildSearchUrl(query, filters) {
|
|
147
|
+
const url = new URL(SEARCH_URL);
|
|
148
|
+
url.searchParams.set('query', query);
|
|
149
|
+
url.searchParams.set('type', 'listings');
|
|
150
|
+
url.searchParams.set('src', 'dir');
|
|
151
|
+
if (filters.sort) {
|
|
152
|
+
const poshSort = SORT_MAP[filters.sort];
|
|
153
|
+
if (poshSort)
|
|
154
|
+
url.searchParams.set('sort_by', poshSort);
|
|
155
|
+
}
|
|
156
|
+
if (filters.condition && filters.condition !== 'any') {
|
|
157
|
+
const poshCondition = CONDITION_MAP[filters.condition];
|
|
158
|
+
if (poshCondition)
|
|
159
|
+
url.searchParams.set('condition', poshCondition);
|
|
160
|
+
}
|
|
161
|
+
if (filters.minPrice != null || filters.maxPrice != null) {
|
|
162
|
+
const min = filters.minPrice ?? 0;
|
|
163
|
+
const max = filters.maxPrice ?? '';
|
|
164
|
+
url.searchParams.append('price[]', `${min}-${max}`);
|
|
165
|
+
}
|
|
166
|
+
if (filters.department) {
|
|
167
|
+
url.searchParams.set('department', filters.department);
|
|
168
|
+
}
|
|
169
|
+
if (filters.brand) {
|
|
170
|
+
url.searchParams.append('brand[]', filters.brand);
|
|
171
|
+
}
|
|
172
|
+
if (filters.category) {
|
|
173
|
+
url.searchParams.set('category_v2', filters.category);
|
|
174
|
+
}
|
|
175
|
+
if (filters.sizes) {
|
|
176
|
+
for (const s of filters.sizes)
|
|
177
|
+
url.searchParams.append('size[]', s);
|
|
178
|
+
}
|
|
179
|
+
if (filters.colors) {
|
|
180
|
+
for (const c of filters.colors)
|
|
181
|
+
url.searchParams.append('color[]', c);
|
|
182
|
+
}
|
|
183
|
+
return url.toString();
|
|
184
|
+
}
|
|
185
|
+
parseApiResponse(apiData, limit) {
|
|
186
|
+
const items = apiData.data || [];
|
|
187
|
+
const listings = [];
|
|
188
|
+
for (const item of items) {
|
|
189
|
+
if (listings.length >= limit)
|
|
190
|
+
break;
|
|
191
|
+
try {
|
|
192
|
+
const id = item.id || item.post_id;
|
|
193
|
+
if (!id)
|
|
194
|
+
continue;
|
|
195
|
+
const priceAmount = item.price_amount?.val
|
|
196
|
+
?? item.original_price_amount?.val
|
|
197
|
+
?? item.price;
|
|
198
|
+
const priceStr = priceAmount != null ? `$${priceAmount}` : 'Price not listed';
|
|
199
|
+
const priceNumeric = priceAmount != null ? parseFloat(String(priceAmount)) : undefined;
|
|
200
|
+
const images = [];
|
|
201
|
+
if (item.picture_url)
|
|
202
|
+
images.push(item.picture_url);
|
|
203
|
+
if (Array.isArray(item.pictures)) {
|
|
204
|
+
for (const pic of item.pictures) {
|
|
205
|
+
const picUrl = typeof pic === 'string' ? pic : pic?.url;
|
|
206
|
+
if (picUrl && !images.includes(picUrl))
|
|
207
|
+
images.push(picUrl);
|
|
208
|
+
}
|
|
209
|
+
}
|
|
210
|
+
listings.push({
|
|
211
|
+
id: String(id),
|
|
212
|
+
title: item.title || 'Untitled Listing',
|
|
213
|
+
price: priceStr,
|
|
214
|
+
priceNumeric,
|
|
215
|
+
currency: '$',
|
|
216
|
+
url: `${LISTING_URL}${item.title_slug || id}`,
|
|
217
|
+
images: images.length > 0 ? images : undefined,
|
|
218
|
+
seller: item.creator_username,
|
|
219
|
+
condition: item.condition,
|
|
220
|
+
marketplace: this.name,
|
|
221
|
+
scrapedAt: new Date().toISOString(),
|
|
222
|
+
});
|
|
223
|
+
}
|
|
224
|
+
catch {
|
|
225
|
+
continue;
|
|
226
|
+
}
|
|
227
|
+
}
|
|
228
|
+
return {
|
|
229
|
+
marketplace: this.name,
|
|
230
|
+
success: true,
|
|
231
|
+
listings,
|
|
232
|
+
totalFound: apiData.total_count ?? listings.length,
|
|
233
|
+
};
|
|
234
|
+
}
|
|
235
|
+
async parseDomResults(page, limit) {
|
|
236
|
+
// Wait for listing cards to render
|
|
237
|
+
try {
|
|
238
|
+
await page.waitForSelector('.card', { timeout: 10000 });
|
|
239
|
+
}
|
|
240
|
+
catch {
|
|
241
|
+
return this.createError('Poshmark: No listings found or page failed to load');
|
|
242
|
+
}
|
|
243
|
+
const rawListings = await page.evaluate(`
|
|
244
|
+
(() => {
|
|
245
|
+
var cards = document.querySelectorAll('.card');
|
|
246
|
+
var results = [];
|
|
247
|
+
|
|
248
|
+
cards.forEach(function(card) {
|
|
249
|
+
try {
|
|
250
|
+
// Covershot link has the listing href and image
|
|
251
|
+
var covershot = card.querySelector('a.tile__covershot');
|
|
252
|
+
if (!covershot) return;
|
|
253
|
+
var href = covershot.getAttribute('href') || '';
|
|
254
|
+
if (href.indexOf('/listing/') === -1) return;
|
|
255
|
+
|
|
256
|
+
// Image from picture > img
|
|
257
|
+
var imgEl = covershot.querySelector('img');
|
|
258
|
+
var imgSrc = imgEl ? (imgEl.getAttribute('src') || '') : '';
|
|
259
|
+
var imgAlt = imgEl ? (imgEl.getAttribute('alt') || '') : '';
|
|
260
|
+
|
|
261
|
+
// Title from .tile__title link
|
|
262
|
+
var titleEl = card.querySelector('a.tile__title');
|
|
263
|
+
var title = titleEl ? titleEl.textContent.trim() : imgAlt;
|
|
264
|
+
|
|
265
|
+
// Price from .fw--bold span
|
|
266
|
+
var priceEl = card.querySelector('.fw--bold');
|
|
267
|
+
var price = priceEl ? priceEl.textContent.trim() : '';
|
|
268
|
+
|
|
269
|
+
// Size from .tile__details__pipe__size
|
|
270
|
+
var sizeEl = card.querySelector('.tile__details__pipe__size');
|
|
271
|
+
var size = sizeEl ? sizeEl.textContent.trim() : '';
|
|
272
|
+
|
|
273
|
+
// Brand from .tile__details__pipe__brand
|
|
274
|
+
var brandEl = card.querySelector('.tile__details__pipe__brand');
|
|
275
|
+
var brand = brandEl ? brandEl.textContent.trim() : '';
|
|
276
|
+
|
|
277
|
+
// Seller from data attribute on covershot link
|
|
278
|
+
var listerId = covershot.getAttribute('data-et-prop-lister_id') || '';
|
|
279
|
+
|
|
280
|
+
results.push({
|
|
281
|
+
href: href,
|
|
282
|
+
title: title,
|
|
283
|
+
price: price,
|
|
284
|
+
imgSrc: imgSrc,
|
|
285
|
+
brand: brand,
|
|
286
|
+
size: size,
|
|
287
|
+
seller: ''
|
|
288
|
+
});
|
|
289
|
+
} catch(e) { /* skip */ }
|
|
290
|
+
});
|
|
291
|
+
return results;
|
|
292
|
+
})()
|
|
293
|
+
`);
|
|
294
|
+
const listings = [];
|
|
295
|
+
for (const raw of rawListings) {
|
|
296
|
+
if (listings.length >= limit)
|
|
297
|
+
break;
|
|
298
|
+
if (!raw.href || !raw.href.includes('/listing/'))
|
|
299
|
+
continue;
|
|
300
|
+
// Extract listing slug from URL: /listing/Title-Slug-hexid
|
|
301
|
+
const slug = raw.href.replace(/^.*\/listing\//, '').replace(/\/$/, '');
|
|
302
|
+
if (!slug)
|
|
303
|
+
continue;
|
|
304
|
+
const parsed = this.parsePrice(raw.price);
|
|
305
|
+
// Build title from available data
|
|
306
|
+
let title = raw.title;
|
|
307
|
+
if (!title && raw.brand) {
|
|
308
|
+
title = [raw.brand, raw.size].filter(Boolean).join(' - ');
|
|
309
|
+
}
|
|
310
|
+
if (!title) {
|
|
311
|
+
title = this.humanizeSlug(slug);
|
|
312
|
+
}
|
|
313
|
+
listings.push({
|
|
314
|
+
id: slug,
|
|
315
|
+
title,
|
|
316
|
+
price: raw.price || 'Price not listed',
|
|
317
|
+
priceNumeric: parsed?.numeric,
|
|
318
|
+
currency: parsed?.currency || '$',
|
|
319
|
+
url: `${POSHMARK_BASE}${raw.href.startsWith('/') ? '' : '/'}${raw.href}`,
|
|
320
|
+
images: raw.imgSrc ? [raw.imgSrc] : undefined,
|
|
321
|
+
seller: raw.seller || undefined,
|
|
322
|
+
marketplace: this.name,
|
|
323
|
+
scrapedAt: new Date().toISOString(),
|
|
324
|
+
});
|
|
325
|
+
}
|
|
326
|
+
return {
|
|
327
|
+
marketplace: this.name,
|
|
328
|
+
success: true,
|
|
329
|
+
listings,
|
|
330
|
+
totalFound: listings.length,
|
|
331
|
+
};
|
|
332
|
+
}
|
|
333
|
+
humanizeSlug(slug) {
|
|
334
|
+
const parts = slug.split('-');
|
|
335
|
+
// Remove trailing hex ID if present (Poshmark uses 24-char hex IDs)
|
|
336
|
+
if (parts.length > 1 && /^[a-f0-9]{24}$/i.test(parts[parts.length - 1])) {
|
|
337
|
+
parts.pop();
|
|
338
|
+
}
|
|
339
|
+
return parts
|
|
340
|
+
.map(word => word.charAt(0).toUpperCase() + word.slice(1))
|
|
341
|
+
.join(' ');
|
|
342
|
+
}
|
|
343
|
+
}
|
|
344
|
+
exports.PoshmarkMarketplace = PoshmarkMarketplace;
|
|
345
|
+
//# sourceMappingURL=poshmark.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"poshmark.js","sourceRoot":"","sources":["../../src/marketplaces/poshmark.ts"],"names":[],"mappings":";AAAA;;;;;;;GAOG;;;AAEH,iCAAyC;AAEzC,wCAAqC;AAGrC,MAAM,aAAa,GAAG,sBAAsB,CAAC;AAC7C,MAAM,UAAU,GAAG,GAAG,aAAa,SAAS,CAAC;AAC7C,MAAM,WAAW,GAAG,GAAG,aAAa,WAAW,CAAC;AAEhD,uEAAuE;AACvE,MAAM,eAAe,GAAG,WAAW,CAAC;AAEpC,wEAAwE;AACxE,MAAM,aAAa,GAA2B;IAC5C,GAAG,EAAE,KAAK,EAAS,gBAAgB;IACnC,QAAQ,EAAE,MAAM,EAAG,mBAAmB;IACtC,IAAI,EAAE,MAAM;IACZ,IAAI,EAAE,MAAM;CACb,CAAC;AAEF,8DAA8D;AAC9D,MAAM,QAAQ,GAA2B;IACvC,SAAS,EAAE,WAAW;IACtB,MAAM,EAAE,YAAY;IACpB,iBAAiB,EAAE,WAAW;IAC9B,iBAAiB,EAAE,YAAY;IAC/B,YAAY,EAAE,YAAY;CAC3B,CAAC;AAEF,MAAa,mBAAoB,SAAQ,sBAAe;IAC7C,IAAI,GAAG,UAAU,CAAC;IAClB,WAAW,GAAG,UAAU,CAAC;IACzB,YAAY,GAAG,KAAK,CAAC;IAE9B,KAAK,CAAC,MAAM,CAAC,MAAoB;QAC/B,MAAM,EAAE,KAAK,EAAE,QAAQ,EAAE,QAAQ,EAAE,KAAK,GAAG,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,QAAQ,EAAE,KAAK,EAAE,UAAU,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,MAAM,CAAC;QAEtH,IAAI,IAAsB,CAAC;QAC3B,IAAI,CAAC;YACH,IAAI,GAAG,MAAM,IAAA,iBAAO,GAAE,CAAC;YAEvB,6CAA6C;YAC7C,IAAI,OAAO,GAAQ,IAAI,CAAC;YACxB,IAAI,CAAC,EAAE,CAAC,UAAU,EAAE,KAAK,EAAE,QAAQ,EAAE,EAAE;gBACrC,IAAI,CAAC;oBACH,MAAM,GAAG,GAAG,QAAQ,CAAC,GAAG,EAAE,CAAC;oBAC3B,IAAI,GAAG,CAAC,QAAQ,CAAC,eAAe,CAAC,IAAI,QAAQ,CAAC,MAAM,EAAE,KAAK,GAAG,EAAE,CAAC;wBAC/D,MAAM,WAAW,GAAG,QAAQ,CAAC,OAAO,EAAE,CAAC,cAAc,CAAC,IAAI,EAAE,CAAC;wBAC7D,IAAI,WAAW,CAAC,QAAQ,CAAC,kBAAkB,CAAC,EAAE,CAAC;4BAC7C,OAAO,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;wBAClC,CAAC;oBACH,CAAC;gBACH,CAAC;gBAAC,MAAM,CAAC,CAAC,2BAA2B,CAAC,CAAC;YACzC,CAAC,CAAC,CAAC;YAEH,gCAAgC;YAChC,MAAM,SAAS,GAAG,IAAI,CAAC,cAAc,CAAC,KAAK,EAAE;gBAC3C,IAAI,EAAE,SAAS,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,KAAK,EAAE,UAAU,EAAE,KAAK,EAAE,MAAM;aAChF,CAAC,CAAC;YAEH,MAAM,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,EAAE,SAAS,EAAE,cAAc,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC,CAAC;YAE1E,sCAAsC;YACtC,IAAI,CAAC,OAAO,EAAE,CAAC;gBACb,MAAM,IAAI,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,UAAU,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC;YAC9C,CAAC;YAED,yCAAyC;YACzC,IAAI,OAAO,EAAE,IAAI,IAAI,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC;gBACjD,OAAO,IAAI,CAAC,gBAAgB,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;YAC/C,CAAC;YAED,0CAA0C;YAC1C,OAAO,MAAM,IAAI,CAAC,eAAe,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;QAEjD,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,IAAI,CAAC,WAAW,CAAC,2BAA2B,KAAK,EAAE,CAAC,CAAC;QAC9D,CAAC;gBAAS,CAAC;YACT,IAAI,IAAI;gBAAE,MAAM,IAAI,CAAC,KAAK,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC;QAC/C,CAAC;IACH,CAAC;IAED,KAAK,CAAC,iBAAiB,CAAC,SAAiB;QACvC,IAAI,IAAsB,CAAC;QAC3B,IAAI,CAAC;YACH,IAAI,GAAG,MAAM,IAAA,iBAAO,GAAE,CAAC;YACvB,MAAM,IAAI,CAAC,IAAI,CAAC,GAAG,WAAW,GAAG,SAAS,EAAE,EAAE;gBAC5C,SAAS,EAAE,cAAc;gBACzB,OAAO,EAAE,KAAK;aACf,CAAC,CAAC;YAEH,mDAAmD;YACnD,MAAM,MAAM,GAAQ,MAAM,IAAI,CAAC,QAAQ,CAAC;;;;;;OAMvC,CAAC,CAAC;YAEH,sCAAsC;YACtC,MAAM,OAAO,GAAQ,MAAM,IAAI,CAAC,QAAQ,CAAC;;;;;;;;;;;;;;;;;;;OAmBxC,CAAC,CAAC;YAEH,6BAA6B;YAC7B,MAAM,MAAM,GAAa,MAAM,EAAE,KAAK;gBACpC,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;gBAC/D,CAAC,CAAC,OAAO,CAAC,MAAM,IAAI,EAAE,CAAC;YAEzB,OAAO;gBACL,EAAE,EAAE,SAAS;gBACb,WAAW,EAAE,MAAM,EAAE,WAAW,IAAI,OAAO,CAAC,WAAW,IAAI,SAAS;gBACpE,MAAM;gBACN,MAAM,EAAE,OAAO,CAAC,MAAM,IAAI,SAAS;gBACnC,iBAAiB,EAAE,IAAI,EAAE,oCAAoC;gBAC7D,GAAG,EAAE,GAAG,WAAW,GAAG,SAAS,EAAE;aAClC,CAAC;QACJ,CAAC;gBAAS,CAAC;YACT,IAAI,IAAI;gBAAE,MAAM,IAAI,CAAC,KAAK,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC;QAC/C,CAAC;IACH,CAAC;IAED,KAAK,CAAC,WAAW;QACf,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC,CAAC;YAC9D,OAAO,MAAM,CAAC,OAAO,CAAC;QACxB,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,KAAK,CAAC;QACf,CAAC;IACH,CAAC;IAED,oEAAoE;IAE5D,cAAc,CAAC,KAAa,EAAE,OAIrC;QACC,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,UAAU,CAAC,CAAC;QAChC,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;QACrC,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;QACzC,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;QAEnC,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC;YACjB,MAAM,QAAQ,GAAG,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;YACxC,IAAI,QAAQ;gBAAE,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC;QAC1D,CAAC;QAED,IAAI,OAAO,CAAC,SAAS,IAAI,OAAO,CAAC,SAAS,KAAK,KAAK,EAAE,CAAC;YACrD,MAAM,aAAa,GAAG,aAAa,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;YACvD,IAAI,aAAa;gBAAE,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,WAAW,EAAE,aAAa,CAAC,CAAC;QACtE,CAAC;QAED,IAAI,OAAO,CAAC,QAAQ,IAAI,IAAI,IAAI,OAAO,CAAC,QAAQ,IAAI,IAAI,EAAE,CAAC;YACzD,MAAM,GAAG,GAAG,OAAO,CAAC,QAAQ,IAAI,CAAC,CAAC;YAClC,MAAM,GAAG,GAAG,OAAO,CAAC,QAAQ,IAAI,EAAE,CAAC;YACnC,GAAG,CAAC,YAAY,CAAC,MAAM,CAAC,SAAS,EAAE,GAAG,GAAG,IAAI,GAAG,EAAE,CAAC,CAAC;QACtD,CAAC;QAED,IAAI,OAAO,CAAC,UAAU,EAAE,CAAC;YACvB,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,YAAY,EAAE,OAAO,CAAC,UAAU,CAAC,CAAC;QACzD,CAAC;QAED,IAAI,OAAO,CAAC,KAAK,EAAE,CAAC;YAClB,GAAG,CAAC,YAAY,CAAC,MAAM,CAAC,SAAS,EAAE,OAAO,CAAC,KAAK,CAAC,CAAC;QACpD,CAAC;QAED,IAAI,OAAO,CAAC,QAAQ,EAAE,CAAC;YACrB,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,aAAa,EAAE,OAAO,CAAC,QAAQ,CAAC,CAAC;QACxD,CAAC;QAED,IAAI,OAAO,CAAC,KAAK,EAAE,CAAC;YAClB,KAAK,MAAM,CAAC,IAAI,OAAO,CAAC,KAAK;gBAAE,GAAG,CAAC,YAAY,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC;QACtE,CAAC;QACD,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;YACnB,KAAK,MAAM,CAAC,IAAI,OAAO,CAAC,MAAM;gBAAE,GAAG,CAAC,YAAY,CAAC,MAAM,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC;QACxE,CAAC;QAED,OAAO,GAAG,CAAC,QAAQ,EAAE,CAAC;IACxB,CAAC;IAEO,gBAAgB,CAAC,OAAY,EAAE,KAAa;QAClD,MAAM,KAAK,GAAU,OAAO,CAAC,IAAI,IAAI,EAAE,CAAC;QACxC,MAAM,QAAQ,GAAc,EAAE,CAAC;QAE/B,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;YACzB,IAAI,QAAQ,CAAC,MAAM,IAAI,KAAK;gBAAE,MAAM;YACpC,IAAI,CAAC;gBACH,MAAM,EAAE,GAAG,IAAI,CAAC,EAAE,IAAI,IAAI,CAAC,OAAO,CAAC;gBACnC,IAAI,CAAC,EAAE;oBAAE,SAAS;gBAElB,MAAM,WAAW,GAAG,IAAI,CAAC,YAAY,EAAE,GAAG;uBACrC,IAAI,CAAC,qBAAqB,EAAE,GAAG;uBAC/B,IAAI,CAAC,KAAK,CAAC;gBAChB,MAAM,QAAQ,GAAG,WAAW,IAAI,IAAI,CAAC,CAAC,CAAC,IAAI,WAAW,EAAE,CAAC,CAAC,CAAC,kBAAkB,CAAC;gBAC9E,MAAM,YAAY,GAAG,WAAW,IAAI,IAAI,CAAC,CAAC,CAAC,UAAU,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;gBAEvF,MAAM,MAAM,GAAa,EAAE,CAAC;gBAC5B,IAAI,IAAI,CAAC,WAAW;oBAAE,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;gBACpD,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC;oBACjC,KAAK,MAAM,GAAG,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;wBAChC,MAAM,MAAM,GAAG,OAAO,GAAG,KAAK,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE,GAAG,CAAC;wBACxD,IAAI,MAAM,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC;4BAAE,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;oBAC9D,CAAC;gBACH,CAAC;gBAED,QAAQ,CAAC,IAAI,CAAC;oBACZ,EAAE,EAAE,MAAM,CAAC,EAAE,CAAC;oBACd,KAAK,EAAE,IAAI,CAAC,KAAK,IAAI,kBAAkB;oBACvC,KAAK,EAAE,QAAQ;oBACf,YAAY;oBACZ,QAAQ,EAAE,GAAG;oBACb,GAAG,EAAE,GAAG,WAAW,GAAG,IAAI,CAAC,UAAU,IAAI,EAAE,EAAE;oBAC7C,MAAM,EAAE,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS;oBAC9C,MAAM,EAAE,IAAI,CAAC,gBAAgB;oBAC7B,SAAS,EAAE,IAAI,CAAC,SAAS;oBACzB,WAAW,EAAE,IAAI,CAAC,IAAI;oBACtB,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;iBACpC,CAAC,CAAC;YACL,CAAC;YAAC,MAAM,CAAC;gBACP,SAAS;YACX,CAAC;QACH,CAAC;QAED,OAAO;YACL,WAAW,EAAE,IAAI,CAAC,IAAI;YACtB,OAAO,EAAE,IAAI;YACb,QAAQ;YACR,UAAU,EAAE,OAAO,CAAC,WAAW,IAAI,QAAQ,CAAC,MAAM;SACnD,CAAC;IACJ,CAAC;IAEO,KAAK,CAAC,eAAe,CAAC,IAAU,EAAE,KAAa;QACrD,mCAAmC;QACnC,IAAI,CAAC;YACH,MAAM,IAAI,CAAC,eAAe,CAAC,OAAO,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC,CAAC;QAC1D,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,IAAI,CAAC,WAAW,CAAC,oDAAoD,CAAC,CAAC;QAChF,CAAC;QAED,MAAM,WAAW,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;KAkDvC,CAAC,CAAC;QAEH,MAAM,QAAQ,GAAc,EAAE,CAAC;QAC/B,KAAK,MAAM,GAAG,IAAK,WAAqB,EAAE,CAAC;YACzC,IAAI,QAAQ,CAAC,MAAM,IAAI,KAAK;gBAAE,MAAM;YACpC,IAAI,CAAC,GAAG,CAAC,IAAI,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC;gBAAE,SAAS;YAE3D,2DAA2D;YAC3D,MAAM,IAAI,GAAG,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,gBAAgB,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;YACvE,IAAI,CAAC,IAAI;gBAAE,SAAS;YAEpB,MAAM,MAAM,GAAG,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;YAE1C,kCAAkC;YAClC,IAAI,KAAK,GAAG,GAAG,CAAC,KAAK,CAAC;YACtB,IAAI,CAAC,KAAK,IAAI,GAAG,CAAC,KAAK,EAAE,CAAC;gBACxB,KAAK,GAAG,CAAC,GAAG,CAAC,KAAK,EAAE,GAAG,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YAC5D,CAAC;YACD,IAAI,CAAC,KAAK,EAAE,CAAC;gBACX,KAAK,GAAG,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC;YAClC,CAAC;YAED,QAAQ,CAAC,IAAI,CAAC;gBACZ,EAAE,EAAE,IAAI;gBACR,KAAK;gBACL,KAAK,EAAE,GAAG,CAAC,KAAK,IAAI,kBAAkB;gBACtC,YAAY,EAAE,MAAM,EAAE,OAAO;gBAC7B,QAAQ,EAAE,MAAM,EAAE,QAAQ,IAAI,GAAG;gBACjC,GAAG,EAAE,GAAG,aAAa,GAAG,GAAG,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,GAAG,GAAG,CAAC,IAAI,EAAE;gBACxE,MAAM,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,SAAS;gBAC7C,MAAM,EAAE,GAAG,CAAC,MAAM,IAAI,SAAS;gBAC/B,WAAW,EAAE,IAAI,CAAC,IAAI;gBACtB,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;aACpC,CAAC,CAAC;QACL,CAAC;QAED,OAAO;YACL,WAAW,EAAE,IAAI,CAAC,IAAI;YACtB,OAAO,EAAE,IAAI;YACb,QAAQ;YACR,UAAU,EAAE,QAAQ,CAAC,MAAM;SAC5B,CAAC;IACJ,CAAC;IAEO,YAAY,CAAC,IAAY;QAC/B,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QAC9B,oEAAoE;QACpE,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,IAAI,iBAAiB,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;YACxE,KAAK,CAAC,GAAG,EAAE,CAAC;QACd,CAAC;QACD,OAAO,KAAK;aACT,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;aACzD,IAAI,CAAC,GAAG,CAAC,CAAC;IACf,CAAC;CACF;AA7UD,kDA6UC"}
|
package/dist/types.d.ts
CHANGED
|
@@ -22,9 +22,15 @@ export interface SearchParams {
|
|
|
22
22
|
maxPrice?: number;
|
|
23
23
|
minPrice?: number;
|
|
24
24
|
radius?: number;
|
|
25
|
-
condition?: 'new' | 'like_new' | 'good' | 'fair' | 'any';
|
|
25
|
+
condition?: 'new' | 'like_new' | 'excellent' | 'good' | 'fair' | 'used' | 'any';
|
|
26
26
|
limit?: number;
|
|
27
27
|
showSold?: boolean;
|
|
28
|
+
sort?: 'relevance' | 'newest' | 'price_low_to_high' | 'price_high_to_low' | 'most_popular';
|
|
29
|
+
category?: string;
|
|
30
|
+
brand?: string;
|
|
31
|
+
department?: string;
|
|
32
|
+
sizes?: string[];
|
|
33
|
+
colors?: string[];
|
|
28
34
|
}
|
|
29
35
|
export interface SearchResult {
|
|
30
36
|
marketplace: string;
|
package/dist/types.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,MAAM,WAAW,OAAO;IACtB,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,GAAG,EAAE,MAAM,CAAC;IACZ,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;IAClB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,YAAY;IAC3B,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,SAAS,CAAC,EAAE,KAAK,GAAG,UAAU,GAAG,MAAM,GAAG,MAAM,GAAG,KAAK,CAAC;
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,MAAM,WAAW,OAAO;IACtB,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,GAAG,EAAE,MAAM,CAAC;IACZ,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;IAClB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,YAAY;IAC3B,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,SAAS,CAAC,EAAE,KAAK,GAAG,UAAU,GAAG,WAAW,GAAG,MAAM,GAAG,MAAM,GAAG,MAAM,GAAG,KAAK,CAAC;IAChF,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,IAAI,CAAC,EAAE,WAAW,GAAG,QAAQ,GAAG,mBAAmB,GAAG,mBAAmB,GAAG,cAAc,CAAC;IAC3F,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC;IACjB,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;CACnB;AAED,MAAM,WAAW,YAAY;IAC3B,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,OAAO,CAAC;IACjB,QAAQ,EAAE,OAAO,EAAE,CAAC;IACpB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,cAAc;IAC7B,EAAE,EAAE,MAAM,CAAC;IACX,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,cAAc,CAAC,EAAE;QAAE,QAAQ,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,CAAA;KAAE,CAAC;IACzD,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,aAAa,CAAC,EAAE,MAAM,EAAE,CAAC;IACzB,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAC5B,GAAG,EAAE,MAAM,CAAC;CACb;AAED,MAAM,WAAW,iBAAiB;IAChC,OAAO,EAAE,OAAO,CAAC;IACjB,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,mBAAmB;IAClC,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,EAAE,MAAM,CAAC;CACd"}
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "secondhand-mcp",
|
|
3
|
-
"version": "0.
|
|
4
|
-
"description": "MCP server for searching
|
|
3
|
+
"version": "0.3.0",
|
|
4
|
+
"description": "MCP server for searching secondhand marketplaces — Facebook Marketplace, eBay, and Depop. Search listings, filter by price/category/condition, and get full details with photos.",
|
|
5
5
|
"main": "dist/index.js",
|
|
6
6
|
"types": "dist/index.d.ts",
|
|
7
7
|
"bin": {
|
|
@@ -19,30 +19,37 @@
|
|
|
19
19
|
},
|
|
20
20
|
"keywords": [
|
|
21
21
|
"mcp",
|
|
22
|
+
"mcp-server",
|
|
23
|
+
"model-context-protocol",
|
|
22
24
|
"marketplace",
|
|
23
25
|
"facebook-marketplace",
|
|
24
26
|
"ebay",
|
|
25
|
-
"
|
|
27
|
+
"depop",
|
|
26
28
|
"secondhand",
|
|
29
|
+
"thrift",
|
|
27
30
|
"resale",
|
|
28
31
|
"claude",
|
|
29
|
-
"
|
|
32
|
+
"claude-desktop",
|
|
33
|
+
"ai-tools"
|
|
30
34
|
],
|
|
31
35
|
"author": "Justin Sookikian",
|
|
32
36
|
"license": "MIT",
|
|
33
37
|
"dependencies": {
|
|
34
|
-
"@modelcontextprotocol/sdk": "~1.5.0"
|
|
38
|
+
"@modelcontextprotocol/sdk": "~1.5.0",
|
|
39
|
+
"puppeteer-core": "^24.37.1",
|
|
40
|
+
"puppeteer-extra": "^3.3.6",
|
|
41
|
+
"puppeteer-extra-plugin-stealth": "^2.11.2"
|
|
35
42
|
},
|
|
36
43
|
"devDependencies": {
|
|
37
44
|
"@types/node": "^20.10.0",
|
|
38
|
-
"
|
|
39
|
-
"
|
|
45
|
+
"ts-node": "^10.9.0",
|
|
46
|
+
"typescript": "^5.3.0"
|
|
40
47
|
},
|
|
41
48
|
"engines": {
|
|
42
49
|
"node": ">=18.0.0"
|
|
43
50
|
},
|
|
44
51
|
"repository": {
|
|
45
52
|
"type": "git",
|
|
46
|
-
"url": "https://github.com/jlsookiki/secondhand-mcp"
|
|
53
|
+
"url": "git+https://github.com/jlsookiki/secondhand-mcp.git"
|
|
47
54
|
}
|
|
48
55
|
}
|