utils.js
1 /** 2 * Wikipedia adapter utilities. 3 * 4 * Uses the public MediaWiki REST API and Action API — no key required. 5 * REST API: https://en.wikipedia.org/api/rest_v1/ 6 * Action API: https://en.wikipedia.org/w/api.php 7 */ 8 import { CliError } from '@jackwener/opencli/errors'; 9 /** Maximum character length for article extract fields. */ 10 export const EXTRACT_MAX_LEN = 300; 11 /** Maximum character length for short description fields. */ 12 export const DESC_MAX_LEN = 80; 13 export async function wikiFetch(lang, path) { 14 const url = `https://${lang}.wikipedia.org${path}`; 15 const resp = await fetch(url, { 16 headers: { 'User-Agent': 'opencli/1.0 (https://github.com/jackwener/opencli)' }, 17 }); 18 if (!resp.ok) { 19 throw new CliError('FETCH_ERROR', `Wikipedia API HTTP ${resp.status}`, `Check your title or search term`); 20 } 21 return resp.json(); 22 } 23 /** Map a WikiSummary API response to the standard output row. */ 24 export function formatSummaryRow(data, lang) { 25 return { 26 title: data.title, 27 description: data.description ?? '-', 28 extract: (data.extract ?? '').slice(0, EXTRACT_MAX_LEN), 29 url: data.content_urls?.desktop?.page ?? `https://${lang}.wikipedia.org`, 30 }; 31 }