UNPKG

@privy-io/react-auth

Version:

React client for the Privy Auth API

2 lines (1 loc) • 17.6 kB
import{useCallback as e}from"react";import{d as t,a as i}from"./usePrivy-BCcRF869.mjs";import{n,k as r}from"./events-context-ClaboIDc.mjs";import{aa as s}from"./internal-context-eGSwROSk.mjs";import{cg as o,ch as l,ab as h,bl as p,ci as m,bL as f,bt as v}from"./EmbeddedWalletConnectingScreen-D50stmJi.mjs";import{pipe as g,createTransactionMessage as y,setTransactionMessageFeePayerSigner as w,setTransactionMessageLifetimeUsingBlockhash as b,appendTransactionMessageInstructions as P,compileTransaction as _,getTransactionEncoder as j,address as C,setTransactionMessageFeePayer as O,blockhash as S,getTransactionDecoder as I}from"@solana/kit";import{S as T,f as A,g as k,s as E,b as W}from"./use-export-wallet-DTiEdSYz.mjs";export{a as useExportWallet,u as useFundWallet,d as useStandardWallets,c as useWallets}from"./use-export-wallet-DTiEdSYz.mjs";import{base58 as M,base64 as U}from"@scure/base";import{getAddMemoInstruction as x}from"@solana-program/memo";import{getWallets as q}from"@wallet-standard/app";import{UniversalProvider as R}from"@walletconnect/universal-provider";import"@privy-io/js-sdk-core";import"react/jsx-runtime";import"tinycolor2";import"ofetch";import"lucide-react";import"viem";import"fast-password-entropy";import"secure-password-utilities";import"secure-password-utilities/wordlists";import"@heroicons/react/24/outline/UserCircleIcon";import"styled-components";import"@heroicons/react/24/outline/ArrowLeftIcon";import"@heroicons/react/24/outline/ArrowRightIcon";import"@heroicons/react/24/outline/QuestionMarkCircleIcon";import"@heroicons/react/24/outline/XMarkIcon";import"@heroicons/react/20/solid/CheckIcon";import"@heroicons/react/24/outline/EnvelopeIcon";import"@heroicons/react/24/outline/PhoneIcon";import"react-device-detect";import"@heroicons/react/24/outline/ExclamationTriangleIcon";import"@heroicons/react/24/outline/WalletIcon";import"@heroicons/react/24/outline/ExclamationCircleIcon";import"@heroicons/react/24/outline/Square2StackIcon";import"zustand";import"@heroicons/react/24/outline";import"@tanstack/react-virtual";import"@heroicons/react/24/outline/CheckIcon";import"qrcode";import"viem/utils";import"eventemitter3";import"@walletconnect/ethereum-provider";import"@heroicons/react/24/outline/CreditCardIcon";import"@heroicons/react/24/outline/QrCodeIcon";import"@heroicons/react/24/solid/ArrowsRightLeftIcon";import"@heroicons/react/24/outline/InformationCircleIcon";import"@heroicons/react/24/outline/ClipboardDocumentCheckIcon";import"@heroicons/react/24/outline/ClipboardDocumentIcon";import"@heroicons/react/24/outline/ChevronDownIcon";import"@privy-io/ethereum";import"@heroicons/react/24/outline/CheckCircleIcon";import"@heroicons/react/24/outline/GlobeAltIcon";import"@headlessui/react";import"@privy-io/popup";import"@heroicons/react/24/solid/CheckCircleIcon";import"@heroicons/react/24/outline/FingerPrintIcon";import"@heroicons/react/24/outline/LockClosedIcon";import"@heroicons/react/24/outline/PencilSquareIcon";import"jose";import"@heroicons/react/24/outline/ArrowPathIcon";import"@heroicons/react/24/outline/EyeIcon";import"@heroicons/react/24/outline/EyeSlashIcon";import"@heroicons/react/24/outline/KeyIcon";import"@heroicons/react/24/outline/ArrowDownTrayIcon";import"@heroicons/react/24/outline/DocumentDuplicateIcon";import"@heroicons/react/24/solid/XCircleIcon";import"@heroicons/react/24/outline/ShieldCheckIcon";import"@privy-io/urls";import"./use-sign-with-user-signer-DaTvrd5T.mjs";import"./SignRequestScreen-D9o7VhNz.mjs";import"@solana-program/system";import"@solana-program/token";const D=e=>{let t,{get:i,on:n}=q(),r=e?.shouldAutoConnect??!0,s=new o(new Ee,r),a=new Map,c=[];function l(...e){e.forEach((e=>{!(e.features["privy:"]&&"isPrivyWallet"in e&&e.isPrivyWallet||a.has(e.name))&&e.chains.some((e=>"string"==typeof e&&e.startsWith("solana:")))&&a.set(e.name,e)})),c=Array.from(a.values()).map((e=>new o(e,r))).concat(s),t?.(c)}function h(...e){Array.from(a.values()).forEach((t=>!e.includes(t)&&a.delete(t.name))),c=Array.from(a.values()).map((e=>new o(e,r))).concat(s),t?.(c)}let d=[n("register",l),n("unregister",h)];return l(...i()),{_setOnConnectorsUpdated:e=>{t=e},onMount:()=>{d[0]||(d[0]=n("register",l)),d[1]||(d[1]=n("unregister",h))},onUnmount:()=>{let e=d.pop();for(;e;)e(),e=d.pop()},get:()=>c}};function F(e,t){if(!Object.prototype.hasOwnProperty.call(e,t))throw TypeError("attempted to use private field on non-instance");return e}var K=0;function L(e){return"__private_"+K+++"_"+e}var V=/*#__PURE__*/L("_address"),z=/*#__PURE__*/L("_publicKey"),B=/*#__PURE__*/L("_chains"),J=/*#__PURE__*/L("_features"),N=/*#__PURE__*/L("_label"),Y=/*#__PURE__*/L("_icon");class Q{get address(){return F(this,V)[V]}get publicKey(){return F(this,z)[z].slice()}get chains(){return F(this,B)[B].slice()}get features(){return F(this,J)[J].slice()}get label(){return F(this,N)[N]}get icon(){return F(this,Y)[Y]}constructor({address:e,publicKey:t,label:i,icon:n}){Object.defineProperty(this,V,{writable:!0,value:void 0}),Object.defineProperty(this,z,{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,N,{writable:!0,value:void 0}),Object.defineProperty(this,Y,{writable:!0,value:void 0}),F(this,V)[V]=e,F(this,z)[z]=t,F(this,B)[B]=T,F(this,J)[J]=["solana:signAndSendTransaction","solana:signTransaction","solana:signMessage"],F(this,N)[N]=i,F(this,Y)[Y]=n}}function G(e){if("string"==typeof e)return M.decode(e);if(e instanceof Uint8Array)return e;let t=e.signature;return"string"==typeof t?M.decode(t):t}function X(e){if("string"==typeof e){try{return M.decode(e)}catch{}return U.decode(e)}if(e instanceof Uint8Array)return e;let t=e.transaction;if("string"==typeof t){try{return M.decode(t)}catch{}return U.decode(t)}return t}function Z(e,t){if(!Object.prototype.hasOwnProperty.call(e,t))throw TypeError("attempted to use private field on non-instance");return e}var $=0;function H(e){return"__private_"+$+++"_"+e}let ee="solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp",te="solana:EtWTRABZaYq6iMfeYKouRu166VU2xqa1";var ie=/*#__PURE__*/H("_listeners"),ne=/*#__PURE__*/H("_version"),re=/*#__PURE__*/H("_name"),se=/*#__PURE__*/H("_icon"),oe=/*#__PURE__*/H("_provider"),ae=/*#__PURE__*/H("_accounts"),ce=/*#__PURE__*/H("_privyAppName"),le=/*#__PURE__*/H("_walletConnectCloudProjectId"),he=/*#__PURE__*/H("_walletEntry"),de=/*#__PURE__*/H("_onDisplayUriCallback"),ue=/*#__PURE__*/H("_providerEventListeners"),pe=/*#__PURE__*/H("_on"),me=/*#__PURE__*/H("_emit"),fe=/*#__PURE__*/H("_off"),ve=/*#__PURE__*/H("_connected"),ge=/*#__PURE__*/H("_disconnected"),ye=/*#__PURE__*/H("_connect"),we=/*#__PURE__*/H("_disconnect"),be=/*#__PURE__*/H("_signMessage"),Pe=/*#__PURE__*/H("_signAndSendTransaction"),_e=/*#__PURE__*/H("_signTransaction"),je=/*#__PURE__*/H("_getOrCreateProvider"),Ce=/*#__PURE__*/H("_getOrCreateSession"),Oe=/*#__PURE__*/H("_restoreSession"),Se=/*#__PURE__*/H("_addProviderEventListener"),Ie=/*#__PURE__*/H("_destroySession"),Te=/*#__PURE__*/H("_makeRpcRequest"),Ae=/*#__PURE__*/H("_onDisplayUri"),ke=/*#__PURE__*/H("_onSessionDelete");class Ee{get version(){return Z(this,ne)[ne]}get name(){return Z(this,re)[re]}get icon(){return Z(this,se)[se]}get chains(){return T.slice()}get features(){return{"standard:connect":{version:"1.0.0",connect:Z(this,ye)[ye]},"standard:disconnect":{version:"1.0.0",disconnect:Z(this,we)[we]},"standard:events":{version:"1.0.0",on:Z(this,pe)[pe]},"solana:signAndSendTransaction":{version:"1.0.0",supportedTransactionVersions:["legacy",0],signAndSendTransaction:Z(this,Pe)[Pe]},"solana:signTransaction":{version:"1.0.0",supportedTransactionVersions:["legacy",0],signTransaction:Z(this,_e)[_e]},"solana:signMessage":{version:"1.0.0",signMessage:Z(this,be)[be]}}}get accounts(){return Z(this,ae)[ae].slice()}get isWalletConnectSolana(){return!0}async initialize({walletConnectCloudProjectId:e,privyAppName:t}){Z(this,le)[le]=e,Z(this,ce)[ce]=t,await Z(this,je)[je](),await Z(this,Oe)[Oe]()}setWalletEntry(e,t){Z(this,he)[he]=e,Z(this,de)[de]=t}constructor(){Object.defineProperty(this,me,{value:We}),Object.defineProperty(this,fe,{value:Me}),Object.defineProperty(this,ie,{writable:!0,value:void 0}),Object.defineProperty(this,ne,{writable:!0,value:void 0}),Object.defineProperty(this,re,{writable:!0,value:void 0}),Object.defineProperty(this,se,{writable:!0,value:void 0}),Object.defineProperty(this,oe,{writable:!0,value:void 0}),Object.defineProperty(this,ae,{writable:!0,value:void 0}),Object.defineProperty(this,ce,{writable:!0,value:void 0}),Object.defineProperty(this,le,{writable:!0,value:void 0}),Object.defineProperty(this,he,{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,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,_e,{writable:!0,value:void 0}),Object.defineProperty(this,je,{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,Se,{writable:!0,value:void 0}),Object.defineProperty(this,Ie,{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,ke,{writable:!0,value:void 0}),Z(this,ie)[ie]={},Z(this,ne)[ne]="1.0.0",Z(this,re)[re]="WalletConnect",Z(this,se)[se]=l,Z(this,oe)[oe]=null,Z(this,ae)[ae]=[],Z(this,ce)[ce]="",Z(this,le)[le]="",Z(this,ue)[ue]=new Map,Z(this,pe)[pe]=(e,t)=>(Z(this,ie)[ie][e]?.push(t)||(Z(this,ie)[ie][e]=[t]),()=>Z(this,fe)[fe](e,t)),Z(this,ve)[ve]=e=>{Z(this,re)[re]=Z(this,oe)[oe]?.session?.peer?.metadata?.name||Z(this,he)[he]?.name||"WalletConnect",Z(this,se)[se]=Z(this,oe)[oe]?.session?.peer?.metadata?.icons?.[0]||Z(this,he)[he]?.image_url?.sm||Z(this,se)[se],Z(this,ae)[ae]=e.map((e=>new Q({address:e,publicKey:M.decode(e),label:Z(this,re)[re],icon:Z(this,se)[se]}))),Z(this,me)[me]("change",{accounts:this.accounts})},Z(this,ge)[ge]=()=>{Z(this,ae)[ae]=[],Z(this,me)[me]("change",{accounts:this.accounts})},Z(this,ye)[ye]=async()=>(this.accounts.length||await Z(this,Ce)[Ce](),{accounts:this.accounts}),Z(this,we)[we]=async()=>{await Z(this,Ie)[Ie](),Z(this,me)[me]("change",{accounts:this.accounts})},Z(this,be)[be]=async(...e)=>{let t=[];for(let{account:i,message:n}of e){let e=M.encode(n);try{let r=await Z(this,Te)[Te]("solana_signMessage",{message:e,pubkey:i.address},xe("solana:mainnet"));t.push({signedMessage:n,signature:G(r)})}catch(r){if(r?.message?.includes("Missing or invalid")){let r=await Z(this,Te)[Te]("solana:signMessage",{message:e,pubkey:i.address},xe("solana:mainnet"));t.push({signedMessage:n,signature:G(r)})}throw r}}return t},Z(this,Pe)[Pe]=async(...e)=>{let t=[];for(let{account:i,chain:n,transaction:r,options:s}of e){let e=U.encode(r);try{let r=await Z(this,Te)[Te]("solana_signAndSendTransaction",{transaction:e,pubkey:i.address,sendOptions:s},xe(n));t.push({signature:G(r)})}catch(r){if(r?.message?.includes("Missing or invalid")){let r=await Z(this,Te)[Te]("solana:signAndSendTransaction",{transaction:e,pubkey:i.address,sendOptions:s},xe(n));t.push({signature:G(r)})}}}return t},Z(this,_e)[_e]=async(...e)=>{let t=[];for(let{account:i,chain:n,transaction:r}of e){let e=U.encode(r);try{let r=await Z(this,Te)[Te]("solana_signTransaction",{transaction:e,pubkey:i.address},xe(n||"solana:mainnet"));t.push({signedTransaction:X(r)})}catch(r){if(r?.message?.includes("Missing or invalid")){let r=await Z(this,Te)[Te]("solana:signTransaction",{transaction:e,pubkey:i.address},xe(n||"solana:mainnet"));t.push({signedTransaction:X(r)})}}}return t},Z(this,je)[je]=async()=>{if(Z(this,oe)[oe])return Z(this,oe)[oe];if(!Z(this,le)[le])throw Error("WalletConnect Cloud Project ID is required");return Z(this,oe)[oe]=await R.init({projectId:Z(this,le)[le],metadata:{name:Z(this,ce)[ce],description:Z(this,ce)[ce],url:window.location.origin,icons:[]},relayUrl:"wss://relay.walletconnect.com",telemetryEnabled:!1}),Z(this,Se)[Se]("display_uri",Z(this,Ae)[Ae]),Z(this,Se)[Se]("session_delete",Z(this,ke)[ke]),Z(this,Se)[Se]("session_ping",(()=>{})),Z(this,Se)[Se]("session_event",(()=>{})),Z(this,Se)[Se]("session_update",(()=>{})),Z(this,oe)[oe]},Z(this,Ce)[Ce]=async()=>{if(!Z(this,oe)[oe])throw Error("WalletConnectSolana: Failed to get or create session. Provider not initialized");if(Z(this,oe)[oe].session)return Z(this,oe)[oe].session;let e=await Z(this,oe)[oe].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 Z(this,ve)[ve](Ue(e)),e},Z(this,Oe)[Oe]=async()=>{let e=Z(this,oe)[oe]?.session;if(e){if(!e.namespaces?.solana)return await(Z(this,oe)[oe]?.disconnect().catch((e=>console.error("WalletConnectSolana: Error disconnecting session",e)))),void(Z(this,oe)[oe].session=void 0);Z(this,ve)[ve](Ue(e))}},Z(this,Se)[Se]=(e,t)=>{let i=Z(this,ue)[ue].get(e);i&&(Z(this,oe)[oe]?.off(e,i),Z(this,ue)[ue].delete(e)),Z(this,oe)[oe]?.on(e,t),Z(this,ue)[ue].set(e,t)},Z(this,Ie)[Ie]=async()=>{try{if(Z(this,oe)[oe]?.session&&await(Z(this,oe)[oe]?.disconnect().catch((e=>console.error("WalletConnectSolana: Error disconnecting session",e)))),Z(this,oe)[oe]?.client){let e=Z(this,oe)[oe].client.proposal.getAll();await Promise.allSettled(e.map((e=>Z(this,oe)[oe]?.client.proposal.delete(e.id,{code:6e3,message:"User disconnected"}))));let t=Z(this,oe)[oe].client.pairing.getAll();await Promise.allSettled(t.map((e=>Z(this,oe)[oe]?.client.pairing.delete(e.topic,{code:6e3,message:"User disconnected"}))))}Z(this,ge)[ge]()}catch(e){console.error("WalletConnectSolana: Error destroying session",e)}},Z(this,Te)[Te]=async(e,t,i)=>{try{return await Z(this,oe)[oe].request({method:e,params:t},i)}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}},Z(this,Ae)[Ae]=e=>{null==Z(this,de)[de]||Z(this,de)[de].call(this,{native:e,universal:void 0})},Z(this,ke)[ke]=()=>{Z(this,ge)[ge]()}}}function We(e,...t){Z(this,ie)[ie][e]?.forEach((e=>e.apply(null,t)))}function Me(e,t){Z(this,ie)[ie][e]=Z(this,ie)[ie][e]?.filter((e=>t!==e))}function Ue(e){return e.namespaces.solana.accounts.reduce(((e,t)=>{let i=t.split(":").at(-1);return e.includes(i)||e.push(i),e}),[])}function xe(e){switch(e){case"solana:mainnet":return ee;case"solana:devnet":return te;default:return e}}const qe=()=>{let{user:i}=h(),{client:o,refreshSessionAndUser:a,initializeWalletProxy:c}=s(),l=n(),d=r();return{importWallet:e((({privateKey:e,additionalSigners:n})=>t({getAccessToken:()=>o.getAccessToken(),user:i,initializeWalletProxy:c,refreshSessionAndUser:a,emitPrivyEvent:l,appConfig:d},{privateKey:e,chainType:"solana",additionalSigners:n})),[i,o,a,c,l,d])}};var Re={id:p,getSolanaRpcClient:W,createTransactionFromRelayQuote:async function({solanaClient:e,quote:t,source:i}){let n=t.steps[0]?.items?.[0];if(!n)throw Error("Invalid quote");let r=n.data.instructions.map((({keys:e,programId:t,data:i})=>({accounts:e.map((({pubkey:e,isSigner:t,isWritable:i})=>({address:e,role:t&&i?3:t&&!i?2:!t&&i?1:0}))),programAddress:t,data:new Uint8Array(Buffer.from(i,"hex"))}))),{value:s}=await e.rpc.getLatestBlockhash().send(),o=g(y({version:0}),(e=>w({address:i},e)),(e=>b(s,e)),(e=>P(r,e)),(e=>_(e)));return new Uint8Array(j().encode(o))},simulateTransaction:E,getAddressFromBuffer:k,fetchTransactionEstimatedFees:A},De=()=>m(Re);var Fe={id:v,createSiwsMemoTransaction:({address:e,nonce:t})=>{let i=x({memo:f({address:C(e),nonce:t})});return g(y({version:"legacy"}),(t=>O(C(e),t)),(e=>b({blockhash:S("GfVcyD5fWFJ6hRm8bsy7CoVPsLSoJhtJKRJYk8T2VVFN"),lastValidBlockHeight:0n},e)),(e=>P([i],e)),(e=>_(e)),(e=>U.encode(Uint8Array.from(j().encode(e)))))},getSignatureFromTransaction:(e,t)=>{let i=I().decode(e).signatures[t];if(!i)throw Error(`Missing transaction signature for address: ${t}`);return U.encode(i)}},Ke=()=>m(Fe);function Le(){let{create:e}=i();return{createWallet:async t=>{t&&"target"in t&&t&&(t=void 0);let{account:i}=await e({chainType:"solana",options:t});return{wallet:i}}}}function Ve(){return{signMessage:async function(...e){let t=[];for(let i of e)t.push(await i.wallet.signMessage({...i,options:i.options}));return 1===e.length?t[0]:[...t]}}}function ze(){return{signTransaction:async function(...e){let t=[];for(let i of e)t.push(await i.wallet.signTransaction({...i,chain:i.chain||"solana:mainnet"}));return 1===e.length?t[0]:[...t]}}}function Be(){return{signAndSendTransaction:async function(...e){let t=[];for(let i of e)t.push(await i.wallet.signAndSendTransaction({...i,chain:i.chain||"solana:mainnet"}));return 1===e.length?t[0]:[...t]}}}export{o as SolanaAdapterConnector,D as toSolanaWalletConnectors,Le as useCreateWallet,qe as useImportWallet,Be as useSignAndSendTransaction,Ve as useSignMessage,ze as useSignTransaction,De as useSolanaFundingPlugin,Ke as useSolanaLedgerPlugin};