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