ministryplatform-fetch
Version:
A library for fetching data from MinistryPlatform using the customwidget API
63 lines (62 loc) • 2.18 kB
JavaScript
const i = (e, t = window.location.href) => {
const a = e.replace("[", "").replace("]", "").replace("/[[]]/g", "\\$&"), r = new RegExp(`[?&]${a}(=([^&#]*)|&|#|$)`).exec(t);
return r ? r[2] ? decodeURIComponent(r[2].replace(/\+/g, " ")) : "" : null;
}, f = (e) => {
let t = e;
const a = /\[.*?]/gi;
let n = a.exec(t);
for (; n; ) {
const r = i(n[0]);
r && (t = t.replace(n[0], r)), n = a.exec(t);
}
return t;
}, h = (e) => encodeURIComponent(f(e)), m = async (e, t = null, a) => {
const n = new Headers();
t && n.set("Authorization", `${t}`), a || n.set("Cache-Control", "no-cache");
const r = new Request(e, {
method: "GET",
headers: n
}), s = await fetch(r);
if (!s.ok) {
const u = await s.json();
return {
data: null,
error: {
status: s.status,
message: u.error
}
};
}
return {
data: await s.json(),
error: null
};
}, o = {
fetchData: m,
encodeParams: h
}, d = () => {
const e = localStorage.getItem("mpp-widgets_ExpiresAfter");
return !(!e || e === "null" || Date.parse(e) < Date.now());
}, l = () => {
const e = localStorage.getItem("mpp-widgets_AuthToken");
return !e || e === "null" || e.length < 10 || !d() ? null : e;
}, g = async (e = 5, t = 4e3) => {
const a = new Promise((s) => setTimeout(s, t));
let n = 0, r = null;
for (; n < e; ) {
if (await a, n++, r = l(), r) return r;
r = null;
}
return null;
}, p = async () => {
let e = l();
return e || (e = await g()), e;
}, w = { fetchUserToken: p }, P = (e, t) => `${e}&spParams=${o.encodeParams(t)}`, k = (e, t) => `${e}&requireUser=true&userData=${t}`, c = (e, t) => `${e}&cacheData=${t ? "true" : "false"}`, $ = async (e) => {
let t = `https://${e.host}.cloudapps.ministryplatform.cloud/sky/api/CustomWidget?storedProcedure=${e.storedProc}`;
e.params && (t = P(t, e.params));
let a = null;
return e.requireUser && (a = await w.fetchUserToken(), t = k(t, a || "")), e.cache ? t = c(t, e.cache) : t = c(t, !1), t = c(t, e.cache || !1), e.debug && console.log("MPFetch URL", t), await o.fetchData(t, a || null, e.cache || !1);
}, x = { getData: $ };
export {
x as MPFetch
};