@privy-io/react-auth
Version:
React client for the Privy Auth API
2 lines (1 loc) • 18.7 kB
JavaScript
"use strict";var e=require("react"),t=require("./usePrivy-C-Rab7yP.js"),n=require("./context-Cg3IEi80.js"),s=require("./events-context-Di6--rDg.js"),i=require("./internal-context-BJv4f_bO.js"),a=require("./privy-context-CrM9_s6G.js"),r=require("./PrivyPluginContext-DsgaS6n9.js"),o=require("@solana/kit"),l=require("./useSolanaRpcClient-DuOWyD1p.js"),c=require("./useWallets-DX7GoSc-.js"),d=require("@scure/base"),u=require("@solana-program/memo"),h=require("./use-export-wallet-DknByx6S.js"),g=require("./use-export-wallet-_EIyxyle.js"),p=require("@wallet-standard/app"),v=require("@walletconnect/universal-provider"),f=require("react-device-detect");require("@privy-io/js-sdk-core"),require("./useWallets-dikDynAG.js"),require("viem"),require("react/jsx-runtime"),require("tinycolor2"),require("ofetch"),require("@privy-io/are-addresses-equal"),require("eventemitter3"),require("./use-sign-with-user-signer-Cu_6Bx7m.js"),require("viem/utils");function y(e,t){if(!Object.prototype.hasOwnProperty.call(e,t))throw TypeError("attempted to use private field on non-instance");return e}var b=0;function m(e){return"__private_"+b+++"_"+e}var w=/*#__PURE__*/m("_address"),S=/*#__PURE__*/m("_publicKey"),P=/*#__PURE__*/m("_chains"),C=/*#__PURE__*/m("_features"),_=/*#__PURE__*/m("_label"),T=/*#__PURE__*/m("_icon");class W{get address(){return y(this,w)[w]}get publicKey(){return y(this,S)[S].slice()}get chains(){return y(this,P)[P].slice()}get features(){return y(this,C)[C].slice()}get label(){return y(this,_)[_]}get icon(){return y(this,T)[T]}constructor({address:e,publicKey:t,label:n,icon:s}){Object.defineProperty(this,w,{writable:!0,value:void 0}),Object.defineProperty(this,S,{writable:!0,value:void 0}),Object.defineProperty(this,P,{writable:!0,value:void 0}),Object.defineProperty(this,C,{writable:!0,value:void 0}),Object.defineProperty(this,_,{writable:!0,value:void 0}),Object.defineProperty(this,T,{writable:!0,value:void 0}),y(this,w)[w]=e,y(this,S)[S]=t,y(this,P)[P]=c.SOLANA_CHAINS,y(this,C)[C]=["solana:signAndSendTransaction","solana:signTransaction","solana:signMessage"],y(this,_)[_]=n,y(this,T)[T]=s}}function j(e){if("string"==typeof e)return d.base58.decode(e);if(e instanceof Uint8Array)return e;let t=e.signature;return"string"==typeof t?d.base58.decode(t):t}function O(e){if("string"==typeof e){try{return d.base58.decode(e)}catch{}return d.base64.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 d.base58.decode(t)}catch{}return d.base64.decode(t)}return t}function A(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 L(e){return"__private_"+q+++"_"+e}let E="solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp",M="solana:EtWTRABZaYq6iMfeYKouRu166VU2xqa1";var x=/*#__PURE__*/L("_listeners"),I=/*#__PURE__*/L("_version"),k=/*#__PURE__*/L("_name"),U=/*#__PURE__*/L("_icon"),N=/*#__PURE__*/L("_provider"),R=/*#__PURE__*/L("_accounts"),F=/*#__PURE__*/L("_privyAppName"),D=/*#__PURE__*/L("_walletConnectCloudProjectId"),K=/*#__PURE__*/L("_walletEntry"),z=/*#__PURE__*/L("_onDisplayUriCallback"),B=/*#__PURE__*/L("_providerEventListeners"),V=/*#__PURE__*/L("_on"),G=/*#__PURE__*/L("_emit"),J=/*#__PURE__*/L("_off"),H=/*#__PURE__*/L("_connected"),Y=/*#__PURE__*/L("_disconnected"),Q=/*#__PURE__*/L("_connect"),Z=/*#__PURE__*/L("_disconnect"),$=/*#__PURE__*/L("_signMessage"),X=/*#__PURE__*/L("_signAndSendTransaction"),ee=/*#__PURE__*/L("_signTransaction"),te=/*#__PURE__*/L("_getOrCreateProvider"),ne=/*#__PURE__*/L("_getOrCreateSession"),se=/*#__PURE__*/L("_getAllSignClientSessions"),ie=/*#__PURE__*/L("_assignSessionToProvider"),ae=/*#__PURE__*/L("_restoreSession"),re=/*#__PURE__*/L("_addProviderEventListener"),oe=/*#__PURE__*/L("_destroySession"),le=/*#__PURE__*/L("_makeRpcRequest"),ce=/*#__PURE__*/L("_onDisplayUri"),de=/*#__PURE__*/L("_onSessionDelete");class ue{get version(){return A(this,I)[I]}get name(){return A(this,k)[k]}get icon(){return A(this,U)[U]}get chains(){return c.SOLANA_CHAINS.slice()}get features(){return{"standard:connect":{version:"1.0.0",connect:A(this,Q)[Q]},"standard:disconnect":{version:"1.0.0",disconnect:A(this,Z)[Z]},"standard:events":{version:"1.0.0",on:A(this,V)[V]},"solana:signAndSendTransaction":{version:"1.0.0",supportedTransactionVersions:["legacy",0],signAndSendTransaction:A(this,X)[X]},"solana:signTransaction":{version:"1.0.0",supportedTransactionVersions:["legacy",0],signTransaction:A(this,ee)[ee]},"solana:signMessage":{version:"1.0.0",signMessage:A(this,$)[$]}}}get accounts(){return A(this,R)[R].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}){g.connectorLogger.debug("Initializing WalletConnect Solana provider"),A(this,D)[D]=e,A(this,F)[F]=t,await A(this,te)[te]()}async restoreSession(){await A(this,ae)[ae]()}async hideSolanaSessionsFromSignClient(){let e=A(this,N)[N]?.client;if(!e?.session)return[];let t=A(this,se)[se]().filter((e=>!!e.namespaces?.solana));for(let n of t)await e.session.delete(n.topic,{code:0,message:""});return t}async unhideSolanaSessionsInSignClient(e){let t=A(this,N)[N]?.client;if(t?.session)for(let n of e)await t.session.set(n.topic,n)}setWalletEntry(e,t){A(this,K)[K]=e,A(this,z)[z]=t}constructor(){Object.defineProperty(this,G,{value:he}),Object.defineProperty(this,J,{value:ge}),Object.defineProperty(this,x,{writable:!0,value:void 0}),Object.defineProperty(this,I,{writable:!0,value:void 0}),Object.defineProperty(this,k,{writable:!0,value:void 0}),Object.defineProperty(this,U,{writable:!0,value:void 0}),Object.defineProperty(this,N,{writable:!0,value:void 0}),Object.defineProperty(this,R,{writable:!0,value:void 0}),Object.defineProperty(this,F,{writable:!0,value:void 0}),Object.defineProperty(this,D,{writable:!0,value:void 0}),Object.defineProperty(this,K,{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,V,{writable:!0,value:void 0}),Object.defineProperty(this,H,{writable:!0,value:void 0}),Object.defineProperty(this,Y,{writable:!0,value:void 0}),Object.defineProperty(this,Q,{writable:!0,value:void 0}),Object.defineProperty(this,Z,{writable:!0,value:void 0}),Object.defineProperty(this,$,{writable:!0,value:void 0}),Object.defineProperty(this,X,{writable:!0,value:void 0}),Object.defineProperty(this,ee,{writable:!0,value:void 0}),Object.defineProperty(this,te,{writable:!0,value:void 0}),Object.defineProperty(this,ne,{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,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}),A(this,x)[x]={},A(this,I)[I]="1.0.0",A(this,k)[k]="WalletConnect",A(this,U)[U]=g.WALLET_CONNECT_LOGO_DATA_URI,A(this,N)[N]=null,A(this,R)[R]=[],A(this,F)[F]="",A(this,D)[D]="",A(this,B)[B]=new Map,A(this,V)[V]=(e,t)=>(A(this,x)[x][e]?.push(t)||(A(this,x)[x][e]=[t]),()=>A(this,J)[J](e,t)),A(this,H)[H]=e=>{A(this,k)[k]=A(this,N)[N]?.session?.peer?.metadata?.name||A(this,K)[K]?.name||"WalletConnect",A(this,U)[U]=A(this,N)[N]?.session?.peer?.metadata?.icons?.[0]||A(this,K)[K]?.image_url?.sm||A(this,U)[U],A(this,R)[R]=e.map((e=>new W({address:e,publicKey:d.base58.decode(e),label:A(this,k)[k],icon:A(this,U)[U]}))),A(this,G)[G]("change",{accounts:this.accounts})},A(this,Y)[Y]=()=>{A(this,R)[R]=[],A(this,G)[G]("change",{accounts:this.accounts})},A(this,Q)[Q]=async()=>(this.accounts.length||await A(this,ne)[ne](),{accounts:this.accounts}),A(this,Z)[Z]=async()=>{await A(this,oe)[oe](),A(this,G)[G]("change",{accounts:this.accounts})},A(this,$)[$]=async(...e)=>{let t=[];for(let{account:n,message:s}of e){let e=d.base58.encode(s);try{let i=await A(this,le)[le]("solana_signMessage",{message:e,pubkey:n.address},ve("solana:mainnet"));t.push({signedMessage:s,signature:j(i)})}catch(i){if(i?.message?.includes("Missing or invalid")){let i=await A(this,le)[le]("solana:signMessage",{message:e,pubkey:n.address},ve("solana:mainnet"));t.push({signedMessage:s,signature:j(i)})}throw i}}return t},A(this,X)[X]=async(...e)=>{let t=[];for(let{account:n,chain:s,transaction:i,options:a}of e){let e=d.base64.encode(i);try{let i=await A(this,le)[le]("solana_signAndSendTransaction",{transaction:e,pubkey:n.address,sendOptions:a},ve(s));t.push({signature:j(i)})}catch(i){if(i?.message?.includes("Missing or invalid")){let i=await A(this,le)[le]("solana:signAndSendTransaction",{transaction:e,pubkey:n.address,sendOptions:a},ve(s));t.push({signature:j(i)})}}}return t},A(this,ee)[ee]=async(...e)=>{let t=[];for(let{account:n,chain:s,transaction:i}of e){let e=d.base64.encode(i);try{let i=await A(this,le)[le]("solana_signTransaction",{transaction:e,pubkey:n.address},ve(s||"solana:mainnet"));t.push({signedTransaction:O(i)})}catch(i){if(i?.message?.includes("Missing or invalid")){let i=await A(this,le)[le]("solana:signTransaction",{transaction:e,pubkey:n.address},ve(s||"solana:mainnet"));t.push({signedTransaction:O(i)})}}}return t},A(this,te)[te]=async()=>{if(A(this,N)[N])return A(this,N)[N];if(!A(this,D)[D])throw Error("WalletConnect Cloud Project ID is required");return A(this,N)[N]=await v.UniversalProvider.init({projectId:A(this,D)[D],metadata:{name:A(this,F)[F],description:A(this,F)[F],url:window.location.origin,icons:[]},relayUrl:"wss://relay.walletconnect.com",telemetryEnabled:!1}),A(this,re)[re]("display_uri",A(this,ce)[ce]),A(this,re)[re]("session_delete",A(this,de)[de]),A(this,re)[re]("session_ping",(()=>{})),A(this,re)[re]("session_event",(()=>{})),A(this,re)[re]("session_update",(()=>{})),A(this,N)[N]},A(this,ne)[ne]=async()=>{if(!A(this,N)[N])throw Error("WalletConnectSolana: Failed to get or create session. Provider not initialized");if(A(this,N)[N].session)return g.connectorLogger.debug("Using existing Solana WalletConnect session"),A(this,N)[N].session;let e=["solana_signMessage","solana_signTransaction","solana_signAndSendTransaction"];g.connectorLogger.debug("Creating new Solana WalletConnect session",{requestedChains:["mainnet","devnet"],requestedMethods:e.length});let t=await A(this,N)[N].connect({optionalNamespaces:{solana:{chains:[E,M],methods:e,events:[]}}});if(!t)throw Error("WalletConnectSolana: Failed to create new session");let n=pe(t);return g.connectorLogger.debug("Solana WalletConnect session created",{accountsCount:n.length,peerName:t.peer?.metadata?.name}),A(this,H)[H](n),t},A(this,se)[se]=()=>A(this,N)[N]?.client?.session?.getAll?.()||[],A(this,ie)[ie]=(e,t)=>{e.session=t,e.namespaces=t.namespaces,e.createProviders?.()},A(this,ae)[ae]=async()=>{if(!A(this,N)[N])return;let e=A(this,N)[N].session;if(e?.namespaces?.solana){let t=pe(e);return g.connectorLogger.debug("Restored Solana WalletConnect session",{accountsCount:t.length,peerName:e.peer?.metadata?.name}),void A(this,H)[H](t)}e&&(A(this,N)[N].session=void 0);let t=A(this,se)[se]().find((e=>!!e.namespaces?.solana));if(!t)return void g.connectorLogger.debug("No existing Solana WalletConnect session found");A(this,ie)[ie](A(this,N)[N],t);let n=pe(t);g.connectorLogger.debug("Restored Solana WalletConnect session",{accountsCount:n.length,peerName:t.peer?.metadata?.name}),A(this,H)[H](n)},A(this,re)[re]=(e,t)=>{let n=A(this,B)[B].get(e);n&&(A(this,N)[N]?.off(e,n),A(this,B)[B].delete(e)),A(this,N)[N]?.on(e,t),A(this,B)[B].set(e,t)},A(this,oe)[oe]=async()=>{g.connectorLogger.debug("Destroying Solana WalletConnect session");try{if(A(this,N)[N]?.session&&await(A(this,N)[N]?.disconnect().catch((e=>g.connectorLogger.error("Error disconnecting Solana WalletConnect session",e)))),A(this,N)[N]?.client){let e=A(this,N)[N].client.proposal.getAll();await Promise.allSettled(e.map((e=>A(this,N)[N]?.client.proposal.delete(e.id,{code:6e3,message:"User disconnected"}))));let t=A(this,N)[N].client.pairing.getAll();await Promise.allSettled(t.map((e=>A(this,N)[N]?.client.pairing.delete(e.topic,{code:6e3,message:"User disconnected"}))))}g.connectorLogger.debug("Solana WalletConnect session destroyed"),A(this,Y)[Y]()}catch(e){g.connectorLogger.error("Error destroying Solana WalletConnect session",e)}},A(this,le)[le]=async(e,t,n)=>{g.connectorLogger.debug("Solana WalletConnect RPC request",{method:e,chainId:n});try{let s=await A(this,N)[N].request({method:e,params:t},n);return g.connectorLogger.debug("Solana WalletConnect RPC response",{method:e,success:!0}),s}catch(t){if(g.connectorLogger.error("Solana WalletConnect RPC error",t,{method:e,chainId:n}),t?.message?.includes("without any listeners")&&t.result)return g.connectorLogger.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}},A(this,ce)[ce]=e=>{if(g.connectorLogger.debug("Solana WalletConnect display_uri received",{isMobile:f.isMobile,hasWalletEntry:!!A(this,K)[K]}),f.isMobile&&A(this,K)[K]){let{redirect:n}=t.buildTargetUrl(e,A(this,K)[K]),s=n.startsWith("http");return g.connectorLogger.debug("Opening Solana mobile wallet deep link",{wallet:A(this,K)[K].name,linkType:s?"universal":"native"}),void(null==A(this,z)[z]||A(this,z)[z].call(this,{native:n,universal:n}))}g.connectorLogger.debug("Displaying Solana WalletConnect QR code"),null==A(this,z)[z]||A(this,z)[z].call(this,{native:e,universal:void 0})},A(this,de)[de]=()=>{g.connectorLogger.debug("Solana WalletConnect session deleted"),A(this,Y)[Y]()}}}function he(e,...t){A(this,x)[x][e]?.forEach((e=>e.apply(null,t)))}function ge(e,t){A(this,x)[x][e]=A(this,x)[x][e]?.filter((e=>t!==e))}function pe(e){return e.namespaces.solana.accounts.reduce(((e,t)=>{let n=t.split(":").at(-1);return e.includes(n)||e.push(n),e}),[])}function ve(e){switch(e){case"solana:mainnet":return E;case"solana:devnet":return M;default:return e}}var fe={id:t.SOLANA_FUNDING_PLUGIN_ID,getSolanaRpcClient:l.getSolanaRpcClient,createTransactionFromRelayQuote:async function({solanaClient:e,quote:t,source:n}){let s=t.steps[0]?.items?.[0];if(!s)throw Error("Invalid quote");let i=s.data.instructions.map((({keys:e,programId:t,data:n})=>({accounts:e.map((({pubkey:e,isSigner:t,isWritable:n})=>({address:e,role:t&&n?3:t&&!n?2:!t&&n?1:0}))),programAddress:t,data:new Uint8Array(Buffer.from(n,"hex"))}))),{value:a}=await e.rpc.getLatestBlockhash().send(),r=o.pipe(o.createTransactionMessage({version:0}),(e=>o.setTransactionMessageFeePayerSigner({address:n},e)),(e=>o.setTransactionMessageLifetimeUsingBlockhash(a,e)),(e=>o.appendTransactionMessageInstructions(i,e)),(e=>o.compileTransaction(e)));return new Uint8Array(o.getTransactionEncoder().encode(r))},simulateTransaction:l.simulateTransaction,getAddressFromBuffer:c.getAddressFromBuffer,fetchTransactionEstimatedFees:l.fetchTransactionEstimatedFees};var ye={id:t.SOLANA_LEDGER_PLUGIN_ID,createSiwsMemoTransaction:({address:e,nonce:n})=>{let s=u.getAddMemoInstruction({memo:t.prepareSiwsMessageWithNonce({address:o.address(e),nonce:n})});return o.pipe(o.createTransactionMessage({version:"legacy"}),(t=>o.setTransactionMessageFeePayer(o.address(e),t)),(e=>o.setTransactionMessageLifetimeUsingBlockhash({blockhash:o.blockhash("GfVcyD5fWFJ6hRm8bsy7CoVPsLSoJhtJKRJYk8T2VVFN"),lastValidBlockHeight:0n},e)),(e=>o.appendTransactionMessageInstructions([s],e)),(e=>o.compileTransaction(e)),(e=>d.base64.encode(Uint8Array.from(o.getTransactionEncoder().encode(e)))))},getSignatureFromTransaction:(e,t)=>{let n=o.getTransactionDecoder().decode(e).signatures[t];if(!n)throw Error(`Missing transaction signature for address: ${t}`);return d.base64.encode(n)}};exports.useStandardWallets=c.useSolanaStandardWallets,exports.useWallets=c.useWallets,exports.useExportWallet=h.useExportWallet,exports.useFundWallet=h.useFundWallet,exports.SolanaAdapterConnector=g.SolanaWalletConnector,exports.toSolanaWalletConnectors=e=>{let t,{get:n,on:s}=p.getWallets(),i=e?.shouldAutoConnect??!0,a=new g.SolanaWalletConnector(new ue,i),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 g.SolanaWalletConnector(e,i))).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 g.SolanaWalletConnector(e,i))).concat(a),t?.(o)}let d=[s("register",l),s("unregister",c)];return l(...n()),{_setOnConnectorsUpdated:e=>{t=e},onMount:()=>{d[0]||(d[0]=s("register",l)),d[1]||(d[1]=s("unregister",c))},onUnmount:()=>{let e=d.pop();for(;e;)e(),e=d.pop()},get:()=>o}},exports.useCreateWallet=function(){let{create:e}=t.useCreateWalletInternal();return{createWallet:async t=>{t&&"target"in t&&t&&(t=void 0);let{account:n}=await e({chainType:"solana",options:t});return{wallet:n}}}},exports.useImportWallet=()=>{let{user:r}=a.usePrivyContext(),{client:o,refreshSessionAndUser:l,initializeWalletProxy:c}=i.usePrivyInternal(),d=s.useEmitPrivyEvent(),u=n.useAppConfig();return{importWallet:e.useCallback((({privateKey:e,additionalSigners:n})=>t.importWallet({getAccessToken:()=>o.getAccessToken(),user:r,initializeWalletProxy:c,refreshSessionAndUser:l,emitPrivyEvent:d,appConfig:u},{privateKey:e,chainType:"solana",additionalSigners:n})),[r,o,l,c,d,u])}},exports.useSignAndSendTransaction=function(){return{signAndSendTransaction:async function(...e){let t=[];for(let n of e)t.push(await n.wallet.signAndSendTransaction({...n,chain:n.chain||"solana:mainnet"}));return 1===e.length?t[0]:[...t]}}},exports.useSignMessage=function(){return{signMessage:async function(...e){let t=[];for(let n of e)t.push(await n.wallet.signMessage({...n,options:n.options}));return 1===e.length?t[0]:[...t]}}},exports.useSignTransaction=function(){return{signTransaction:async function(...e){let t=[];for(let n of e)t.push(await n.wallet.signTransaction({...n,chain:n.chain||"solana:mainnet"}));return 1===e.length?t[0]:[...t]}}},exports.useSolanaFundingPlugin=()=>r.useRegisterPlugin(fe),exports.useSolanaLedgerPlugin=()=>r.useRegisterPlugin(ye);