UNPKG

@privy-io/js-sdk-core

Version:

Vanilla JS client for the Privy Auth API

2 lines (1 loc) 4.71 kB
"use strict";var e=require("../Error.js"),r=require("../solana/getWalletPublicKeyFromTransaction.js"),t=require("../solana/isVersionedTransaction.js"),s=require("./errors.js");require("./types.js");exports.EmbeddedSolanaWalletProvider=class{async request(r){if(!await this._privyInternal.getAccessToken())throw new e.PrivyClientError({error:"Missing access token",code:"attempted_rpc_call_before_logged_in"});switch(r.method){case"signAndSendTransaction":return await this.handleSignAndSendTransaction(r);case"signTransaction":return await this.handleSignTransaction(r);default:return await this.handleIFrameRpc(r)}}get _publicKey(){return this._account.address}async connectAndRecover(e){try{await this._proxy.connect({entropyId:this._entropyId,entropyIdVerifier:this._entropyIdVerifier,accessToken:e})}catch(r){let t=s.errorIndicatesRecoveryIsNeeded(r);if(t&&"privy"===this._account.recovery_method)await this._proxy.recover({entropyId:this._entropyId,entropyIdVerifier:this._entropyIdVerifier,accessToken:e});else{if(!t||!this._onNeedsRecovery)throw r;{let e;await new Promise((async(r,t)=>{e=setTimeout(t,12e4),await(this._onNeedsRecovery?.({recoveryMethod:this._account.recovery_method,onRecovered:()=>r(!0)}))})).finally((()=>clearTimeout(e)))}}}}async handleIFrameRpc(r){try{let e=await this._privyInternal.getAccessToken();if(!e)throw Error("Missing privy token. User must be logged in");return this._privyInternal.createAnalyticsEvent("embedded_wallet_sdk_rpc_started",{method:r.method,address:this._account.address}),await this.connectAndRecover(e),(await this._proxy.rpcWallet({accessToken:e,request:r,chainType:"solana",hdWalletIndex:this._account.wallet_index,entropyId:this._entropyId,entropyIdVerifier:this._entropyIdVerifier})).response.data}catch(t){console.error(t);let s=t instanceof Error?t.message:"Unable to make wallet request";throw this._privyInternal.createAnalyticsEvent("embedded_wallet_sdk_rpc_failed",{method:r.method,address:this._account.address,error:s}),new e.PrivyClientError({code:"embedded_wallet_request_error",error:s})}}async handleSignAndSendTransaction(s){try{let e=await this._privyInternal.getAccessToken();if(!e)throw Error("Missing privy token. User must be logged in");this._privyInternal.createAnalyticsEvent("embedded_wallet_sdk_rpc_started",{method:s.method,address:this._account.address}),await this.connectAndRecover(e);let{transaction:a,connection:n,options:i}=s.params,o=r.getWalletPublicKeyFromTransaction(a,this._account.address),d=t.isVersionedTransaction(a)?Buffer.from(a.message.serialize()):a.serializeMessage(),c=(await this._proxy.rpcWallet({accessToken:e,chainType:"solana",hdWalletIndex:this._account.wallet_index,entropyId:this._entropyId,entropyIdVerifier:this._entropyIdVerifier,request:{method:"signMessage",params:{message:d.toString("base64")}}})).response.data.signature;return a.addSignature(o,Buffer.from(c,"base64")),{signature:await n.sendRawTransaction(a.serialize(),i)}}catch(r){console.error(r);let t=r instanceof Error?r.message:"Unable to make wallet request";throw this._privyInternal.createAnalyticsEvent("embedded_wallet_sdk_rpc_failed",{method:s.method,address:this._account.address,error:t}),new e.PrivyClientError({code:"embedded_wallet_request_error",error:t})}}async handleSignTransaction(s){try{let e=await this._privyInternal.getAccessToken();if(!e)throw Error("Missing privy token. User must be logged in");this._privyInternal.createAnalyticsEvent("embedded_wallet_sdk_rpc_started",{method:s.method,address:this._account.address}),await this.connectAndRecover(e);let{transaction:a}=s.params,n=r.getWalletPublicKeyFromTransaction(a,this._account.address),i=t.isVersionedTransaction(a)?Buffer.from(a.message.serialize()):a.serializeMessage(),o=(await this._proxy.rpcWallet({accessToken:e,chainType:"solana",hdWalletIndex:this._account.wallet_index,entropyId:this._entropyId,entropyIdVerifier:this._entropyIdVerifier,request:{method:"signMessage",params:{message:i.toString("base64")}}})).response.data.signature;return a.addSignature(n,Buffer.from(o,"base64")),{signedTransaction:a}}catch(r){console.error(r);let t=r instanceof Error?r.message:"Unable to make wallet request";throw this._privyInternal.createAnalyticsEvent("embedded_wallet_sdk_rpc_failed",{method:s.method,address:this._account.wallet_index,error:t}),new e.PrivyClientError({code:"embedded_wallet_request_error",error:t})}}toJSON(){return`PrivyEmbeddedSolanaProvider { address: '${this._account.address}', request: [Function] }`}constructor({proxy:e,privyInternal:r,account:t,entropyId:s,entropyIdVerifier:a,onNeedsRecovery:n}){this._proxy=e,this._privyInternal=r,this._account=t,this._entropyId=s,this._entropyIdVerifier=a,this._onNeedsRecovery=n}};