UNPKG

@privy-io/react-auth

Version:

React client for the Privy Auth API

2 lines (1 loc) • 18.2 kB
import{useCallback as e}from"react";import{b as t,i as s,S as i,p as n,e as r,f as o}from"./usePrivy-C_sY2Duk.mjs";import{u as l}from"./context-DLtU3JQy.mjs";import{a as c}from"./events-context-CI0iqAXA.mjs";import{u as d}from"./internal-context-Z-fyxadS.mjs";import{u as h}from"./privy-context-DrMxzgOR.mjs";import{a as p}from"./PrivyPluginContext-2QN2dVUw.mjs";import{pipe as g,createTransactionMessage as f,setTransactionMessageFeePayerSigner as m,setTransactionMessageLifetimeUsingBlockhash as v,appendTransactionMessageInstructions as y,compileTransaction as b,getTransactionEncoder as w,address as P,setTransactionMessageFeePayer as S,blockhash as j,getTransactionDecoder as _}from"@solana/kit";import{f as C,s as O,g as W}from"./useSolanaRpcClient-71aYSqHX.mjs";import{S as T,g as A}from"./useWallets-z8NFrORr.mjs";export{a as useStandardWallets,u as useWallets}from"./useWallets-z8NFrORr.mjs";import{base58 as E,base64 as k}from"@scure/base";import{getAddMemoInstruction as M}from"@solana-program/memo";export{a as useExportWallet,u as useFundWallet}from"./use-export-wallet-BMt6c-lN.mjs";import{S as x,c as U,W as I}from"./use-export-wallet-_wu5ex5t.mjs";import{getWallets as R}from"@wallet-standard/app";import{UniversalProvider as q}from"@walletconnect/universal-provider";import{isMobile as F}from"react-device-detect";import"@privy-io/js-sdk-core";import"./useWallets-BzNCTucF.mjs";import"viem";import"react/jsx-runtime";import"tinycolor2";import"ofetch";import"@privy-io/are-addresses-equal";import"eventemitter3";import"./use-sign-with-user-signer-Do5Oi_rb.mjs";import"viem/utils";const N=e=>{let t,{get:s,on:i}=R(),n=e?.shouldAutoConnect??!0,a=new x(new Ue,n),r=new Map,o=[];function l(...e){e.forEach((e=>{!(e.features["privy:"]&&"isPrivyWallet"in e&&e.isPrivyWallet||r.has(e.name))&&e.chains.some((e=>"string"==typeof e&&e.startsWith("solana:")))&&r.set(e.name,e)})),o=Array.from(r.values()).map((e=>new x(e,n))).concat(a),t?.(o)}function c(...e){Array.from(r.values()).forEach((t=>!e.includes(t)&&r.delete(t.name))),o=Array.from(r.values()).map((e=>new x(e,n))).concat(a),t?.(o)}let d=[i("register",l),i("unregister",c)];return l(...s()),{_setOnConnectorsUpdated:e=>{t=e},onMount:()=>{d[0]||(d[0]=i("register",l)),d[1]||(d[1]=i("unregister",c))},onUnmount:()=>{let e=d.pop();for(;e;)e(),e=d.pop()},get:()=>o}};function K(e,t){if(!Object.prototype.hasOwnProperty.call(e,t))throw TypeError("attempted to use private field on non-instance");return e}var z=0;function V(e){return"__private_"+z+++"_"+e}var D=/*#__PURE__*/V("_address"),B=/*#__PURE__*/V("_publicKey"),J=/*#__PURE__*/V("_chains"),L=/*#__PURE__*/V("_features"),Y=/*#__PURE__*/V("_label"),H=/*#__PURE__*/V("_icon");class Q{get address(){return K(this,D)[D]}get publicKey(){return K(this,B)[B].slice()}get chains(){return K(this,J)[J].slice()}get features(){return K(this,L)[L].slice()}get label(){return K(this,Y)[Y]}get icon(){return K(this,H)[H]}constructor({address:e,publicKey:t,label:s,icon:i}){Object.defineProperty(this,D,{writable:!0,value:void 0}),Object.defineProperty(this,B,{writable:!0,value:void 0}),Object.defineProperty(this,J,{writable:!0,value:void 0}),Object.defineProperty(this,L,{writable:!0,value:void 0}),Object.defineProperty(this,Y,{writable:!0,value:void 0}),Object.defineProperty(this,H,{writable:!0,value:void 0}),K(this,D)[D]=e,K(this,B)[B]=t,K(this,J)[J]=T,K(this,L)[L]=["solana:signAndSendTransaction","solana:signTransaction","solana:signMessage"],K(this,Y)[Y]=s,K(this,H)[H]=i}}function Z(e){if("string"==typeof e)return E.decode(e);if(e instanceof Uint8Array)return e;let t=e.signature;return"string"==typeof t?E.decode(t):t}function G(e){if("string"==typeof e){try{return E.decode(e)}catch{}return k.decode(e)}if(e instanceof Uint8Array)return e;let t=e.transaction??e.signature;if(!t)throw Error("Invalid result from signTransaction or signAndSendTransaction attempt");if("string"==typeof t){try{return E.decode(t)}catch{}return k.decode(t)}return t}function $(e,t){if(!Object.prototype.hasOwnProperty.call(e,t))throw TypeError("attempted to use private field on non-instance");return e}var X=0;function ee(e){return"__private_"+X+++"_"+e}let te="solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp",se="solana:EtWTRABZaYq6iMfeYKouRu166VU2xqa1";var ie=/*#__PURE__*/ee("_listeners"),ne=/*#__PURE__*/ee("_version"),ae=/*#__PURE__*/ee("_name"),re=/*#__PURE__*/ee("_icon"),oe=/*#__PURE__*/ee("_provider"),le=/*#__PURE__*/ee("_accounts"),ce=/*#__PURE__*/ee("_privyAppName"),de=/*#__PURE__*/ee("_walletConnectCloudProjectId"),ue=/*#__PURE__*/ee("_walletEntry"),he=/*#__PURE__*/ee("_onDisplayUriCallback"),pe=/*#__PURE__*/ee("_providerEventListeners"),ge=/*#__PURE__*/ee("_on"),fe=/*#__PURE__*/ee("_emit"),me=/*#__PURE__*/ee("_off"),ve=/*#__PURE__*/ee("_connected"),ye=/*#__PURE__*/ee("_disconnected"),be=/*#__PURE__*/ee("_connect"),we=/*#__PURE__*/ee("_disconnect"),Pe=/*#__PURE__*/ee("_signMessage"),Se=/*#__PURE__*/ee("_signAndSendTransaction"),je=/*#__PURE__*/ee("_signTransaction"),_e=/*#__PURE__*/ee("_getOrCreateProvider"),Ce=/*#__PURE__*/ee("_getOrCreateSession"),Oe=/*#__PURE__*/ee("_getAllSignClientSessions"),We=/*#__PURE__*/ee("_assignSessionToProvider"),Te=/*#__PURE__*/ee("_restoreSession"),Ae=/*#__PURE__*/ee("_addProviderEventListener"),Ee=/*#__PURE__*/ee("_destroySession"),ke=/*#__PURE__*/ee("_makeRpcRequest"),Me=/*#__PURE__*/ee("_onDisplayUri"),xe=/*#__PURE__*/ee("_onSessionDelete");class Ue{get version(){return $(this,ne)[ne]}get name(){return $(this,ae)[ae]}get icon(){return $(this,re)[re]}get chains(){return T.slice()}get features(){return{"standard:connect":{version:"1.0.0",connect:$(this,be)[be]},"standard:disconnect":{version:"1.0.0",disconnect:$(this,we)[we]},"standard:events":{version:"1.0.0",on:$(this,ge)[ge]},"solana:signAndSendTransaction":{version:"1.0.0",supportedTransactionVersions:["legacy",0],signAndSendTransaction:$(this,Se)[Se]},"solana:signTransaction":{version:"1.0.0",supportedTransactionVersions:["legacy",0],signTransaction:$(this,je)[je]},"solana:signMessage":{version:"1.0.0",signMessage:$(this,Pe)[Pe]}}}get accounts(){return $(this,le)[le].slice()}get isWalletConnectSolana(){return!0}async initialize({walletConnectCloudProjectId:e,privyAppName:t}){await this.initializeProvider({walletConnectCloudProjectId:e,privyAppName:t}),await this.restoreSession()}async initializeProvider({walletConnectCloudProjectId:e,privyAppName:t}){U.debug("Initializing WalletConnect Solana provider"),$(this,de)[de]=e,$(this,ce)[ce]=t,await $(this,_e)[_e]()}async restoreSession(){await $(this,Te)[Te]()}async hideSolanaSessionsFromSignClient(){let e=$(this,oe)[oe]?.client;if(!e?.session)return[];let t=$(this,Oe)[Oe]().filter((e=>!!e.namespaces?.solana));for(let s of t)await e.session.delete(s.topic,{code:0,message:""});return t}async unhideSolanaSessionsInSignClient(e){let t=$(this,oe)[oe]?.client;if(t?.session)for(let s of e)await t.session.set(s.topic,s)}setWalletEntry(e,t){$(this,ue)[ue]=e,$(this,he)[he]=t}constructor(){Object.defineProperty(this,fe,{value:Ie}),Object.defineProperty(this,me,{value:Re}),Object.defineProperty(this,ie,{writable:!0,value:void 0}),Object.defineProperty(this,ne,{writable:!0,value:void 0}),Object.defineProperty(this,ae,{writable:!0,value:void 0}),Object.defineProperty(this,re,{writable:!0,value:void 0}),Object.defineProperty(this,oe,{writable:!0,value:void 0}),Object.defineProperty(this,le,{writable:!0,value:void 0}),Object.defineProperty(this,ce,{writable:!0,value:void 0}),Object.defineProperty(this,de,{writable:!0,value:void 0}),Object.defineProperty(this,ue,{writable:!0,value:void 0}),Object.defineProperty(this,he,{writable:!0,value:void 0}),Object.defineProperty(this,pe,{writable:!0,value:void 0}),Object.defineProperty(this,ge,{writable:!0,value:void 0}),Object.defineProperty(this,ve,{writable:!0,value:void 0}),Object.defineProperty(this,ye,{writable:!0,value:void 0}),Object.defineProperty(this,be,{writable:!0,value:void 0}),Object.defineProperty(this,we,{writable:!0,value:void 0}),Object.defineProperty(this,Pe,{writable:!0,value:void 0}),Object.defineProperty(this,Se,{writable:!0,value:void 0}),Object.defineProperty(this,je,{writable:!0,value:void 0}),Object.defineProperty(this,_e,{writable:!0,value:void 0}),Object.defineProperty(this,Ce,{writable:!0,value:void 0}),Object.defineProperty(this,Oe,{writable:!0,value:void 0}),Object.defineProperty(this,We,{writable:!0,value:void 0}),Object.defineProperty(this,Te,{writable:!0,value:void 0}),Object.defineProperty(this,Ae,{writable:!0,value:void 0}),Object.defineProperty(this,Ee,{writable:!0,value:void 0}),Object.defineProperty(this,ke,{writable:!0,value:void 0}),Object.defineProperty(this,Me,{writable:!0,value:void 0}),Object.defineProperty(this,xe,{writable:!0,value:void 0}),$(this,ie)[ie]={},$(this,ne)[ne]="1.0.0",$(this,ae)[ae]="WalletConnect",$(this,re)[re]=I,$(this,oe)[oe]=null,$(this,le)[le]=[],$(this,ce)[ce]="",$(this,de)[de]="",$(this,pe)[pe]=new Map,$(this,ge)[ge]=(e,t)=>($(this,ie)[ie][e]?.push(t)||($(this,ie)[ie][e]=[t]),()=>$(this,me)[me](e,t)),$(this,ve)[ve]=e=>{$(this,ae)[ae]=$(this,oe)[oe]?.session?.peer?.metadata?.name||$(this,ue)[ue]?.name||"WalletConnect",$(this,re)[re]=$(this,oe)[oe]?.session?.peer?.metadata?.icons?.[0]||$(this,ue)[ue]?.image_url?.sm||$(this,re)[re],$(this,le)[le]=e.map((e=>new Q({address:e,publicKey:E.decode(e),label:$(this,ae)[ae],icon:$(this,re)[re]}))),$(this,fe)[fe]("change",{accounts:this.accounts})},$(this,ye)[ye]=()=>{$(this,le)[le]=[],$(this,fe)[fe]("change",{accounts:this.accounts})},$(this,be)[be]=async()=>(this.accounts.length||await $(this,Ce)[Ce](),{accounts:this.accounts}),$(this,we)[we]=async()=>{await $(this,Ee)[Ee](),$(this,fe)[fe]("change",{accounts:this.accounts})},$(this,Pe)[Pe]=async(...e)=>{let t=[];for(let{account:s,message:i}of e){let e=E.encode(i);try{let n=await $(this,ke)[ke]("solana_signMessage",{message:e,pubkey:s.address},Fe("solana:mainnet"));t.push({signedMessage:i,signature:Z(n)})}catch(n){if(n?.message?.includes("Missing or invalid")){let n=await $(this,ke)[ke]("solana:signMessage",{message:e,pubkey:s.address},Fe("solana:mainnet"));t.push({signedMessage:i,signature:Z(n)})}throw n}}return t},$(this,Se)[Se]=async(...e)=>{let t=[];for(let{account:s,chain:i,transaction:n,options:a}of e){let e=k.encode(n);try{let n=await $(this,ke)[ke]("solana_signAndSendTransaction",{transaction:e,pubkey:s.address,sendOptions:a},Fe(i));t.push({signature:Z(n)})}catch(n){if(n?.message?.includes("Missing or invalid")){let n=await $(this,ke)[ke]("solana:signAndSendTransaction",{transaction:e,pubkey:s.address,sendOptions:a},Fe(i));t.push({signature:Z(n)})}}}return t},$(this,je)[je]=async(...e)=>{let t=[];for(let{account:s,chain:i,transaction:n}of e){let e=k.encode(n);try{let n=await $(this,ke)[ke]("solana_signTransaction",{transaction:e,pubkey:s.address},Fe(i||"solana:mainnet"));t.push({signedTransaction:G(n)})}catch(n){if(n?.message?.includes("Missing or invalid")){let n=await $(this,ke)[ke]("solana:signTransaction",{transaction:e,pubkey:s.address},Fe(i||"solana:mainnet"));t.push({signedTransaction:G(n)})}}}return t},$(this,_e)[_e]=async()=>{if($(this,oe)[oe])return $(this,oe)[oe];if(!$(this,de)[de])throw Error("WalletConnect Cloud Project ID is required");return $(this,oe)[oe]=await q.init({projectId:$(this,de)[de],metadata:{name:$(this,ce)[ce],description:$(this,ce)[ce],url:window.location.origin,icons:[]},relayUrl:"wss://relay.walletconnect.com",telemetryEnabled:!1}),$(this,Ae)[Ae]("display_uri",$(this,Me)[Me]),$(this,Ae)[Ae]("session_delete",$(this,xe)[xe]),$(this,Ae)[Ae]("session_ping",(()=>{})),$(this,Ae)[Ae]("session_event",(()=>{})),$(this,Ae)[Ae]("session_update",(()=>{})),$(this,oe)[oe]},$(this,Ce)[Ce]=async()=>{if(!$(this,oe)[oe])throw Error("WalletConnectSolana: Failed to get or create session. Provider not initialized");if($(this,oe)[oe].session)return U.debug("Using existing Solana WalletConnect session"),$(this,oe)[oe].session;let e=["solana_signMessage","solana_signTransaction","solana_signAndSendTransaction"];U.debug("Creating new Solana WalletConnect session",{requestedChains:["mainnet","devnet"],requestedMethods:e.length});let t=await $(this,oe)[oe].connect({optionalNamespaces:{solana:{chains:[te,se],methods:e,events:[]}}});if(!t)throw Error("WalletConnectSolana: Failed to create new session");let s=qe(t);return U.debug("Solana WalletConnect session created",{accountsCount:s.length,peerName:t.peer?.metadata?.name}),$(this,ve)[ve](s),t},$(this,Oe)[Oe]=()=>$(this,oe)[oe]?.client?.session?.getAll?.()||[],$(this,We)[We]=(e,t)=>{e.session=t,e.namespaces=t.namespaces,e.createProviders?.()},$(this,Te)[Te]=async()=>{if(!$(this,oe)[oe])return;let e=$(this,oe)[oe].session;if(e?.namespaces?.solana){let t=qe(e);return U.debug("Restored Solana WalletConnect session",{accountsCount:t.length,peerName:e.peer?.metadata?.name}),void $(this,ve)[ve](t)}e&&($(this,oe)[oe].session=void 0);let t=$(this,Oe)[Oe]().find((e=>!!e.namespaces?.solana));if(!t)return void U.debug("No existing Solana WalletConnect session found");$(this,We)[We]($(this,oe)[oe],t);let s=qe(t);U.debug("Restored Solana WalletConnect session",{accountsCount:s.length,peerName:t.peer?.metadata?.name}),$(this,ve)[ve](s)},$(this,Ae)[Ae]=(e,t)=>{let s=$(this,pe)[pe].get(e);s&&($(this,oe)[oe]?.off(e,s),$(this,pe)[pe].delete(e)),$(this,oe)[oe]?.on(e,t),$(this,pe)[pe].set(e,t)},$(this,Ee)[Ee]=async()=>{U.debug("Destroying Solana WalletConnect session");try{if($(this,oe)[oe]?.session&&await($(this,oe)[oe]?.disconnect().catch((e=>U.error("Error disconnecting Solana WalletConnect session",e)))),$(this,oe)[oe]?.client){let e=$(this,oe)[oe].client.proposal.getAll();await Promise.allSettled(e.map((e=>$(this,oe)[oe]?.client.proposal.delete(e.id,{code:6e3,message:"User disconnected"}))));let t=$(this,oe)[oe].client.pairing.getAll();await Promise.allSettled(t.map((e=>$(this,oe)[oe]?.client.pairing.delete(e.topic,{code:6e3,message:"User disconnected"}))))}U.debug("Solana WalletConnect session destroyed"),$(this,ye)[ye]()}catch(e){U.error("Error destroying Solana WalletConnect session",e)}},$(this,ke)[ke]=async(e,t,s)=>{U.debug("Solana WalletConnect RPC request",{method:e,chainId:s});try{let i=await $(this,oe)[oe].request({method:e,params:t},s);return U.debug("Solana WalletConnect RPC response",{method:e,success:!0}),i}catch(t){if(U.error("Solana WalletConnect RPC error",t,{method:e,chainId:s}),t?.message?.includes("without any listeners")&&t.result)return U.debug("Ignoring WalletConnect listener warning, result available",{method:e}),t.result;if(t?.message?.includes("session topic does not exist in keychain"))throw Error("WalletConnectSolana: Wallet connection lost. Please reconnect.");throw t}},$(this,Me)[Me]=e=>{if(U.debug("Solana WalletConnect display_uri received",{isMobile:F,hasWalletEntry:!!$(this,ue)[ue]}),F&&$(this,ue)[ue]){let{redirect:s}=t(e,$(this,ue)[ue]),i=s.startsWith("http");return U.debug("Opening Solana mobile wallet deep link",{wallet:$(this,ue)[ue].name,linkType:i?"universal":"native"}),void(null==$(this,he)[he]||$(this,he)[he].call(this,{native:s,universal:s}))}U.debug("Displaying Solana WalletConnect QR code"),null==$(this,he)[he]||$(this,he)[he].call(this,{native:e,universal:void 0})},$(this,xe)[xe]=()=>{U.debug("Solana WalletConnect session deleted"),$(this,ye)[ye]()}}}function Ie(e,...t){$(this,ie)[ie][e]?.forEach((e=>e.apply(null,t)))}function Re(e,t){$(this,ie)[ie][e]=$(this,ie)[ie][e]?.filter((e=>t!==e))}function qe(e){return e.namespaces.solana.accounts.reduce(((e,t)=>{let s=t.split(":").at(-1);return e.includes(s)||e.push(s),e}),[])}function Fe(e){switch(e){case"solana:mainnet":return te;case"solana:devnet":return se;default:return e}}const Ne=()=>{let{user:t}=h(),{client:i,refreshSessionAndUser:n,initializeWalletProxy:a}=d(),r=c(),o=l();return{importWallet:e((({privateKey:e,additionalSigners:l})=>s({getAccessToken:()=>i.getAccessToken(),user:t,initializeWalletProxy:a,refreshSessionAndUser:n,emitPrivyEvent:r,appConfig:o},{privateKey:e,chainType:"solana",additionalSigners:l})),[t,i,n,a,r,o])}};var Ke={id:i,getSolanaRpcClient:W,createTransactionFromRelayQuote:async function({solanaClient:e,quote:t,source:s}){let i=t.steps[0]?.items?.[0];if(!i)throw Error("Invalid quote");let n=i.data.instructions.map((({keys:e,programId:t,data:s})=>({accounts:e.map((({pubkey:e,isSigner:t,isWritable:s})=>({address:e,role:t&&s?3:t&&!s?2:!t&&s?1:0}))),programAddress:t,data:new Uint8Array(Buffer.from(s,"hex"))}))),{value:a}=await e.rpc.getLatestBlockhash().send(),r=g(f({version:0}),(e=>m({address:s},e)),(e=>v(a,e)),(e=>y(n,e)),(e=>b(e)));return new Uint8Array(w().encode(r))},simulateTransaction:O,getAddressFromBuffer:A,fetchTransactionEstimatedFees:C},ze=()=>p(Ke);var Ve={id:r,createSiwsMemoTransaction:({address:e,nonce:t})=>{let s=M({memo:n({address:P(e),nonce:t})});return g(f({version:"legacy"}),(t=>S(P(e),t)),(e=>v({blockhash:j("GfVcyD5fWFJ6hRm8bsy7CoVPsLSoJhtJKRJYk8T2VVFN"),lastValidBlockHeight:0n},e)),(e=>y([s],e)),(e=>b(e)),(e=>k.encode(Uint8Array.from(w().encode(e)))))},getSignatureFromTransaction:(e,t)=>{let s=_().decode(e).signatures[t];if(!s)throw Error(`Missing transaction signature for address: ${t}`);return k.encode(s)}},De=()=>p(Ve);function Be(){let{create:e}=o();return{createWallet:async t=>{t&&"target"in t&&t&&(t=void 0);let{account:s}=await e({chainType:"solana",options:t});return{wallet:s}}}}function Je(){return{signMessage:async function(...e){let t=[];for(let s of e)t.push(await s.wallet.signMessage({...s,options:s.options}));return 1===e.length?t[0]:[...t]}}}function Le(){return{signTransaction:async function(...e){let t=[];for(let s of e)t.push(await s.wallet.signTransaction({...s,chain:s.chain||"solana:mainnet"}));return 1===e.length?t[0]:[...t]}}}function Ye(){return{signAndSendTransaction:async function(...e){let t=[];for(let s of e)t.push(await s.wallet.signAndSendTransaction({...s,chain:s.chain||"solana:mainnet"}));return 1===e.length?t[0]:[...t]}}}export{x as SolanaAdapterConnector,N as toSolanaWalletConnectors,Be as useCreateWallet,Ne as useImportWallet,Ye as useSignAndSendTransaction,Je as useSignMessage,Le as useSignTransaction,ze as useSolanaFundingPlugin,De as useSolanaLedgerPlugin};