UNPKG

@privy-io/react-auth

Version:

React client for the Privy Auth API

2 lines (1 loc) • 15.9 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-6nkpbErN.mjs";import{u as l}from"./context-WTldtXS8.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"./get-is-unified-wallet-Boa8DYrQ.mjs";import{a as p}from"./PrivyPluginContext-2QN2dVUw.mjs";import{pipe as f,createTransactionMessage as m,setTransactionMessageFeePayerSigner as v,setTransactionMessageLifetimeUsingBlockhash as g,appendTransactionMessageInstructions as y,compileTransaction as w,getTransactionEncoder as b,address as P,setTransactionMessageFeePayer as j,blockhash as _,getTransactionDecoder as O}from"@solana/kit";import{f as S,s as T,g as A}from"./useSolanaRpcClient-BUWOblv_.mjs";import{S as W,g as C}from"./useWallets-C_dCo2_Q.mjs";export{a as useStandardWallets,u as useWallets}from"./useWallets-C_dCo2_Q.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-DQde4t0V.mjs";import{S as x,W as U}from"./use-export-wallet-CV4p7L0b.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-CR0z5IIt.mjs";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 K=e=>{let t,{get:s,on:i}=R(),n=e?.shouldAutoConnect??!0,a=new x(new ke,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 I(e,t){if(!Object.prototype.hasOwnProperty.call(e,t))throw TypeError("attempted to use private field on non-instance");return e}var V=0;function z(e){return"__private_"+V+++"_"+e}var B=/*#__PURE__*/z("_address"),D=/*#__PURE__*/z("_publicKey"),J=/*#__PURE__*/z("_chains"),N=/*#__PURE__*/z("_features"),L=/*#__PURE__*/z("_label"),Y=/*#__PURE__*/z("_icon");class H{get address(){return I(this,B)[B]}get publicKey(){return I(this,D)[D].slice()}get chains(){return I(this,J)[J].slice()}get features(){return I(this,N)[N].slice()}get label(){return I(this,L)[L]}get icon(){return I(this,Y)[Y]}constructor({address:e,publicKey:t,label:s,icon:i}){Object.defineProperty(this,B,{writable:!0,value:void 0}),Object.defineProperty(this,D,{writable:!0,value:void 0}),Object.defineProperty(this,J,{writable:!0,value:void 0}),Object.defineProperty(this,N,{writable:!0,value:void 0}),Object.defineProperty(this,L,{writable:!0,value:void 0}),Object.defineProperty(this,Y,{writable:!0,value:void 0}),I(this,B)[B]=e,I(this,D)[D]=t,I(this,J)[J]=W,I(this,N)[N]=["solana:signAndSendTransaction","solana:signTransaction","solana:signMessage"],I(this,L)[L]=s,I(this,Y)[Y]=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 $(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 G(e,t){if(!Object.prototype.hasOwnProperty.call(e,t))throw TypeError("attempted to use private field on non-instance");return e}var Q=0;function X(e){return"__private_"+Q+++"_"+e}let ee="solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp",te="solana:EtWTRABZaYq6iMfeYKouRu166VU2xqa1";var se=/*#__PURE__*/X("_listeners"),ie=/*#__PURE__*/X("_version"),ne=/*#__PURE__*/X("_name"),ae=/*#__PURE__*/X("_icon"),re=/*#__PURE__*/X("_provider"),oe=/*#__PURE__*/X("_accounts"),le=/*#__PURE__*/X("_privyAppName"),ce=/*#__PURE__*/X("_walletConnectCloudProjectId"),de=/*#__PURE__*/X("_walletEntry"),he=/*#__PURE__*/X("_onDisplayUriCallback"),ue=/*#__PURE__*/X("_providerEventListeners"),pe=/*#__PURE__*/X("_on"),fe=/*#__PURE__*/X("_emit"),me=/*#__PURE__*/X("_off"),ve=/*#__PURE__*/X("_connected"),ge=/*#__PURE__*/X("_disconnected"),ye=/*#__PURE__*/X("_connect"),we=/*#__PURE__*/X("_disconnect"),be=/*#__PURE__*/X("_signMessage"),Pe=/*#__PURE__*/X("_signAndSendTransaction"),je=/*#__PURE__*/X("_signTransaction"),_e=/*#__PURE__*/X("_getOrCreateProvider"),Oe=/*#__PURE__*/X("_getOrCreateSession"),Se=/*#__PURE__*/X("_restoreSession"),Te=/*#__PURE__*/X("_addProviderEventListener"),Ae=/*#__PURE__*/X("_destroySession"),We=/*#__PURE__*/X("_makeRpcRequest"),Ce=/*#__PURE__*/X("_onDisplayUri"),Ee=/*#__PURE__*/X("_onSessionDelete");class ke{get version(){return G(this,ie)[ie]}get name(){return G(this,ne)[ne]}get icon(){return G(this,ae)[ae]}get chains(){return W.slice()}get features(){return{"standard:connect":{version:"1.0.0",connect:G(this,ye)[ye]},"standard:disconnect":{version:"1.0.0",disconnect:G(this,we)[we]},"standard:events":{version:"1.0.0",on:G(this,pe)[pe]},"solana:signAndSendTransaction":{version:"1.0.0",supportedTransactionVersions:["legacy",0],signAndSendTransaction:G(this,Pe)[Pe]},"solana:signTransaction":{version:"1.0.0",supportedTransactionVersions:["legacy",0],signTransaction:G(this,je)[je]},"solana:signMessage":{version:"1.0.0",signMessage:G(this,be)[be]}}}get accounts(){return G(this,oe)[oe].slice()}get isWalletConnectSolana(){return!0}async initialize({walletConnectCloudProjectId:e,privyAppName:t}){G(this,ce)[ce]=e,G(this,le)[le]=t,await G(this,_e)[_e](),await G(this,Se)[Se]()}setWalletEntry(e,t){G(this,de)[de]=e,G(this,he)[he]=t}constructor(){Object.defineProperty(this,fe,{value:Me}),Object.defineProperty(this,me,{value:xe}),Object.defineProperty(this,se,{writable:!0,value:void 0}),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,he,{writable:!0,value:void 0}),Object.defineProperty(this,ue,{writable:!0,value:void 0}),Object.defineProperty(this,pe,{writable:!0,value:void 0}),Object.defineProperty(this,ve,{writable:!0,value:void 0}),Object.defineProperty(this,ge,{writable:!0,value:void 0}),Object.defineProperty(this,ye,{writable:!0,value:void 0}),Object.defineProperty(this,we,{writable:!0,value:void 0}),Object.defineProperty(this,be,{writable:!0,value:void 0}),Object.defineProperty(this,Pe,{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,Oe,{writable:!0,value:void 0}),Object.defineProperty(this,Se,{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,We,{writable:!0,value:void 0}),Object.defineProperty(this,Ce,{writable:!0,value:void 0}),Object.defineProperty(this,Ee,{writable:!0,value:void 0}),G(this,se)[se]={},G(this,ie)[ie]="1.0.0",G(this,ne)[ne]="WalletConnect",G(this,ae)[ae]=U,G(this,re)[re]=null,G(this,oe)[oe]=[],G(this,le)[le]="",G(this,ce)[ce]="",G(this,ue)[ue]=new Map,G(this,pe)[pe]=(e,t)=>(G(this,se)[se][e]?.push(t)||(G(this,se)[se][e]=[t]),()=>G(this,me)[me](e,t)),G(this,ve)[ve]=e=>{G(this,ne)[ne]=G(this,re)[re]?.session?.peer?.metadata?.name||G(this,de)[de]?.name||"WalletConnect",G(this,ae)[ae]=G(this,re)[re]?.session?.peer?.metadata?.icons?.[0]||G(this,de)[de]?.image_url?.sm||G(this,ae)[ae],G(this,oe)[oe]=e.map((e=>new H({address:e,publicKey:E.decode(e),label:G(this,ne)[ne],icon:G(this,ae)[ae]}))),G(this,fe)[fe]("change",{accounts:this.accounts})},G(this,ge)[ge]=()=>{G(this,oe)[oe]=[],G(this,fe)[fe]("change",{accounts:this.accounts})},G(this,ye)[ye]=async()=>(this.accounts.length||await G(this,Oe)[Oe](),{accounts:this.accounts}),G(this,we)[we]=async()=>{await G(this,Ae)[Ae](),G(this,fe)[fe]("change",{accounts:this.accounts})},G(this,be)[be]=async(...e)=>{let t=[];for(let{account:s,message:i}of e){let e=E.encode(i);try{let n=await G(this,We)[We]("solana_signMessage",{message:e,pubkey:s.address},Re("solana:mainnet"));t.push({signedMessage:i,signature:Z(n)})}catch(n){if(n?.message?.includes("Missing or invalid")){let n=await G(this,We)[We]("solana:signMessage",{message:e,pubkey:s.address},Re("solana:mainnet"));t.push({signedMessage:i,signature:Z(n)})}throw n}}return t},G(this,Pe)[Pe]=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 G(this,We)[We]("solana_signAndSendTransaction",{transaction:e,pubkey:s.address,sendOptions:a},Re(i));t.push({signature:Z(n)})}catch(n){if(n?.message?.includes("Missing or invalid")){let n=await G(this,We)[We]("solana:signAndSendTransaction",{transaction:e,pubkey:s.address,sendOptions:a},Re(i));t.push({signature:Z(n)})}}}return t},G(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 G(this,We)[We]("solana_signTransaction",{transaction:e,pubkey:s.address},Re(i||"solana:mainnet"));t.push({signedTransaction:$(n)})}catch(n){if(n?.message?.includes("Missing or invalid")){let n=await G(this,We)[We]("solana:signTransaction",{transaction:e,pubkey:s.address},Re(i||"solana:mainnet"));t.push({signedTransaction:$(n)})}}}return t},G(this,_e)[_e]=async()=>{if(G(this,re)[re])return G(this,re)[re];if(!G(this,ce)[ce])throw Error("WalletConnect Cloud Project ID is required");return G(this,re)[re]=await q.init({projectId:G(this,ce)[ce],metadata:{name:G(this,le)[le],description:G(this,le)[le],url:window.location.origin,icons:[]},relayUrl:"wss://relay.walletconnect.com",telemetryEnabled:!1}),G(this,Te)[Te]("display_uri",G(this,Ce)[Ce]),G(this,Te)[Te]("session_delete",G(this,Ee)[Ee]),G(this,Te)[Te]("session_ping",(()=>{})),G(this,Te)[Te]("session_event",(()=>{})),G(this,Te)[Te]("session_update",(()=>{})),G(this,re)[re]},G(this,Oe)[Oe]=async()=>{if(!G(this,re)[re])throw Error("WalletConnectSolana: Failed to get or create session. Provider not initialized");if(G(this,re)[re].session)return G(this,re)[re].session;let e=await G(this,re)[re].connect({optionalNamespaces:{solana:{chains:[ee,te],methods:["solana_signMessage","solana_signTransaction","solana_signAndSendTransaction"],events:[]}}});if(!e)throw Error("WalletConnectSolana: Failed to create new session");return G(this,ve)[ve](Ue(e)),e},G(this,Se)[Se]=async()=>{let e=G(this,re)[re]?.session;if(e){if(!e.namespaces?.solana)return await(G(this,re)[re]?.disconnect().catch((e=>console.error("WalletConnectSolana: Error disconnecting session",e)))),void(G(this,re)[re].session=void 0);G(this,ve)[ve](Ue(e))}},G(this,Te)[Te]=(e,t)=>{let s=G(this,ue)[ue].get(e);s&&(G(this,re)[re]?.off(e,s),G(this,ue)[ue].delete(e)),G(this,re)[re]?.on(e,t),G(this,ue)[ue].set(e,t)},G(this,Ae)[Ae]=async()=>{try{if(G(this,re)[re]?.session&&await(G(this,re)[re]?.disconnect().catch((e=>console.error("WalletConnectSolana: Error disconnecting session",e)))),G(this,re)[re]?.client){let e=G(this,re)[re].client.proposal.getAll();await Promise.allSettled(e.map((e=>G(this,re)[re]?.client.proposal.delete(e.id,{code:6e3,message:"User disconnected"}))));let t=G(this,re)[re].client.pairing.getAll();await Promise.allSettled(t.map((e=>G(this,re)[re]?.client.pairing.delete(e.topic,{code:6e3,message:"User disconnected"}))))}G(this,ge)[ge]()}catch(e){console.error("WalletConnectSolana: Error destroying session",e)}},G(this,We)[We]=async(e,t,s)=>{try{return await G(this,re)[re].request({method:e,params:t},s)}catch(t){if(console.error(`WalletConnectSolana: RPC Error - ${e}:`,t),t?.message?.includes("without any listeners")&&t.result)return t.result;if(t?.message?.includes("session topic does not exist in keychain"))throw Error("WalletConnectSolana: Wallet connection lost. Please reconnect.");throw t}},G(this,Ce)[Ce]=e=>{if(F&&G(this,de)[de]){let{redirect:s}=t(e,G(this,de)[de]);null==G(this,he)[he]||G(this,he)[he].call(this,{native:s,universal:s})}else null==G(this,he)[he]||G(this,he)[he].call(this,{native:e,universal:void 0})},G(this,Ee)[Ee]=()=>{G(this,ge)[ge]()}}}function Me(e,...t){G(this,se)[se][e]?.forEach((e=>e.apply(null,t)))}function xe(e,t){G(this,se)[se][e]=G(this,se)[se][e]?.filter((e=>t!==e))}function Ue(e){return e.namespaces.solana.accounts.reduce(((e,t)=>{let s=t.split(":").at(-1);return e.includes(s)||e.push(s),e}),[])}function Re(e){switch(e){case"solana:mainnet":return ee;case"solana:devnet":return te;default:return e}}const qe=()=>{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 Fe={id:i,getSolanaRpcClient:A,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=f(m({version:0}),(e=>v({address:s},e)),(e=>g(a,e)),(e=>y(n,e)),(e=>w(e)));return new Uint8Array(b().encode(r))},simulateTransaction:T,getAddressFromBuffer:C,fetchTransactionEstimatedFees:S},Ke=()=>p(Fe);var Ie={id:r,createSiwsMemoTransaction:({address:e,nonce:t})=>{let s=M({memo:n({address:P(e),nonce:t})});return f(m({version:"legacy"}),(t=>j(P(e),t)),(e=>g({blockhash:_("GfVcyD5fWFJ6hRm8bsy7CoVPsLSoJhtJKRJYk8T2VVFN"),lastValidBlockHeight:0n},e)),(e=>y([s],e)),(e=>w(e)),(e=>k.encode(Uint8Array.from(b().encode(e)))))},getSignatureFromTransaction:(e,t)=>{let s=O().decode(e).signatures[t];if(!s)throw Error(`Missing transaction signature for address: ${t}`);return k.encode(s)}},Ve=()=>p(Ie);function ze(){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 Be(){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 De(){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 Je(){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,K as toSolanaWalletConnectors,ze as useCreateWallet,qe as useImportWallet,Je as useSignAndSendTransaction,Be as useSignMessage,De as useSignTransaction,Ke as useSolanaFundingPlugin,Ve as useSolanaLedgerPlugin};