@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
JavaScript
;
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;