@privy-io/cross-app-connect
Version:
Privy cross app wallet connectors for wagmi and RainbowKit
2 lines (1 loc) • 1.55 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),r?.code&&(this.code=r.code)}}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 d=new URL(a),{encryptedRequest:u,iv:p}=await e.encryptRequest(s,o);return d.searchParams.set("requester_public_key",i),d.searchParams.set("encrypted_request",u),d.searchParams.set("requester_origin",window.location.origin),d.searchParams.set("iv",p),d.searchParams.set("provider_app_id",c),d.searchParams.set("signout_enabled","true"),d.searchParams.set("v","1"),n.location=d.href,new Promise(((r,s)=>{let a=setTimeout((()=>{d(),s(new t("Request timeout"))}),12e4),i=setInterval((()=>{n.closed&&(d(),s(new t("User rejected request")))}),300),c=async a=>{a.data&&("PRIVY_CROSS_APP_ACTION_RESPONSE"===a.data.type&&a.data.encryptedResult&&(d(),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&&(d(),s(new t(a.data.error,{mwp:a.data.mwp,code:a.data?.errorCode}))))};window.addEventListener("message",c);let d=()=>{n.close(),clearInterval(i),clearTimeout(a),window.removeEventListener("message",c)}}))};
;