const asin = process.env.ASIN || 'B0G8D23R1Q'; const baseUrl = process.env.API_URL || 'http://127.0.0.1:3000/api/sorftime/forward'; function unwrap(result) { let data = result?.data ?? result?.Data ?? result; while (data && typeof data === 'object' && !Array.isArray(data) && (data.data !== undefined || data.Data !== undefined)) { data = data.data ?? data.Data; } return data; } async function query(body) { const response = await fetch(baseUrl, { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify({ path: '/api/ProductReviewsQuery', method: 'POST', query: { domain: 1 }, body, }), signal: AbortSignal.timeout(60000), }); const result = await response.json(); const data = unwrap(result); const reviews = data?.Reviews || data?.Items || data?.List || (Array.isArray(data) ? data : []); return { status: response.status, rows: reviews.map(review => ({ id: review.ReviewId || review.Id || review.ID || review.id, date: review.ReviewsDate || review.ReviewDate || review.Date, star: review.Star || review.Rating, verified: review.OnlyPurchase || review.VerifiedPurchase, contentLength: String(review.Content || review.ReviewContent || review.Body || '').length, })), dataKeys: data && typeof data === 'object' ? Object.keys(data) : [], message: result?.message || result?.Message || '', }; } const tests = [ { label: 'year-page-1', body: { ASIN: asin, PageIndex: 1, OnlyPurchase: 0, Star: '1,2,3,4,5', QueryStartDt: '2025-09-18', QueryEndDt: '2026-09-18' } }, { label: 'year-page-size-100', body: { ASIN: asin, PageIndex: 1, PageSize: 100, OnlyPurchase: 0, Star: '1,2,3,4,5', QueryStartDt: '2025-09-18', QueryEndDt: '2026-09-18' } }, { label: 'year-page-2-alt', body: { ASIN: asin, Page: 2, OnlyPurchase: 0, Star: '1,2,3,4,5', QueryStartDt: '2025-09-18', QueryEndDt: '2026-09-18' } }, { label: 'year-page-0', body: { ASIN: asin, PageIndex: 0, OnlyPurchase: 0, Star: '1,2,3,4,5', QueryStartDt: '2025-09-18', QueryEndDt: '2026-09-18' } }, { label: 'recent-window', body: { ASIN: asin, PageIndex: 1, OnlyPurchase: 0, Star: '1,2,3,4,5', QueryStartDt: '2026-06-01', QueryEndDt: '2026-09-18' } }, { label: 'older-window', body: { ASIN: asin, PageIndex: 1, OnlyPurchase: 0, Star: '1,2,3,4,5', QueryStartDt: '2025-09-18', QueryEndDt: '2026-05-31' } }, ]; for (const test of tests) { try { console.log(JSON.stringify({ label: test.label, body: test.body, result: await query(test.body) })); } catch (error) { console.log(JSON.stringify({ label: test.label, error: error.message })); } await new Promise(resolve => setTimeout(resolve, 500)); }