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