UNPKG

@privy-io/react-auth

Version:

React client for the Privy Auth API

2 lines (1 loc) • 16.2 kB
"use strict";var e=require("react"),t=require("./usePrivy-cfS6o4tX.js"),s=require("./context-D-ZJYjUg.js"),i=require("./events-context-Di6--rDg.js"),n=require("./internal-context-BJv4f_bO.js"),a=require("./get-is-unified-wallet-UpdjHxOV.js"),r=require("./PrivyPluginContext-DsgaS6n9.js"),o=require("@solana/kit"),l=require("./useSolanaRpcClient-PnNtmWdo.js"),c=require("./useWallets-DeTGSqF_.js"),u=require("@scure/base"),d=require("@solana-program/memo"),h=require("./use-export-wallet-Dt1qheK5.js"),p=require("./use-export-wallet-B5ujV5Nk.js"),g=require("@wallet-standard/app"),v=require("@walletconnect/universal-provider"),f=require("react-device-detect");require("@privy-io/js-sdk-core"),require("./useWallets-CKAypPZB.js"),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 w(e){return"__private_"+b+++"_"+e}var m=/*#__PURE__*/w("_address"),P=/*#__PURE__*/w("_publicKey"),_=/*#__PURE__*/w("_chains"),T=/*#__PURE__*/w("_features"),S=/*#__PURE__*/w("_label"),j=/*#__PURE__*/w("_icon");class O{get address(){return y(this,m)[m]}get publicKey(){return y(this,P)[P].slice()}get chains(){return y(this,_)[_].slice()}get features(){return y(this,T)[T].slice()}get label(){return y(this,S)[S]}get icon(){return y(this,j)[j]}constructor({address:e,publicKey:t,label:s,icon:i}){Object.defineProperty(this,m,{writable:!0,value:void 0}),Object.defineProperty(this,P,{writable:!0,value:void 0}),Object.defineProperty(this,_,{writable:!0,value:void 0}),Object.defineProperty(this,T,{writable:!0,value:void 0}),Object.defineProperty(this,S,{writable:!0,value:void 0}),Object.defineProperty(this,j,{writable:!0,value:void 0}),y(this,m)[m]=e,y(this,P)[P]=t,y(this,_)[_]=c.SOLANA_CHAINS,y(this,T)[T]=["solana:signAndSendTransaction","solana:signTransaction","solana:signMessage"],y(this,S)[S]=s,y(this,j)[j]=i}}function A(e){if("string"==typeof e)return u.base58.decode(e);if(e instanceof Uint8Array)return e;let t=e.signature;return"string"==typeof t?u.base58.decode(t):t}function W(e){if("string"==typeof e){try{return u.base58.decode(e)}catch{}return u.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 u.base58.decode(t)}catch{}return u.base64.decode(t)}return t}function C(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 E(e){return"__private_"+q+++"_"+e}let M="solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp",x="solana:EtWTRABZaYq6iMfeYKouRu166VU2xqa1";var k=/*#__PURE__*/E("_listeners"),U=/*#__PURE__*/E("_version"),I=/*#__PURE__*/E("_name"),N=/*#__PURE__*/E("_icon"),F=/*#__PURE__*/E("_provider"),L=/*#__PURE__*/E("_accounts"),R=/*#__PURE__*/E("_privyAppName"),D=/*#__PURE__*/E("_walletConnectCloudProjectId"),K=/*#__PURE__*/E("_walletEntry"),B=/*#__PURE__*/E("_onDisplayUriCallback"),V=/*#__PURE__*/E("_providerEventListeners"),G=/*#__PURE__*/E("_on"),z=/*#__PURE__*/E("_emit"),J=/*#__PURE__*/E("_off"),H=/*#__PURE__*/E("_connected"),Y=/*#__PURE__*/E("_disconnected"),Z=/*#__PURE__*/E("_connect"),$=/*#__PURE__*/E("_disconnect"),Q=/*#__PURE__*/E("_signMessage"),X=/*#__PURE__*/E("_signAndSendTransaction"),ee=/*#__PURE__*/E("_signTransaction"),te=/*#__PURE__*/E("_getOrCreateProvider"),se=/*#__PURE__*/E("_getOrCreateSession"),ie=/*#__PURE__*/E("_restoreSession"),ne=/*#__PURE__*/E("_addProviderEventListener"),ae=/*#__PURE__*/E("_destroySession"),re=/*#__PURE__*/E("_makeRpcRequest"),oe=/*#__PURE__*/E("_onDisplayUri"),le=/*#__PURE__*/E("_onSessionDelete");class ce{get version(){return C(this,U)[U]}get name(){return C(this,I)[I]}get icon(){return C(this,N)[N]}get chains(){return c.SOLANA_CHAINS.slice()}get features(){return{"standard:connect":{version:"1.0.0",connect:C(this,Z)[Z]},"standard:disconnect":{version:"1.0.0",disconnect:C(this,$)[$]},"standard:events":{version:"1.0.0",on:C(this,G)[G]},"solana:signAndSendTransaction":{version:"1.0.0",supportedTransactionVersions:["legacy",0],signAndSendTransaction:C(this,X)[X]},"solana:signTransaction":{version:"1.0.0",supportedTransactionVersions:["legacy",0],signTransaction:C(this,ee)[ee]},"solana:signMessage":{version:"1.0.0",signMessage:C(this,Q)[Q]}}}get accounts(){return C(this,L)[L].slice()}get isWalletConnectSolana(){return!0}async initialize({walletConnectCloudProjectId:e,privyAppName:t}){C(this,D)[D]=e,C(this,R)[R]=t,await C(this,te)[te](),await C(this,ie)[ie]()}setWalletEntry(e,t){C(this,K)[K]=e,C(this,B)[B]=t}constructor(){Object.defineProperty(this,z,{value:ue}),Object.defineProperty(this,J,{value:de}),Object.defineProperty(this,k,{writable:!0,value:void 0}),Object.defineProperty(this,U,{writable:!0,value:void 0}),Object.defineProperty(this,I,{writable:!0,value:void 0}),Object.defineProperty(this,N,{writable:!0,value:void 0}),Object.defineProperty(this,F,{writable:!0,value:void 0}),Object.defineProperty(this,L,{writable:!0,value:void 0}),Object.defineProperty(this,R,{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,B,{writable:!0,value:void 0}),Object.defineProperty(this,V,{writable:!0,value:void 0}),Object.defineProperty(this,G,{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,Z,{writable:!0,value:void 0}),Object.defineProperty(this,$,{writable:!0,value:void 0}),Object.defineProperty(this,Q,{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,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}),C(this,k)[k]={},C(this,U)[U]="1.0.0",C(this,I)[I]="WalletConnect",C(this,N)[N]=p.WALLET_CONNECT_LOGO_DATA_URI,C(this,F)[F]=null,C(this,L)[L]=[],C(this,R)[R]="",C(this,D)[D]="",C(this,V)[V]=new Map,C(this,G)[G]=(e,t)=>(C(this,k)[k][e]?.push(t)||(C(this,k)[k][e]=[t]),()=>C(this,J)[J](e,t)),C(this,H)[H]=e=>{C(this,I)[I]=C(this,F)[F]?.session?.peer?.metadata?.name||C(this,K)[K]?.name||"WalletConnect",C(this,N)[N]=C(this,F)[F]?.session?.peer?.metadata?.icons?.[0]||C(this,K)[K]?.image_url?.sm||C(this,N)[N],C(this,L)[L]=e.map((e=>new O({address:e,publicKey:u.base58.decode(e),label:C(this,I)[I],icon:C(this,N)[N]}))),C(this,z)[z]("change",{accounts:this.accounts})},C(this,Y)[Y]=()=>{C(this,L)[L]=[],C(this,z)[z]("change",{accounts:this.accounts})},C(this,Z)[Z]=async()=>(this.accounts.length||await C(this,se)[se](),{accounts:this.accounts}),C(this,$)[$]=async()=>{await C(this,ae)[ae](),C(this,z)[z]("change",{accounts:this.accounts})},C(this,Q)[Q]=async(...e)=>{let t=[];for(let{account:s,message:i}of e){let e=u.base58.encode(i);try{let n=await C(this,re)[re]("solana_signMessage",{message:e,pubkey:s.address},pe("solana:mainnet"));t.push({signedMessage:i,signature:A(n)})}catch(n){if(n?.message?.includes("Missing or invalid")){let n=await C(this,re)[re]("solana:signMessage",{message:e,pubkey:s.address},pe("solana:mainnet"));t.push({signedMessage:i,signature:A(n)})}throw n}}return t},C(this,X)[X]=async(...e)=>{let t=[];for(let{account:s,chain:i,transaction:n,options:a}of e){let e=u.base64.encode(n);try{let n=await C(this,re)[re]("solana_signAndSendTransaction",{transaction:e,pubkey:s.address,sendOptions:a},pe(i));t.push({signature:A(n)})}catch(n){if(n?.message?.includes("Missing or invalid")){let n=await C(this,re)[re]("solana:signAndSendTransaction",{transaction:e,pubkey:s.address,sendOptions:a},pe(i));t.push({signature:A(n)})}}}return t},C(this,ee)[ee]=async(...e)=>{let t=[];for(let{account:s,chain:i,transaction:n}of e){let e=u.base64.encode(n);try{let n=await C(this,re)[re]("solana_signTransaction",{transaction:e,pubkey:s.address},pe(i||"solana:mainnet"));t.push({signedTransaction:W(n)})}catch(n){if(n?.message?.includes("Missing or invalid")){let n=await C(this,re)[re]("solana:signTransaction",{transaction:e,pubkey:s.address},pe(i||"solana:mainnet"));t.push({signedTransaction:W(n)})}}}return t},C(this,te)[te]=async()=>{if(C(this,F)[F])return C(this,F)[F];if(!C(this,D)[D])throw Error("WalletConnect Cloud Project ID is required");return C(this,F)[F]=await v.UniversalProvider.init({projectId:C(this,D)[D],metadata:{name:C(this,R)[R],description:C(this,R)[R],url:window.location.origin,icons:[]},relayUrl:"wss://relay.walletconnect.com",telemetryEnabled:!1}),C(this,ne)[ne]("display_uri",C(this,oe)[oe]),C(this,ne)[ne]("session_delete",C(this,le)[le]),C(this,ne)[ne]("session_ping",(()=>{})),C(this,ne)[ne]("session_event",(()=>{})),C(this,ne)[ne]("session_update",(()=>{})),C(this,F)[F]},C(this,se)[se]=async()=>{if(!C(this,F)[F])throw Error("WalletConnectSolana: Failed to get or create session. Provider not initialized");if(C(this,F)[F].session)return C(this,F)[F].session;let e=await C(this,F)[F].connect({optionalNamespaces:{solana:{chains:[M,x],methods:["solana_signMessage","solana_signTransaction","solana_signAndSendTransaction"],events:[]}}});if(!e)throw Error("WalletConnectSolana: Failed to create new session");return C(this,H)[H](he(e)),e},C(this,ie)[ie]=async()=>{let e=C(this,F)[F]?.session;if(e){if(!e.namespaces?.solana)return await(C(this,F)[F]?.disconnect().catch((e=>console.error("WalletConnectSolana: Error disconnecting session",e)))),void(C(this,F)[F].session=void 0);C(this,H)[H](he(e))}},C(this,ne)[ne]=(e,t)=>{let s=C(this,V)[V].get(e);s&&(C(this,F)[F]?.off(e,s),C(this,V)[V].delete(e)),C(this,F)[F]?.on(e,t),C(this,V)[V].set(e,t)},C(this,ae)[ae]=async()=>{try{if(C(this,F)[F]?.session&&await(C(this,F)[F]?.disconnect().catch((e=>console.error("WalletConnectSolana: Error disconnecting session",e)))),C(this,F)[F]?.client){let e=C(this,F)[F].client.proposal.getAll();await Promise.allSettled(e.map((e=>C(this,F)[F]?.client.proposal.delete(e.id,{code:6e3,message:"User disconnected"}))));let t=C(this,F)[F].client.pairing.getAll();await Promise.allSettled(t.map((e=>C(this,F)[F]?.client.pairing.delete(e.topic,{code:6e3,message:"User disconnected"}))))}C(this,Y)[Y]()}catch(e){console.error("WalletConnectSolana: Error destroying session",e)}},C(this,re)[re]=async(e,t,s)=>{try{return await C(this,F)[F].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}},C(this,oe)[oe]=e=>{if(f.isMobile&&C(this,K)[K]){let{redirect:s}=t.buildTargetUrl(e,C(this,K)[K]);null==C(this,B)[B]||C(this,B)[B].call(this,{native:s,universal:s})}else null==C(this,B)[B]||C(this,B)[B].call(this,{native:e,universal:void 0})},C(this,le)[le]=()=>{C(this,Y)[Y]()}}}function ue(e,...t){C(this,k)[k][e]?.forEach((e=>e.apply(null,t)))}function de(e,t){C(this,k)[k][e]=C(this,k)[k][e]?.filter((e=>t!==e))}function he(e){return e.namespaces.solana.accounts.reduce(((e,t)=>{let s=t.split(":").at(-1);return e.includes(s)||e.push(s),e}),[])}function pe(e){switch(e){case"solana:mainnet":return M;case"solana:devnet":return x;default:return e}}var ge={id:t.SOLANA_FUNDING_PLUGIN_ID,getSolanaRpcClient:l.getSolanaRpcClient,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=o.pipe(o.createTransactionMessage({version:0}),(e=>o.setTransactionMessageFeePayerSigner({address:s},e)),(e=>o.setTransactionMessageLifetimeUsingBlockhash(a,e)),(e=>o.appendTransactionMessageInstructions(n,e)),(e=>o.compileTransaction(e)));return new Uint8Array(o.getTransactionEncoder().encode(r))},simulateTransaction:l.simulateTransaction,getAddressFromBuffer:c.getAddressFromBuffer,fetchTransactionEstimatedFees:l.fetchTransactionEstimatedFees};var ve={id:t.SOLANA_LEDGER_PLUGIN_ID,createSiwsMemoTransaction:({address:e,nonce:s})=>{let i=d.getAddMemoInstruction({memo:t.prepareSiwsMessageWithNonce({address:o.address(e),nonce:s})});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([i],e)),(e=>o.compileTransaction(e)),(e=>u.base64.encode(Uint8Array.from(o.getTransactionEncoder().encode(e)))))},getSignatureFromTransaction:(e,t)=>{let s=o.getTransactionDecoder().decode(e).signatures[t];if(!s)throw Error(`Missing transaction signature for address: ${t}`);return u.base64.encode(s)}};exports.useStandardWallets=c.useSolanaStandardWallets,exports.useWallets=c.useWallets,exports.useExportWallet=h.useExportWallet,exports.useFundWallet=h.useFundWallet,exports.SolanaAdapterConnector=p.SolanaWalletConnector,exports.toSolanaWalletConnectors=e=>{let t,{get:s,on:i}=g.getWallets(),n=e?.shouldAutoConnect??!0,a=new p.SolanaWalletConnector(new ce,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 p.SolanaWalletConnector(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 p.SolanaWalletConnector(e,n))).concat(a),t?.(o)}let u=[i("register",l),i("unregister",c)];return l(...s()),{_setOnConnectorsUpdated:e=>{t=e},onMount:()=>{u[0]||(u[0]=i("register",l)),u[1]||(u[1]=i("unregister",c))},onUnmount:()=>{let e=u.pop();for(;e;)e(),e=u.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:s}=await e({chainType:"solana",options:t});return{wallet:s}}}},exports.useImportWallet=()=>{let{user:r}=a.usePrivyContext(),{client:o,refreshSessionAndUser:l,initializeWalletProxy:c}=n.usePrivyInternal(),u=i.useEmitPrivyEvent(),d=s.useAppConfig();return{importWallet:e.useCallback((({privateKey:e,additionalSigners:s})=>t.importWallet({getAccessToken:()=>o.getAccessToken(),user:r,initializeWalletProxy:c,refreshSessionAndUser:l,emitPrivyEvent:u,appConfig:d},{privateKey:e,chainType:"solana",additionalSigners:s})),[r,o,l,c,u,d])}},exports.useSignAndSendTransaction=function(){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]}}},exports.useSignMessage=function(){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]}}},exports.useSignTransaction=function(){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]}}},exports.useSolanaFundingPlugin=()=>r.useRegisterPlugin(ge),exports.useSolanaLedgerPlugin=()=>r.useRegisterPlugin(ve);