UNPKG

@privy-io/react-auth

Version:

React client for the Privy Auth API

59 lines (50 loc) 11 kB
"use strict";var e=require("react/jsx-runtime"),t=require("react"),r=require("@privy-io/popup"),s=require("./privy-context-CrM9_s6G.js"),o=require("./SelectSourceAsset-Mzj-MSFd.js"),i=require("react-device-detect"),a=require("styled-components"),n=require("./CopyableText-DbFeIZI0.js"),c=require("./index-DchMyzt9.js"),u=require("./ScreenLayout-C4QHZMbl.js"),l=require("lucide-react"),d=require("./InfoBanner-D5_XYHKY.js");require("@privy-io/are-addresses-equal"),require("./context-Cg3IEi80.js"),require("@privy-io/js-sdk-core"),require("tinycolor2"),require("./internal-context-BJv4f_bO.js"),require("ofetch"),require("./use-export-wallet-_EIyxyle.js"),require("./useWallets-dikDynAG.js"),require("viem"),require("eventemitter3"),require("viem/utils"),require("uuid"),require("jose"),require("./useActiveWallet-BfMD5hzE.js"),require("zustand"),require("./events-context-Di6--rDg.js"),require("@coinbase/wallet-sdk"),require("@privy-io/ethereum"),require("mipd"),require("./paths-DizMb-lU.js"),require("./usePrivy-C-Rab7yP.js"),require("@scure/base"),require("@headlessui/react"),require("@walletconnect/ethereum-provider"),require("@privy-io/urls"),require("./PrivyPluginContext-DsgaS6n9.js"),require("./getEmbeddedConnectedWallet-pJd-l936.js"),require("js-cookie"),require("./frame-Oz7volks.js"),require("@privy-io/routes"),require("x402/client"),require("@privy-io/api-base"),require("viem/accounts"),require("./use-sign-with-user-signer-Cu_6Bx7m.js"),require("./ModalHeader-C5Wuo3-1.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("./Screen-DWnRbzSA.js"),require("./index-ByFhjjzH.js"),require("@heroicons/react/24/outline/InformationCircleIcon");const p=({data:t,onClose:r})=>/*#__PURE__*/e.jsx(u.ScreenLayout,{showClose:!0,onClose:r,title:"Initiate bank transfer",subtitle:"Use the details below to complete a bank transfer from your bank.",primaryCta:{label:"Done",onClick:r},watermark:!1,footerText:"Exchange rates and fees are set when you authorize and determine the amount you receive. You'll see the applicable rates and fees for your transaction separately",children:/*#__PURE__*/e.jsx(y,{children:(c.DEPOSIT_INSTRUCTIONS_MAP[t.deposit_instructions.asset]||[]).map((([r,s],o)=>{let a=t.deposit_instructions[r];if(!a||Array.isArray(a))return null;let c="asset"===r?a.toUpperCase():a,u=c.length>100?`${c.slice(0,9)}...${c.slice(-9)}`:c;/*#__PURE__*/return e.jsxs(m,{children:[/*#__PURE__*/e.jsx(f,{children:s}),/*#__PURE__*/e.jsx(n.CopyButton,{value:c,includeChildren:i.isMobile,children:/*#__PURE__*/e.jsx(h,{children:u})})]},o)}))})});let y=a.styled.ol` border-color: var(--privy-color-border-default); border-width: 1px; border-radius: var(--privy-border-radius-mdlg); border-style: solid; display: flex; flex-direction: column; && { padding: 0 1rem; } `,m=a.styled.li` display: flex; justify-content: space-between; align-items: center; padding: 1rem 0; &:not(:first-of-type) { border-top: 1px solid var(--privy-color-border-default); } & > { :nth-child(1) { flex-basis: 30%; } :nth-child(2) { flex-basis: 60%; } } `,f=a.styled.span` color: var(--privy-color-foreground); font-kerning: none; font-variant-numeric: lining-nums proportional-nums; font-feature-settings: 'calt' off; /* text-xs/font-regular */ font-size: 0.75rem; font-style: normal; font-weight: 400; line-height: 1.125rem; /* 150% */ text-align: left; flex-shrink: 0; `,h=a.styled.span` color: var(--privy-color-foreground); font-kerning: none; font-feature-settings: 'calt' off; /* text-sm/font-medium */ font-size: 0.875rem; font-style: normal; font-weight: 500; line-height: 1.375rem; /* 157.143% */ text-align: right; word-break: break-all; `;const v=({onClose:t})=>/*#__PURE__*/e.jsx(u.ScreenLayout,{showClose:!0,onClose:t,icon:l.XCircle,iconVariant:"error",title:"Something went wrong",subtitle:"We couldn't complete account setup. This isn't caused by anything you did.",primaryCta:{label:"Close",onClick:t},watermark:!0}),g=({onClose:t,reason:r})=>{let s=r?r.charAt(0).toLowerCase()+r.slice(1):void 0;/*#__PURE__*/return e.jsx(u.ScreenLayout,{showClose:!0,onClose:t,icon:l.XCircle,iconVariant:"error",title:"Identity verification failed",subtitle:s?`We can't complete identity verification because ${s}. Please try again or contact support for assistance.`:"We couldn't verify your identity. Please try again or contact support for assistance.",primaryCta:{label:"Close",onClick:t},watermark:!0})},C=({onClose:t,email:r})=>/*#__PURE__*/e.jsx(u.ScreenLayout,{showClose:!0,onClose:t,icon:l.Hourglass,title:"Identity verification in progress",subtitle:"We're waiting for Persona to approve your identity verification. This usually takes a few minutes, but may take up to 24 hours.",primaryCta:{label:"Done",onClick:t},watermark:!0,children:/*#__PURE__*/e.jsxs(d.InfoBanner,{theme:"light",children:["You'll receive an email at ",r," once approved with instructions for completing your deposit."]})}),k=({onClose:t,onAcceptTerms:r,isLoading:s})=>/*#__PURE__*/e.jsx(u.ScreenLayout,{showClose:!0,onClose:t,icon:l.UserCheck,title:"Verify your identity to continue",subtitle:"Finish verification with Persona — it takes just a few minutes and requires a government ID.",helpText:/*#__PURE__*/e.jsxs(e.Fragment,{children:['This app uses Bridge to securely connect accounts and move funds. By clicking "Accept," you agree to Bridge\'s'," ",/*#__PURE__*/e.jsx("a",{href:"https://www.bridge.xyz/legal",target:"_blank",rel:"noopener noreferrer",children:"Terms of Service"})," ","and"," ",/*#__PURE__*/e.jsx("a",{href:"https://www.bridge.xyz/legal/row-privacy-policy/bridge-building-limited",target:"_blank",rel:"noopener noreferrer",children:"Privacy Policy"}),"."]}),primaryCta:{label:"Accept and continue",onClick:r,loading:s},watermark:!0}),j=({onClose:t})=>/*#__PURE__*/e.jsx(u.ScreenLayout,{showClose:!0,onClose:t,icon:l.Check,iconVariant:"success",title:"Identity verified successfully",subtitle:"We've successfully verified your identity. Now initiate a bank transfer to view instructions.",primaryCta:{label:"Initiate bank transfer",onClick:()=>{},loading:!0},watermark:!0}),x=({opts:t,onClose:r,onEditSourceAsset:s,onSelectAmount:i,isLoading:a})=>/*#__PURE__*/e.jsxs(u.ScreenLayout,{showClose:!0,onClose:r,headerTitle:`Buy ${t.destination.asset.toLocaleUpperCase()}`,primaryCta:{label:"Continue",onClick:i,loading:a},watermark:!0,children:[/*#__PURE__*/e.jsx(o.AmountInput,{currency:t.source.selectedAsset,inputMode:"decimal",autoFocus:!0}),/*#__PURE__*/e.jsx(o.CurrencySelector,{selectedAsset:t.source.selectedAsset,onEditSourceAsset:s})]}),b=({onClose:t,onAcceptTerms:r,onSelectAmount:s,onSelectSource:i,onEditSourceAsset:a,opts:n,state:c,email:u,isLoading:l})=>"select-amount"===c.status?/*#__PURE__*/e.jsx(x,{onClose:t,onSelectAmount:s,onEditSourceAsset:a,opts:n,isLoading:l}):"select-source-asset"===c.status?/*#__PURE__*/e.jsx(o.SelectSourceAsset,{onSelectSource:i,opts:n,isLoading:l}):"kyc-prompt"===c.status?/*#__PURE__*/e.jsx(k,{onClose:t,onAcceptTerms:r,opts:n,isLoading:l}):"kyc-incomplete"===c.status?/*#__PURE__*/e.jsx(C,{onClose:t,email:u}):"kyc-success"===c.status?/*#__PURE__*/e.jsx(j,{onClose:t}):"kyc-error"===c.status?/*#__PURE__*/e.jsx(g,{onClose:t,reason:c.reason}):"account-details"===c.status?/*#__PURE__*/e.jsx(p,{onClose:t,data:c.data}):"create-customer-error"===c.status||"get-customer-error"===c.status?/*#__PURE__*/e.jsx(v,{onClose:t}):null,w={component:()=>{let{user:i}=s.usePrivyContext(),a=s.usePrivyModal().data;if(!a?.FundWithBankDepositScreen)throw Error("Missing data");let{onSuccess:n,onFailure:c,opts:u,createOrUpdateCustomer:l,getCustomer:d,getOrCreateVirtualAccount:p}=a.FundWithBankDepositScreen,[y,m]=t.useState(u),[f,h]=t.useState({status:"select-amount"}),[v,g]=t.useState(null),[C,k]=t.useState(!1),j=t.useRef(null),x=t.useCallback((async()=>{let e;k(!0),g(null);try{e=await d({kycRedirectUrl:window.location.origin})}catch(e){if(!e||"object"!=typeof e||!("status"in e)||404!==e.status)return h({status:"get-customer-error"}),g(e),void k(!1)}if(!e)try{e=await l({hasAcceptedTerms:!1,kycRedirectUrl:window.location.origin})}catch(e){return h({status:"create-customer-error"}),g(e),void k(!1)}if(!e)return h({status:"create-customer-error"}),g(Error("Unable to create customer")),void k(!1);if("not_started"===e.status&&e.kyc_url)return h({status:"kyc-prompt",kycUrl:e.kyc_url}),void k(!1);if("not_started"===e.status)return h({status:"get-customer-error"}),g(Error("Unexpected user state")),void k(!1);if("rejected"===e.status)return h({status:"kyc-error",reason:e.rejection_reasons?.[0]?.reason}),g(Error("User KYC rejected.")),void k(!1);if("incomplete"===e.status)return h({status:"kyc-incomplete"}),void k(!1);if("active"!==e.status)return h({status:"get-customer-error"}),g(Error("Unexpected user state")),void k(!1);e.status;try{let e=await p({destination:y.destination,provider:y.provider,source:{asset:y.source.selectedAsset}});h({status:"account-details",data:e})}catch(e){return h({status:"create-customer-error"}),g(e),void k(!1)}}),[y]),w=t.useCallback((async()=>{if(g(null),k(!0),"kyc-prompt"!==f.status)return g(Error("Unexpected state")),void k(!1);let e=r.trigger({location:f.kycUrl});if(await l({hasAcceptedTerms:!0}),!e)return g(Error("Unable to begin kyc flow.")),k(!1),void h({status:"create-customer-error"});j.current=new AbortController;let t=await o.pollPopupForRedirect(e,j.current.signal);if("aborted"===t.status)return;if("closed"===t.status)return void k(!1);t.status;let s=await o.poll({operation:()=>d({}),until:e=>"active"===e.status||"rejected"===e.status,delay:0,interval:2e3,attempts:60,signal:j.current.signal});if("aborted"!==s.status){if("max_attempts"===s.status)return h({status:"kyc-incomplete"}),void k(!1);if(s.status,"rejected"===s.result.status)return h({status:"kyc-error",reason:s.result.rejection_reasons?.[0]?.reason}),g(Error("User KYC rejected.")),void k(!1);if("active"!==s.result.status)return h({status:"kyc-incomplete"}),void k(!1);e.closed||e.close(),s.result.status;try{h({status:"kyc-success"});let e=await p({destination:y.destination,provider:y.provider,source:{asset:y.source.selectedAsset}});h({status:"account-details",data:e})}catch(e){h({status:"create-customer-error"}),g(e)}finally{k(!1)}}}),[h,g,k,l,p,f,y,j]),q=t.useCallback((e=>{h({status:"select-amount"}),m({...y,source:{...y.source,selectedAsset:e}})}),[h,m]),S=t.useCallback((()=>{h({status:"select-source-asset"})}),[h]);/*#__PURE__*/return e.jsx(b,{onClose:t.useCallback((async()=>{j.current?.abort(),v?c(v):await n()}),[v,j]),opts:y,state:f,isLoading:C,email:i.email.address,onAcceptTerms:w,onSelectAmount:x,onSelectSource:q,onEditSourceAsset:S})}};exports.FundWithBankDepositScreen=w,exports.default=w;