@machinemetrics/mm-react-embeddable 1.4.0-8 → 2.0.0-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,9 +1,9 @@
1
- "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const r=require("react"),be=require("prop-types"),he=require("styled-components"),J=t=>t&&t.__esModule?t:{default:t},g=J(r),C=J(be),W=J(he),K=r.createContext(null),H=r.createContext({pending:[],authorize:()=>{},approve:()=>{},complete:()=>{},dismiss:()=>{},originEpochs:{},credentials:{},unsupported:{}}),ne="access_token",V=t=>t?t.kind?t:t.accessToken?{kind:ne,accessToken:t.accessToken,expiresAt:t.expiresAt||null}:null:null,ge=new Set(["host_not_allowed","invalid_token","provider_unavailable"]),N=typeof window!="undefined"&&window.location.protocol==="https:",me=8e3,G=t=>{try{return new URL(t).origin}catch{return null}},Y=(t,o)=>{const i=o==null?void 0:o.origin;return!i||G(t==null?void 0:t.authUrl)!==i?null:i},ee=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(".")},re=(t,o)=>{try{const i=new URL(t),f=new URL(o);return i.protocol!==f.protocol?!0:ee(i.hostname)!==ee(f.hostname)}catch{return!0}},se=(t,{onBlocked:o,onClosed:i})=>{const f=window.open(t.authUrl,"mm-embed-auth","popup,width=600,height=700");if(!f)return o(),()=>{};const h=setInterval(()=>{f.closed&&(clearInterval(h),i())},1e3);return()=>clearInterval(h)},oe=({children:t,launcher:o,broker:i})=>{const f=r.useContext(K),[h,k]=r.useState({}),[L,x]=r.useState({}),[T,z]=r.useState({}),[I,M]=r.useState({}),F=r.useRef(T);F.current=T;const p=r.useRef(null),v=r.useRef({}),O=r.useRef({}),$=r.useRef({}),S=r.useRef(i);S.current=i;const _=r.useCallback(e=>{const n=O.current[e];if(!n)return;const s=l=>!l[e]||l[e].clientId?l:{...l,[e]:{...l[e],clientId:n}};k(s),M(s)},[]),P=r.useCallback((e,n)=>{e&&(M(s=>s[e]?s:{...s,[e]:{origin:e,reason:n,clientId:O.current[e]||null}}),_(e))},[_]),u=r.useCallback((e,{v2:n=!1,origin:s=null}={})=>{s&&(n&&F.current[s]||(k(l=>l[s]?l:{...l,[s]:{origin:s,authUrl:e.authUrl,silentUrl:e.silentUrl||null,status:n&&S.current?"broker":n&&e.silentUrl&&N?"silent":"interactive",v2:n,scope:e.scope||null,acceptsCredentials:$.current[s]||null,consent:null,error:null,clientId:e.clientId||O.current[s]||null,popupBlocked:!1}}),_(s)))},[_]),a=r.useCallback(e=>{k(n=>{if(!n[e])return n;const s={...n};return delete s[e],s})},[]),c=r.useCallback(e=>{e&&(a(e),x(n=>({...n,[e]:(n[e]||0)+1})))},[a]),d=r.useCallback(e=>{k(n=>!n[e]||n[e].status==="interactive"?n:{...n,[e]:{...n[e],status:"interactive"}})},[]),m=r.useCallback(e=>{a(e.origin)},[a]),E=r.useCallback((e,n)=>{const s=Y(e,n);if(s){if(re(s,window.location.origin)){P(s,"cross-site-legacy");return}u(e,{origin:s})}},[u,P]);r.useEffect(()=>{if(!f)return;const e=[f.addListener("*","init",(n,s)=>{s!=null&&s.origin&&(n!=null&&n.clientId)&&(O.current[s.origin]=n.clientId,_(s.origin)),s!=null&&s.origin&&Array.isArray(n==null?void 0:n.acceptsCredentials)&&($.current[s.origin]=n.acceptsCredentials)}),f.addListener("*","authorize",E),f.addListener("*","login",E),f.addListener("*","credential-request",(n,s)=>u(n,{v2:!0,origin:Y(n,s)}))];return()=>e.forEach(n=>n())},[f,E,u,_]),r.useEffect(()=>{const e=n=>{const s=n==null?void 0:n.data;if(!s||s.type!=="authorized"&&s.type!=="authorize-failed")return;const l=G(s.authUrl);if(!(!l||n.origin!==l)){if(s.type==="authorized"){s.accessToken?(z(b=>({...b,[l]:V({accessToken:s.accessToken})})),a(l)):c(l);return}d(l)}};return window.addEventListener("message",e),()=>window.removeEventListener("message",e)},[a,c,d]);const U=r.useCallback((e,n)=>{const s=e==null?void 0:e.origin,l=V(n);!s||!l||(z(b=>({...b,[s]:l})),a(s))},[a]),R=r.useCallback((e,n)=>{k(s=>s[e]?{...s,[e]:{...s[e],...n}}:s)},[]),w=r.useCallback(async(e,{approve:n}={})=>{const s=S.current,{origin:l}=e;let b;try{b=await s({origin:l,clientId:e.clientId,scope:e.scope,authUrl:e.authUrl},{approve:n})}catch{n?R(l,{error:{reason:"broker_unavailable"}}):R(l,{status:e.silentUrl&&N?"silent":"interactive"});return}if((b==null?void 0:b.status)===200&&b.credential){U(e,b.credential);return}if((b==null?void 0:b.status)===409&&b.consentRequired){R(l,{status:"interactive",consent:{client:b.client||null,stepUp:!!b.stepUp,scope:b.scope||e.scope},error:null});return}const D=(b==null?void 0:b.error)||"broker_error";if(!n&&ge.has(D)){R(l,{status:e.silentUrl&&N?"silent":"interactive"});return}if(n&&D==="consent_denied"){R(l,{error:null});return}a(l),M(X=>({...X,[l]:{origin:l,reason:`broker:${D}`,detail:b||null,clientId:e.clientId||O.current[l]||null}}))},[U,R,a]),y=r.useRef({});r.useEffect(()=>{Object.values(h).forEach(e=>{e.status!=="broker"||y.current[e.origin]||(y.current[e.origin]=!0,w(e).finally(()=>{delete y.current[e.origin]}))})},[h,w]);const j=r.useCallback(e=>!S.current||!(e!=null&&e.consent)?Promise.resolve():w(e,{approve:!0}),[w]);r.useEffect(()=>{const e=v.current;Object.values(h).forEach(n=>{n.status==="silent"&&!e[n.origin]&&(e[n.origin]=setTimeout(()=>{delete e[n.origin],d(n.origin)},me))}),Object.keys(e).forEach(n=>{(!h[n]||h[n].status!=="silent")&&(clearTimeout(e[n]),delete e[n])})},[h,d]),r.useEffect(()=>()=>{p.current&&p.current(),Object.values(v.current).forEach(clearTimeout)},[]);const A=r.useCallback(e=>{p.current&&(p.current(),p.current=null);const n=o||se;p.current=n(e,{onBlocked:()=>{k(s=>s[e.origin]?{...s,[e.origin]:{...s[e.origin],popupBlocked:!0}}:s)},onClosed:()=>{if(e.v2){N&&k(s=>!s[e.origin]||!s[e.origin].silentUrl?s:{...s,[e.origin]:{...s[e.origin],status:"silent"}});return}c(e.origin)}})},[o,c]),q={pending:Object.values(h).filter(e=>e.status==="interactive"),authorize:A,approve:j,complete:U,dismiss:m,originEpochs:L,credentials:T,unsupported:I},Z=Object.values(h).filter(e=>e.status==="silent"&&e.silentUrl);return g.default.createElement(H.Provider,{value:q},t,Z.map(e=>g.default.createElement("iframe",{key:`mm-silent-auth-${e.origin}`,src:e.silentUrl,title:`MachineMetrics silent authorization (${e.origin})`,"aria-hidden":"true",tabIndex:-1,style:{display:"none"}})))};oe.propTypes={children:C.default.node,launcher:C.default.func,broker:C.default.func};const ie=()=>r.useContext(H),ue=t=>{const{originEpochs:o}=r.useContext(H),i=G(t);return i&&o[i]||0},ce=t=>{const{credentials:o}=r.useContext(H),i=G(t);return i&&o[i]||null},ae=t=>{const{unsupported:o}=r.useContext(H),i=G(t);return i&&o[i]||null},le=({children:t,authorizationLauncher:o,credentialBroker:i})=>{const[f,h]=r.useState({}),[k,L]=r.useState({}),x=r.useRef({}),T=r.useRef({}),z=r.useRef({}),I=r.useCallback((u,a)=>{var c;return!!((c=z.current[u])!=null&&c.has(a))},[]),M=r.useCallback((u,a,c)=>{h(d=>({...d,[u]:{origin:a,frameRef:c}}))},[]),F=r.useCallback(u=>{h(a=>{const c={...a};return delete c[u],c}),L(a=>{const c={...a};return delete c[u],c}),delete z.current[u]},[]);r.useEffect(()=>{const u=(c=[],d,m)=>{c.forEach(E=>E(d,m))},a=c=>{var y,j,A,q,Z,e,n;if(!((y=c==null?void 0:c.data)!=null&&y.instanceId))return;const{instanceId:d,type:m}=c.data,E=f[d],U=(A=(j=E==null?void 0:E.frameRef)==null?void 0:j.current)==null?void 0:A.contentWindow;if(!U||c.source!==U||c.origin!==E.origin)return;const R={origin:c.origin},w=x.current;if(m==="response"){const{callbackId:s,response:l,error:b}=c.data,D=T.current[s];D&&(D(l,b),delete T.current[s]);return}if(m==="mark-registered"){const{requestType:s}=c.data;z.current[d]||(z.current[d]=new Set),z.current[d].add(s);return}m==="ready"&&L(s=>({...s,[d]:!0})),u((q=w[d])==null?void 0:q[m],c.data,R),u((Z=w["*"])==null?void 0:Z[m],c.data,R),u((e=w[d])==null?void 0:e["*"],c.data,R),u((n=w["*"])==null?void 0:n["*"],c.data,R)};return window.addEventListener("message",a),()=>{window.removeEventListener("message",a)}},[f]);const p=r.useCallback((u,a,c)=>{var m,E;const d=f[u];if(!d){console.warn(`Origin not set for id: ${u}. Unable to send message.`);return}(E=(m=d==null?void 0:d.frameRef)==null?void 0:m.current)!=null&&E.contentWindow&&d.frameRef.current.contentWindow.postMessage({type:a,...c,instanceId:u},d.origin)},[f]),v=r.useRef(0),O=r.useCallback(()=>`${Date.now()}-${++v.current}`,[]),$=r.useCallback(async(u,a,c={})=>new Promise((d,m)=>{const E=O(),U=(R,w)=>{delete T.current[E],w?m(w):d(R)};T.current[E]=U,p(u,"request",{callbackId:E,requestType:a,data:c})}),[p]),S=r.useCallback((u,a)=>{p(u,"load-options",a)},[p]),_=r.useCallback((u,a)=>{p(u,"validate",a)},[p]),P=r.useMemo(()=>({registerFrame:M,unregisterFrame:F,sendMessage:p,sendRequest:$,loadOptions:S,validate:_,hasHandler:I,readyFrames:k,addListener:(u,a,c)=>(x.current[u]||(x.current[u]={}),x.current[u][a]||(x.current[u][a]=[]),x.current[u][a].push(c),()=>{x.current[u][a]=x.current[u][a].filter(d=>d!==c)})}),[M,F,p,$,S,_,I,k]);return g.default.createElement(K.Provider,{value:P},g.default.createElement(oe,{launcher:o,broker:i},t))},B=(t,o,i)=>{const f=r.useContext(K);if(f===null)throw new Error("useEmbeddedEffect must be used within a MMEmbeddableZoneProvider");const h=r.useRef(i);r.useEffect(()=>{h.current=i},[i]),r.useEffect(()=>{if(!(!t||!o)){if(o.startsWith("key:")){const k=o.substring(4);return f.readyFrames[t]&&f.sendMessage(t,"subscribe-key",{keyChord:k}),f.addListener(t,`key-pressed:${k}`,(...x)=>h.current(...x))}return f.addListener(t,o,(...k)=>h.current(...k))}},[f,t,o])};le.propTypes={children:C.default.node.isRequired,authorizationLauncher:C.default.func,credentialBroker:C.default.func};const Q=W.default.default||W.default,Ee=1e4,ke="credentials",te=(t,o)=>`${t}/mm-embedded-interop?id=${o}&origin=${window.location.origin}&caps=${ke}`,Ce=Q.iframe`
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const t=require("react"),be=require("prop-types"),he=require("styled-components"),Q=n=>n&&n.__esModule?n:{default:n},h=Q(t),R=Q(be),Z=Q(he),K=t.createContext(null),H=t.createContext({pending:[],authorize:()=>{},approve:()=>{},complete:()=>{},dismiss:()=>{},originEpochs:{},credentials:{},unsupported:{}}),ne="access_token",J=n=>n?n.kind?n:n.accessToken?{kind:ne,accessToken:n.accessToken,expiresAt:n.expiresAt||null}:null:null,me=new Set(["host_not_allowed","invalid_token","provider_unavailable"]),N=typeof window!="undefined"&&window.location.protocol==="https:",ge=8e3,G=n=>{try{return new URL(n).origin}catch{return null}},ee=(n,o)=>{const c=o==null?void 0:o.origin;return!c||G(n==null?void 0:n.authUrl)!==c?null:c},te=n=>{if(!n||/^\d{1,3}(?:\.\d{1,3}){3}$/.test(n)||n.includes(":"))return n;const o=n.split(".");return o.length<=2?n:o.slice(-2).join(".")},re=(n,o)=>{try{const c=new URL(n),f=new URL(o);return c.protocol!==f.protocol?!0:te(c.hostname)!==te(f.hostname)}catch{return!0}},se=(n,{onBlocked:o,onClosed:c})=>{const f=window.open(n.authUrl,"mm-embed-auth","popup,width=600,height=700");if(!f)return o(),()=>{};const b=setInterval(()=>{f.closed&&(clearInterval(b),c())},1e3);return()=>clearInterval(b)},oe=({children:n,launcher:o,broker:c})=>{const f=t.useContext(K),[b,g]=t.useState({}),[$,w]=t.useState({}),[z,_]=t.useState({}),[y,A]=t.useState({}),q=t.useRef(z);q.current=z;const E=t.useRef(b);E.current=b;const M=t.useRef(null),D=t.useRef({}),T=t.useRef({}),P=t.useRef({}),O=t.useRef(c);O.current=c;const x=t.useCallback(e=>{const r=T.current[e];if(!r)return;const s=i=>!i[e]||i[e].clientId?i:{...i,[e]:{...i[e],clientId:r}};g(s),A(s)},[]),a=t.useCallback((e,r)=>{e&&(A(s=>s[e]?s:{...s,[e]:{origin:e,reason:r,clientId:T.current[e]||null}}),x(e))},[x]),l=t.useCallback((e,{v2:r=!1,origin:s=null}={})=>{s&&(r&&q.current[s]||(g(i=>i[s]?i:{...i,[s]:{origin:s,authUrl:e.authUrl,silentUrl:e.silentUrl||null,status:r&&O.current?"broker":r&&e.silentUrl&&N?"silent":"interactive",v2:r,scope:e.scope||null,acceptsCredentials:P.current[s]||null,consent:null,error:null,clientId:e.clientId||T.current[s]||null,popupBlocked:!1}}),x(s)))},[x]),u=t.useCallback(e=>{g(r=>{if(!r[e])return r;const s={...r};return delete s[e],s})},[]),d=t.useCallback(e=>{e&&(u(e),w(r=>({...r,[e]:(r[e]||0)+1})))},[u]),k=t.useCallback(e=>{g(r=>!r[e]||r[e].status==="interactive"?r:{...r,[e]:{...r[e],status:"interactive"}})},[]),C=t.useCallback(e=>{u(e.origin)},[u]),S=t.useCallback((e,r)=>{const s=ee(e,r);if(s){if(re(s,window.location.origin)){a(s,"cross-site-legacy");return}l(e,{origin:s})}},[l,a]);t.useEffect(()=>{if(!f)return;const e=[f.addListener("*","init",(r,s)=>{s!=null&&s.origin&&(r!=null&&r.clientId)&&(T.current[s.origin]=r.clientId,x(s.origin)),s!=null&&s.origin&&Array.isArray(r==null?void 0:r.acceptsCredentials)&&(P.current[s.origin]=r.acceptsCredentials)}),f.addListener("*","authorize",S),f.addListener("*","login",S),f.addListener("*","credential-request",(r,s)=>l(r,{v2:!0,origin:ee(r,s)}))];return()=>e.forEach(r=>r())},[f,S,l,x]),t.useEffect(()=>{const e=r=>{const s=r==null?void 0:r.data;if(!s||s.type!=="authorized"&&s.type!=="authorize-failed")return;const i=G(s.authUrl);if(!(!i||r.origin!==i)){if(s.type==="authorized"){if(s.accessToken){if(!E.current[i])return;_(p=>({...p,[i]:J({accessToken:s.accessToken})})),u(i)}else d(i);return}k(i)}};return window.addEventListener("message",e),()=>window.removeEventListener("message",e)},[u,d,k]);const I=t.useCallback((e,r)=>{const s=e==null?void 0:e.origin,i=J(r);!s||!i||(_(p=>({...p,[s]:i})),u(s))},[u]),m=t.useCallback((e,r)=>{g(s=>s[e]?{...s,[e]:{...s[e],...r}}:s)},[]),U=t.useCallback(async(e,{approve:r}={})=>{const s=O.current,{origin:i}=e;let p;try{p=await s({origin:i,clientId:e.clientId,scope:e.scope,authUrl:e.authUrl},{approve:r})}catch{r?m(i,{error:{reason:"broker_unavailable"}}):m(i,{status:e.silentUrl&&N?"silent":"interactive"});return}if((p==null?void 0:p.status)===200&&p.credential){I(e,p.credential);return}if((p==null?void 0:p.status)===409&&p.consentRequired){m(i,{status:"interactive",consent:{client:p.client||null,stepUp:!!p.stepUp,scope:p.scope||e.scope},error:null});return}const V=(p==null?void 0:p.error)||"broker_error";if(!r&&me.has(V)){m(i,{status:e.silentUrl&&N?"silent":"interactive"});return}if(r&&V==="consent_denied"){m(i,{error:null});return}u(i),A(Y=>({...Y,[i]:{origin:i,reason:`broker:${V}`,detail:p||null,clientId:e.clientId||T.current[i]||null}}))},[I,m,u]),F=t.useRef({});t.useEffect(()=>{Object.values(b).forEach(e=>{e.status!=="broker"||F.current[e.origin]||(F.current[e.origin]=!0,U(e).finally(()=>{delete F.current[e.origin]}))})},[b,U]);const L=t.useCallback(e=>!O.current||!(e!=null&&e.consent)?Promise.resolve():U(e,{approve:!0}),[U]);t.useEffect(()=>{const e=D.current;Object.values(b).forEach(r=>{r.status==="silent"&&!e[r.origin]&&(e[r.origin]=setTimeout(()=>{delete e[r.origin],k(r.origin)},ge))}),Object.keys(e).forEach(r=>{(!b[r]||b[r].status!=="silent")&&(clearTimeout(e[r]),delete e[r])})},[b,k]),t.useEffect(()=>()=>{M.current&&M.current(),Object.values(D.current).forEach(clearTimeout)},[]);const v=t.useCallback(e=>{M.current&&(M.current(),M.current=null);const r=o||se;M.current=r(e,{onBlocked:()=>{g(s=>s[e.origin]?{...s,[e.origin]:{...s[e.origin],popupBlocked:!0}}:s)},onClosed:()=>{if(e.v2){N&&g(s=>!s[e.origin]||!s[e.origin].silentUrl?s:{...s,[e.origin]:{...s[e.origin],status:"silent"}});return}d(e.origin)}})},[o,d]),B={pending:Object.values(b).filter(e=>e.status==="interactive"),authorize:v,approve:L,complete:I,dismiss:C,originEpochs:$,credentials:z,unsupported:y},j=Object.values(b).filter(e=>e.status==="silent"&&e.silentUrl);return h.default.createElement(H.Provider,{value:B},n,j.map(e=>h.default.createElement("iframe",{key:`mm-silent-auth-${e.origin}`,src:e.silentUrl,title:`MachineMetrics silent authorization (${e.origin})`,"aria-hidden":"true",tabIndex:-1,style:{display:"none"}})))};oe.propTypes={children:R.default.node,launcher:R.default.func,broker:R.default.func};const ue=()=>t.useContext(H),ie=n=>{const{originEpochs:o}=t.useContext(H),c=G(n);return c&&o[c]||0},ce=n=>{const{credentials:o}=t.useContext(H),c=G(n);return c&&o[c]||null},ae=n=>{const{unsupported:o}=t.useContext(H),c=G(n);return c&&o[c]||null},le=({children:n,authorizationLauncher:o,credentialBroker:c})=>{const[f,b]=t.useState({}),[g,$]=t.useState({}),w=t.useRef({}),z=t.useRef({}),_=t.useRef({}),y=t.useCallback((a,l)=>{var u;return!!((u=_.current[a])!=null&&u.has(l))},[]),A=t.useCallback((a,l,u)=>{b(d=>({...d,[a]:{origin:l,frameRef:u}}))},[]),q=t.useCallback(a=>{b(l=>{const u={...l};return delete u[a],u}),$(l=>{const u={...l};return delete u[a],u}),delete _.current[a]},[]);t.useEffect(()=>{const a=(u=[],d,k)=>{u.forEach(C=>C(d,k))},l=u=>{var U,F,L,v,B,j,e;if(!((U=u==null?void 0:u.data)!=null&&U.instanceId))return;const{instanceId:d,type:k}=u.data,C=f[d],S=(L=(F=C==null?void 0:C.frameRef)==null?void 0:F.current)==null?void 0:L.contentWindow;if(!S||u.source!==S||u.origin!==C.origin)return;const I={origin:u.origin},m=w.current;if(k==="response"){const{callbackId:r,response:s,error:i}=u.data,p=z.current[r];p&&(p(s,i),delete z.current[r]);return}if(k==="mark-registered"){const{requestType:r}=u.data;_.current[d]||(_.current[d]=new Set),_.current[d].add(r);return}k==="ready"&&$(r=>({...r,[d]:!0})),a((v=m[d])==null?void 0:v[k],u.data,I),a((B=m["*"])==null?void 0:B[k],u.data,I),a((j=m[d])==null?void 0:j["*"],u.data,I),a((e=m["*"])==null?void 0:e["*"],u.data,I)};return window.addEventListener("message",l),()=>{window.removeEventListener("message",l)}},[f]);const E=t.useCallback((a,l,u)=>{var k,C;const d=f[a];if(!d){console.warn(`Origin not set for id: ${a}. Unable to send message.`);return}(C=(k=d==null?void 0:d.frameRef)==null?void 0:k.current)!=null&&C.contentWindow&&d.frameRef.current.contentWindow.postMessage({type:l,...u,instanceId:a},d.origin)},[f]),M=t.useRef(0),D=t.useCallback(()=>`${Date.now()}-${++M.current}`,[]),T=t.useCallback(async(a,l,u={})=>new Promise((d,k)=>{const C=D(),S=(I,m)=>{delete z.current[C],m?k(m):d(I)};z.current[C]=S,E(a,"request",{callbackId:C,requestType:l,data:u})}),[E]),P=t.useCallback((a,l)=>{E(a,"load-options",l)},[E]),O=t.useCallback((a,l)=>{E(a,"validate",l)},[E]),x=t.useMemo(()=>({registerFrame:A,unregisterFrame:q,sendMessage:E,sendRequest:T,loadOptions:P,validate:O,hasHandler:y,readyFrames:g,addListener:(a,l,u)=>(w.current[a]||(w.current[a]={}),w.current[a][l]||(w.current[a][l]=[]),w.current[a][l].push(u),()=>{w.current[a][l]=w.current[a][l].filter(d=>d!==u)})}),[A,q,E,T,P,O,y,g]);return h.default.createElement(K.Provider,{value:x},h.default.createElement(oe,{launcher:o,broker:c},n))},W=(n,o,c)=>{const f=t.useContext(K);if(f===null)throw new Error("useEmbeddedEffect must be used within a MMEmbeddableZoneProvider");const b=t.useRef(c);t.useEffect(()=>{b.current=c},[c]),t.useEffect(()=>{if(!(!n||!o)){if(o.startsWith("key:")){const g=o.substring(4);return f.readyFrames[n]&&f.sendMessage(n,"subscribe-key",{keyChord:g}),f.addListener(n,`key-pressed:${g}`,(...w)=>b.current(...w))}return f.addListener(n,o,(...g)=>b.current(...g))}},[f,n,o])};le.propTypes={children:R.default.node.isRequired,authorizationLauncher:R.default.func,credentialBroker:R.default.func};const X=Z.default.default||Z.default,Ee=1e4,ke="credentials",Ce=(n,o)=>`${n}/mm-embedded-interop?id=${encodeURIComponent(o)}&origin=${encodeURIComponent(window.location.origin)}&caps=${ke}`,Re=X.iframe`
2
2
  width: 100%;
3
3
  height: 100%;
4
4
  border: none;
5
- visibility: ${t=>t.$isReady?"visible":"hidden"};
6
- `,Re=Q.div`
5
+ visibility: ${n=>n.$isReady?"visible":"hidden"};
6
+ `,we=X.div`
7
7
  width: 100%;
8
8
  height: 100%;
9
9
  display: flex;
@@ -16,13 +16,13 @@
16
16
  text-align: center;
17
17
  color: #555;
18
18
  font-size: 14px;
19
- `,de=t=>{const o=t&&t.origin||"This app",i=t&&t.reason||"";switch(i){case"broker:scope_above_ceiling":return{title:`${o} 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:`${o} can’t be authorized here`,detail:"It isn’t registered to run at this address."};case"broker:cross_company_principal":return{title:`${o} can’t be authorized here`,detail:"It can’t be authorized for this account."};default:return i.startsWith("broker:")?{title:`${o} can’t be authorized here`,detail:"Authorization was refused."}:{title:`${o} can’t be embedded here`,detail:"It needs an update to support embedding from a different domain."}}},fe=({entry:t})=>{const o=de(t);return g.default.createElement(Re,{"data-reason":t&&t.reason||void 0},g.default.createElement("div",{style:{fontWeight:600}},o.title),g.default.createElement("div",{style:{fontSize:12,color:"#888"}},o.detail))};fe.propTypes={entry:C.default.shape({origin:C.default.string,name:C.default.string,reason:C.default.string,detail:C.default.object})};const we=Q.div`
19
+ `,de=n=>{const o=n&&n.origin||"This app",c=n&&n.reason||"";switch(c){case"broker:scope_above_ceiling":return{title:`${o} 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:`${o} can’t be authorized here`,detail:"It isn’t registered to run at this address."};case"broker:cross_company_principal":return{title:`${o} can’t be authorized here`,detail:"It can’t be authorized for this account."};default:return c.startsWith("broker:")?{title:`${o} can’t be authorized here`,detail:"Authorization was refused."}:{title:`${o} can’t be embedded here`,detail:"It needs an update to support embedding from a different domain."}}},fe=({entry:n})=>{const o=de(n);return h.default.createElement(we,{"data-reason":n&&n.reason||void 0},h.default.createElement("div",{style:{fontWeight:600}},o.title),h.default.createElement("div",{style:{fontSize:12,color:"#888"}},o.detail))};fe.propTypes={entry:R.default.shape({origin:R.default.string,name:R.default.string,reason:R.default.string,detail:R.default.object})};const xe=X.div`
20
20
  height: 100%;
21
21
  display: flex;
22
22
  flex: 1;
23
23
  align-items: center;
24
24
  justify-content: center;
25
- `,xe=()=>g.default.createElement(we,null,g.default.createElement("div",{style:{textAlign:"center"}},"This app couldn’t be loaded as an embeddable widget.")),pe=({id:t,src:o,path:i,onInit:f=()=>{},onTimeout:h,context:k={},params:L={},renderUnsupported:x,renderTimeout:T,...z})=>{if("isConfiguring"in z)return console.error("isConfiguring must be passed via the params prop to MMEmbeddableZone"),null;if("colorMode"in k)return console.error("colorMode must be passed via the params prop to MMEmbeddableZone"),null;if("isFullScreen"in k)return console.error("isFullScreen must be passed via the params prop to MMEmbeddableZone"),null;const I=r.useRef(),[M,F]=r.useState(),[p,v]=r.useState(0),[O,$]=r.useState(!1),[S,_]=r.useState(!1),P=ue(o),u=ce(o),a=ae(o);r.useEffect(()=>{P>0&&v(0)},[P]);const{registerFrame:c,unregisterFrame:d,sendMessage:m}=r.useContext(K),[E,U]=r.useState(),R=r.useRef(),w=r.useRef(h),y=r.useRef(f),j=r.useRef(!1);r.useEffect(()=>{w.current=h},[h]),r.useEffect(()=>{y.current=f},[f]),r.useEffect(()=>{p&&m(t,"set-context",{context:{...k}})},[k,t,p]),r.useEffect(()=>{p&&m(t,"set-params",{params:L})},[L,t,p]),r.useEffect(()=>{i!==void 0&&U((i==null?void 0:i.indexOf("/"))===0?i:`/${i}`)},[i]),r.useEffect(()=>{E===void 0||!p||m(t,"navigate",{path:E})},[E,p,t,m]),r.useEffect(()=>{if(!o||!t||!I)return;const n=new URL(o);return c(t,n.origin,I),y.current(),F(te(n.origin,t)),()=>{d(t)}},[o,t,c,I]),r.useEffect(()=>{if(!(!M||j.current))return R.current=setTimeout(()=>{$(!0),w.current&&w.current()},Ee),()=>clearTimeout(R.current)},[M]);const A=r.useCallback(()=>{j.current=!0,clearTimeout(R.current),$(!1)},[]),[q,Z]=r.useState(null);B(t,"init",n=>{A(),Array.isArray(n==null?void 0:n.acceptsCredentials)&&Z(n.acceptsCredentials)}),B(t,"authorize",A),B(t,"login",A),B(t,"credential-request",()=>{A(),_(!0)}),r.useEffect(()=>{if(!S||!u)return;const n=q;if(Array.isArray(n)&&!n.includes(u.kind))return;const s=u.kind==="access_token"?{accessToken:u.accessToken}:{};m(t,"credential",{...s,credential:u})},[S,u,q,t,m]),B(t,"ready",()=>{A(),v(n=>n+1)});const e=r.useRef();return B(t,"heartbeat",()=>{e.current&&clearTimeout(e.current),e.current=setTimeout(()=>{if(I.current){const n=new URL(o);I.current.src=te(n.origin,t)}},6e3)}),r.useEffect(()=>()=>{e.current&&clearTimeout(e.current)},[]),a?x?x(a):g.default.createElement(fe,{entry:a}):O&&!p?T?T():g.default.createElement(xe,null):g.default.createElement(Ce,{key:`auth-epoch-${P}`,$isReady:p,ref:I,src:M,...z})};pe.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};const Te=W.default.div`
25
+ `,Te=()=>h.default.createElement(xe,null,h.default.createElement("div",{style:{textAlign:"center"}},"This app couldn’t be loaded as an embeddable widget.")),pe=({id:n,src:o,path:c,onInit:f=()=>{},onTimeout:b,context:g={},params:$={},renderUnsupported:w,renderTimeout:z,..._})=>{if("isConfiguring"in _)return console.error("isConfiguring must be passed via the params prop to MMEmbeddableZone"),null;if("colorMode"in g)return console.error("colorMode must be passed via the params prop to MMEmbeddableZone"),null;if("isFullScreen"in g)return console.error("isFullScreen must be passed via the params prop to MMEmbeddableZone"),null;const y=t.useRef(),[A,q]=t.useState(),[E,M]=t.useState(0),[D,T]=t.useState(!1),[P,O]=t.useState(!1),x=ie(o),a=ce(o),l=ae(o),[u,d]=t.useState(0),[k,C]=t.useState(null),{registerFrame:S,unregisterFrame:I,sendMessage:m}=t.useContext(K),[U,F]=t.useState(),L=t.useRef(),v=t.useRef(b),B=t.useRef(f),j=t.useRef(!1),e=t.useCallback(()=>{j.current=!1,clearTimeout(L.current),M(0),T(!1),O(!1),C(null)},[]);t.useEffect(()=>{(x>0||u>0)&&e()},[x,u,e]),t.useEffect(()=>{v.current=b},[b]),t.useEffect(()=>{B.current=f},[f]),t.useEffect(()=>{E&&m(n,"set-context",{context:{...g}})},[g,n,E]),t.useEffect(()=>{E&&m(n,"set-params",{params:$})},[$,n,E]),t.useEffect(()=>{c!==void 0&&F((c==null?void 0:c.indexOf("/"))===0?c:`/${c}`)},[c]),t.useEffect(()=>{U===void 0||!E||m(n,"navigate",{path:U})},[U,E,n,m]),t.useEffect(()=>{if(!o||!n||!y)return;e();const i=new URL(o);return S(n,i.origin,y),B.current(),q(Ce(i.origin,n)),()=>{I(n)}},[o,n,S,y,e]),t.useEffect(()=>{if(!(!A||j.current))return L.current=setTimeout(()=>{T(!0),v.current&&v.current()},Ee),()=>clearTimeout(L.current)},[A,o,x,u]);const r=t.useCallback(()=>{j.current=!0,clearTimeout(L.current),T(!1)},[]);W(n,"init",i=>{r(),Array.isArray(i==null?void 0:i.acceptsCredentials)&&C(i.acceptsCredentials)}),W(n,"authorize",r),W(n,"login",r),W(n,"credential-request",()=>{r(),O(!0)}),t.useEffect(()=>{if(!P||!a)return;const i=k;if(Array.isArray(i)&&!i.includes(a.kind))return;const p=a.kind==="access_token"?{accessToken:a.accessToken}:{};m(n,"credential",{...p,credential:a})},[P,a,k,n,m]),W(n,"ready",()=>{r(),M(i=>i+1)});const s=t.useRef();return W(n,"heartbeat",()=>{s.current&&clearTimeout(s.current),s.current=setTimeout(()=>{d(i=>i+1)},6e3)}),t.useEffect(()=>()=>{s.current&&clearTimeout(s.current)},[]),l?w?w(l):h.default.createElement(fe,{entry:l}):D&&!E?z?z():h.default.createElement(Te,null):h.default.createElement(Re,{key:`auth-epoch-${x}-frame-${u}`,$isReady:E,ref:y,src:A,..._})};pe.propTypes={id:R.default.string,src:R.default.string.isRequired,path:R.default.string,onInit:R.default.func,onTimeout:R.default.func,renderUnsupported:R.default.func,renderTimeout:R.default.func};const Ie=Z.default.div`
26
26
  position: fixed;
27
27
  inset: 0;
28
28
  background: rgba(0, 0, 0, 0.45);
@@ -30,7 +30,7 @@
30
30
  align-items: center;
31
31
  justify-content: center;
32
32
  z-index: 10000;
33
- `,ze=W.default.div`
33
+ `,ze=Z.default.div`
34
34
  background: #fff;
35
35
  border-radius: 8px;
36
36
  box-shadow: 0 4px 24px rgba(0, 0, 0, 0.2);
@@ -39,13 +39,13 @@
39
39
  max-width: calc(100vw - 32px);
40
40
  font-family: sans-serif;
41
41
  color: #222;
42
- `,Ie=W.default.div`
42
+ `,_e=Z.default.div`
43
43
  display: flex;
44
44
  align-items: center;
45
45
  justify-content: space-between;
46
46
  padding: 10px 0;
47
47
  gap: 16px;
48
- `,_e=W.default.button`
48
+ `,Me=Z.default.button`
49
49
  background: #16a500;
50
50
  color: #fff;
51
51
  border: none;
@@ -54,8 +54,8 @@
54
54
  font-size: 14px;
55
55
  cursor: pointer;
56
56
  white-space: nowrap;
57
- `,Me=W.default.p`
57
+ `,Se=Z.default.p`
58
58
  color: #b3261e;
59
59
  font-size: 13px;
60
60
  margin: 4px 0 0;
61
- `,Se=()=>{const{pending:t,authorize:o}=ie();return t.length===0?null:g.default.createElement(Te,null,g.default.createElement(ze,null,g.default.createElement("h3",{style:{margin:"0 0 8px"}},"Authorization Required"),g.default.createElement("p",{style:{margin:"0 0 12px",fontSize:14,color:"#555"}},"The following apps need you to sign in and authorize them before they can load."),t.map(i=>g.default.createElement("div",{key:i.origin},g.default.createElement(Ie,null,g.default.createElement("div",null,g.default.createElement("div",{style:{fontWeight:600}},i.origin)),g.default.createElement(_e,{onClick:()=>o(i)},"Authorize")),i.popupBlocked&&g.default.createElement(Me,null,"The sign-in window was blocked. Allow popups for this site, then try again.")))))};exports.CREDENTIAL_KIND_ACCESS_TOKEN=ne;exports.EmbeddedAuthorizationContext=H;exports.EmbeddedAuthorizationPrompt=Se;exports.MMEmbeddableZone=pe;exports.MMEmbeddableZoneContext=K;exports.MMEmbeddableZoneProvider=le;exports.isCrossSite=re;exports.normalizeCredential=V;exports.popupAuthorizationLauncher=se;exports.unsupportedCopy=de;exports.useEmbeddedAuthorizations=ie;exports.useEmbeddedCredential=ce;exports.useEmbeddedEffect=B;exports.useEmbeddedOriginEpoch=ue;exports.useEmbeddedUnsupported=ae;
61
+ `,Ue=()=>{const{pending:n,authorize:o}=ue();return n.length===0?null:h.default.createElement(Ie,null,h.default.createElement(ze,null,h.default.createElement("h3",{style:{margin:"0 0 8px"}},"Authorization Required"),h.default.createElement("p",{style:{margin:"0 0 12px",fontSize:14,color:"#555"}},"The following apps need you to sign in and authorize them before they can load."),n.map(c=>h.default.createElement("div",{key:c.origin},h.default.createElement(_e,null,h.default.createElement("div",null,h.default.createElement("div",{style:{fontWeight:600}},c.origin)),h.default.createElement(Me,{onClick:()=>o(c)},"Authorize")),c.popupBlocked&&h.default.createElement(Se,null,"The sign-in window was blocked. Allow popups for this site, then try again.")))))};exports.CREDENTIAL_KIND_ACCESS_TOKEN=ne;exports.EmbeddedAuthorizationContext=H;exports.EmbeddedAuthorizationPrompt=Ue;exports.MMEmbeddableZone=pe;exports.MMEmbeddableZoneContext=K;exports.MMEmbeddableZoneProvider=le;exports.isCrossSite=re;exports.normalizeCredential=J;exports.popupAuthorizationLauncher=se;exports.unsupportedCopy=de;exports.useEmbeddedAuthorizations=ue;exports.useEmbeddedCredential=ce;exports.useEmbeddedEffect=W;exports.useEmbeddedOriginEpoch=ie;exports.useEmbeddedUnsupported=ae;