3.4 KiB
Marketplace Dollar Price Inputs Implementation Plan
For agentic workers: REQUIRED SUB-SKILL: Use superpowers:executing-plans to implement this plan task-by-task. Steps use checkbox (
- [ ]) syntax for tracking.
Goal: Make public marketplace price inputs use dollars while preserving core scraper cent-based filtering.
Architecture: API server owns HTTP query parsing and converts dollar amounts to
cents before calling core.
MCP server keeps forwarding numeric dollar values as query params.
Core scraper internals remain unchanged because parsed listing prices already use cents.
This applies to eBay minPrice/maxPrice and Kijiji priceMin/priceMax; Facebook
exposes no price filter inputs.
Tech Stack: Bun, TypeScript, bun:test, MCP JSON-RPC adapter, framework-free Bun
HTTP routes.
Task 1: API Dollar Parsing
Files:
-
Modify:
packages/api-server/src/routes/helpers.ts -
Modify:
packages/api-server/src/routes/ebay.ts -
Modify:
packages/api-server/src/routes/kijiji.ts -
Test:
packages/api-server/test/routes.test.ts -
Step 1: Add failing API route tests
Add tests proving eBay minPrice=999.99 / maxPrice=1000 and Kijiji priceMin=999.99
/ priceMax=1000 are forwarded to core as 99999 and 100000 cents.
Add validation tests for empty, whitespace, negative, hex, mixed text, and malformed
decimal price values.
Run: bun test packages/api-server/test/routes.test.ts
Expected: new forwarding tests fail because route currently rejects decimals and forwards integer dollars unchanged.
- Step 2: Implement dollar parser helper
Add parseDollarPriceParam(searchParams, name) in
packages/api-server/src/routes/helpers.ts. Accept 0, 1000, 999.99, and 0.99.
Reject values that do not match ^\d+(?:\.\d{1,2})?$. Convert to cents with
Math.round(Number(rawValue) * 100).
- Step 3: Use dollar parser in eBay route
Replace parseNonNegativeIntegerParam calls for eBay minPrice/maxPrice and Kijiji
priceMin/priceMax with parseDollarPriceParam. Keep pagination/count params on
integer parsing.
- Step 4: Verify API tests
Run: bun test packages/api-server/test/routes.test.ts
Expected: all API route tests pass.
Task 2: MCP Schema Contract
Files:
-
Modify:
packages/mcp-server/src/protocol/tools.ts -
Test:
packages/mcp-server/test/protocol.test.ts -
Step 1: Add MCP schema/forwarding tests
Add tests that search_ebay describes minPrice and maxPrice as dollar filters and
forwards numeric dollar values unchanged in API query params.
Run: bun test packages/mcp-server/test/protocol.test.ts
Expected: description test fails until schema text changes; forwarding behavior should already pass or reveal mapping gaps.
- Step 2: Update tool descriptions
Change eBay minPrice and Kijiji priceMin descriptions to Minimum price in dollars.
Change eBay maxPrice and Kijiji priceMax descriptions to Maximum price in dollars.
- Step 3: Verify MCP tests
Run: bun test packages/mcp-server/test/protocol.test.ts
Expected: all MCP protocol tests pass.
Task 3: Cross-Package Verification
Files:
-
No additional edits expected.
-
Step 1: Run relevant package tests
Run: bun test packages/api-server/test packages/mcp-server/test
Expected: all tests pass.
- Step 2: Run CI
Run: bun run ci
Expected: typecheck and Biome pass without changing lint config.