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