What
Add an ebay.js adapter for eBay item/listing pages exposing read-only tools: get_listing (title, price, condition, seller), get_price, and get_bid_status (current bid, number of bids, time left for auctions; Buy-It-Now price for fixed-price).
Why it's valuable
From ADAPTERS_WANTED.md (Easy column): pricing and bid status live in the page meta and JSON-LD. Reads only — no cart/bid actions needed — which keeps it newcomer-safe and squarely inside the project's anti-features policy.
Where to start
- Copy
adapters/_template → adapters/ebay.js, ID = "ebay". Read adapters/CONTRACT.md and adapters/jsonld.js (it already extracts schema.org Product/Offer and OG meta — your adapter can reuse the same field-reading patterns rather than reinventing them).
detect() (sync): match eBay item URLs (ebay.com/itm/<id> and regional TLDs like ebay.co.uk, ebay.de). Return { adapter: ID, itemId, url }. Keep detection sharp so it doesn't fire on eBay search/category pages.
extract(): read price/condition/availability from ctx.jsonld + ctx.meta first; only fetch the page (with CHROME_UA, credentials: "omit") if you need auction-specific fields not present in structured data. For auctions, current bid + time-left may need a small HTML/meta parse — degrade gracefully if absent.
- Read-only:
export const actions = {} (no bidding — see ADAPTERS_WANTED.md anti-features).
- Capture a fixture (one fixed-price + ideally one auction listing) in
_fixtures/ per _fixtures/README.md; add detect()/extract() tests to _test/run.mjs; run node adapters/_test/run.mjs; register in worker/src/index.ts.
Acceptance criteria
What
Add an
ebay.jsadapter for eBay item/listing pages exposing read-only tools:get_listing(title, price, condition, seller),get_price, andget_bid_status(current bid, number of bids, time left for auctions; Buy-It-Now price for fixed-price).Why it's valuable
From
ADAPTERS_WANTED.md(Easy column): pricing and bid status live in the page meta and JSON-LD. Reads only — no cart/bid actions needed — which keeps it newcomer-safe and squarely inside the project's anti-features policy.Where to start
adapters/_template→adapters/ebay.js,ID = "ebay". Readadapters/CONTRACT.mdandadapters/jsonld.js(it already extracts schema.orgProduct/Offerand OG meta — your adapter can reuse the same field-reading patterns rather than reinventing them).detect()(sync): match eBay item URLs (ebay.com/itm/<id>and regional TLDs likeebay.co.uk,ebay.de). Return{ adapter: ID, itemId, url }. Keep detection sharp so it doesn't fire on eBay search/category pages.extract(): read price/condition/availability fromctx.jsonld+ctx.metafirst; only fetch the page (withCHROME_UA,credentials: "omit") if you need auction-specific fields not present in structured data. For auctions, current bid + time-left may need a small HTML/meta parse — degrade gracefully if absent.export const actions = {}(no bidding — seeADAPTERS_WANTED.mdanti-features)._fixtures/per_fixtures/README.md; adddetect()/extract()tests to_test/run.mjs; runnode adapters/_test/run.mjs; register inworker/src/index.ts.Acceptance criteria
detect()matchesebay.com/itm/...(+ at least one regional TLD) and returnsnullfor search/category/home URLs.extract()returns at leastget_listing,get_price,get_bid_status.nullnoise for BIN listings).worker/src/index.ts.