@revibase/lite 0.7.4 → 0.7.5
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.
- package/dist/index.cjs +6 -4
- package/dist/index.cjs.map +1 -1
- package/dist/index.js +6 -4
- package/dist/index.js.map +1 -1
- package/package.json +2 -2
package/dist/index.cjs
CHANGED
|
@@ -1,9 +1,11 @@
|
|
|
1
|
-
'use strict';var core=require('@revibase/core'),kit=require('@solana/kit'),computeBudget=require('@solana-program/compute-budget'),addressLookupTable=require('@solana-program/address-lookup-table'),system=require('@solana-program/system'),token=require('@solana-program/token'),jose=require('jose'),server=require('@simplewebauthn/server');var G="https://auth.revibase.com",Y="revibase.com",O="https://api.revibase.com",_="2c1LgZfCun82niPCgfg2cTMZmAiahraTjY4KNb1BSU4Z",Z="https://mainnet.block-engine.jito.wtf/api/v1/bundles",X="https://bundles.jito.wtf/api/v1/bundles/tip_floor";var S=class e extends Error{code;constructor(n,r){super(n),this.name="RevibaseError",this.code=r,Object.setPrototypeOf(this,e.prototype);}},L=class e extends S{constructor(n="Popup blocked. Please enable popups."){super(n,"POPUP_BLOCKED"),this.name="RevibasePopupBlockedError",Object.setPrototypeOf(this,e.prototype);}},E=class e extends S{constructor(n="Popup was closed by the user"){super(n,"POPUP_CLOSED"),this.name="RevibasePopupClosedError",Object.setPrototypeOf(this,e.prototype);}},B=class e extends S{constructor(n="Authentication timed out"){super(n,"TIMEOUT"),this.name="RevibaseTimeoutError",Object.setPrototypeOf(this,e.prototype);}},F=class e extends S{constructor(n="An authorization flow is already in progress"){super(n,"FLOW_IN_PROGRESS"),this.name="RevibaseFlowInProgressError",Object.setPrototypeOf(this,e.prototype);}},D=class e extends S{constructor(n="Aborted"){super(n,"ABORTED"),this.name="RevibaseAbortedError",Object.setPrototypeOf(this,e.prototype);}},Q=class e extends S{constructor(n="Popup is not open. Call startRequest first."){super(n,"POPUP_NOT_OPEN"),this.name="RevibasePopupNotOpenError",Object.setPrototypeOf(this,e.prototype);}},A=class e extends S{constructor(n){super(n,"AUTH_FAILED"),this.name="RevibaseAuthError",Object.setPrototypeOf(this,e.prototype);}},U=class e extends S{constructor(n){super(n,"API_FAILED"),this.name="RevibaseApiError",Object.setPrototypeOf(this,e.prototype);}},z=class e extends S{constructor(n="Provider can only be used in a browser environment"){super(n,"ENVIRONMENT"),this.name="RevibaseEnvironmentError",Object.setPrototypeOf(this,e.prototype);}};var ee=180*1e3,W=2e3,te=2e4,ne=async e=>{let n=await fetch("/api/sendJitoBundle",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(e)}),r=await n.json();if(!n.ok)throw new U(r.error??"Send jito bundle failed");return r},re=async()=>{let e=await fetch("/api/estimateJitoTips"),n=await e.json();if(!e.ok)throw new U(n.error??"Estimate jito tips failed");return n},oe=async e=>{let n=await fetch("/api/clientAuthorization",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(e)}),r=await n.json();if(!n.ok)throw new A(r.error??"Authorization failed");return r};function ae(e){if(typeof window>"u")throw new Error("Function can only be called in a browser environment");let n=window.innerWidth||window.screen.availWidth,r=window.innerHeight||window.screen.availHeight,a=n<=768,t,o,s,c;if(a)t=n,o=r,s=0,c=0;else {let l=window.screenLeft??window.screenX??0,u=window.screenTop??window.screenY??0,p=window.innerWidth??document.documentElement.clientWidth??window.screen.width,d=window.innerHeight??document.documentElement.clientHeight??window.screen.height;t=500,o=600,c=Math.round(l+(p-t)/2),s=Math.round(u+(d-o)/2);}let i=["popup=yes",`width=${t}`,`height=${o}`,`top=${s}`,`left=${c}`,"toolbar=no","location=no","status=no","menubar=no","scrollbars=yes","resizable=yes"].join(",");return window.open(e,"_blank",i)}function se(e,n,r){if(typeof window>"u")throw new Error("Function can only be called in a browser environment");let a=window.matchMedia("(max-width: 768px)").matches,t=window.scrollY,o={overflow:document.body.style.overflow,position:document.body.style.position,top:document.body.style.top,left:document.body.style.left,right:document.body.style.right,width:document.body.style.width},s=()=>{document.body.style.overflow="hidden",document.body.style.position="fixed",document.body.style.top=`-${t}px`,document.body.style.left="0",document.body.style.right="0",document.body.style.width="100%";},c=()=>{document.body.style.overflow=o.overflow,document.body.style.position=o.position,document.body.style.top=o.top,document.body.style.left=o.left,document.body.style.right=o.right,document.body.style.width=o.width,window.scrollTo(0,t);};s();let i=document.createElement("div");i.setAttribute("data-provider-frame-root","true"),Object.assign(i.style,{position:"fixed",inset:"0",zIndex:"2147483647",pointerEvents:"none",contain:"layout style paint"}),document.body.appendChild(i);let l=i.attachShadow({mode:"closed"}),u=document.createElement("div");Object.assign(u.style,{all:"initial",position:"fixed",inset:"0",display:"flex",alignItems:a?"flex-end":"center",justifyContent:"center",background:"rgba(0,0,0,0.45)",zIndex:"2147483647",pointerEvents:"auto",overscrollBehavior:"contain",touchAction:"none",WebkitTapHighlightColor:"transparent",paddingBottom:"env(safe-area-inset-bottom)",fontFamily:'Inter, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif'}),l.appendChild(u);let p=document.createElement("div");Object.assign(p.style,{all:"initial",position:"relative",display:"flex",width:a?"100%":"500px",height:a?"90dvh":"600px",maxWidth:"100vw",maxHeight:"100dvh",borderRadius:a?"16px 16px 0 0":"16px",overflow:"hidden",boxShadow:"0 24px 80px rgba(0,0,0,0.35)",background:"#fff",pointerEvents:"auto"}),u.appendChild(p);let d=document.createElement("iframe");d.src=e,d.title="Authorization",d.setAttribute("tabindex","0"),d.allow=[`publickey-credentials-get ${new URL(e).origin}`].join("; "),d.sandbox=["allow-scripts","allow-same-origin"].join(" "),Object.assign(d.style,{width:"100%",height:"100%",border:"0",background:"#fff",display:"block"}),p.appendChild(d);let g=document.createElement("button");g.type="button",g.setAttribute("aria-label","Close"),g.innerHTML="×",Object.assign(g.style,{all:"initial",position:"absolute",top:a?"12px":"14px",right:a?"12px":"14px",width:"44px",height:"44px",display:"grid",placeItems:"center",borderRadius:"9999px",background:"rgba(255,255,255,0.96)",color:"#111",fontSize:"28px",lineHeight:"1",cursor:"pointer",boxShadow:"0 8px 24px rgba(0,0,0,0.25)",zIndex:"2",userSelect:"none",WebkitUserSelect:"none"}),p.appendChild(g),requestAnimationFrame(()=>{try{d.focus();}catch{}});let f=h=>{h.key==="Escape"&&v();};document.addEventListener("keydown",f);let b=false,m=()=>{if(!b){b=true;try{n?.removeEventListener("abort",w);}catch{}try{document.removeEventListener("keydown",f);}catch{}try{d.src="about:blank",d.removeAttribute("src");}catch{}try{i.remove();}catch{}c();}},v=()=>{r?.(),m();};g.addEventListener("click",h=>{h.preventDefault(),h.stopPropagation(),v();}),u.addEventListener("click",h=>{h.target===u&&v();});let w=()=>{v();};return n&&(n.aborted?w():n.addEventListener("abort",w,{once:true})),{iframe:d,close:m}}var ie=class{onClientAuthorizationCallback;onSendJitoBundleCallback;onEstimateJitoTipsCallback;providerOrigin;rpId;uiMode;render;popUp=null;frame=null;rendered=null;constructor(n){let{rpId:r,rpcEndpoint:a,providerOrigin:t,ui:o,onClientAuthorizationCallback:s,onSendJitoBundleCallback:c,onEstimateJitoTipsCallback:i}=n;core.initialize({rpcEndpoint:a}),this.onClientAuthorizationCallback=s??oe,this.onSendJitoBundleCallback=c??ne,this.onEstimateJitoTipsCallback=i??re,this.providerOrigin=t??G,this.rpId=r??Y,this.uiMode=o?.mode??"iframe",this.render=o?.render;}async sendRequestToPopupProvider({onConnectedCallback:n,onSuccessCallback:r,signal:a}){if(typeof window>"u")throw new z;if(this.popUp||this.frame||this.rendered)throw new F;let t=kit.getBase64Decoder().decode(crypto.getRandomValues(new Uint8Array(16))),o=window.location.origin,s=`${this.providerOrigin}?clientOrigin=${encodeURIComponent(o)}&rid=${encodeURIComponent(t)}`,c;if(this.render)this.rendered=this.render(s);else if(this.uiMode==="iframe"){let i=new AbortController,l=()=>i.abort(),u=a;u&&(u.aborted?i.abort():(u.addEventListener("abort",l,{once:true}),c=()=>u.removeEventListener("abort",l))),this.frame=se(s,i.signal,()=>i.abort()),a=i.signal;}else if(this.popUp=ae(s),!this.popUp)throw new L;return new Promise((i,l)=>{setTimeout(()=>{this.attachTransport({rid:t,clientOrigin:o,onConnectedCallback:n,onSuccessCallback:r,signal:a,resolve:i,reject:l});},0);}).finally(()=>{try{c?.();}catch{}})}attachTransport(n){let{rid:r,clientOrigin:a,onConnectedCallback:t,onSuccessCallback:o,signal:s,reject:c,resolve:i}=n,l=()=>{m(new D);};s?.addEventListener("abort",l,{once:true});let u=null,p=false,d=null,g=null,f=null,b=()=>{window.removeEventListener("message",w),s?.removeEventListener("abort",l),d&&(clearInterval(d),d=null),g&&(clearTimeout(g),g=null),f&&(clearTimeout(f),f=null);try{u?.close();}catch{}u=null;try{this.popUp&&!this.popUp.closed&&this.popUp.close();}catch{}try{this.frame?.close();}catch{}try{this.rendered?.close();}catch{}this.popUp=null,this.frame=null,this.rendered=null;},m=h=>{p||(p=true,b(),c(h));},v=h=>{p||(p=true,b(),o(h).then(R=>{i(R);}).catch(R=>{c(R);}));};g=setTimeout(()=>{m(new B("Popup connection timed out after 20s"));},te);let w=h=>{if(p||u||h.origin!==this.providerOrigin)return;let R=h.data;if(!R||R.type!=="popup-connect"||R.rid!==r)return;g&&(clearTimeout(g),g=null);let x=new MessageChannel;u=x.port1,u.start();let q=Date.now();d=setInterval(()=>{if(p){d&&(clearInterval(d),d=null);return}if(this.rendered?.isClosed){if(this.rendered.isClosed()){m(new E("Provider UI was closed"));return}}else if(!this.rendered){if(this.uiMode==="iframe"){if(!this.frame?.iframe.isConnected){m(new E("Provider iframe was closed"));return}}else if(this.popUp?.closed){m(new E("Popup was closed"));return}}if(!u){m(new E("Message channel lost"));return}if(Date.now()-q>W*2){m(new E("Lost connection to popup (heartbeat timeout)"));return}try{u.postMessage({type:"ping"});}catch{m(new E("Failed to send heartbeat"));}},W),u.onmessage=T=>{if(p)return;let C=T.data;switch(C.type){case "pong":q=Date.now();break;case "popup-complete":C.payload?v(C.payload):m(new A("Invalid completion payload"));break;case "popup-rejected":m(new A("User rejected the operation"));break;case "popup-error":m(new A(C.error||"Unknown popup error"));break;case "popup-closed":m(new E("User closed popup"));break;default:console.warn("Unknown message type from popup:",C);}},u.onmessageerror=()=>{m(new A("Message deserialization error"));};try{this.rendered?this.rendered.targetWindow.postMessage({type:"popup-init",rid:r},this.providerOrigin,[x.port2]):this.uiMode==="iframe"?this.frame?.iframe.contentWindow?.postMessage({type:"popup-init",rid:r},this.providerOrigin,[x.port2]):this.popUp?.postMessage({type:"popup-init",rid:r},this.providerOrigin,[x.port2]);}catch(T){m(new A(`Failed to initialize popup: ${T}`));return}t(r,a).then(T=>{if(p||!u)return;if(this.rendered?.isClosed){if(this.rendered.isClosed())return}else if(this.uiMode==="iframe"){if(!this.frame?.iframe.isConnected)return}else if(this.popUp?.closed)return;try{u.postMessage({type:"popup-start",payload:T});}catch(Ge){m(new A(`Failed to send request to popup: ${Ge}`));return}f&&(clearTimeout(f),f=null);let C=Math.max(0,T.request.validTill-Date.now());f=setTimeout(()=>{m(new B("Request expired"));},C);}).catch(T=>{m(T);});};window.addEventListener("message",w);}};function ce(e){let n=e.domain?`${e.domain} wants you to sign in with your account.`:"Sign in with your account.",r=[];return e.nonce&&r.push(`Nonce: ${e.nonce}`),r.length>0?`${n}
|
|
1
|
+
'use strict';var core=require('@revibase/core'),kit=require('@solana/kit'),computeBudget=require('@solana-program/compute-budget'),addressLookupTable=require('@solana-program/address-lookup-table'),system=require('@solana-program/system'),token=require('@solana-program/token'),jose=require('jose'),server=require('@simplewebauthn/server');var X="https://auth.revibase.com",Q="revibase.com",O="https://api.revibase.com",L="2c1LgZfCun82niPCgfg2cTMZmAiahraTjY4KNb1BSU4Z",ee="https://mainnet.block-engine.jito.wtf/api/v1/bundles",te="https://bundles.jito.wtf/api/v1/bundles/tip_floor";var S=class e extends Error{code;constructor(n,a){super(n),this.name="RevibaseError",this.code=a,Object.setPrototypeOf(this,e.prototype);}},F=class e extends S{constructor(n="Popup blocked. Please enable popups."){super(n,"POPUP_BLOCKED"),this.name="RevibasePopupBlockedError",Object.setPrototypeOf(this,e.prototype);}},E=class e extends S{constructor(n="Popup was closed by the user"){super(n,"POPUP_CLOSED"),this.name="RevibasePopupClosedError",Object.setPrototypeOf(this,e.prototype);}},B=class e extends S{constructor(n="Authentication timed out"){super(n,"TIMEOUT"),this.name="RevibaseTimeoutError",Object.setPrototypeOf(this,e.prototype);}},D=class e extends S{constructor(n="An authorization flow is already in progress"){super(n,"FLOW_IN_PROGRESS"),this.name="RevibaseFlowInProgressError",Object.setPrototypeOf(this,e.prototype);}},j=class e extends S{constructor(n="Aborted"){super(n,"ABORTED"),this.name="RevibaseAbortedError",Object.setPrototypeOf(this,e.prototype);}},ne=class e extends S{constructor(n="Popup is not open. Call startRequest first."){super(n,"POPUP_NOT_OPEN"),this.name="RevibasePopupNotOpenError",Object.setPrototypeOf(this,e.prototype);}},A=class e extends S{constructor(n){super(n,"AUTH_FAILED"),this.name="RevibaseAuthError",Object.setPrototypeOf(this,e.prototype);}},U=class e extends S{constructor(n){super(n,"API_FAILED"),this.name="RevibaseApiError",Object.setPrototypeOf(this,e.prototype);}},z=class e extends S{constructor(n="Provider can only be used in a browser environment"){super(n,"ENVIRONMENT"),this.name="RevibaseEnvironmentError",Object.setPrototypeOf(this,e.prototype);}};var re=180*1e3,J=2e3,oe=2e4,ae=async e=>{let n=await fetch("/api/sendJitoBundle",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(e)}),a=await n.json();if(!n.ok)throw new U(a.error??"Send jito bundle failed");return a},se=async()=>{let e=await fetch("/api/estimateJitoTips"),n=await e.json();if(!e.ok)throw new U(n.error??"Estimate jito tips failed");return n},ie=async e=>{let n=await fetch("/api/clientAuthorization",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(e)}),a=await n.json();if(!n.ok)throw new A(a.error??"Authorization failed");return a};function ce(e){if(typeof window>"u")throw new Error("Function can only be called in a browser environment");let n=window.innerWidth||window.screen.availWidth,a=window.innerHeight||window.screen.availHeight,o=n<=768,t,r,i,c;if(o)t=n,r=a,i=0,c=0;else {let u=window.screenLeft??window.screenX??0,l=window.screenTop??window.screenY??0,p=window.innerWidth??document.documentElement.clientWidth??window.screen.width,d=window.innerHeight??document.documentElement.clientHeight??window.screen.height;t=500,r=600,c=Math.round(u+(p-t)/2),i=Math.round(l+(d-r)/2);}let s=["popup=yes",`width=${t}`,`height=${r}`,`top=${i}`,`left=${c}`,"toolbar=no","location=no","status=no","menubar=no","scrollbars=yes","resizable=yes"].join(",");return window.open(e,"_blank",s)}function de(e,n,a){if(typeof window>"u")throw new Error("Function can only be called in a browser environment");let o=window.matchMedia("(max-width: 768px)").matches,t=window.scrollY,r={overflow:document.body.style.overflow,position:document.body.style.position,top:document.body.style.top,left:document.body.style.left,right:document.body.style.right,width:document.body.style.width},i=()=>{document.body.style.overflow="hidden",document.body.style.position="fixed",document.body.style.top=`-${t}px`,document.body.style.left="0",document.body.style.right="0",document.body.style.width="100%";},c=()=>{document.body.style.overflow=r.overflow,document.body.style.position=r.position,document.body.style.top=r.top,document.body.style.left=r.left,document.body.style.right=r.right,document.body.style.width=r.width,window.scrollTo(0,t);};i();let s=document.createElement("div");s.setAttribute("data-provider-frame-root","true"),Object.assign(s.style,{position:"fixed",inset:"0",zIndex:"2147483647",pointerEvents:"none",contain:"layout style paint"}),document.body.appendChild(s);let u=s.attachShadow({mode:"closed"}),l=document.createElement("div");Object.assign(l.style,{all:"initial",position:"fixed",inset:"0",display:"flex",alignItems:o?"flex-end":"center",justifyContent:"center",background:"rgba(0,0,0,0.45)",zIndex:"2147483647",pointerEvents:"auto",overscrollBehavior:"contain",touchAction:"none",WebkitTapHighlightColor:"transparent",paddingBottom:"env(safe-area-inset-bottom)",fontFamily:'Inter, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif'}),u.appendChild(l);let p=document.createElement("div");Object.assign(p.style,{all:"initial",position:"relative",display:"flex",width:o?"100%":"500px",height:o?"90dvh":"600px",maxWidth:"100vw",maxHeight:"100dvh",borderRadius:o?"16px 16px 0 0":"16px",overflow:"hidden",boxShadow:"0 24px 80px rgba(0,0,0,0.35)",background:"#fff",pointerEvents:"auto"}),l.appendChild(p);let d=document.createElement("iframe");d.src=e,d.title="Authorization",d.setAttribute("tabindex","0"),d.allow=[`publickey-credentials-get ${new URL(e).origin}`].join("; "),d.sandbox=["allow-scripts","allow-same-origin"].join(" "),Object.assign(d.style,{width:"100%",height:"100%",border:"0",background:"#fff",display:"block"}),p.appendChild(d);let g=document.createElement("button");g.type="button",g.setAttribute("aria-label","Close"),g.innerHTML="×",Object.assign(g.style,{all:"initial",position:"absolute",top:o?"12px":"14px",right:o?"12px":"14px",width:"44px",height:"44px",display:"grid",placeItems:"center",borderRadius:"9999px",background:"rgba(255,255,255,0.96)",color:"#111",fontSize:"28px",lineHeight:"1",cursor:"pointer",boxShadow:"0 8px 24px rgba(0,0,0,0.25)",zIndex:"2",userSelect:"none",WebkitUserSelect:"none"}),p.appendChild(g),requestAnimationFrame(()=>{try{d.focus();}catch{}});let f=w=>{w.key==="Escape"&&v();};document.addEventListener("keydown",f);let h=false,m=()=>{if(!h){h=true;try{n?.removeEventListener("abort",T);}catch{}try{document.removeEventListener("keydown",f);}catch{}try{d.src="about:blank",d.removeAttribute("src");}catch{}try{s.remove();}catch{}c();}},v=()=>{a?.(),m();};g.addEventListener("click",w=>{w.preventDefault(),w.stopPropagation(),v();}),l.addEventListener("click",w=>{w.target===l&&v();});let T=()=>{v();};return n&&(n.aborted?T():n.addEventListener("abort",T,{once:true})),{iframe:d,close:m}}var pe=class{onClientAuthorizationCallback;onSendJitoBundleCallback;onEstimateJitoTipsCallback;providerOrigin;rpId;uiMode;render;popUp=null;frame=null;rendered=null;constructor(n){let{rpId:a,rpcEndpoint:o,providerOrigin:t,ui:r,onClientAuthorizationCallback:i,onSendJitoBundleCallback:c,onEstimateJitoTipsCallback:s}=n;core.initialize({rpcEndpoint:o}),this.onClientAuthorizationCallback=i??ie,this.onSendJitoBundleCallback=c??ae,this.onEstimateJitoTipsCallback=s??se,this.providerOrigin=t??X,this.rpId=a??Q,this.uiMode=r?.mode??"iframe",this.render=r?.render;}async sendRequestToPopupProvider({onConnectedCallback:n,onSuccessCallback:a,signal:o}){if(typeof window>"u")throw new z;if(this.popUp||this.frame||this.rendered)throw new D;let t=kit.getBase64Decoder().decode(crypto.getRandomValues(new Uint8Array(16))),r=window.location.origin,i=`${this.providerOrigin}?clientOrigin=${encodeURIComponent(r)}&rid=${encodeURIComponent(t)}`,c;if(this.render)this.rendered=this.render(i);else if(this.uiMode==="iframe"){let s=new AbortController,u=()=>s.abort(),l=o;l&&(l.aborted?s.abort():(l.addEventListener("abort",u,{once:true}),c=()=>l.removeEventListener("abort",u))),this.frame=de(i,s.signal,()=>s.abort()),o=s.signal;}else if(this.popUp=ce(i),!this.popUp)throw new F;return new Promise((s,u)=>{setTimeout(()=>{this.attachTransport({rid:t,clientOrigin:r,onConnectedCallback:n,onSuccessCallback:a,signal:o,resolve:s,reject:u});},0);}).finally(()=>{try{c?.();}catch{}})}attachTransport(n){let{rid:a,clientOrigin:o,onConnectedCallback:t,onSuccessCallback:r,signal:i,reject:c,resolve:s}=n,u=()=>{m(new j);};i?.addEventListener("abort",u,{once:true});let l=null,p=false,d=null,g=null,f=null,h=()=>{window.removeEventListener("message",T),i?.removeEventListener("abort",u),d&&(clearInterval(d),d=null),g&&(clearTimeout(g),g=null),f&&(clearTimeout(f),f=null);try{l?.close();}catch{}l=null;try{this.popUp&&!this.popUp.closed&&this.popUp.close();}catch{}try{this.frame?.close();}catch{}try{this.rendered?.close();}catch{}this.popUp=null,this.frame=null,this.rendered=null;},m=w=>{p||(p=true,h(),c(w));},v=w=>{p||(p=true,h(),r(w).then(R=>{s(R);}).catch(R=>{c(R);}));};g=setTimeout(()=>{m(new B("Popup connection timed out after 20s"));},oe);let T=w=>{if(p||l||w.origin!==this.providerOrigin)return;let R=w.data;if(!R||R.type!=="popup-connect"||R.rid!==a)return;g&&(clearTimeout(g),g=null);let x=new MessageChannel;l=x.port1,l.start();let _=Date.now();d=setInterval(()=>{if(p){d&&(clearInterval(d),d=null);return}if(this.rendered?.isClosed){if(this.rendered.isClosed()){m(new E("Provider UI was closed"));return}}else if(!this.rendered){if(this.uiMode==="iframe"){if(!this.frame?.iframe.isConnected){m(new E("Provider iframe was closed"));return}}else if(this.popUp?.closed){m(new E("Popup was closed"));return}}if(!l){m(new E("Message channel lost"));return}if(Date.now()-_>J*2){m(new E("Lost connection to popup (heartbeat timeout)"));return}try{l.postMessage({type:"ping"});}catch{m(new E("Failed to send heartbeat"));}},J),l.onmessage=b=>{if(p)return;let C=b.data;switch(C.type){case "pong":_=Date.now();break;case "popup-complete":C.payload?v(C.payload):m(new A("Invalid completion payload"));break;case "popup-rejected":m(new A("User rejected the operation"));break;case "popup-error":m(new A(C.error||"Unknown popup error"));break;case "popup-closed":m(new E("User closed popup"));break;default:console.warn("Unknown message type from popup:",C);}},l.onmessageerror=()=>{m(new A("Message deserialization error"));};try{this.rendered?this.rendered.targetWindow.postMessage({type:"popup-init",rid:a},this.providerOrigin,[x.port2]):this.uiMode==="iframe"?this.frame?.iframe.contentWindow?.postMessage({type:"popup-init",rid:a},this.providerOrigin,[x.port2]):this.popUp?.postMessage({type:"popup-init",rid:a},this.providerOrigin,[x.port2]);}catch(b){m(new A(`Failed to initialize popup: ${b}`));return}t(a,o).then(b=>{if(p||!l)return;if(this.rendered?.isClosed){if(this.rendered.isClosed())return}else if(this.uiMode==="iframe"){if(!this.frame?.iframe.isConnected)return}else if(this.popUp?.closed)return;try{l.postMessage({type:"popup-start",payload:b});}catch(Xe){m(new A(`Failed to send request to popup: ${Xe}`));return}f&&(clearTimeout(f),f=null);let C=Math.max(0,b.request.validTill-Date.now());f=setTimeout(()=>{m(new B("Request expired"));},C);}).catch(b=>{m(b);});};window.addEventListener("message",T);}};function le(e){let n=e.domain?`${e.domain} wants you to sign in with your account.`:"Sign in with your account.",a=[];return e.nonce&&a.push(`Nonce: ${e.nonce}`),a.length>0?`${n}
|
|
2
2
|
|
|
3
|
-
${
|
|
4
|
-
`)}`:n}function Xe(e){let n=e?.message||"";return n==="Failed to fetch"||n.includes("Load failed")||n.includes("NetworkError")||n.includes("ERR_NETWORK")}async function y(e,n=3,r=500,a=5e3){let t=null;for(let o=0;o<n;o++)try{return await e()}catch(s){if(t=s instanceof Error?s:new Error(String(s)),!Xe(t))throw t;if(o===n-1)break;let c=Math.min(r*Math.pow(2,o),a);await new Promise(i=>setTimeout(i,c));}throw t}async function de({data:e,url:n,options:r}){let o=Qe(n),{pendingApprovalsCallback:s,signal:c}=r??{};for(let i=0;i<10;i++){if(c?.aborted)throw Error("Aborted");let l,u;try{u=await et(o,c),u.send(JSON.stringify({type:"message",data:e})),await tt(u,(p,d)=>{if(p==="error"){let g=d&&typeof d=="object"&&typeof d.error=="string"?d.error:"Unknown error",f=new Error(g);throw f.noRetry=!0,f}return p==="signatures"?(l=d.signatures,!0):(p==="pending_transaction_approval"?s?.onPendingApprovalsCallback?.(d.validTill):p==="transaction_approved"&&s?.onPendingApprovalsSuccess?.(),!1)},c);}catch(p){if(p&&typeof p=="object"&&p.noRetry)throw new Error(`${p.message}`);if(p&&typeof p=="object"&&p.name==="AbortError")throw p}finally{try{u?.close();}catch{}}if(l?.length)return l[0];i<9&&await new Promise(p=>setTimeout(p,400));}throw new Error("Transaction manager: missing signatures")}function Qe(e){let n=new URL(e);return n.protocol==="https:"?n.protocol="wss:":n.protocol==="http:"&&(n.protocol="ws:"),n.toString()}function et(e,n){return new Promise((r,a)=>{let t=new WebSocket(e),o=()=>{try{t.close();}catch{}};n?.addEventListener("abort",o,{once:true}),t.onopen=()=>{n?.removeEventListener("abort",o),r(t);},t.onerror=()=>{n?.removeEventListener("abort",o),a(new Error("WebSocket connection failed"));};})}async function tt(e,n,r){return new Promise((a,t)=>{let o=false,s=()=>{r?.removeEventListener("abort",i),e.removeEventListener("message",l),e.removeEventListener("error",u),e.removeEventListener("close",p);},c=d=>{o||(o=true,s(),d());},i=()=>{try{e.close();}catch{}};r?.addEventListener("abort",i);let l=d=>{if(typeof d.data!="string")return;let g;try{g=JSON.parse(d.data);}catch{return}let f=typeof g.event=="string"?g.event:"message",b=g.data;try{n(f,b)&&c(()=>a());}catch(m){c(()=>t(m));}},u=()=>{c(()=>t(new Error("Transaction manager request failed")));},p=()=>{c(()=>a());};e.addEventListener("message",l),e.addEventListener("error",u),e.addEventListener("close",p);})}async function le(e,n){let{startRequest:r}=e.data.payload;if(!r.data.requireTwoFactorAuthentication)return null;let t=(await y(async()=>core.fetchSettings(core.getSolanaRpc(),await core.getSettingsFromIndex(e.data.payload.user.settingsIndexWithAddress.index)))).data.members.find(i=>i.role===core.UserRole.TransactionManager);if(!t)throw new Error("No transaction manager found.");let o=core.convertMemberKeyToString(t.pubkey),s=(await y(async()=>core.fetchUser(core.getSolanaRpc(),await core.getUserAddress(kit.address(o))))).data;if(s.transactionManagerUrl.__option==="None")throw new Error("No transaction manager url found.");let c=await de({data:{publicKey:o,payload:e},url:s.transactionManagerUrl.value,options:n});return {publicKey:o,signature:c}}async function tr(e,n){let r=async(t,o)=>{let s={phase:"start",rid:t,providerOrigin:e.providerOrigin,rpId:e.rpId,data:{type:"message",payload:ce({domain:o,nonce:kit.getBase64Decoder().decode(crypto.getRandomValues(new Uint8Array(16)))}),requireTwoFactorAuthentication:n?.requireTwoFactorAuthentication??false},clientOrigin:o},{signature:c,validTill:i}=await y(()=>e.onClientAuthorizationCallback(s));return {request:{...s,rid:t,validTill:i},signature:c}},a=async t=>{let o=await le(t,n);return await e.onClientAuthorizationCallback(o?{...t,data:{...t.data,payload:{...t.data.payload,transactionManager:o}}}:t),{user:t.data.payload.user}};return e.sendRequestToPopupProvider({onConnectedCallback:r,onSuccessCallback:a,signal:n?.signal})}async function N({instructions:e,payer:n,addressesByLookupTableAddress:r,unitsConsumed:a}){let t=await y(()=>core.getSolanaRpc().getLatestBlockhash().send()),o=await kit.pipe(kit.createTransactionMessage({version:0}),s=>kit.appendTransactionMessageInstructions(e,s),s=>kit.setTransactionMessageFeePayerSigner(n,s),s=>kit.setTransactionMessageLifetimeUsingBlockhash(t.value,s),s=>r?kit.compressTransactionMessageUsingAddressLookupTables(s,r):s,async s=>{let c=await ut(core.getSolanaRpc(),s.instructions.flatMap(l=>l.accounts??[])),i=Math.ceil((Number(a)??0)*1.1);return kit.prependTransactionMessageInstructions([...i>2e5?[computeBudget.getSetComputeUnitLimitInstruction({units:i})]:[],...c>0?[computeBudget.getSetComputeUnitPriceInstruction({microLamports:c})]:[]],s)},async s=>await y(async()=>kit.signTransactionMessageWithSigners(await s)));return await y(()=>core.getSolanaRpc().sendTransaction(kit.getBase64EncodedWireTransaction(o),{skipPreflight:!0,encoding:"base64"}).send()),kit.getSignatureFromTransaction(o)}async function Re(e,n){let r=await lt(n);return await y(()=>e.onSendJitoBundleCallback(r.map(kit.getBase64EncodedWireTransaction))),kit.getSignatureFromTransaction(r[r.length-1])}async function lt(e){let n=(await y(()=>core.getSolanaRpc().getLatestBlockhash().send())).value;return await Promise.all(e.map(async r=>await kit.pipe(kit.createTransactionMessage({version:0}),t=>kit.appendTransactionMessageInstructions(r.instructions,t),t=>kit.setTransactionMessageFeePayerSigner(r.payer,t),t=>kit.setTransactionMessageLifetimeUsingBlockhash(n,t),t=>r.addressesByLookupTableAddress?kit.compressTransactionMessageUsingAddressLookupTables(t,r.addressesByLookupTableAddress):t,t=>{let o=Math.ceil(Number(r.unitsConsumed??0)*1.1);return o>2e5?kit.prependTransactionMessageInstructions([computeBudget.getSetComputeUnitLimitInstruction({units:o})],t):t},async t=>await y(()=>kit.signTransactionMessageWithSigners(t)))))}async function ut(e,n){let a=(await y(()=>e.getRecentPrioritizationFees(n.filter(o=>o.role===kit.AccountRole.WRITABLE||o.role===kit.AccountRole.WRITABLE_SIGNER).map(o=>o.address)).send())).map(o=>Number(o.prioritizationFee));a.sort((o,s)=>o-s);let t=Math.floor(a.length/2);return a.length%2===0?Math.round((a[t-1]+a[t])/2):a[t]}var Ee=new Map;async function P(){let e=Ee.get(O);if(e)return e;let n=await y(()=>fetch(`${O}/getRandomPayer`));if(!n.ok)throw new Error(`Failed to get random payer: ${n.statusText}`);let{randomPayer:r}=await n.json(),a=vt(kit.address(r),`${O}/sign`);return Ee.set(O,a),a}function vt(e,n){return {address:e,async signTransactions(a){let t={publicKey:e,transactions:a.map(c=>kit.getBase64Decoder().decode(kit.getTransactionEncoder().encode(c)))},o=await fetch(n,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(t)});if(!o.ok)throw new Error(`Failed to sign transactions: ${o.statusText}`);let s=await o.json();if("error"in s)throw new Error(s.error);return s.signatures.map(c=>({[e]:kit.getBase58Encoder().encode(c)}))}}}async function k(e){let{transactionManagerAddress:n,transactionMessageBytes:r,authResponses:a,onPendingApprovalsCallback:t,onPendingApprovalsSuccess:o,abortController:s,abortSignal:c}=e,i=s;if(c&&!i){let p=new AbortController;c.aborted?p.abort():c.addEventListener("abort",()=>p.abort(),{once:true}),i=p;}let l;if(n){let p=(await y(async()=>core.fetchUser(core.getSolanaRpc(),await core.getUserAddress(n)))).data.transactionManagerUrl;l=p.__option==="Some"?p.value:null;}return n&&l?core.createTransactionManagerSigner({address:n,url:l,authResponses:a,transactionMessageBytes:r,onPendingApprovalsCallback:t,onPendingApprovalsSuccess:o,abortController:i}):null}async function M(e){if(!e)return await y(()=>kit.fetchAddressesForLookupTables([kit.address(_)],core.getSolanaRpc()));if(_ in e)return e;let n=await y(()=>addressLookupTable.fetchMaybeAddressLookupTable(core.getSolanaRpc(),kit.address(_)));return n.exists?{...e,[n.address]:n.data.addresses}:e}async function xe(e,n){let{authResponse:r,settings:a,additionalSigners:t,additionalVoters:o,options:s,payer:c}=n,{startRequest:i,transactionManagerAddress:l,unitsConsumed:u}=r;if(i.data.type!=="transaction")throw new Error("Invalid request type.");let{transactionActionType:p,transactionMessageBytes:d}=i.data.payload;if(p!=="execute"&&p!=="create_with_preauthorized_execution")throw new Error("Transaction action type must be 'execute' or 'create_with_preauthorized_execution'");let g=await core.getSignedSecp256r1Key(r),[f,b]=await Promise.all([k({authResponses:[r],transactionManagerAddress:l?kit.address(l):void 0,transactionMessageBytes:kit.getBase64Encoder().encode(d),onPendingApprovalsCallback:s?.pendingApprovalsCallback?.onPendingApprovalsCallback,onPendingApprovalsSuccess:s?.pendingApprovalsCallback?.onPendingApprovalsSuccess,abortSignal:s?.signal}),y(()=>e.onEstimateJitoTipsCallback())]),m=await core.prepareTransactionBundle({settings:a,transactionMessageBytes:kit.getBase64Encoder().encode(d),creator:f??g,executor:f?g:void 0,jitoBundlesTipAmount:b,additionalVoters:o,additionalSigners:t,payer:c}),v=await Promise.all(m.map(async(w,h)=>({...w,addressesByLookupTableAddress:await M(w.addressesByLookupTableAddress),unitsConsumed:u?.[h]})));return Re(e,v)}async function ke(e){let{authResponse:n,settings:r,payer:a,additionalSigners:t,additionalVoters:o,options:s}=e,{startRequest:c,transactionManagerAddress:i,unitsConsumed:l}=n;if(c.data.type!=="transaction")throw new Error("Invalid request type.");let{transactionActionType:u,transactionMessageBytes:p}=c.data.payload;if(u!=="sync")throw new Error("Transaction action type must be 'sync'");let d=await core.getSignedSecp256r1Key(n),g=await k({authResponses:[n],transactionManagerAddress:i?kit.address(i):void 0,transactionMessageBytes:kit.getBase64Encoder().encode(p),onPendingApprovalsCallback:s?.pendingApprovalsCallback?.onPendingApprovalsCallback,onPendingApprovalsSuccess:s?.pendingApprovalsCallback?.onPendingApprovalsSuccess,abortSignal:s?.signal}),f=g?[d,g,...o??[]]:[d,...o??[]],{instructions:b,addressesByLookupTableAddress:m}=await core.prepareTransactionSync({signers:f,payer:a,transactionMessageBytes:kit.getBase64Encoder().encode(p),settings:r,additionalSigners:t});return N({instructions:b,payer:a,addressesByLookupTableAddress:await M(m),unitsConsumed:l?.[0]})}async function Be(e){let{authResponse:n,settings:r,options:a,payer:t,additionalVoters:o}=e,{startRequest:s,transactionManagerAddress:c,unitsConsumed:i}=n;if(s.data.type!=="transaction")throw new Error("Invalid request type.");let{transactionActionType:l,transactionAddress:u,transactionMessageBytes:p}=s.data.payload;if(l!=="transfer_intent")throw new Error("Transaction action type must be 'transfer_intent'");let d=kit.getBase64Encoder().encode(p),g=kit.getU64Decoder().decode(d.slice(0,8)),f=kit.getAddressDecoder().decode(d.slice(8,40)),b=kit.getAddressDecoder().decode(d.slice(40,72)),m=await core.getSignedSecp256r1Key(n),v=await k({authResponses:[n],transactionManagerAddress:c?kit.address(c):void 0,transactionMessageBytes:kit.getBase64Encoder().encode(p),onPendingApprovalsCallback:a?.pendingApprovalsCallback?.onPendingApprovalsCallback,onPendingApprovalsSuccess:a?.pendingApprovalsCallback?.onPendingApprovalsSuccess,abortSignal:a?.signal}),w=v?[m,v,...o??[]]:[m,...o??[]],h=b!==system.SYSTEM_PROGRAM_ADDRESS?await core.tokenTransferIntent({payer:t,settings:r,amount:g,signers:w,destination:f,mint:b,tokenProgram:kit.address(u)}):await core.nativeTransferIntent({settings:r,amount:g,signers:w,destination:f});return N({instructions:h,payer:t,addressesByLookupTableAddress:await M(void 0),unitsConsumed:i?.[0]})}async function Ue(e,n=30,r=2e3){for(let a=0;a<n;a++){let o=(await y(()=>core.getSolanaRpc().getSignatureStatuses([e]).send())).value[0];if(o?.confirmationStatus==="confirmed"||o?.confirmationStatus==="finalized")return e;await new Promise(s=>setTimeout(s,r));}throw new Error("Transaction confirmation timeout")}async function K(e,n){let{request:r,additionalSigners:a,options:t,payer:o,additionalVoters:s}=n,{confirmTransaction:c=true}=t??{},i=r.data.type==="transaction"&&r.data.payload.startRequest.data.payload.transactionActionType!=="transfer_intent"?r.data.payload.startRequest.data.payload.transactionAddress:r.data.payload.user.settingsIndexWithAddress?.index?await core.getSettingsFromIndex(r.data.payload.user.settingsIndexWithAddress.index):null;if(!i)throw Error("User is not delegated to any wallet");let l;switch(r.data.payload.startRequest.data.payload.transactionActionType){case "transfer_intent":l=await Be({authResponse:r.data.payload,settings:kit.address(i),options:t,payer:o,additionalVoters:s});break;case "execute":case "create_with_preauthorized_execution":l=await xe(e,{authResponse:r.data.payload,settings:kit.address(i),additionalSigners:a,additionalVoters:s,options:t,payer:o});break;case "sync":l=await ke({authResponse:r.data.payload,settings:kit.address(i),additionalSigners:a,additionalVoters:s,options:t,payer:o});break;default:throw Error("Invalid Transaction Action Type for send tx payload.")}return c&&await Ue(l),l}async function Zr(e,n,r){let{instructions:a,signer:t,addressesByLookupTableAddress:o,settingsIndexWithAddress:s,additionalSigners:c,additionalVoters:i,payer:l}=n,u=async(d,g)=>{let f=core.prepareTransactionMessage({payer:kit.address(t.walletAddress),instructions:a,addressesByLookupTableAddress:o}),b=s??t.settingsIndexWithAddress,m=await core.getSettingsFromIndex(b.index),w=(await y(()=>core.fetchSettings(core.getSolanaRpc(),m))).data.members.find(T=>T.role===core.UserRole.TransactionManager)?.pubkey,h={transactionMessageBytes:kit.getBase64Decoder().decode(f),transactionAddress:m,transactionActionType:w?"execute":"create_with_preauthorized_execution"},R={phase:"start",rid:d,providerOrigin:e.providerOrigin,rpId:e.rpId,data:{type:"transaction",payload:h},clientOrigin:g,signer:t.publicKey},{signature:x,validTill:q}=await y(()=>e.onClientAuthorizationCallback(R));return {request:{...R,rid:d,validTill:q},signature:x,transactionManagerAddress:w?core.convertMemberKeyToString(w):void 0,additionalSigners:c?.map(T=>T.address.toString()),additionalVoters:i?.map(T=>T instanceof core.SignedSecp256r1Key?{keyType:core.KeyType.Secp256r1,publicKey:T.toString()}:{keyType:core.KeyType.Ed25519,publicKey:T.address.toString()}),payer:(l??await P()).address.toString()}},p=async d=>{let{signature:g}=await e.onClientAuthorizationCallback(d),f=await K(e,{request:{...d,data:{...d.data,payload:{...d.data.payload,client:{...d.data.payload.client,jws:g}}}},options:r,additionalSigners:c,additionalVoters:i,payer:l??await P()});return {user:d.data.payload.user,txSig:f}};return e.sendRequestToPopupProvider({onConnectedCallback:u,onSuccessCallback:p,signal:r?.signal})}async function so(e,n,r){if(n.amount<=0)throw new Error("Transfer amount must be greater than 0");if(!n.destination||typeof n.destination!="string")throw new Error("Destination address is required");let{mint:a,tokenProgram:t=token.TOKEN_PROGRAM_ADDRESS,amount:o,destination:s,signer:c,payer:i,additionalVoters:l}=n,u=async(d,g)=>{let f={transactionActionType:"transfer_intent",transactionAddress:a?t:system.SYSTEM_PROGRAM_ADDRESS,transactionMessageBytes:kit.getBase64Decoder().decode(new Uint8Array([...kit.getU64Encoder().encode(o),...kit.getAddressEncoder().encode(kit.address(s)),...kit.getAddressEncoder().encode(kit.address(a??system.SYSTEM_PROGRAM_ADDRESS))]))},b={phase:"start",rid:d,providerOrigin:e.providerOrigin,rpId:e.rpId,data:{type:"transaction",payload:f},clientOrigin:g,signer:c?.publicKey},{signature:m,validTill:v}=await y(()=>e.onClientAuthorizationCallback(b));return {request:{...b,rid:d,validTill:v},signature:m,additionalVoters:l?.map(w=>w instanceof core.SignedSecp256r1Key?{keyType:core.KeyType.Secp256r1,publicKey:w.toString()}:{keyType:core.KeyType.Ed25519,publicKey:w.address.toString()}),payer:(i??await P()).address.toString()}},p=async d=>{let{signature:g}=await e.onClientAuthorizationCallback(d);return {txSig:await K(e,{request:{...d,data:{...d.data,payload:{...d.data.payload,client:{...d.data.payload.client,jws:g}}}},options:r,additionalVoters:l,payer:i??await P()}),user:d.data.payload.user}};return e.sendRequestToPopupProvider({onConnectedCallback:u,onSuccessCallback:p,signal:r?.signal})}async function ze(e,n,r){if(!n.includes(e.clientOrigin))throw new Error("Invalid client origin");let a=Date.now()+ee,t=core.convertBase64StringToJWK(r);if(!t.alg)throw new Error("Property alg in JWK is missing.");return {ok:true,signature:await new jose.CompactSign(core.createClientAuthorizationStartRequestChallenge({...e,validTill:a})).setProtectedHeader({alg:t.alg}).sign(t),validTill:a}}function I(e,n){if(e.length!==n.length)return false;let r=0;for(let a=0;a<e.length;a++)r|=e[a]^n[a];return r===0}async function We(e,n,r,a){let{payload:t}=e.data;if(t.startRequest.data.type!=="message")throw new Error("Invalid request type.");if(Date.now()>t.startRequest.validTill)throw new Error("Request expired.");if(!r.includes(t.startRequest.clientOrigin)||!r.includes(t.client.clientOrigin)||t.startRequest.clientOrigin!==t.client.clientOrigin)throw new Error("Invalid client origin");{let c=await jose.importJWK(core.convertBase64StringToJWK(n)),i=await jose.compactVerify(e.data.payload.client.jws,c);if(!I(i.payload,core.createClientAuthorizationStartRequestChallenge(e.data.payload.startRequest)))throw new Error("Invalid client signature")}{if(t.device.jwk!==t.device.deviceProfile.devicePublicKey)throw new Error("Device publickey mismatch");let c=await jose.importJWK(core.convertBase64StringToJWK(t.device.jwk)),i=await jose.compactVerify(t.device.jws,c);if(!I(i.payload,core.getDeviceMessageHash(t.authResponse,t.device.deviceProfile)))throw new Error("Invalid device signature")}let o=core.createMessageChallenge(t.startRequest.data.payload,t.startRequest.clientOrigin,t.device.jwk,t.startRequest.rid),{verified:s}=await server.verifyAuthenticationResponse({response:t.authResponse,expectedChallenge:core.bufferToBase64URLString(o),expectedRPID:t.startRequest.rpId,expectedOrigin:t.startRequest.providerOrigin,requireUserVerification:false,credential:{counter:0,id:t.authResponse.id,publicKey:core.convertPubkeyCompressedToCose(t.signer)}});if(!s)throw new Error("Invalid user siganture");if(a){if(!t.startRequest.data.requireTwoFactorAuthentication)throw new Error("Two factor authentication is required.");if(!t.transactionManager)throw new Error("Missing signature from transaction manager.");let i=(await core.fetchUserAccountByFilters(await core.getDomainConfigAddress({rpId:t.startRequest.rpId}),{credentialId:t.authResponse.id}))?.wallets.find(p=>p.isDelegate);if(!i)throw new Error("User does not have a delegated wallet");let u=(await core.fetchSettings(core.getSolanaRpc(),await core.getSettingsFromIndex(i.index))).data.members.find(p=>p.role===core.UserRole.TransactionManager);if(!u)throw new Error("No transaction manager found.");if(t.transactionManager.publicKey!==core.convertMemberKeyToString(u.pubkey))throw new Error("Transaction manager mismatch.");if(!await kit.verifySignature(await kit.getPublicKeyFromAddress(kit.address(t.transactionManager.publicKey)),kit.signatureBytes(kit.getBase58Encoder().encode(t.transactionManager.signature)),o))throw new Error("Invalid transaction manager signature.")}return {ok:true}}async function Ve(e,n,r,a){let{payload:t}=e.data;if(t.startRequest.data.type!=="transaction")throw new Error("Invalid request type.");if(Date.now()>Math.min(t.startRequest.validTill,t.estimatedSlotHashExpiry))throw new Error("Request expired.");if(!r.includes(t.startRequest.clientOrigin)||!r.includes(t.client.clientOrigin)||t.startRequest.clientOrigin!==t.client.clientOrigin)throw new Error("Invalid client origin");{let c=await jose.importJWK(core.convertBase64StringToJWK(n)),i=await jose.compactVerify(e.data.payload.client.jws,c);if(!I(i.payload,core.createClientAuthorizationStartRequestChallenge(e.data.payload.startRequest)))throw new Error("Invalid client signature")}{if(t.device.jwk!==t.device.deviceProfile.devicePublicKey)throw new Error("Device publickey mismatch");let c=await jose.importJWK(core.convertBase64StringToJWK(t.device.jwk)),i=await jose.compactVerify(t.device.jws,c);if(!I(i.payload,core.getDeviceMessageHash(t.authResponse,t.device.deviceProfile)))throw new Error("Invalid device signature")}{let{challenge:c}=await core.createTransactionChallenge(t.startRequest.data.payload,t.startRequest.clientOrigin,t.device.jwk,t.startRequest.rid,t.slotHash,t.slotNumber,t.estimatedSlotHashExpiry),{verified:i}=await server.verifyAuthenticationResponse({response:t.authResponse,expectedChallenge:core.bufferToBase64URLString(c),expectedRPID:t.startRequest.rpId,expectedOrigin:t.startRequest.providerOrigin,requireUserVerification:false,credential:{counter:0,id:t.authResponse.id,publicKey:core.convertPubkeyCompressedToCose(t.signer)}});if(!i)throw new Error("Invalid user siganture")}let o=core.convertBase64StringToJWK(a);if(!o.alg)throw new Error("Property alg in JWK is missing.");return {ok:true,signature:await new jose.CompactSign(core.createClientAuthorizationCompleteRequestChallenge(e)).setProtectedHeader({alg:o.alg}).sign(o)}}var $e=false;function En(e){$e||e&&(core.initialize({rpcEndpoint:e}),$e=true);}async function qo({request:e,publicKey:n,allowedClientOrigins:r,privateKey:a,requireTwoFactorAuthentication:t}){if(En(t?.rpcEndpoint),e.phase==="start"){if(e.data.type==="message"&&!!t!==e.data.requireTwoFactorAuthentication)throw new Error("Require 2fa check mismatch");return await ze(e,r,a)}else if(e.phase==="complete"){if(e.data.type==="message")return await We(e,n,r,!!t);if(e.data.type==="transaction")return await Ve(e,n,r,a);throw new Error("Invalid request type")}else throw new Error("Invalid request phase")}async function Fo(e="landed_tips_75th_percentile",n=X){let r=await fetch(n);if(!r.ok)throw new Error(`Failed to fetch Jito tips: ${r.status} ${r.statusText}`);let a=await r.json();if(!Array.isArray(a)||!a[0]||typeof a[0][e]!="number")throw new Error("Invalid Jito tips response format");return Math.round(a[0][e]*1e9)}async function jo(e,n,r=Z){let o=JSON.stringify({jsonrpc:"2.0",id:1,method:"sendBundle",params:[e,{encoding:"base64"}]}),s=null;for(let i=0;i<=5&&(s=await fetch(r,{method:"POST",headers:{"Content-Type":"application/json",...n?{"x-jito-auth":n}:{}},body:o}),!(s.status!==429||i===5));i++){let l=Math.min(1e4,250*2**i);await Cn(l);}if(!s)throw new Error("Failed to send bundles: no response");let c=await s.json();if(c.error)throw new Error(`Error sending bundles: ${JSON.stringify(c.error,null,2)}`);if(!c.result)throw new Error("No bundle ID returned from Jito");return c.result}var Cn=e=>new Promise(n=>setTimeout(n,e));/*! Bundled license information:
|
|
3
|
+
${a.join(`
|
|
4
|
+
`)}`:n}function tt(e){let n=e?.message||"";return n==="Failed to fetch"||n.includes("Load failed")||n.includes("NetworkError")||n.includes("ERR_NETWORK")}async function y(e,n=3,a=500,o=5e3){let t=null;for(let r=0;r<n;r++)try{return await e()}catch(i){if(t=i instanceof Error?i:new Error(String(i)),!tt(t))throw t;if(r===n-1)break;let c=Math.min(a*Math.pow(2,r),o);await new Promise(s=>setTimeout(s,c));}throw t}async function ue({data:e,url:n,options:a}){let r=nt(n),{pendingApprovalsCallback:i,signal:c}=a??{};for(let s=0;s<10;s++){if(c?.aborted)throw Error("Aborted");let u,l;try{l=await rt(r,c),l.send(JSON.stringify({type:"message",data:e})),await ot(l,(p,d)=>{if(p==="error"){let g=d&&typeof d=="object"&&typeof d.error=="string"?d.error:"Unknown error",f=new Error(g);throw f.noRetry=!0,f}return p==="signatures"?(u=d.signatures,!0):(p==="pending_transaction_approval"?i?.onPendingApprovalsCallback?.(d.validTill):p==="transaction_approved"&&i?.onPendingApprovalsSuccess?.(),!1)},c);}catch(p){if(p&&typeof p=="object"&&p.noRetry)throw new Error(`${p.message}`);if(p&&typeof p=="object"&&p.name==="AbortError")throw p}finally{try{l?.close();}catch{}}if(u?.length)return u[0];s<9&&await new Promise(p=>setTimeout(p,400));}throw new Error("Transaction manager: missing signatures")}function nt(e){let n=new URL(e);return n.protocol==="https:"?n.protocol="wss:":n.protocol==="http:"&&(n.protocol="ws:"),n.toString()}function rt(e,n){return new Promise((a,o)=>{let t=new WebSocket(e),r=()=>{try{t.close();}catch{}};n?.addEventListener("abort",r,{once:true}),t.onopen=()=>{n?.removeEventListener("abort",r),a(t);},t.onerror=()=>{n?.removeEventListener("abort",r),o(new Error("WebSocket connection failed"));};})}async function ot(e,n,a){return new Promise((o,t)=>{let r=false,i=()=>{a?.removeEventListener("abort",s),e.removeEventListener("message",u),e.removeEventListener("error",l),e.removeEventListener("close",p);},c=d=>{r||(r=true,i(),d());},s=()=>{try{e.close();}catch{}};a?.addEventListener("abort",s);let u=d=>{if(typeof d.data!="string")return;let g;try{g=JSON.parse(d.data);}catch{return}let f=typeof g.event=="string"?g.event:"message",h=g.data;try{n(f,h)&&c(()=>o());}catch(m){c(()=>t(m));}},l=()=>{c(()=>t(new Error("Transaction manager request failed")));},p=()=>{c(()=>o());};e.addEventListener("message",u),e.addEventListener("error",l),e.addEventListener("close",p);})}async function me(e,n){let{startRequest:a}=e.data.payload;if(!a.data.requireTwoFactorAuthentication)return null;let t=(await y(async()=>core.fetchSettings(core.getSolanaRpc(),await core.getSettingsFromIndex(e.data.payload.user.settingsIndexWithAddress.index)))).data.members.find(s=>s.role===core.UserRole.TransactionManager);if(!t)throw new Error("No transaction manager found.");let r=core.convertMemberKeyToString(t.pubkey),i=(await y(async()=>core.fetchUser(core.getSolanaRpc(),await core.getUserAddress(kit.address(r))))).data;if(i.transactionManagerUrl.__option==="None")throw new Error("No transaction manager url found.");let c=await ue({data:{publicKey:r,payload:e},url:i.transactionManagerUrl.value,options:n});return {publicKey:r,signature:c}}async function sr(e,n){let a=async(t,r)=>{let i={phase:"start",rid:t,providerOrigin:e.providerOrigin,rpId:e.rpId,data:{type:"message",payload:le({domain:r,nonce:kit.getBase64Decoder().decode(crypto.getRandomValues(new Uint8Array(16)))}),requireTwoFactorAuthentication:n?.requireTwoFactorAuthentication??false},clientOrigin:r},{signature:c,validTill:s}=await y(()=>e.onClientAuthorizationCallback(i));return {request:{...i,rid:t,validTill:s},signature:c}},o=async t=>{let r=await me(t,n);return await e.onClientAuthorizationCallback(r?{...t,data:{...t.data,payload:{...t.data.payload,transactionManager:r}}}:t),{user:t.data.payload.user}};return e.sendRequestToPopupProvider({onConnectedCallback:a,onSuccessCallback:o,signal:n?.signal})}async function K({instructions:e,payer:n,addressesByLookupTableAddress:a}){let o=await y(()=>core.getSolanaRpc().getLatestBlockhash().send()),t=await kit.pipe(kit.createTransactionMessage({version:0}),r=>kit.appendTransactionMessageInstructions(e,r),r=>kit.setTransactionMessageFeePayerSigner(n,r),r=>kit.setTransactionMessageLifetimeUsingBlockhash(o.value,r),r=>a?kit.compressTransactionMessageUsingAddressLookupTables(r,a):r,async r=>{let[i,c]=await Promise.all([yt(r),ht(core.getSolanaRpc(),r.instructions.flatMap(u=>u.accounts??[]))]),s=Math.ceil((Number(i)??0)*1.1);return kit.prependTransactionMessageInstructions([...s>2e5?[computeBudget.getSetComputeUnitLimitInstruction({units:s})]:[],...c>0?[computeBudget.getSetComputeUnitPriceInstruction({microLamports:c})]:[]],r)},async r=>await y(async()=>kit.signTransactionMessageWithSigners(await r)));return await y(()=>core.getSolanaRpc().sendTransaction(kit.getBase64EncodedWireTransaction(t),{skipPreflight:!0,encoding:"base64"}).send()),kit.getSignatureFromTransaction(t)}async function xe(e,n){let a=await ye(n,true),o=await ft(a.map(kit.getBase64EncodedWireTransaction),core.getSolanaRpcEndpoint()),t=await ye(n.map((r,i)=>({...r,unitsConsumed:o[i]})));return await y(()=>e.onSendJitoBundleCallback(t.map(kit.getBase64EncodedWireTransaction))),kit.getSignatureFromTransaction(t[t.length-1])}async function ft(e,n){let o=await(await y(()=>fetch(n,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({jsonrpc:"2.0",id:"2",method:"simulateBundle",params:[{encodedTransactions:e},{skipSigVerify:!0,replaceRecentBlockhash:!0,preExecutionAccountsConfigs:e.map(()=>({encoding:"base64",addresses:[]})),postExecutionAccountsConfigs:e.map(()=>({encoding:"base64",addresses:[]}))}]})}))).json();if(!o.result||o.error)throw new Error(`Unable to simulate bundle: ${JSON.stringify(o.error??o.result)}`);if(typeof o.result.value.summary!="string"&&o.result.value.summary.failed){let{TransactionFailure:t}=o.result.value.summary.failed.error,[,r]=t;throw new Error(`Simulation failed: ${r}`)}return o.result.value.transactionResults.map(t=>t.unitsConsumed)}async function ye(e,n=false){let a=n?{blockhash:kit.getBlockhashDecoder().decode(crypto.getRandomValues(new Uint8Array(32))),lastValidBlockHeight:BigInt(Number.MAX_SAFE_INTEGER)}:(await y(()=>core.getSolanaRpc().getLatestBlockhash().send())).value;return await Promise.all(e.map(async o=>await kit.pipe(kit.createTransactionMessage({version:0}),r=>kit.appendTransactionMessageInstructions(o.instructions,r),r=>kit.setTransactionMessageFeePayerSigner(o.payer,r),r=>kit.setTransactionMessageLifetimeUsingBlockhash(a,r),r=>o.addressesByLookupTableAddress?kit.compressTransactionMessageUsingAddressLookupTables(r,o.addressesByLookupTableAddress):r,r=>{let i=Math.ceil((o.unitsConsumed??0)*1.1);return i>2e5?kit.prependTransactionMessageInstructions([computeBudget.getSetComputeUnitLimitInstruction({units:i})],r):r},async r=>n?kit.compileTransaction(r):await y(()=>kit.signTransactionMessageWithSigners(r)))))}async function yt(e){let n=kit.prependTransactionMessageInstructions([computeBudget.getSetComputeUnitLimitInstruction({units:8e5}),computeBudget.getSetComputeUnitPriceInstruction({microLamports:1e4})],e),a=kit.compileTransaction(n),o=await y(()=>core.getSolanaRpc().simulateTransaction(kit.getBase64EncodedWireTransaction(a),{encoding:"base64"}).send());if(o.value.err){if(o.value.logs){let r=["Transaction simulation failed:","",...o.value.logs].join(`
|
|
5
|
+
`);throw new Error(r)}let t=["Transaction simulation failed:","",o.value.err.toString()].join(`
|
|
6
|
+
`);throw new Error(t)}return o.value.unitsConsumed}async function ht(e,n){let o=(await y(()=>e.getRecentPrioritizationFees(n.filter(r=>r.role===kit.AccountRole.WRITABLE||r.role===kit.AccountRole.WRITABLE_SIGNER).map(r=>r.address)).send())).map(r=>Number(r.prioritizationFee));o.sort((r,i)=>r-i);let t=Math.floor(o.length/2);return o.length%2===0?Math.round((o[t-1]+o[t])/2):o[t]}var Pe=new Map;async function P(){let e=Pe.get(O);if(e)return e;let n=await y(()=>fetch(`${O}/getRandomPayer`));if(!n.ok)throw new Error(`Failed to get random payer: ${n.statusText}`);let{randomPayer:a}=await n.json(),o=Ct(kit.address(a),`${O}/sign`);return Pe.set(O,o),o}function Ct(e,n){return {address:e,async signTransactions(o){let t={publicKey:e,transactions:o.map(c=>kit.getBase64Decoder().decode(kit.getTransactionEncoder().encode(c)))},r=await fetch(n,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(t)});if(!r.ok)throw new Error(`Failed to sign transactions: ${r.statusText}`);let i=await r.json();if("error"in i)throw new Error(i.error);return i.signatures.map(c=>({[e]:kit.getBase58Encoder().encode(c)}))}}}async function k(e){let{transactionManagerAddress:n,transactionMessageBytes:a,authResponses:o,onPendingApprovalsCallback:t,onPendingApprovalsSuccess:r,abortController:i,abortSignal:c}=e,s=i;if(c&&!s){let p=new AbortController;c.aborted?p.abort():c.addEventListener("abort",()=>p.abort(),{once:true}),s=p;}let u;if(n){let p=(await y(async()=>core.fetchUser(core.getSolanaRpc(),await core.getUserAddress(n)))).data.transactionManagerUrl;u=p.__option==="Some"?p.value:null;}return n&&u?core.createTransactionManagerSigner({address:n,url:u,authResponses:o,transactionMessageBytes:a,onPendingApprovalsCallback:t,onPendingApprovalsSuccess:r,abortController:s}):null}async function M(e){if(!e)return await y(()=>kit.fetchAddressesForLookupTables([kit.address(L)],core.getSolanaRpc()));if(L in e)return e;let n=await y(()=>addressLookupTable.fetchMaybeAddressLookupTable(core.getSolanaRpc(),kit.address(L)));return n.exists?{...e,[n.address]:n.data.addresses}:e}async function Me(e,n){let{authResponse:a,settings:o,additionalSigners:t,additionalVoters:r,options:i,payer:c}=n,{startRequest:s,transactionManagerAddress:u}=a;if(s.data.type!=="transaction")throw new Error("Invalid request type.");let{transactionActionType:l,transactionMessageBytes:p}=s.data.payload;if(l!=="execute"&&l!=="create_with_preauthorized_execution")throw new Error("Transaction action type must be 'execute' or 'create_with_preauthorized_execution'");let d=await core.getSignedSecp256r1Key(a),[g,f]=await Promise.all([k({authResponses:[a],transactionManagerAddress:u?kit.address(u):void 0,transactionMessageBytes:kit.getBase64Encoder().encode(p),onPendingApprovalsCallback:i?.pendingApprovalsCallback?.onPendingApprovalsCallback,onPendingApprovalsSuccess:i?.pendingApprovalsCallback?.onPendingApprovalsSuccess,abortSignal:i?.signal}),y(()=>e.onEstimateJitoTipsCallback())]),h=await core.prepareTransactionBundle({settings:o,transactionMessageBytes:kit.getBase64Encoder().encode(p),creator:g??d,executor:g?d:void 0,jitoBundlesTipAmount:f,additionalVoters:r,additionalSigners:t,payer:c}),m=await Promise.all(h.map(async v=>({...v,addressesByLookupTableAddress:await M(v.addressesByLookupTableAddress)})));return xe(e,m)}async function Oe(e){let{authResponse:n,settings:a,payer:o,additionalSigners:t,additionalVoters:r,options:i}=e,{startRequest:c,transactionManagerAddress:s}=n;if(c.data.type!=="transaction")throw new Error("Invalid request type.");let{transactionActionType:u,transactionMessageBytes:l}=c.data.payload;if(u!=="sync")throw new Error("Transaction action type must be 'sync'");let p=await core.getSignedSecp256r1Key(n),d=await k({authResponses:[n],transactionManagerAddress:s?kit.address(s):void 0,transactionMessageBytes:kit.getBase64Encoder().encode(l),onPendingApprovalsCallback:i?.pendingApprovalsCallback?.onPendingApprovalsCallback,onPendingApprovalsSuccess:i?.pendingApprovalsCallback?.onPendingApprovalsSuccess,abortSignal:i?.signal}),g=d?[p,d,...r??[]]:[p,...r??[]],{instructions:f,addressesByLookupTableAddress:h}=await core.prepareTransactionSync({signers:g,payer:o,transactionMessageBytes:kit.getBase64Encoder().encode(l),settings:a,additionalSigners:t});return K({instructions:f,payer:o,addressesByLookupTableAddress:await M(h)})}async function _e(e){let{authResponse:n,settings:a,options:o,payer:t,additionalVoters:r}=e,{startRequest:i,transactionManagerAddress:c}=n;if(i.data.type!=="transaction")throw new Error("Invalid request type.");let{transactionActionType:s,transactionAddress:u,transactionMessageBytes:l}=i.data.payload;if(s!=="transfer_intent")throw new Error("Transaction action type must be 'transfer_intent'");let p=kit.getBase64Encoder().encode(l),d=kit.getU64Decoder().decode(p.slice(0,8)),g=kit.getAddressDecoder().decode(p.slice(8,40)),f=kit.getAddressDecoder().decode(p.slice(40,72)),h=await core.getSignedSecp256r1Key(n),m=await k({authResponses:[n],transactionManagerAddress:c?kit.address(c):void 0,transactionMessageBytes:kit.getBase64Encoder().encode(l),onPendingApprovalsCallback:o?.pendingApprovalsCallback?.onPendingApprovalsCallback,onPendingApprovalsSuccess:o?.pendingApprovalsCallback?.onPendingApprovalsSuccess,abortSignal:o?.signal}),v=m?[h,m,...r??[]]:[h,...r??[]],T=f!==system.SYSTEM_PROGRAM_ADDRESS?await core.tokenTransferIntent({payer:t,settings:a,amount:d,signers:v,destination:g,mint:f,tokenProgram:kit.address(u)}):await core.nativeTransferIntent({settings:a,amount:d,signers:v,destination:g});return K({instructions:T,payer:t,addressesByLookupTableAddress:await M(void 0)})}async function Le(e,n=30,a=2e3){for(let o=0;o<n;o++){let r=(await y(()=>core.getSolanaRpc().getSignatureStatuses([e]).send())).value[0];if(r?.confirmationStatus==="confirmed"||r?.confirmationStatus==="finalized")return e;await new Promise(i=>setTimeout(i,a));}throw new Error("Transaction confirmation timeout")}async function W(e,n){let{request:a,additionalSigners:o,options:t,payer:r,additionalVoters:i}=n,{confirmTransaction:c=true}=t??{},s=a.data.type==="transaction"&&a.data.payload.startRequest.data.payload.transactionActionType!=="transfer_intent"?a.data.payload.startRequest.data.payload.transactionAddress:a.data.payload.user.settingsIndexWithAddress?.index?await core.getSettingsFromIndex(a.data.payload.user.settingsIndexWithAddress.index):null;if(!s)throw Error("User is not delegated to any wallet");let u;switch(a.data.payload.startRequest.data.payload.transactionActionType){case "transfer_intent":u=await _e({authResponse:a.data.payload,settings:kit.address(s),options:t,payer:r,additionalVoters:i});break;case "execute":case "create_with_preauthorized_execution":u=await Me(e,{authResponse:a.data.payload,settings:kit.address(s),additionalSigners:o,additionalVoters:i,options:t,payer:r});break;case "sync":u=await Oe({authResponse:a.data.payload,settings:kit.address(s),additionalSigners:o,additionalVoters:i,options:t,payer:r});break;default:throw Error("Invalid Transaction Action Type for send tx payload.")}return c&&await Le(u),u}async function no(e,n,a){let{instructions:o,signer:t,addressesByLookupTableAddress:r,settingsIndexWithAddress:i,additionalSigners:c,additionalVoters:s,payer:u}=n,l=async(d,g)=>{let f=core.prepareTransactionMessage({payer:kit.address(t.walletAddress),instructions:o,addressesByLookupTableAddress:r}),h=i??t.settingsIndexWithAddress,m=await core.getSettingsFromIndex(h.index),T=(await y(()=>core.fetchSettings(core.getSolanaRpc(),m))).data.members.find(b=>b.role===core.UserRole.TransactionManager)?.pubkey,w={transactionMessageBytes:kit.getBase64Decoder().decode(f),transactionAddress:m,transactionActionType:T?"execute":"create_with_preauthorized_execution"},R={phase:"start",rid:d,providerOrigin:e.providerOrigin,rpId:e.rpId,data:{type:"transaction",payload:w},clientOrigin:g,signer:t.publicKey},{signature:x,validTill:_}=await y(()=>e.onClientAuthorizationCallback(R));return {request:{...R,rid:d,validTill:_},signature:x,transactionManagerAddress:T?core.convertMemberKeyToString(T):void 0,additionalSigners:c?.map(b=>b.address.toString()),additionalVoters:s?.map(b=>b instanceof core.SignedSecp256r1Key?{keyType:core.KeyType.Secp256r1,publicKey:b.toString()}:{keyType:core.KeyType.Ed25519,publicKey:b.address.toString()}),payer:(u??await P()).address.toString()}},p=async d=>{let{signature:g}=await e.onClientAuthorizationCallback(d),f=await W(e,{request:{...d,data:{...d.data,payload:{...d.data.payload,client:{...d.data.payload.client,jws:g}}}},options:a,additionalSigners:c,additionalVoters:s,payer:u??await P()});return {user:d.data.payload.user,txSig:f}};return e.sendRequestToPopupProvider({onConnectedCallback:l,onSuccessCallback:p,signal:a?.signal})}async function uo(e,n,a){if(n.amount<=0)throw new Error("Transfer amount must be greater than 0");if(!n.destination||typeof n.destination!="string")throw new Error("Destination address is required");let{mint:o,tokenProgram:t=token.TOKEN_PROGRAM_ADDRESS,amount:r,destination:i,signer:c,payer:s,additionalVoters:u}=n,l=async(d,g)=>{let f={transactionActionType:"transfer_intent",transactionAddress:o?t:system.SYSTEM_PROGRAM_ADDRESS,transactionMessageBytes:kit.getBase64Decoder().decode(new Uint8Array([...kit.getU64Encoder().encode(r),...kit.getAddressEncoder().encode(kit.address(i)),...kit.getAddressEncoder().encode(kit.address(o??system.SYSTEM_PROGRAM_ADDRESS))]))},h={phase:"start",rid:d,providerOrigin:e.providerOrigin,rpId:e.rpId,data:{type:"transaction",payload:f},clientOrigin:g,signer:c?.publicKey},{signature:m,validTill:v}=await y(()=>e.onClientAuthorizationCallback(h));return {request:{...h,rid:d,validTill:v},signature:m,additionalVoters:u?.map(T=>T instanceof core.SignedSecp256r1Key?{keyType:core.KeyType.Secp256r1,publicKey:T.toString()}:{keyType:core.KeyType.Ed25519,publicKey:T.address.toString()}),payer:(s??await P()).address.toString()}},p=async d=>{let{signature:g}=await e.onClientAuthorizationCallback(d);return {txSig:await W(e,{request:{...d,data:{...d.data,payload:{...d.data.payload,client:{...d.data.payload.client,jws:g}}}},options:a,additionalVoters:u,payer:s??await P()}),user:d.data.payload.user}};return e.sendRequestToPopupProvider({onConnectedCallback:l,onSuccessCallback:p,signal:a?.signal})}async function Ke(e,n,a){if(!n.includes(e.clientOrigin))throw new Error("Invalid client origin");let o=Date.now()+re,t=core.convertBase64StringToJWK(a);if(!t.alg)throw new Error("Property alg in JWK is missing.");return {ok:true,signature:await new jose.CompactSign(core.createClientAuthorizationStartRequestChallenge({...e,validTill:o})).setProtectedHeader({alg:t.alg}).sign(t),validTill:o}}function I(e,n){if(e.length!==n.length)return false;let a=0;for(let o=0;o<e.length;o++)a|=e[o]^n[o];return a===0}async function He(e,n,a,o){let{payload:t}=e.data;if(t.startRequest.data.type!=="message")throw new Error("Invalid request type.");if(Date.now()>t.startRequest.validTill)throw new Error("Request expired.");if(!a.includes(t.startRequest.clientOrigin)||!a.includes(t.client.clientOrigin)||t.startRequest.clientOrigin!==t.client.clientOrigin)throw new Error("Invalid client origin");{let c=await jose.importJWK(core.convertBase64StringToJWK(n)),s=await jose.compactVerify(e.data.payload.client.jws,c);if(!I(s.payload,core.createClientAuthorizationStartRequestChallenge(e.data.payload.startRequest)))throw new Error("Invalid client signature")}{if(t.device.jwk!==t.device.deviceProfile.devicePublicKey)throw new Error("Device publickey mismatch");let c=await jose.importJWK(core.convertBase64StringToJWK(t.device.jwk)),s=await jose.compactVerify(t.device.jws,c);if(!I(s.payload,core.getDeviceMessageHash(t.authResponse,t.device.deviceProfile)))throw new Error("Invalid device signature")}let r=core.createMessageChallenge(t.startRequest.data.payload,t.startRequest.clientOrigin,t.device.jwk,t.startRequest.rid),{verified:i}=await server.verifyAuthenticationResponse({response:t.authResponse,expectedChallenge:core.bufferToBase64URLString(r),expectedRPID:t.startRequest.rpId,expectedOrigin:t.startRequest.providerOrigin,requireUserVerification:false,credential:{counter:0,id:t.authResponse.id,publicKey:core.convertPubkeyCompressedToCose(t.signer)}});if(!i)throw new Error("Invalid user siganture");if(o){if(!t.startRequest.data.requireTwoFactorAuthentication)throw new Error("Two factor authentication is required.");if(!t.transactionManager)throw new Error("Missing signature from transaction manager.");let s=(await core.fetchUserAccountByFilters(await core.getDomainConfigAddress({rpId:t.startRequest.rpId}),{credentialId:t.authResponse.id}))?.wallets.find(p=>p.isDelegate);if(!s)throw new Error("User does not have a delegated wallet");let l=(await core.fetchSettings(core.getSolanaRpc(),await core.getSettingsFromIndex(s.index))).data.members.find(p=>p.role===core.UserRole.TransactionManager);if(!l)throw new Error("No transaction manager found.");if(t.transactionManager.publicKey!==core.convertMemberKeyToString(l.pubkey))throw new Error("Transaction manager mismatch.");if(!await kit.verifySignature(await kit.getPublicKeyFromAddress(kit.address(t.transactionManager.publicKey)),kit.signatureBytes(kit.getBase58Encoder().encode(t.transactionManager.signature)),r))throw new Error("Invalid transaction manager signature.")}return {ok:true}}async function Ye(e,n,a,o){let{payload:t}=e.data;if(t.startRequest.data.type!=="transaction")throw new Error("Invalid request type.");if(Date.now()>Math.min(t.startRequest.validTill,t.estimatedSlotHashExpiry))throw new Error("Request expired.");if(!a.includes(t.startRequest.clientOrigin)||!a.includes(t.client.clientOrigin)||t.startRequest.clientOrigin!==t.client.clientOrigin)throw new Error("Invalid client origin");{let c=await jose.importJWK(core.convertBase64StringToJWK(n)),s=await jose.compactVerify(e.data.payload.client.jws,c);if(!I(s.payload,core.createClientAuthorizationStartRequestChallenge(e.data.payload.startRequest)))throw new Error("Invalid client signature")}{if(t.device.jwk!==t.device.deviceProfile.devicePublicKey)throw new Error("Device publickey mismatch");let c=await jose.importJWK(core.convertBase64StringToJWK(t.device.jwk)),s=await jose.compactVerify(t.device.jws,c);if(!I(s.payload,core.getDeviceMessageHash(t.authResponse,t.device.deviceProfile)))throw new Error("Invalid device signature")}{let{challenge:c}=await core.createTransactionChallenge(t.startRequest.data.payload,t.startRequest.clientOrigin,t.device.jwk,t.startRequest.rid,t.slotHash,t.slotNumber,t.estimatedSlotHashExpiry),{verified:s}=await server.verifyAuthenticationResponse({response:t.authResponse,expectedChallenge:core.bufferToBase64URLString(c),expectedRPID:t.startRequest.rpId,expectedOrigin:t.startRequest.providerOrigin,requireUserVerification:false,credential:{counter:0,id:t.authResponse.id,publicKey:core.convertPubkeyCompressedToCose(t.signer)}});if(!s)throw new Error("Invalid user siganture")}let r=core.convertBase64StringToJWK(o);if(!r.alg)throw new Error("Property alg in JWK is missing.");return {ok:true,signature:await new jose.CompactSign(core.createClientAuthorizationCompleteRequestChallenge(e)).setProtectedHeader({alg:r.alg}).sign(r)}}var Ze=false;function Mn(e){Ze||e&&(core.initialize({rpcEndpoint:e}),Ze=true);}async function jo({request:e,publicKey:n,allowedClientOrigins:a,privateKey:o,requireTwoFactorAuthentication:t}){if(Mn(t?.rpcEndpoint),e.phase==="start"){if(e.data.type==="message"&&!!t!==e.data.requireTwoFactorAuthentication)throw new Error("Require 2fa check mismatch");return await Ke(e,a,o)}else if(e.phase==="complete"){if(e.data.type==="message")return await He(e,n,a,!!t);if(e.data.type==="transaction")return await Ye(e,n,a,o);throw new Error("Invalid request type")}else throw new Error("Invalid request phase")}async function Ko(e="landed_tips_75th_percentile",n=te){let a=await fetch(n);if(!a.ok)throw new Error(`Failed to fetch Jito tips: ${a.status} ${a.statusText}`);let o=await a.json();if(!Array.isArray(o)||!o[0]||typeof o[0][e]!="number")throw new Error("Invalid Jito tips response format");return Math.round(o[0][e]*1e9)}async function Vo(e,n,a=ee){let r=JSON.stringify({jsonrpc:"2.0",id:1,method:"sendBundle",params:[e,{encoding:"base64"}]}),i=null;for(let s=0;s<=5&&(i=await fetch(a,{method:"POST",headers:{"Content-Type":"application/json",...n?{"x-jito-auth":n}:{}},body:r}),!(i.status!==429||s===5));s++){let u=Math.min(1e4,250*2**s);await In(u);}if(!i)throw new Error("Failed to send bundles: no response");let c=await i.json();if(c.error)throw new Error(`Error sending bundles: ${JSON.stringify(c.error,null,2)}`);if(!c.result)throw new Error("No bundle ID returned from Jito");return c.result}var In=e=>new Promise(n=>setTimeout(n,e));/*! Bundled license information:
|
|
5
7
|
|
|
6
8
|
@noble/curves/utils.js:
|
|
7
9
|
(*! noble-curves - MIT License (c) 2022 Paul Miller (paulmillr.com) *)
|
|
8
|
-
*/exports.RevibaseAbortedError=
|
|
10
|
+
*/exports.RevibaseAbortedError=j;exports.RevibaseApiError=U;exports.RevibaseAuthError=A;exports.RevibaseEnvironmentError=z;exports.RevibaseError=S;exports.RevibaseFlowInProgressError=D;exports.RevibasePopupBlockedError=F;exports.RevibasePopupClosedError=E;exports.RevibasePopupNotOpenError=ne;exports.RevibaseProvider=pe;exports.RevibaseTimeoutError=B;exports.executeTransaction=no;exports.processClientAuthCallback=jo;exports.processEstimateJitoTipsCallback=Ko;exports.processSendJitoBundleCallback=Vo;exports.signIn=sr;exports.transferTokens=uo;//# sourceMappingURL=index.cjs.map
|
|
9
11
|
//# sourceMappingURL=index.cjs.map
|