@machinemetrics/mm-react-embeddable 2.0.3-0 → 2.0.3-2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
|
@@ -1,9 +1,10 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const t=require("react"),Ce=require("prop-types"),we=require("styled-components"),ne=r=>r&&r.__esModule?r:{default:r},D=ne(t),g=ne(Ce),ue=ne(we),J=t.createContext(null),Q=t.createContext({pending:[],authorize:()=>{},approve:()=>{},complete:()=>{},dismiss:()=>{},originEpochs:{},credentials:{},unsupported:{},setDelivered:()=>{}}),ae="access_token",te=r=>r?r.kind?r:r.accessToken?{kind:ae,accessToken:r.accessToken,expiresAt:r.expiresAt||null}:null:null,Te=60,_e=120,Ie=3e4,Me=new Set(["host_not_allowed","unbound_host_bound_guest","invalid_token","provider_unavailable"]),V=r=>{try{return new URL(r).origin}catch{return null}},ce=(r,u)=>{const a=u==null?void 0:u.origin;return!a||V(r==null?void 0:r.authUrl)!==a?null:a},oe=r=>{if(!r||/^\d{1,3}(?:\.\d{1,3}){3}$/.test(r)||r.includes(":"))return r;const u=r.split(".");return u.length<=2?r:u.slice(-2).join(".")},re=(r,u)=>{try{const a=new URL(r),b=new URL(u);return a.protocol!==b.protocol?!0:oe(a.hostname)!==oe(b.hostname)}catch{return!0}},le=(r,{onBlocked:u,onClosed:a})=>{const b=window.open(r.authUrl,"mm-embed-auth","popup,width=600,height=700");if(!b)return u(),()=>{};const m=setInterval(()=>{b.closed&&(clearInterval(m),a())},1e3);return()=>clearInterval(m)},de=({children:r,launcher:u,broker:a,ready:b})=>{const m=t.useContext(J),[R,_]=t.useState({}),[q,G]=t.useState({}),[W,k]=t.useState({}),[h,M]=t.useState({}),O=t.useRef(W);O.current=W;const I=t.useRef(R);I.current=R;const L=t.useRef(null),w=t.useRef({}),B=t.useRef({}),Z=t.useRef(a);Z.current=a;const y=t.useRef({}),v=t.useRef({}),$=t.useCallback((e,s,n)=>{!e||!s||(y.current[e]||(y.current[e]=new Set),n?y.current[e].add(s):y.current[e].delete(s))},[]),x=t.useCallback(e=>{const s=w.current[e];if(!s)return;const n=i=>!i[e]||i[e].clientId?i:{...i,[e]:{...i[e],clientId:s}};_(n),M(n)},[]),o=t.useCallback((e,s)=>{e&&(M(n=>n[e]?n:{...n,[e]:{origin:e,reason:s,clientId:w.current[e]||null}}),x(e))},[x]),l=t.useCallback((e,{v2:s=!1,origin:n=null}={})=>{var i;if(n){if(s&&O.current[n]){if(!((i=y.current[n])!=null&&i.has(e.instanceId)))return;const d=Date.now();if(d-(v.current[n]||0)<Ie)return;v.current[n]=d,y.current[n].clear();const S={...O.current};delete S[n],O.current=S,k(S)}_(d=>d[n]?d:{...d,[n]:{origin:n,authUrl:e.authUrl,status:s&&Z.current?"broker":"interactive",v2:s,scope:e.scope||null,acceptsCredentials:B.current[n]||null,consent:null,error:null,clientId:e.clientId||w.current[n]||null,popupBlocked:!1}}),x(n)}},[x]),c=t.useRef({}),p=t.useCallback(e=>{c.current[e]&&(clearTimeout(c.current[e]),delete c.current[e])},[]),f=t.useCallback(e=>{p(e),_(s=>{if(!s[e])return s;const n={...s};return delete n[e],n})},[p]),E=t.useCallback(e=>{e&&(f(e),G(s=>({...s,[e]:(s[e]||0)+1})))},[f]),U=t.useCallback(e=>{f(e.origin)},[f]),z=t.useCallback((e,s)=>{const n=ce(e,s);if(n){if(re(n,window.location.origin)){o(n,"cross-site-legacy");return}l(e,{origin:n})}},[l,o]);t.useEffect(()=>{if(!m)return;const e=[m.addListener("*","init",(s,n)=>{n!=null&&n.origin&&(s!=null&&s.clientId)&&(w.current[n.origin]=s.clientId,x(n.origin)),n!=null&&n.origin&&Array.isArray(s==null?void 0:s.acceptsCredentials)?B.current[n.origin]=s.acceptsCredentials:n!=null&&n.origin&&re(n.origin,window.location.origin)&&o(n.origin,"cross-site-legacy")}),m.addListener("*","authorize",z),m.addListener("*","login",z),m.addListener("*","credential-request",(s,n)=>l(s,{v2:!0,origin:ce(s,n)}))];return()=>e.forEach(s=>s())},[m,z,l,x,o]),t.useEffect(()=>{const e=s=>{const n=s==null?void 0:s.data;if(!n||n.type!=="authorized")return;const i=V(n.authUrl);if(!i||s.origin!==i)return;const d=I.current[i];if(!(!d||d.status!=="interactive")){if(n.accessToken){k(S=>({...S,[i]:te({accessToken:n.accessToken})})),f(i);return}E(i)}};return window.addEventListener("message",e),()=>window.removeEventListener("message",e)},[f,E]);const C=t.useCallback((e,s)=>{const n=e==null?void 0:e.origin,i=te(s);!n||!i||(k(d=>({...d,[n]:i})),f(n))},[f]),A=t.useCallback((e,s)=>{_(n=>n[e]?{...n,[e]:{...n[e],...s}}:n)},[]),T=t.useRef({}),P=t.useCallback(async(e,{approve:s}={})=>{const n=Z.current,{origin:i}=e;let d;try{d=await n({origin:i,clientId:e.clientId,scope:e.scope,authUrl:e.authUrl},{approve:s})}catch{s?A(i,{error:{reason:"broker_unavailable"}}):A(i,{status:"interactive"});return}const S=d==null?void 0:d.status,j=(d==null?void 0:d.body)||{};if(S===200&&j.credential){C(e,j.credential);return}if(S===409&&j.consentRequired){A(i,{status:"interactive",consent:{client:j.client||null,stepUp:!!j.stepUp,scope:j.scope||e.scope},error:null});return}const X=j.error||"broker_error";if(!s&&Me.has(X)){A(i,{status:"interactive"});return}if(s&&X==="consent_denied"){A(i,{error:null});return}if(X==="rate_limited"&&!e.rateLimitRetried){const ee=Math.min(Number(j.retryAfter)>0?Number(j.retryAfter):Te,_e),ke={...e,rateLimitRetried:!0};p(i),c.current[i]=setTimeout(()=>{delete c.current[i],T.current[i]=!0,F.current(ke,{approve:s}).finally(()=>{delete T.current[i]})},ee*1e3),A(i,{rateLimitRetried:!0});return}f(i),M(ee=>({...ee,[i]:{origin:i,reason:`broker:${X}`,detail:{status:S!=null?S:null,reason:X},clientId:e.clientId||w.current[i]||null}}))},[C,A,f,p]),F=t.useRef(P);F.current=P,t.useEffect(()=>{Object.values(R).forEach(e=>{e.status!=="broker"||T.current[e.origin]||c.current[e.origin]||(T.current[e.origin]=!0,P(e).finally(()=>{delete T.current[e.origin]}))})},[R,P]);const H=t.useCallback(e=>!Z.current||!(e!=null&&e.consent)||T.current[e.origin]?Promise.resolve():(T.current[e.origin]=!0,P(e,{approve:!0}).finally(()=>{delete T.current[e.origin]})),[P]);t.useEffect(()=>()=>{L.current&&L.current(),Object.values(c.current).forEach(clearTimeout)},[]),t.useEffect(()=>{b===!1&&(Object.values(c.current).forEach(clearTimeout),c.current={},T.current={},w.current={},B.current={},y.current={},v.current={},O.current={},k({}),_({}),M({}))},[b]);const Y=t.useCallback(e=>{L.current&&(L.current(),L.current=null);const s=u||le;L.current=s(e,{onBlocked:()=>{_(n=>n[e.origin]?{...n,[e.origin]:{...n[e.origin],popupBlocked:!0}}:n)},onClosed:()=>{const n=I.current[e.origin];!n||n.v2||E(e.origin)}})},[u,E]),K={pending:Object.values(R).filter(e=>e.status==="interactive"),authorize:Y,approve:H,complete:C,dismiss:U,originEpochs:q,credentials:W,unsupported:h,setDelivered:$};return D.default.createElement(Q.Provider,{value:K},r)};de.propTypes={children:g.default.node,launcher:g.default.func,ready:g.default.bool,broker:g.default.func};const fe=()=>t.useContext(Q),pe=r=>{const{originEpochs:u}=t.useContext(Q),a=V(r);return a&&u[a]||0},be=r=>{const{credentials:u}=t.useContext(Q),a=V(r);return a&&u[a]||null},he=r=>{const{unsupported:u}=t.useContext(Q),a=V(r);return a&&u[a]||null},ie="MMEmbeddableZoneProvider requires a boolean `ready` prop (true once the host holds the bearer its credentialBroker needs). Embedded apps will not load until it is provided.",Ee=({children:r,authorizationLauncher:u,credentialBroker:a,ready:b})=>{const m=b===!0,R=t.useRef(!1);t.useEffect(()=>{b!==void 0||R.current||(R.current=!0,console.error(ie),typeof window!="undefined"&&typeof window.alert=="function"&&window.alert(ie))},[b]);const[_,q]=t.useState({}),[G,W]=t.useState({}),k=t.useRef({}),h=t.useRef({}),M=t.useRef({}),O=t.useCallback((o,l)=>{var c;return!!((c=M.current[o])!=null&&c.has(l))},[]),I=t.useCallback((o,l,c)=>{q(p=>({...p,[o]:{origin:l,frameRef:c}}))},[]),L=t.useCallback(o=>{q(l=>{const c={...l};return delete c[o],c}),W(l=>{const c={...l};return delete c[o],c}),delete M.current[o],Object.keys(h.current).forEach(l=>{h.current[l].instanceId===o&&delete h.current[l]})},[]);t.useEffect(()=>()=>{h.current={}},[]),t.useEffect(()=>{const o=(c=[],p,f)=>{c.forEach(E=>E(p,f))},l=c=>{var A,T,P,F,H,Y,K;if(!((A=c==null?void 0:c.data)!=null&&A.instanceId))return;const{instanceId:p,type:f}=c.data,E=_[p],U=(P=(T=E==null?void 0:E.frameRef)==null?void 0:T.current)==null?void 0:P.contentWindow;if(!U||c.source!==U||c.origin!==E.origin)return;const z={origin:c.origin},C=k.current;if(f==="response"){const{callbackId:e,response:s,error:n}=c.data,i=h.current[e];i&&i.instanceId===p&&(i.callback(s,n),delete h.current[e]);return}if(f==="mark-registered"){const{requestType:e}=c.data;M.current[p]||(M.current[p]=new Set),M.current[p].add(e);return}f==="ready"&&W(e=>({...e,[p]:!0})),o((F=C[p])==null?void 0:F[f],c.data,z),o((H=C["*"])==null?void 0:H[f],c.data,z),o((Y=C[p])==null?void 0:Y["*"],c.data,z),o((K=C["*"])==null?void 0:K["*"],c.data,z)};return window.addEventListener("message",l),()=>{window.removeEventListener("message",l)}},[_]);const w=t.useCallback((o,l,c,p)=>{var E,U;const f=_[o];if(!f){console.warn(`Origin not set for id: ${o}. Unable to send message.`);return}(U=(E=f==null?void 0:f.frameRef)==null?void 0:E.current)!=null&&U.contentWindow&&f.frameRef.current.contentWindow.postMessage({type:l,...c,instanceId:o},p||f.origin)},[_]),B=t.useRef(0),Z=t.useCallback(()=>`${Date.now()}-${++B.current}`,[]),y=t.useCallback(async(o,l,c={})=>new Promise((p,f)=>{const E=Z(),U=(z,C)=>{delete h.current[E],C?f(C):p(z)};h.current[E]={instanceId:o,callback:U},w(o,"request",{callbackId:E,requestType:l,data:c})}),[w]),v=t.useCallback((o,l)=>{w(o,"load-options",l)},[w]),$=t.useCallback((o,l)=>{w(o,"validate",l)},[w]),x=t.useMemo(()=>({registerFrame:I,unregisterFrame:L,sendMessage:w,sendRequest:y,loadOptions:v,validate:$,hasHandler:O,readyFrames:G,ready:m,addListener:(o,l,c)=>(k.current[o]||(k.current[o]={}),k.current[o][l]||(k.current[o][l]=[]),k.current[o][l].push(c),()=>{k.current[o][l]=k.current[o][l].filter(p=>p!==c)})}),[I,L,w,y,v,$,O,G,m]);return D.default.createElement(J.Provider,{value:x},D.default.createElement(de,{launcher:u,broker:a,ready:m},r))},N=(r,u,a)=>{const b=t.useContext(J);if(b===null)throw new Error("useEmbeddedEffect must be used within a MMEmbeddableZoneProvider");const m=t.useRef(a);t.useEffect(()=>{m.current=a},[a]),t.useEffect(()=>{if(!(!r||!u)){if(u.startsWith("key:")){const R=u.substring(4);return b.readyFrames[r]&&b.sendMessage(r,"subscribe-key",{keyChord:R}),b.addListener(r,`key-pressed:${R}`,(...q)=>m.current(...q))}return b.addListener(r,u,(...R)=>m.current(...R))}},[b,r,u])};Ee.propTypes={children:g.default.node.isRequired,ready:g.default.bool.isRequired,authorizationLauncher:g.default.func,credentialBroker:g.default.func};const se=ue.default.default||ue.default,ye=1e4,Ae="credentials",Se=(r,u)=>`${r}/mm-embedded-interop?id=${encodeURIComponent(u)}&origin=${encodeURIComponent(window.location.origin)}&caps=${Ae}`,Le=se.iframe`
|
|
1
|
+
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const t=require("react"),ze=require("prop-types"),$e=require("styled-components"),fe=e=>e&&e.__esModule?e:{default:e},z=fe(t),R=fe(ze),Ee=fe($e),ce=t.createContext(null),re=t.createContext({pending:[],authorize:()=>{},approve:()=>{},complete:()=>{},dismiss:()=>{},originEpochs:{},credentials:{},unsupported:{},setDelivered:()=>{}}),we="access_token",le=e=>e?e.kind?e:e.accessToken?{kind:we,accessToken:e.accessToken,expiresAt:e.expiresAt||null}:null:null,De=60,Fe=120,Pe=3e4,qe=new Set(["host_not_allowed","unbound_host_bound_guest","invalid_token","provider_unavailable"]),ne=e=>{try{return new URL(e).origin}catch{return null}},Re=(e,c)=>{const a=c==null?void 0:c.origin;return!a||ne(e==null?void 0:e.authUrl)!==a?null:a},ge=e=>{if(!e||/^\d{1,3}(?:\.\d{1,3}){3}$/.test(e)||e.includes(":"))return e;const c=e.split(".");return c.length<=2?e:c.slice(-2).join(".")},de=(e,c)=>{try{const a=new URL(e),b=new URL(c);return a.protocol!==b.protocol?!0:ge(a.hostname)!==ge(b.hostname)}catch{return!0}},Te=(e,{onBlocked:c,onClosed:a})=>{const b=window.open(e.authUrl,"mm-embed-auth","popup,width=600,height=700");if(!b)return c(),()=>{};const m=setInterval(()=>{b.closed&&(clearInterval(m),a())},1e3);return()=>clearInterval(m)},_e=({children:e,launcher:c,broker:a,ready:b})=>{const m=t.useContext(ce),[T,_]=t.useState({}),[P,V]=t.useState({}),[B,I]=t.useState({}),[S,M]=t.useState({}),E=t.useRef(B);E.current=B;const q=t.useRef(T);q.current=T;const $=t.useRef(null),h=t.useRef({}),H=t.useRef({}),K=t.useRef(a);K.current=a;const A=t.useRef({}),W=t.useRef({}),N=t.useCallback((r,s,n)=>{!r||!s||(A.current[r]||(A.current[r]=new Set),n?A.current[r].add(s):A.current[r].delete(s))},[]),L=t.useCallback(r=>{const s=h.current[r];if(!s)return;const n=o=>!o[r]||o[r].clientId?o:{...o,[r]:{...o[r],clientId:s}};_(n),M(n)},[]),i=t.useCallback((r,s)=>{r&&(M(n=>n[r]?n:{...n,[r]:{origin:r,reason:s,clientId:h.current[r]||null}}),L(r))},[L]),l=t.useCallback((r,{v2:s=!1,origin:n=null}={})=>{var o;if(n){if(s&&E.current[n]){if(!((o=A.current[n])!=null&&o.has(r.instanceId)))return;const p=Date.now();if(p-(W.current[n]||0)<Pe)return;W.current[n]=p,A.current[n].clear();const C={...E.current};delete C[n],E.current=C,I(C)}_(p=>p[n]?p:{...p,[n]:{origin:n,authUrl:r.authUrl,status:s&&K.current?"broker":"interactive",v2:s,scope:r.scope||null,acceptsCredentials:H.current[n]||null,consent:null,error:null,clientId:r.clientId||h.current[n]||null,popupBlocked:!1}}),L(n)}},[L]),u=t.useRef({}),f=t.useCallback(r=>{u.current[r]&&(clearTimeout(u.current[r]),delete u.current[r])},[]),d=t.useCallback(r=>{f(r),_(s=>{if(!s[r])return s;const n={...s};return delete n[r],n})},[f]),g=t.useCallback(r=>{r&&(d(r),V(s=>({...s,[r]:(s[r]||0)+1})))},[d]),D=t.useCallback(r=>{d(r.origin)},[d]),v=t.useCallback((r,s)=>{const n=Re(r,s);if(n){if(de(n,window.location.origin)){i(n,"cross-site-legacy");return}l(r,{origin:n})}},[l,i]);t.useEffect(()=>{if(!m)return;const r=[m.addListener("*","init",(s,n)=>{n!=null&&n.origin&&(s!=null&&s.clientId)&&(h.current[n.origin]=s.clientId,L(n.origin)),n!=null&&n.origin&&Array.isArray(s==null?void 0:s.acceptsCredentials)?H.current[n.origin]=s.acceptsCredentials:n!=null&&n.origin&&de(n.origin,window.location.origin)&&i(n.origin,"cross-site-legacy")}),m.addListener("*","authorize",v),m.addListener("*","login",v),m.addListener("*","credential-request",(s,n)=>l(s,{v2:!0,origin:Re(s,n)}))];return()=>r.forEach(s=>s())},[m,v,l,L,i]),t.useEffect(()=>{const r=s=>{const n=s==null?void 0:s.data;if(!n||n.type!=="authorized")return;const o=ne(n.authUrl);if(!o||s.origin!==o)return;const p=q.current[o];if(!(!p||p.status!=="interactive")){if(n.accessToken){I(C=>({...C,[o]:le({accessToken:n.accessToken})})),d(o);return}g(o)}};return window.addEventListener("message",r),()=>window.removeEventListener("message",r)},[d,g]);const x=t.useCallback((r,s)=>{const n=r==null?void 0:r.origin,o=le(s);!n||!o||(I(p=>({...p,[n]:o})),d(n))},[d]),k=t.useCallback((r,s)=>{_(n=>n[r]?{...n,[r]:{...n[r],...s}}:n)},[]),y=t.useRef({}),U=t.useCallback(async(r,{approve:s}={})=>{const n=K.current,{origin:o}=r;let p;try{p=await n({origin:o,clientId:r.clientId,scope:r.scope,authUrl:r.authUrl},{approve:s})}catch{s?k(o,{error:{reason:"broker_unavailable"}}):k(o,{status:"interactive"});return}const C=p==null?void 0:p.status,O=(p==null?void 0:p.body)||{};if(C===200&&O.credential){x(r,O.credential);return}if(C===409&&O.consentRequired){k(o,{status:"interactive",consent:{client:O.client||null,stepUp:!!O.stepUp,scope:O.scope||r.scope},error:null});return}const Z=O.error||"broker_error";if(!s&&qe.has(Z)){k(o,{status:"interactive"});return}if(s&&Z==="consent_denied"){k(o,{error:null});return}if(Z==="rate_limited"&&!r.rateLimitRetried){const G=Math.min(Number(O.retryAfter)>0?Number(O.retryAfter):De,Fe),J={...r,rateLimitRetried:!0};f(o),u.current[o]=setTimeout(()=>{delete u.current[o],y.current[o]=!0,Q.current(J,{approve:s}).finally(()=>{delete y.current[o]})},G*1e3),k(o,{rateLimitRetried:!0});return}d(o),M(G=>({...G,[o]:{origin:o,reason:`broker:${Z}`,detail:{status:C!=null?C:null,reason:Z},clientId:r.clientId||h.current[o]||null}}))},[x,k,d,f]),Q=t.useRef(U);Q.current=U,t.useEffect(()=>{Object.values(T).forEach(r=>{r.status!=="broker"||y.current[r.origin]||u.current[r.origin]||(y.current[r.origin]=!0,U(r).finally(()=>{delete y.current[r.origin]}))})},[T,U]);const F=t.useCallback(r=>!K.current||!(r!=null&&r.consent)||y.current[r.origin]?Promise.resolve():(y.current[r.origin]=!0,U(r,{approve:!0}).finally(()=>{delete y.current[r.origin]})),[U]);t.useEffect(()=>()=>{$.current&&$.current(),Object.values(u.current).forEach(clearTimeout)},[]),t.useEffect(()=>{b===!1&&(Object.values(u.current).forEach(clearTimeout),u.current={},y.current={},h.current={},H.current={},A.current={},W.current={},E.current={},I({}),_({}),M({}))},[b]);const Y=t.useCallback(r=>{$.current&&($.current(),$.current=null);const s=c||Te;$.current=s(r,{onBlocked:()=>{_(n=>n[r.origin]?{...n,[r.origin]:{...n[r.origin],popupBlocked:!0}}:n)},onClosed:()=>{const n=q.current[r.origin];!n||n.v2||g(r.origin)}})},[c,g]),X={pending:Object.values(T).filter(r=>r.status==="interactive"),authorize:Y,approve:F,complete:x,dismiss:D,originEpochs:P,credentials:B,unsupported:S,setDelivered:N};return z.default.createElement(re.Provider,{value:X},e)};_e.propTypes={children:R.default.node,launcher:R.default.func,ready:R.default.bool,broker:R.default.func};const Ie=()=>t.useContext(re),Me=e=>{const{originEpochs:c}=t.useContext(re),a=ne(e);return a&&c[a]||0},ye=e=>{const{credentials:c}=t.useContext(re),a=ne(e);return a&&c[a]||null},Ae=e=>{const{unsupported:c}=t.useContext(re),a=ne(e);return a&&c[a]||null},ke="MMEmbeddableZoneProvider requires a boolean `ready` prop (true once the host holds the bearer its credentialBroker needs). Embedded apps will not load until it is provided.",Se=({children:e,authorizationLauncher:c,credentialBroker:a,ready:b})=>{const m=b===!0,T=t.useRef(!1);t.useEffect(()=>{b!==void 0||T.current||(T.current=!0,console.error(ke),typeof window!="undefined"&&typeof window.alert=="function"&&window.alert(ke))},[b]);const[_,P]=t.useState({}),[V,B]=t.useState({}),I=t.useRef({}),S=t.useRef({}),M=t.useRef({}),E=t.useCallback((i,l)=>{var u;return!!((u=M.current[i])!=null&&u.has(l))},[]),q=t.useCallback((i,l,u)=>{P(f=>({...f,[i]:{origin:l,frameRef:u}}))},[]),$=t.useCallback(i=>{P(l=>{const u={...l};return delete u[i],u}),B(l=>{const u={...l};return delete u[i],u}),delete M.current[i],Object.keys(S.current).forEach(l=>{S.current[l].instanceId===i&&delete S.current[l]})},[]);t.useEffect(()=>()=>{S.current={}},[]),t.useEffect(()=>{const i=(u=[],f,d)=>{u.forEach(g=>g(f,d))},l=u=>{var k,y,U,Q,F,Y,X;if(!((k=u==null?void 0:u.data)!=null&&k.instanceId))return;const{instanceId:f,type:d}=u.data,g=_[f],D=(U=(y=g==null?void 0:g.frameRef)==null?void 0:y.current)==null?void 0:U.contentWindow;if(!D||u.source!==D||u.origin!==g.origin)return;const v={origin:u.origin},x=I.current;if(d==="response"){const{callbackId:r,response:s,error:n}=u.data,o=S.current[r];o&&o.instanceId===f&&(o.callback(s,n),delete S.current[r]);return}if(d==="mark-registered"){const{requestType:r}=u.data;M.current[f]||(M.current[f]=new Set),M.current[f].add(r);return}d==="ready"&&B(r=>({...r,[f]:!0})),i((Q=x[f])==null?void 0:Q[d],u.data,v),i((F=x["*"])==null?void 0:F[d],u.data,v),i((Y=x[f])==null?void 0:Y["*"],u.data,v),i((X=x["*"])==null?void 0:X["*"],u.data,v)};return window.addEventListener("message",l),()=>{window.removeEventListener("message",l)}},[_]);const h=t.useCallback((i,l,u,f)=>{var g,D;const d=_[i];if(!d){console.warn(`Origin not set for id: ${i}. Unable to send message.`);return}(D=(g=d==null?void 0:d.frameRef)==null?void 0:g.current)!=null&&D.contentWindow&&d.frameRef.current.contentWindow.postMessage({type:l,...u,instanceId:i},f||d.origin)},[_]),H=t.useRef(0),K=t.useCallback(()=>`${Date.now()}-${++H.current}`,[]),A=t.useCallback(async(i,l,u={})=>new Promise((f,d)=>{const g=K(),D=(v,x)=>{delete S.current[g],x?d(x):f(v)};S.current[g]={instanceId:i,callback:D},h(i,"request",{callbackId:g,requestType:l,data:u})}),[h]),W=t.useCallback((i,l)=>{h(i,"load-options",l)},[h]),N=t.useCallback((i,l)=>{h(i,"validate",l)},[h]),L=t.useMemo(()=>({registerFrame:q,unregisterFrame:$,sendMessage:h,sendRequest:A,loadOptions:W,validate:N,hasHandler:E,readyFrames:V,ready:m,addListener:(i,l,u)=>(I.current[i]||(I.current[i]={}),I.current[i][l]||(I.current[i][l]=[]),I.current[i][l].push(u),()=>{I.current[i][l]=I.current[i][l].filter(f=>f!==u)})}),[q,$,h,A,W,N,E,V,m]);return z.default.createElement(ce.Provider,{value:L},z.default.createElement(_e,{launcher:c,broker:a,ready:m},e))},ee=(e,c,a)=>{const b=t.useContext(ce);if(b===null)throw new Error("useEmbeddedEffect must be used within a MMEmbeddableZoneProvider");const m=t.useRef(a);t.useEffect(()=>{m.current=a},[a]),t.useEffect(()=>{if(!(!e||!c)){if(c.startsWith("key:")){const T=c.substring(4);return b.readyFrames[e]&&b.sendMessage(e,"subscribe-key",{keyChord:T}),b.addListener(e,`key-pressed:${T}`,(...P)=>m.current(...P))}return b.addListener(e,c,(...T)=>m.current(...T))}},[b,e,c])};Se.propTypes={children:R.default.node.isRequired,ready:R.default.bool.isRequired,authorizationLauncher:R.default.func,credentialBroker:R.default.func};const pe=Ee.default.default||Ee.default,Be=1e4,We=6e3,Ce=15e3,Ze=2e3,je=3e3,Le=()=>typeof document!="undefined"&&document.visibilityState==="hidden",te=(e,c,a)=>{if(e.current&&clearTimeout(e.current.handle),Le()){e.current={ms:c,fn:a,suspended:!0};return}const b=Date.now(),m=setTimeout(()=>{if(Date.now()-b-c>je){te(e,c,a);return}e.current=void 0,a()},c);e.current={handle:m,ms:c,fn:a}},j=e=>{e.current&&clearTimeout(e.current.handle),e.current=void 0},ie=e=>{e.current&&!e.current.suspended&&(clearTimeout(e.current.handle),e.current={ms:e.current.ms,fn:e.current.fn,suspended:!0})},ae=e=>{e.current&&e.current.suspended&&te(e,e.current.ms,e.current.fn)},He="credentials",Ke=(e,c)=>`${e}/mm-embedded-interop?id=${encodeURIComponent(c)}&origin=${encodeURIComponent(window.location.origin)}&caps=${He}`,Ye=pe.iframe`
|
|
2
2
|
width: 100%;
|
|
3
3
|
height: 100%;
|
|
4
4
|
border: none;
|
|
5
|
-
visibility: ${
|
|
6
|
-
|
|
5
|
+
visibility: ${e=>e.$isReady?"visible":"hidden"};
|
|
6
|
+
${e=>e.$collapsed?"position: absolute; width: 1px; height: 1px; overflow: hidden;":""}
|
|
7
|
+
`,Ge=pe.div`
|
|
7
8
|
width: 100%;
|
|
8
9
|
height: 100%;
|
|
9
10
|
display: flex;
|
|
@@ -16,10 +17,10 @@
|
|
|
16
17
|
text-align: center;
|
|
17
18
|
color: #555;
|
|
18
19
|
font-size: 14px;
|
|
19
|
-
`,
|
|
20
|
+
`,ve=e=>{const c=e&&e.origin||"This app",a=e&&e.reason||"";switch(a){case"broker:scope_above_ceiling":return{title:`${c} can’t be authorized here`,detail:"It asks for permissions your role doesn’t have."};case"broker:origin_mismatch":case"broker:unknown_client":return{title:`${c} can’t be authorized here`,detail:"It isn’t registered to run at this address."};case"broker:cross_company_principal":return{title:`${c} can’t be authorized here`,detail:"It can’t be authorized for this account."};default:return a.startsWith("broker:")?{title:`${c} can’t be authorized here`,detail:"Authorization was refused."}:{title:`${c} can’t be embedded here`,detail:"It needs an update to support embedding from a different domain."}}},xe=({entry:e})=>{const c=ve(e);return z.default.createElement(Ge,{"data-reason":e&&e.reason||void 0},z.default.createElement("div",{style:{fontWeight:600}},c.title),z.default.createElement("div",{style:{fontSize:12,color:"#888"}},c.detail))};xe.propTypes={entry:R.default.shape({origin:R.default.string,name:R.default.string,reason:R.default.string,detail:R.default.object})};const Ve=pe.div`
|
|
20
21
|
height: 100%;
|
|
21
22
|
display: flex;
|
|
22
23
|
flex: 1;
|
|
23
24
|
align-items: center;
|
|
24
25
|
justify-content: center;
|
|
25
|
-
`,
|
|
26
|
+
`,Ne=()=>z.default.createElement(Ve,null,z.default.createElement("div",{style:{textAlign:"center"}},"This app couldn’t be loaded as an embeddable widget.")),Ue=({id:e,src:c,path:a,onInit:b=()=>{},onTimeout:m,onRemount:T,onStall:_,context:P={},params:V={},renderUnsupported:B,renderTimeout:I,...S})=>{if("isConfiguring"in S)return console.error("isConfiguring must be passed via the params prop to MMEmbeddableZone"),null;if("colorMode"in P)return console.error("colorMode must be passed via the params prop to MMEmbeddableZone"),null;if("isFullScreen"in P)return console.error("isFullScreen must be passed via the params prop to MMEmbeddableZone"),null;const M=t.useRef(),E=ne(c),[q,$]=t.useState(),[h,H]=t.useState(0),[K,A]=t.useState(!1),[W,N]=t.useState(!1),L=Me(c),i=ye(c),l=Ae(c),{setDelivered:u}=Ie(),[f,d]=t.useState(0),[g,D]=t.useState(null),{registerFrame:v,unregisterFrame:x,sendMessage:k,ready:y}=t.useContext(ce),[U,Q]=t.useState(),F=t.useRef(),Y=t.useRef(m),X=t.useRef(b),r=t.useRef(T),s=t.useRef(_),n=t.useRef(!1),o=t.useRef(),p=t.useRef(),C=t.useRef(),O=t.useRef(!1),Z=t.useRef(!1),G=t.useRef(null),J=t.useCallback(()=>{n.current=!1,O.current=!1,Z.current=!1,G.current=null,j(F),j(o),j(p),clearTimeout(C.current),H(0),A(!1),N(!1),D(null),u(E,e,!1)},[u,E,e]);t.useEffect(()=>{(L>0||f>0)&&J()},[L,f,J]),t.useEffect(()=>{Y.current=m},[m]),t.useEffect(()=>{X.current=b},[b]),t.useEffect(()=>{r.current=T},[T]),t.useEffect(()=>{s.current=_},[_]),t.useEffect(()=>{const w=()=>{if(Le()){ie(F),ie(o),ie(p);return}ae(F),ae(p),O.current&&ae(o)};return document.addEventListener("visibilitychange",w),()=>document.removeEventListener("visibilitychange",w)},[]),t.useEffect(()=>{h&&k(e,"set-context",{context:{...P}},E)},[P,e,h,E]),t.useEffect(()=>{h&&k(e,"set-params",{params:V},E)},[V,e,h,E]),t.useEffect(()=>{a!==void 0&&Q((a==null?void 0:a.indexOf("/"))===0?a:`/${a}`)},[a]),t.useEffect(()=>{U===void 0||!h||k(e,"navigate",{path:U},E)},[U,h,e,k,E]),t.useEffect(()=>{if(!c||!e||!M)return;if(!y){J(),$(void 0);return}J();const w=new URL(c);return v(e,w.origin,M),X.current(),$(Ke(w.origin,e)),()=>{x(e)}},[c,e,y,v,M,J]);const ue=t.useCallback(()=>{A(!0),Y.current&&Y.current()},[]);t.useEffect(()=>{if(!(!q||n.current))return te(F,Be,ue),()=>j(F)},[q,c,L,f,ue]);const se=t.useCallback(()=>{n.current=!0,j(F),A(!1)},[]),be=t.useCallback(()=>{const w=G.current;if(w&&!Z.current){Z.current=!0,k(e,"credential",w,E),s.current&&s.current("redelivered"),te(p,Ce,be);return}s.current&&s.current("ready"),ue()},[e,k,E,ue]);ee(e,"init",w=>{se(),te(p,Ce,be),Array.isArray(w==null?void 0:w.acceptsCredentials)&&D(w.acceptsCredentials)}),ee(e,"authorize",se),ee(e,"login",se),ee(e,"credential-request",()=>{se(),N(!0)}),t.useEffect(()=>{if(!W||!i)return;const w=g;if(Array.isArray(w)&&!w.includes(i.kind))return;const oe={...i.kind==="access_token"?{accessToken:i.accessToken}:{},credential:i};return G.current=oe,k(e,"credential",oe,E),u(E,e,!0),clearTimeout(C.current),C.current=setTimeout(()=>{C.current=void 0,k(e,"credential",oe,E)},Ze),()=>clearTimeout(C.current)},[W,i,g,e,k,E,u]),ee(e,"ready",()=>{se(),j(p),clearTimeout(C.current),C.current=void 0,H(w=>w+1)});const Oe=t.useCallback(()=>{r.current&&r.current("heartbeat"),d(w=>w+1)},[]);if(ee(e,"heartbeat",()=>{O.current=!0,te(o,We,Oe)}),t.useEffect(()=>()=>{j(o),j(p),j(F),clearTimeout(C.current)},[]),l)return B?B(l):z.default.createElement(xe,{entry:l});const he=!!(K&&!h),me={...S};return delete me.skipManifestCheck,z.default.createElement(z.default.Fragment,null,he&&(I?I():z.default.createElement(Ne,null)),z.default.createElement(Ye,{key:`auth-epoch-${L}-frame-${f}`,$isReady:h,$collapsed:he,ref:M,src:q,...me}))};Ue.propTypes={id:R.default.string,src:R.default.string.isRequired,path:R.default.string,onInit:R.default.func,onTimeout:R.default.func,onRemount:R.default.func,onStall:R.default.func,renderUnsupported:R.default.func,renderTimeout:R.default.func};exports.CREDENTIAL_KIND_ACCESS_TOKEN=we;exports.EmbeddedAuthorizationContext=re;exports.MMEmbeddableZone=Ue;exports.MMEmbeddableZoneContext=ce;exports.MMEmbeddableZoneProvider=Se;exports.isCrossSite=de;exports.normalizeCredential=le;exports.popupAuthorizationLauncher=Te;exports.unsupportedCopy=ve;exports.useEmbeddedAuthorizations=Ie;exports.useEmbeddedCredential=ye;exports.useEmbeddedEffect=ee;exports.useEmbeddedOriginEpoch=Me;exports.useEmbeddedUnsupported=Ae;
|