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