UNPKG

@peekalink/core

Version:
72 lines (71 loc) 2.15 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.PeekalinkClient = exports.DEFAULT_PEEKALINK_ENDPOINT = void 0; require("isomorphic-unfetch"); const error_1 = require("./error"); /** * Default Peekalink API endpoint URL */ exports.DEFAULT_PEEKALINK_ENDPOINT = "https://api.peekalink.io"; const LINK_PREVIEW_PATH = "/"; function removeTrailingSlash(url) { return url.endsWith("/") ? url.slice(0, -1) : url; } /** * Peekalink API client */ class PeekalinkClient { apiKey; endpoint; defaultOptions; constructor(options) { this.apiKey = options.apiKey; this.endpoint = removeTrailingSlash(options.endpoint ?? exports.DEFAULT_PEEKALINK_ENDPOINT); this.defaultOptions = options.defaultOptions ?? {}; } buildOptions(options) { return { ...this.defaultOptions, ...options, }; } buildUrl(path) { return `${this.endpoint}${path}`; } buildHeaders() { return { Authorization: `Bearer ${this.apiKey}`, Accept: "application/json", "Content-Type": "application/json", }; } /** * Generate a link preview for a given link. * @param link The link to generate a preview for. * @param options Optional request options. * @param requestOptions Optional fetch request options. * @returns A Peekalink link preview object. */ async preview(link, options = {}, requestOptions = {}) { const url = this.buildUrl(LINK_PREVIEW_PATH); const finalOptions = this.buildOptions(options); const headers = this.buildHeaders(); const body = JSON.stringify({ ...finalOptions, link, }); const res = await fetch(url, { ...requestOptions, method: "POST", headers, body, }); if (!res.ok) { const err = await error_1.PeekalinkError.fromResponse(res); throw err; } const json = await res.json(); return json; } } exports.PeekalinkClient = PeekalinkClient;