UNPKG

omnichron

Version:

Unified interface for web archive providers

41 lines (39 loc) 1.6 kB
import { createErrorResponse, createFetchOptions, createSuccessResponse, mapCdxRows, mergeOptions, normalizeDomain } from "./_utils.mjs"; import { $fetch } from "ofetch"; //#region src/providers/wayback.ts /** * Create a Wayback Machine archive provider. * * @param initOptions - Initial archive options (limit, cache, ttl) for Wayback queries. * @returns ArchiveProvider instance for fetching snapshots from the Wayback Machine. */ function wayback(initOptions = {}) { return { name: "Internet Archive Wayback Machine", slug: "wayback", async getSnapshots(domain, reqOptions = {}) { const options = mergeOptions(initOptions, reqOptions); const baseUrl = "https://web.archive.org"; const snapshotUrl = "https://web.archive.org/web"; const urlPattern = normalizeDomain(domain); const fetchOptions = await createFetchOptions(baseUrl, { url: urlPattern, output: "json", fl: "original,timestamp,statuscode", collapse: "timestamp:4", limit: String((await options)?.limit ?? 1e3) }); try { const response = await $fetch("/cdx/search/cdx", fetchOptions); if (!Array.isArray(response) || response.length <= 1) return createSuccessResponse([], "wayback", { queryParams: fetchOptions.params || {} }); const dataRows = response.slice(1); const pages = await mapCdxRows(dataRows, snapshotUrl, "wayback", await options); return createSuccessResponse(pages, "wayback", { queryParams: fetchOptions.params || {} }); } catch (error) { return createErrorResponse(error, "wayback"); } } }; } //#endregion export { wayback as default };