UNPKG

@privy-io/cross-app-connect

Version:

Privy cross app wallet connectors for wagmi and RainbowKit

2 lines (1 loc) 1.56 kB
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 d=window.open(void 0,void 0,t({w:400,h:680}));if(!d)throw Error("Failed to initialize request");let p=new URL(`${o}/cross-app/transact`),{encryptedRequest:m,iv:u}=await e(a,c);return p.searchParams.set("requester_public_key",i),p.searchParams.set("encrypted_request",m),p.searchParams.set("requester_origin",window.location.origin),p.searchParams.set("iv",u),p.searchParams.set("provider_app_id",n),p.searchParams.set("signout_enabled","true"),p.searchParams.set("v","1"),d.location=p.href,new Promise(((e,t)=>{let a=setTimeout((()=>{n(),t(new s("Request timeout"))}),12e4),o=setInterval((()=>{d.closed&&(n(),t(new s("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,code:a.data?.errorCode}))))};window.addEventListener("message",i);let n=()=>{d.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),r?.code&&(this.code=r.code)}}export{s as PopupRequestError,a as sendRequestToPopup};