@privy-io/js-sdk-core
Version:
Vanilla JS client for the Privy Auth API
2 lines (1 loc) • 1.71 kB
JavaScript
import{PrivyClientError as r}from"../../../../Error.mjs";import{getCrossAppAccountByWalletAddress as e}from"./getCrossAppAccountByWalletAddress.mjs";import{getProviderAccessTokenOrRelink as o}from"./getProviderAccessTokenOrRelink.mjs";import"../../linkWithCrossAppAuth.mjs";const t=({client:t,openAuthSession:s})=>{let a=o({client:t,openAuthSession:s});return async({user:o,request:p,redirectUrl:n,address:i})=>{let c=e(o,i);if(!c)throw new r({code:"cross_app_invalid_wallet",error:"Cannot operate with this wallet address"});let _=c.provider_app_id,{connections:d}=await t.crossApp.getCrossAppConnections(),l=d.find((r=>r.provider_app_id===_));if(!l)throw new r({code:"cross_app_invalid_app",error:"Invalid connected app"});if(l.read_only)throw new r({code:"cross_app_read_only",error:"Cannot transact against a read-only provider app"});let u=await a({providerAppId:_,redirectUrl:n});if(!u)throw new r({code:"cross_app_request_error",error:"Wallet operations require a valid token"});let w={content:{request:{request:p}},timestamp:Date.now(),callbackUrl:n},m=new URL(`${l.provider_app_custom_api_url}/oauth/transact`);m.searchParams.set("communicationMode","redirect"),m.searchParams.set("token",u),m.searchParams.set("request",JSON.stringify(w));let{privy_cross_app_type:h,privy_cross_app_payload:A}=await s(m.href);if(!h||!A)throw new r({code:"cross_app_request_error",error:"Cross app request returned an invalid result"});if("PRIVY_CROSS_APP_ACTION_ERROR"===h)throw new r({code:"cross_app_request_error",error:A});if("PRIVY_CROSS_APP_ACTION_RESPONSE"!==h)throw new r({code:"cross_app_request_error",error:"Cross app request returned an invalid result"});return{result:A}}};export{t as sendCrossAppRequest};