/ clis / wikipedia / utils.js
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  }