@privy-io/cross-app-connect
Version:
Privy cross app wallet connectors for wagmi and RainbowKit
2 lines (1 loc) • 1.51 kB
JavaScript
import{encryptRequest as e,decryptResult as r}from"./crypto.mjs";import{getPopupOptions as t}from"./triggerPopup.mjs";import"@noble/curves/secp256k1";import"@scure/base";import"buffer";import"fflate";async function a({request:a,apiUrl:o,publicKey:i,sharedSecret:c,providerAppId:n}){let p=window.open(void 0,void 0,t({w:400,h:680}));if(!p)throw Error("Failed to initialize request");let d=new URL(`${o}/cross-app/transact`),{encryptedRequest:m,iv:u}=await e(a,c);return d.searchParams.set("requester_public_key",i),d.searchParams.set("encrypted_request",m),d.searchParams.set("requester_origin",window.location.origin),d.searchParams.set("iv",u),d.searchParams.set("provider_app_id",n),d.searchParams.set("signout_enabled","true"),d.searchParams.set("v","1"),p.location=d.href,new Promise(((e,t)=>{let a=setTimeout((()=>{n(),t(Error("Request timeout"))}),12e4),o=setInterval((()=>{p.closed&&(n(),t(Error("User rejected request")))}),300),i=async a=>{a.data&&("PRIVY_CROSS_APP_ACTION_RESPONSE"===a.data.type&&a.data.encryptedResult&&(n(),e(await r({encryptedResult:a.data.encryptedResult,iv:a.data.iv,sharedSecret:c}))),"PRIVY_CROSS_APP_ACTION_ERROR"===a.data.type&&a.data.error&&(n(),t(new s(a.data.error,{mwp:a.data.mwp}))))};window.addEventListener("message",i);let n=()=>{p.close(),clearInterval(o),clearTimeout(a),window.removeEventListener("message",i)}}))}class s extends Error{constructor(e,r){super(e),r?.mwp?.action&&(this.action=r.mwp.action)}}export{s as PopupRequestError,a as sendRequestToPopup};