UNPKG

@privy-io/react-auth

Version:

React client for the Privy Auth API

2 lines (1 loc) • 11 kB
"use strict";var e=require("react/jsx-runtime"),t=require("react"),n=require("react-device-detect"),r=require("styled-components"),o=require("./index-NJrQkxJ7.js"),i=require("./Link-DmzPZ_M7.js"),a=require("./context-DFq1obBO.js"),l=require("./useI18n-CY6Et_lH.js"),c=require("./prepareFundingModalData-Cnd6rhhJ.js"),s=require("./useActiveWallet-BOX8xCn9.js"),u=require("viem"),d=require("./internal-context-NWsAL807.js"),g=require("./get-is-unified-wallet-D4ouXJpi.js"),S=require("./shouldProceedtoEmbeddedWalletCreationFlow-DZvEYqlO.js"),C=require("./usePrivy-CcfSRv1R.js"),p=require("./ScreenLayout-BeH-Q6N2.js");require("@privy-io/js-sdk-core"),require("uuid"),require("jose"),require("eventemitter3"),require("./useWallets-BLFNjTwC.js"),require("@coinbase/wallet-sdk"),require("@privy-io/ethereum"),require("mipd"),require("viem/utils"),require("@privy-io/popup"),require("./paths-DizMb-lU.js"),require("@scure/base"),require("./events-context-Di6--rDg.js"),require("zustand"),require("@headlessui/react"),require("@walletconnect/ethereum-provider"),require("@privy-io/urls"),require("./getPublicClient-CGlodIp_.js"),require("ofetch"),require("js-cookie"),require("./frame-B14fp9oC.js"),require("@privy-io/routes"),require("x402/client"),require("@privy-io/api-base"),require("viem/accounts"),require("./use-sign-with-user-signer-BcAsQTGF.js"),require("./getEmbeddedConnectedWallet-6TsVZJkD.js"),require("tinycolor2"),require("./Button-Bm_Ft0Dw.js"),require("./Screen-D9Tvi297.js"),require("./ModalHeader-DB7Tbjwz.js"),require("@heroicons/react/24/outline/ArrowLeftIcon"),require("@heroicons/react/24/outline/ArrowRightIcon"),require("@heroicons/react/24/outline/QuestionMarkCircleIcon"),require("@heroicons/react/24/outline/XMarkIcon"),require("./index-CRFXS9pP.js");const w=e=>{let t=localStorage.getItem("-walletlink:https://www.walletlink.org:Addresses")?.split(" ").filter((e=>u.isHex(e,{strict:!0}))).map((e=>u.getAddress(e)));return!!t?.length&&!!e?.linkedAccounts.filter((e=>"wallet"==e.type&&t.includes(e.address))).length};const y=e=>e?.privyErrorCode===d.PrivyErrorCode.LINKED_TO_ANOTHER_USER?c.ConnectorErrors.ERROR_USER_EXISTS:e instanceof c.PrivyProviderRpcError&&!e.details.default?e.details:e instanceof c.WalletTimeoutError?c.ConnectorErrors.ERROR_TIMED_OUT:e?.privyErrorCode===d.PrivyErrorCode.CANNOT_LINK_MORE_OF_TYPE?c.ConnectorErrors.ERROR_USER_LIMIT_REACHED:c.ConnectorErrors.ERROR_WALLET_CONNECTION,E=({walletLogo:t,title:n,subtitle:r,signSuccess:o,errorMessage:a,connectSuccess:s,separateConnectAndSign:u,signing:d,walletConnectRedirectUri:g,walletConnectFallbackUniversalUri:S,hasTabbedAway:C,showCoinbaseWalletResetCta:w,numRetries:y,onBack:E,onSign:h,onRetry:v,onCoinbaseReset:f,onDifferentWallet:b})=>{let{t:_}=l.useI18n(),R=w?{label:"Use a different wallet",onClick:f,disabled:o}:a===c.ConnectorErrors.ERROR_USER_EXISTS&&E?{label:"Use a different wallet",onClick:b}:s&&!o&&u?{label:d?"Signing":"Sign with your wallet",onClick:h,disabled:d}:!o&&a?.retryable&&y<2?{label:"Retry",onClick:v,disabled:!1}:o||a?void 0:{label:_("connectionStatus.connecting"),onClick:()=>{},disabled:!0};/*#__PURE__*/return e.jsx(p.ScreenLayout,{title:n,subtitle:r,icon:t,iconVariant:"loading",iconLoadingStatus:{success:o,fail:!!a},primaryCta:R,onBack:E,watermark:!0,children:!s&&g&&!C&&/*#__PURE__*/e.jsxs(m,{children:[_("connectionStatus.stillHere")," ",/*#__PURE__*/e.jsx(i.Link,{href:g,target:"_blank",variant:"underlined",size:"sm",children:_("connectionStatus.tryConnectingAgain")}),S&&/*#__PURE__*/e.jsxs(e.Fragment,{children:[" ",_("connectionStatus.or")," ",/*#__PURE__*/e.jsx(i.Link,{href:S,target:"_blank",variant:"underlined",size:"sm",children:_("connectionStatus.useDifferentLink")})]})]})})},h={component:()=>{let r,[i,u]=t.useState(!1),[p,h]=t.useState(!1),[m,v]=t.useState(void 0),{authenticated:f,logout:b}=g.usePrivyContext(),{navigate:_,navigateBack:R,lastScreen:T,currentScreen:q,setModalData:k,data:A}=g.usePrivyModal(),W=a.useAppConfig(),{t:L}=l.useI18n(),{getAuthFlow:I,walletConnectionStatus:j,closePrivyModal:U,initLoginWithWallet:x,loginWithWallet:M,updateWallets:N,createAnalyticsEvent:O}=d.usePrivyInternal(),{walletConnectors:P}=g.usePrivyContext(),[D,F]=t.useState(0),{user:B}=g.usePrivyContext(),H=C.usePlugins(),[V]=t.useState(B?.linkedAccounts.length||0),[X,z]=t.useState(""),[Y,G]=t.useState(""),[J,K]=t.useState(!1),{hasTabbedAway:Q}=function(){let[e,n]=t.useState(!1),r=t.useCallback((()=>{document.hidden&&n(!0)}),[]);return t.useEffect((()=>(document.addEventListener("visibilitychange",r),()=>document.removeEventListener("visibilitychange",r))),[r]),{hasTabbedAway:e,reset:()=>n(!1)}}(),{enabled:$,token:Z}=o.useCaptcha(),ee=s.useExternalWalletListing(j?.connector?.walletClientType||"unknown"),te=n.isMobile&&"wallet_connect_v2"===j?.connector?.connectorType||n.isMobile&&"coinbase_wallet"===j?.connector?.connectorType||n.isMobile&&"base_account"===j?.connector?.connectorType||n.isMobile&&"injected"===j?.connector?.connectorType&&"phantom"===j?.connector?.walletClientType||n.isMobile&&"solana_adapter"===j?.connector?.connectorType&&"mobile_wallet_adapter"===j.connector.walletClientType,ne="connected"===j?.status,re="switching_to_supported_chain"===j?.status;t.useEffect((()=>{let e=I(),t=e instanceof o.SiweFlow||e instanceof o.SiwsFlow?e:void 0;ne&&"solana"===j.connector?.chainType&&"phantom"===j.connector?.walletClientType&&H(C.SOLANA_LEDGER_PLUGIN_ID)&&void 0===A?.login?.isSigningInWithLedgerSolana?_("ConnectLedgerScreen",!1):(ne&&!t&&(!$||Z||f?x(j.connectedWallet,Z,A?.login?.disableSignup,A?.login?.isSigningInWithLedgerSolana?"transaction":"plain").then((()=>{K(!0)})):(k({captchaModalData:{callback:e=>x(j.connectedWallet,e,A?.login?.disableSignup,A?.login?.isSigningInWithLedgerSolana?"transaction":"plain").then((()=>{K(!0)})),userIntentRequired:!1,onSuccessNavigateTo:"ConnectionStatusScreen",onErrorNavigateTo:"ErrorScreen"}}),_("CaptchaScreen",!1))),t instanceof o.SiwsFlow&&A?.login?.isSigningInWithLedgerSolana&&(t.messageType="transaction"),t&&te&&ne&&!t.preparedMessage?t.buildMessage():t&&!te&&ne&&(p||(async()=>{h(!0),v(void 0);try{"wallet_connect_v2"===j?.connector?.connectorType&&"metamask"===j?.connector?.walletClientType&&await s.sleep(2500),await ie()}catch(e){console.warn("Auto-prompted signature failed",e)}finally{h(!1)}})()))}),[D,ne,J]),t.useEffect((()=>{if(B&&i){let e=a.DEFAULT_SUCCESS_SCREEN_DURATION_MS-500;if(W?.legal.requireUsersAcceptTerms&&!B.hasAcceptedTerms){let t=setTimeout((()=>{_("AffirmativeConsentScreen")}),e);return()=>clearTimeout(t)}if(S.shouldProceedtoEmbeddedWalletCreationFlow(B,W.embeddedWallets)){let t=setTimeout((()=>{k({createWallet:{onSuccess:()=>{},onFailure:e=>{console.error(e),O({eventName:"embedded_wallet_creation_failure_logout",payload:{error:e,screen:"ConnectionStatusScreen"}}),b()},callAuthOnSuccessOnClose:!0}}),_("EmbeddedWalletOnAccountCreateScreen")}),e);return()=>clearTimeout(t)}N();let t=setTimeout((()=>U({shouldCallAuthOnSuccess:!0,isSuccess:!0})),a.DEFAULT_SUCCESS_SCREEN_DURATION_MS);return()=>clearTimeout(t)}}),[B,i]);let oe=e=>{if(e?.privyErrorCode!==d.PrivyErrorCode.ALLOWLIST_REJECTED){if(e?.privyErrorCode===d.PrivyErrorCode.USER_LIMIT_REACHED)return console.error(new d.PrivyUserLimitReachedError(e).toString()),void _("UserLimitReachedScreen");if(e?.privyErrorCode!==d.PrivyErrorCode.USER_DOES_NOT_EXIST)return e?.privyErrorCode===d.PrivyErrorCode.ACCOUNT_TRANSFER_REQUIRED&&e.data?.data?.nonce?(k({accountTransfer:{nonce:e.data?.data?.nonce,account:I()?.meta.address,displayName:e.data?.data?.account?.displayName,externalWalletMetadata:{walletClientType:I()?.meta.walletClientType,chainId:I()?.meta.chainId,connectorType:I()?.meta.connectorType},linkMethod:I()instanceof o.SiweFlow?"siwe":"siws",embeddedWalletAddress:e.data?.data?.otherUser?.embeddedWalletAddress}}),void _("LinkConflictScreen")):void v(y(e));_("AccountNotFoundScreen")}else _("AllowlistRejectionScreen")};async function ie(){try{await M(),u(!0)}catch(e){oe(e)}finally{h(!1)}}t.useEffect((()=>{j?.connectError&&oe(j?.connectError)}),[j]),((e,n)=>{let r=t.useRef((()=>{}));t.useEffect((()=>{r.current=e})),t.useEffect((()=>{if(null!==n){let e=setInterval((()=>r.current()),n||0);return()=>clearInterval(e)}}),[n])})((()=>{let e="wallet_connect_v2"===ae&&j?.connector instanceof o.WalletConnectV2WalletConnector?j.connector.redirectUri:void 0;e&&z(e);let t="wallet_connect_v2"===ae&&j?.connector instanceof o.WalletConnectV2WalletConnector?j.connector.fallbackUniversalRedirectUri:void 0;t&&G(t)}),j?.connector instanceof o.WalletConnectV2WalletConnector&&!X?500:null);let ae=j?.connector?.connectorType||"injected",le=j?.connector?.walletClientType||"unknown",ce=ee?.metadata?.shortName||ee?.name||j?.connector?.walletBranding.name||"Browser Extension",se=ee?.image_url?.md||j?.connector?.walletBranding.icon||(t=>/*#__PURE__*/e.jsx(o.BrowserExtensionWallet,{...t})),ue="Browser Extension"===ce?ce.toLowerCase():ce;r=i?L("connectionStatus.successfullyConnected",{walletName:ue}):m?L("connectionStatus.errorTitle",{errorMessage:m.message}):re?"Switching networks":ne?p&&te?"Signing":"Sign to verify":`Waiting for ${ue}`;let de=L("connectionStatus.checkOtherWindows");i?de=V===(B?.linkedAccounts.length||0)?"Wallet was already linked.":"You're good to go!":D>=2&&m?de="Unable to connect wallet":m?de=m.detail:re?de="Switch your wallet to the requested network.":ne&&te?de="Sign the message in your wallet to verify it belongs to you.":"metamask"===le&&n.isMobile?de="Click continue to open and connect MetaMask.":"metamask"===le?de="For the best experience, connect only one wallet at a time.":"wallet_connect"===ae?de="Open your mobile wallet app to continue":"coinbase_wallet"===ae?s.isCoinbaseWalletInstalled()||(de=w(B)?"Continue with the Coinbase app. Not the right wallet? Reset your connection below.":"Confirm in the Coinbase app/popup to continue."):A?.login?.isSigningInWithLedgerSolana&&(de="Ledger requires a transaction to verify your identity. You'll sign a transaction that performs no onchain action.");let ge=P?.walletConnectors?.find((e=>"coinbase_wallet"===e.walletClientType)),Se="coinbase_wallet"===le&&(w(B)||m===c.ConnectorErrors.ERROR_USER_EXISTS);/*#__PURE__*/return e.jsx(E,{walletLogo:se,title:r,subtitle:de,signSuccess:i,errorMessage:m,connectSuccess:ne,separateConnectAndSign:te,signing:p,walletConnectRedirectUri:X,walletConnectFallbackUniversalUri:Y,hasTabbedAway:Q,showCoinbaseWalletResetCta:Se,numRetries:D,onBack:T&&q!==T?R:void 0,onSign:()=>{h(!0),ie()},onRetry:()=>{F(D+1),v(void 0),ne?(h(!0),ie()):j?.connectRetry()},onCoinbaseReset:()=>{ge&&ge?.disconnect()},onDifferentWallet:R})}};let m=/*#__PURE__*/r.styled.p.withConfig({displayName:"RedirectLinksContainer",componentId:"sc-2a867557-0"})(["text-align:center;color:var(--privy-color-foreground-2);font-size:14px;line-height:22px;margin:16px 0;"]);exports.ConnectionStatusScreen=h,exports.ConnectionStatusView=E,exports.default=h,exports.getErrorDetails=y;