UNPKG

ministryplatform-fetch

Version:

A library for fetching data from MinistryPlatform using the customwidget API

63 lines (62 loc) 2.18 kB
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 };