UNPKG

@crusaider/srv-schedule

Version:

Get fetching schedule for SRV from https://www.srvatervinning.se/avfallshamtning/nar-hamtar-vi-ditt-avfall

54 lines (47 loc) 1.55 kB
'use strict'; var fetch = require('cross-fetch'); const stripTrailingSlash = (url) => url.replace(/\/$/, ""); const stripLeadingSlash = (url) => url.replace(/^\//, ""); const stripSlashes = (url) => stripTrailingSlash(stripLeadingSlash(url)); const ignoreEmpty = (url) => url !== ""; /** * Concatenates multiple path segments into a single path string. * * @param args - The path segments to concatenate. * @returns The concatenated path string. */ const concatPaths = (...args) => args.map(stripSlashes).filter(ignoreEmpty).join("/"); const API_BASE_URL = "https://www.srvatervinning.se"; const API_BASE_PATH = "rest-api/core/sewagePickup"; async function sendAPIReqest({ path, query, }) { const headers = { Accept: "application/json", }; const url = new URL(API_BASE_URL); url.pathname = concatPaths(API_BASE_PATH, path); if (query) { url.search = new URLSearchParams(query).toString(); } const response = await fetch(url.toString(), { method: "GET", headers, }); if (!response.ok) { throw new Error(`SRV Schedule API request to ${url.toString()} failed with ${response.status} ${response.statusText}`); } return response.json(); } async function findSuggestions(query) { return sendAPIReqest({ query: { query }, path: "/getSuggestions", }); } async function search(query) { return sendAPIReqest({ path: "search", query: { query }, }); } exports.findSuggestions = findSuggestions; exports.search = search;