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