{"version":3,"sources":["v2-deprecated/api/auth/paciam.ts","v2-deprecated/api/rest/index.ts","v2-deprecated/routes/dashboard/banking/transfer/methods/ach.tsx","v2-deprecated/routes/dashboard/banking/transfer/methods/wire.tsx","v2-deprecated/routes/dashboard/banking/transfer/methods/cc.tsx","v2-deprecated/routes/dashboard/banking/transfer/wizard.tsx","v2-deprecated/routes/dashboard/banking/index.tsx","reducers/userData.js","reducers/data-agreements.js","reducers/oauth.js","reducers/index.js","store.js","components/LoadingSpinner.js","AmplitudeProvider.js","reducers/auth/signup.js","reducers/account.js","reducers/auth/mfa.js","reducers/trade/trade.js","reducers/position/position.js","reducers/order/order.js","reducers/contest.js","reducers/profile.js","reducers/transfer.js","v2-deprecated/routes/index.tsx","v2-deprecated/theme.ts","v2-deprecated/api/hooks/useDarkMode.tsx","reducers/accountDocuments.js","v2-deprecated/components/common/topbar/index.tsx","v2-deprecated/routes/dashboard/home/paperBanner.tsx","v2-deprecated/components/common/page.tsx","websocket.js","components/AlpacaComponents/Text/Link.js","components/AlpacaComponents/Text/Subtitle.js","components/AlpacaComponents/Text/LargeParagraph.js","components/AlpacaComponents/Text/Title.js","components/AlpacaComponents/Text/Text.js","components/AlpacaComponents/Label/index.js","components/AlpacaComponents/Label/New.js","v2-deprecated/api/hooks/useGetAssets.tsx","v2-deprecated/api/hooks/useGetAccount.tsx","v2-deprecated/api/hooks/useGetCryptoFeeStructure.tsx","v2-deprecated/api/hooks/useGetCryptoMonthlyVolume.tsx","reducers/oauth/clients.js","reducers/portfolio/portfolio.js","v2-deprecated/api/rest/relationships.ts","v2-deprecated/api/rest/plaid.ts","v2-deprecated/api/hooks/usePlaid.ts","v2-deprecated/api/rest/onfido.ts","v2-deprecated/api/hooks/useOnfido.ts","pages/Dashboard/Product/BrokerageAccount/Banking/BankingContainer/CurrencyCloud/index.js","lib/urls.js","api/rest.js","api/index.js","reducers/profitloss/profitloss.js","components/LayoutComponents/TopBar/ProfileMenu/index.js","components/LayoutComponents/TopBar/SearchInput/index.js","components/LayoutComponents/TopBar/index.js","reducers/auth/accountList.js","v2-deprecated/api/rest/banking.ts","v2-deprecated/components/form/asterisk.tsx","v2-deprecated/components/form/field.tsx","v2-deprecated/components/form/fuzzy.tsx","v2-deprecated/components/form/maskedDate.tsx","../../src/hooks/useKeyPress.tsx","../../src/components/UICard.tsx","../../src/components/UICardBody.tsx","../../src/components/UICardHeader.tsx","../../src/components/UIIcon.tsx","../../src/components/UINavbarProfileDivider.tsx","../../src/components/UINavbarProfile.tsx","../../src/components/UINavbarProfileItem.tsx","../../src/components/UINavbarProfileShortcut.tsx","../../src/components/UINavbarProfileThemeSelect.tsx","../../src/components/UINavbar.tsx","../../src/components/UINavbarItem.tsx","../../src/components/UINavbarSpacer.tsx","../../src/components/UINavbarSearch.tsx","../../src/components/UISidebarItem.tsx","../../src/components/UISidebarSpacer.tsx","../../src/components/UISidebarDivider.tsx","../../src/components/UISidebarMenuItem.tsx","../../src/components/UIPage.tsx","../../src/components/UISidebar.tsx","../../src/components/UISkeleton.tsx","../../src/components/UIBranding.tsx","../../src/components/UIButton.tsx","../../src/index.tsx","reducers/auth/cognito.js","v2-deprecated/utils/formatting.tsx","selectors/index.js","reducers/auth/logout.js","v2-deprecated/api/rest/data.ts","AuthCheck.js","pages/NotFoundPage/index.js","pages/RootRedirect/index.js","authMethods.js","Sentry.js","index.tsx","v2-deprecated/api/index.ts","v2-deprecated/components/common/spinner.tsx","v2-deprecated/utils.ts","v2-deprecated/api/auth/index.ts","utils/intercom.js","components/LayoutComponents/Menu/MenuLeft/menuData.js","utils/crypto.js","pages/Dashboard/Product/BrokerageAccount/Banking/BankingContainer/CurrencyCloud/constants.js","v2-deprecated/api/rest/billing.ts","v2-deprecated/api/hooks/useMutationRequest.tsx","utils/agreements.js","v2-deprecated/api/rest/onboarding.ts","reducers/countryInfo.js","reducers/billing.js","reducers/accessKeys.js","reducers/auth/login.js","v2-deprecated/api/hooks/useGetPaperAccounts.tsx","v2-deprecated/api/hooks/useGetMargin.tsx","v2-deprecated/api/hooks/useRequest.tsx","utils/index.js","reducers/alpacaAuth/session.js","v2-deprecated/path.ts","components/LayoutComponents/Menu/MenuLeft/menuLabel.js","components/LayoutComponents/Menu/MenuLeft/index.js","components/LayoutComponents/Menu/MenuTop/menuData.js","components/LayoutComponents/Menu/MenuTop/index.js","components/LayoutComponents/Menu/index.js","components/LayoutComponents/LayoutState/index.js","components/AlpacaComponents/Layout/index.js","utils/eventTracker.js","v2-deprecated/api/hooks/useGetCryptoEnabled.tsx","v2-deprecated/api/hooks/useGetAccountDetails.tsx","v2-deprecated/api/hooks/useGetCountryInfos.tsx","v2-deprecated/api/hooks/useLock.tsx","v2-deprecated/api/hooks/useGetPositions.tsx","v2-deprecated/api/hooks/useGetOrderbooks.tsx","v2-deprecated/api/hooks/useGetPosition.tsx","v2-deprecated/api/hooks/useGetOrders.tsx","v2-deprecated/api/hooks/useGetCryptoSnapshots.tsx","v2-deprecated/api/hooks/useGetAchRelationshipsPending.tsx","v2-deprecated/api/hooks/useGetAccessKeys.tsx","v2-deprecated/api/hooks/useGetBillingOverview.tsx","v2-deprecated/api/hooks/useGetCountries.tsx","v2-deprecated/api/hooks/useGetTrustedAccount.tsx","v2-deprecated/api/hooks/useGetActivities.tsx","v2-deprecated/api/hooks/useGetAchRelationships.tsx","v2-deprecated/api/hooks/useGetAchTransfers.tsx","v2-deprecated/api/hooks/useGetBankInstitution.tsx","v2-deprecated/api/hooks/useGetRapydTransfers.tsx","v2-deprecated/api/hooks/useGetWatchlists.tsx","v2-deprecated/api/hooks/useGetWatchlist.tsx","v2-deprecated/api/hooks/useGetQuotes.tsx","v2-deprecated/api/rest/ip.ts","v2-deprecated/api/hooks/useGetIpAddress.tsx","v2-deprecated/api/hooks/index.tsx","reducers/app.js","reducers/auth/common.js","v2-deprecated/api/rest/account.ts","lib/cookies.js"],"names":["paciamInstance","axios","create","baseURL","window","env","PACIAM_URL","paciamLogin","username","password","a","post","email","s","resp","data","account_source","parsePaciamSession","getPaciamJwt","paciamAccessToken","getCookie","paciamRefreshToken","refresh_token","access_token","sess","access_expires_in","refresh_expires_in","setCookie","getAssets","instance","get","res","getAsset","symbol","Ach","toast","useToast","ctx","useContext","BankingContext","useState","submitCheck","setSubmitCheck","withdrawable","setWithdrawable","btnEnabled","setBtnEnabled","usePlaid","account","onExit","onBeforeClose","setTransferType","onSuccess","setRelationshipPending","PendingRelationshipType","ADDED","title","status","duration","containerStyle","zIndex","onOpenPlaid","open","ready","isDeposit","transferDirection","TransferDirection","INCOMING","relationshipExists","relationships","length","institution","useGetBankInstitution","plaid_institution","enabled","Boolean","useForm","control","watch","setValue","amountString","amount","Number","replace","withdrawableString","getPrettyCash","acceptZero","isWithdrawalInvalid","isConfirmDisabled","infos","imgSrc","concat","logo","label","account_name","account_number","createTransfer","useMutationRequest","createAchTransfer","id","transfer_type","direction","relationship_id","String","AmplitudeProvider","dispatch","JSON","stringify","refetch","mutate","deleteRelationship","deleteAchRelationship","setNextStep","DELETED","useEffect","getCashWithdrawable","value","RemoveRelIcon","alignItems","cursor","fontSize","color","as","RiCloseCircleLine","onClick","fontWeight","mb","admin_configurations","allow_instant_ach","bg","borderRadius","p","isInvalid","name","rules","required","render","field","variant","getCashTransformer","pr","width","children","whiteSpace","px","mt","map","index","border","mr","rounded","justifyContent","boxSize","my","src","ml","display","disabled","onError","flexGrow","w","Deposit","fields","useMemo","padding","overflowX","Object","keys","key","last","values","className","textDecoration","href","Withdrawal","React","international","setInternational","register","reset","setError","handleSubmit","getValues","errors","formState","useRequest","getBanks","accountID","staleTime","refetchInterval","banks","dropzone","useDropzone","maxFiles","maxSize","onDrop","acceptedFiles","onDropRejected","fileRejection","code","message","bank","bankStatement","bank_id","isClosable","description","deleteBank","bankID","createBankMutation","Promise","all","uploadBankStatement","file","bank_statement","createBank","undefined","setWizardFormId","countryList","iso3166Alpha3FormatMapping","getISO3166Alpha3FormatMapping","iso3166","filter","sort","b","onSubmit","bank_code_type","colorScheme","onChange","isChecked","error","errorMsg","placeholder","bank_code","getRootProps","_hover","backgroundColor","borderColor","transition","getInputProps","aria-label","icon","evt","stopPropagation","position","mx","DownloadIcon","size","margin","country","maxW","street_address","city","state_province","postal_code","additional_information","maxHeight","overflowY","flexDir","Wire","wireDirection","Container","styled","Box","CurrencyCloud","compact","accountId","accountStatus","currency","nonModalMode","singleOption","TransferType","Wizard","isAchRelationshipsPending","useGetAchRelationshipsPending","useGetCountryInfos","details","useGetAccountDetails","depositTransferTypes","subLabel","withdrawalTransferTypes","options","option","country_of_tax_residence","currencycloud_enabled","transferType","nextStep","py","maxWidth","minW","justifyItems","back","disclosure","onClose","history","replaceState","location","pathname","wizardFormId","type","form","OUTGOING","createContext","Banking","useGetAccount","setTransferDirection","setWireDirection","setRelationships","relationshipPending","useGetAchRelationships","refetchIntervalInBackground","keepPreviousData","useGetAchTransfers","achTransfers","refetchACH","useGetRapydTransfers","rapydTransfers","refetchRapyd","rows","moment","created_at","diff","columns","cellRenderer","toLowerCase","alignRight","toLocaleString","maximumFractionDigits","minimumFractionDigits","classes","getPrettyDate","toDate","getTime","useDisclosure","transfer","URLSearchParams","search","includes","onOpen","onBeforeWizardOpen","safeDirection","Provider","pending","localStorage","setItem","expires","Date","now","subtitle","isOpen","searchEnabled","emptyMessage","uniqueKey","pageSize","paginationEnabled","tools","NS","_setUserData","createAction","createReducer","state","payload","loaded","initialState","dataAgreementReducer","action","blob","agreement","_setOAuthClients","clients","createRootReducer","combineReducers","router","connectRouter","pendingTasks","pendingTasksReducer","app","auth","cognito","accountList","login","mfa","profile","userData","accountDocuments","accessKeys","trade","portfolio","order","profitloss","dataAgreements","formReducer","oauth","oauthClients","contest","billing","countryInfo","actions","Subject","middlewares","store","next","result","getState","routerMiddleware","thunk","createStore","composeWithDevTools","applyMiddleware","LoadingSpinner","div","props","eventTypes","eventHistory","Map","eventHistoryTimeout","componentDidMount","forEach","addEventListener","handleEvent","bind","event","eventName","getEventName","eventData","getEventData","indexOf","hasOwnProperty","is_paper","rateExceeded","getAmplitude","logEvent","set","timestamp","delete","target","detail","getAttribute","parse","dispatchEvent","CustomEvent","url","Component","setAccount","acc","setUserId","owner_id","setUserProperties","account_status","account_id","algodash_v2","useFlag","amplitude","getInstance","REDUCER","submit","clearing_broker","client_id","utm_params","api","weakEncrypt","crypto_broker","has","onboarding_version","signup_source","then","eventTracker","category","userState","userConfirmed","catch","err","verify","redirect","Auth","confirmSignUp","forceAliasCreation","notification","signIn","getCurrentAuthenticatedUser","user","attributes","source","cognitoActions","submitLogin","Sentry","toString","accountCreated","response","eraseCookie","referralSucceededOrUndefined","referredBy","referralErrorMessage","accountCreationFailed","baseCreateAction","_setAccount","_setAccountDetails","_setTrustedContact","_setPaperAccount","unsetPaperAccount","_setPaperAccounts","_setRelationships","_setWireBanks","_setInstitution","_setCreateRelationshipStatus","_setCreateWireBankStatus","clearCreateRelationshipStatus","clearCreateWireBankStatus","_setPlaidToken","_setTransfers","_setActivities","_setDocuments","_setAffiliates","_setOnfidoSDKToken","_setOnfidoApplicantID","_reqConfigs","_setConfigs","_setOwnerProps","onboardingApiAction","fn","args","getSessionJWT","token","getAccount","getAlpacaAccountId","handleSessionExpire","ok","paciamGetAccount","resolve","signInUserSession","idToken","associatedAccountId","Error","accounts","cognitoUser","updateUserAttributes","e","console","kyc","getItem","list","loadAccountDetails","ownerDetails","patchAccountDetail","params","patch","resetOnboarding","relationship","relationshipId","transfers","transferId","push","postTrustedContact","trustedContact","listAffiliates","affiliates","getOnfidoSDKToken","onfidoSdkToken","patchOnfidoOutcome","_","body","createOnfidoApplicant","onfidoApplicant","onfido_details","applicant_id","updateOnfidoApplicant","postAffiliate","listConfigs","affiliateId","product","getAccountIdAndJWT","paperAccountId","paperConfigs","paper","live","configs","patchConfig","log","deleteAffiliate","loadDataAgreement","agreementName","dataAgreement","postDataAgreement","agreementText","postTaxForm","formName","taxForm","postApiAgreement","updateAccountDetails","updateAccountOwner","owner","loadOwnerProps","Storage","level","region","download","ownerProps","Body","put","createWireBank","metadata","wireBanks","loadWireBanks","createRelationship","loadRelationships","verifyRelationship","loadInstitution","listActivities","date","types","after","until","getAccountIdForProduct","endpoint","activity_types","join","activities","deleteWireBank","bankId","institutionId","institutions","listTransfers","xfers","loadPaperAccounts","paperAccounts","createPaperAccount","recreate","cash","cashInput","parseFloat","setPaperAccount","unsetAccessKeys","resetPaperAccount","paper_account_id","listDocuments","documents","getDocumentUrl","documentId","Accept","current","docs","x","dup","y","mergeDocuments","createRelationshipStatus","createWireBankStatus","plaidToken","institution_id","logoUrl","is_fetching","assign","onfido_sdk_token","onfido_applicant_id","requestEmailChange","req","requestEmail","setEmailUpdateVerificationRequired","verifyEmailChange","verifyEmail","_setCurrentMFAMethod","_setTOTPQRCode","_setTOTSetupVerificationError","MFAMethods","SOFTWARE_TOKEN_MFA","method","displayName","SMS_MFA","NOMFA","enableMFA","getUserData","setPreferredMFA","currentMFAMethod","bypassCache","disableMFA","getPreferredMFA","debug","setupTOTP","authCode","verifyTOTPToken","challengeAnswer","verifyTotpToken","TOTPQRCode","TOTPSetupVerificationError","TOTPQRVerificationError","_setTradeDetails","loadTradeDetails","getLast","ownerId","tradeEndPoint","clearingBroker","newState","_setPositions","_setPlacedLiquidationOrders","listPositions","positionsEndPoint","positions","liquidate","symbols","qty","ordersEndPoint","liquidatePosition","placedLiquidationOrders","orders","resetLiquidatedOrders","_setOrderHistory","_setOrderNotFound","_setOrderStream","_setCanceledOrders","_requestOrderHistory","_requestOrderStream","_clearOrderHistory","listOrders","limit","keyByStatus","initializeOpen","currentAccountOrders","awaitingStream","requests","hasMoreHistory","cancelAllOrders","currentAccount","cancelAll","canceledOrders","cancelSelectedOrders","orderIds","orderId","cancelOrder","replaceOrder","orderDetails","request","clearCanceledOrders","getOrder","notFound","existingOrders","newOrders","concatOrders","unionBy","isInitialized","lastStreamTime","openStatusList","openOrders","o","closedOrders","_setContests","_setContestEnrollment","_setCurrentLeaderboard","_setAllTimeLeaderboard","_setLeaderboardProfile","getContests","contests","contestList","enrollContest","contestId","picture_url","strategy","enrollment","getContestEnrollment","contestEnrollment","deleteContestEnrollment","patchContestEnrollment","getLeaderboard","leaderboard","currentLeaderboard","getAllTimeLeaderboard","getAllTime","allTimeLeaderboard","getLeaderboardProfile","participantId","getParticipant","leaderboardProfile","_setProfilePic","_setProfilePicUrl","_setPhoneNumberToVerify","_setPhoneNumberVerificationError","profile_picture","uploadProfilePic","updateInCognito","phone_number","old_password","new_password","changePassword","refreshUserAttributes","verifyPhoneNumber","verifyCurrentUserAttributeSubmit","resendAttributeVerification","attribute","verifyCurrentUserAttribute","freshUser","setUserState","contentType","pic","shape","picUrl","phoneNumberToVerify","component","phoneNumberVerificationError","_upsertTransfer","_setStatus","clearTransferRequest","transferCreator","deposit","withdraw","cancelTransfer","client","QueryClient","defaultOptions","queries","App","mode","useDarkModeValue","darkMode","useCallback","setDarkMode","newValue","useDarkMode","useHistory","theme","extendTheme","styles","global","html","fontFamily","background","lineHeight","textRendering","WebkitFontSmoothing","hr","opacity","h2","_focus","fonts","heading","mono","space","xxs","xs","sm","md","lg","xl","fontSizes","colors","pastel","green","red","black","gray","90","20","15","10","components","Radio","baseStyle","_checked","boxShadow","Icon","Text","Checkbox","Link","Switch","track","Input","defaultProps","variants","flushed","borderBottom","_focused","_placeholder","skeleton","filled2","filled","shadow","Select","lightGray","yellow","skeleton__light_gray","solid","Button","minWidth","primary","_disabled","sizes","height","_setDocumentRequests","_setDocumentUploads","listAccountDocumentRequests","listRequests","listAccountDocumentUploads","listUploads","uploadDocumentForRequest","docId","subType","formData","FormData","append","upload","uploadByDocType","docType","docSubType","currentDocuments","uploads","BANKING_AND_ONBOARDING_PATHS","Path","ROUTE_BANKING","ROUTE_BANKING_DEPOSIT","ROUTE_NEW_ACCOUNT","TopBar","assets","setAssets","UIContext","sidebarState","setSidebarState","authed","useGetBillingOverview","crypto","useQuery","getCryptoAssets","equities","useGetAssets","normalize","toUpperCase","trim","filtered","asset","some","assetMap","reduce","prev","keyForSymbol","keyForName","onSearch","query","normalized","match","charAt","matched","startsWith","matchA","matchB","uniqBy","slice","ROUTE_TRADE","onDepositOrOpenAccountClick","isInBankingOrOnboardingPath","lifetimeSubCount","ROUTE_USER_SUBSCRIPTION","ROUTE_USER_SUBSCRIPTION_NEW","path","SidebarState","HIDDEN","currentSidebarState","MOBILE","EXPANDED","COLLAPSED","removeItem","handleSidebarState","Search","shortcut","Spacer","Item","isPaperOrOnboarding","PaperBanner","format","ROUTE_DASHBOARD","TEMPORARY_UI_PAGES","heights","sidebar","topbar","apply","Page","v2","setProduct","isPaper","temporaryUIPage","find","noHeader","disableAppMenu","paper_accounts","useGetPaperAccounts","isSubscribed","cryptoTier","crypto_tier","cryptoTierProgress","canTransferCrypto","inSupportedLocation","isNotFullActiveAccount","onSwitchUIClick","setFlag","reload","useGetMargin","number","sidebarProps","handleSwitchAccount","version","process","settings","leftIcon","ROUTE_ALPACA_PROFILE","AuthService","signOut","items","subItems","ROUTE_POSITIONS","ROUTE_ORDERS","ROUTE_ACCOUNT_ACTIVITIES","ROUTE_BALANCES","ROUTE_CONFIGURATION","ROUTE_DOCUMENTS","ROUTE_ALPACA_CONNECT","is_professional","divider","ROUTE_CRYPTO_TRANSFERS","URL_DOCS","newTab","ROUTE_DEVELOPERS","URL_SLACK","URL_FORUM","URL_SUPPORT","initializeIntercom","h","to","tab","hasStripe","isAnimated","marginLeft","banner","liveEndpoint","STREAM_ENDPOINT","paperEndpoint","PAPER_STREAM_ENDPOINT","subjects","sockets","init","subscribe","getApiToken","connect","authMsg","cognito_token","send","socket","WebSocket","onmessage","reader","FileReader","onload","this","stream","streams","readAsText","onerror","onclose","setTimeout","onopen","subscription","isLive","ports","add","events_","TitleBlack","Label","NewLabel","cacheTime","Infinity","isFetched","setAuthed","select","isError","isSuccess","useGetCryptoFeeStructure","getCryptoFeeStructure","useGetCryptoMonthlyVolume","getCryptoMonthlyVolume","listOAuthClients","activeClients","_setPortfolioHistory","loadPortfolioHistory","section","portfolioEndPoint","asset_class","period","extended_hours","perf","getBankRelationships","createBankRelationship","verifyBankRelationship","relationshipID","getPlaidLinkToken","getPlaidAuthStatus","plaidAcconutID","usePlaidLinkToken","cb","createRelationshipCb","queryClient","useQueryClient","useAccountRelationships","relationshipResp","linkResp","hasRelationship","link_token","public_token","mask","verification_status","fetchQuery","authInfo","plaid_verification_status","plaid","info","request_id","session_id","link_session_id","errMsg","error_code","plaidLink","usePlaidLink","userLegalName","userEmailAddress","getOnfidoSdkToken","patchOnfidoSdkToken","rest","hasOnfidoApplicant","defaultOnfidoOptions","useModal","containerId","customUI","fontFamilyTitle","fontFamilySubtitle","fontFamilyBody","fontSizeTitle","fontSizeSubtitle","fontSizeBody","fontWeightSubtitle","colorContentButtonPrimaryText","colorBackgroundButtonPrimary","useOnfidoToken","useOnfido","steps","completeCb","onComplete","errorCb","createApplicant","createdOnfido","updateApplicant","updatedOnfido","sdkResponse","refetchToken","patchSDKToken","firstTime","useRef","opts","isModalOpen","onfido_id","outcome","onModalRequestClose","onfido","tearDown","isReadyToStart","openModal","DespositInfoCopyButton","text","navigator","clipboard","writeText","CCTransferButton","CCGenerateDetails","setDepositDetails","generating","setGenerating","showBankInfo","setShowBankInfo","BankDetails","timeout","IntroCopy","amplitude-event-name","CCTransferDetails","depositDetails","benefExists","depositModalVisible","setDepositModalVisible","withdrawalModalVisible","setWithdrawalModalVisible","cashWithdrawable","setCashWithdrawable","buttonRowHidden","TransferHeadCopy","DepositModal","modalVisible","onCancel","WithdrawalModal","contents","style","marginRight","arr","marginBottom","DepositHeadCopy","DepositBodyText","DepositFee","DepositFeeNote","visible","footer","BeneficiaryDetails","benefDetails","benefReq","setBenefReq","allValid","setAllValid","validationFields","setValidationFields","benefCopy","val","validationCopy","valid","$valid","txt","substr","BenefDetailsPlaceholders","re","RegExp","test","withdrawalAmount","setWithdrawalAmount","cashWithdrawablePlusFee","round","Math","min","meetsMinimum","isOverWithdrawable","validInput","WithdrawalHeadCopy","WithdrawalBodyText","WithdrawalFee","prefix","suffix","createWithdrawal","setBenefDetails","loading","setLoading","validInputs","every","getBeneficiaryDetails","relevantFields","generateCurrencyCloudAccount","setBenefExists","getCurrencyCloudAccount","getStatus","parameterizeUrl","urlDescriptor","TypeError","apiAction","public","populateUrl","urlParams","headers","logout","populatedUrl","REST","GET","POST","PATCH","PUT","DELETE","InvalidCredentialException","NotFoundException","ApiException","endpointOverride","API_URL","requestHeaders","Authorization","querystring","fetch","json","errValues","finally","scope","setExtras","joinCryptoWaitlist","refBy","resetPassword","requestResetPassword","requestVerifyEmail","tradeAccount","getETC","getETCLast","paperTradeAccount","paperId","patchESign","recovery","accessToken","keyId","paperAccessKeys","addresses","paperPositions","listBySymbol","paperOrders","rapyd","wallet","countries","paymentMethods","getForCountry","exchange","calculate","currencyCloud","beneficiary","rewards","view","plaidLinkToken","plaidAuth","plaidStripe","paperActivities","paperProfitloss","paperPortfolio","agreement_text","dataAgreementV2","onfidoResubmission","resubmit","listCreated","update","secret","listClient","screenshots","listClients","authorize","revoke","revokeToken","listTokens","plans","coupon","overview","stripe","cancel","alpaca","quotes","getRestrictedCountries","getCountryInfos","createFee","getMonthlyVolume","_setProfitLoss","loadProfitLoss","previousRetrieval","updateIntercom","profitLossDay","day_plpc","profitLossTotal","total_plpc","ProfileMenu","infoMap","preventDefault","getBillingOverview","getCountryInfo","showGuide","showGettingStarted","initUser","count","addCount","setState","handleSupportLink","isProd","ENV","accountName","accountNum","last_onboarding_step","notifications","cryptoEnabled","isCryptoEnabled","menu","selectable","paddingTop","paddingBottom","getHasFinishedOnboarding","getAgreementPending","paddingLeft","paddingRight","class","overlay","trigger","placement","onVisibleChange","top","left","Option","SearchInput","fetching","lastFetchId","useDispatch","debounce","fetchId","selectRef","keyMap","handlers","focus","ref","showSearch","defaultActiveFirstOption","showAction","showArrow","defaultOpen","filterOption","onSelect","onBlur","notFoundContent","DepositButton","TopBarSubContainer","SearchBoxContainer","isLoggedIn","withRouter","showBrandInHeader","showSearchInHeader","accNum","parseInt","cn","alt","_receive","_fetch","_error","_invalidate","_reset","load","reject","param","getAchTransfers","getRapydTransfers","t","transfer_status","getAchRelationships","getBankInstitution","Asterisk","Field","more","d","textAlign","m","Fuzzy","hook","strict","accessors","maxResults","onDidSelect","hide","setHide","setCursor","fuzzable","item","original","objpath","fuse","Fuse","threshold","findAllMatches","ignoreLocation","currentTarget","onFocus","at","onKeyDown","max","overflow","onMouseDown","onMouseOver","MaskedDate","onPaste","maxLength","fromCharCode","which","Document","UserNotAuthenticated","FRACTION_DIGITS_CONFIG","digits","isValid","getPrettyDateFormatted","getMaxFractionDigits","num","abs","config","parsed","isNaN","isFinite","sign","withPrefix","absValue","forcePrecision","getPrettyAmount","getPrettyPercent","noPrefix","multiply","getProfitLossColor","getNumberOnly","transform","separator","split","base","cents","codes","isAlpacaAccountCreated","getTradeDetails","accId","getAlpacaAccount","getPaperAccountId","getRelationships","getWireBanks","getPrimaryWireBank","getPrimaryRelationship","isMicrodeposit","isPendingMicrodeposit","getInstitutionOfRelationship","isLegacyMicrodeposit","isLiveAccountActive","isLiveAccountClosedOrDisabled","currentUser","signOutGlobal","cleanUpAndRedirect","signOutLocal","clearCookieStorage","sessionStorage","document","cookie","getQuotes","getClock","getOrderbooks","CRYPTO_DATA_API_URL","getCryptoSnapshots","AuthCheck","accountListActions","initAmplify","cognitoResponse","attrs","routeProps","destination","redirector","prevPathname","partnerId","_linkedin_partner_id","element","createElement","fireLinkedInPixel","locationTracker","NotFoundPage","Layout","RootRedirect","accountState","setRequestedPath","requireLogin","email_verified","requireLiveActive","loginCheck","requireCrytpoActive","liveAccount","ENABLE_COIN_TRANSFERS","crypto_status","checkLogin","dsn","SENTRY_DSN","release","environment","integrations","Integrations","BrowserTracing","SecondaryIntegrations","ignoreErrors","AuthCheckRoute","initWebsocket","listen","NewAccountV2Importer","NewAccount","importer","ReactDOM","locale","enGB","buttonText","cookieName","buttonStyle","loadable","exact","getElementById","interceptors","use","currentSession","session","getIdToken","getJwtToken","Spinner","thickness","speed","emptyColor","str","CryptoJS","AES","encrypt","SHARED_SECRET","parseAddress","address","getGeocode","geocode","address_components","getField","entry","short_name","long_name","isDisclosed","step","getPercentageChange","oldNumber","newNumber","parsedOldNumber","parsedNewNumber","renameFile","File","lastModified","getAttributes","getUserAttributes","getCustomAttribute","attr","defaultValue","Name","Value","UserActions","getCurrentUser","currentAuthenticatedUser","confirmMultiFactorAuth","mfaType","confirmSignIn","checkLoggedInStatus","verifyRecoveryCode","cognitoId","verifyId","userPool","errorData","registerUser","firstName","lastName","countryOfCitizenship","validationResponse","signupIPAddress","utmParams","parseUtmParams","signUp","userLogin","userLogout","clear","ROUTE_LOGIN","confirmUserSignUp","resendUserSignUp","resendSignUp","createUserAccountIfNotExist","getAttr","first_name","last_name","country_of_citizenship","confirmMFA","createAccountIfNotExist","getCustomAttr","Intercom","app_id","user_id","given_name","family_name","portfolioValue","equity","tradingBlocked","trading_blocked","enableCryptoTransfers","menuData","additionalClassNames","hideIf","splice","isNew","accountDetails","countryCode","SUPPORTED_CRYPTO_STATES","crypto_enabled","supportedCountries","SUPPORTED_CRYPTO_TRANSFER_COUNTRIES","supportedStates","_inSupportedLocation","BaseCopy","BaseContainer","compactBreakPoint","TransferButton","TransferButtonRow","GenerateContainer","TransferContainer","GenerateButton","GenerateLoader","Loader","CCTextNormal","span","CCTextBold","CCModalContainer","BankDetailsContainer","CCModal","Modal","ModalCopy","css","ModalHeader","ModalSubcontainer","DepositInfoRow","DepositInfo","CCInput","CopyButtonIcon","img","CopyButton","ButtonRow","BenefDetailsContainer","BenefDetailHeader","WithdrawableText","WithdrawableBold","iban","bic_swift","sort_code","aba","bsb_code","branch_code","clabe","cnaps","ifsc","createBeneficiary","required_details","setBeneficiaryExists","beneficiary_exists","cash_withdrawable","useMutation","getErrorMessage","defaultToastSettings","margin_agreement_signed_at","customer_agreement_signed_at","crypto_agreement_signed_at","getScrolledToBottom","parent","getBoundingClientRect","acceptW8","createAffiliate","addressPatch","disclosuresPatch","confirmDetails","kycPatch","previousStepPatch","resetPatch","_setCountryInfo","_setPlans","_billingCreated","_billingCanceled","_billingUpdated","_getOverview","_processStripeResponse","paymentIntentSecret","setupIntentSecret","confirmCardPayment","paymentIntent","last_payment_error","confirmCardSetup","setupIntent","last_setup_error","getPlans","createStripeSubscription","plan","createAlpacaSubscription","cancelStripeSubscription","reason","cancelAlpacaSubscription","updateStripeSubscription","_setAccessKeys","listAccessKeys","nakedEyes","createAccessKey","deleteAccessKey","currentKeys","_setFrom","_setHideLogin","setFailedLogin","_setForgotPasswordVerification","setMFAVerificationRequired","setMFAVerificationError","challengeName","sendMFASelectionAnswer","completeChallengeAndRedirect","verifiedContact","verified","requestedPath","requestedPathVal","from","isHideLogin","failedLogin","forgotPasswordVerification","MFAVerificationRequired","submitForms","MFAVerificationError","getPaperAccounts","getMargin","queryKey","queryFn","defaultQueryOptions","isActive","createBrowserHistory","goBack","utm_key","promise","ROUTE_ALPACA_CONNECT_SUBMIT","ROUTE_ALPACA_CONNECT_APP","URL_DOCS_ACCOUNT_ACTIVITIES","URL_DISCLOSURES","MenuLabel","variableLabels","accountType","interpolatedLabel","OptGroup","Sider","SubMenu","Menu","Divider","MenuLeft","ownProps","layoutState","openKeys","collapsed","menuCollapsed","themeLight","settingsOpened","paperAccount","handleClick","isMobile","setLayoutState","menuMobileOpened","selectedKeys","onOpenChange","setOpenKeys","getActiveMenuItem","eligibleItems","getPath","activeMenuItem","renderMenuItem","modal","rel","showModal","New","onCollapse","parents","nextProps","Array","prototype","call","getElementsByClassName","elem","menuItem","subMenuTitle","generateMenuPartitions","generateMenuItem","indexKey","interpolatedTitle","interpolatedUrl","subitem","menuItems","paramsMobile","collapsible","paramsDesktop","breakpoint","menuStyle","menuClassName","liveActs","paperActs","accountLabel","isOnboarding","currentYear","getFullYear","onBreakpoint","broken","v","act","isBrowser","bordered","isExternal","MenuTop","keyPath","random","newProps","selector","isMenuTop","AppMenu","useSelector","toggleOpen","LayoutState","qs","storageParams","mergedParams","merge","booleanMergedParams","updateBodyClass","bootstrapLayoutSettings","classNames","PureComponent","AntContent","AntLayout","Content","AntHeader","Header","enquireScreen","child","enquireHandler","mobile","headerContent","LoadableChild","cond","fallback","stubTrue","trackingID","GOOGLE_ANALYTICS_ID","ReactGA","initialize","pageview","useGetCryptoEnabled","getDetails","setInfos","canLimitedFund","alpha3","useLock","locked","setLocked","lock","unlock","toggle","lockFor","lockUntil","useGetPositions","getPositions","useGetOrderbooks","orderbooks","useGetPosition","getPosition","useGetOrders","getOrders","useGetCryptoSnapshots","snapshots","queued","cancelled","len","didExpire","meta","useGetAccessKeys","getAccessKeys","access_keys","useGetCountries","setCountries","local","c","countriesRaw","alpha3ToName","nameToAlpha3","useGetTrustedContact","getTrustedAccount","trusted_contact","useGetActivities","activityTypes","getActivities","achRelationships","useGetWatchlists","getWatchlists","watchlists","useGetWatchlist","getWatchlist","watchlist","useGetQuotes","getIpAddress","useGetIpAddress","ipAddress","setIpAddress","ip_address","isAxiosError","_setLoading","setFormInvalid","setUpdatingContent","setActiveDialog","deleteDialogForm","addSubmitForm","deleteSubmitForm","isLoading","invalidForms","isUpdatingContent","activeDialog","dialogForms","menuShadow","_setPasswordWasReset","setAccountVerificationRequired","setResentAccountVerification","setAccountVerificationError","Amplify","configure","identityPoolId","COGNITO_IDENTITY_POOL_ID","COGNITO_REGION","userPoolId","COGNITO_USER_POOL_ID","userPoolWebClientId","COGNITO_CLIENT_ID","mandatorySignIn","cookieStorage","domain","hostname","secure","bucket","COGNITO_BUCKET","refreshAccountInfo","getCookieValue","pop","setDomainJWT","cognitoAccountIdAttr","accountEmail","cognitoAccountEmail","retryGbEmail","retryCognitoEmail","age","date_of_birth","algoId","ownerRefId","sha1","substring","traits","createdAt","apexApprovalStatus","apex_approval_status","refId","buyingPower","buying_power","portfolio_value","transfersBlocked","transfers_blocked","avatar","referrerCampaignName","referrerCampaignSource","referrerCampaignMedium","referrerURL","jwt","passwordWasReset","accountVerificationRequired","accountVerificationError","resentAccountVerification","emailUpdateVerificationRequired","patchDetails","setUserConfigurations","getPathForProduct","getUserConfigurations","patchFinancialProfile","patchEmploymentStatus","cancelOrders","allow_out_of_markets","orderID","postTrustedAccount","getNonIdentityAccountDocumentURL","documentID","getNonIdentityAccountDocuments","subtract","getAccountDocuments","uploadAccountDocument","content","doc_type","doc_sub_type","fetchAccountAgreement","responseType","confirmEmail","getCountryOfCitizenship","addSymbolToWatchlist","removeSymbolFromWatchlist","createWatchlist","paperAccountID","queryParams","accessKeyID","createNewAccessKey","days","setTime","toUTCString","nameEQ","cookies","i"],"mappings":"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T,cACA,WAAM,KACN,eACA,OAAI,KACJ,eACA,eACA,gB,KACA,KACA,e,KACA,KACA,cACA,mBACA,oBACA,cACA,UAAM,KACN,YACA,gBAAY,KACZ,gBAAU,KACV,eAAQ,KACR,mBAAgB,K,KAChB,KACA,WAAQ,KACR,kBACA,cACA,YACA,oBACA,cACA,cACA,2BAAoB,KACpB,uBAAa,GAAD,EACZ,uBAAa,KACb,oBAAO,KACP,oBACA,2BAAmB,KACnB,wBACA,gBACA,iBACA,WACA,kBAAc,KACd,kBAAe,KACf,mBAAW,KACX,gBAAa,KACb,iBACA,iBACA,kBACA,cAAW,KACX,UAAO,KACP,iBACA,uBAAc,KACd,sBAAO,KACP,uBACA,eACA,WACA,eAAW,KACX,aAAK,KACL,WACA,kBAAe,KACf,YAAS,KACT,eACA,e,IACA,KACA,iBACA,qBACA,aACA,gBACA,gBAAa,K,KACb,KACA,oBAAiB,KACjB,oBACA,kBACA,mBACA,mBACA,iBACA,qBACA,kBAAe,KACf,uBACA,kBACA,kBAAe,KACf,gBAAY,KACZ,iBAAc,KACd,cAAU,KACV,uBACA,wBAAoB,KACpB,mBACA,kBACA,aAAU,KACVK,SAAA,KACA,yBAAqB,KACrB,mBAAY,KACZ,iBAAU,KACV,aAAK,KACL,cACA,kBAAW,KACX,oBAAM,KACN,gBACA,SAAM,K,IACN,KACA,eACA,e,KACA,KACA,iB,KACA,K,KACA,KACA,gBAAQ,KACR,YAAK,KACL,WAAO,KACP,WAAM,KACN,YACA,aACA,Y,IACA,KACA,a,KACA,KACA,cACA,cAAS,KACT,mBAAQ,GAAD,EACP,kBAAY,KACZ,WAAM,KACN,mBACA,iBACA,aACA,WACA,gB,KACA,KACA,eAAW,GAAD,EACV,eAAU,KACV,gBACA,WACA,kBAAY,K,IACZ,KACA,cACA,cACA,e,KACA,KACA,gBACA,WAAQ,KACR,SAAK,KACL,sBAAW,GAAA56C,EACX,qBAAY,KACZ,oBAAa,KACb,gBAAY,KACZ,Y,IACA,KACA,eACA,gBACA,YAAQ,KACR,gBACA,W,KACA,KACA,iBACA,UAAO,KACP,cACA,WAAQ,KACR,mBACA,eACA,iBACA,WACA,aAAO,KACP,YACA,mBAAW,KACX,kBAAM,KACN,gBACA,WACA,WACA,WAAO,KACP,e,KACA,KACA,WAAO,KACP,e,KACA,KACA,WACA,qBAAW,KACX,sBAAO,KACP,aACA,iBACA,YACA,mBAAgB,KAChB,eACA,MAAG,KACH,eAAO,GAAAA,EACP,cAAU,KACV,eAAW,KACX,eAAQ,KACR,aAAO,K,IACP,KACA,WACA,cACA,iBACA,YACA,WACA,YAAQ,KACR,kBAAa,KACb,iBACA,kBACA,iBACA,YACA,cACA,YAAM,KACN,aAAU,GAAAA,EACV,aAAM,KACN,eAAK,KACL,WAAQ,GAAAA,EACR,iB,KACA,KACA,WAAQ,GAAAA,E,KACR,K,IACA,KACA,YACA,WAAI,K,IACJ,KACA,YACA,WACA,YACA,W,GACA,KACA,WAAQ,KACR,eACA,eACA,c,KACA,KACA,WACA,SAAM,KACN,iBAAQ,KACR,iBACA,YAAQ,KACR,iBAAS,KACT,YACD,UACD,OAAQ,KACN,kBAAa,GAAAA,EACb,YACA,aACA,Y,OAEA,CACA,iBACA,sBAAe,KACf,yBACA,oBAAiB,KACjB,qBACA,gBACA,gBAAW,KACX,mBACA,uBAAoB,KACpB,kBAAW,KACX,oBACA,mBACA,eACA,gBAAa,KACb,0BACA,eACA,mBACA,mBACA,eAAY,KACZ,iBACA,uBAAgB,KAChB,eACA,iBAAc,KACd,2BACA,gBACA,oBACA,oBACA,gBAAa,KACb,kBACA,sBAAiB,KACjB,kBAAc,KACd,gBAAa,KACb,cAAS,KACT,iBACA,qBAAgB,KAChB,qBACA,kBACA,iBACA,aACA,oBACA,eAAY,KACZ,gBAAU,KACV,aAAS,KACT,iBAAU,KACV,kBAAY,GAAD,EACX,gBAAQ,GAAD,EACP,kBACA,cACA,eACA,SAAK,KACL,UAAO,KACP,WACA,gBAAa,KACb,iBAAU,KACV,gBAAY,KACZ,WACA,WACA,cAAW,KACX,YAAS,KACT,cACA,WAAM,KACN,eACA,OAAI,KACJ,eACA,eACA,gB,KACA,KACA,e,KACA,KACA,cACA,mBACA,oBACA,cACA,UAAM,KACN,YACA,gBAAY,KACZ,gBAAU,KACV,eAAQ,KACR,mBAAgB,K,KAChB,KACA,WAAQ,KACR,kBACA,cACA,YACA,oBACA,cACA,cACA,2BAAoB,KACpB,uBAAa,GAAD,EACZ,uBAAa,KACb,oBAAO,KACP,oBACA,2BAAmB,KACnB,wBACA,gBACA,iBACA,WACA,kBAAc,KACd,kBAAe,KACf,mBAAW,KACX,gBAAa,KACb,iBACA,iBACA,kBACA,cAAW,KACX,UAAO,KACP,iBACA,uBAAc,KACd,sBAAO,KACP,uBACA,eACA,WACA,eAAW,KACX,aAAK,KACL,WACA,kBAAe,KACf,YAAS,KACT,eACA,e,IACA,KACA,iBACA,qBACA,aACA,gBACA,gBAAa,K,KACb,KACA,oBAAiB,KACjB,oBACA,kBACA,mBACA,mBACA,iBACA,qBACA,kBAAe,KACf,uBACA,kBACA,kBAAe,KACf,gBAAY,KACZ,iBAAc,KACd,cAAU,KACV,uBACA,wBAAoB,KACpB,mBACA,kBACA,aAAU,KACV46C,SAAA,KACA,yBAAqB,KACrB,mBAAY,KACZ,iBAAU,KACV,aAAK,KACL,cACA,kBAAW,KACX,oBAAM,KACN,gBACA,SAAM,K,IACN,KACA,eACA,e,KACA,KACA,iB,KACA,K,KACA,KACA,gBAAQ,KACR,YAAK,KACL,WAAO,KACP,WAAM,KACN,YACA,aACA,Y,IACA,KACA,a,KACA,KACA,cACA,cAAS,KACT,mBAAQ,GAAD,EACP,kBAAY,KACZ,WAAM,KACN,mBACA,iBACA,aACA,WACA,gB,KACA,KACA,eAAW,GAAD,EACV,eAAU,KACV,gBACA,WACA,kBAAY,K,IACZ,KACA,cACA,cACA,e,KACA,KACA,gBACA,WAAQ,KACR,SAAK,KACL,sBAAW,GAAA56C,EACX,qBAAY,KACZ,oBAAa,KACb,gBAAY,KACZ,Y,IACA,KACA,eACA,gBACA,YAAQ,KACR,gBACA,W,KACA,KACA,iBACA,UAAO,KACP,cACA,WAAQ,KACR,mBACA,eACA,iBACA,WACA,aAAO,KACP,YACA,mBAA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","file":"static/js/main.010ce15e.chunk.js","sourcesContent":["import axios from \"axios\";\nimport { getCookie, setCookie } from \"src/lib/cookies\";\n\nconst paciamInstance = axios.create({\n baseURL: window.env.PACIAM_URL,\n});\n\nconst SECS_IN_DAY = 86400;\n\ntype PaciamSession = {\n access_token: string;\n refresh_token: string;\n refresh_expires_in: number;\n access_expires_in: number;\n account_source: string;\n};\n\nexport const paciamLogin = async (\n username: string,\n password: string\n): Promise => {\n const resp = await paciamInstance.post(\"/authenticate\", {\n email: username,\n s: password,\n });\n const data: PaciamSession = resp.data;\n\n if (data.account_source === \"\" || data.account_source === \"brokerdash\") {\n return data;\n }\n\n parsePaciamSession(data);\n return data;\n};\n\nexport const getPaciamJwt = async (): Promise => {\n const paciamAccessToken = getCookie(\"paciamAccessToken\");\n if (paciamAccessToken) return paciamAccessToken;\n\n const paciamRefreshToken = getCookie(\"paciamRefreshToken\");\n\n const resp = await paciamInstance.post(\"/authenticate/refresh\", {\n refresh_token: paciamRefreshToken,\n });\n const data: PaciamSession = resp.data;\n parsePaciamSession(data);\n\n return resp.data.access_token;\n};\n\nconst parsePaciamSession = (sess: PaciamSession) => {\n const {\n access_token,\n access_expires_in,\n refresh_token,\n refresh_expires_in,\n } = sess;\n setCookie(\"paciamAccessToken\", access_token, access_expires_in / SECS_IN_DAY);\n setCookie(\n \"paciamRefreshToken\",\n refresh_token,\n refresh_expires_in / SECS_IN_DAY\n );\n};\n\nexport {};\n","import instance from \"..\";\n\nexport interface Asset {\n id: string;\n class: string;\n exchange: string;\n symbol: string;\n name: string;\n status: string;\n tradable: boolean;\n marginable: boolean;\n maintenance_margin_requirement: number;\n shortable: boolean;\n easy_to_borrow: boolean;\n fractionable: boolean;\n min_order_size: string;\n min_trade_increment: string;\n price_increment: string;\n}\n\n// fetch the asset list\nexport const getAssets = async (): Promise => {\n const res = await instance.get(\"/assets\");\n return res.data;\n};\n\n// fetch the asset list\nexport const getAsset = async (symbol: string): Promise => {\n const res = await instance.get(`/assets/${symbol}`);\n return res.data;\n};\n","import Spinner from \"../../../../../components/common/spinner\";\n\nimport React, { useEffect, useState, useContext } from \"react\";\n\nimport AmplitudeProvider from \"src/AmplitudeProvider\";\n\nimport {\n getCashTransformer,\n getPrettyCash,\n} from \"../../../../../utils/formatting\";\n\nimport {\n createAchTransfer,\n deleteAchRelationship,\n} from \"src/v2-deprecated/api/rest/banking\";\n\nimport {\n Text,\n Box,\n Image,\n VStack,\n Button,\n useToast,\n Flex,\n InputGroup,\n Input,\n Icon,\n InputRightElement,\n FormControl,\n FormErrorMessage,\n} from \"@chakra-ui/react\";\n\nimport {\n BankingContext,\n PendingRelationshipType,\n TransferDirection,\n} from \"../../\";\n\nimport {\n usePlaid,\n useGetBankInstitution,\n useMutationRequest,\n} from \"src/v2-deprecated/api/hooks\";\n\nimport { RiCloseCircleLine } from \"react-icons/ri\";\nimport { useForm, Controller } from \"react-hook-form\";\nimport { getCashWithdrawable } from \"../../../../../../pages/Dashboard/Product/BrokerageAccount/Banking/BankingContainer/CurrencyCloud/constants\";\n\ninterface Fields {\n amount: string;\n}\n\n// todo: make a bit more dynamic & modular; cleanup\nexport const Ach = () => {\n const toast = useToast();\n const ctx = useContext(BankingContext);\n\n const [submitCheck, setSubmitCheck] = useState(false);\n const [withdrawable, setWithdrawable] = useState(0);\n const [btnEnabled, setBtnEnabled] = useState(true);\n\n const { open: onOpenPlaid, ready } = usePlaid(ctx.account, {\n onExit: () => {\n ctx.onBeforeClose();\n ctx.setTransferType(null);\n },\n onSuccess: () => {\n ctx.setRelationshipPending(true, PendingRelationshipType.ADDED);\n\n toast({\n title: \"Creating bank relationship...please wait\",\n status: \"success\",\n duration: 5000,\n containerStyle: { zIndex: 999999 },\n });\n },\n });\n\n const isDeposit = ctx.transferDirection === TransferDirection.INCOMING;\n const relationshipExists =\n ctx.relationships &&\n ctx.relationships.length > 0 &&\n ctx.relationships[0].status !== \"REJECTED\";\n\n const { institution } = useGetBankInstitution(\n (relationshipExists && ctx.relationships[0].plaid_institution) || \"\",\n \"institution\",\n { enabled: Boolean(relationshipExists) }\n );\n\n const { control, watch, setValue } = useForm();\n\n // real-time variables\n const amountString = watch(\"amount\");\n const amount = amountString\n ? Number(amountString.replace(/[^0-9.]/g, \"\"))\n : 0;\n const withdrawableString = getPrettyCash(withdrawable, { acceptZero: true });\n const isWithdrawalInvalid = !isDeposit && amount > 0 && amount > withdrawable;\n const isConfirmDisabled = isDeposit\n ? amount <= 0\n : amount <= 0 || withdrawable < amount;\n\n // used in the rendering of the \"to\" and \"from\" cards\n const infos = [\n {\n imgSrc: \"data:image/png;base64,\".concat(institution?.logo || \"\"),\n label: relationshipExists && ctx.relationships[0].account_name,\n },\n {\n imgSrc: \"/resources/images/logo-collapsed.svg\",\n label: `Alpaca Account ${ctx.account?.account_number}`,\n },\n ];\n\n const { mutate: createTransfer } = useMutationRequest(\n () => {\n setBtnEnabled(false);\n return createAchTransfer(ctx.account?.id || \"\", {\n transfer_type: \"ach\",\n direction: isDeposit ? \"INCOMING\" : \"OUTGOING\",\n relationship_id: ctx.relationships?.[0].id || \"\",\n amount: String(amount),\n });\n },\n {\n onSuccess: () => {\n if (isDeposit) {\n // track in Amplitude\n AmplitudeProvider.dispatch(\n \"deposit_submitted_v2\",\n JSON.stringify({\n amount: amount ?? \"-\",\n })\n );\n }\n ctx.refetch();\n ctx.onBeforeClose();\n setBtnEnabled(true);\n\n toast({\n title: \"Transfer created\",\n status: \"success\",\n duration: 5000,\n containerStyle: { zIndex: 999999 },\n });\n },\n }\n );\n\n const { mutate: deleteRelationship } = useMutationRequest(\n () =>\n deleteAchRelationship(\n ctx.account?.id || \"\",\n ctx.relationships?.[0].id || \"\"\n ),\n {\n onSuccess: () => {\n ctx.setTransferType(null);\n ctx.setNextStep(false);\n ctx.setRelationshipPending(true, PendingRelationshipType.DELETED);\n\n toast({\n title: \"Bank relationship deleted\",\n status: \"success\",\n duration: 5000,\n containerStyle: { zIndex: 999999 },\n });\n },\n }\n );\n\n // fetch and set withdrawable amount\n useEffect(() => {\n getCashWithdrawable(ctx.account?.id, (value: string) =>\n setWithdrawable(Number(value))\n );\n }, [ctx.account]);\n\n // pop plaid modal if no relationship exists\n useEffect(() => {\n if (ready && !relationshipExists) {\n // close the transfer modal to avoid conflict w plaid modal\n ctx.onBeforeClose();\n\n // open plaid modal\n onOpenPlaid();\n }\n }, [ready, relationshipExists]);\n\n const RemoveRelIcon = () => (\n \n deleteRelationship({})}\n />\n \n );\n\n if (!ready || (ready && !relationshipExists)) {\n return ;\n }\n\n return (\n <>\n \n Enter an amount\n \n {ctx.account?.admin_configurations?.allow_instant_ach && (\n \n \n Your account qualifies for Instant Funding up to $1,000, one settled\n transaction at a time.\n \n \n )}\n \n \n (\n \n )}\n />\n {!isDeposit && (\n \n {withdrawableString}\n  available to withdraw\n \n }\n />\n )}\n \n \n {isWithdrawalInvalid &&\n `Cannot withdraw more than ${withdrawableString}. Some deposits take up to\n 7 days to settle, after which they will be made available for\n withdrawal`}\n \n \n \n {[\"$500\", \"$1,000\", \"$10,000\"].map((amount, index) => (\n {\n setValue(\"amount\", amount);\n }}\n >\n {amount}\n \n ))}\n \n \n \n From:\n \n \n \n \n {infos[isDeposit ? 0 : 1].label}\n \n {isDeposit && }\n \n \n \n \n To:\n \n \n \n \n {infos[isDeposit ? 1 : 0].label}\n \n {!isDeposit && }\n \n \n \n {submitCheck ? (\n \n {`Initiate ${\n isDeposit ? \"deposit\" : \"withdrawal\"\n } of ${amountString}?`}\n \n \n createTransfer(\n {},\n {\n onSuccess: () => {\n ctx.setTransferType(null);\n ctx.onBeforeClose();\n },\n onError: () => {\n setBtnEnabled(true);\n },\n }\n )\n }\n flexGrow={1}\n mr=\"1rem\"\n >\n Yes\n \n setSubmitCheck(false)}\n >\n Cancel\n \n \n \n ) : (\n setSubmitCheck(true)}\n disabled={isConfirmDisabled}\n >\n Confirm\n \n )}\n \n

\n Note: You will not be able to withdraw newly deposited money for 6\n business days. Alpaca partners with BMO Harris Bank to process ACH\n transfers.\n

\n \n );\n};\n\nexport default Ach;\n","import Spinner from \"../../../../../components/common/spinner\";\n\nimport React, { useContext, useMemo, useState, useEffect } from \"react\";\n\nimport {\n getCashTransformer,\n getISO3166Alpha3FormatMapping,\n getPrettyCash,\n} from \"../../../../../utils/formatting\";\n\nimport {\n getBanks,\n deleteBank,\n createBank,\n uploadBankStatement,\n} from \"../../../../../api/rest/account\";\n\nimport {\n Text,\n Box,\n Link,\n Flex,\n FormControl,\n Select,\n Switch,\n Input,\n useToast,\n Button,\n InputGroup,\n Image,\n VStack,\n Icon,\n InputRightElement,\n FormErrorMessage,\n Center,\n IconButton,\n} from \"@chakra-ui/react\";\n\nimport { Field } from \"src/v2-deprecated/components/form\";\nimport { createAchTransfer } from \"../../../../../api/rest/banking\";\nimport { RiCloseCircleLine } from \"react-icons/ri\";\nimport { useForm, Controller } from \"react-hook-form\";\nimport { getCashWithdrawable } from \"../../../../../../pages/Dashboard/Product/BrokerageAccount/Banking/BankingContainer/CurrencyCloud/constants\";\nimport { useRequest, useMutationRequest } from \"../../../../../api/hooks\";\nimport { BankingContext, TransferDirection } from \"../../\";\nimport iso3166 from \"iso-3166-2\";\nimport { useDropzone } from \"react-dropzone\";\nimport { DeleteIcon, DownloadIcon } from \"@chakra-ui/icons\";\n\nconst Deposit = () => {\n const { account } = useContext(BankingContext);\n\n const fields = useMemo(\n () => ({\n \"Bank Name\": \"BMO HARRIS BANK NA\",\n \"Bank Address\": \"111 W. Monroe Street Chicago, IL 60603\",\n \"Account Name\": \"Alpaca Securities LLC\",\n \"ABA Routing Number\": \"071 000 288\",\n \"Swift Code\": \"HATRUS44\",\n \"Account Number\": \"1636877\",\n \"Special Instructions\": (\n <>\n Please include the following text:\n
\n FFC LPCA-{account?.account_number}\n \n ),\n }),\n [account]\n );\n\n return (\n <>\n \n Via Wire Transfer\n \n \n \n {Object.keys(fields).map((key, index) => {\n const last = index === Object.keys(fields).length - 1;\n return (\n \n {key}\n \n );\n })}\n \n \n {Object.values(fields).map((value, index) => {\n const last = index === Object.values(fields).length - 1;\n return (\n \n {value}\n \n );\n })}\n \n \n \n
    \n
  • ACH takes 1-3 business days.
  • \n
  • \n Wire transfers take 3-4 days on average. Your bank may charge you\n for outgoing wires.\n
  • \n
\n
\n \n Make sure you fill in your account number in the special instructions\n field.\n \n \n Please contact{\" \"}\n \n support@alpaca.markets\n {\" \"}\n if you do not see your wire deposit in your account after: 2 business\n days for Domestic (US) wires or 7 business days for SWIFT\n (international) wires.\n \n \n );\n};\n\ninterface Fields {\n amount: string;\n name: string;\n account_number: string;\n bank_code: string;\n bank_code_type: \"ABA\" | \"BIC\";\n bank_statement: File;\n country: string;\n state_province: string;\n postal_code: string;\n city: string;\n street_address: string;\n additional_information: string;\n}\n\nconst Withdrawal = () => {\n const toast = useToast();\n const ctx = useContext(BankingContext);\n\n const [submitCheck, setSubmitCheck] = useState(false);\n const [withdrawable, setWithdrawable] = useState(0);\n const [international, setInternational] = React.useState(false);\n\n const {\n control,\n register,\n watch,\n reset,\n setValue,\n setError,\n handleSubmit,\n getValues,\n formState: { errors },\n } = useForm();\n\n const { data: banks, refetch } = useRequest(\n \"banks\",\n () => getBanks({ accountID: ctx.account?.id || \"\" }),\n {\n staleTime: 10000,\n refetchInterval: 10000,\n }\n );\n\n const dropzone = useDropzone({\n maxFiles: 1,\n maxSize: 20000000,\n onDrop: (acceptedFiles: File[]) => {\n if (acceptedFiles.length === 0) {\n return;\n }\n\n setValue(\"bank_statement\", acceptedFiles[0]);\n },\n onDropRejected: (fileRejection) => {\n if (\n fileRejection.length > 0 &&\n fileRejection[0]?.errors[0]?.code === \"file-too-large\"\n ) {\n setError(\"bank_statement\", { message: \"File must be less than 20MB\" });\n }\n },\n });\n\n const bank = banks?.[0];\n const isDeposit = ctx.transferDirection === TransferDirection.INCOMING;\n const amountString = watch(\"amount\");\n const amount = amountString\n ? Number(amountString.replace(/[^0-9.]/g, \"\"))\n : 0;\n const withdrawableString = getPrettyCash(withdrawable, { acceptZero: true });\n const isWithdrawalInvalid = !isDeposit && amount > 0 && amount > withdrawable;\n const isConfirmDisabled = isDeposit\n ? amount <= 0\n : amount <= 0 || withdrawable < amount;\n const bankStatement = watch(\"bank_statement\");\n\n const infos = useMemo(\n () => [\n {\n imgSrc: \"/resources/images/bank.svg\",\n label: bank && bank?.name,\n },\n {\n imgSrc: \"/resources/images/logo-collapsed.svg\",\n label: `Alpaca Account ${ctx.account?.account_number}`,\n },\n ],\n [bank]\n );\n\n const { mutate: createTransfer } = useMutationRequest(\n () =>\n createAchTransfer(ctx.account?.id || \"\", {\n amount: String(amount),\n bank_id: bank?.id || \"\",\n direction: isDeposit ? \"INCOMING\" : \"OUTGOING\",\n transfer_type: \"wire\",\n }),\n {\n onSuccess: () => {\n // we do this in-case they revisit the modal quickly\n refetch();\n\n // refetch\n ctx.refetch();\n ctx.onBeforeClose();\n ctx.setTransferType(null);\n\n // let them know it worked\n toast({\n duration: 5000,\n isClosable: true,\n title: \"Success\",\n status: \"success\",\n description: `Your ${\n isDeposit ? \"deposit\" : \"withdrawal\"\n } has been initiated.`,\n });\n },\n }\n );\n\n const { mutate: deleteRelationship } = useMutationRequest(\n () =>\n deleteBank({\n bankID: bank?.id || \"\",\n accountID: ctx.account?.id || \"\",\n }),\n {\n onSuccess: () => {\n // we do this in-case they revisit the modal quickly\n refetch();\n\n // clear states\n ctx.setTransferType(null);\n ctx.setNextStep(false);\n\n // let them know it worked\n toast({\n duration: 3000,\n isClosable: true,\n status: \"success\",\n title: \"Bank removed\",\n });\n },\n }\n );\n\n const { mutate: createBankMutation } = useMutationRequest(\n (values: any) =>\n Promise.all([\n uploadBankStatement({\n accountID: ctx.account?.id || \"\",\n file: values.bank_statement,\n }),\n createBank({\n accountID: ctx.account?.id || \"\",\n bank: { ...values, bank_statement: undefined },\n }),\n ]),\n {\n onSuccess: () => {\n // we do this in-case they revisit the modal quickly\n refetch();\n\n // let them know it worked\n toast({\n duration: 3000,\n isClosable: true,\n status: \"success\",\n title: \"Bank added\",\n });\n },\n }\n );\n\n const handleRemoveBankStatement = (\n evt: React.MouseEvent\n ) => {\n evt.stopPropagation();\n const values = { ...getValues(), bank_statement: undefined };\n reset(values);\n };\n\n // fetch and set withdrawable amount\n useEffect(() => {\n getCashWithdrawable(ctx.account?.id, (value: string) =>\n setWithdrawable(Number(value))\n );\n }, [ctx.account]);\n\n // set id if no bank exists\n useEffect(() => {\n if (!bank) {\n ctx.setWizardFormId(\"form--wire-withdrawal\");\n } else {\n // null out the form id\n ctx.setWizardFormId(null);\n }\n }, [bank]);\n\n const RemoveRelIcon = () => (\n \n deleteRelationship({})}\n />\n \n );\n\n const countryList = useMemo(() => {\n const iso3166Alpha3FormatMapping = getISO3166Alpha3FormatMapping();\n return Object.keys(iso3166.data)\n .map((code) => {\n return {\n key: iso3166Alpha3FormatMapping[code],\n label: iso3166.data[code].name,\n };\n })\n .filter((value) => value.key !== \"USA\")\n .sort((a, b) => (a.label > b.label ? 1 : -1));\n }, []);\n\n if (!banks) {\n return ;\n }\n\n return bank ? (\n <>\n \n Enter an amount\n \n \n \n (\n \n )}\n />\n \n {withdrawableString}\n  available to withdraw\n \n }\n />\n \n \n {isWithdrawalInvalid &&\n `Cannot withdraw more than ${withdrawableString}. Some deposits take up to\n 7 days to settle, after which they will be made available for\n withdrawal`}\n \n \n \n {[\"$500\", \"$1,000\", \"$10,000\"].map((amount, index) => (\n {\n setValue(\"amount\", amount);\n }}\n >\n {amount}\n \n ))}\n \n \n \n From:\n \n \n \n \n {infos[isDeposit ? 0 : 1].label}\n \n {isDeposit && }\n \n \n \n \n To:\n \n \n \n \n {infos[isDeposit ? 1 : 0].label}\n \n {!isDeposit && }\n \n \n \n {submitCheck ? (\n \n {`Initiate ${\n isDeposit ? \"deposit\" : \"withdrawal\"\n } of ${amount}?`}\n \n \n setSubmitCheck(false)}\n >\n Cancel\n \n \n \n ) : (\n setSubmitCheck(true)}\n disabled={isConfirmDisabled}\n >\n Confirm\n \n )}\n \n

\n Note: You will not be able to withdraw newly deposited money for 6\n business days. Alpaca partners with BMO Harris Bank to process ACH\n transfers.\n

\n \n ) : (\n \n createBankMutation({\n ...values,\n bank_code_type: international ? \"BIC\" : \"ABA\",\n })\n )}\n >\n \n Via Wire Transfer\n \n \n \n setInternational(!international)}\n isChecked={international}\n />\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n {bankStatement?.name ? (\n }\n onClick={handleRemoveBankStatement}\n position=\"relative\"\n zIndex={1}\n mx=\"1em\"\n />\n ) : (\n \n )}\n
\n {bankStatement?.name ||\n \"Drag and drop here, or click to select file.\"}\n
\n \n \n
\n {international && (\n <>\n \n \n \n {countryList.map(({ key, label }) => (\n \n ))}\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n )}\n {international && (\n \n \n \n Funds have to be received and sent in USD. We do not convert funds\n or reimburse for any conversion that may inadvertently happen.\n \n \n Alpaca does not accept wire transfers from, or issue wire\n transfers to, third parties. As such, the name and address on the\n account of both the initiator and recipient of wire transfers\n coming to or being sent from Alpaca must be the same.\n \n \n Most international banks use an intermediary/correspondent. On\n outgoing wires, we need info on both the\n intermediary/correspondent bank as well as the FFC to the\n customer’s bank and their account there. We usually use SWIFT and\n not IBAN on outgoing wires.\n \n \n Neither the intermediary nor the customer bank should be on our\n restricted country list.\n \n \n International wires can take up to 7 days for receipt/delivery\n depending on the intermediary bank used by the customer’s bank.\n \n \n The most common reasons for delays or issues with international\n wires are due to:\n \n Restricted countries\n \n Translation differences in names or addresses\n \n \n Missing data such as names, addresses, account numbers due to\n the format used by the customer’s bank or the intermediary\n bank\n \n \n \n \n \n \n If you have a bank account within the United States:\n \n \n You can deposit and withdraw using ACH by linking your bank in the\n United States.\n \n \n \n )}\n \n );\n};\n\nexport const Wire = () =>\n useContext(BankingContext).wireDirection === TransferDirection.INCOMING ? (\n \n ) : (\n \n );\n\nexport default Wire;\n","import styled from \"@emotion/styled\";\n\nimport React, { useContext } from \"react\";\n\nimport { Box, Text } from \"@chakra-ui/react\";\nimport { BankingContext } from \"../../\";\nimport { CurrencyCloud as CC } from \"src/pages/Dashboard/Product/BrokerageAccount/Banking/BankingContainer/CurrencyCloud\";\n\nconst Container = styled(Box)`\n & > div {\n margin: 0 !important;\n }\n\n & > div > div {\n padding: 0 !important;\n }\n\n & > div > div > div {\n border: none !important;\n background: var(--chakra-colors-gray-20) !important;\n padding: 1rem !important;\n }\n\n [class*=\"constants__CCModalContainer\"] {\n max-width: 100% !important;\n }\n\n [class*=\"constants__CopyButton\"] {\n display: none !important;\n }\n\n [class*=\"constants__CCTextBold\"] {\n display: none !important;\n }\n\n [class*=\"constants__DepositInfoRow\"] > [class*=\"constants__DepositInfo\"] {\n flex-direction: row;\n text-align: right;\n }\n\n [class*=\"constants__DepositInfo\"] > span {\n white-space: nowrap;\n margin-right: 1rem;\n text-align: left;\n flex-grow: 1;\n }\n\n [class*=\"constants__CCTextNormal\"]:last-of-type {\n margin-bottom: 0 !important;\n }\n\n [class*=\"constants__ButtonRow\"] {\n background: transparent !important;\n padding: 0 !important;\n }\n\n .ant-input-affix-wrapper {\n margin-top: 2rem;\n margin-bottom: 2rem !important;\n }\n`;\n\nexport const CurrencyCloud = () => {\n const { account, transferDirection } = useContext(BankingContext);\n\n return (\n \n \n Local Transfer (powered by CurrencyCloud)\n \n \n \n );\n};\n\nexport default CurrencyCloud;\n","import React, { useMemo, useContext, useEffect } from \"react\";\n\nimport {\n useGetAccountDetails,\n useGetCountryInfos,\n useGetAchRelationshipsPending,\n} from \"src/v2-deprecated/api/hooks\";\n\nimport { Spinner } from \"../../../../components/common/spinner\";\nimport { Wire, Ach, CurrencyCloud } from \"./methods\";\nimport { BankingContext, TransferDirection } from \"../\";\nimport { Box, Button, Text, Flex, Checkbox } from \"@chakra-ui/react\";\n\nexport const TransferType = {\n Ach: \"ach\",\n CurrencyCloud: \"currency-cloud\",\n Wire: \"wire\",\n} as const;\n\nexport type TransferType = typeof TransferType[keyof typeof TransferType];\n\ntype Option = {\n value: TransferType;\n label: string;\n subLabel: string;\n disabled?: boolean;\n};\n\nexport const Wizard = () => {\n const ctx = useContext(BankingContext);\n const isAchRelationshipsPending = useGetAchRelationshipsPending();\n\n const { infos } = useGetCountryInfos();\n\n // we need these for currency cloud\n const { details } = useGetAccountDetails(\n [\"banking\", ctx.account?.id],\n ctx.account?.id,\n { enabled: !!ctx.account?.id }\n );\n\n const depositTransferTypes: Record = useMemo(\n () => ({\n [TransferType.Ach]: {\n value: TransferType.Ach,\n label: isAchRelationshipsPending\n ? \"US Bank Account\"\n : `${\n !!ctx.relationships?.length ? \"Linked\" : \"Link\"\n } US Bank Account`,\n subLabel: isAchRelationshipsPending\n ? \"Pending bank relationship update, please wait...\"\n : \"Alpaca partners with Plaid to allow you to link your bank. Alpaca does not charge for ACH deposits.\",\n },\n [TransferType.CurrencyCloud]: {\n value: TransferType.CurrencyCloud,\n label: \"Local Transfer (Powered by CurrencyCloud)\",\n subLabel:\n \"Send funds to Alpaca’s bank account from your local country. Local transfers can reflect on your account same day.\",\n },\n [TransferType.Wire]: {\n value: TransferType.Wire,\n label: \"Send Funds to Alpaca\",\n subLabel:\n \"Send funds directly to Alpaca from your bank. ACH takes 1-3 business days. Wire transfers take 3-4 days on average. Your bank may charge you for outgoing wires.\",\n },\n }),\n [\n isAchRelationshipsPending,\n ctx.relationships,\n ctx.relationships?.[0]?.status,\n ]\n );\n\n const withdrawalTransferTypes: Record = useMemo(\n () => ({\n [TransferType.Ach]: {\n value: TransferType.Ach,\n label: isAchRelationshipsPending\n ? \"US Bank Account\"\n : `${\n !!ctx.relationships?.length ? \"Linked\" : \"Link\"\n } US Bank Account`,\n subLabel: isAchRelationshipsPending\n ? \"Pending bank relationship update, please wait...\"\n : \"Alpaca partners with Plaid to allow you to link your bank. Alpaca does not charge for ACH withdrawals.\",\n },\n [TransferType.CurrencyCloud]: {\n value: TransferType.CurrencyCloud,\n label: \"Local Transfer (Powered by CurrencyCloud)\",\n subLabel:\n \"Withdraw funds to the bank account in your local country. Local transfers can reflect on your account same day.\",\n },\n [TransferType.Wire]: {\n value: TransferType.Wire,\n label: \"Via Wire Transfer\",\n subLabel:\n \"Receive your funds via a wire transfer from Alpaca. ETA 1-7 business days. Intermediary and receving banks may charge extra fees.\",\n },\n }),\n [\n isAchRelationshipsPending,\n ctx.relationships,\n ctx.relationships?.[0]?.status,\n ]\n );\n\n const options = useMemo(\n () =>\n Object.values(\n ctx.transferDirection === TransferDirection.INCOMING\n ? depositTransferTypes\n : withdrawalTransferTypes\n ).filter(\n (option) =>\n // filter out currency cloud if not available\n option.value !== TransferType.CurrencyCloud ||\n infos[details?.country_of_tax_residence || \"\"]?.currencycloud_enabled\n ),\n [\n infos,\n details,\n depositTransferTypes,\n withdrawalTransferTypes,\n ctx.transferDirection,\n ]\n );\n\n // clear form id when transfer type changes\n useEffect(() => {\n if (!(ctx.transferType !== null && ctx.nextStep)) {\n ctx.setWizardFormId(null);\n }\n }, [ctx.transferType, ctx.nextStep]);\n\n // handle user going to previous step\n const onBack = () => {\n const back = ctx.transferType !== null && ctx.nextStep;\n\n ctx.setNextStep(false);\n ctx.setTransferType(null);\n\n if (!back) {\n ctx.disclosure.onClose();\n window.history.replaceState({}, \"\", window.location.pathname);\n }\n };\n\n return (\n \n \n {!ctx.relationships || !(details && Object.keys(infos).length) ? (\n \n ) : (\n \n {!ctx.nextStep && (\n \n Choose your preferred{\" \"}\n {ctx.transferDirection === TransferDirection.INCOMING\n ? \"deposit\"\n : \"withdrawal\"}{\" \"}\n method\n \n )}\n {ctx.transferType !== null && ctx.nextStep ? (\n \n {ctx.transferType === TransferType.Ach && }\n {ctx.transferType === TransferType.Wire && }\n {ctx.transferType === TransferType.CurrencyCloud && (\n \n )}\n \n ) : (\n options.map((option) => (\n ctx.setTransferType(option.value)}\n >\n \n \n \n \n \n {option.label}\n \n {option.subLabel}\n \n \n ))\n )}\n \n \n {!!ctx.wizardFormId && (\n \n )}\n {!(ctx.transferType !== null && ctx.nextStep) && (\n ctx.setNextStep(true)}\n disabled={\n (isAchRelationshipsPending &&\n ctx.transferType === TransferType.Ach) ||\n !(!ctx.nextStep && ctx.transferType !== null)\n }\n >\n Next\n \n )}\n \n \n )}\n \n \n );\n};\n\nexport default Wizard;\n","import moment from \"moment\";\n\nimport React, { useMemo, createContext, useState, useEffect } from \"react\";\n\nimport {\n Table,\n TableColumn,\n Button,\n Icon,\n Text,\n classes,\n Page,\n} from \"@alpacahq/ui\";\n\nimport {\n useGetAccount,\n useGetAchTransfers,\n useGetRapydTransfers,\n useGetAchRelationships,\n} from \"src/v2-deprecated/api/hooks\";\n\nimport { Account } from \"../../../api/rest/account\";\nimport { useDisclosure } from \"@chakra-ui/react\";\nimport { Wizard, TransferType } from \"./transfer/wizard\";\nimport { Transfer, AchRelationship } from \"../../../api/rest/banking\";\nimport { getPrettyCash, getPrettyDate } from \"../../../utils/formatting\";\n\nexport const TransferDirection = {\n INCOMING: \"INCOMING\",\n OUTGOING: \"OUTGOING\",\n} as const;\n\nexport type TransferDirection = typeof TransferDirection[keyof typeof TransferDirection];\n\nexport enum PendingRelationshipType {\n ADDED,\n DELETED,\n}\n\n// shared context for the transfer wizard\nexport type BankingContextFields = {\n account?: Account;\n disclosure: ReturnType;\n transferDirection: TransferDirection | undefined;\n wireDirection: TransferDirection | undefined;\n setTransferType: (type: TransferType | null) => void;\n setTransferDirection: (direction: TransferDirection | undefined) => void;\n setWireDirection: (direction: TransferDirection | undefined) => void;\n transferType: TransferType | null;\n wizardFormId: string | null;\n setWizardFormId: (id: string | null) => void;\n nextStep: boolean | null;\n setNextStep: (nextStep: boolean | null) => void;\n onBeforeClose: () => void;\n refetch: () => void;\n relationships: AchRelationship[];\n setRelationships: (relationships: AchRelationship[]) => void;\n relationshipPending: boolean;\n setRelationshipPending: (\n pending: boolean,\n type?: PendingRelationshipType\n ) => void;\n};\n\n// default to empty object (easier for children to null check fields)\nexport const BankingContext = createContext(\n {} as BankingContextFields\n);\n\nexport const Banking = () => {\n const { account } = useGetAccount();\n\n const [\n transferDirection,\n setTransferDirection,\n ] = useState();\n\n const [nextStep, setNextStep] = useState(false);\n const [wizardFormId, setWizardFormId] = useState(null);\n const [transferType, setTransferType] = useState(null);\n const [wireDirection, setWireDirection] = useState();\n const [relationships, setRelationships] = useState([]);\n const [relationshipPending, setRelationshipPending] = useState(false);\n\n // pre-populate local storage if trying to set relationship pending\n const onBeforeSetRelationshipPending = (\n pending: boolean,\n type?: PendingRelationshipType\n ) => {\n // save polling expiration to local storage\n localStorage.setItem(\n \"relationship:pending\",\n JSON.stringify({\n expires: Date.now() + 180000,\n type,\n })\n );\n\n // update state\n setRelationshipPending(pending);\n };\n\n // don't want to re-run this hook\n useGetAchRelationships(account?.id, [\"relationships\"], {\n enabled: !!account?.id,\n refetchInterval: 5000,\n staleTime: 5000,\n refetchIntervalInBackground: true,\n keepPreviousData: true,\n onSuccess: (data) => {\n setRelationships(data || []);\n },\n });\n\n const { achTransfers, refetch: refetchACH } = useGetAchTransfers(\n account?.id || \"\",\n \"ach-transfers\",\n {\n enabled: !!account?.id,\n }\n );\n\n const { rapydTransfers, refetch: refetchRapyd } = useGetRapydTransfers(\n account?.id || \"\",\n \"rapyd-transfers\",\n {\n enabled: !!account?.id,\n }\n );\n\n // refetch both ACH and Rapyd transfers\n const refetchTransfers = () => {\n refetchACH();\n refetchRapyd();\n };\n\n // transfer history rows\n const rows = useMemo(\n () =>\n // sort in descending created_at order\n (rapydTransfers?.concat(achTransfers || []) ?? []).sort((a, b) =>\n moment(b.created_at).diff(moment(a.created_at))\n ),\n [rapydTransfers, achTransfers]\n );\n\n // transfer history columns\n const columns = useMemo[]>(\n () => [\n { name: \"ID\", key: \"id\" },\n {\n name: \"Status\",\n key: \"status\",\n cellRenderer: ({ status }) => status?.toLowerCase() ?? \"-\",\n },\n { name: \"Type\", key: \"type\" },\n {\n name: \"Amount\",\n key: \"amount\",\n alignRight: true,\n cellRenderer: ({ amount, status, direction }) => {\n const color =\n status !== \"COMPLETE\"\n ? \"text-gray-500\"\n : // if incoming transfer, color is green\n // if outgoing transfer, color is red\n direction === TransferDirection.INCOMING\n ? \"text-emerald-500\"\n : \"text-rose-500\";\n\n // normalize the amount\n const value = Number(amount).toLocaleString(\"en-US\", {\n maximumFractionDigits: 2,\n minimumFractionDigits: 2,\n });\n\n return (\n
\n \n {getPrettyCash(value)}\n
\n );\n },\n },\n {\n name: \"Date\",\n key: \"created_at\",\n cellRenderer: ({ created_at }) =>\n getPrettyDate(moment(created_at).toDate().getTime()),\n },\n ],\n [rows]\n );\n\n // used to manage the transfer wizard state\n const disclosure = useDisclosure();\n\n // parse direction from url\n const direction = useMemo(() => {\n // if param exists we know the direction in advance\n const params = new URLSearchParams(window.location.search);\n const transfer = params.get(\"transfer\");\n\n // normalize\n if ([\"deposit\", \"withdraw\"].includes(transfer?.toLowerCase() || \"\")) {\n return transfer === \"deposit\"\n ? TransferDirection.INCOMING\n : TransferDirection.OUTGOING;\n }\n\n // default to state\n return transferDirection;\n }, [window.location.search]);\n\n useEffect(() => {\n if (direction) {\n setWireDirection(direction);\n setTransferDirection(direction);\n disclosure.onOpen();\n }\n }, []);\n\n // if transfers are loading, we aren't ready to show the table\n const ready = !!rapydTransfers && !!achTransfers;\n\n const onBeforeWizardOpen = (direction: TransferDirection) => {\n // set the direction for both wire and transfer\n setWireDirection(direction);\n setTransferDirection(direction);\n\n // pop the modal\n disclosure.onOpen();\n\n // human-readable direction\n const safeDirection =\n direction === TransferDirection.INCOMING ? \"deposit\" : \"withdraw\";\n\n // update the url to reflect the direction\n window.history.replaceState(\n {},\n \"\",\n `${window.location.pathname}?transfer=${safeDirection}`\n );\n };\n\n const onBeforeWizardClose = () => {\n // reset states\n setNextStep(false);\n setTransferType(null);\n\n // pop the modal\n disclosure.onClose();\n\n // remove the url param\n window.history.replaceState({}, \"\", window.location.pathname);\n };\n\n return (\n \n \n {disclosure.isOpen ? (\n \n ) : (\n onBeforeWizardOpen(TransferDirection.INCOMING)}\n >\n Deposit Funds\n ,\n onBeforeWizardOpen(TransferDirection.OUTGOING)}\n >\n Withdraw Funds\n ,\n ]}\n />\n )}\n \n \n );\n};\n\nexport default Banking;\n","import { createAction, createReducer } from \"redux-act\";\n\nconst REDUCER = \"userData\";\nconst NS = `@@${REDUCER}/`;\n\nconst _setUserData = createAction(`${NS}SET_USER_DATA`);\n\n\n// Export this reducer\nconst initialState = { loaded: false, data: {} };\nexport default createReducer(\n {\n [_setUserData]: (state, payload) => {\n return { ...payload };\n },\n },\n initialState\n);\n","const initialState = {};\n\nconst dataAgreementReducer = (state = initialState, action) => {\n switch (action.type) {\n case \"app/RECEIVE_DATA_AGREEMENT\":\n return {\n ...state,\n [action.payload.name]: {\n blob: action.payload.agreement,\n },\n };\n default:\n return state;\n }\n};\n\nexport default dataAgreementReducer;\n","import { createAction, createReducer } from \"redux-act\";\nimport { getAccountIdForProduct } from \"selectors\";\nimport api from \"api\";\n\nconst _setOAuthClients = createAction(\"@@oauth/SET_OAUTH_CLIENTS\");\n\nexport const listOAuthClients = () => (dispatch, getState) => {\n const accountId = getAccountIdForProduct(getState(), \"live\");\n\n dispatch(api.oauth.list({ accountId })).then((payload) =>\n dispatch(_setOAuthClients(payload))\n );\n};\n\nconst initState = {};\n\nexport default createReducer(\n {\n [_setOAuthClients]: (state, payload) => {\n return {\n ...state,\n clients: payload,\n };\n },\n },\n initState\n);\n","import { combineReducers } from \"redux\";\nimport { connectRouter } from \"connected-react-router\";\nimport { pendingTasksReducer } from \"react-redux-spinner\";\n\nimport app from \"./app\";\nimport auth from \"./auth/common\";\nimport login from \"./auth/login\";\nimport cognito from \"./auth/cognito\";\nimport accountList from \"./auth/accountList\";\nimport mfa from \"./auth/mfa\";\nimport profile from \"./profile\";\nimport userData from \"./userData\";\nimport oauthClients from \"./oauth/clients\";\n\nimport account from \"./account\";\nimport accountDocuments from \"./accountDocuments\";\nimport accessKeys from \"./accessKeys\";\nimport transfer from \"./transfer\";\nimport portfolio from \"./portfolio/portfolio\";\nimport position from \"./position/position\";\nimport order from \"./order/order\";\nimport profitloss from \"./profitloss/profitloss\";\nimport dataAgreements from \"./data-agreements\";\nimport trade from \"./trade/trade\";\nimport oauth from \"./oauth\";\nimport contest from \"./contest\";\nimport billing from \"./billing\";\nimport countryInfo from \"./countryInfo\";\n\n// Adds redux forms\nimport { reducer as formReducer } from \"redux-form\";\n\nconst createRootReducer = (history) =>\n combineReducers({\n router: connectRouter(history),\n pendingTasks: pendingTasksReducer,\n app,\n auth,\n cognito,\n accountList,\n login,\n mfa,\n profile,\n userData,\n account,\n accountDocuments,\n accessKeys,\n transfer,\n trade,\n portfolio,\n position,\n order,\n profitloss,\n dataAgreements,\n form: formReducer,\n oauth,\n oauthClients,\n contest,\n billing,\n countryInfo,\n });\n\nexport default createRootReducer;\n","import { routerMiddleware } from \"connected-react-router\";\nimport thunk from \"redux-thunk\";\nimport { applyMiddleware, createStore } from \"redux\";\nimport { composeWithDevTools } from \"redux-devtools-extension\";\nimport { Subject } from \"rxjs\";\n\nimport { history } from \"utils\";\nimport createRootReducer from \"reducers/index\";\n\nexport const actions = new Subject();\n\nconst dynamicMiddleware = (store) => (next) => (action) => {\n const result = next(action);\n actions.next([action, store.getState()]);\n return result;\n};\n\nconst router = routerMiddleware(history);\nconst middlewares = [dynamicMiddleware, router, thunk];\n\nconst isLogger = false;\n\nif (isLogger && process.env.NODE_ENV === \"development\") {\n const { logger } = require(\"redux-logger\");\n middlewares.push(logger);\n}\n\nexport const store = createStore(\n createRootReducer(history),\n composeWithDevTools(applyMiddleware(...middlewares))\n);\n","import \"react\";\nimport styled from \"styled-components\";\n\nconst LoadingSpinner = styled.div`\n width: 100%;\n height: 100%;\n background-position: center center;\n background-repeat: no-repeat;\n background-image: url(\"data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iNTBweCIgIGhlaWdodD0iNTBweCIgIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgdmlld0JveD0iMCAwIDEwMCAxMDAiIHByZXNlcnZlQXNwZWN0UmF0aW89InhNaWRZTWlkIiBjbGFzcz0ibGRzLXJvbGxpbmciIHN0eWxlPSJiYWNrZ3JvdW5kOiBub25lOyI+PGNpcmNsZSBjeD0iNTAiIGN5PSI1MCIgZmlsbD0ibm9uZSIgbmctYXR0ci1zdHJva2U9Int7Y29uZmlnLmNvbG9yfX0iIG5nLWF0dHItc3Ryb2tlLXdpZHRoPSJ7e2NvbmZpZy53aWR0aH19IiBuZy1hdHRyLXI9Int7Y29uZmlnLnJhZGl1c319IiBuZy1hdHRyLXN0cm9rZS1kYXNoYXJyYXk9Int7Y29uZmlnLmRhc2hhcnJheX19IiBzdHJva2U9IiNmY2Q1MDMiIHN0cm9rZS13aWR0aD0iMTAiIHI9IjM1IiBzdHJva2UtZGFzaGFycmF5PSIxNjQuOTMzNjE0MzEzNDY0MTUgNTYuOTc3ODcxNDM3ODIxMzgiIHRyYW5zZm9ybT0icm90YXRlKDI4Ny45NiA1MCA1MCkiPjxhbmltYXRlVHJhbnNmb3JtIGF0dHJpYnV0ZU5hbWU9InRyYW5zZm9ybSIgdHlwZT0icm90YXRlIiBjYWxjTW9kZT0ibGluZWFyIiB2YWx1ZXM9IjAgNTAgNTA7MzYwIDUwIDUwIiBrZXlUaW1lcz0iMDsxIiBkdXI9IjJzIiBiZWdpbj0iMHMiIHJlcGVhdENvdW50PSJpbmRlZmluaXRlIj48L2FuaW1hdGVUcmFuc2Zvcm0+PC9jaXJjbGU+PC9zdmc+\");\n`;\n\nexport default LoadingSpinner;\n","// For more information see:\n// https://alpaca.atlassian.net/wiki/spaces/ENG/pages/1612480730/Amplitude+Integration\n\nimport React from \"react\";\n\nimport { useFlag } from \"@alpacahq/flag-service\";\n\nclass AmplitudeProvider extends React.Component {\n eventTypes = [\"click\", \"input\", \"submit\", \"load\", \"unload\", \"custom\"];\n eventHistory = new Map();\n eventHistoryTimeout = 60000;\n account;\n\n constructor(props) {\n super(props);\n }\n\n static dispatch(name, data) {\n window.dispatchEvent(\n new CustomEvent(\"custom\", {\n detail: {\n \"amplitude-event-name\": name,\n \"amplitude-event-data\": data,\n },\n })\n );\n }\n\n static dispatchPageVisit(eventData = {}) {\n if (!eventData.hasOwnProperty(\"url\")) {\n eventData.url = window.location.pathname;\n }\n\n window.dispatchEvent(\n new CustomEvent(\"custom\", {\n detail: {\n \"amplitude-event-name\": \"algodash_page_visited\",\n \"amplitude-event-data\": eventData,\n },\n })\n );\n }\n\n static setAccount = (acc) => {\n this.account = acc;\n getAmplitude().setUserId(acc?.details?.owner_id);\n getAmplitude().setUserProperties({\n country_of_tax_residence: acc?.details?.country_of_tax_residence,\n account_status: acc?.account?.status,\n account_number: acc?.account?.account_number,\n account_id: acc?.account?.id,\n algodash_v2: useFlag(\"uix-v2\"),\n });\n };\n\n // WARNING: Do not remove! This class is a wrapper for the rest of the app.\n render = () => this.props.children;\n\n componentDidMount = () =>\n this.eventTypes.forEach((type) =>\n window.addEventListener(type, this.handleEvent.bind(this), false)\n );\n\n handleEvent = (event) => {\n const eventName = this.getEventName(event);\n const eventData = this.getEventData(event) || {};\n const isPaper = window.location.href.indexOf(\"paper\") > -1;\n\n if (isPaper && !eventData.hasOwnProperty(\"is_paper\")) {\n eventData.is_paper = true;\n }\n\n const key = `${eventName}-${JSON.stringify(eventData)}`;\n const rateExceeded =\n Date.now() - (this.eventHistory.get(key) ?? 0) < this.eventHistoryTimeout;\n\n\n // If we have an event name and data (optional)\n // If we have not exceeded the rate limit\n if (eventName && !rateExceeded) {\n getAmplitude().logEvent(eventName, eventData);\n this.eventHistory.set(key, Date.now());\n }\n\n // Clear expired events\n this.eventHistory.forEach((timestamp, key) => {\n if (Date.now() - timestamp > this.eventHistoryTimeout) {\n this.eventHistory.delete(key);\n }\n });\n };\n\n getEventName = (event) => {\n const { target, detail } = event;\n const attribute = \"amplitude-event-name\";\n\n if (target && \"getAttribute\" in target) {\n return target.getAttribute(attribute);\n }\n\n if (detail) {\n return detail[attribute];\n }\n\n return null;\n };\n\n getEventData = (event) => {\n const { target, detail } = event;\n\n if (target && \"getAttribute\" in target) {\n try {\n return JSON.parse(target.getAttribute(\"amplitude-event-data\"));\n } catch {\n // ignore\n }\n }\n\n if (detail && \"amplitude-event-data\" in detail) {\n const data = detail[\"amplitude-event-data\"];\n\n try {\n return JSON.parse(data);\n } catch {\n return data;\n }\n }\n\n return null;\n };\n}\n\nexport const getAmplitude = () => window.amplitude?.getInstance();\n\nexport default AmplitudeProvider;\n","import { createReducer } from \"redux-act\";\nimport Auth from \"@aws-amplify/auth\";\nimport { notification } from \"antd\";\nimport { getCurrentAuthenticatedUser, weakEncrypt } from \"../../utils\";\nimport * as Sentry from \"@sentry/browser\";\n\nimport * as api from \"api\";\nimport * as app from \"../app\";\nimport * as auth from \"./common\";\nimport * as cognitoActions from \"reducers/auth/cognito\";\nimport { submit as submitLogin } from \"./login\";\nimport { eraseCookie } from \"lib/cookies\";\nimport { eventTracker } from \"src/utils/eventTracker\";\n\nexport const REDUCER = \"signup\";\n\n/**\n * Handles the form submit for user registration.\n * This will register a user with Cognito.\n *\n * @param {Object}\n */\nexport const submit = ({\n username,\n password,\n clearing_broker = \"VELOX\",\n client_id = \"alpaca\",\n utm_params = {},\n}) => (dispatch) => {\n dispatch(app.addSubmitForm(REDUCER));\n\n // username IS an e-mail address in our case. form validation. intent.\n // NOTE: ensure this is lowercase as Cognito is case sensitive for now (they're changing that)\n const email = (username = username.toLowerCase());\n\n dispatch(\n api.owner.create(\n {},\n {\n email,\n password: weakEncrypt(password),\n crypto_broker:\n // has ?xcrypto in the url\n new URLSearchParams(window.location.search).has(\"xcrypto\")\n ? \"BS\"\n : undefined,\n onboarding_version: \"v1\",\n clearing_broker,\n signup_source: client_id,\n utm_params,\n }\n )\n )\n .then(() => {\n // Track event to Segment that someone signed up (clicked the signup button)\n eventTracker(\"Signed Up\", {\n category: \"Account\",\n });\n\n dispatch(\n auth.setUserState({\n userState: {\n userConfirmed: false, // user is certainly not confirmed yet right after signing up\n },\n })\n );\n\n // TODO: Again, think about moving this to signup.\n // The string 'signup' here is the signup reducer name. It's a constant in that file, it's magic here.\n dispatch(auth.setAccountVerificationRequired({ id: \"signup\", username }));\n dispatch(app.deleteSubmitForm(\"signup\"));\n })\n .catch((err) => {\n dispatch(app.setFormInvalid({ id: \"signup\", message: err.message }));\n dispatch(app.deleteSubmitForm(\"signup\"));\n });\n};\n\nexport const verify = ({\n username,\n code,\n password,\n redirect = \"\",\n utm_params = {},\n}) => (dispatch) => {\n dispatch(app.addSubmitForm(REDUCER));\n\n username = username.toLowerCase();\n\n // After retrieveing the confirmation code from the user\n return Auth.confirmSignUp(username, code, {\n // Optional. Force user confirmation irrespective of existing alias. By default set to True.\n forceAliasCreation: true,\n })\n .then(() => {\n // Track event to Segment that someone created and verified their account\n eventTracker(\"Verified Email\", {\n category: \"Account\",\n });\n\n notification.open({\n type: \"success\",\n message: \"Thank you!\",\n description:\n \"Your e-mail address has been verified, you may now login.\",\n });\n\n Auth.signIn(username, password).then(() => {\n getCurrentAuthenticatedUser().then((user) => {\n const email = username;\n const clearing_broker =\n user.attributes && user.attributes[\"custom:clearing_broker\"];\n const source =\n user.attributes && user.attributes[\"custom:signup_source\"];\n dispatch(cognitoActions._receive(user));\n dispatch(auth.setUserState({ userState: user }));\n dispatch(\n api.account.create(\n {},\n { email, clearing_broker, source, utm_params }\n )\n )\n .then(() => {\n dispatch(submitLogin({ username, password, redirect }));\n dispatch(app.deleteSubmitForm(REDUCER));\n })\n .catch((err) => {\n Sentry.captureException({\n message: \"Error creating account\",\n username,\n error: err.toString(),\n });\n });\n });\n });\n })\n .catch((err) => {\n dispatch(auth.setAccountVerificationError(err));\n dispatch(app.deleteSubmitForm(REDUCER));\n\n Sentry.captureException({\n message: \"Error after account verfication\",\n username,\n error: err.toString(),\n });\n });\n};\n\nexport const accountCreated = (response) => () => {\n eraseCookie(\"alpaca_ref_by\");\n let referralSucceededOrUndefined = response[\"referral_succeeded\"];\n if (referralSucceededOrUndefined !== undefined) {\n const referredBy = response[\"referred_by\"];\n if (referralSucceededOrUndefined && referredBy) {\n eventTracker(\"Referral Succeeded\", {\n category: \"AccountCreation\",\n referredBy: `${referredBy}`,\n });\n } else {\n const referralErrorMessage = response[\"referral_error\"];\n eventTracker(\"Referral Failed\", {\n category: \"AccountCreation\",\n error: referralErrorMessage,\n });\n }\n } else {\n eventTracker(\"Referral Unknown Status\", {\n category: \"AccountCreation\",\n });\n }\n eventTracker(\"Account Creation Succeeded\", {\n category: \"AccountCreation\",\n });\n};\n\nexport const accountCreationFailed = (err) => () => {\n eventTracker(`Account Creation Failed: ${err.message}`, {\n category: \"AccountCreation\",\n });\n};\n\nconst initialState = {};\nexport default createReducer({}, initialState);\n","import { createAction as baseCreateAction, createReducer } from \"redux-act\";\nimport api from \"api\";\nimport { handleSessionExpire } from \"./alpacaAuth/session\";\nimport Auth from \"@aws-amplify/auth\";\nimport Storage from \"@aws-amplify/storage\";\nimport \"fast-text-encoding\";\nimport {\n getAccountIdAndJWT,\n getAlpacaAccountId,\n getAccountIdForProduct,\n} from \"selectors\";\nimport { unsetAccessKeys } from \"reducers/accessKeys\";\nimport { notification } from \"antd\";\nimport { push } from \"connected-react-router\";\nimport { setEmailUpdateVerificationRequired } from \"../reducers/auth/common\";\nimport { getCookie } from \"src/lib/cookies\";\nimport { getCurrentAuthenticatedUser } from \"../utils\";\nimport { getSessionJWT, weakEncrypt } from \"../utils\";\nimport { eventTracker } from \"src/utils/eventTracker\";\n\nconst REDUCER = \"account\";\nconst NS = `@@${REDUCER}/`;\nconst createAction = (name) => baseCreateAction(NS + name);\n\n// accounts\nexport const SET_ACCOUNT = \"SET_ACCOUNT\";\nconst _setAccount = createAction(SET_ACCOUNT);\nconst _setAccountDetails = createAction(\"SET_DETAILS\");\nconst _setTrustedContact = createAction(\"SET_TRUSTED_CONTACT\");\nconst _setPaperAccount = createAction(\"SET_PAPER_ACCOUNT\");\nexport const unsetPaperAccount = createAction(\"UNSET_PAPER_ACCOUNT\");\nconst _setPaperAccounts = createAction(\"SET_PAPER_ACCOUNTS\");\n\n// relationships\nconst _setRelationships = createAction(\"SET_RELATIONSHIPS\");\nconst _setWireBanks = createAction(\"SET_WIRE_BANKS\");\nconst _setInstitution = createAction(\"SET_INSTITUTION\");\nconst _setCreateRelationshipStatus = createAction(\n \"SET_CREATE_RELATIONSHIP_STATUS\"\n);\nconst _setCreateWireBankStatus = createAction(\"SET_CREATE_WIRE_BANK_STATUS\");\nexport const clearCreateRelationshipStatus = createAction(\n \"CLEAR_CREATE_RELATIONSHIP_STATUS\"\n);\nexport const clearCreateWireBankStatus = createAction(\n \"CLEAR_CREATE_WIRE_BANK_STATUS\"\n);\nconst _setPlaidToken = createAction(\"SET_PLAID_TOKEN\");\n\n// transfers\nconst _setTransfers = createAction(\"SET_TRANSFERS\");\n\n// activities\nconst _setActivities = createAction(\"SET_ACTIVITIES\");\n\n// documents\nconst _setDocuments = createAction(\"SET_DOCUMENTS\");\n\n// affiliates\nconst _setAffiliates = createAction(\"SET_AFFILIATES\");\n// onfido sdk token\nconst _setOnfidoSDKToken = createAction(\"SET_ONFIDO_SDK_TOKEN\");\n// onfido applicant id\nconst _setOnfidoApplicantID = createAction(\"SET_ONFIDO_APPLICANT_ID\");\n\n// configs\nconst _reqConfigs = createAction(\"REQ_CONFIGS\");\nconst _setConfigs = createAction(\"SET_CONFIGS\");\n\n// \"props\" stored to S3 as JSON\nconst _setOwnerProps = createAction(`SET_OWNER_PROPS`);\n\nconst onboardingApiAction = (fn) => (...args) => async (dispatch, getState) => {\n const { token } = await getSessionJWT();\n let accountId = args[\"accountId\"];\n\n // This might occur on page reload, the account is not retrieved all the time.\n // It is passed through props. So not coming back to the onboarding flow is fine,\n // but when coming back (hard browser reload, etc.), the minimum amount of info we\n // need is the account ID.\n if (!accountId) {\n return dispatch(getAccount()).then(() => {\n accountId = getAlpacaAccountId(getState()) || null;\n return handleSessionExpire(\n fn(dispatch, getState, accountId, token, ...args).then(() => ({\n ok: true,\n })),\n dispatch\n ).catch((error) => ({ error }));\n });\n } else {\n return handleSessionExpire(\n fn(dispatch, getState, accountId, token, ...args).then(() => ({\n ok: true,\n })),\n dispatch\n ).catch((error) => ({ error }));\n }\n};\n\n// similar functionality as getAccount(), but decoupled from Cognito\nexport const paciamGetAccount = () => (dispatch, getState) => {\n const accountList = getState().accountList.payload;\n if (!accountList) {\n return Promise.resolve([]);\n }\n return Promise.resolve(accountList).then(() => {\n return dispatch(\n _setAccount({\n account: accountList[0] || {},\n })\n );\n });\n};\n\nexport const getAccount = () => (dispatch, getState) => {\n const state = getState();\n\n const userState = (state && state.auth && state.auth.userState) || {};\n\n const token =\n (userState.signInUserSession && userState.signInUserSession.idToken) || {};\n\n const associatedAccountId =\n (userState.attributes && userState.attributes[\"custom:account_id\"]) ||\n false;\n\n const accountList = getState().accountList.payload;\n if (!accountList) {\n throw Error(\"accountList not available yet\");\n }\n return Promise.resolve(accountList)\n .then((accounts) => {\n if (accounts && accounts[0]) {\n // If there was no associated account id yet, update the Cognito user attribute\n if (!associatedAccountId) {\n getCurrentAuthenticatedUser()\n .then((cognitoUser) => {\n Auth.updateUserAttributes(cognitoUser, {\n \"custom:account_id\": accounts[0].id || \"\",\n });\n })\n .catch((e) =>\n console.error(`Error updating cognito attributes: ${e}`)\n );\n }\n // if account is activated remove it from kyc localstore\n if (accounts[0].status === \"ACTIVE\") {\n let kyc = JSON.parse(window.localStorage.getItem(\"kyc\"));\n if (kyc) {\n if (accounts[0].id in kyc) delete kyc?.[accounts[0].id];\n window.localStorage.setItem(\"kyc\", JSON.stringify(kyc));\n }\n }\n\n // Set the account info in state, then get the account details and load the trade account\n return dispatch(\n _setAccount({\n account: accounts[0] || {},\n })\n );\n }\n return;\n })\n .catch((err) => {\n console.error(\"error getting list of accounts:\", err);\n\n // If no account for the Cognito user, it will return a 401\n // Create an account in gobroker\n const email = (token.payload && token.payload.email) || \"\";\n const clearing_broker =\n (token.payload && token.payload[\"custom:clearing_broker\"]) || \"\";\n const source =\n (token.payload && token.payload[\"custom:signup_source\"]) || null;\n\n return api.account\n .create({ email, clearing_broker, source }, token)\n .then((details) => {\n // Update Cognito user attribute to associate account id\n return Auth.updateUserAttributes(state.auth.userState, {\n \"custom:account_id\": details.id || \"\",\n }).then(() => {\n // success, try getting the account again now\n return api.account.list({}, token).then((accounts) => {\n return dispatch(\n _setAccount({\n account: accounts[0] || {},\n })\n );\n });\n });\n })\n .catch((err) => {\n // It could fail to create an account if the email already exists.\n // In that case, it's possible something is wrong with the JWT or it's expired.\n // Should not happen, but if so, ensure the user is logged out. they can login again.\n console.error(\"failed to create account:\", err);\n // return dispatch(logout())\n });\n });\n};\n\nexport const loadAccountDetails = () => async (dispatch, getState) => {\n const token = await getSessionJWT();\n const accountId = getAlpacaAccountId(getState());\n\n if (accountId) {\n return handleSessionExpire(\n api.ownerDetails\n .get(accountId, token)\n .then((details) => dispatch(_setAccountDetails({ details }))),\n dispatch\n );\n }\n return;\n};\n\nexport const patchAccountDetail = onboardingApiAction(\n (dispatch, getState, accountId, token, params) =>\n api.ownerDetails\n .patch(accountId, params, token)\n .then(() => dispatch(loadAccountDetails()))\n);\n\nexport const resetOnboarding = onboardingApiAction(\n (dispatch, getState, accountId, token) =>\n api.ownerDetails\n .resetOnboarding(accountId, token)\n .then(() => dispatch(loadAccountDetails()))\n .then(() => dispatch(api.relationships.list({ accountId })))\n .then((relationships) => {\n if (relationships.length === 0) return;\n return Promise.all(\n relationships.map((relationship) =>\n dispatch(\n api.relationships.delete({\n accountId,\n relationshipId: relationship.id,\n })\n )\n )\n );\n })\n .then(() => dispatch(api.transfers.list({ accountId })))\n .then((transfers) => {\n if (transfers.length === 0) return;\n return Promise.all(\n transfers.map((transfer) =>\n dispatch(\n api.transfers.delete({\n accountId,\n transferId: transfer.id,\n })\n )\n )\n );\n })\n .then(() =>\n api.accessKeys.list(accountId, token).then((accessKeys) => {\n if (accessKeys.length === 0) return;\n return Promise.all(\n accessKeys.map((key) => api.accessKeys.delete(accountId, key.id))\n );\n })\n )\n .then(() => dispatch(push(\"/brokerage/new-account\")))\n);\n\nexport const postTrustedContact = onboardingApiAction(\n (dispatch, getState, accountId, token, params) =>\n api.trustedContact\n .post(accountId, token, params)\n .then((result) => dispatch(_setTrustedContact(result)))\n);\n\nexport const listAffiliates = onboardingApiAction(\n (dispatch, getState, accountId, token) =>\n api.affiliates\n .list(accountId, token)\n .then((result) => dispatch(_setAffiliates(result)))\n);\n\nexport const getOnfidoSDKToken = onboardingApiAction(\n (dispatch, getState, accountId, token) =>\n api.onfidoSdkToken\n .get(accountId, token)\n .then((result) => dispatch(_setOnfidoSDKToken(result)))\n .catch((e) => {\n notification.open({\n type: \"error\",\n message: \"Could not create Token for KYC\",\n description: \"Please contact support.\",\n });\n throw e;\n })\n);\n\nexport const patchOnfidoOutcome = onboardingApiAction(\n (dispatch, getState, accountId, _, body) =>\n dispatch(api.onfidoSdkToken.patch({ accountId }, body)).catch((e) => {\n notification.open({\n type: \"error\",\n message: \"Could not save Onfido SDK outcome\",\n description: \"Please contact support.\",\n });\n })\n);\n\nexport const createOnfidoApplicant = onboardingApiAction(\n (dispatch, getState, accountId, _) =>\n dispatch(api.onfidoApplicant.post({ accountId }))\n .then((result) => {\n const kyc = JSON.parse(window.localStorage.getItem(\"kyc\")) || {};\n window.localStorage.setItem(\n \"kyc\",\n JSON.stringify({\n ...kyc,\n [accountId]: result.onfido_details.applicant_id,\n })\n );\n dispatch(_setOnfidoApplicantID(result));\n })\n .catch((e) => {\n notification.open({\n type: \"error\",\n message: \"Could not create Applicant for KYC\",\n description: \"Please contact support.\",\n });\n throw e;\n })\n);\n\nexport const updateOnfidoApplicant = onboardingApiAction(\n (dispatch, getState, accountId, _) =>\n dispatch(api.onfidoApplicant.patch({ accountId })).catch((e) => {\n notification.open({\n type: \"error\",\n message: \"Could not update Applicant for KYC\",\n description: \"Please contact support.\",\n });\n throw e;\n })\n);\n\nexport const postAffiliate = onboardingApiAction(\n (dispatch, getState, accountId, token, params) =>\n api.affiliates\n .post(accountId, token, params)\n .then(() => dispatch(listAffiliates()))\n);\n\nexport const patchAffiliate = onboardingApiAction(\n (dispatch, getState, accountId, token, affiliateId, params) =>\n api.affiliates\n .patch(accountId, affiliateId, token, params)\n .then(() => dispatch(listAffiliates()))\n);\n\n//user configurations\nexport const listConfigs = (product) => (dispatch, getState) => {\n let { accountId, paperAccountId } = getAccountIdAndJWT(getState());\n\n if (!accountId) {\n dispatch(getAccount()).then(() => {\n accountId = getAlpacaAccountId(getState()) || null;\n });\n }\n\n if (product === \"paper\") {\n dispatch(_reqConfigs());\n return dispatch(api.paperConfigs.list({ paperAccountId }))\n .then((result) => {\n result.accounts = { paper: paperAccountId, live: accountId };\n dispatch(_setConfigs(result));\n })\n .catch((e) => {\n console.error(e);\n notification.open({\n type: \"error\",\n message: \"Could not load configurations\",\n description:\n \"There was a problem trying to load your account configurations. Please try again.\",\n });\n });\n }\n\n dispatch(_reqConfigs());\n return dispatch(api.configs.list({ accountId }))\n .then((result) => {\n result.accounts = { paper: paperAccountId, live: accountId };\n dispatch(_setConfigs(result));\n })\n .catch((e) => {\n console.error(e);\n notification.open({\n type: \"error\",\n message: \"Could not load configurations\",\n description:\n \"There was a problem trying to load your account configurations. Please try again.\",\n });\n });\n};\n\nexport const patchConfig = (params, product) => (dispatch, getState) => {\n let { accountId, paperAccountId } = getAccountIdAndJWT(getState());\n\n if (product === \"paper\") {\n dispatch(_reqConfigs());\n return dispatch(api.paperConfigs.patch({ paperAccountId }, params)).then(\n () => {\n dispatch(listConfigs(\"paper\"));\n },\n (err) => {\n console.log(err);\n notification.open({\n type: \"error\",\n message: \"Could not save configurations\",\n description:\n \"There was a problem trying to change your account configurations. Please try again.\",\n });\n }\n );\n }\n\n dispatch(_reqConfigs());\n return dispatch(api.configs.patch({ accountId }, params))\n .then(() => dispatch(listConfigs(\"live\")))\n .catch((err) => {\n console.error(err);\n notification.open({\n type: \"error\",\n message: \"Could not save configurations\",\n description:\n \"There was a problem trying to change your account configurations. Please try again.\",\n });\n });\n};\n\nexport const deleteAffiliate = onboardingApiAction(\n (dispatch, getState, accountId, token, affiliateId) =>\n api.affiliates\n .delete(accountId, token, affiliateId)\n .then(() => dispatch(listAffiliates()))\n);\n\nexport const loadDataAgreement = (agreementName) => (dispatch, getState) => {\n const { accountId, token } = getAccountIdAndJWT(getState());\n return api.dataAgreement\n .get(accountId, agreementName, token)\n .then((agreement) => {\n dispatch({\n type: \"app/RECEIVE_DATA_AGREEMENT\",\n payload: {\n name: agreementName,\n agreement,\n },\n });\n });\n};\n\nexport const postDataAgreement = onboardingApiAction(\n (dispatch, getState, accountId, token, agreementName, agreementText) =>\n api.dataAgreement\n .post(accountId, agreementName, token, agreementText)\n .then(() =>\n dispatch({\n type: \"app/AGREEMENT_ACCEPTED\",\n payload: { name: agreementName },\n })\n )\n);\n\nexport const postTaxForm = onboardingApiAction(\n (dispatch, getState, accountId, token, formName) =>\n api.taxForm.post(accountId, formName, token).then(() =>\n dispatch({\n type: \"app/TAXFORM_ACCEPTED\",\n payload: { name: formName },\n })\n )\n);\n\nexport const postApiAgreement = (agreementName, agreementText) => (\n dispatch,\n getState\n) => {\n const { accountId, token } = getAccountIdAndJWT(getState());\n return api.dataAgreement\n .post(accountId, agreementName, token, agreementText)\n .then(() =>\n api.ownerDetails\n .get(accountId, token)\n .then((details) =>\n Promise.all([dispatch(_setAccountDetails({ details }))])\n )\n );\n};\n\n/**\n * Updates account info such as phone number and address.\n * Note: This action will trigger a review for the account owner.\n *\n * @param {Object} params\n */\nexport const updateAccountDetails = (params) => async (dispatch, getState) => {\n const { accountId } = getAccountIdAndJWT(getState());\n const token = await getSessionJWT();\n\n return api.ownerDetails.patch(accountId, params, token).then(() => {\n return api.ownerDetails.get(accountId, token).then((details) =>\n Promise.all([\n dispatch(_setAccountDetails({ details })),\n // also get new account info (this is where the email comes in)\n dispatch(getAccount()),\n ])\n );\n });\n};\n\n/**\n * Updates owner attributes such as email\n * Note: any update will set account status to ACCOUNT_UPDATED\n * Fully-Disclosed Correspondents can modify email without status change\n *\n * @param {Object} params\n */\nexport const updateAccountOwner = (params) => async (dispatch, getState) => {\n const { accountId } = getAccountIdAndJWT(getState());\n const token = await getSessionJWT();\n\n return api.owner.patch(params, token).then(() => {\n return api.owner.get(accountId, token).then((owner) =>\n Promise.all([\n dispatch(_setOwnerProps(owner)),\n // also get new account info (this is where the email comes in)\n dispatch(getAccount()),\n ])\n );\n });\n};\n\n/**\n * Updates account with an additional e-signature record.\n *\n * @param {Object} params\n */\nexport const addESignDetail = (params) => (dispatch, getState) => {\n const { accountId, token } = getAccountIdAndJWT(getState());\n return api.ownerDetails.patchESign(accountId, params, token).then(() => {\n return api.ownerDetails\n .get(accountId, token)\n .then((details) =>\n Promise.all([dispatch(_setAccountDetails({ details }))])\n );\n });\n};\n\n/**\n * Loads owner props from S3. These are useful for persisting dashboard/UX needs.\n * This information is not stored in gobroker.\n */\nexport const loadOwnerProps = () => (dispatch) => {\n return handleSessionExpire(\n Storage.get(\"props.json\", {\n level: \"private\",\n region: \"us-east-1\",\n download: true,\n })\n .then((result) => {\n let ownerProps = {};\n if (result && result.Body) {\n ownerProps = result.Body;\n }\n\n return dispatch(_setOwnerProps(ownerProps));\n })\n .catch((err) => {\n if (err.response?.status === 404) {\n // If the key did not exist, create it for the first time. It'll be empty for now.\n // This will remove 404 errors in the console for subsequent requests.\n // This file could be missing for existing users that have been migrated. Others should have the file.\n Storage.put(\"props.json\", JSON.stringify({}), {\n level: \"private\",\n region: \"us-east-1\",\n });\n }\n // If file does not exist or there was some other problem.\n return dispatch(_setOwnerProps({}));\n }),\n dispatch\n );\n};\n\n/**\n * createWireBank will create a wire bank\n */\nexport const createWireBank = (metadata) => (dispatch, getState) => {\n dispatch(\n api.wireBanks.create(\n {\n accountId: getAlpacaAccountId(getState()),\n },\n metadata\n )\n )\n .then(() => {\n eventTracker(\"Linked Bank Account\", {\n category: \"Banking\",\n label: window.location.pathname,\n });\n dispatch(clearCreateWireBankStatus());\n dispatch(_setCreateWireBankStatus({ error: null, metadata }));\n return dispatch(loadWireBanks());\n })\n .catch((error) => {\n dispatch(_setCreateWireBankStatus({ error, metadata }));\n });\n};\n/**\n * createRelationship will link a new bank account\n * given metadata from Plaid\n */\nexport const createRelationship = (metadata) => (dispatch, getState) => {\n const accountId = getAlpacaAccountId(getState());\n\n return dispatch(api.relationships.create({ accountId }, metadata))\n .then(() => {\n eventTracker(\"Linked Bank Account\", {\n category: \"Banking\",\n label: window.location.pathname,\n });\n\n dispatch(_setCreateRelationshipStatus({ error: null, metadata }));\n return dispatch(loadRelationships());\n })\n .catch((error) => {\n dispatch(_setCreateRelationshipStatus({ error, metadata }));\n });\n};\n\n/**\n * verifyRelationship will verify a new bank account\n * given metadata from Plaid\n */\nexport const verifyRelationship = (relationshipId, metadata) => (\n dispatch,\n getState\n) => {\n const accountId = getAlpacaAccountId(getState());\n\n return dispatch(\n api.relationships.verify({ accountId, relationshipId }, metadata)\n )\n .then(() => {\n eventTracker(\"Linked Bank Account\", {\n category: \"Banking\",\n label: window.location.pathname,\n });\n\n dispatch(_setCreateRelationshipStatus({ error: null, metadata }));\n return dispatch(loadRelationships());\n })\n .catch((error) => {\n dispatch(_setCreateRelationshipStatus({ error, metadata }));\n });\n};\n\n/**\n * loadRelationships will load all linked bank accounts for the account\n */\nexport const loadRelationships = () => (dispatch, getState) =>\n dispatch(\n api.relationships.list({\n accountId: getAlpacaAccountId(getState()),\n })\n ).then((relationships) => {\n dispatch(_setRelationships(relationships));\n if (relationships.length === 0) return;\n return Promise.all(\n relationships.map((relationship) =>\n dispatch(loadInstitution(relationship.plaid_institution))\n )\n );\n });\n\n/**\n * loadWireBanks will load all wire bank for the account\n */\nexport const loadWireBanks = () => (dispatch, getState) =>\n dispatch(\n api.wireBanks.list({\n accountId: getAlpacaAccountId(getState()),\n })\n ).then((wireBanks) => {\n dispatch(_setWireBanks(wireBanks));\n });\n\n/**\n * listActivities will load all account activities for the account\n */\nexport const listActivities = (product, date = \"\", types = [], after = \"\", until = \"\") => (\n dispatch,\n getState\n) => {\n const accountId = getAccountIdForProduct(getState(), product);\n const endpoint = product === \"paper\" ? \"paperActivities\" : \"activities\";\n\n return dispatch(\n api[endpoint].list(\n { accountId },\n { date: date, activity_types: types.join(\",\"), after, until }\n )\n ).then((activities) => dispatch(_setActivities({ activities, accountId })));\n};\n\n/**\n * TODO: This is deprecated. Will remove once it's confirmed there is no longer\n * any need to request the public token on the API.\n * getPlaidToken will get the Plaid public token for the relationship\n */\nexport const getPlaidToken = (relationshipId = \"\") => async (\n dispatch,\n getState\n) => {\n return await dispatch(\n api.relationships.token({\n accountId: getAlpacaAccountId(getState()),\n relationshipId,\n })\n ).then((result) => dispatch(_setPlaidToken(result)));\n};\n\n/**\n * deleteWireBank will remove a linked bank account\n */\nexport const deleteWireBank = (bankId = \"\") => (dispatch, getState) =>\n dispatch(\n api.wireBanks.delete({\n accountId: getAlpacaAccountId(getState()),\n bankId,\n })\n ).then(() => {\n eventTracker(\"Unlinked Bank Account\", {\n category: \"Banking\",\n label: window.location.pathname,\n });\n\n return dispatch(loadWireBanks());\n });\n\n/**\n * deleteRelationship will remove a linked bank account\n */\nexport const deleteRelationship = (relationshipId = \"\") => (\n dispatch,\n getState\n) =>\n dispatch(\n api.relationships.delete({\n accountId: getAlpacaAccountId(getState()),\n relationshipId,\n })\n ).then(() => {\n eventTracker(\"Unlinked Bank Account\", {\n category: \"Banking\",\n label: window.location.pathname,\n });\n\n return dispatch(loadRelationships());\n });\n\nexport const loadInstitution = (institutionId) => (dispatch) => {\n if (!institutionId || institutionId == \"micro_deposit\") {\n return Promise.resolve();\n }\n return dispatch(api.institutions.get({ institutionId }))\n .then(({ institution }) => {\n if (institution) {\n dispatch(_setInstitution(institution));\n }\n })\n .catch(console.error);\n};\n\n/**\n * listTransfers will return a list of user's ACH or WIRE transfers.\n */\nexport const listTransfers = () => (dispatch, getState) => {\n const accountId = getAlpacaAccountId(getState());\n return dispatch(api.transfers.list({ accountId }))\n .then((xfers) => dispatch(_setTransfers(xfers)))\n .catch(console.error);\n};\n\n/**\n * loadPaperAccounts will return a list of the user's paper trading accounts.\n */\nexport const loadPaperAccounts = () => async (dispatch, getState) => {\n const { accountId } = getAccountIdAndJWT(getState());\n const token = await getSessionJWT();\n\n return handleSessionExpire(\n api.paperAccounts.list(accountId, token).then((resp) => {\n // If there are no paper accounts yet, create the first one for the user.\n if (resp && resp.length === 0) {\n return Promise.all([dispatch(createPaperAccount())]).then(() => {\n return Promise.all([dispatch(_setPaperAccounts(resp))]);\n });\n }\n\n return Promise.all([dispatch(_setPaperAccounts(resp))]);\n }),\n dispatch\n );\n};\n\n/**\n * createPaperAccount will create a new paper account using the user's current live account balance.\n * Only one can be created for now, so ensure there weren't any already.\n * Default cash is $100,000 unless otherwise specified.\n */\nexport const createPaperAccount = (recreate = false, cash = 100000) => async (\n dispatch,\n getState\n) => {\n const { accountId } = getAccountIdAndJWT(getState());\n const token = await getSessionJWT();\n\n const account = getState().account;\n const paperAccounts =\n (account && account.paper && account.paper.accounts) || false;\n\n const cashInput = cash > 1000000000 ? 1000000000 : cash;\n\n // If no paper accounts exist or we are recreating one, send the request.\n return !paperAccounts || paperAccounts.length === 0 || recreate\n ? handleSessionExpire(\n api.paperAccounts\n .create(accountId, { cash: Number.parseFloat(cashInput) }, token)\n .then(\n () =>\n Promise.all[\n (dispatch(setPaperAccount()), dispatch(unsetAccessKeys()))\n ]\n ),\n dispatch\n )\n : null;\n};\n\n/**\n * deletePaperAccount will delete a paper account. If no id is provided, all\n * will be removed. There is currently only one paper account, so this is most common.\n */\nexport const deletePaperAccount = (paperAccountId) => async (\n dispatch,\n getState\n) => {\n const { accountId } = api.getAccountIdAndJWT(getState());\n const token = await getSessionJWT();\n\n if (paperAccountId) {\n return handleSessionExpire(\n api.paperAccounts\n .delete(accountId, { paperId: paperAccountId }, token)\n .then(() => dispatch(loadPaperAccounts())),\n dispatch\n );\n }\n // Remove all\n const account = getState().account;\n if (account.paper && account.paper.accounts) {\n let deleteOperations = [];\n\n account.paper.accounts.forEach((paperAccount) => {\n if (paperAccount.paper_account_id) {\n deleteOperations.push(\n api.paperAccounts.delete(\n accountId,\n { paperId: paperAccount.paper_account_id },\n token\n )\n );\n }\n });\n\n return handleSessionExpire(\n Promise.all(deleteOperations).then(() => dispatch(loadPaperAccounts())),\n dispatch\n );\n }\n return null;\n};\n\n/**\n * resetPaperAccount will delete the old account associated with the request and create a new one\n * in its place - this consolidates the old frontend paper reset flow and does it all in gobroker now.\n */\n\nexport const resetPaperAccount = (cash = 100000) => (dispatch, getState) => {\n const { accountId } = api.getAccountIdAndJWT(getState());\n\n const account = getState().account;\n const paperAccount = account.paper.accounts[0];\n const paperAccountId = paperAccount.paper_account_id;\n\n const cashInput = cash > 1000000000 ? 1000000000 : cash;\n\n return dispatch(\n api.paperAccounts.reset({ accountId, paperAccountId }, { cash: cashInput })\n ).then(() => dispatch(loadPaperAccounts()));\n};\n\n/**\n * setPaperAccount will set the paper account to use (only one for now).\n * If the user has not set up a paper account yet, it will guide them in doing so.\n * Default amount is $100,000. Pass cash value to change.\n */\nexport const setPaperAccount = (cash = 100000) => (dispatch, getState) => {\n return dispatch(loadPaperAccounts()).then(() => {\n const account = getState().account;\n let paperAccountId;\n\n if (\n !(account.paper && account.paper.accounts) ||\n account.paper.accounts.length === 0\n ) {\n return dispatch(createPaperAccount(false, cash)).then(() =>\n dispatch(setPaperAccount())\n );\n }\n paperAccountId =\n (account.paper.accounts[0] &&\n account.paper.accounts[0].paper_account_id) ||\n null;\n\n const p = [dispatch(_setPaperAccount(paperAccountId))];\n\n return Promise.all(p);\n });\n};\n\n/**\n * listDocuments\n */\nexport const listDocuments = (params = {}) => (dispatch, getState) => {\n // Ok to use live account id (paper accounts have no documents)\n const { token, accountId } = getAccountIdAndJWT(getState());\n\n if (accountId) {\n handleSessionExpire(\n api.documents\n .list(accountId, token, params)\n .then((documents) => dispatch(_setDocuments(documents))),\n dispatch\n );\n }\n};\n\n/**\n * getDocumentUrl will get a presigned S3 temporary URL for a document\n */\nexport const getDocumentUrl = (documentId = \"\") => async (\n dispatch,\n getState\n) => {\n const { accountId } = getAccountIdAndJWT(getState());\n return await dispatch(\n api.documents.url({ accountId, documentId }, null, { Accept: \"*/*\" })\n );\n};\n\nexport const resubmitOnfido = () => (dispatch, getState) => {\n const { accountId } = getAccountIdAndJWT(getState());\n return dispatch(api.onfidoResubmission.resubmit({ accountId }))\n .then((account) => dispatch(_setAccount({ account })))\n .catch((e) => {\n notification.open({\n type: \"error\",\n message: \"Could not resubmit account\",\n description: \"Please contact support.\",\n });\n throw e;\n });\n};\n\n// Export this reducer\nconst initialState = {};\nexport default createReducer(\n {\n [_setAccount]: (state, { account }) => ({ ...state, account }),\n [_setAccountDetails]: (state, { details }) => ({ ...state, details }),\n\n [_setOwnerProps]: (state, payload) => {\n return { ...state, props: payload };\n },\n\n [_setTrustedContact]: (state, payload) => {\n return { ...state, trustedContact: payload };\n },\n\n // Paper account\n [_setPaperAccounts]: (state, payload) => {\n const current =\n (payload && payload[0] && payload[0].paper_account_id) || null;\n const paper = {\n current,\n accounts: payload,\n };\n return { ...state, paper };\n },\n [_setPaperAccount]: (state, id) => {\n const paper = { ...state.paper, current: id || null };\n return { ...state, paper };\n },\n [unsetPaperAccount]: (state) => {\n // simply sets the current field to null\n const paper = { ...state.paper, current: null };\n return { ...state, paper };\n },\n\n // Documents\n [_setDocuments]: (state, payload) => {\n // Documents may have been previously loaded, additional API requests could load more.\n // For example, pagination or \"load more\" features. Append to the list of documents,\n // but remove any duplicates.\n // TODO: Think about this because if it is for pagination, is it even necessary?\n // Makes more sense for \"load more\" scenario.\n const mergeDocuments = (payload) => {\n const docs = state.documents || [];\n payload.map((x) => {\n let dup = false;\n docs.map((y) => {\n if (y.date === x.date && y.type === x.type) {\n dup = true;\n }\n return docs;\n });\n if (!dup) {\n docs.push(x);\n }\n return docs;\n });\n\n return docs;\n };\n\n return { ...state, documents: mergeDocuments(payload) };\n },\n\n // WireBanks\n [_setWireBanks]: (state, payload) => {\n return { ...state, wireBanks: payload };\n },\n // Relationships\n [_setRelationships]: (state, payload) => {\n return { ...state, relationships: payload };\n },\n [_setCreateRelationshipStatus]: (state, payload) => {\n return { ...state, createRelationshipStatus: payload };\n },\n [_setCreateWireBankStatus]: (state, payload) => {\n return { ...state, createWireBankStatus: payload };\n },\n [clearCreateRelationshipStatus]: (state) => {\n return { ...state, createRelationshipStatus: null };\n },\n [clearCreateWireBankStatus]: (state) => {\n return { ...state, createWireBankStatus: null };\n },\n [_setPlaidToken]: (state, payload) => {\n return { ...state, plaidToken: payload };\n },\n [_setInstitution]: (state, payload) => {\n if (!payload) return state;\n\n return {\n ...state,\n institutions: {\n ...state.institutions,\n [payload.institution_id]: {\n ...payload,\n logoUrl: payload.logo\n ? `data:image/png;base64,${payload.logo}`\n : null,\n },\n },\n };\n },\n [_setTransfers]: (state, payload) => {\n return { ...state, transfers: payload };\n },\n [_setActivities]: (state, payload) => {\n const activities = state.activities || {};\n activities[payload.accountId] = payload.activities;\n return { ...state, activities };\n },\n\n // User Configs\n [_setConfigs]: (state, payload) => {\n payload.is_fetching = false;\n return { ...state, configs: payload };\n },\n [_reqConfigs]: (state) => {\n let configs = Object.assign({}, state.configs);\n configs.is_fetching = true;\n return { ...state, configs };\n },\n\n // Affiliates\n [_setAffiliates]: (state, payload) => {\n return { ...state, affiliates: payload };\n },\n // Onfido SDK Token\n [_setOnfidoSDKToken]: (state, payload) => {\n return { ...state, onfido_sdk_token: payload.onfido_sdk_token };\n },\n // Onfido Applicant ID\n [_setOnfidoApplicantID]: (state, payload) => ({\n ...state,\n onfido_applicant_id: payload.onfido_details?.applicant_id,\n }),\n },\n initialState\n);\n\nexport const requestEmailChange = (params) => (dispatch) => {\n const req = {\n email: params.email.toLowerCase(), // lowercase email\n // Better than nothing 😐\n a: weakEncrypt(params.password),\n };\n return dispatch(api.owner.requestEmail({}, req)).then(() => {\n dispatch(setEmailUpdateVerificationRequired(true));\n });\n};\n\nexport const verifyEmailChange = (params) => async (dispatch) => {\n const token = await getSessionJWT();\n\n const req = {\n code: params.code,\n };\n\n return dispatch(api.owner.verifyEmail({}, req)).then(() => {\n return Promise.all([\n dispatch(setEmailUpdateVerificationRequired(false)),\n dispatch(api.account.list({}, token)).then((accounts) => {\n return dispatch(\n _setAccount({\n account: accounts[0] || {},\n })\n );\n }),\n ]);\n });\n};\n","import { createAction, createReducer } from \"redux-act\";\nimport { notification } from \"antd\";\nimport Auth from \"@aws-amplify/auth\";\nimport { getCurrentAuthenticatedUser } from \"../../utils\";\n\nexport const REDUCER = \"mfa\";\nconst NS = `@@${REDUCER}/`;\n\nconst _setCurrentMFAMethod = createAction(`${NS}SET_CURRENT_MFA_METHOD`);\nconst _setTOTPQRCode = createAction(`${NS}SET_TOTP_QR_CODE`);\nconst _setTOTSetupVerificationError = createAction(\n `${NS}SET_TOTP_SETUP_VERIFICATION_ERROR`\n);\n\n// Helper to remove magic, note that `SOFTWARE_TOKEN_MFA` is newer than `TOTP` though both\n// work for SETTING the MFA method with `setPreferredMFA()` but, `getPreferredMFA()`\n// returns `SOFTWARE_TOKEN_MFA` - there was some deprecation and changes going on in Amplify.\n// Similar for `SMS_MFA` vs. older `SMS`.\nexport const MFAMethods = {\n SOFTWARE_TOKEN_MFA: {\n method: \"SOFTWARE_TOKEN_MFA\",\n displayName: \"time-based one-time password (TOTP)\",\n },\n SMS_MFA: {\n method: \"SMS_MFA\",\n displayName: \"text-message (SMS)\",\n },\n NOMFA: {\n method: \"NOMFA\",\n displayName: \"\",\n },\n};\n\n/**\n * Enables MFA and shows a notification to the user.\n *\n * @param {string} method The 2FA method, \"SMS_MFA\", \"SOFTWARE_TOKEN_MFA\", \"NOMFA\"\n */\nexport const enableMFA = (method = MFAMethods[\"SMS_MFA\"].method) => (\n dispatch\n) => {\n getCurrentAuthenticatedUser().then((user) => {\n // Note: As of March 14th, 2019, AWS Amplify JS documentation shows\n // `SMS`, `TOTP`, or `NOMFA` as options. In their GitHub, it shows\n // either those OR the newer `SOFTWARE_TOKEN_MFA` and `SMS_MFA` options.\n // Our code will standardize on the newer values. However, this method\n // will temporarily need to catch this until AWS updates.\n if (method === MFAMethods[\"SMS_MFA\"].method) {\n method = \"SMS\";\n }\n if (method === MFAMethods[\"SOFTWARE_TOKEN_MFA\"].method) {\n method = \"TOTP\";\n }\n\n // NOTE: The same bug afflicting `getPreferredMFA()` below\n // https://github.com/aws-amplify/amplify-js/issues/2627\n user.getUserData(\n () => {\n // The part we care about\n Auth.setPreferredMFA(user, method)\n .then(() => {\n dispatch(currentMFAMethod());\n })\n .catch((err) => {\n console.error(\"error setting MFA method:\", err);\n });\n //\n },\n { bypassCache: true }\n );\n });\n};\n\n/**\n * Disables MFA and shows a notification to the user.\n */\nexport const disableMFA = () => (dispatch) => {\n return getCurrentAuthenticatedUser().then((user) => {\n // NOTE: The same bug afflicting `getPreferredMFA()` below\n // https://github.com/aws-amplify/amplify-js/issues/2627\n return user.getUserData(\n () => {\n // The part we care about\n return Auth.setPreferredMFA(user, MFAMethods[\"NOMFA\"].method).then(\n () => {\n notification.open({\n type: \"success\",\n message: \"You have disabled MFA for your account.\",\n });\n return dispatch(currentMFAMethod());\n }\n );\n //\n },\n { bypassCache: true }\n );\n });\n};\n\n/**\n * Gets the user's preferred MFA method.\n *\n * NOTE: There is currently a bug https://github.com/aws-amplify/amplify-js/issues/2627\n * An old, cached, MFA method will be returned when enabling/disabling MFA methods.\n * That is to say, changing MFA methods does not update the cache on AWS end.\n * Calling `getUserData()` with `byPassCache` param true will ensure it's fresh.\n * Once this is fixed, the getUserData call below can be removed.\n */\nexport const currentMFAMethod = () => (dispatch) => {\n return getCurrentAuthenticatedUser().then((user) => {\n // Temporary work around for known AWS bug\n return user.getUserData(\n () => {\n // The part we care about\n return Auth.getPreferredMFA(user)\n .then((response) => {\n dispatch(_setCurrentMFAMethod(response));\n return response;\n })\n .catch((err) => {\n console.debug(err);\n });\n //\n },\n { bypassCache: true }\n );\n });\n};\n\n/**\n * Gets the TOTP code from Cognito to allow a user to set up\n * software based MFA. Note that the code must be converted to\n * a QR code in order for it to be scanned.\n *\n * Note: https://github.com/aws-amplify/amplify-js/issues/1226\n * If a user goes to set up a new TOTP application, it will silently disable TOTP MFA.\n * We should first make the user disable TOTP MFA before setting up a new application.\n * This way, if a user abandons the set up process, they won't disable their existing TOTP MFA\n * without knowing. The user needs to first disable TOTP MFA, verify a new one, and that verification\n * will then re-enable the TOTP MFA.\n */\nexport const setupTOTP = () => (dispatch) => {\n getCurrentAuthenticatedUser().then((user) => {\n Auth.setupTOTP(user).then((code) => {\n const authCode = `otpauth://totp/${\n user.attributes.email || \"\"\n }?secret=${code}&issuer=Alpaca`;\n dispatch(_setTOTPQRCode(authCode));\n });\n });\n};\n\n/**\n * Verifies a TOTP token generated by an TOTP-generating application.\n * TOTP MFA Will then be enabled for the user upon success.\n */\nexport const verifyTOTPToken = (challengeAnswer) => (dispatch) => {\n getCurrentAuthenticatedUser().then((user) => {\n Auth.verifyTotpToken(user, challengeAnswer)\n .then(() => {\n // Note that there is a resonse, it's {Status: \"SUCCESS\"}\n // It should always be a succes, it will throw errors.\n dispatch(_setTOTPQRCode(null));\n dispatch(enableMFA(MFAMethods[\"SOFTWARE_TOKEN_MFA\"].method));\n })\n .catch((err) => {\n console.error(err);\n dispatch(_setTOTSetupVerificationError(err));\n });\n });\n};\n\nconst initialState = {\n method: null,\n TOTPQRCode: null,\n TOTPQRVerificationError: null,\n};\nexport default createReducer(\n {\n [_setCurrentMFAMethod]: (state, method) => ({ ...state, method }),\n [_setTOTPQRCode]: (state, TOTPQRCode) => ({ ...state, TOTPQRCode }),\n [_setTOTSetupVerificationError]: (state, TOTPSetupVerificationError) => ({\n ...state,\n TOTPSetupVerificationError,\n }),\n },\n initialState\n);\n","import { createAction, createReducer } from \"redux-act\";\nimport api from \"api\";\nimport { handleSessionExpire } from \"../alpacaAuth/session\";\nimport \"fast-text-encoding\";\nimport { getAccountIdForProduct } from \"selectors\";\n\nconst REDUCER = \"trade\";\nconst NS = `@@${REDUCER}/`;\n\nconst _setTradeDetails = createAction(`${NS}SET_TRADE_DETAILS`);\n\n/**\n * loadTradeDetails loads the trading details for a specific account.\n * This includes the buying power, cash, cash withdrawable, portfolio value\n * and some other status flags.\n *\n * Note: Product/type may become an id in the future when multiple accounts are supported.\n * Account here needs all accounts and the account.details (for owner ID).\n *\n * @param {Object} account All of the user's accounts data (and owner details)\n * @param {String} product The type of account we're getting data for (currently paper or live, just one account for now)\n * @param {Boolean} getLast If true, get values for last trading day close\n */\nexport const loadTradeDetails = (\n account,\n product = \"paper\",\n getLast = false\n) => (dispatch, getState) => {\n const ownerId =\n (getState().account &&\n getState().account.details &&\n getState().account.details.owner_id) ||\n false;\n\n if (account) {\n const tradeEndPoint =\n product === \"paper\" ? \"paperTradeAccount\" : \"tradeAccount\";\n // Temporary: For ETC the endpoint switches to the V2 to properly reflect 2x buying power\n const clearingBroker =\n (getState().account &&\n getState().account.account &&\n getState().account.account.clearing_broker) ||\n \"APEX\";\n\n const accountId = getAccountIdForProduct(getState(), product);\n\n if (accountId) {\n let method = \"get\";\n\n if (clearingBroker === \"ETC\" || clearingBroker === \"VELOX\") {\n method = getLast ? \"getETCLast\" : \"getETC\";\n }\n\n return handleSessionExpire(\n dispatch(api[tradeEndPoint][method]({ accountId })).then((trade) =>\n dispatch(\n _setTradeDetails({ accountId, type: product, ownerId, trade })\n )\n ),\n dispatch\n );\n }\n return;\n }\n};\n\n// Export this reducer\nconst initialState = {};\nexport default createReducer(\n {\n [_setTradeDetails]: (state, { accountId, trade }) => {\n // ie. trade.bfe87e76-5ad3-41d6-a12d-918142bb38df\n const newState = { ...state };\n newState[accountId] = { ...newState[accountId], ...trade };\n return newState;\n },\n },\n initialState\n);\n","import { createAction, createReducer } from \"redux-act\";\nimport api from \"api\";\nimport { handleSessionExpire } from \"../alpacaAuth/session\";\nimport \"fast-text-encoding\";\nimport { getAccountIdForProduct } from \"selectors\";\nimport { getSessionJWT } from \"../../utils\";\n\nconst REDUCER = \"position\";\nconst NS = `@@${REDUCER}/`;\n\nconst _setPositions = createAction(`${NS}SET_POSITIONS`);\nconst _setPlacedLiquidationOrders = createAction(\n `${NS}SET_PLACED_LIQUIDATION_ORDERS`\n);\n\n/**\n * listPositions\n */\nexport const listPositions = (product) => async (dispatch, getState) => {\n const token = await getSessionJWT();\n\n // Figure out the account id to use\n const accountId = getAccountIdForProduct(getState(), product);\n // TODO: Move some logic for getting the account info out from all of the components\n // and into these actions. If there is no accountId, attempt to get it.\n // That way, it covers the case where a user loads a dashboard page directly\n // and does not yet have account info (opposed to when they navigate from another\n // page and already had account info in state).\n // Though there may be more needed than just the accountId. Many places require\n // owner details, and all accounts. So initUser() seems to be the minimum needed.\n\n const positionsEndPoint =\n product === \"paper\" ? \"paperPositions\" : \"positions\";\n if (accountId) {\n return handleSessionExpire(\n api[positionsEndPoint].list(accountId, token).then((positions) => {\n return dispatch(_setPositions({ accountId, positions }));\n }),\n dispatch\n );\n }\n return;\n};\n\n/**\n * liquidate\n */\nexport const liquidate = ({ product, symbols, qty }) => (\n dispatch,\n getState\n) => {\n const accountId = getAccountIdForProduct(getState(), product);\n const ordersEndPoint = product === \"paper\" ? \"paperPositions\" : \"positions\";\n let endpoint = api[ordersEndPoint].liquidate(\n { accountId },\n { symbols: symbols || [] }\n );\n\n // If a single position is specified with quantity\n if (qty && symbols && symbols.length === 1) {\n endpoint = api[ordersEndPoint].liquidatePosition({\n accountId,\n symbol: symbols[0],\n qty,\n });\n }\n\n return handleSessionExpire(\n dispatch(endpoint)\n .then((res) => {\n // Set the response (a list of placed orders) on the state to be displayed to the user for confirmation\n dispatch(\n _setPlacedLiquidationOrders({\n accountId,\n // liquide returns list of orders while liquidatePosition returns the order\n placedLiquidationOrders: res.orders || [res],\n })\n );\n // Refresh current list of positions\n dispatch(listPositions());\n\n // Handling errors in 200 response.\n // Note that responses are not consistent. Due to this being a batch operation,\n // an array of errors could be returned. Alternatively, if there was some sort of\n // other error preventing the batch operation from even ocurring, the error response\n // could take on a different format commonly seen from other API methods.\n // Note: catch() below because of the status code.\n\n // In the event of a partial liquidate:\n // Not sure what to display. The feedback is already presented to the user as they\n // will see the table data update.\n // if (res.errors && res.errors.length > 0) {\n // throw new Error('There was an error with one or more liquidation order.')\n // }\n // Example error: {\"errors\":[{\"code\":40310000,\"message\":\"insufficient qty (0 \\u003c 10)\"}],\"orders\":[]}\n // When there's existing orders. That's %3C or < ... So: \"qty (0 < 10)\"\n // It's not descript enough to say which symbol so can't be used in a summary screen or anything. Just yet.\n if (res.errors && res.errors.length > 0) {\n res.errors.forEach((err) => {\n if (\n err.message ===\n \"trade denied due to pattern day trading protection\"\n ) {\n throw new Error(\n \"One or more positions could not be liquidated due to pattern day trading protection.\"\n );\n }\n });\n throw new Error(\"One or more positions could not be liquidated.\");\n } else {\n return res;\n }\n })\n .catch((e) => {\n // Regardless of error, refresh current list of positions and ensure placed liquidation orders state is empty\n dispatch(\n _setPlacedLiquidationOrders({\n accountId,\n placedLiquidationOrders: [],\n })\n );\n dispatch(listPositions());\n\n // In the event the market is closed:\n // 'market is closed' is a common erorr message returned by the gobroker API in other places too.\n // Example error: {\"code\":40310000,\"message\":\"market is closed\"}\n // A friendlier message has been created here.\n if (e.message && e.message === \"market is closed\") {\n e.message = \"The market is closed right now.\";\n }\n throw e;\n }),\n dispatch\n );\n};\n\n// Resets the list of orders created by a previous liquidate\nexport const resetLiquidatedOrders = (product) => (dispatch, getState) => {\n const accountId = getAccountIdForProduct(getState(), product);\n if (accountId) {\n return dispatch(\n _setPlacedLiquidationOrders({ accountId, placedLiquidationOrders: [] })\n );\n }\n};\n\n// Export this reducer\nconst initialState = {};\nexport default createReducer(\n {\n [_setPositions]: (state, { accountId, positions }) => {\n // ie. position.bfe87e76-5ad3-41d6-a12d-918142bb38df.positions\n const newState = { ...state };\n if (newState[accountId] === undefined) {\n newState[accountId] = { positions };\n } else {\n newState[accountId].positions = positions;\n }\n return newState;\n },\n [_setPlacedLiquidationOrders]: (\n state,\n { accountId, placedLiquidationOrders }\n ) => {\n const newState = { ...state };\n if (newState[accountId] === undefined) {\n newState[accountId] = { placedLiquidationOrders };\n } else {\n newState[accountId].placedLiquidationOrders = placedLiquidationOrders;\n }\n return newState;\n },\n },\n initialState\n);\n","import { createAction, createReducer } from \"redux-act\";\nimport api from \"api\";\nimport { handleSessionExpire } from \"../alpacaAuth/session\";\nimport unionBy from \"lodash/unionBy\";\nimport { getAccountIdForProduct } from \"selectors\";\n\nconst REDUCER = \"order\";\nconst NS = `@@${REDUCER}/`;\n\nconst _setOrderHistory = createAction(`${NS}SET_ORDER_HISTORY`);\nconst _setOrderNotFound = createAction(`${NS}SET_ORDER_NOT_FOUND`);\nconst _setOrderStream = createAction(`${NS}SET_ORDER_STREAM`);\nconst _setCanceledOrders = createAction(`${NS}SET_CANCELED_ORDERS`);\nconst _requestOrderHistory = createAction(`${NS}REQUEST_ORDER_HISTORY`);\nconst _requestOrderStream = createAction(`${NS}REQUEST_ORDER_STREAM`);\nconst _clearOrderHistory = createAction(`${NS}CLEAR_ORDER_HISTORY`);\n/**\n * streamOrders\n */\nexport const streamOrders = ({ product, status, limit, until, after }) => (\n dispatch,\n getState\n) => {\n const { token } = api.getAccountIdAndJWT(getState());\n\n // Figure out the account id to use\n const accountId = getAccountIdForProduct(getState(), product);\n\n if (accountId) {\n const currentOrdersStream = (getState() && getState()[accountId]) || false;\n if (currentOrdersStream && currentOrdersStream.awaitingStream)\n return Promise.resolve();\n\n dispatch(_requestOrderStream({ accountId, limit, until, after }));\n\n const ordersEndPoint = product === \"paper\" ? \"paperOrders\" : \"orders\";\n return handleSessionExpire(\n api[ordersEndPoint]\n .list(accountId, token, { status, limit, until, after })\n .then((orders) => {\n const lastStreamTime = !orders\n ? null\n : orders.length\n ? orders[0].submitted_at\n : new Date().toJSON();\n dispatch(_setOrderStream({ accountId, orders, lastStreamTime }));\n }),\n dispatch\n );\n }\n return;\n};\n\n/**\n * listOrders\n *\n * @param {Object}\n * - product The product, paper or live\n * - status Is either \"open\", \"closed\", or \"all\" (defaults to all)\n * - limit Is by default 50, max 500\n * - until Is current date by default (can be specified as '2019-01-01')\n * - after Is a long time ago by default\n * - keyByStatus Will take the response and put the orders into state keyed by status\n * (useful when viewing multiple tables of orders by status, ie. open vs closed)\n */\nexport const listOrders = ({\n product,\n status,\n limit,\n until,\n after,\n keyByStatus = false,\n initializeOpen = false,\n}) => (dispatch, getState) => {\n const accountId = getAccountIdForProduct(getState(), product);\n\n if (accountId) {\n const currentAccountOrders =\n (getState() && getState().order && getState().order[accountId]) || false;\n if (currentAccountOrders && currentAccountOrders.awaitingStream)\n return Promise.resolve();\n\n dispatch(_requestOrderHistory({ accountId, limit, until, after }));\n\n const ordersEndPoint = product === \"paper\" ? \"paperOrders\" : \"orders\";\n const endpoint = api[ordersEndPoint].list;\n\n const requests = [\n dispatch(endpoint({ accountId }, { status, limit, until, after })),\n ];\n if (initializeOpen) {\n // add request for open orders\n requests.push(\n dispatch(\n endpoint(\n { accountId },\n {\n status: \"open\",\n limit,\n }\n )\n )\n );\n }\n\n return handleSessionExpire(\n Promise.all(requests).then((resp) => {\n for (const orders of resp) {\n const hasMoreHistory = !!orders && orders.length === limit;\n dispatch(\n _setOrderHistory({ accountId, orders, hasMoreHistory, keyByStatus })\n );\n }\n }),\n dispatch\n );\n }\n return;\n};\n\n/**\n * cancelAllOrders will cancel all open orders.\n */\nexport const cancelAllOrders = (product) => (dispatch, getState) => {\n const { token } = api.getAccountIdAndJWT(getState());\n\n // Figure out the account id to use\n const accountId = getAccountIdForProduct(getState(), product);\n\n if (accountId) {\n const currentAccount =\n (getState() && getState().order && getState().order[accountId]) || false;\n if (currentAccount && currentAccount.awaitingStream)\n return Promise.resolve();\n\n const ordersEndPoint = product === \"paper\" ? \"paperOrders\" : \"orders\";\n return handleSessionExpire(\n api[ordersEndPoint].cancelAll(accountId, token).then((canceledOrders) => {\n dispatch(_setCanceledOrders({ accountId, canceledOrders }));\n }),\n dispatch\n );\n }\n return;\n};\n\n/**\n * cancelOrders will cancel provided open orders.\n */\nexport const cancelSelectedOrders = (product, orderIds) => (\n dispatch,\n getState\n) => {\n // Figure out the account id to use\n const accountId = getAccountIdForProduct(getState(), product);\n\n if (accountId) {\n const currentAccount =\n (getState() && getState().order && getState().order[accountId]) || false;\n if (currentAccount && currentAccount.awaitingStream)\n return Promise.resolve();\n\n const ordersEndPoint = product === \"paper\" ? \"paperOrders\" : \"orders\";\n const requests = orderIds.map((orderId) =>\n dispatch(\n api[ordersEndPoint].cancelOrder({\n accountId,\n orderId,\n })\n )\n );\n\n return handleSessionExpire(\n Promise.all(requests).then(() => {\n dispatch(\n _setCanceledOrders({\n accountId,\n // UI checks status code on orders\n canceledOrders: orderIds.map((id) => ({ id, status: 204 })),\n })\n );\n }),\n dispatch\n );\n }\n return;\n};\n\n/**\n * replaceOrder will replace an order with new order details\n */\nexport const replaceOrder = (product, orderId, orderDetails) => (\n dispatch,\n getState\n) => {\n const accountId = getAccountIdForProduct(getState(), product);\n\n if (accountId) {\n const ordersEndPoint = product === \"paper\" ? \"paperOrders\" : \"orders\";\n const request = api[ordersEndPoint].replaceOrder(\n {\n accountId,\n orderId,\n },\n orderDetails\n );\n\n return handleSessionExpire(dispatch(request), dispatch);\n }\n\n return new Promise();\n};\n\n/**\n * clearCanceledOrders clears the state of all previously canceled order UUIDs\n * for either paper or live account.\n */\nexport const clearCanceledOrders = (product) => (dispatch, getState) => {\n // Figure out the account id to use\n const accountId = getAccountIdForProduct(getState(), product);\n\n dispatch(_setCanceledOrders({ accountId, canceledOrders: [] }));\n};\n\n/**\n * gerOrder fetch details for a single order\n */\nexport const getOrder = (product, orderId) => (dispatch, getState) => {\n const accountId = getAccountIdForProduct(getState(), product);\n\n if (accountId) {\n const ordersEndPoint = api[\n product === \"paper\" ? \"paperOrders\" : \"orders\"\n ].getOrder({\n accountId,\n orderId,\n });\n\n return handleSessionExpire(\n ordersEndPoint()\n .then((order) => {\n dispatch(_setOrderHistory({ accountId, orders: [order] }));\n })\n .catch((e) => {\n if (e.status === 404)\n dispatch(_setOrderNotFound({ accountId, orderId }));\n }),\n dispatch\n );\n }\n return;\n};\n\n/**\n * clearOrderHistory\n */\nexport const clearOrderHistory = () => (dispatch) => {\n dispatch(_clearOrderHistory());\n};\n\n// Export this reducer\nconst initialState = {};\n\nexport default createReducer(\n {\n [_setOrderNotFound]: (state, payload) => {\n const { accountId, orderId } = payload;\n const newState = { ...state };\n newState[accountId] = newState[accountId] || {};\n newState[accountId].notFound = newState[accountId].notFound || [];\n newState[accountId].notFound.push(orderId);\n return newState;\n },\n\n [_setOrderHistory]: (state, payload) => {\n // since this will periodically be called, merge new orders to existing state (don't duplicate data)\n const existingOrders =\n (state[payload.accountId] && state[payload.accountId].orders) || [];\n const newOrders = (payload && payload.orders) || [];\n const concatOrders = unionBy(newOrders, existingOrders, \"id\");\n\n const newState = { ...state };\n newState[payload.accountId] = {\n ...newState[payload.accountId],\n awaitingStream: false,\n isInitialized: true,\n lastStreamTime: payload.lastStreamTime,\n hasMoreHistory: payload.hasMoreHistory,\n };\n\n const openStatusList = [\n \"accepted\",\n \"new\",\n \"partially_filled\",\n \"calculated\",\n \"pending_new\",\n \"pending_cancel\",\n \"pending_replace\",\n \"accepted_for_bidding\",\n \"held\",\n \"pending_review\",\n ];\n // optional, keeps state size down if not true\n if (payload.keyByStatus) {\n newState[payload.accountId].openOrders = concatOrders.filter((o) => {\n return openStatusList.includes(o.status);\n });\n newState[payload.accountId].closedOrders = concatOrders.filter((o) => {\n return !openStatusList.includes(o.status);\n });\n }\n\n // always needs to be set\n newState[payload.accountId].orders = concatOrders;\n return newState;\n },\n\n [_setOrderStream]: (state, payload) => {\n // since this will periodically be called, merge new orders to existing state (don't duplicate data)\n const existingOrders =\n (state[payload.accountId] && state[payload.accountId].orders) || [];\n const newOrders = (payload && payload.orders) || [];\n const concatOrders = unionBy(newOrders, existingOrders, \"id\");\n\n const newState = { ...state };\n newState[payload.accountId] = {\n ...newState[payload.accountId],\n awaitingStream: false,\n isInitialized: true,\n lastStreamTime: payload.lastStreamTime,\n orders: concatOrders,\n };\n return newState;\n },\n\n [_setCanceledOrders]: (state, { accountId, canceledOrders }) => {\n const newState = { ...state };\n newState[accountId].canceledOrders = canceledOrders;\n return newState;\n },\n\n [_requestOrderHistory]: (state, { accountId }) => {\n // ie. order.bfe87e76-5ad3-41d6-a12d-918142bb38df.positions\n const newState = { ...state };\n newState[accountId] = { ...newState[accountId], awaitingStream: true };\n return newState;\n },\n\n [_requestOrderStream]: (state, { accountId }) => {\n // ie. order.bfe87e76-5ad3-41d6-a12d-918142bb38df.positions\n const newState = { ...state };\n newState[accountId] = { ...newState[accountId], awaitingStream: true };\n return newState;\n },\n\n [_clearOrderHistory]: () => {\n return initialState;\n },\n },\n initialState\n);\n","import { createAction, createReducer } from \"redux-act\";\nimport { getAccountIdForProduct } from \"selectors/index\";\nimport { handleSessionExpire } from \"./alpacaAuth/session\";\nimport api from \"api\";\n\nconst REDUCER = \"contest\";\nconst NS = `@@${REDUCER}/`;\n\nconst _setContests = createAction(`${NS}SET_CONTESTS`);\nconst _setContestEnrollment = createAction(`${NS}SET_CONTEST_ENROLLMENT`);\nconst _setCurrentLeaderboard = createAction(`${NS}SET_CURRENT_LEADERBOARD`);\nconst _setAllTimeLeaderboard = createAction(`${NS}SET_ALLTIME_LEADERBOARD`);\nconst _setLeaderboardProfile = createAction(`${NS}SET_LEADERBOARD_PROFILE`);\n\n/**\n * getContests will retrieve a list of all contests\n */\nexport const getContests = () => (dispatch) =>\n dispatch(api.contests.list())\n .then((payload) => dispatch(_setContests({ contestList: payload })))\n .catch(() => dispatch(_setContests({ contestList: [] })));\n\n/**\n * enrollContest will enroll the user in the given contest\n */\nexport const enrollContest = (\n contestId,\n email,\n username,\n picture_url,\n strategy\n) => (dispatch, getState) => {\n const paperAccountId = getAccountIdForProduct(getState(), \"paper\");\n const params = { email, username, picture_url, strategy };\n\n return handleSessionExpire(\n api.contests.enrollment\n .post({ paperAccountId, contestId }, params)(dispatch, getState)\n .then(() => dispatch(getContestEnrollment(contestId))),\n dispatch\n );\n};\n\n/**\n * getContestEnrollment will check if the user is enrolled in the given contest\n */\nexport const getContestEnrollment = (contestId) => (dispatch, getState) => {\n const paperAccountId = getAccountIdForProduct(getState(), \"paper\");\n\n return handleSessionExpire(\n api.contests.enrollment\n .get({ paperAccountId, contestId })(dispatch, getState)\n .then((payload) =>\n dispatch(_setContestEnrollment({ contestEnrollment: payload }))\n )\n .catch(() =>\n dispatch(_setContestEnrollment({ contestEnrollment: null }))\n ),\n dispatch\n );\n};\n\n/**\n * deleteContestEnrollment will delete user contest enrollment in the given\n * contest.\n */\nexport const deleteContestEnrollment = (contestId) => (dispatch, getState) => {\n const paperAccountId = getAccountIdForProduct(getState(), \"paper\");\n\n return handleSessionExpire(\n api.contests.enrollment\n .delete({ paperAccountId, contestId })(dispatch, getState)\n .then(() => dispatch(_setContestEnrollment({ contestEnrollment: null }))),\n dispatch\n );\n};\n\n/**\n * patchContestEnrollment will update user contest enrollment to be linked to the\n * given account.\n */\nexport const patchContestEnrollment = (contestId) => (dispatch, getState) => {\n const paperAccountId = getAccountIdForProduct(getState(), \"paper\");\n console.log(\"New Account: \", paperAccountId);\n\n return handleSessionExpire(\n api.contests.enrollment\n .patch({ paperAccountId, contestId })(dispatch, getState)\n .then((payload) =>\n dispatch(_setContestEnrollment({ contestEnrollment: payload }))\n )\n .catch(() =>\n dispatch(_setContestEnrollment({ contestEnrollment: null }))\n ),\n dispatch\n );\n};\n\n/**\n * getLeaderboard will retrieve the leaderboard for a given contest\n */\nexport const getLeaderboard = (contestId) => (dispatch) =>\n dispatch(api.contests.leaderboard.get({ contestId })).then((payload) =>\n dispatch(_setCurrentLeaderboard({ currentLeaderboard: payload }))\n );\n\n/**\n * getAllTimeLeaderboard will retrieve the leaderboard for a given contest\n */\nexport const getAllTimeLeaderboard = () => (dispatch) =>\n dispatch(api.contests.leaderboard.getAllTime()).then((payload) =>\n dispatch(_setAllTimeLeaderboard({ allTimeLeaderboard: payload }))\n );\n\n/**\n * getLeaderboardProfile will retrieve the leaderboard for a given contest\n */\nexport const getLeaderboardProfile = (contestId, participantId) => (dispatch) =>\n dispatch(\n api.contests.leaderboard.getParticipant({ contestId, participantId })\n ).then((payload) =>\n dispatch(_setLeaderboardProfile({ leaderboardProfile: payload }))\n );\n\n// Export this reducer\nconst initialState = {};\nexport default createReducer(\n {\n [_setContests]: (state, { contestList }) => {\n return { ...state, contestList };\n },\n [_setContestEnrollment]: (state, { contestEnrollment }) => {\n return { ...state, contestEnrollment };\n },\n [_setCurrentLeaderboard]: (state, { currentLeaderboard }) => {\n return { ...state, currentLeaderboard };\n },\n [_setAllTimeLeaderboard]: (state, { allTimeLeaderboard }) => {\n return { ...state, allTimeLeaderboard };\n },\n [_setLeaderboardProfile]: (state, { leaderboardProfile }) => {\n return { ...state, leaderboardProfile };\n },\n },\n initialState\n);\n","import React from \"react\";\nimport { createAction, createReducer } from \"redux-act\";\nimport { notification, Avatar } from \"antd\";\nimport Auth from \"@aws-amplify/auth\";\nimport Storage from \"@aws-amplify/storage\";\nimport { setUserState } from \"reducers/auth/common\";\nimport { getCurrentAuthenticatedUser } from \"../utils\";\n\nexport const REDUCER = \"profile\";\nconst NS = `@@${REDUCER}/`;\n\nconst _setProfilePic = createAction(`${NS}SET_PROFILE_PIC`);\nconst _setProfilePicUrl = createAction(`${NS}SET_PROFILE_PIC_URL`);\nconst _setPhoneNumberToVerify = createAction(`${NS}SET_PHONE_NUMBER_TO_VERIFY`);\nconst _setPhoneNumberVerificationError = createAction(\n `${NS}SET_PHONE_NUMBER_VERIFICATION_ERROR`\n);\n\nexport const submit = (values) => (dispatch) => {\n // Upload profile pic to the user's directory in S3 bucket\n if (values.profile_picture) {\n dispatch(uploadProfilePic(values.profile_picture));\n }\n\n dispatch(updateInCognito(values));\n};\n\n// Please keep in mind that when extending the capabilities of this function that cognito has a permisive\n// scope for the AccessToken that they are returning and there is no way of configuring that. This in turn\n// helps hackers exploit the AccessToken to change sensitive information such as email and phone number of the cognito account.\n// We want to avoid changing attributes using aws-amplify in the future and just direct the calls to gobroker.\n// This would help maintain the consistency of the data and as well as prevent the exploit.\n// More details of the exploit over here: https://alpaca.atlassian.net/browse/ENG-9903\nconst updateInCognito = (values) => (dispatch, getState) => {\n const state = getState();\n\n // If the user stored a phone number, then they will be sent a verification code.\n // Ensure state updates so that the form page knows to display a form to allow verification.\n if (\n values.phone_number &&\n values.phone_number !== state.auth.userState.attributes.phone_number\n ) {\n dispatch(_setPhoneNumberToVerify(true));\n }\n\n // If the user also sent fields to reset their password, do that too.\n if (values.old_password && values.new_password) {\n // Only the current user can change their password of course\n // Even if someone else stole a user's password, logged in, and changed it...\n // The original user could use \"forgot password\" and reset it from the login screen.\n // IF we also handled the API to change a username/e-mail, the attacker wouldn't be\n // able to change the e-mail either because a verification code is sent for that API method.\n getCurrentAuthenticatedUser()\n .then((user) => {\n return Auth.changePassword(\n user,\n values.old_password,\n values.new_password\n );\n })\n .then(() => {\n // TODO: It would be nice to also send an e-mail notifying the user that someone, hopefully them,\n // changed their password. If it was them, ignore, if it wasn't, forgot password, etc. etc.\n\n notification.open({\n type: \"success\",\n message: \"Your password was changed\",\n });\n dispatch(refreshUserAttributes());\n })\n .catch((err) => {\n switch (err.code) {\n case \"NotAuthorizedException\": {\n notification.open({\n type: \"error\",\n message: \"Entered old password is incorrect\",\n });\n break;\n }\n default: {\n notification.open({\n type: \"error\",\n message: err.message,\n });\n break;\n }\n }\n console.debug(err);\n });\n } else {\n // Just a profile update, no password change\n notification.open({\n type: \"success\",\n message: \"Your profile was updated\",\n });\n dispatch(refreshUserAttributes());\n }\n};\n\n/**\n * Verifies the current user's phone_number attribute in Cognito.\n *\n * @param {string} code\n */\nexport const verifyPhoneNumber = (code) => (dispatch) => {\n if (code) {\n Auth.verifyCurrentUserAttributeSubmit(\"phone_number\", code)\n .then(() => {\n // The response is just going to be \"SUCCESS\" string like account verification\n // This either works or it fails and can be caught\n notification.open({\n type: \"success\",\n message: \"Your phone number was verified successfully\",\n });\n dispatch(_setPhoneNumberToVerify(false));\n // Update the data fresh\n dispatch(refreshUserAttributes());\n })\n .catch((err) => {\n console.debug(\"Failed to verify phone number\", err);\n dispatch(_setPhoneNumberVerificationError(err));\n });\n }\n};\n\n/**\n * Resends a code to verify an attribute.\n */\nexport const resendAttributeVerification = (attribute = \"phone_number\") => (\n dispatch\n) => {\n return Auth.verifyCurrentUserAttribute(attribute).then(() => {\n if (attribute === \"phone_number\") {\n return dispatch(_setPhoneNumberToVerify(true));\n }\n });\n};\n\n/**\n * Refreshes user attributes (and bypasses any cache).\n */\nexport const refreshUserAttributes = () => (dispatch) => {\n // Update the data fresh\n return getCurrentAuthenticatedUser().then((user) => {\n user.getUserData(\n () => {\n // Now we can get fresh\n return getCurrentAuthenticatedUser().then((freshUser) => {\n return dispatch(\n setUserState({\n userState: freshUser,\n })\n );\n });\n //\n },\n { bypassCache: true }\n );\n });\n};\n\nexport const uploadProfilePic = (file) => (dispatch) => {\n // It's probably better to use file.name\n // then contentType: file.type\n // But this makes for a predictable path to the user's profile picture.\n // That means if user ids are stored somewhere (DynamoDB, S3, etc.) and accessed,\n // the profile picture can be found without an API call. There would be no lookup\n // for a potentially changed filename. User attributes also need not be set.\n Storage.put(\"profile.png\", file, {\n level: \"protected\",\n region: \"us-east-1\",\n contentType: \"image/png\",\n }).catch((err) => {\n console.error(err);\n notification.open({\n type: \"error\",\n message: \"Could not upload profile picture, try again\",\n });\n });\n};\n\nexport const getProfilePic = () => (dispatch) => {\n // Hack around limitation in Storage.get()\n // https://github.com/aws-amplify/amplify-js/issues/1145\n // This always makes for two requests...May even move to leaving profile pictures as public.\n // Just prefix the keys with the user id. Then, maybe using axois?, it would be to just load\n // the profile pic from S3 (where it wouldn't need temporary credentials) and if 404, then\n // show the default avatar. That would make for one request.\n // On one hand, there's a desire to keep these protected - only authenticated users can\n // see (or perhaps really need to see) the profile pictures. On the other hand, is it\n // universally assumed a profile picture is public domain?\n //\n // Note: use region where bucket is (otherwise 400 error)\n Storage.list(\"profile.png\", { level: \"protected\", region: \"us-east-1\" })\n .then((result) => {\n if (result.length > 0) {\n // Use region where bucket is located\n Storage.get(\"profile.png\", { level: \"protected\", region: \"us-east-1\" })\n .then((result) => {\n dispatch(\n _setProfilePic(\n \n )\n );\n dispatch(_setProfilePicUrl(result));\n })\n .catch(() => {\n // It's ok if not found.\n });\n }\n })\n .catch((err) => {\n // Also ok if error in the response, the default avatar component will be used.\n console.debug(err);\n });\n};\n\nconst initialState = {\n pic: (\n \n ),\n picUrl: \"\",\n phoneNumberToVerify: false,\n};\n\nexport default createReducer(\n {\n [_setProfilePic]: (state, component) => ({ ...state, pic: component }),\n [_setProfilePicUrl]: (state, url) => ({ ...state, picUrl: url }),\n [_setPhoneNumberToVerify]: (state, phoneNumberToVerify) => ({\n ...state,\n phoneNumberToVerify,\n }),\n [_setPhoneNumberVerificationError]: (\n state,\n phoneNumberVerificationError\n ) => ({ ...state, phoneNumberVerificationError }),\n },\n initialState\n);\n","import { createAction, createReducer } from \"redux-act\";\nimport { notification } from \"antd\";\nimport { getAlpacaAccountId } from \"selectors\";\nimport { listTransfers } from \"./account\";\nimport api from \"api\";\nimport AmplitudeProvider from \"src/AmplitudeProvider\";\nimport { eventTracker } from \"src/utils/eventTracker\";\n\nconst REDUCER = \"transfer\";\nconst NS = `@@${REDUCER}/`;\n\nconst _upsertTransfer = createAction(`${NS}UPSERT_TRANSFER`);\nconst _setStatus = createAction(`${NS}SET_STATUS`);\nexport const clearTransferRequest = createAction(`${NS}CLEAR_TRANSFER_REQUEST`);\n\nconst transferCreator = (direction) => ({\n relationshipId,\n bankId,\n amount,\n type,\n}) => (dispatch, getState) => {\n const accountId = getAlpacaAccountId(getState());\n return dispatch(\n api.transfers.create(\n { accountId },\n {\n relationship_id: relationshipId,\n bank_id: bankId,\n transfer_type: type,\n direction,\n amount,\n }\n )\n )\n .then((transfer) => {\n if (transfer) {\n eventTracker(\"Deposited Funds\", {\n category: \"Banking\",\n label: window.location.pathname,\n value: amount,\n });\n\n AmplitudeProvider.dispatch(\n direction == \"INCOMING\"\n ? \"deposit_submitted\"\n : \"withdrawal_submitted\",\n JSON.stringify({ amount })\n );\n\n dispatch(_upsertTransfer(transfer));\n dispatch(listTransfers());\n }\n })\n .catch((err) => {\n eventTracker(\"Failed to Deposit Funds\", {\n category: \"Banking\",\n label: window.location.pathname,\n value: amount,\n });\n console.error(\"Failed transfer request (deposit):\", err);\n notification.open({\n type: \"error\",\n message: \"Failed transfer request (deposit)\",\n description: err.message,\n });\n dispatch(_setStatus(\"FAILED\"));\n });\n};\n\nexport const deposit = transferCreator(\"INCOMING\");\nexport const withdraw = transferCreator(\"OUTGOING\");\n\nexport const cancelTransfer = (transferId) => (dispatch, getState) => {\n const accountId = getAlpacaAccountId(getState());\n return dispatch(api.transfers.delete({ accountId, transferId })).then(() =>\n dispatch(listTransfers())\n );\n};\n\nconst initialState = {};\nexport default createReducer(\n {\n [_upsertTransfer]: (state, transfer) => ({\n ...state,\n ...transfer,\n }),\n [_setStatus]: (state, status) => ({\n ...state,\n status,\n }),\n [clearTransferRequest]: () => ({}),\n },\n initialState\n);\n","import UI from \"@alpacahq/ui\";\n\nimport React, { ReactNode } from \"react\";\n\nimport { useHistory } from \"react-router-dom\";\nimport { useDarkMode } from \"../api/hooks/useDarkMode\";\nimport { customTheme } from \"../theme\";\nimport { Box, ChakraProvider } from \"@chakra-ui/react\";\nimport { QueryClient, QueryClientProvider } from \"react-query\";\n\nimport \"react-datepicker/dist/react-datepicker.css\";\nimport \"react-phone-input-2/lib/style.css\";\n// @deprecated\nimport \"@alpacahq/sassy/dist/theme.css\";\nimport \"@alpacahq/ui/public/theme\";\nimport \"../theme.scss\";\n\nexport const client = new QueryClient({\n defaultOptions: { queries: { staleTime: 10000 } },\n});\n\nconst App = (props: { children: ReactNode }) => {\n const { useDarkModeValue } = useDarkMode();\n\n return (\n \n \n \n \n {props.children}\n \n \n \n );\n};\n\nexport default App;\n","import { colors } from \"@alpacahq/sassy\";\nimport { extendTheme } from \"@chakra-ui/react\";\n\nexport const customTheme = (mode: any) =>\n extendTheme({\n styles: {\n global: () => ({\n html: {\n fontFamily: \"Inter var, sans-serif\",\n background: mode(\"#16161a\", \"#FFFFFF\"),\n color: mode(\"gray.10\", \"black\"),\n fontSize: \"14px\",\n lineHeight: \"16px\",\n textRendering: \"unset\",\n WebkitFontSmoothing: \"unset\",\n },\n body: {\n fontFamily: \"Inter var, sans-serif\",\n background: mode(\"#16161a\", \"#FFFFFF\"),\n color: mode(\"gray.30\", \"black\"),\n fontSize: \"14px\",\n lineHeight: \"16px\",\n },\n div: {\n borderColor: mode(\n \"var(--chakra-colors-gray-90) !important\",\n \"var(--chakra-colors-gray-20)\"\n ),\n },\n hr: {\n opacity: \"1 !important\",\n borderColor: mode(\n \"var(--chakra-colors-gray-90) !important\",\n \"var(--chakra-colors-gray-15) !important\"\n ),\n },\n p: {\n color: mode(\"gray.10\", \"gray.100\"),\n },\n\n h2: {\n color: mode(\"gray.10\", \"gray.100\"),\n borderColor: mode(\n \"var(--chakra-colors-gray-90) !important\",\n \"var(--chakra-colors-gray-20)\"\n ),\n },\n \".chakra-menu__menuitem\": {\n color: mode(\"gray.10\", \"black !important\"),\n fontWeight: 400,\n _focus: {\n background: \"var(--chakra-colors-gray-15) !important\",\n },\n },\n }),\n },\n fonts: {\n heading: \"Inter var, sans-serif\",\n body: \"Inter var, sans-serif\",\n mono: \"Roboto Mono, monospace\",\n },\n space: {\n xxs: \"0.215rem\",\n xs: \"0.43rem\",\n sm: \"0.96rem\",\n md: \"1.6rem\",\n lg: \"3.2rem\",\n xl: \"6.4rem\",\n },\n fontSizes: {\n xs: \".86rem\",\n sm: \".96rem\",\n md: \"1rem\",\n lg: \"1.125rem\",\n xl: \"1.250rem\",\n \"2xl\": \"1.5rem\",\n \"3xl\": \"1.875rem\",\n \"4xl\": \"2.25rem\",\n \"5xl\": \"2.86rem\",\n \"6xl\": \"3.75rem\",\n \"7xl\": \"4.5rem\",\n \"8xl\": \"6rem\",\n \"9xl\": \"8rem\",\n },\n colors: {\n ...colors,\n pastel: {\n green: \"#5DAF90\",\n red: \"#e65555\",\n },\n black: \"#010101\",\n gray: {\n ...colors.gray,\n 90: \"#181818\",\n 20: \"#e4e4e4\",\n 15: \"#f0f0f0\",\n 10: \"#f7f7f7\",\n },\n },\n components: {\n Radio: {\n baseStyle: {\n control: {\n borderColor: \"gray.20\",\n _checked: {\n bg: \"yellow.60\",\n color: \"gray.10\",\n borderColor: \"yellow.60\",\n _hover: {\n bg: \"yellow.60\",\n color: \"gray.10\",\n borderColor: \"yellow.60\",\n },\n },\n _focus: {\n boxShadow: \"none !important\",\n },\n },\n label: {\n fontSize: \"1rem !important\",\n fontFamily: \"Inter var, sans-serif\",\n },\n },\n },\n Icon: {\n baseStyle: (props: any) => ({\n color: mode(\"gray.10 !important\", \"gray.100\"),\n }),\n },\n Text: {\n baseStyle: (props: any) => ({\n color: mode(\"gray.10 !important\", \"gray.100\"),\n fontFamily: \"Inter var, sans-serif !important\",\n }),\n },\n Checkbox: {\n baseStyle: {\n label: {\n fontFamily: \"Inter var, sans-serif !important\",\n },\n control: {\n _checked: {\n color: \"yellow.80\",\n background: \"yellow.50\",\n borderColor: \"yellow.50\",\n _hover: {\n background: \"yellow.50\",\n borderColor: \"yellow.50\",\n },\n },\n },\n },\n },\n Link: {\n baseStyle: {\n fontSize: \"1rem\",\n color: \"#191919\",\n textDecoration: \"none\",\n fontFamily: \"Inter var, sans-serif !important\",\n },\n },\n Switch: {\n baseStyle: {\n track: {\n bg: \"gray.40\",\n _checked: {\n bg: \"yellow.50\",\n },\n },\n },\n },\n Input: {\n baseStyle: {\n fontFamily: \"Inter var, sans-serif !important\",\n },\n defaultProps: {\n variant: \"filled\",\n },\n variants: {\n flushed: {\n field: {\n color: \"gray.100\",\n borderBottom: \"1px solid var(--chakra-colors-gray-20) !important\",\n boxShadow: \"none !important\",\n _focused: {\n borderBottom:\n \"1px solid var(--chakra-colors-gray-20) !important\",\n boxShadow: \"none !important\",\n },\n _placeholder: {\n color: \"var(--chakra-colors-gray-60) !important\",\n opacity: \"1 !important\",\n },\n },\n },\n skeleton: {\n field: {\n color: \"gray.100\",\n border: \"2px solid var(--chakra-colors-gray-15) !important\",\n boxShadow: \"none !important\",\n _focused: {\n border: \"2px solid var(--chakra-colors-gray-20) !important\",\n boxShadow: \"none !important\",\n },\n _placeholder: {\n color: \"var(--chakra-colors-gray-60) !important\",\n opacity: \"1 !important\",\n },\n },\n },\n filled2: {\n field: {\n color: \"gray.100\",\n border: \"1px solid transparent\",\n background: \"gray.15\",\n _placeholder: {\n color: \"var(--chakra-colors-gray-60) !important\",\n opacity: \"1 !important\",\n },\n _focus: {\n border: \"1px solid gray.10\",\n color: mode(\"gray.10\", \"gray.100\"),\n },\n },\n },\n\n filled: {\n field: {\n background: mode(\"#29292c\", \"gray.20\"),\n color: \"gray.100\",\n border: \"1px solid transparent\",\n _placeholder: {\n color: \"var(--chakra-colors-gray-60) !important\",\n opacity: \"1 !important\",\n },\n _hover: {\n background: \"gray.20\",\n color: \"gray.100\",\n },\n _focus: {\n shadow: \"sm\",\n background: mode(\"#000\", \"gray.20\"),\n borderColor: \"transparent\",\n color: mode(\"gray.10\", \"gray.100\"),\n },\n },\n },\n },\n },\n Select: {\n defaultProps: {\n variant: \"skeleton\",\n },\n variants: {\n lightGray: {\n field: {\n fontWeight: 400,\n color: \"black\",\n borderRadius: \"md\",\n background: \"gray.20\",\n fontSize: \".9rem\",\n border: \"none\",\n _hover: {\n boxShadow: \"0 3px 6px -2px rgba(140,152,164,.25)\",\n },\n _focus: {\n boxShadow: \"0 3px 6px -2px rgba(140,152,164,.25)\",\n },\n },\n },\n yellow: {\n field: {\n fontWeight: 500,\n color: \"black\",\n borderRadius: \"md\",\n background: \"yellow.20\",\n fontSize: \".9rem\",\n border: \"1px solid var(--chakra-colors-yellow-40)\",\n _hover: {\n boxShadow: \"0 3px 6px -2px rgba(140,152,164,.25)\",\n },\n _focus: {\n boxShadow: \"0 3px 6px -2px rgba(140,152,164,.25)\",\n },\n },\n },\n skeleton: {\n field: {\n fontWeight: 500,\n color: \"black\",\n borderRadius: \"md\",\n fontSize: \".9rem\",\n border: \"1px solid var(--chakra-colors-gray-20)\",\n _hover: {},\n _focus: {},\n },\n },\n skeleton__light_gray: {\n field: {\n background: \"gray.20\",\n color: \"black\",\n borderRadius: \"md\",\n fontSize: \"xs\",\n fontWeight: 500,\n border: \"1px solid transparent !important\",\n _hover: {},\n _focus: {},\n },\n },\n solid: {\n field: {\n border: \"none\",\n background: \"gray.15\",\n fontWeight: 400,\n color: \"gray.100\",\n _placeholder: { color: \"gray.50\", opacity: 1 },\n _hover: { backgroundColor: \"gray.15\", color: \"auto\" },\n _focus: { backgroundColor: \"gray.15\", color: \"auto\" },\n },\n },\n },\n },\n Button: {\n defaultProps: {\n variant: \"primary\",\n },\n variants: {\n skeleton: {\n fontWeight: 500,\n color: \"black\",\n borderRadius: \"md\",\n fontSize: \".9rem\",\n minWidth: \"fit-content\",\n border: \"2px solid var(--chakra-colors-gray-20)\",\n _hover: {\n border: \"2px solid var(--chakra-colors-gray-30)\",\n },\n },\n primary: {\n bg: \"yellow.40\",\n fontWeight: 500,\n color: \"yellow.100\",\n fontSize: \".9rem\",\n borderRadius: \"md\",\n _disabled: {\n _hover: {\n background: \"var(--chakra-colors-yellow-40) !important\",\n },\n },\n _hover: {\n bg: \"yellow.40\",\n },\n },\n red: {\n bg: \"red.60\",\n fontWeight: \"500\",\n color: \"black\",\n borderRadius: \"md\",\n fontSize: \".9rem\",\n _disabled: {\n _hover: {\n background: \"red.60 !important\",\n },\n },\n _hover: {\n bg: \"red.60\",\n },\n },\n },\n sizes: { lg: { height: \"46px !important\" } },\n },\n },\n });\n","// basically fuck chakra's color mode provider\nimport React, { useCallback, useEffect } from \"react\";\n\n// switch color mode state ref based on local storage\nexport const useDarkMode = () => {\n const [darkMode, setDarkMode] = React.useState(\n // JSON.parse(localStorage.getItem(\"dark-mode\") || \"false\")\n false\n );\n\n /** \n \n useEffect(() => {\n const tick = setInterval(\n () =>\n setDarkModeValue(\n JSON.parse(localStorage.getItem(\"dark-mode\") || \"false\")\n ),\n 250\n );\n\n return () => clearInterval(tick);\n }, []);\n**/\n\n const useDarkModeValue = useCallback((a: any, b: any) => (darkMode ? a : b), [\n darkMode,\n ]);\n\n const setDarkModeValue = (newValue: boolean) => {\n // before we set the dark mode state, we need to set the local storage\n // localStorage.setItem(\"dark-mode\", `${newValue}`);\n // update state\n // setDarkMode(newValue);\n };\n\n return {\n darkMode,\n useDarkModeValue,\n setDarkMode: setDarkModeValue,\n };\n};\n","import { createAction, createReducer } from \"redux-act\";\nimport api from \"api\";\nimport { handleSessionExpire } from \"./alpacaAuth/session\";\nimport { getAccountIdAndJWT, getAccountIdForProduct } from \"selectors\";\n\n// documents for an account, uploads and requests\nconst _setDocumentRequests = createAction(`SET_ACCOUNT_DOCUMENTS_REQUESTS`);\nconst _setDocumentUploads = createAction(`SET_ACCOUNT_DOCUMENTS_UPLOADS`);\n\n/**\n * listAccountDocumentRequests retrieves all document requests for the current user's account\n */\nexport const listAccountDocumentRequests = () => (dispatch, getState) => {\n const { token } = getAccountIdAndJWT(getState());\n\n const accountId = getAccountIdForProduct(getState(), \"live\");\n\n return handleSessionExpire(\n api.accountDocuments\n .listRequests(accountId, token)\n .then((payload) => dispatch(_setDocumentRequests(payload))),\n dispatch\n );\n};\n\n/**\n * listAccountDocumentUploads retrieves all documents uploaded for the current user's account\n */\nexport const listAccountDocumentUploads = () => (dispatch, getState) => {\n const { token } = getAccountIdAndJWT(getState());\n\n const accountId = getAccountIdForProduct(getState(), \"live\");\n\n return handleSessionExpire(\n api.accountDocuments\n .listUploads(accountId, token)\n .then((payload) => dispatch(_setDocumentUploads(payload))),\n dispatch\n );\n};\n\n/**\n * uploadDocumentForRequest handles a file upload with sub type field for a given request\n */\nexport const uploadDocumentForRequest = (docId, subType, file) => (\n dispatch,\n getState\n) => {\n const { token } = getAccountIdAndJWT(getState());\n\n const accountId = getAccountIdForProduct(getState(), \"live\");\n\n // post form data with the key `uploadfile`\n var formData = new FormData();\n formData.append(\"uploadfile\", file);\n return handleSessionExpire(\n api.accountDocuments.upload(accountId, token, { docId, subType, formData }),\n dispatch\n );\n};\n\nexport const uploadByDocType = (docType, docSubType, file) => (\n dispatch,\n getState\n) => {\n const { token } = getAccountIdAndJWT(getState());\n\n const accountId = getAccountIdForProduct(getState(), \"live\");\n\n // post form data with the key `uploadfile`\n var formData = new FormData();\n formData.append(\"uploadfile\", file);\n return handleSessionExpire(\n api.accountDocuments.uploadByDocType(accountId, token, {\n docType,\n docSubType,\n formData,\n }),\n dispatch\n );\n};\n\n// Export this reducer\nconst initialState = {\n uploads: {},\n requests: {},\n};\nexport default createReducer(\n {\n [_setDocumentRequests]: (state, payload) => {\n // the document records will all belong to the same account_id\n const currentDocuments = state.accountDocuments || {};\n const requests = currentDocuments[\"requests\"] || {};\n const accountId =\n (payload && payload[0] && payload[0].account_id) || false;\n if (accountId) {\n if (!requests[accountId]) {\n requests[accountId] = {};\n }\n requests[accountId] = payload;\n }\n currentDocuments[\"requests\"] = requests;\n return { ...state, ...currentDocuments };\n },\n [_setDocumentUploads]: (state, payload) => {\n // the document records will all belong to the same account_id\n const currentDocuments = state.accountDocuments || {};\n const uploads = currentDocuments[\"uploads\"] || {};\n const accountId =\n (payload && payload[0] && payload[0].account_id) || false;\n if (accountId) {\n if (!uploads[accountId]) {\n uploads[accountId] = {};\n }\n uploads[accountId] = payload;\n }\n currentDocuments[\"uploads\"] = uploads;\n return { ...state, ...currentDocuments };\n },\n },\n initialState\n);\n","import _ from \"lodash\";\nimport useGetAssets from \"../../../api/hooks/useGetAssets\";\nimport AmplitudeProvider from \"src/AmplitudeProvider\";\n\nimport {\n UINavbar,\n UIButton,\n UIIcon,\n} from \"../../../../../src/local_libraries/@alpacahq:ui-deprecated\";\n\nimport {\n useGetAccount,\n useGetBillingOverview,\n} from \"src/v2-deprecated/api/hooks\";\n\nimport React, {\n useContext,\n useCallback,\n useEffect,\n useMemo,\n useState,\n} from \"react\";\n\nimport { Path } from \"../../../path\";\nimport { Asset } from \"../../../api/rest\";\nimport { useFlag } from \"@alpacahq/flag-service\";\nimport { useQuery } from \"react-query\";\nimport { AssetLike } from \"../../../routes/dashboard/trade\";\nimport { useHistory } from \"react-router\";\nimport { Box, BoxProps } from \"@chakra-ui/react\";\nimport { getCryptoAssets } from \"../../../api/rest/data\";\nimport { isPaperOrOnboarding } from \"src/v2-deprecated/utils\";\nimport { SidebarState, UIContext, Icon } from \"@alpacahq/ui\";\n\nconst SEARCH_RESULTS_LIMIT = 10;\n\nconst BANKING_AND_ONBOARDING_PATHS = [\n Path.ROUTE_BANKING,\n Path.ROUTE_BANKING_DEPOSIT,\n Path.ROUTE_NEW_ACCOUNT,\n];\n\n// a map of assets sorted by first letter and then word groups for fast searching\ntype AssetMap = {\n // letter group\n [key: string]: {\n // word group\n [key: string]: Partial;\n };\n};\n\nexport const TopBar = (props: BoxProps & { product: string }) => {\n const v2 = useFlag(\"uix-v2\");\n const history = useHistory();\n\n const [assets, setAssets] = useState([]);\n\n const { sidebarState, setSidebarState } = useContext(UIContext);\n const { account, authed } = useGetAccount();\n const { billing } = useGetBillingOverview(\"billing\", {\n enabled: authed,\n });\n\n const { data: crypto } = useQuery(\"crypto\", getCryptoAssets);\n const { assets: equities } = useGetAssets(\"equities\", {\n enabled: !!authed,\n });\n\n // normalize asset symbol and name for searching\n const normalize = useCallback(\n (value: string) =>\n String(value)\n .toUpperCase()\n .trim()\n .replace(/[^a-z\\s-]/gi, \"\"),\n []\n );\n\n useEffect(() => {\n // filter out assets that are already in the list\n const filtered = (crypto || [])\n .concat(equities)\n .filter((asset) => !assets.some((a) => a.symbol === asset.symbol));\n\n // add new assets to the list\n if (filtered.length) {\n setAssets([...assets, ...filtered]);\n }\n }, [equities, crypto]);\n\n // memoize assets into index map for fast searching\n const assetMap = useMemo(\n () =>\n assets\n .filter((asset) => asset.symbol)\n .map(({ symbol, name }) => ({ symbol, name }))\n .reduce((prev, next) => {\n const symbol = normalize(next.symbol);\n const name = normalize(next.name);\n const keyForSymbol = symbol[0];\n const keyForName = name[0];\n\n // create symbol character group\n if (!prev[keyForSymbol]) {\n prev[keyForSymbol] = {};\n }\n\n // create name character group\n if (!prev[keyForName]) {\n prev[keyForName] = {};\n }\n\n // add asset to symbol and name groups\n prev[keyForSymbol][symbol] = next;\n prev[keyForName][name] = next;\n\n return prev;\n }, {} as AssetMap),\n [assets]\n );\n\n const onSearch = useCallback(\n (query: string) => {\n // normalize query string for searching\n const normalized = normalize(query);\n\n // find and set match based on first letter\n const match = assetMap[normalized.charAt(0)];\n\n // if no match, set empty array\n if (!match) {\n return [];\n }\n\n // sort by symbol in descending alphabetic order\n const matched = Object.keys(match)\n .filter((key) => key.startsWith(normalized))\n .map((key) => match[key])\n .sort((a, b) => {\n const matchA = a.symbol?.startsWith(normalized);\n const matchB = b.symbol?.startsWith(normalized);\n\n // if both match, sort\n if (matchA && matchB) {\n return (a.symbol?.length || 0) - (b.symbol?.length || 0);\n }\n\n if (matchA) {\n // negative number means a comes first\n return -1;\n } else if (matchB) {\n // positive number means b comes first\n return 1;\n } else {\n // if neither match, return 0\n return 0;\n }\n });\n\n return (\n _.uniqBy(matched, (asset) => asset.symbol)\n // we only care about the first X results\n .slice(0, SEARCH_RESULTS_LIMIT)\n // filter out assets without symbol\n .filter(({ symbol }) => !!symbol)\n // map to suggestion object\n .map(\n // cast as string because we already filtered out assets without symbol or name\n ({ symbol, name }) => ({\n label: symbol as string,\n description: name || \"no asset description found\",\n href: Path.ROUTE_TRADE.replace(\":symbol\", symbol as string),\n }),\n []\n )\n );\n },\n [assetMap]\n );\n\n // handle the deposit or open account button click\n const onDepositOrOpenAccountClick = useCallback(() => {\n // track the event\n AmplitudeProvider.dispatch(\n props.product === \"paper\"\n ? \"navbar_open_live_account_button_clicked\"\n : \"navbar_deposit_funds_button_clicked\"\n );\n\n // if the account is paper or onboarding, go to the new account page\n if (props.product === \"paper\") {\n history.push(Path.ROUTE_NEW_ACCOUNT);\n } else {\n // if the account is not paper or onboarding, go to the deposit page\n useFlag(\"uix-v2\")\n ? history.push(Path.ROUTE_BANKING_DEPOSIT)\n : history.push(Path.ROUTE_BANKING);\n }\n }, [history, props.product]);\n\n const onDataSubscriptionClick = useCallback(() => {\n history.push(\n (billing?.lifetimeSubCount || 0) > 0\n ? // if the user has a subscription, go to the subscription page\n Path.ROUTE_USER_SUBSCRIPTION\n : // if the user does not have a subscription, go to the new subscription page\n Path.ROUTE_USER_SUBSCRIPTION_NEW\n );\n }, [history, billing]);\n\n // handle state transition logic\n const handleSidebarState = (currentSidebarState: SidebarState) => {\n switch (currentSidebarState) {\n case SidebarState.HIDDEN:\n return SidebarState.MOBILE;\n case SidebarState.MOBILE:\n return SidebarState.HIDDEN;\n case SidebarState.EXPANDED:\n return SidebarState.COLLAPSED;\n case SidebarState.COLLAPSED:\n return SidebarState.EXPANDED;\n default:\n localStorage.removeItem(\"sidebarState\");\n return null;\n }\n };\n\n const isInBankingOrOnboardingPath = BANKING_AND_ONBOARDING_PATHS.some(\n (path) => window.location.pathname.includes(path)\n );\n\n return (\n \n \n {sidebarState === SidebarState.HIDDEN && (\n {\n const newState = handleSidebarState(sidebarState);\n if (newState !== null) {\n setSidebarState(newState);\n localStorage.setItem(\"sidebarState\", newState);\n }\n }}\n >\n \n \n )}\n \n {sidebarState !== SidebarState.MOBILE && (\n <>\n \n \n {!isInBankingOrOnboardingPath &&\n (isPaperOrOnboarding(account) || props.product === \"live\") && (\n \n {props.product === \"paper\" ? (\n \"Open Live Account\"\n ) : (\n <>\n \n Add Funds\n \n )}\n \n )}\n \n \n )}\n \n \n );\n};\n\nexport default TopBar;\n","import React from \"react\";\n\nimport { Path } from \"../../../path\";\nimport { UIIcon } from \"../../../../../src/local_libraries/@alpacahq:ui-deprecated\";\nimport { Account } from \"../../../api/rest/account\";\nimport { isPaperOrOnboarding } from \"../../../utils\";\n\nexport interface PaperBannerProps {\n account?: Account;\n}\n\nexport const PaperBanner = ({ account }: PaperBannerProps) => (\n
\n \n

\n You are on Paper Trading, no real money is being used.\n {account && !isPaperOrOnboarding(account) ? (\n \n Switch to Live Trading?\n \n ) : null}\n

\n
\n);\n","import TopBar from \"./topbar\";\nimport styled from \"@emotion/styled\";\nimport AmplitudeProvider from \"src/AmplitudeProvider\";\n\nimport {\n useGetAccount,\n useGetAccountDetails,\n useGetBillingOverview,\n} from \"src/v2-deprecated/api/hooks\";\n\nimport React, {\n useEffect,\n useContext,\n useCallback,\n useMemo,\n useState,\n} from \"react\";\n\nimport { Path } from \"../../path\";\nimport { Link } from \"react-router-dom\";\nimport { UIPage } from \"../../../../src/local_libraries/@alpacahq:ui-deprecated\";\nimport { version } from \"../../../../package.json\";\nimport { AuthService } from \"../../api/auth\";\nimport { PaperBanner } from \"../../routes/dashboard/home/paperBanner\";\nimport { useGetMargin } from \"../../api/hooks/useGetMargin\";\nimport { Box, Progress } from \"@chakra-ui/react\";\nimport { setFlag, useFlag } from \"@alpacahq/flag-service\";\nimport { initializeIntercom } from \"src/utils/intercom\";\nimport { isPaperOrOnboarding } from \"../../utils\";\nimport { inSupportedLocation } from \"../../../utils/crypto\";\nimport { useGetPaperAccounts } from \"../../api/hooks/useGetPaperAccounts\";\nimport { isNotFullActiveAccount } from \"../../../components/LayoutComponents/Menu/MenuLeft/menuData\";\nimport { Sidebar, SidebarProps, SidebarState, UIContext } from \"@alpacahq/ui\";\n\nexport interface PageProps {\n children: React.ReactNode;\n noHeader?: boolean;\n disableAppMenu?: boolean;\n product: string;\n}\n\nconst TEMPORARY_UI_PAGES = [\n {\n path: \"/paper/dashboard/orders\",\n title: \"Orders\",\n subtitle: \"Your open and closed orders.\",\n },\n];\n\nexport const heights: Record = {\n sidebar: \"70px\",\n topbar: \"91.6667px\",\n apply: (value: string) =>\n value.replace(/{(.*?)}/g, (match, key) => heights[key]),\n};\n\nconst Container = styled(Box)`\n .page--content {\n margin-left: auto;\n margin-right: auto;\n }\n\n .sticky {\n position: sticky;\n top: 0;\n }\n`;\n\nexport const Page = (props: PageProps) => {\n const v2 = useFlag(\"uix-v2\");\n\n const { sidebarState } = useContext(UIContext);\n\n const [product, setProduct] = useState(props.product);\n\n useEffect(() => {\n if (product === \"dynamic\") {\n setProduct(window.localStorage.getItem(\"product\") || \"paper\");\n }\n }, [product]);\n\n const isPaper = product === \"paper\";\n\n // we are doing this until the pages are migrated to v2\n const temporaryUIPage = TEMPORARY_UI_PAGES.find((path) =>\n window.location.pathname.includes(path.path)\n );\n\n const { noHeader, children, disableAppMenu } = props;\n const { account, authed } = useGetAccount();\n const { paper_accounts } = useGetPaperAccounts(\"paper\", account?.id);\n const { billing } = useGetBillingOverview(\"billing\", { enabled: authed });\n const { details } = useGetAccountDetails(\"details\", account?.id, {\n enabled: !!account?.id,\n });\n\n const isSubscribed = (billing?.lifetimeSubCount || 0) > 0;\n const cryptoTier = account?.crypto_tier ?? 0;\n\n // percentage of tier completion, given 8 tiers\n const cryptoTierProgress = (cryptoTier / 8) * 100;\n\n const canTransferCrypto =\n inSupportedLocation(details) && !isNotFullActiveAccount({ account });\n\n const onSwitchUIClick = useCallback(() => {\n setFlag(\"uix-v2\", !v2);\n\n // send amplitude event\n AmplitudeProvider.dispatch(\"dropdown_switch_to_legacy_button_clicked\");\n\n // refresh the page\n window.location.reload();\n }, [v2]);\n\n // lol, why do we even support multiple paper accounts?\n const paper = paper_accounts?.[0];\n\n // ridiculous hack to get margin account number for paper account\n // for some reason it isn't returned in the paper_accounts endpoint\n const { margin } = useGetMargin(\n \"margin-paper\",\n paper?.paper_account_id,\n true,\n {\n enabled: !!paper?.paper_account_id,\n staleTime: 10000,\n refetchInterval: 10000,\n }\n );\n\n // memoize the accounts list, so we don't have to recompute every render\n const accounts = useMemo(() => {\n // if the user is not logged in, return an empty array\n if (!account || margin?.account_number === undefined) {\n return [];\n }\n\n const list = [\n { name: \"Paper\", number: margin?.account_number },\n { name: \"Live\", number: account?.account_number },\n ];\n\n // should we return only paper account?\n if (isPaperOrOnboarding(account)) {\n return [list[0]];\n }\n\n return list;\n }, [account, margin]);\n\n const currentAccount = useMemo(() => {\n if (!accounts.length) {\n return {\n name: \"Guest\",\n number: \"no-account\",\n };\n }\n\n if (product === \"live\") {\n return accounts[1];\n }\n\n return accounts[0];\n }, [accounts, product]);\n\n const sidebarProps: SidebarProps = useMemo(\n () => ({\n handleSwitchAccount: () => {\n // redirect user based on product\n // no need to check if the account is paper or not\n window.location.href = Path.format(Path.ROUTE_DASHBOARD, {\n product: isPaper ? \"live\" : \"paper\",\n });\n },\n version: process.env.REACT_APP_VERSION || version,\n accounts,\n currentAccount,\n settings: [\n {\n label: \"Profile\",\n leftIcon: \"Identification\",\n href: Path.ROUTE_ALPACA_PROFILE,\n },\n {\n label: \"Switch to old UI\",\n leftIcon: \"Sparkles\",\n onClick: onSwitchUIClick,\n },\n {\n label: \"Log Out\",\n leftIcon: \"LockClosed\",\n onClick: AuthService.signOut,\n },\n ],\n items: [\n {\n label: \"Home\",\n leftIcon: \"Home\",\n href: Path.format(Path.ROUTE_DASHBOARD, { product }),\n },\n {\n label: \"Account\",\n leftIcon: \"RectangleStack\",\n subItems: [\n {\n label: \"Positions\",\n leftIcon: \"ChartPie\",\n href: Path.ROUTE_POSITIONS,\n },\n {\n label: \"Orders\",\n leftIcon: \"ClipboardDocumentList\",\n href: Path.format(Path.ROUTE_ORDERS, { product }),\n },\n {\n label: \"Activities\",\n leftIcon: \"QueueList\",\n href: Path.format(Path.ROUTE_ACCOUNT_ACTIVITIES, { product }),\n },\n {\n label: \"Balances\",\n leftIcon: \"TableCells\",\n href: Path.format(Path.ROUTE_BALANCES, { product }),\n },\n {\n label: \"Configure\",\n leftIcon: \"AdjustmentsVertical\",\n href: Path.ROUTE_CONFIGURATION,\n },\n !isPaper && {\n label: \"Documents\",\n leftIcon: \"DocumentDuplicate\",\n href: Path.ROUTE_DOCUMENTS,\n },\n ],\n },\n {\n label: \"Alpaca Connect\",\n leftIcon: \"Cloud\",\n href: Path.ROUTE_ALPACA_CONNECT,\n },\n !details?.is_professional && {\n divider: true,\n label: \"Subscription\",\n leftIcon: \"CreditCard\",\n href: isSubscribed\n ? Path.ROUTE_USER_SUBSCRIPTION\n : Path.ROUTE_USER_SUBSCRIPTION_NEW,\n },\n !isPaper && {\n label: `Funds${canTransferCrypto ? \" & Wallet\" : \"\"}`,\n leftIcon: \"Banknotes\",\n subItems: [\n {\n label: \"Banking\",\n leftIcon: \"BuildingLibrary\",\n href: Path.format(Path.ROUTE_BANKING, { product }),\n },\n canTransferCrypto && {\n label: \"Crypto Transfers\",\n leftIcon: \"CurrencyDollar\",\n href: Path.format(Path.ROUTE_CRYPTO_TRANSFERS, { product }),\n },\n ],\n },\n {\n divider: true,\n label: \"Resources\",\n leftIcon: \"BookOpen\",\n subItems: [\n {\n label: \"API\",\n leftIcon: \"CommandLine\",\n href: Path.URL_DOCS,\n newTab: true,\n },\n {\n label: \"Guides\",\n leftIcon: \"Newspaper\",\n href: Path.ROUTE_DEVELOPERS,\n },\n ],\n },\n {\n label: \"Community\",\n leftIcon: \"ChatBubbleLeftRight\",\n subItems: [\n {\n label: \"Slack\",\n leftIcon: \"Hashtag\",\n href: Path.URL_SLACK,\n newTab: true,\n },\n {\n label: \"Forum\",\n leftIcon: \"Users\",\n href: Path.URL_FORUM,\n newTab: true,\n },\n ],\n },\n {\n label: \"Support\",\n leftIcon: \"Lifebuoy\",\n href: Path.URL_SUPPORT,\n newTab: true,\n },\n ],\n }),\n [\n account,\n billing,\n currentAccount,\n canTransferCrypto,\n cryptoTierProgress,\n details,\n inSupportedLocation,\n isNotFullActiveAccount,\n isPaper,\n isSubscribed,\n onSwitchUIClick,\n product,\n sidebarState,\n v2,\n version,\n ]\n );\n\n useEffect(() => {\n // if defined pass account and details to AmplitudeProvider\n if (details && account) {\n AmplitudeProvider.setAccount({ account, details });\n initializeIntercom({ account, details });\n }\n }, [account, details]);\n\n return (\n \n \n {!disableAppMenu && sidebarState !== SidebarState.HIDDEN && (\n
\n \n {sidebarState === SidebarState.EXPANDED &&\n !isPaper &&\n canTransferCrypto && (\n <>\n
\n \n
\n Crypto Fee Rate\n \n
\n \n \n
\n \n )}\n
\n
\n )}\n \n {!noHeader &&\n // todo: temporary until subscription flow is migrated to v2\n ![\"agreement\", \"subscription\", \"subscribe\"].some((s) =>\n window.location.href.includes(s)\n ) && (\n <>\n {product === \"paper\" && }\n \n \n )}\n \n \n {!!temporaryUIPage ? (\n \n }\n >\n {children}\n \n ) : (\n children\n )}\n \n \n \n
\n );\n};\n\nexport default Page;\n","import { Subject } from \"rxjs\";\nimport { getAccountIdForProduct, getApiToken } from \"selectors/index\";\nimport { actions } from \"store\";\n\nconst liveEndpoint = window.env.STREAM_ENDPOINT;\nconst paperEndpoint = window.env.PAPER_STREAM_ENDPOINT;\n\nconst subjects = {\n [liveEndpoint]: new Subject(),\n [paperEndpoint]: new Subject(),\n};\nconst sockets = { [liveEndpoint]: null, [paperEndpoint]: null };\n\nexport function init() {\n let token = null;\n\n actions.subscribe(([_, state]) => {\n if (getApiToken(state) !== token) {\n token = getApiToken(state);\n const accountId = getAccountIdForProduct(state, \"paper\");\n\n if (token && accountId) {\n connect(liveEndpoint, token);\n connect(paperEndpoint, token);\n }\n }\n });\n}\n\nfunction connect(endpoint, token) {\n const authMsg = JSON.stringify({\n action: \"authenticate\",\n data: {\n cognito_token: token,\n },\n });\n\n // updated auth token\n if (sockets[endpoint]) {\n sockets[endpoint].send(authMsg);\n return;\n }\n\n const socket = new WebSocket(endpoint);\n sockets[endpoint] = socket;\n\n socket.onmessage = (message) => {\n const reader = new FileReader();\n reader.onload = function () {\n const message = JSON.parse(this.result);\n if (message.stream === \"authorization\") {\n if (message.data.status !== \"authorized\") {\n console.error(\"/stream unauthorized\", message.data);\n return;\n }\n socket.send(\n JSON.stringify({\n action: \"listen\",\n data: {\n streams: [\"trade_updates\"],\n },\n })\n );\n } else if (message.stream === \"trade_updates\") {\n subjects[endpoint].next(message);\n }\n };\n reader.readAsText(message.data);\n };\n socket.onerror = (err) => {\n console.error(\"socket error\", err);\n };\n socket.onclose = () => {\n console.error(\"socket closed, trying to reconnect in 15 second\");\n setTimeout(() => connect(endpoint, token), 15000);\n };\n socket.onopen = () => socket.send(authMsg);\n}\n\n// Subscribe to both websockets, but only forward them to Elm if the stream matches the current product.\nexport default {\n bind(subscription, isLive, ports) {\n subscription.add(\n subjects[liveEndpoint].subscribe((message) => {\n if (isLive()) {\n ports.events_.send(message);\n }\n })\n );\n subscription.add(\n subjects[paperEndpoint].subscribe((message) => {\n if (!isLive()) {\n ports.events_.send(message);\n }\n })\n );\n },\n};\n","import styled from \"styled-components\";\n\nexport const Link = styled.a`\n margin: ${(props) => (props.margin ? props.margin : \"5px\")};\n font-size: ${(props) => (props.fontSize ? props.fontSize : \"1em\")};\n`;\n\nexport const SubtitleLink = styled.a`\n text-decoration: none;\n font-size: 20px;\n color: #303030;\n white-space: nowrap;\n font-family: \"Gilroy-Light\";\n padding: 0 25px;\n\n :hover {\n color: #fff;\n }\n`;\n","import styled from \"styled-components\";\n\nconst Subtitle = styled.p`\n font-size: 0.7em;\n line-height: 1.2em;\n`;\n\nexport default Subtitle;\n","import styled from \"styled-components\";\n\nconst LargeParagraph = styled.p`\n font-size: 1.5em;\n\n @media screen and (max-height: 600px) {\n font-size: 1.2em;\n }\n`;\n\nexport default LargeParagraph;\n","import styled from \"styled-components\";\n\nexport const TitleBlack = styled.h2`\n margin: 0;\n color: #303030;\n font-family: \"Gilroy-Light\";\n`;\n","import styled from \"styled-components\";\n\nexport const BlackLightText = styled.p`\n margin: 0;\n color: #303030;\n font-family: \"Gilroy-Light\";\n`;\n\nexport const WhiteLightText = styled.p`\n margin: 0;\n color: #fff;\n font-family: \"Gilroy-Light\";\n`;\n","import styled from \"@emotion/styled\";\n\nconst Label = styled.div`\n font-size: 10px;\n background-color: #fde483 !important;\n color: rgba(0, 0, 0, 0.79);\n border-radius: 4px;\n width: 50px;\n height: 20px;\n margin-left: 8px;\n text-align: center;\n vertical-align: middle;\n line-height: 20px;\n font-weight: 800;\n text-transform: uppercase;\n`;\n\nexport default Label;\n","import React from \"react\";\nimport Label from \"./index\";\n\nconst NewLabel = () => ;\n\nexport default NewLabel;\n","import useRequest, { QueryOptions } from \"./useRequest\";\n\nimport { getAssets } from \"../rest\";\nimport { Asset } from \"../rest/account\";\n\nexport const useGetAssets = (\n key: any | any[] = \"\",\n options?: QueryOptions\n) => {\n const { data, refetch, isFetched } = useRequest(key, () => getAssets(), {\n cacheTime: 9999999,\n staleTime: Infinity,\n ...options,\n });\n\n return { assets: data || [], refetch, isFetched };\n};\n\nexport default useGetAssets;\n","import useRequest, { QueryOptions } from \"./useRequest\";\n\nimport { useState } from \"react\";\nimport { QueryObserverResult } from \"react-query\";\nimport { Account, getAccount } from \"../rest/account\";\n\ntype UseGetAccount = {\n account?: Account;\n authed: boolean | undefined;\n refetch: () => Promise>;\n};\n\nexport const useGetAccount = (\n key: any | any[] = \"\",\n // todo: revisit this type, we need to include product for all account-dynamic hooks\n options?: QueryOptions & { product?: string }\n): UseGetAccount => {\n const [authed, setAuthed] = useState();\n\n const { data: account, isError, isSuccess, refetch } = useRequest(\n [\"account\", key, options?.product],\n () => getAccount({ product: options?.product || \"live\" }),\n {\n ...options,\n refetchInterval: 10000,\n select: (data) => {\n // does not rely on onSuccess and onError being called\n if (!!data && !authed) {\n setAuthed(true);\n }\n\n return data;\n },\n onSuccess: (data) => {\n setAuthed(true);\n options?.onSuccess?.(data);\n },\n onError: () => {\n setAuthed(false);\n options?.onError?.({} as any);\n },\n }\n );\n\n if (isError || (isSuccess && !account?.id)) {\n // redirect should occur at router level\n // AuthService.signOut();\n // history.push(\"/login\");\n }\n\n return { account, refetch, authed };\n};\n","import useRequest, { QueryOptions } from \"./useRequest\";\n\nimport { getCryptoFeeStructure, CryptoFeeStructure } from \"../rest/billing\";\n\nexport const useGetCryptoFeeStructure = (\n key: any | any[] = \"crypto-fee-structure\",\n options?: QueryOptions\n) => {\n const { data } = useRequest(key, () => getCryptoFeeStructure(), {\n ...options,\n });\n\n return { ...data };\n};\n\nexport default useGetCryptoFeeStructure;\n","import useRequest, { QueryOptions } from \"./useRequest\";\n\nimport { CryptoMonthlyVolume, getCryptoMonthlyVolume } from \"../rest/billing\";\n\nexport const useGetCryptoMonthlyVolume = (\n key: any | any[] = \"crypto-monthly-volume\",\n accountID: string = \"\",\n options?: QueryOptions\n) => {\n const { data } = useRequest(key, () => getCryptoMonthlyVolume(accountID), {\n enabled: !!accountID,\n ...options,\n });\n\n return { ...data };\n};\n\nexport default useGetCryptoMonthlyVolume;\n","import { createAction, createReducer } from \"redux-act\";\nimport { handleSessionExpire } from \"../alpacaAuth/session\";\nimport api from \"api\";\nimport { getAccountIdForProduct } from \"selectors\";\n\n// access keys\nconst _setOAuthClients = createAction(`SET_OAUTH_CLIENTS`);\n\n/**\n * listOAuthClients will retrieve all oauth application connections\n */\nexport const listOAuthClients = () => (dispatch, getState) => {\n const accountId = getAccountIdForProduct(getState(), \"live\");\n\n if (accountId) {\n return handleSessionExpire(\n api.oauth.client\n .list({ accountId })(dispatch, getState)\n .then((data) => dispatch(_setOAuthClients(data)))\n .catch(console.error),\n dispatch\n );\n }\n return;\n};\n\nconst initialState = {\n activeClients: [],\n};\n\n// Export this reducer\nexport default createReducer(\n {\n // Account oauth clients\n [_setOAuthClients]: (state, payload) => {\n const oauthClients = state.oauthClients || payload;\n return { ...state, activeClients: oauthClients };\n },\n },\n initialState\n);\n","import { createAction, createReducer } from \"redux-act\";\nimport api from \"api\";\nimport { getAccountIdForProduct } from \"selectors\";\n\nconst REDUCER = \"portfolio\";\nconst NS = `@@${REDUCER}/`;\n\nconst _setPortfolioHistory = createAction(`${NS}SET_PORTFOLIO_HISTORY`);\n\n// section options are: intraday, 1M, 1A, all\nexport const loadPortfolioHistory = (product, section) => (\n dispatch,\n getState\n) => {\n // Figure out the account id to use\n const accountId = getAccountIdForProduct(getState(), product);\n const portfolioEndPoint =\n product === \"paper\" ? \"paperPortfolio\" : \"portfolio\";\n\n // check if user holds crypto\n const crypto = getState()?.position?.[accountId]?.positions?.find(\n (p) => p.asset_class === \"crypto\"\n );\n\n const params = { period: section, extended_hours: true };\n\n if (accountId) {\n return dispatch(api[portfolioEndPoint].get({ accountId }, params)).then(\n (perf) =>\n dispatch(\n _setPortfolioHistory({\n accountId,\n section,\n data: perf,\n })\n )\n );\n }\n\n return Promise.resolve();\n};\n\nconst initialState = {};\nexport default createReducer(\n {\n [_setPortfolioHistory]: (state, { accountId, section, data }) => {\n // e.g. portfolio.bfe87e76-5ad3-41d6-a12d-918142bb38df.1M\n const newState = { ...state };\n newState[accountId] = {\n ...newState[accountId],\n [section]: data,\n };\n return newState;\n },\n },\n initialState\n);\n","import instance from '../'\n\ntype ACHApprovalMethod =\n | 'MICRO_DEPOSIT'\n | 'PLAID'\n | 'PLAID_MICRO'\n | 'CORRESPONDENT'\n | 'PLAID_PARTNER'\n\ntype RelationshipStatus =\n | 'QUEUED'\n | 'CANCEL_REQUESTED'\n | 'CANCEL_SENT'\n | 'CANCEL_FAILED'\n | 'PENDING'\n | 'SENT_TO_CLEARING'\n | 'APPROVED'\n | 'CANCELED'\n | 'REJECTED'\n\nexport type PlaidVerificationStatus =\n | 'automatically_verified'\n | 'pending_automatic_verification'\n | 'pending_manual_verification'\n | 'manually_verified'\n | 'verification_expired'\n | 'verification_failed'\n\nexport type ACHRelationship = {\n id: string\n clearing_id?: string\n created_at: string\n updated_at: string\n deleted_at: string\n account_id: string\n status: RelationshipStatus\n approval_method: ACHApprovalMethod\n plaid_institution?: string\n plaid_verification_status?: PlaidVerificationStatus\n mask?: string\n account_name?: string\n expires_at?: string\n failed_attempts: number\n reason: string\n micro_deposit_id: string\n micro_deposit_status: string\n processor_token?: string\n correspondent_code?: string\n}\n\ntype BankRelationship = {\n id: string\n account_id: string\n status: RelationshipStatus\n approval_method: ACHApprovalMethod\n account_name: string\n account_mask: string\n plaid_institution: string\n plaid_verification_status: string\n created_at: string\n expires_at: string\n}\n\nexport type BankRelationships = BankRelationship[]\n\nexport type MutateBankRelationshipParams = {\n plaid: {\n public_token: string\n account_id: string\n name: string\n mask: string\n verification_status?: string\n }\n}\n\nexport const getBankRelationships = async (accountID: string) => {\n const { data } = await instance.get(\n `/accounts/${accountID}/relationships`\n )\n return data\n}\nexport const createBankRelationship = async (\n accountID: string,\n body: MutateBankRelationshipParams\n) => {\n const { data } = await instance.post(\n `/accounts/${accountID}/relationships`,\n body\n )\n\n return data\n}\n\nexport type VerifyBankRelationshipArgs = {\n accountID: string\n relationshipID: string\n body: MutateBankRelationshipParams\n}\nexport const verifyBankRelationship = async ({\n accountID,\n relationshipID,\n body,\n}: VerifyBankRelationshipArgs) => {\n const { data } = await instance.post(\n `/accounts/${accountID}/relationships/${relationshipID}/verify`,\n body\n )\n\n return data\n}\n","import instance from '../'\nimport { ACHRelationship } from './relationships'\n\nexport const getPlaidLinkToken = async (accountID: string) => {\n const { data } = await instance.get(`/accounts/${accountID}/plaid/link/token`)\n return data\n}\n\nexport const getPlaidAuthStatus = async (plaidAcconutID: string) => {\n const { data } = await instance.get(\n `/accounts/${plaidAcconutID}/plaid/auth_status`\n )\n return data\n}\n","import { useToast } from \"@chakra-ui/react\";\nimport { useCallback } from \"react\";\nimport {\n PlaidAccount,\n PlaidLinkOnExit,\n PlaidLinkOnSuccess,\n PlaidLinkOnSuccessMetadata,\n usePlaidLink,\n} from \"react-plaid-link\";\nimport { useQueryClient } from \"react-query\";\nimport { Account } from \"src/v2-deprecated/api/rest/account\";\nimport {\n createBankRelationship,\n verifyBankRelationship,\n MutateBankRelationshipParams,\n VerifyBankRelationshipArgs,\n BankRelationships,\n getBankRelationships,\n} from \"../rest/relationships\";\nimport * as Sentry from \"@sentry/browser\";\nimport { CaptureContext } from \"@sentry/types\";\n\nimport { getPlaidAuthStatus, getPlaidLinkToken } from \"../rest/plaid\";\nimport { ACHRelationship } from \"../rest/relationships\";\nimport { getOnfidoSdkToken } from \"../rest/onfido\";\nimport useRequest, { QueryOptions } from \"./useRequest\";\nimport useMutationRequest from \"./useMutationRequest\";\n\ntype PlaidLinkToken = { expiration: string; link_token: string };\nconst usePlaidLinkToken = (\n accountID: string,\n options: QueryOptions\n) =>\n useRequest(\n [\"plaid-token\", accountID],\n () => getPlaidLinkToken(accountID),\n options\n );\n\nexport const usePlaidLinkStatus = (\n accountID: string,\n options: QueryOptions\n) =>\n useRequest(\n [\"plaid-status\", accountID],\n () => getPlaidAuthStatus(accountID),\n options\n );\n\n// hook to integrate plaid\n// it is a light wrapper on top of react-plaid-link\ntype UsePlaidCallbacks = {\n onSuccess?: PlaidLinkOnSuccess;\n onExit?: PlaidLinkOnExit;\n};\n\nexport const usePlaid = (\n account: Account | undefined,\n cb: UsePlaidCallbacks = {},\n createRelationshipCb?: () => void\n) => {\n const accountID = account?.id ?? \"\";\n const queryClient = useQueryClient();\n const toast = useToast();\n\n const { data: relationshipResp } = useAccountRelationships(accountID, {\n enabled: Boolean(account),\n });\n\n const { mutate: createRelationship } = useMutationRequest(\n (body: MutateBankRelationshipParams) =>\n createBankRelationship(accountID, body),\n { onSuccess: createRelationshipCb }\n );\n\n const {\n mutate: verifyRelationship,\n } = useMutationRequest((body: VerifyBankRelationshipArgs) =>\n verifyBankRelationship(body)\n );\n\n const { data: linkResp } = usePlaidLinkToken(accountID, {\n enabled: Boolean(account),\n });\n\n const relationships = relationshipResp ?? [];\n const hasRelationship = relationships.length > 0;\n const relationship = hasRelationship ? relationships[0] : null;\n const token = linkResp?.link_token ?? null;\n\n const onSuccess: PlaidLinkOnSuccess = async (public_token, md) => {\n // overwrite metadata type\n const metadata = md as PlaidLinkOnSuccessMetadata & {\n account: PlaidAccount;\n account_id: string;\n };\n\n // accountID for our id\n // account_id for plaid account id\n const { account, account_id } = metadata;\n const { name, mask } = account;\n let verification_status = account.verification_status;\n // Status is omitted when null. Seems that this is the result of either\n // a successful instant or manual auth. If it's a manual auth we can\n // check the auth status manually\n\n // I dont think this check is even needed.\n // verification_status is always null.\n // getPlaidAuthStatus simply sets it to \"\" instead of null which can be done client side... ??\n if (!verification_status && hasRelationship) {\n // Status is omitted when null. Seems that this is the result of either\n // a successful instant or manual auth. If it's a manual auth we can\n // check the auth status manually.\n\n // TODO FIX type here\n const authInfo = await queryClient.fetchQuery(\n [\"plaid-auth\", account_id],\n () => getPlaidAuthStatus(account_id)\n );\n verification_status = authInfo?.plaid_verification_status ?? \"\";\n\n if (!verification_status) {\n toast({\n status: \"error\",\n description: \"plaid link result contained empty verification_status\",\n });\n return;\n }\n }\n\n const body: MutateBankRelationshipParams = {\n plaid: {\n public_token,\n account_id,\n name: name,\n mask: mask,\n verification_status: verification_status,\n },\n };\n // create relationship or verify relationship based on verification status\n switch (verification_status) {\n case \"manually_verified\":\n verifyRelationship({\n accountID: accountID,\n relationshipID: relationship?.id ?? \"\",\n body,\n });\n break;\n case \"pending_automatic_verification\":\n case \"pending_manual_verification\":\n default:\n createRelationship(body);\n break;\n }\n\n // call success callback if provided\n cb.onSuccess && cb.onSuccess(public_token, metadata);\n };\n\n const onExit = useCallback((err, metadata) => {\n // custom behavior for exit called here\n cb.onExit && cb.onExit(null, metadata);\n\n // no errors nothing to do\n if (!err) return;\n\n const info = {\n err,\n request_id: metadata.request_id,\n session_id: metadata.link_session_id,\n };\n const errMsg = `plaid link error encountered: ${err.error_code}`;\n\n toast({\n title: \"Something went wrong\",\n status: \"error\",\n description: errMsg,\n });\n\n console.error(errMsg, info);\n Sentry.captureException(new Error(errMsg), info as CaptureContext);\n }, []);\n\n const plaidLink = usePlaidLink({\n token,\n onSuccess,\n onExit,\n userLegalName: account?.name,\n userEmailAddress: account?.email,\n });\n\n return plaidLink;\n};\n\nconst useAccountRelationships = (\n accountID: string,\n options: QueryOptions\n) =>\n useRequest(\n [\"relationships\", accountID],\n () => getBankRelationships(accountID),\n options\n );\n\nexport default usePlaid;\n","import instance from '../'\nimport { Account } from './account'\n\nexport const createOnfidoApplicant = async (accountID: string) => {\n const { data } = await instance.post(\n `/accounts/${accountID}/onfido/applicant`\n )\n return data\n}\n\nexport const updateOnfidoApplicant = async (accountID: string) => {\n const { data } = await instance.patch(\n `/accounts/${accountID}/onfido/applicant`\n )\n return data\n}\n\nexport const getOnfidoSdkToken = async (accountID: string) => {\n const { data } = await instance.get(`/accounts/${accountID}/onfido/sdk_token`)\n return data\n}\n\ntype OnfidoSDKOutcomes = 'SDK_ERROR' | 'USER_COMPLETED'\nexport type PatchOnfidoParams = {\n accountID: string\n outcome: OnfidoSDKOutcomes\n token: string\n}\nexport const patchOnfidoSdkToken = async ({\n accountID,\n ...rest\n}: PatchOnfidoParams) => {\n const { data } = await instance.patch(\n `/accounts/${accountID}/onfido/sdk`,\n rest\n )\n return data\n}\n","import { useDisclosure } from \"@chakra-ui/react\";\nimport { init, SdkOptions, StepTypes } from \"onfido-sdk-ui\";\nimport { useEffect, useRef } from \"react\";\nimport AmplitudeProvider from \"src/AmplitudeProvider\";\nimport { useMutationRequest } from \"src/v2-deprecated/api/hooks\";\n\nimport { getOnfidoSdkToken } from \"../rest/onfido\";\n\nimport { Account } from \"../rest/account\";\nimport {\n createOnfidoApplicant,\n patchOnfidoSdkToken,\n updateOnfidoApplicant,\n PatchOnfidoParams,\n} from \"../rest/onfido\";\nimport useRequest, { QueryOptions } from \"./useRequest\";\nimport { eventTracker } from \"src/utils/eventTracker\";\n\n// custom hook handles the logic for starting and closing the Onfido modal\ntype UseOnfidoOptions = {\n account?: Account;\n steps: StepTypes[];\n onComplete: () => void;\n onError: (err: string) => void;\n};\nexport const useOnfido = ({\n account,\n steps,\n onComplete: completeCb,\n onError: errorCb,\n}: UseOnfidoOptions) => {\n const { isOpen, onOpen, onClose } = useDisclosure();\n\n const {\n mutate: createApplicant,\n isSuccess: createdOnfido,\n } = useMutationRequest((accountID) =>\n createOnfidoApplicant(accountID)\n );\n\n const {\n mutate: updateApplicant,\n isSuccess: updatedOnfido,\n } = useMutationRequest((accountID) =>\n updateOnfidoApplicant(accountID)\n );\n\n const { data: sdkResponse, refetch: refetchToken } = useOnfidoToken(\n account?.id ?? \"\",\n {\n // dont fetch onfido token until one of the above mutations occur\n enabled: Boolean(account && (createdOnfido || updatedOnfido)),\n }\n );\n\n const {\n mutate: patchSDKToken,\n } = useMutationRequest((body: PatchOnfidoParams) =>\n patchOnfidoSdkToken(body)\n );\n\n const firstTime = useRef(true);\n const openModal = () => {\n // always use new onfido token whenever onfido sdk is open\n if (!firstTime.current) {\n refetchToken();\n }\n firstTime.current = false;\n onOpen();\n };\n\n useEffect(() => {\n if (!account) return;\n\n // Create Applicant if not exists\n const applicantExists = hasOnfidoApplicant(account);\n if (applicantExists) {\n // update onfido applicant\n updateApplicant(account.id);\n } else {\n // create onfido applicant\n createApplicant(account.id);\n }\n }, [Boolean(account)]);\n\n useEffect(() => {\n if (!sdkResponse || !account) return;\n const token = sdkResponse.onfido_sdk_token;\n // Start Onfido flow\n const opts: SdkOptions = {\n ...defaultOnfidoOptions,\n token,\n isModalOpen: isOpen,\n steps: steps,\n onComplete: () => {\n eventTracker(\"Finished Onfido SDK flow\", {\n category: \"Onboarding\",\n });\n\n AmplitudeProvider.dispatch(\n \"onfido_finished\",\n JSON.stringify({ onfido_id: account?.onfido_applicant_id })\n );\n patchSDKToken({\n accountID: account.id,\n outcome: \"USER_COMPLETED\",\n token: token,\n });\n onClose();\n completeCb();\n },\n onError: (err) => {\n console.error(\"Onfido exception:\", err);\n patchSDKToken({\n accountID: account.id,\n outcome: \"SDK_ERROR\",\n token: token,\n });\n errorCb(err.message);\n },\n onModalRequestClose: () => {\n eventTracker(\"Closed Onfido SDK flow\", {\n category: \"Onboarding\",\n });\n\n onClose();\n },\n };\n\n eventTracker(\"Started Onfido SDK flow\", {\n category: \"Onboarding\",\n });\n\n AmplitudeProvider.dispatch(\n \"onfido_started\",\n JSON.stringify({ onfido_id: account?.onfido_applicant_id })\n );\n\n const onfido = init(opts);\n\n return () => {\n onfido.tearDown();\n };\n }, [isOpen]);\n\n return { isReadyToStart: Boolean(sdkResponse), openModal };\n};\n\nconst hasOnfidoApplicant = (account: Account): boolean =>\n Boolean(\n JSON.parse(window.localStorage.getItem(\"kyc\") ?? \"{}\")?.[account.id] ||\n account?.onfido_applicant_id ||\n account?.onfido_details?.applicant_id\n );\n\nconst defaultOnfidoOptions = {\n useModal: true,\n containerId: \"onfido-mount\",\n customUI: {\n fontFamilyTitle: \"Carnas, medium\",\n fontFamilySubtitle: \"Carnas, regular\",\n fontFamilyBody: \"Carnas, regular\",\n fontSizeTitle: \"26px\",\n fontSizeSubtitle: \"20px\",\n fontSizeBody: \"14px\",\n fontWeightSubtitle: 600,\n colorContentButtonPrimaryText: \"#000000\",\n colorBackgroundButtonPrimary: \"#FFD700\",\n },\n};\n\ntype OnfidoToken = { onfido_sdk_token: string };\n\nconst useOnfidoToken = (\n accountID: string,\n options: QueryOptions\n) =>\n useRequest(\n [\"onfidoSDK\", accountID],\n () => getOnfidoSdkToken(accountID),\n options\n );\n\nexport default useOnfido;\n","import React, { useEffect, useState } from \"react\";\nimport { Button, Input } from \"antd\";\nimport { round } from \"lodash\";\nimport {\n BankDetailsContainer,\n BenefDetailHeader,\n BenefDetailsContainer,\n BenefDetailsPlaceholders,\n ButtonRow,\n CCInput,\n CCModal,\n CCModalContainer,\n CCTextBold,\n CCTextNormal,\n CopyButton,\n CopyButtonIcon,\n createWithdrawal,\n DepositBodyText,\n DepositFee,\n DepositFeeNote,\n DepositHeadCopy,\n DepositInfo,\n DepositInfoRow,\n GenerateButton,\n GenerateContainer,\n generateCurrencyCloudAccount,\n GenerateLoader,\n getBeneficiaryDetails,\n getCashWithdrawable,\n getCurrencyCloudAccount,\n getStatus,\n IntroCopy,\n ModalCopy,\n ModalHeader,\n ModalSubcontainer,\n TransferButton,\n TransferButtonRow,\n TransferContainer,\n TransferHeadCopy,\n WithdrawableBold,\n WithdrawableText,\n WithdrawalBodyText,\n WithdrawalFee,\n WithdrawalHeadCopy,\n} from \"./constants\";\nimport { Spinner } from \"../../../../../../../v2-deprecated/components/common/spinner\";\n\nconst DespositInfoCopyButton = ({ text }) => {\n return (\n {\n navigator.clipboard.writeText(text);\n }}\n >\n \n \n );\n};\n\nconst CCTransferButton = ({ text, onClick, compact }) => {\n return (\n \n {text}\n \n {text === \"Deposit\" ? \"from\" : \"to\"} outside of United States\n \n \n );\n};\n\nconst CCGenerateDetails = ({\n compact,\n accountId,\n accountStatus,\n setDepositDetails,\n currency,\n}) => {\n const [generating, setGenerating] = useState(false);\n const [showBankInfo, setShowBankInfo] = useState(false);\n\n if (showBankInfo) {\n return (\n {\n setShowBankInfo(false);\n setGenerating(true);\n }}\n compact={compact}\n setDepositDetails={setDepositDetails}\n currency={currency}\n />\n );\n }\n\n return (\n \n {generating ? (\n <>\n \n This usually takes around 1 minute.\n \n You can navigate away - we will email you when your funding details\n are ready.\n \n \n ) : (\n <>\n {IntroCopy}\n setShowBankInfo(true)}\n disabled={accountStatus !== \"ACTIVE\"}\n >\n Generate funding details\n \n \n )}\n \n );\n};\n\nconst CCTransferDetails = ({\n depositDetails,\n accountId,\n benefExists,\n compact,\n nonModalMode,\n singleOption,\n}) => {\n const [depositModalVisible, setDepositModalVisible] = useState(false);\n const [withdrawalModalVisible, setWithdrawalModalVisible] = useState(false);\n const [cashWithdrawable, setCashWithdrawable] = useState(\"\");\n\n useEffect(() => {\n getCashWithdrawable(accountId, setCashWithdrawable);\n }, []);\n\n const buttonRowHidden = Boolean(singleOption) && nonModalMode;\n\n return (\n \n {!buttonRowHidden && (\n <>\n {TransferHeadCopy}\n \n {\n setDepositModalVisible(true);\n }}\n compact={compact}\n />\n {\n setWithdrawalModalVisible(true);\n }}\n compact={compact}\n />\n \n \n )}\n setDepositModalVisible(false)}\n depositDetails={depositDetails}\n nonModalMode={nonModalMode}\n />\n setWithdrawalModalVisible(false)}\n accountId={accountId}\n benefExists={benefExists}\n cashWithdrawable={cashWithdrawable}\n nonModalMode={nonModalMode}\n />\n \n );\n};\n\nconst DepositModal = ({\n modalVisible,\n onCancel,\n depositDetails,\n nonModalMode,\n}) => {\n const contents = (\n \n Deposit\n \n
\n \n {[\n \"Account Number\",\n \"Account Holder Name\",\n \"Routing Code\",\n \"Routing Code Type\",\n \"Bank Name\",\n \"Bank Address\",\n ].map((label, index, arr) => {\n const last = index === arr.length - 1;\n\n return (\n \n {label}\n
\n );\n })}\n \n
\n {[\n \"account_number\",\n \"account_holder_name\",\n \"routing_code\",\n \"routing_code_type\",\n \"bank_name\",\n \"bank_address\",\n ].map((key, index, arr) => {\n const last = index === arr.length - 1;\n\n return (\n \n {depositDetails[key]}\n
\n );\n })}\n \n \n
\n {DepositHeadCopy}\n {DepositBodyText}\n {DepositFee}\n {DepositFeeNote}\n\n {!nonModalMode && (\n \n )}\n
\n );\n\n if (!modalVisible) return <>;\n\n if (nonModalMode) {\n return contents;\n }\n return (\n \n {contents}\n \n );\n};\n\nconst InfoRow = ({ header, value }) => {\n return (\n \n \n {header}\n
\n {value}\n \n
\n
\n
\n );\n};\n\nfunction toTitleCase(str) {\n return str.replace(/\\w\\S*/g, function (txt) {\n return txt.charAt(0).toUpperCase() + txt.substr(1).toLowerCase();\n });\n}\n\nconst BeneficiaryDetails = ({\n benefDetails,\n benefReq,\n setBenefReq,\n allValid,\n setAllValid,\n}) => {\n const [validationFields, setValidationFields] = useState({});\n\n useEffect(() => {\n // the required details response body is the same as the req body we send back\n const benefCopy = JSON.parse(JSON.stringify(benefDetails));\n Object.keys(benefCopy).forEach((val) => {\n benefCopy[val] = \"\";\n });\n // we also want a second copy as the validations for the fields are sent from the backend in the object\n const validationCopy = JSON.parse(JSON.stringify(benefDetails));\n setValidationFields(validationCopy);\n\n setBenefReq(benefCopy);\n }, [benefDetails]);\n\n return (\n \n {Object.keys(benefDetails).map((key) => {\n if (benefDetails[key] !== \"\") {\n let valid = benefReq[key] !== \"\" ? allValid[key] : true;\n return (\n <>\n \n {toTitleCase(key.replace(\"_\", \" \"))}\n \n {\n let val = e.target.value;\n let re = new RegExp(validationFields[key]);\n setBenefReq({\n ...benefReq,\n [key]: val,\n });\n setAllValid({ ...allValid, [key]: re.test(val) });\n }}\n $valid={valid}\n />\n \n );\n }\n })}\n \n );\n};\n\nconst WithdrawalModal = ({\n modalVisible,\n onCancel,\n accountId,\n cashWithdrawable,\n nonModalMode,\n}) => {\n // the Withdrawal modal has two steps - the first page has info fields and the second is\n // to review and submit\n const [withdrawalAmount, setWithdrawalAmount] = useState(\"\");\n const cashWithdrawablePlusFee = round(\n cashWithdrawable - Math.min(25, cashWithdrawable * 0.015),\n 2\n );\n\n const meetsMinimum = withdrawalAmount && parseFloat(withdrawalAmount) >= 2.0;\n const pattern = /^[1-9]\\d*(\\.\\d+)?$/;\n const isOverWithdrawable =\n parseFloat(withdrawalAmount) > cashWithdrawablePlusFee;\n const validInput =\n pattern.test(withdrawalAmount) && meetsMinimum && !isOverWithdrawable;\n\n const contents = (\n \n Withdrawals\n {WithdrawalHeadCopy}\n {WithdrawalBodyText}\n {WithdrawalFee}\n {isOverWithdrawable && (\n \n Cannot withdraw more than ${cashWithdrawablePlusFee}. Some deposits\n take up to 7 days to settle, after which they will be made available\n for withdrawal\n \n )}\n\n {\n setWithdrawalAmount(e.target.value);\n }}\n style={{ marginBottom: \"2.25rem\" }}\n suffix={\n \n Your withdrawable funds\n ${cashWithdrawablePlusFee}\n \n }\n />\n\n \n \n {\n createWithdrawal(accountId, withdrawalAmount, onCancel);\n }}\n disabled={withdrawalAmount === \"\" || !validInput}\n style={{ marginLeft: \"2rem\" }}\n >\n Submit\n \n \n \n );\n\n if (!modalVisible) return <>;\n\n if (nonModalMode) {\n return contents;\n }\n\n return (\n \n {contents}\n \n );\n};\n\nconst BankDetails = ({\n accountId,\n onSubmit,\n compact,\n setDepositDetails,\n currency,\n}) => {\n const [benefReq, setBenefReq] = useState({});\n const [benefDetails, setBenefDetails] = useState({});\n const [allValid, setAllValid] = useState({});\n const [loading, setLoading] = useState(true);\n\n let validInputs =\n Object.values(allValid).length > 0 &&\n Object.values(allValid).every((val) => val);\n\n useEffect(() => {\n getBeneficiaryDetails(accountId, setBenefDetails, setLoading);\n }, []);\n\n useEffect(() => {\n let relevantFields = {};\n Object.keys(benefDetails).forEach((val) => {\n if (benefDetails[val] !== \"\") {\n relevantFields[val] = false;\n }\n });\n setAllValid(relevantFields);\n }, [benefDetails]);\n\n return (\n \n Enter bank details\n {`Please input your local bank details in ${currency}.`}\n \n This is the bank account that should send and receive funds.\n \n This should be in your name.\n {loading ? (\n \n ) : (\n \n )}\n {\n onSubmit();\n generateCurrencyCloudAccount(accountId, benefReq, setDepositDetails);\n }}\n disabled={!validInputs}\n >\n Next\n \n \n );\n};\n\nexport const CurrencyCloud = ({\n compact,\n accountId,\n accountStatus,\n currency,\n nonModalMode = false,\n singleOption,\n}) => {\n const [depositDetails, setDepositDetails] = useState(null);\n const [benefExists, setBenefExists] = useState(false);\n const [loading, setLoading] = useState(true);\n useEffect(() => {\n getCurrencyCloudAccount(accountId, setDepositDetails);\n getStatus(accountId, setBenefExists, setLoading);\n }, []);\n\n if (loading) {\n return ;\n }\n\n return depositDetails ? (\n \n ) : (\n \n );\n};\n","// parameterizeUrl takes a url descriptor like:\n// \"xyz/:param1/abc/:myParam\", and { param1, myParam }\n// and injects the params to return a completed url string\nexport const parameterizeUrl = (urlDescriptor) => (params) => {\n const url = Object.keys(params).reduce((url, key) => {\n return url.replace(`:${key}`, params[key]);\n }, urlDescriptor);\n if (url.indexOf(\"/:\") !== -1) {\n throw new TypeError(`Insufficient url params specified: ${url}`);\n }\n return url;\n};\n","import querystring from \"query-string\";\nimport { logout } from \"reducers/auth/logout\";\nimport { parameterizeUrl } from \"lib/urls\";\nimport { getSessionJWT } from \"../utils\";\nimport { clearUnusedCookies } from \"src/utils\";\nimport * as Sentry from \"@sentry/browser\";\n\n/**\n * apiActions are a more streamlined api method declaration.\n * We export handy predefined method types (GET, POST, etc).\n * I recommend using these instead of the more cumbersome REST method.\n *\n * It allows you to define api methods like this:\n *\n * createNote = POST('accounts/:accountId/notebook/:notebookId/notes')\n *\n * And dispatch it like this:\n * dispatch(createNote(\n * { accountId, notebookId },\n * { text: 'Remember to feed Fluffykins' }\n * ))\n *\n * This makes it so that outside code doesn't need to supply a token,\n * and just has a simple action creator which is always called\n * in the same format of (urlParams, payload, headers).\n *\n * NOTE: There is something incomplete about this newer function.\n * There was an idea to abstract REST() and migrate everything to use\n * this wrapper, but your mileage will vary based on the request you need\n * to make and response you're looking for.\n */\nconst apiAction = (method) => (url, options = { public: false }) => {\n const populateUrl = typeof url === \"function\" ? url : parameterizeUrl(url);\n\n return (urlParams = {}, payload = {}, headers = {}) => async (dispatch) => {\n let token;\n if (!options.public) {\n try {\n token = await getSessionJWT();\n } catch (err) {\n console.error(err);\n return dispatch(logout());\n }\n }\n const populatedUrl = populateUrl(urlParams);\n return REST(method, populatedUrl)(payload, token, headers, null, options);\n };\n};\n\nexport const GET = apiAction(\"GET\");\nexport const POST = apiAction(\"POST\");\nexport const PATCH = apiAction(\"PATCH\");\nexport const PUT = apiAction(\"PUT\");\nexport const DELETE = apiAction(\"DELETE\");\n\nclass InvalidCredentialException extends Error {\n constructor(message) {\n super(message || \"invalid credentials\");\n this.name = \"InvalidCredentialException\";\n this.status = 401;\n }\n}\n\nclass NotFoundException extends Error {\n constructor(message) {\n super(message || \"data not found\");\n this.name = \"NotFoundException\";\n this.status = 404;\n }\n}\n\nclass ApiException extends Error {\n name = \"ApiException\";\n\n constructor(props) {\n super(props.message || \"Unknown\");\n Object.keys(props).forEach((key) => {\n this[key] = props[key];\n });\n }\n}\n\nconst REST = (method, path) => async (\n params = {},\n token = null,\n headers = {},\n endpointOverride = null,\n options = { public: false }\n) => {\n if (!options.public) {\n token = await getSessionJWT();\n }\n\n // config is set globally in the build process\n const endpoint =\n endpointOverride == null ? window.env.API_URL : endpointOverride;\n\n const requestHeaders = {\n Accept: \"application/json\",\n \"Content-Type\": \"application/json\",\n \"X-Dashboard-Version\": process.env.REACT_APP_VERSION || \"dev\",\n ...headers,\n };\n\n if (token) {\n requestHeaders.Authorization = `Bearer ${token}`;\n }\n\n let url = endpoint + path;\n\n const request = {\n method,\n headers: requestHeaders,\n };\n\n if (/GET/i.test(method)) {\n const query = querystring.stringify(params);\n if (query) {\n url += `?${query.toString()}`;\n }\n } else if (request.headers[\"Content-Type\"].includes(\"json\")) {\n request.body = JSON.stringify(params);\n } else {\n request.body = params;\n if (request.headers[\"Content-Type\"].includes(\"multipart/form-data\")) {\n delete request.headers[\"Content-Type\"];\n }\n }\n\n return fetch(url, request)\n .then((resp) => {\n if (resp?.status === 401) throw new InvalidCredentialException();\n if (resp?.status === 404) throw new NotFoundException();\n if (resp?.status === 204) return null;\n\n // status not in the range 200-299\n if (resp && !resp.ok) {\n throw resp;\n }\n\n if (resp.headers.get(\"content-type\")?.startsWith(\"application/pdf\")) {\n // pdfs are blob data, not json data\n return resp.blob();\n }\n\n return resp.json();\n })\n .catch((e) => {\n if (e instanceof Error) {\n throw e;\n }\n\n const errValues = {\n status: e.status,\n method,\n path,\n params,\n };\n\n return e\n .json()\n .then((data) => {\n errValues.response = data;\n errValues.message = data.message;\n })\n .catch((err) => {\n errValues.message = \"error parsing JSON response\";\n console.error(\"api error: \", errValues);\n console.log(err);\n })\n .finally(() => {\n Sentry.withScope((scope) => {\n scope.setExtras(errValues);\n Sentry.captureException(`api returned status ${errValues.status}`);\n });\n\n throw new ApiException(errValues);\n });\n });\n};\n\nexport default REST;\n","import { getAccountIdAndJWT } from \"selectors\";\n\n// REST IS DEPRECATED.\n//\n// GET, POST, DELETE etc. styles are recommended. See rest.js for more info.\n// See the relationship methods for examples.\nimport { default as REST, DELETE, GET, PATCH, POST, PUT } from \"./rest\";\nimport { getCookie } from \"lib/cookies\";\nimport { accountCreated, accountCreationFailed } from \"reducers/auth/signup\";\n\nexport const owner = {\n get: REST(\"GET\", \"/owner\"), // TODO use GET() instead of REST()\n patch: (payload, token) => REST(\"PATCH\", \"/owner\")(payload, token), // TODO use PATCH() instead of REST()\n create: POST(\"/owner\", { public: true }),\n requestEmail: POST(\"/owner/email\"),\n verifyEmail: POST(\"/owner/email-confirm\"),\n joinCryptoWaitlist: POST(\"/owner/waitlist/crypto\"),\n};\n\nexport const account = {\n create: (urlParams, payload, token) => {\n // signup_source default value is 'alpaca' in cognito. so if it's 'alpaca'\n // we don't want to send it to gobroker\n if (payload.source === \"alpaca\") payload.source = null;\n const refBy = getCookie(\"alpaca_ref_by\");\n if (refBy) {\n payload[\"referral_code\"] = refBy;\n }\n return async (dispatch) =>\n dispatch(POST(\"/accounts\")(urlParams, payload, token)).then(\n (response) => dispatch(accountCreated(response)),\n (error) => dispatch(accountCreationFailed(error))\n );\n },\n patch: REST(\"PATCH\", \"/accounts\"), // TODO use PATCH() instead of REST()\n list: GET(\"/accounts\"),\n resetPassword: REST(\"POST\", \"/accounts/actions/reset_password\"), // TODO use POST() instead of REST()\n requestResetPassword: REST(\n // TODO use GET() instead of REST()\n \"POST\",\n \"/accounts/actions/request_reset_password\"\n ),\n verifyEmail: REST(\"POST\", \"/accounts/actions/verify_email\"), // TODO use POST() instead of REST()\n requestVerifyEmail: REST(\"POST\", \"/accounts/actions/request_verify_email\"), // TODO use POST() instead of REST()\n};\n\nexport const tradeAccount = {\n get: GET(\"/accounts/:accountId/trade_account\"),\n getETC: GET(\"/accounts/:accountId/trade_account/margin\"),\n getETCLast: GET(\"/accounts/:accountId/trade_account/margin/last\"),\n};\n\nexport const paperTradeAccount = {\n get: GET(\"/paper_accounts/:accountId/trade_account\"),\n getETC: GET(\"/paper_accounts/:accountId/trade_account/margin\"),\n getETCLast: GET(\"/paper_accounts/:accountId/trade_account/margin/last\"),\n};\n\nexport const paperAccounts = {\n list: (id, token) => REST(\"GET\", `/accounts/${id}/paper_accounts`)({}, token), // TODO use GET() instead of REST()\n get: (id, payload, token) =>\n REST(\n // TODO use GET() instead of REST()\n \"GET\",\n `/accounts/${id}/paper_accounts/${(payload && payload.paperId) || \"\"}`\n )({}, token),\n create: (id, payload, token) =>\n REST(\"POST\", `/accounts/${id}/paper_accounts`)(\n // TODO use POST() instead of REST()\n { cash: (payload && payload.cash) || 100000 },\n token\n ),\n delete: (id, payload, token) =>\n REST(\n // TODO use DELETE() instead of REST()\n \"DELETE\",\n `/accounts/${id}/paper_accounts/${(payload && payload.paperId) || \"\"}`\n )({}, token),\n reset: POST(\"/accounts/:accountId/paper_accounts/:paperAccountId\"),\n};\n\nexport const ownerDetails = {\n get: (id, token) => REST(\"GET\", `/accounts/${id}/details`)({}, token), // TODO use GET() instead of REST()\n patch: (id, payload, token) =>\n REST(\"PATCH\", `/accounts/${id}/details`)(payload, token), // TODO use PATCH() instead of REST()\n patchESign: (id, payload, token) =>\n REST(\"PATCH\", `/accounts/${id}/details/esign`)(payload, token),\n // for staging/local only\n resetOnboarding: (id, token) =>\n REST(\"PATCH\", `/accounts/${id}/details/reset`)({}, token),\n};\n\nexport const auth = {\n create: REST(\"POST\", \"/auth\"), // TODO use POST() instead of REST()\n};\n\nexport const recovery = {\n create: POST(\"/accounts/:cognitoId/account-recovery\"),\n delete: DELETE(\"/accounts/:cognitoId/account-recovery\"),\n};\n\nexport const accessKeys = {\n list: (id, token) => REST(\"GET\", `/access_keys`)({}, token), // TODO use GET() instead of REST()\n create: (id, accessToken) => REST(\"POST\", \"/access_keys\")({}, accessToken), // TODO use POST() instead of REST()\n delete: (id, keyId, token) =>\n REST(\"DELETE\", `/access_keys/${keyId}`)({}, token), // TODO use DELETE() instead of REST()\n};\n\nexport const paperAccessKeys = {\n list: (paperAccountId, token) =>\n REST(\"GET\", `/paper_accounts/${paperAccountId}/access_keys`)({}, token), // TODO use GET() instead of REST()\n create: (paperAccountId, accessToken) =>\n REST(\"POST\", `/paper_accounts/${paperAccountId}/access_keys`)(\n {},\n accessToken\n ), // TODO use POST() instead of REST()\n delete: (paperAccountId, keyId, token) =>\n REST(\"DELETE\", `/paper_accounts/${paperAccountId}/access_keys/${keyId}`)(\n {},\n token\n ), // TODO use DELETE() instead of REST()\n};\n\nexport const addresses = {\n list: REST(\"GET\", \"/addresses\"), // TODO use GET() instead of REST()\n get: (id, token) => REST(\"GET\", `/addresses/${id}/details`)({}, token), // TODO use GET() instead of REST()\n};\n\nexport const positions = {\n list: (id, token) => REST(\"GET\", `/accounts/${id}/positions`)({}, token), // TODO use GET() instead of REST()\n symbol: (id, symbol, token) =>\n REST(\"GET\", `/accounts/${id}/positions/${symbol}`)({}, token), // TODO use GET() instead of REST()\n liquidate: POST(\"/accounts/:accountId/positions/liquidate\"),\n liquidatePosition: DELETE(\"/accounts/:accountId/positions/:symbol?qty=:qty\"),\n};\n\nexport const paperPositions = {\n list: (id, token) =>\n REST(\"GET\", `/paper_accounts/${id}/positions`)({}, token), // TODO use GET() instead of REST()\n symbol: (id, symbol, token) =>\n REST(\"GET\", `/paper_accounts/${id}/positions/${symbol}`)({}, token), // TODO use GET() instead of REST()\n liquidate: POST(\"/paper_accounts/:accountId/positions/liquidate\"),\n liquidatePosition: DELETE(\n \"/paper_accounts/:accountId/positions/:symbol?qty=:qty\"\n ),\n};\n\nexport const orders = {\n list: GET(\"/accounts/:accountId/orders\"),\n listBySymbol: GET(\n \"/accounts/:accountId/orders?status=:status&symbols=:symbol\"\n ),\n create: POST(\"/accounts/:accountId/orders\"),\n cancelAll: (id, token, params) =>\n REST(\"DELETE\", `/accounts/${id}/orders`)(params, token),\n getOrder: GET(\"/accounts/:accountId/orders/:orderId\"),\n cancelOrder: DELETE(\"/accounts/:accountId/orders/:orderId\"),\n replaceOrder: PATCH(\"/accounts/:accountId/orders/:orderId\"),\n};\n\n// TODO: Ultimately this should be refactoed to allow one api call, the backend should change to accept an \"accountId\" and \"product\"\nexport const paperOrders = {\n list: GET(\"/paper_accounts/:accountId/orders\"),\n listBySymbol: GET(\n \"/paper_accounts/:accountId/orders?status=:status&symbols=:symbol\"\n ),\n create: POST(`/paper_accounts/:accountId/orders`),\n cancelAll: (id, token, params) =>\n REST(\"DELETE\", `/paper_accounts/${id}/orders`)(params, token),\n getOrder: GET(\"/paper_accounts/:accountId/orders/:orderId\"),\n cancelOrder: DELETE(\"/paper_accounts/:accountId/orders/:orderId\"),\n replaceOrder: PATCH(\"/paper_accounts/:accountId/orders/:orderId\"),\n};\n\nexport const wireBanks = {\n list: GET(\"/accounts/:accountId/banks\"),\n create: POST(\"/accounts/:accountId/banks\"),\n delete: DELETE(\"/accounts/:accountId/banks/:bankId\"),\n};\n\nexport const rapyd = {\n wallet: {\n create: POST(\"/rapyd/:accountId/wallet\"),\n get: GET(\"/rapyd/:accountId/wallet\"),\n },\n transfer: {\n create: POST(\"/rapyd/:accountId/payment\"),\n get: GET(\"/rapyd/:accountId/transfers\"),\n },\n countries: {\n get: GET(\"/rapyd/supported-countries\"),\n },\n paymentMethods: {\n get: GET(\"/rapyd/payment-methods\"),\n getForCountry: GET(\"/rapyd/payment-methods/:country\"),\n },\n exchange: {\n calculate: GET(\"/rapyd/exchange-rate?buy=:buy&sell=:sell\"),\n },\n};\n\nexport const currencyCloud = {\n create: POST(\"/currency_cloud/:accountId/funding_account\"),\n get: GET(\"/currency_cloud/:accountId/funding_account\"),\n status: GET(\"/currency_cloud/:accountId/status\"),\n transfer: {\n get: GET(\"/currency_cloud/:accountId/transfers\"),\n create: POST(\"/currency_cloud/:accountId/transfers\"),\n },\n beneficiary: {\n get: GET(\"/currency_cloud/:accountId/beneficiary_required_details\"),\n create: POST(\"/currency_cloud/:accountId/beneficiary\"),\n },\n};\n\nexport const rewards = {\n get: GET(\"/accounts/:accountId/claim-reward/:rewardName\"),\n view: PATCH(\"/accounts/:accountId/reward-viewed/:rewardName\"),\n};\n\nexport const relationships = {\n list: GET(\"/accounts/:accountId/relationships\"),\n create: POST(\"/accounts/:accountId/relationships\"),\n delete: DELETE(\"/accounts/:accountId/relationships/:relationshipId\"),\n verify: POST(\"/accounts/:accountId/relationships/:relationshipId/verify\"),\n token: GET(\"/accounts/:accountId/relationships/:relationshipId/token\"),\n};\n\nexport const institutions = {\n get: GET(\"/institutions/:institutionId\"),\n};\n\nexport const plaidLinkToken = {\n get: GET(\"/accounts/:accountId/plaid/link/token\"),\n};\n\nexport const plaidAuth = {\n get: GET(\"/accounts/:accountId/plaid/auth_status\"),\n};\n\nexport const plaidStripe = {\n get: GET(\"/plaid/stripe/link/token\"),\n post: POST(\"/plaid/stripe\"),\n};\n\nexport const transfers = {\n list: GET(\"/accounts/:accountId/transfers\"),\n create: POST(\"/accounts/:accountId/transfers\"),\n delete: DELETE(\"/accounts/:accountId/transfers/:transferId\"),\n};\n\nexport const activities = {\n list: GET(\"/accounts/:accountId/activities\"),\n};\n\nexport const paperActivities = {\n list: GET(\"/paper_accounts/:accountId/activities\"),\n};\n\nexport const documents = {\n list: (id, token, params) =>\n REST(\"GET\", `/accounts/${id}/documents`)(params, token), // TODO use GET() instead of REST()\n url: GET(\"/accounts/:accountId/documents/:documentId/url\"),\n};\n\n// New Alpaca account document system\nexport const accountDocuments = {\n listRequests: (id, token) =>\n REST(\"GET\", `/documents/accounts/${id}/requests`)({}, token),\n listUploads: (id, token) =>\n REST(\"GET\", `/documents/accounts/${id}`)({}, token),\n upload: (id, token, payload) =>\n REST(\n \"POST\",\n `/documents/${payload.docId}/upload?sub_type=${payload.subType}`\n )(payload.formData, token, { \"Content-Type\": \"multipart/form-data\" }),\n uploadByDocType: (id, token, payload) =>\n REST(\n \"POST\",\n `/documents/accounts/${id}/upload/${payload.docType}/${payload.docSubType}`\n )(payload.formData, token, { \"Content-Type\": \"multipart/form-data\" }),\n};\n\nexport const profitloss = {\n get: GET(\"/accounts/:accountId/profitloss\"),\n};\n\nexport const paperProfitloss = {\n get: GET(\"/paper_accounts/:accountId/profitloss\"),\n};\n\nexport const portfolio = {\n get: GET(\"/accounts/:accountId/portfolio/history\"),\n};\n\nexport const paperPortfolio = {\n get: GET(\"/paper_accounts/:accountId/portfolio/history\"),\n};\n\nexport const dataAgreement = {\n get: (accountId, agreement, token) =>\n REST(\"GET\", `/accounts/${accountId}/agreements/${agreement}/preview`)(\n // TODO use GET() instead of REST()\n {},\n token\n ),\n post: (accountId, agreement, token, agreementText) =>\n REST(\"POST\", `/accounts/${accountId}/agreements/${agreement}/accept`)(\n // TODO use POST() instead of REST()\n agreementText ? { agreement_text: agreementText } : {},\n token\n ),\n};\n\nexport const taxForm = {\n post: (accountId, formName, token) =>\n REST(\"POST\", `/accounts/${accountId}/taxfiles/${formName}/accept`)(\n {},\n token\n ),\n};\n\nexport const dataAgreementV2 = {\n get: GET(\"/accounts/:accountId/agreements/:agreement/preview\"),\n};\n\nexport const trustedContact = {\n get: (accountId, token) =>\n REST(\"GET\", `/accounts/${accountId}/trusted_contact`)({}, token), // TODO use GET() instead of REST()\n post: (accountId, token, data) =>\n REST(\"POST\", `/accounts/${accountId}/trusted_contact`)(data, token), // TODO use POST() instead of REST()\n};\n\nexport const affiliates = {\n post: (accountId, token, payload) =>\n REST(\"POST\", `/accounts/${accountId}/affiliates`)(payload, token), // TODO use POST() instead of REST()\n list: (accountId, token) =>\n REST(\"GET\", `/accounts/${accountId}/affiliates`)({}, token), // TODO use GET() instead of REST()\n patch: (accountId, affiliateId, token, payload) =>\n REST(\"PATCH\", `/accounts/${accountId}/affiliates/${affiliateId}`)(\n // TODO use PATCH() instead of REST()\n payload,\n token\n ),\n delete: (accountId, token, affiliateId) =>\n REST(\"DELETE\", `/accounts/${accountId}/affiliates/${affiliateId}`)(\n // TODO use DELETE() instead of REST()\n {},\n token\n ),\n};\n\nexport const onfidoApplicant = {\n post: POST(`/accounts/:accountId/onfido/applicant`),\n patch: PATCH(`/accounts/:accountId/onfido/applicant`),\n};\n\nexport const onfidoSdkToken = {\n get: (accountId, token) =>\n REST(\"GET\", `/accounts/${accountId}/onfido/sdk_token`)({}, token),\n patch: PATCH(`/accounts/:accountId/onfido/sdk`),\n};\n\nexport const onfidoResubmission = {\n resubmit: POST(\"/accounts/:accountId/onfido/resubmit\"),\n};\n\nexport const configs = {\n list: GET(`/accounts/:accountId/configurations`),\n patch: PATCH(`/accounts/:accountId/configurations`),\n};\n\nexport const paperConfigs = {\n list: GET(`/paper_accounts/:paperAccountId/configurations`),\n patch: PATCH(`/paper_accounts/:paperAccountId/configurations`),\n};\n\nexport const oauth = {\n client: {\n post: POST(\"/oauth/client\"),\n list: GET(\"/accounts/:accountId/oauth/clients\"),\n create: POST(\"/accounts/:accountId/oauth/clients\"),\n listCreated: GET(\"/accounts/:accountId/oauth/created_clients\"),\n update: PUT(\"/accounts/:accountId/oauth/clients/:clientId\"),\n secret: GET(\"/accounts/:accountId/oauth/clients/:clientId/secret\"),\n },\n clients: {\n listClient: GET(\"/oauth/clients/:clientId\"),\n logo: GET(\"/oauth/clients/:clientId/logo\"),\n screenshots: GET(\"/oauth/clients/:clientId/screenshots\"),\n listClients: GET(\"/oauth/clients?:query\"),\n },\n authorize: POST(\"/oauth/authorize\"),\n list: GET(\"/accounts/:accountId/oauth/clients\"),\n revoke: DELETE(\"/oauth/token\"),\n token: POST(\"/oauth/token\"),\n revokeToken: DELETE(\"/accounts/:accountId/oauth/token/:tokenId\"),\n listTokens: GET(\"/accounts/:accountId/oauth/token\"),\n};\n\nexport const billing = {\n plans: GET(\"/billing/plans\", { public: true }),\n coupon: GET(\"/billing/coupon/:code\"),\n overview: GET(\"/billing/overview\"),\n stripe: {\n create: POST(\"/billing/stripe\"),\n update: PATCH(\"/billing/stripe\"),\n cancel: DELETE(\"/billing/stripe\"),\n },\n alpaca: {\n create: POST(\"/billing/alpaca\"),\n update: PATCH(\"/billing/alpaca\"),\n cancel: DELETE(\"/billing/alpaca\"),\n },\n};\n\nexport const assets = {\n get: GET(\"/assets/:symbol\"),\n search: GET(\"/assets/search\"),\n list: GET(\"/assets?asset_class=:class\"),\n};\n\nexport const quotes = {\n get: GET(\"/quotes?symbols=:symbols\"),\n};\n\nexport const contests = {\n get: GET(\"/contests/:contestId\", { public: true }),\n list: GET(\"/contests\", { public: true }),\n enrollment: {\n get: GET(`/paper_accounts/:paperAccountId/contests/:contestId/enrollment`),\n post: POST(\n `/paper_accounts/:paperAccountId/contests/:contestId/enrollment`\n ),\n patch: PATCH(\n `/paper_accounts/:paperAccountId/contests/:contestId/enrollment`\n ),\n delete: DELETE(\n `/paper_accounts/:paperAccountId/contests/:contestId/enrollment`\n ),\n },\n leaderboard: {\n getAllTime: GET(\"/contests/leaderboard\", { public: true }),\n get: GET(\"/contests/leaderboard/:contestId\", { public: true }),\n getParticipant: GET(\"/contests/leaderboard/:contestId/:participantId\", {\n public: true,\n }),\n },\n};\n\nexport const countries = {\n getRestrictedCountries: GET(\"/restricted-countries\"),\n getCountryInfos: GET(\"/country-infos\"),\n};\n\nexport const agreement = {\n get: GET(\"/accounts/:accountId/taxfiles/:agreement/preview\"),\n};\n\nexport const crypto = {\n list: GET(\"/crypto/fee-structure\"),\n createFee: POST(\"/accounts/:accountId/crypto/fee\"),\n getMonthlyVolume: GET(\"/accounts/:accountId/crypto/monthly-volume\"),\n};\n\n// don't use this default export, it makes it impossible for tools to figure out what anything is.\nexport default {\n getAccountIdAndJWT, // re-exported from selectors for convenience\n owner,\n account,\n accountDocuments,\n ownerDetails,\n auth,\n accessKeys,\n paperAccessKeys,\n addresses,\n positions,\n paperPositions,\n orders,\n paperOrders,\n wireBanks,\n relationships,\n activities,\n paperActivities,\n institutions,\n transfers,\n documents,\n profitloss,\n paperProfitloss,\n tradeAccount,\n paperTradeAccount,\n paperAccounts,\n portfolio,\n paperPortfolio,\n dataAgreement,\n taxForm,\n trustedContact,\n affiliates,\n onfidoApplicant,\n onfidoSdkToken,\n onfidoResubmission,\n configs,\n paperConfigs,\n oauth,\n assets,\n contests,\n quotes,\n rapyd,\n countries,\n rewards,\n currencyCloud,\n recovery,\n agreement,\n dataAgreementV2,\n};\n","import { createAction, createReducer } from \"redux-act\";\nimport api from \"api\";\nimport \"fast-text-encoding\";\nimport { getAccountIdForProduct } from \"selectors\";\nimport { updateIntercom } from \"src/utils/intercom\";\n\nconst REDUCER = \"profitloss\";\nconst NS = `@@${REDUCER}/`;\n\nconst _setProfitLoss = createAction(`${NS}SET_PROFIT_LOSS`);\n\n/**\n * loadProfitLoss\n */\nexport const loadProfitLoss = ({ product = \"paper\" }) => (\n dispatch,\n getState\n) => {\n const ownerId = getState().account?.details?.owner_id || false;\n const accountId = getAccountIdForProduct(getState(), product);\n const endpoint = product === \"paper\" ? \"paperProfitloss\" : \"profitloss\";\n\n if (accountId) {\n return dispatch(api[endpoint].get({ accountId })).then((profitloss) =>\n dispatch(_setProfitLoss({ accountId, product, ownerId, profitloss }))\n );\n }\n return Promise.resolve();\n};\n\nconst initialState = {};\nexport default createReducer(\n {\n [_setProfitLoss]: (state, { accountId, product, ownerId, profitloss }) => {\n if (!profitloss) {\n return state;\n }\n\n const newState = { ...state };\n const previousRetrieval = newState[accountId]?.previousRetrieval;\n\n if (!previousRetrieval) {\n // For now, only one live trading account\n if (product === \"live\" && ownerId) {\n updateIntercom(ownerId, {\n profitLossDay: profitloss.day_plpc,\n profitLossTotal: profitloss.total_plpc,\n });\n }\n }\n\n newState[accountId] = profitloss;\n newState[accountId].previousRetrieval = true;\n return newState;\n },\n },\n initialState\n);\n","import React from \"react\";\n\nimport { connect } from \"react-redux\";\nimport { Link } from \"react-router-dom\";\nimport { logout } from \"reducers/auth/logout\";\nimport { getBillingOverview } from \"reducers/billing\";\nimport { Dropdown, Menu } from \"antd\";\nimport { getAccount, resetOnboarding } from \"reducers/account\";\nimport { initUser } from \"reducers/auth/common\";\nimport {\n getAgreementPending,\n getHasFinishedOnboarding,\n} from \"src/utils/agreements\";\nimport { getCountryInfos } from \"src/reducers/countryInfo\";\nimport { isCryptoEnabled } from \"src/utils/crypto\";\nimport { setFlag, useFlag } from \"@alpacahq/flag-service\";\nimport AmplitudeProvider from \"../../../../AmplitudeProvider\";\nimport { eventTracker } from \"src/utils/eventTracker\";\n\nconst mapDispatchToProps = (dispatch) => ({\n logout: (event) => {\n event.preventDefault();\n dispatch(logout());\n },\n getBillingOverview: () => dispatch(getBillingOverview()),\n getCountryInfo: () => dispatch(getCountryInfos()),\n getAccount: () => dispatch(getAccount()),\n showGuide: (event) => {\n event.preventDefault();\n },\n showGettingStarted: (event) => {\n event.preventDefault();\n },\n resetOnboarding: (event) => {\n event.preventDefault();\n dispatch(resetOnboarding());\n },\n initUser: () => dispatch(initUser(true)),\n});\n\nconst mapStateToProps = (state) => ({\n billing: state.billing,\n userState: state.auth.userState,\n account: state.account,\n countryInfo: state.countryInfo.infoMap || {},\n});\n\n@connect(mapStateToProps, mapDispatchToProps)\nclass ProfileMenu extends React.Component {\n state = { count: 7, v2: useFlag(\"v2\") };\n\n addCount = () =>\n this.setState({\n count: this.state.count + 1,\n });\n\n componentDidMount = () => {\n this.props.getBillingOverview();\n this.props.getAccount();\n };\n\n handleSupportLink = () =>\n eventTracker(\"Clicked Support Profile Menu Link\", {\n category: \"Support\",\n label: window.location.pathname,\n });\n\n render() {\n const {\n userState,\n logout,\n resetOnboarding,\n billing,\n account,\n countryInfo,\n } = this.props;\n\n const { details } = account;\n\n const isProd = window.env.ENV === \"PROD\";\n const accountName = account?.account?.name;\n const accountStatus = account?.account?.status;\n const onboardingStep = account?.last_onboarding_step;\n const accountNum = account?.account?.account_number;\n const email = (userState.attributes && userState.attributes.email) || \"\";\n\n const notifications = JSON.parse(\n localStorage.getItem(\"notifications\") || \"{}\"\n );\n\n const cryptoEnabled = isCryptoEnabled(\n details?.country_of_tax_residence,\n details?.state,\n countryInfo\n );\n\n const notified = (name) => notifications[name];\n const clear = (name) =>\n localStorage.setItem(\n \"notifications\",\n JSON.stringify({ ...notifications, [name]: true })\n );\n\n const menu = (\n \n
\n
\n
\n
\n {accountName}\n
\n
\n \n {accountNum || \"no-account-number\"}\n \n
\n
\n {getHasFinishedOnboarding(details) &&\n getAgreementPending(details, cryptoEnabled) &&\n // ensure not onbv2\n !account?.account?.last_onboarding_step &&\n account?.account?.last_onboarding_step !== \"finished\" && [\n
,\n
\n \n You have pending agreements, review and sign by \n \n clicking here\n \n .\n
\n ,\n ]}\n
\n {billing?.overview?.lifetimeSubCount > 0 ? (\n \n \n \n Market Data Subscription\n \n \n ) : (\n \n \n \n Market Data Subscription\n \n \n )}\n \n \n \n Profile\n \n \n \n \n \n Support\n \n \n
\n \n {\n setFlag(\"uix-v2\", !this.state.v2);\n AmplitudeProvider.dispatch(\n \"dropdown_switch_to_new_button_clicked\"\n );\n window.location.reload();\n }}\n style={{\n fontSize: \"14px\",\n display: \"flex\",\n alignItems: \"center\",\n }}\n >\n \n Switch to new UI\n \n \n
\n \n \n \n Logout\n \n \n {!isProd &&
}\n {!isProd && (\n \n \n {\" \"}\n Reset Onboarding\n \n \n )}\n \n );\n\n return userState.username ? (\n \n ) : null;\n }\n}\n\nexport default ProfileMenu;\n","import React, { useRef, useState } from \"react\";\nimport { useDispatch } from \"react-redux\";\nimport { push } from \"connected-react-router\";\nimport { Select } from \"antd\";\nimport debounce from \"lodash/debounce\";\nimport api from \"api\";\nimport { GlobalHotKeys } from \"react-hotkeys\";\nimport { eventTracker } from \"src/utils/eventTracker\";\n\nconst { Option } = Select;\n\nconst SearchInput = ({ product, placeholder }) => {\n const [state, setState] = useState({\n assets: [],\n query: null,\n fetching: false,\n });\n const { assets, fetching, query } = state;\n const lastFetchId = useRef(0);\n const dispatch = useDispatch();\n\n const onBlur = () => {\n setState({ query: null, assets: [], fetching: false });\n\n eventTracker(`Search Dismissed ${query}`, {\n category: \"Search\",\n });\n };\n const onSelect = (value) => {\n dispatch(\n push((product === \"live\" ? \"/brokerage\" : \"/paper\") + \"/stocks/\" + value)\n );\n };\n const onSearch = debounce((query) => {\n lastFetchId.current += 1;\n const fetchId = lastFetchId.current;\n\n if (!query) {\n setState({ ...state, assets: [], fetching: false });\n return;\n }\n\n setState({ query, fetching: true, assets });\n dispatch(api.assets.search({}, { query }))\n .then((assets) => {\n if (fetchId !== lastFetchId.current) {\n return;\n }\n setState({ ...state, assets, fetching: false });\n })\n .catch(() => {\n if (fetchId !== lastFetchId) {\n return;\n }\n setState({ ...state, assets: [], fetching: false });\n });\n }, 400);\n const selectRef = useRef(null);\n\n return (\n
\n {\n event.preventDefault();\n if (selectRef.current) {\n selectRef.current.focus();\n }\n },\n }}\n />\n \n {assets.map((asset) => (\n \n ))}\n \n
\n );\n};\n\nexport default SearchInput;\n","import React from \"react\";\nimport PropTypes from \"prop-types\";\nimport { Link, withRouter } from \"react-router-dom\";\nimport { connect } from \"react-redux\";\nimport { Icon, Button } from \"antd\";\nimport cn from \"classnames\";\n\nimport ProfileMenu from \"./ProfileMenu\";\nimport SearchInput from \"./SearchInput\";\nimport styled from \"styled-components\";\nimport \"./style.scss\";\nimport AmplitudeProvider from \"src/AmplitudeProvider\";\nimport { initUser } from \"src/reducers/auth/common\";\nimport { isPaperOrOnboarding } from \"src/selectors\";\nimport { eventTracker } from \"src/utils/eventTracker\";\nimport { initializeIntercom } from \"src/utils/intercom\";\n\nconst DepositButton = styled(Button)`\n background-color: #fcdf55;\n border-color: #fcdf55;\n color: black;\n margin-right: 2.5rem;\n min-height: 40px;\n min-width: 60px;\n\n @media (max-width: 615px) {\n display: none;\n }\n\n &:hover {\n border-color: black;\n background-color: rgb(0, 0, 0, 0.4);\n color: black;\n background-color: #fcdf55;\n }\n`;\n\nconst TopBarSubContainer = styled.div`\n display: flex;\n flex-direction: row;\n align-items: center;\n`;\n\nconst SearchBoxContainer = styled(TopBarSubContainer)`\n width: 60%;\n`;\n\nconst mapStateToProps = (state) => {\n const { auth, account } = state;\n return {\n account,\n isLoggedIn: auth && auth.userState && auth.userState.username,\n };\n};\n\n@connect(mapStateToProps)\n@withRouter\nclass TopBar extends React.Component {\n static defaultProps = {\n showBrandInHeader: false,\n showSearchInHeader: true,\n className: \"\",\n };\n\n componentDidMount() {\n if (!this.props.isLoggedIn) {\n this.props.dispatch(initUser(true));\n }\n }\n\n static propTypes = {\n showBrandInHeader: PropTypes.bool,\n showSearchInHeader: PropTypes.bool,\n };\n\n render() {\n const {\n product,\n isLoggedIn,\n showBrandInHeader,\n showSearchInHeader,\n className,\n account,\n history,\n } = this.props;\n const isLive = product === \"live\";\n const accNum = account?.account?.account_number;\n\n // show to 50% of ACTIVE users\n const halfAccounts = parseInt(accNum) % 2 === 0;\n const showFundAccountButton =\n halfAccounts && account?.account?.status === \"ACTIVE\";\n\n // if defined pass account to AmplitudeProvider\n if (account?.details && account?.account) {\n AmplitudeProvider.setAccount(account);\n initializeIntercom(account);\n }\n\n return (\n \n \n {showBrandInHeader && (\n \n \n \n )}\n {showSearchInHeader && (\n <>\n \n \n \n )}\n \n \n {(\n {\n if (isPaperOrOnboarding(account)) {\n history.push(\"/brokerage/new-account\");\n return\n }\n\n eventTracker(\"Clicked on Fund Account from Top Bar\", {\n category: \"Banking\",\n label: \"Top Bar Fund Account Button\",\n })\n\n history.push(\"/brokerage/banking\");\n }}\n >\n {isPaperOrOnboarding(account) ? 'Open Live Account' : 'Deposit Funds'}\n \n )}\n \n \n \n );\n }\n}\n\nexport default TopBar;\n","import { createAction as baseCreateAction, createReducer } from \"redux-act\";\nimport api from \"api\";\n\nconst REDUCER = \"accountList\";\nconst NS = `@@${REDUCER}`;\nconst createAction = (name) => baseCreateAction(`${NS}/${name}`);\n\nexport const _receive = createAction(\"RECEIVE\");\nexport const _fetch = createAction(\"FETCH\");\nexport const _error = createAction(\"ERROR\");\nexport const _invalidate = createAction(\"INVALIDATE\");\nexport const _reset = createAction(\"RESET_ACCOUNTS\");\n\nconst initialState = {\n status: \"invalid\",\n payload: null,\n error: null,\n};\n\nexport const load = () => (dispatch, getState) => {\n const state = getState().accountList;\n switch (state.status) {\n case \"invalid\":\n dispatch(_fetch());\n return dispatch(api.account.list())\n .then((accounts) => {\n dispatch(_receive(accounts));\n return accounts;\n })\n .catch((error) => {\n dispatch(_error(error));\n throw error;\n });\n\n case \"error\":\n return Promise.reject(state.error);\n\n default:\n return Promise.resolve(state.payload);\n }\n};\n\nexport const reload = () => (dispatch) => {\n return dispatch(api.account.list())\n .then((accounts) => {\n dispatch(_receive(accounts));\n return accounts;\n })\n .catch((error) => {\n dispatch(_error(error));\n throw error;\n });\n};\n\nexport const resetState = () => (dispatch) => {\n dispatch(_reset());\n};\n\nexport default createReducer(\n {\n [_receive]: (state, param) => ({\n ...state,\n status: \"loaded\",\n payload: param,\n }),\n [_fetch]: (state) => ({\n ...state,\n status: \"loading\",\n payload: null,\n error: null,\n }),\n [_error]: (state, param) => ({\n ...state,\n status: \"error\",\n error: param,\n }),\n [_invalidate]: (state) => ({\n ...state,\n status: \"invalid\",\n payload: null,\n error: null,\n }),\n [_reset]: () => initialState,\n },\n initialState\n);\n","import instance from \"..\";\n\nexport interface Transfer {\n id: string;\n status: string;\n amount: number;\n created_at: string;\n direction: string;\n type: string;\n}\nexport interface AchTransfer extends Transfer {}\n\nexport const getAchTransfers = async (\n accountId: string\n): Promise => {\n const res = await instance.get(\n `/accounts/${accountId}/transfers`\n );\n return res.data;\n};\n\nexport interface CreateTransferRequest {\n amount: string;\n direction: string;\n relationship_id?: string;\n bank_id?: string;\n transfer_type: string;\n}\n\nexport const createAchTransfer = async (\n accountId: string,\n req: CreateTransferRequest\n): Promise => {\n const res = await instance.post(\n `/accounts/${accountId}/transfers`,\n req\n );\n return res.data;\n};\n\nexport interface RapydTransfer extends Transfer {\n transfer_status: string;\n}\n\nexport const getRapydTransfers = async (\n accountId: string\n): Promise => {\n const res = await instance.get(\n `/rapyd/${accountId}/transfers`\n );\n\n // standardize to fit the abstract transfer object\n res.data.forEach((t) => {\n t.status = t.transfer_status;\n t.type = \"rapyd\";\n t.direction = \"INCOMING\";\n });\n return res.data;\n};\n\nexport interface AchRelationship {\n id: string;\n account_id: string;\n status: string;\n approval_method: string;\n account_name: string;\n plaid_institution: string;\n}\n\nexport const getAchRelationships = async (\n accountId: string\n): Promise => {\n const res = await instance.get(\n `/accounts/${accountId}/relationships`\n );\n return res.data;\n};\n\nexport const deleteAchRelationship = async (\n accountId: string,\n relationshipId: string\n): Promise => {\n const res = await instance.delete(\n `/accounts/${accountId}/relationships/${relationshipId}`\n );\n return res.data;\n};\n\nexport interface BankInstitutionResponse {\n institution: BankInstitution;\n}\n\nexport interface BankInstitution {\n logo: string;\n brand_name: string;\n}\n\nexport const getBankInstitution = async (\n institutionId: string\n): Promise => {\n const res = await instance.get(\n `/institutions/${institutionId}`\n );\n return res.data.institution;\n};\n","import React from \"react\";\n\nimport { Box } from \"@chakra-ui/react\";\n\ntype AsteriskProps = {\n required?: boolean;\n};\n\nexport const Asterisk = ({ required }: AsteriskProps) => (\n \n *\n \n);\n\nexport default Asterisk;\n","import React from \"react\";\n\nimport Asterisk from \"./asterisk\";\n\nimport { Box, BoxProps, Text } from \"@chakra-ui/react\";\n\ninterface FieldProps extends BoxProps {\n label: React.ReactNode;\n description?: string;\n required?: boolean;\n error?: boolean;\n errorMsg?: string;\n children: React.ReactNode;\n}\n\n// wraps input field with label and asterisk if required\nexport const Field = ({\n label,\n description,\n required,\n error,\n errorMsg,\n children,\n ...more\n}: FieldProps) => {\n return (\n \n \n {label} \n \n \n {error && errorMsg}\n \n \n {description && (\n \n {description}\n \n )}\n {children}\n \n );\n};\n\nexport default Field;\n","import Fuse from \"fuse.js\";\nimport objpath from \"object-path\";\n\nimport React, {\n ChangeEventHandler,\n FocusEventHandler,\n KeyboardEventHandler,\n ReactEventHandler,\n useMemo,\n useState,\n} from \"react\";\n\nimport { UseFormReturn } from \"react-hook-form\";\nimport { Box, Input, InputProps, Text } from \"@chakra-ui/react\";\n\ntype Fuzzable = { original: T; text: any; value: any };\n\ninterface FuzzyProps extends InputProps {\n name: string;\n items: (T & object)[];\n strict?: boolean;\n maxResults?: number;\n options?: Fuse.IFuseOptions;\n onDidSelect?: (item: T) => void;\n hook: UseFormReturn;\n accessors: {\n text: keyof T & string;\n value: keyof T & string;\n search: (keyof T & string)[];\n };\n}\n\nexport const Fuzzy = ({\n items,\n hook,\n strict,\n options,\n accessors,\n maxResults,\n onDidSelect,\n value,\n ...more\n}: FuzzyProps) => {\n const { name } = more;\n\n const [hide, setHide] = useState(true);\n const [cursor, setCursor] = useState(0);\n\n const fuzzable = items.map>((item) => ({\n original: item,\n text: item[accessors.text],\n value: objpath.get(item, accessors.value),\n }));\n\n const fuse = new Fuse(fuzzable, {\n threshold: 0,\n findAllMatches: true,\n ignoreLocation: true,\n keys: accessors.search.map((key) => \"original.\".concat(key)),\n ...options,\n });\n\n const matched = useMemo(\n () => fuse.search(String(value)).slice(0, maxResults || 10),\n [value, cursor]\n );\n\n // do nothing if value matches zero index text\n const onFocus: FocusEventHandler = ({ currentTarget }) =>\n setHide(matched.at(0)?.item.value === currentTarget.value);\n\n const onBlur: FocusEventHandler = (event) => {\n // if value does not exist as text\n if (\n strict &&\n !fuzzable.find(\n ({ text, value }) =>\n text === event.currentTarget.value ||\n value === event.currentTarget.value\n )\n ) {\n // wipe value\n hook.setValue(name, \"\");\n }\n\n // trigger validation\n hook.trigger(name || \"\");\n\n // don't show matches on blur\n setHide(true);\n };\n\n const onChange: ChangeEventHandler = (event) => {\n // reset cursor\n setCursor(0);\n\n // show matched if more exist\n if (matched.length > 0) {\n setHide(false);\n }\n\n more.onChange && more.onChange(event);\n };\n\n const select: ReactEventHandler = () => {\n // out of bounds, do nothing\n if (cursor >= matched.length) {\n return;\n }\n\n const item = matched[cursor]?.item;\n\n hook.setValue(name, item.value);\n\n // call onDidSelect for parent\n onDidSelect && onDidSelect(matched[cursor].item.original);\n setHide(true);\n };\n\n const onKeyDown: KeyboardEventHandler = (event) => {\n switch (event.key) {\n case \"Enter\":\n select(event);\n event.preventDefault();\n break;\n case \"ArrowUp\":\n setCursor(Math.max(0, cursor - 1));\n break;\n case \"ArrowDown\":\n setCursor(Math.min(matched.length - 1, cursor + 1));\n break;\n }\n\n // trigger validation\n hook.trigger(name || \"\");\n };\n\n return (\n \n \n {!hide && !!hook.watch(name)?.length && (\n \n {matched.length > 0 ? (\n matched\n .map(({ item }) => item)\n .map((item, index) => (\n select(event)}\n onMouseOver={() => setCursor(index)}\n >\n {item.text}\n \n ))\n ) : (\n \n No results\n \n )}\n \n )}\n \n );\n};\n\nexport default Fuzzy;\n","import React from \"react\";\n\nimport { Input, InputProps } from \"@chakra-ui/react\";\n\nexport const MaskedDate = (props: InputProps) => {\n const onChange: React.ChangeEventHandler = (event) => {\n // strip non-numeric characters or forward slash, from value\n event.currentTarget.value = event.currentTarget.value.replace(\n /[^0-9/]/g,\n \"\"\n );\n\n // since we have overriden the onChange event, we need to call the original\n props.onChange && props.onChange(event);\n };\n\n const onKeyDown: React.KeyboardEventHandler = (event) => {\n const value = event.currentTarget.value;\n\n // handle user input of forward slash\n if (value.length === 2 || value.length === 5) {\n event.key !== \"/\" &&\n /[0-9]/.test(String.fromCharCode(event.which)) &&\n (event.currentTarget.value += \"/\");\n } else if (event.key === \"/\") {\n event.preventDefault();\n }\n };\n\n return (\n e.preventDefault()}\n size=\"lg\"\n placeholder=\"dd/mm/yyyy\"\n maxLength={10}\n onChange={onChange}\n onKeyDown={onKeyDown}\n />\n );\n};\n\nexport default MaskedDate;\n","import { useEffect, useState } from \"react\";\nexport const useKeyPress = (key) => {\n // State for keeping track of whether key is pressed\n const [keyPressed, setKeyPressed] = useState(false);\n // If pressed key is our target key then set to true\n function downHandler({ key: k }) {\n if (k === key) {\n setKeyPressed(true);\n }\n }\n // If released key is our target key then set to false\n const upHandler = ({ key: k }) => {\n if (k === key) {\n setKeyPressed(false);\n }\n };\n useEffect(() => {\n window.addEventListener(\"keydown\", downHandler);\n window.addEventListener(\"keyup\", upHandler);\n // Remove event listeners on cleanup\n return () => {\n window.removeEventListener(\"keydown\", downHandler);\n window.removeEventListener(\"keyup\", upHandler);\n };\n }, []);\n return keyPressed;\n};\nexport default useKeyPress;\n//# sourceMappingURL=useKeyPress.js.map","import React from \"react\";\nimport { classes } from \"../index\";\nimport { UICardBody } from \"./UICardBody\";\nimport { UICardHeader } from \"./UICardHeader\";\nconst Root = ({ children, onClick }) =>\n React.createElement(\n \"div\",\n {\n onClick: onClick,\n },\n React.createElement(\n \"div\",\n {\n className:\n \"flex flex-col border rounded-lg shadow-sm border-cool-gray-300\",\n },\n children\n )\n );\nexport default Object.assign(Root, {\n Body: UICardBody,\n Header: UICardHeader,\n});\n//# sourceMappingURL=UICard.js.map\n","import React from \"react\";\nimport { classes } from \"../index\";\nexport const UICardBody = ({ children, noPadding }) =>\n React.createElement(\n \"div\",\n { className: classes(\"flex flex-col\", noPadding ? \"\" : \"p-6\") },\n children\n );\n//# sourceMappingURL=UICardBody.js.map\n","import React from \"react\";\nexport const UICardHeader = ({ title, children }) => {\n return React.createElement(\n \"div\",\n {\n className:\n \"flex items-center justify-between space-x-4 p-4 whitespace-nowrap overflow-x-scroll\",\n },\n React.createElement(\n \"div\",\n { className: \"font-semibold text-md flex-1\" },\n title\n ),\n React.createElement(\"div\", null, children)\n );\n};\n//# sourceMappingURL=UICardHeader.js.map\n","var __rest =\n (this && this.__rest) ||\n function (s, e) {\n var t = {};\n for (var p in s)\n if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\n t[p] = s[p];\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\n if (\n e.indexOf(p[i]) < 0 &&\n Object.prototype.propertyIsEnumerable.call(s, p[i])\n )\n t[p[i]] = s[p[i]];\n }\n return t;\n };\nimport React from \"react\";\nimport { default as AcademicCapIconLine } from \"@heroicons/react/24/outline/AcademicCapIcon\";\nimport { default as AdjustmentsHorizontalIconLine } from \"@heroicons/react/24/outline/AdjustmentsHorizontalIcon\";\nimport { default as AdjustmentsVerticalIconLine } from \"@heroicons/react/24/outline/AdjustmentsVerticalIcon\";\nimport { default as ArchiveBoxArrowDownIconLine } from \"@heroicons/react/24/outline/ArchiveBoxArrowDownIcon\";\nimport { default as ArchiveBoxXMarkIconLine } from \"@heroicons/react/24/outline/ArchiveBoxXMarkIcon\";\nimport { default as ArchiveBoxIconLine } from \"@heroicons/react/24/outline/ArchiveBoxIcon\";\nimport { default as ArrowDownCircleIconLine } from \"@heroicons/react/24/outline/ArrowDownCircleIcon\";\nimport { default as ArrowDownLeftIconLine } from \"@heroicons/react/24/outline/ArrowDownLeftIcon\";\nimport { default as ArrowDownOnSquareStackIconLine } from \"@heroicons/react/24/outline/ArrowDownOnSquareStackIcon\";\nimport { default as ArrowDownOnSquareIconLine } from \"@heroicons/react/24/outline/ArrowDownOnSquareIcon\";\nimport { default as ArrowDownRightIconLine } from \"@heroicons/react/24/outline/ArrowDownRightIcon\";\nimport { default as ArrowDownTrayIconLine } from \"@heroicons/react/24/outline/ArrowDownTrayIcon\";\nimport { default as ArrowDownIconLine } from \"@heroicons/react/24/outline/ArrowDownIcon\";\nimport { default as ArrowLeftCircleIconLine } from \"@heroicons/react/24/outline/ArrowLeftCircleIcon\";\nimport { default as ArrowLeftOnRectangleIconLine } from \"@heroicons/react/24/outline/ArrowLeftOnRectangleIcon\";\nimport { default as ArrowLeftIconLine } from \"@heroicons/react/24/outline/ArrowLeftIcon\";\nimport { default as ArrowLongDownIconLine } from \"@heroicons/react/24/outline/ArrowLongDownIcon\";\nimport { default as ArrowLongLeftIconLine } from \"@heroicons/react/24/outline/ArrowLongLeftIcon\";\nimport { default as ArrowLongRightIconLine } from \"@heroicons/react/24/outline/ArrowLongRightIcon\";\nimport { default as ArrowLongUpIconLine } from \"@heroicons/react/24/outline/ArrowLongUpIcon\";\nimport { default as ArrowPathRoundedSquareIconLine } from \"@heroicons/react/24/outline/ArrowPathRoundedSquareIcon\";\nimport { default as ArrowPathIconLine } from \"@heroicons/react/24/outline/ArrowPathIcon\";\nimport { default as ArrowRightCircleIconLine } from \"@heroicons/react/24/outline/ArrowRightCircleIcon\";\nimport { default as ArrowRightOnRectangleIconLine } from \"@heroicons/react/24/outline/ArrowRightOnRectangleIcon\";\nimport { default as ArrowRightIconLine } from \"@heroicons/react/24/outline/ArrowRightIcon\";\nimport { default as ArrowSmallDownIconLine } from \"@heroicons/react/24/outline/ArrowSmallDownIcon\";\nimport { default as ArrowSmallLeftIconLine } from \"@heroicons/react/24/outline/ArrowSmallLeftIcon\";\nimport { default as ArrowSmallRightIconLine } from \"@heroicons/react/24/outline/ArrowSmallRightIcon\";\nimport { default as ArrowSmallUpIconLine } from \"@heroicons/react/24/outline/ArrowSmallUpIcon\";\nimport { default as ArrowTopRightOnSquareIconLine } from \"@heroicons/react/24/outline/ArrowTopRightOnSquareIcon\";\nimport { default as ArrowTrendingDownIconLine } from \"@heroicons/react/24/outline/ArrowTrendingDownIcon\";\nimport { default as ArrowTrendingUpIconLine } from \"@heroicons/react/24/outline/ArrowTrendingUpIcon\";\nimport { default as ArrowUpCircleIconLine } from \"@heroicons/react/24/outline/ArrowUpCircleIcon\";\nimport { default as ArrowUpLeftIconLine } from \"@heroicons/react/24/outline/ArrowUpLeftIcon\";\nimport { default as ArrowUpOnSquareStackIconLine } from \"@heroicons/react/24/outline/ArrowUpOnSquareStackIcon\";\nimport { default as ArrowUpOnSquareIconLine } from \"@heroicons/react/24/outline/ArrowUpOnSquareIcon\";\nimport { default as ArrowUpRightIconLine } from \"@heroicons/react/24/outline/ArrowUpRightIcon\";\nimport { default as ArrowUpTrayIconLine } from \"@heroicons/react/24/outline/ArrowUpTrayIcon\";\nimport { default as ArrowUpIconLine } from \"@heroicons/react/24/outline/ArrowUpIcon\";\nimport { default as ArrowUturnDownIconLine } from \"@heroicons/react/24/outline/ArrowUturnDownIcon\";\nimport { default as ArrowUturnLeftIconLine } from \"@heroicons/react/24/outline/ArrowUturnLeftIcon\";\nimport { default as ArrowUturnRightIconLine } from \"@heroicons/react/24/outline/ArrowUturnRightIcon\";\nimport { default as ArrowUturnUpIconLine } from \"@heroicons/react/24/outline/ArrowUturnUpIcon\";\nimport { default as ArrowsPointingInIconLine } from \"@heroicons/react/24/outline/ArrowsPointingInIcon\";\nimport { default as ArrowsPointingOutIconLine } from \"@heroicons/react/24/outline/ArrowsPointingOutIcon\";\nimport { default as ArrowsRightLeftIconLine } from \"@heroicons/react/24/outline/ArrowsRightLeftIcon\";\nimport { default as ArrowsUpDownIconLine } from \"@heroicons/react/24/outline/ArrowsUpDownIcon\";\nimport { default as AtSymbolIconLine } from \"@heroicons/react/24/outline/AtSymbolIcon\";\nimport { default as BackspaceIconLine } from \"@heroicons/react/24/outline/BackspaceIcon\";\nimport { default as BackwardIconLine } from \"@heroicons/react/24/outline/BackwardIcon\";\nimport { default as BanknotesIconLine } from \"@heroicons/react/24/outline/BanknotesIcon\";\nimport { default as Bars2IconLine } from \"@heroicons/react/24/outline/Bars2Icon\";\nimport { default as Bars3BottomLeftIconLine } from \"@heroicons/react/24/outline/Bars3BottomLeftIcon\";\nimport { default as Bars3BottomRightIconLine } from \"@heroicons/react/24/outline/Bars3BottomRightIcon\";\nimport { default as Bars3CenterLeftIconLine } from \"@heroicons/react/24/outline/Bars3CenterLeftIcon\";\nimport { default as Bars3IconLine } from \"@heroicons/react/24/outline/Bars3Icon\";\nimport { default as Bars4IconLine } from \"@heroicons/react/24/outline/Bars4Icon\";\nimport { default as BarsArrowDownIconLine } from \"@heroicons/react/24/outline/BarsArrowDownIcon\";\nimport { default as BarsArrowUpIconLine } from \"@heroicons/react/24/outline/BarsArrowUpIcon\";\nimport { default as Battery0IconLine } from \"@heroicons/react/24/outline/Battery0Icon\";\nimport { default as Battery100IconLine } from \"@heroicons/react/24/outline/Battery100Icon\";\nimport { default as Battery50IconLine } from \"@heroicons/react/24/outline/Battery50Icon\";\nimport { default as BeakerIconLine } from \"@heroicons/react/24/outline/BeakerIcon\";\nimport { default as BellAlertIconLine } from \"@heroicons/react/24/outline/BellAlertIcon\";\nimport { default as BellSlashIconLine } from \"@heroicons/react/24/outline/BellSlashIcon\";\nimport { default as BellSnoozeIconLine } from \"@heroicons/react/24/outline/BellSnoozeIcon\";\nimport { default as BellIconLine } from \"@heroicons/react/24/outline/BellIcon\";\nimport { default as BoltSlashIconLine } from \"@heroicons/react/24/outline/BoltSlashIcon\";\nimport { default as BoltIconLine } from \"@heroicons/react/24/outline/BoltIcon\";\nimport { default as BookOpenIconLine } from \"@heroicons/react/24/outline/BookOpenIcon\";\nimport { default as BookmarkSlashIconLine } from \"@heroicons/react/24/outline/BookmarkSlashIcon\";\nimport { default as BookmarkSquareIconLine } from \"@heroicons/react/24/outline/BookmarkSquareIcon\";\nimport { default as BookmarkIconLine } from \"@heroicons/react/24/outline/BookmarkIcon\";\nimport { default as BriefcaseIconLine } from \"@heroicons/react/24/outline/BriefcaseIcon\";\nimport { default as BugAntIconLine } from \"@heroicons/react/24/outline/BugAntIcon\";\nimport { default as BuildingLibraryIconLine } from \"@heroicons/react/24/outline/BuildingLibraryIcon\";\nimport { default as BuildingOffice2IconLine } from \"@heroicons/react/24/outline/BuildingOffice2Icon\";\nimport { default as BuildingOfficeIconLine } from \"@heroicons/react/24/outline/BuildingOfficeIcon\";\nimport { default as BuildingStorefrontIconLine } from \"@heroicons/react/24/outline/BuildingStorefrontIcon\";\nimport { default as CakeIconLine } from \"@heroicons/react/24/outline/CakeIcon\";\nimport { default as CalculatorIconLine } from \"@heroicons/react/24/outline/CalculatorIcon\";\nimport { default as CalendarDaysIconLine } from \"@heroicons/react/24/outline/CalendarDaysIcon\";\nimport { default as CalendarIconLine } from \"@heroicons/react/24/outline/CalendarIcon\";\nimport { default as CameraIconLine } from \"@heroicons/react/24/outline/CameraIcon\";\nimport { default as ChartBarSquareIconLine } from \"@heroicons/react/24/outline/ChartBarSquareIcon\";\nimport { default as ChartBarIconLine } from \"@heroicons/react/24/outline/ChartBarIcon\";\nimport { default as ChartPieIconLine } from \"@heroicons/react/24/outline/ChartPieIcon\";\nimport { default as ChatBubbleBottomCenterTextIconLine } from \"@heroicons/react/24/outline/ChatBubbleBottomCenterTextIcon\";\nimport { default as ChatBubbleBottomCenterIconLine } from \"@heroicons/react/24/outline/ChatBubbleBottomCenterIcon\";\nimport { default as ChatBubbleLeftEllipsisIconLine } from \"@heroicons/react/24/outline/ChatBubbleLeftEllipsisIcon\";\nimport { default as ChatBubbleLeftRightIconLine } from \"@heroicons/react/24/outline/ChatBubbleLeftRightIcon\";\nimport { default as ChatBubbleLeftIconLine } from \"@heroicons/react/24/outline/ChatBubbleLeftIcon\";\nimport { default as ChatBubbleOvalLeftEllipsisIconLine } from \"@heroicons/react/24/outline/ChatBubbleOvalLeftEllipsisIcon\";\nimport { default as ChatBubbleOvalLeftIconLine } from \"@heroicons/react/24/outline/ChatBubbleOvalLeftIcon\";\nimport { default as CheckBadgeIconLine } from \"@heroicons/react/24/outline/CheckBadgeIcon\";\nimport { default as CheckCircleIconLine } from \"@heroicons/react/24/outline/CheckCircleIcon\";\nimport { default as CheckIconLine } from \"@heroicons/react/24/outline/CheckIcon\";\nimport { default as ChevronDoubleDownIconLine } from \"@heroicons/react/24/outline/ChevronDoubleDownIcon\";\nimport { default as ChevronDoubleLeftIconLine } from \"@heroicons/react/24/outline/ChevronDoubleLeftIcon\";\nimport { default as ChevronDoubleRightIconLine } from \"@heroicons/react/24/outline/ChevronDoubleRightIcon\";\nimport { default as ChevronDoubleUpIconLine } from \"@heroicons/react/24/outline/ChevronDoubleUpIcon\";\nimport { default as ChevronDownIconLine } from \"@heroicons/react/24/outline/ChevronDownIcon\";\nimport { default as ChevronLeftIconLine } from \"@heroicons/react/24/outline/ChevronLeftIcon\";\nimport { default as ChevronRightIconLine } from \"@heroicons/react/24/outline/ChevronRightIcon\";\nimport { default as ChevronUpDownIconLine } from \"@heroicons/react/24/outline/ChevronUpDownIcon\";\nimport { default as ChevronUpIconLine } from \"@heroicons/react/24/outline/ChevronUpIcon\";\nimport { default as CircleStackIconLine } from \"@heroicons/react/24/outline/CircleStackIcon\";\nimport { default as ClipboardDocumentCheckIconLine } from \"@heroicons/react/24/outline/ClipboardDocumentCheckIcon\";\nimport { default as ClipboardDocumentListIconLine } from \"@heroicons/react/24/outline/ClipboardDocumentListIcon\";\nimport { default as ClipboardDocumentIconLine } from \"@heroicons/react/24/outline/ClipboardDocumentIcon\";\nimport { default as ClipboardIconLine } from \"@heroicons/react/24/outline/ClipboardIcon\";\nimport { default as ClockIconLine } from \"@heroicons/react/24/outline/ClockIcon\";\nimport { default as CloudArrowDownIconLine } from \"@heroicons/react/24/outline/CloudArrowDownIcon\";\nimport { default as CloudArrowUpIconLine } from \"@heroicons/react/24/outline/CloudArrowUpIcon\";\nimport { default as CloudIconLine } from \"@heroicons/react/24/outline/CloudIcon\";\nimport { default as CodeBracketSquareIconLine } from \"@heroicons/react/24/outline/CodeBracketSquareIcon\";\nimport { default as CodeBracketIconLine } from \"@heroicons/react/24/outline/CodeBracketIcon\";\nimport { default as Cog6ToothIconLine } from \"@heroicons/react/24/outline/Cog6ToothIcon\";\nimport { default as Cog8ToothIconLine } from \"@heroicons/react/24/outline/Cog8ToothIcon\";\nimport { default as CogIconLine } from \"@heroicons/react/24/outline/CogIcon\";\nimport { default as CommandLineIconLine } from \"@heroicons/react/24/outline/CommandLineIcon\";\nimport { default as ComputerDesktopIconLine } from \"@heroicons/react/24/outline/ComputerDesktopIcon\";\nimport { default as CpuChipIconLine } from \"@heroicons/react/24/outline/CpuChipIcon\";\nimport { default as CreditCardIconLine } from \"@heroicons/react/24/outline/CreditCardIcon\";\nimport { default as CubeTransparentIconLine } from \"@heroicons/react/24/outline/CubeTransparentIcon\";\nimport { default as CubeIconLine } from \"@heroicons/react/24/outline/CubeIcon\";\nimport { default as CurrencyBangladeshiIconLine } from \"@heroicons/react/24/outline/CurrencyBangladeshiIcon\";\nimport { default as CurrencyDollarIconLine } from \"@heroicons/react/24/outline/CurrencyDollarIcon\";\nimport { default as CurrencyEuroIconLine } from \"@heroicons/react/24/outline/CurrencyEuroIcon\";\nimport { default as CurrencyPoundIconLine } from \"@heroicons/react/24/outline/CurrencyPoundIcon\";\nimport { default as CurrencyRupeeIconLine } from \"@heroicons/react/24/outline/CurrencyRupeeIcon\";\nimport { default as CurrencyYenIconLine } from \"@heroicons/react/24/outline/CurrencyYenIcon\";\nimport { default as CursorArrowRaysIconLine } from \"@heroicons/react/24/outline/CursorArrowRaysIcon\";\nimport { default as CursorArrowRippleIconLine } from \"@heroicons/react/24/outline/CursorArrowRippleIcon\";\nimport { default as DevicePhoneMobileIconLine } from \"@heroicons/react/24/outline/DevicePhoneMobileIcon\";\nimport { default as DeviceTabletIconLine } from \"@heroicons/react/24/outline/DeviceTabletIcon\";\nimport { default as DocumentArrowDownIconLine } from \"@heroicons/react/24/outline/DocumentArrowDownIcon\";\nimport { default as DocumentArrowUpIconLine } from \"@heroicons/react/24/outline/DocumentArrowUpIcon\";\nimport { default as DocumentChartBarIconLine } from \"@heroicons/react/24/outline/DocumentChartBarIcon\";\nimport { default as DocumentCheckIconLine } from \"@heroicons/react/24/outline/DocumentCheckIcon\";\nimport { default as DocumentDuplicateIconLine } from \"@heroicons/react/24/outline/DocumentDuplicateIcon\";\nimport { default as DocumentMagnifyingGlassIconLine } from \"@heroicons/react/24/outline/DocumentMagnifyingGlassIcon\";\nimport { default as DocumentMinusIconLine } from \"@heroicons/react/24/outline/DocumentMinusIcon\";\nimport { default as DocumentPlusIconLine } from \"@heroicons/react/24/outline/DocumentPlusIcon\";\nimport { default as DocumentTextIconLine } from \"@heroicons/react/24/outline/DocumentTextIcon\";\nimport { default as DocumentIconLine } from \"@heroicons/react/24/outline/DocumentIcon\";\nimport { default as EllipsisHorizontalCircleIconLine } from \"@heroicons/react/24/outline/EllipsisHorizontalCircleIcon\";\nimport { default as EllipsisHorizontalIconLine } from \"@heroicons/react/24/outline/EllipsisHorizontalIcon\";\nimport { default as EllipsisVerticalIconLine } from \"@heroicons/react/24/outline/EllipsisVerticalIcon\";\nimport { default as EnvelopeOpenIconLine } from \"@heroicons/react/24/outline/EnvelopeOpenIcon\";\nimport { default as EnvelopeIconLine } from \"@heroicons/react/24/outline/EnvelopeIcon\";\nimport { default as ExclamationCircleIconLine } from \"@heroicons/react/24/outline/ExclamationCircleIcon\";\nimport { default as ExclamationTriangleIconLine } from \"@heroicons/react/24/outline/ExclamationTriangleIcon\";\nimport { default as EyeDropperIconLine } from \"@heroicons/react/24/outline/EyeDropperIcon\";\nimport { default as EyeSlashIconLine } from \"@heroicons/react/24/outline/EyeSlashIcon\";\nimport { default as EyeIconLine } from \"@heroicons/react/24/outline/EyeIcon\";\nimport { default as FaceFrownIconLine } from \"@heroicons/react/24/outline/FaceFrownIcon\";\nimport { default as FaceSmileIconLine } from \"@heroicons/react/24/outline/FaceSmileIcon\";\nimport { default as FilmIconLine } from \"@heroicons/react/24/outline/FilmIcon\";\nimport { default as FingerPrintIconLine } from \"@heroicons/react/24/outline/FingerPrintIcon\";\nimport { default as FireIconLine } from \"@heroicons/react/24/outline/FireIcon\";\nimport { default as FlagIconLine } from \"@heroicons/react/24/outline/FlagIcon\";\nimport { default as FolderArrowDownIconLine } from \"@heroicons/react/24/outline/FolderArrowDownIcon\";\nimport { default as FolderMinusIconLine } from \"@heroicons/react/24/outline/FolderMinusIcon\";\nimport { default as FolderOpenIconLine } from \"@heroicons/react/24/outline/FolderOpenIcon\";\nimport { default as FolderPlusIconLine } from \"@heroicons/react/24/outline/FolderPlusIcon\";\nimport { default as FolderIconLine } from \"@heroicons/react/24/outline/FolderIcon\";\nimport { default as ForwardIconLine } from \"@heroicons/react/24/outline/ForwardIcon\";\nimport { default as FunnelIconLine } from \"@heroicons/react/24/outline/FunnelIcon\";\nimport { default as GifIconLine } from \"@heroicons/react/24/outline/GifIcon\";\nimport { default as GiftTopIconLine } from \"@heroicons/react/24/outline/GiftTopIcon\";\nimport { default as GiftIconLine } from \"@heroicons/react/24/outline/GiftIcon\";\nimport { default as GlobeAltIconLine } from \"@heroicons/react/24/outline/GlobeAltIcon\";\nimport { default as GlobeAmericasIconLine } from \"@heroicons/react/24/outline/GlobeAmericasIcon\";\nimport { default as GlobeAsiaAustraliaIconLine } from \"@heroicons/react/24/outline/GlobeAsiaAustraliaIcon\";\nimport { default as GlobeEuropeAfricaIconLine } from \"@heroicons/react/24/outline/GlobeEuropeAfricaIcon\";\nimport { default as HandRaisedIconLine } from \"@heroicons/react/24/outline/HandRaisedIcon\";\nimport { default as HandThumbDownIconLine } from \"@heroicons/react/24/outline/HandThumbDownIcon\";\nimport { default as HandThumbUpIconLine } from \"@heroicons/react/24/outline/HandThumbUpIcon\";\nimport { default as HashtagIconLine } from \"@heroicons/react/24/outline/HashtagIcon\";\nimport { default as HeartIconLine } from \"@heroicons/react/24/outline/HeartIcon\";\nimport { default as HomeModernIconLine } from \"@heroicons/react/24/outline/HomeModernIcon\";\nimport { default as HomeIconLine } from \"@heroicons/react/24/outline/HomeIcon\";\nimport { default as IdentificationIconLine } from \"@heroicons/react/24/outline/IdentificationIcon\";\nimport { default as InboxArrowDownIconLine } from \"@heroicons/react/24/outline/InboxArrowDownIcon\";\nimport { default as InboxStackIconLine } from \"@heroicons/react/24/outline/InboxStackIcon\";\nimport { default as InboxIconLine } from \"@heroicons/react/24/outline/InboxIcon\";\nimport { default as InformationCircleIconLine } from \"@heroicons/react/24/outline/InformationCircleIcon\";\nimport { default as KeyIconLine } from \"@heroicons/react/24/outline/KeyIcon\";\nimport { default as LanguageIconLine } from \"@heroicons/react/24/outline/LanguageIcon\";\nimport { default as LifebuoyIconLine } from \"@heroicons/react/24/outline/LifebuoyIcon\";\nimport { default as LightBulbIconLine } from \"@heroicons/react/24/outline/LightBulbIcon\";\nimport { default as LinkIconLine } from \"@heroicons/react/24/outline/LinkIcon\";\nimport { default as ListBulletIconLine } from \"@heroicons/react/24/outline/ListBulletIcon\";\nimport { default as LockClosedIconLine } from \"@heroicons/react/24/outline/LockClosedIcon\";\nimport { default as LockOpenIconLine } from \"@heroicons/react/24/outline/LockOpenIcon\";\nimport { default as MagnifyingGlassCircleIconLine } from \"@heroicons/react/24/outline/MagnifyingGlassCircleIcon\";\nimport { default as MagnifyingGlassMinusIconLine } from \"@heroicons/react/24/outline/MagnifyingGlassMinusIcon\";\nimport { default as MagnifyingGlassPlusIconLine } from \"@heroicons/react/24/outline/MagnifyingGlassPlusIcon\";\nimport { default as MagnifyingGlassIconLine } from \"@heroicons/react/24/outline/MagnifyingGlassIcon\";\nimport { default as MapPinIconLine } from \"@heroicons/react/24/outline/MapPinIcon\";\nimport { default as MapIconLine } from \"@heroicons/react/24/outline/MapIcon\";\nimport { default as MegaphoneIconLine } from \"@heroicons/react/24/outline/MegaphoneIcon\";\nimport { default as MicrophoneIconLine } from \"@heroicons/react/24/outline/MicrophoneIcon\";\nimport { default as MinusCircleIconLine } from \"@heroicons/react/24/outline/MinusCircleIcon\";\nimport { default as MinusSmallIconLine } from \"@heroicons/react/24/outline/MinusSmallIcon\";\nimport { default as MinusIconLine } from \"@heroicons/react/24/outline/MinusIcon\";\nimport { default as MoonIconLine } from \"@heroicons/react/24/outline/MoonIcon\";\nimport { default as MusicalNoteIconLine } from \"@heroicons/react/24/outline/MusicalNoteIcon\";\nimport { default as NewspaperIconLine } from \"@heroicons/react/24/outline/NewspaperIcon\";\nimport { default as NoSymbolIconLine } from \"@heroicons/react/24/outline/NoSymbolIcon\";\nimport { default as PaintBrushIconLine } from \"@heroicons/react/24/outline/PaintBrushIcon\";\nimport { default as PaperAirplaneIconLine } from \"@heroicons/react/24/outline/PaperAirplaneIcon\";\nimport { default as PaperClipIconLine } from \"@heroicons/react/24/outline/PaperClipIcon\";\nimport { default as PauseCircleIconLine } from \"@heroicons/react/24/outline/PauseCircleIcon\";\nimport { default as PauseIconLine } from \"@heroicons/react/24/outline/PauseIcon\";\nimport { default as PencilSquareIconLine } from \"@heroicons/react/24/outline/PencilSquareIcon\";\nimport { default as PencilIconLine } from \"@heroicons/react/24/outline/PencilIcon\";\nimport { default as PhoneArrowDownLeftIconLine } from \"@heroicons/react/24/outline/PhoneArrowDownLeftIcon\";\nimport { default as PhoneArrowUpRightIconLine } from \"@heroicons/react/24/outline/PhoneArrowUpRightIcon\";\nimport { default as PhoneXMarkIconLine } from \"@heroicons/react/24/outline/PhoneXMarkIcon\";\nimport { default as PhoneIconLine } from \"@heroicons/react/24/outline/PhoneIcon\";\nimport { default as PhotoIconLine } from \"@heroicons/react/24/outline/PhotoIcon\";\nimport { default as PlayCircleIconLine } from \"@heroicons/react/24/outline/PlayCircleIcon\";\nimport { default as PlayPauseIconLine } from \"@heroicons/react/24/outline/PlayPauseIcon\";\nimport { default as PlayIconLine } from \"@heroicons/react/24/outline/PlayIcon\";\nimport { default as PlusCircleIconLine } from \"@heroicons/react/24/outline/PlusCircleIcon\";\nimport { default as PlusSmallIconLine } from \"@heroicons/react/24/outline/PlusSmallIcon\";\nimport { default as PlusIconLine } from \"@heroicons/react/24/outline/PlusIcon\";\nimport { default as PowerIconLine } from \"@heroicons/react/24/outline/PowerIcon\";\nimport { default as PresentationChartBarIconLine } from \"@heroicons/react/24/outline/PresentationChartBarIcon\";\nimport { default as PresentationChartLineIconLine } from \"@heroicons/react/24/outline/PresentationChartLineIcon\";\nimport { default as PrinterIconLine } from \"@heroicons/react/24/outline/PrinterIcon\";\nimport { default as PuzzlePieceIconLine } from \"@heroicons/react/24/outline/PuzzlePieceIcon\";\nimport { default as QrCodeIconLine } from \"@heroicons/react/24/outline/QrCodeIcon\";\nimport { default as QuestionMarkCircleIconLine } from \"@heroicons/react/24/outline/QuestionMarkCircleIcon\";\nimport { default as QueueListIconLine } from \"@heroicons/react/24/outline/QueueListIcon\";\nimport { default as RadioIconLine } from \"@heroicons/react/24/outline/RadioIcon\";\nimport { default as ReceiptPercentIconLine } from \"@heroicons/react/24/outline/ReceiptPercentIcon\";\nimport { default as ReceiptRefundIconLine } from \"@heroicons/react/24/outline/ReceiptRefundIcon\";\nimport { default as RectangleGroupIconLine } from \"@heroicons/react/24/outline/RectangleGroupIcon\";\nimport { default as RectangleStackIconLine } from \"@heroicons/react/24/outline/RectangleStackIcon\";\nimport { default as RocketLaunchIconLine } from \"@heroicons/react/24/outline/RocketLaunchIcon\";\nimport { default as RssIconLine } from \"@heroicons/react/24/outline/RssIcon\";\nimport { default as ScaleIconLine } from \"@heroicons/react/24/outline/ScaleIcon\";\nimport { default as ScissorsIconLine } from \"@heroicons/react/24/outline/ScissorsIcon\";\nimport { default as ServerStackIconLine } from \"@heroicons/react/24/outline/ServerStackIcon\";\nimport { default as ServerIconLine } from \"@heroicons/react/24/outline/ServerIcon\";\nimport { default as ShareIconLine } from \"@heroicons/react/24/outline/ShareIcon\";\nimport { default as ShieldCheckIconLine } from \"@heroicons/react/24/outline/ShieldCheckIcon\";\nimport { default as ShieldExclamationIconLine } from \"@heroicons/react/24/outline/ShieldExclamationIcon\";\nimport { default as ShoppingBagIconLine } from \"@heroicons/react/24/outline/ShoppingBagIcon\";\nimport { default as ShoppingCartIconLine } from \"@heroicons/react/24/outline/ShoppingCartIcon\";\nimport { default as SignalSlashIconLine } from \"@heroicons/react/24/outline/SignalSlashIcon\";\nimport { default as SignalIconLine } from \"@heroicons/react/24/outline/SignalIcon\";\nimport { default as SparklesIconLine } from \"@heroicons/react/24/outline/SparklesIcon\";\nimport { default as SpeakerWaveIconLine } from \"@heroicons/react/24/outline/SpeakerWaveIcon\";\nimport { default as SpeakerXMarkIconLine } from \"@heroicons/react/24/outline/SpeakerXMarkIcon\";\nimport { default as Square2StackIconLine } from \"@heroicons/react/24/outline/Square2StackIcon\";\nimport { default as Square3Stack3DIconLine } from \"@heroicons/react/24/outline/Square3Stack3DIcon\";\nimport { default as Squares2X2IconLine } from \"@heroicons/react/24/outline/Squares2X2Icon\";\nimport { default as SquaresPlusIconLine } from \"@heroicons/react/24/outline/SquaresPlusIcon\";\nimport { default as StarIconLine } from \"@heroicons/react/24/outline/StarIcon\";\nimport { default as StopCircleIconLine } from \"@heroicons/react/24/outline/StopCircleIcon\";\nimport { default as StopIconLine } from \"@heroicons/react/24/outline/StopIcon\";\nimport { default as SunIconLine } from \"@heroicons/react/24/outline/SunIcon\";\nimport { default as SwatchIconLine } from \"@heroicons/react/24/outline/SwatchIcon\";\nimport { default as TableCellsIconLine } from \"@heroicons/react/24/outline/TableCellsIcon\";\nimport { default as TagIconLine } from \"@heroicons/react/24/outline/TagIcon\";\nimport { default as TicketIconLine } from \"@heroicons/react/24/outline/TicketIcon\";\nimport { default as TrashIconLine } from \"@heroicons/react/24/outline/TrashIcon\";\nimport { default as TrophyIconLine } from \"@heroicons/react/24/outline/TrophyIcon\";\nimport { default as TruckIconLine } from \"@heroicons/react/24/outline/TruckIcon\";\nimport { default as TvIconLine } from \"@heroicons/react/24/outline/TvIcon\";\nimport { default as UserCircleIconLine } from \"@heroicons/react/24/outline/UserCircleIcon\";\nimport { default as UserGroupIconLine } from \"@heroicons/react/24/outline/UserGroupIcon\";\nimport { default as UserMinusIconLine } from \"@heroicons/react/24/outline/UserMinusIcon\";\nimport { default as UserPlusIconLine } from \"@heroicons/react/24/outline/UserPlusIcon\";\nimport { default as UserIconLine } from \"@heroicons/react/24/outline/UserIcon\";\nimport { default as UsersIconLine } from \"@heroicons/react/24/outline/UsersIcon\";\nimport { default as VariableIconLine } from \"@heroicons/react/24/outline/VariableIcon\";\nimport { default as VideoCameraSlashIconLine } from \"@heroicons/react/24/outline/VideoCameraSlashIcon\";\nimport { default as VideoCameraIconLine } from \"@heroicons/react/24/outline/VideoCameraIcon\";\nimport { default as ViewColumnsIconLine } from \"@heroicons/react/24/outline/ViewColumnsIcon\";\nimport { default as ViewfinderCircleIconLine } from \"@heroicons/react/24/outline/ViewfinderCircleIcon\";\nimport { default as WalletIconLine } from \"@heroicons/react/24/outline/WalletIcon\";\nimport { default as WifiIconLine } from \"@heroicons/react/24/outline/WifiIcon\";\nimport { default as WindowIconLine } from \"@heroicons/react/24/outline/WindowIcon\";\nimport { default as WrenchScrewdriverIconLine } from \"@heroicons/react/24/outline/WrenchScrewdriverIcon\";\nimport { default as WrenchIconLine } from \"@heroicons/react/24/outline/WrenchIcon\";\nimport { default as XCircleIconLine } from \"@heroicons/react/24/outline/XCircleIcon\";\nimport { default as XMarkIconLine } from \"@heroicons/react/24/outline/XMarkIcon\";\nimport { default as AcademicCapIconFilled } from \"@heroicons/react/24/solid/AcademicCapIcon\";\nimport { default as AdjustmentsHorizontalIconFilled } from \"@heroicons/react/24/solid/AdjustmentsHorizontalIcon\";\nimport { default as AdjustmentsVerticalIconFilled } from \"@heroicons/react/24/solid/AdjustmentsVerticalIcon\";\nimport { default as ArchiveBoxArrowDownIconFilled } from \"@heroicons/react/24/solid/ArchiveBoxArrowDownIcon\";\nimport { default as ArchiveBoxXMarkIconFilled } from \"@heroicons/react/24/solid/ArchiveBoxXMarkIcon\";\nimport { default as ArchiveBoxIconFilled } from \"@heroicons/react/24/solid/ArchiveBoxIcon\";\nimport { default as ArrowDownCircleIconFilled } from \"@heroicons/react/24/solid/ArrowDownCircleIcon\";\nimport { default as ArrowDownLeftIconFilled } from \"@heroicons/react/24/solid/ArrowDownLeftIcon\";\nimport { default as ArrowDownOnSquareStackIconFilled } from \"@heroicons/react/24/solid/ArrowDownOnSquareStackIcon\";\nimport { default as ArrowDownOnSquareIconFilled } from \"@heroicons/react/24/solid/ArrowDownOnSquareIcon\";\nimport { default as ArrowDownRightIconFilled } from \"@heroicons/react/24/solid/ArrowDownRightIcon\";\nimport { default as ArrowDownTrayIconFilled } from \"@heroicons/react/24/solid/ArrowDownTrayIcon\";\nimport { default as ArrowDownIconFilled } from \"@heroicons/react/24/solid/ArrowDownIcon\";\nimport { default as ArrowLeftCircleIconFilled } from \"@heroicons/react/24/solid/ArrowLeftCircleIcon\";\nimport { default as ArrowLeftOnRectangleIconFilled } from \"@heroicons/react/24/solid/ArrowLeftOnRectangleIcon\";\nimport { default as ArrowLeftIconFilled } from \"@heroicons/react/24/solid/ArrowLeftIcon\";\nimport { default as ArrowLongDownIconFilled } from \"@heroicons/react/24/solid/ArrowLongDownIcon\";\nimport { default as ArrowLongLeftIconFilled } from \"@heroicons/react/24/solid/ArrowLongLeftIcon\";\nimport { default as ArrowLongRightIconFilled } from \"@heroicons/react/24/solid/ArrowLongRightIcon\";\nimport { default as ArrowLongUpIconFilled } from \"@heroicons/react/24/solid/ArrowLongUpIcon\";\nimport { default as ArrowPathRoundedSquareIconFilled } from \"@heroicons/react/24/solid/ArrowPathRoundedSquareIcon\";\nimport { default as ArrowPathIconFilled } from \"@heroicons/react/24/solid/ArrowPathIcon\";\nimport { default as ArrowRightCircleIconFilled } from \"@heroicons/react/24/solid/ArrowRightCircleIcon\";\nimport { default as ArrowRightOnRectangleIconFilled } from \"@heroicons/react/24/solid/ArrowRightOnRectangleIcon\";\nimport { default as ArrowRightIconFilled } from \"@heroicons/react/24/solid/ArrowRightIcon\";\nimport { default as ArrowSmallDownIconFilled } from \"@heroicons/react/24/solid/ArrowSmallDownIcon\";\nimport { default as ArrowSmallLeftIconFilled } from \"@heroicons/react/24/solid/ArrowSmallLeftIcon\";\nimport { default as ArrowSmallRightIconFilled } from \"@heroicons/react/24/solid/ArrowSmallRightIcon\";\nimport { default as ArrowSmallUpIconFilled } from \"@heroicons/react/24/solid/ArrowSmallUpIcon\";\nimport { default as ArrowTopRightOnSquareIconFilled } from \"@heroicons/react/24/solid/ArrowTopRightOnSquareIcon\";\nimport { default as ArrowTrendingDownIconFilled } from \"@heroicons/react/24/solid/ArrowTrendingDownIcon\";\nimport { default as ArrowTrendingUpIconFilled } from \"@heroicons/react/24/solid/ArrowTrendingUpIcon\";\nimport { default as ArrowUpCircleIconFilled } from \"@heroicons/react/24/solid/ArrowUpCircleIcon\";\nimport { default as ArrowUpLeftIconFilled } from \"@heroicons/react/24/solid/ArrowUpLeftIcon\";\nimport { default as ArrowUpOnSquareStackIconFilled } from \"@heroicons/react/24/solid/ArrowUpOnSquareStackIcon\";\nimport { default as ArrowUpOnSquareIconFilled } from \"@heroicons/react/24/solid/ArrowUpOnSquareIcon\";\nimport { default as ArrowUpRightIconFilled } from \"@heroicons/react/24/solid/ArrowUpRightIcon\";\nimport { default as ArrowUpTrayIconFilled } from \"@heroicons/react/24/solid/ArrowUpTrayIcon\";\nimport { default as ArrowUpIconFilled } from \"@heroicons/react/24/solid/ArrowUpIcon\";\nimport { default as ArrowUturnDownIconFilled } from \"@heroicons/react/24/solid/ArrowUturnDownIcon\";\nimport { default as ArrowUturnLeftIconFilled } from \"@heroicons/react/24/solid/ArrowUturnLeftIcon\";\nimport { default as ArrowUturnRightIconFilled } from \"@heroicons/react/24/solid/ArrowUturnRightIcon\";\nimport { default as ArrowUturnUpIconFilled } from \"@heroicons/react/24/solid/ArrowUturnUpIcon\";\nimport { default as ArrowsPointingInIconFilled } from \"@heroicons/react/24/solid/ArrowsPointingInIcon\";\nimport { default as ArrowsPointingOutIconFilled } from \"@heroicons/react/24/solid/ArrowsPointingOutIcon\";\nimport { default as ArrowsRightLeftIconFilled } from \"@heroicons/react/24/solid/ArrowsRightLeftIcon\";\nimport { default as ArrowsUpDownIconFilled } from \"@heroicons/react/24/solid/ArrowsUpDownIcon\";\nimport { default as AtSymbolIconFilled } from \"@heroicons/react/24/solid/AtSymbolIcon\";\nimport { default as BackspaceIconFilled } from \"@heroicons/react/24/solid/BackspaceIcon\";\nimport { default as BackwardIconFilled } from \"@heroicons/react/24/solid/BackwardIcon\";\nimport { default as BanknotesIconFilled } from \"@heroicons/react/24/solid/BanknotesIcon\";\nimport { default as Bars2IconFilled } from \"@heroicons/react/24/solid/Bars2Icon\";\nimport { default as Bars3BottomLeftIconFilled } from \"@heroicons/react/24/solid/Bars3BottomLeftIcon\";\nimport { default as Bars3BottomRightIconFilled } from \"@heroicons/react/24/solid/Bars3BottomRightIcon\";\nimport { default as Bars3CenterLeftIconFilled } from \"@heroicons/react/24/solid/Bars3CenterLeftIcon\";\nimport { default as Bars3IconFilled } from \"@heroicons/react/24/solid/Bars3Icon\";\nimport { default as Bars4IconFilled } from \"@heroicons/react/24/solid/Bars4Icon\";\nimport { default as BarsArrowDownIconFilled } from \"@heroicons/react/24/solid/BarsArrowDownIcon\";\nimport { default as BarsArrowUpIconFilled } from \"@heroicons/react/24/solid/BarsArrowUpIcon\";\nimport { default as Battery0IconFilled } from \"@heroicons/react/24/solid/Battery0Icon\";\nimport { default as Battery100IconFilled } from \"@heroicons/react/24/solid/Battery100Icon\";\nimport { default as Battery50IconFilled } from \"@heroicons/react/24/solid/Battery50Icon\";\nimport { default as BeakerIconFilled } from \"@heroicons/react/24/solid/BeakerIcon\";\nimport { default as BellAlertIconFilled } from \"@heroicons/react/24/solid/BellAlertIcon\";\nimport { default as BellSlashIconFilled } from \"@heroicons/react/24/solid/BellSlashIcon\";\nimport { default as BellSnoozeIconFilled } from \"@heroicons/react/24/solid/BellSnoozeIcon\";\nimport { default as BellIconFilled } from \"@heroicons/react/24/solid/BellIcon\";\nimport { default as BoltSlashIconFilled } from \"@heroicons/react/24/solid/BoltSlashIcon\";\nimport { default as BoltIconFilled } from \"@heroicons/react/24/solid/BoltIcon\";\nimport { default as BookOpenIconFilled } from \"@heroicons/react/24/solid/BookOpenIcon\";\nimport { default as BookmarkSlashIconFilled } from \"@heroicons/react/24/solid/BookmarkSlashIcon\";\nimport { default as BookmarkSquareIconFilled } from \"@heroicons/react/24/solid/BookmarkSquareIcon\";\nimport { default as BookmarkIconFilled } from \"@heroicons/react/24/solid/BookmarkIcon\";\nimport { default as BriefcaseIconFilled } from \"@heroicons/react/24/solid/BriefcaseIcon\";\nimport { default as BugAntIconFilled } from \"@heroicons/react/24/solid/BugAntIcon\";\nimport { default as BuildingLibraryIconFilled } from \"@heroicons/react/24/solid/BuildingLibraryIcon\";\nimport { default as BuildingOffice2IconFilled } from \"@heroicons/react/24/solid/BuildingOffice2Icon\";\nimport { default as BuildingOfficeIconFilled } from \"@heroicons/react/24/solid/BuildingOfficeIcon\";\nimport { default as BuildingStorefrontIconFilled } from \"@heroicons/react/24/solid/BuildingStorefrontIcon\";\nimport { default as CakeIconFilled } from \"@heroicons/react/24/solid/CakeIcon\";\nimport { default as CalculatorIconFilled } from \"@heroicons/react/24/solid/CalculatorIcon\";\nimport { default as CalendarDaysIconFilled } from \"@heroicons/react/24/solid/CalendarDaysIcon\";\nimport { default as CalendarIconFilled } from \"@heroicons/react/24/solid/CalendarIcon\";\nimport { default as CameraIconFilled } from \"@heroicons/react/24/solid/CameraIcon\";\nimport { default as ChartBarSquareIconFilled } from \"@heroicons/react/24/solid/ChartBarSquareIcon\";\nimport { default as ChartBarIconFilled } from \"@heroicons/react/24/solid/ChartBarIcon\";\nimport { default as ChartPieIconFilled } from \"@heroicons/react/24/solid/ChartPieIcon\";\nimport { default as ChatBubbleBottomCenterTextIconFilled } from \"@heroicons/react/24/solid/ChatBubbleBottomCenterTextIcon\";\nimport { default as ChatBubbleBottomCenterIconFilled } from \"@heroicons/react/24/solid/ChatBubbleBottomCenterIcon\";\nimport { default as ChatBubbleLeftEllipsisIconFilled } from \"@heroicons/react/24/solid/ChatBubbleLeftEllipsisIcon\";\nimport { default as ChatBubbleLeftRightIconFilled } from \"@heroicons/react/24/solid/ChatBubbleLeftRightIcon\";\nimport { default as ChatBubbleLeftIconFilled } from \"@heroicons/react/24/solid/ChatBubbleLeftIcon\";\nimport { default as ChatBubbleOvalLeftEllipsisIconFilled } from \"@heroicons/react/24/solid/ChatBubbleOvalLeftEllipsisIcon\";\nimport { default as ChatBubbleOvalLeftIconFilled } from \"@heroicons/react/24/solid/ChatBubbleOvalLeftIcon\";\nimport { default as CheckBadgeIconFilled } from \"@heroicons/react/24/solid/CheckBadgeIcon\";\nimport { default as CheckCircleIconFilled } from \"@heroicons/react/24/solid/CheckCircleIcon\";\nimport { default as CheckIconFilled } from \"@heroicons/react/24/solid/CheckIcon\";\nimport { default as ChevronDoubleDownIconFilled } from \"@heroicons/react/24/solid/ChevronDoubleDownIcon\";\nimport { default as ChevronDoubleLeftIconFilled } from \"@heroicons/react/24/solid/ChevronDoubleLeftIcon\";\nimport { default as ChevronDoubleRightIconFilled } from \"@heroicons/react/24/solid/ChevronDoubleRightIcon\";\nimport { default as ChevronDoubleUpIconFilled } from \"@heroicons/react/24/solid/ChevronDoubleUpIcon\";\nimport { default as ChevronDownIconFilled } from \"@heroicons/react/24/solid/ChevronDownIcon\";\nimport { default as ChevronLeftIconFilled } from \"@heroicons/react/24/solid/ChevronLeftIcon\";\nimport { default as ChevronRightIconFilled } from \"@heroicons/react/24/solid/ChevronRightIcon\";\nimport { default as ChevronUpDownIconFilled } from \"@heroicons/react/24/solid/ChevronUpDownIcon\";\nimport { default as ChevronUpIconFilled } from \"@heroicons/react/24/solid/ChevronUpIcon\";\nimport { default as CircleStackIconFilled } from \"@heroicons/react/24/solid/CircleStackIcon\";\nimport { default as ClipboardDocumentCheckIconFilled } from \"@heroicons/react/24/solid/ClipboardDocumentCheckIcon\";\nimport { default as ClipboardDocumentListIconFilled } from \"@heroicons/react/24/solid/ClipboardDocumentListIcon\";\nimport { default as ClipboardDocumentIconFilled } from \"@heroicons/react/24/solid/ClipboardDocumentIcon\";\nimport { default as ClipboardIconFilled } from \"@heroicons/react/24/solid/ClipboardIcon\";\nimport { default as ClockIconFilled } from \"@heroicons/react/24/solid/ClockIcon\";\nimport { default as CloudArrowDownIconFilled } from \"@heroicons/react/24/solid/CloudArrowDownIcon\";\nimport { default as CloudArrowUpIconFilled } from \"@heroicons/react/24/solid/CloudArrowUpIcon\";\nimport { default as CloudIconFilled } from \"@heroicons/react/24/solid/CloudIcon\";\nimport { default as CodeBracketSquareIconFilled } from \"@heroicons/react/24/solid/CodeBracketSquareIcon\";\nimport { default as CodeBracketIconFilled } from \"@heroicons/react/24/solid/CodeBracketIcon\";\nimport { default as Cog6ToothIconFilled } from \"@heroicons/react/24/solid/Cog6ToothIcon\";\nimport { default as Cog8ToothIconFilled } from \"@heroicons/react/24/solid/Cog8ToothIcon\";\nimport { default as CogIconFilled } from \"@heroicons/react/24/solid/CogIcon\";\nimport { default as CommandLineIconFilled } from \"@heroicons/react/24/solid/CommandLineIcon\";\nimport { default as ComputerDesktopIconFilled } from \"@heroicons/react/24/solid/ComputerDesktopIcon\";\nimport { default as CpuChipIconFilled } from \"@heroicons/react/24/solid/CpuChipIcon\";\nimport { default as CreditCardIconFilled } from \"@heroicons/react/24/solid/CreditCardIcon\";\nimport { default as CubeTransparentIconFilled } from \"@heroicons/react/24/solid/CubeTransparentIcon\";\nimport { default as CubeIconFilled } from \"@heroicons/react/24/solid/CubeIcon\";\nimport { default as CurrencyBangladeshiIconFilled } from \"@heroicons/react/24/solid/CurrencyBangladeshiIcon\";\nimport { default as CurrencyDollarIconFilled } from \"@heroicons/react/24/solid/CurrencyDollarIcon\";\nimport { default as CurrencyEuroIconFilled } from \"@heroicons/react/24/solid/CurrencyEuroIcon\";\nimport { default as CurrencyPoundIconFilled } from \"@heroicons/react/24/solid/CurrencyPoundIcon\";\nimport { default as CurrencyRupeeIconFilled } from \"@heroicons/react/24/solid/CurrencyRupeeIcon\";\nimport { default as CurrencyYenIconFilled } from \"@heroicons/react/24/solid/CurrencyYenIcon\";\nimport { default as CursorArrowRaysIconFilled } from \"@heroicons/react/24/solid/CursorArrowRaysIcon\";\nimport { default as CursorArrowRippleIconFilled } from \"@heroicons/react/24/solid/CursorArrowRippleIcon\";\nimport { default as DevicePhoneMobileIconFilled } from \"@heroicons/react/24/solid/DevicePhoneMobileIcon\";\nimport { default as DeviceTabletIconFilled } from \"@heroicons/react/24/solid/DeviceTabletIcon\";\nimport { default as DocumentArrowDownIconFilled } from \"@heroicons/react/24/solid/DocumentArrowDownIcon\";\nimport { default as DocumentArrowUpIconFilled } from \"@heroicons/react/24/solid/DocumentArrowUpIcon\";\nimport { default as DocumentChartBarIconFilled } from \"@heroicons/react/24/solid/DocumentChartBarIcon\";\nimport { default as DocumentCheckIconFilled } from \"@heroicons/react/24/solid/DocumentCheckIcon\";\nimport { default as DocumentDuplicateIconFilled } from \"@heroicons/react/24/solid/DocumentDuplicateIcon\";\nimport { default as DocumentMagnifyingGlassIconFilled } from \"@heroicons/react/24/solid/DocumentMagnifyingGlassIcon\";\nimport { default as DocumentMinusIconFilled } from \"@heroicons/react/24/solid/DocumentMinusIcon\";\nimport { default as DocumentPlusIconFilled } from \"@heroicons/react/24/solid/DocumentPlusIcon\";\nimport { default as DocumentTextIconFilled } from \"@heroicons/react/24/solid/DocumentTextIcon\";\nimport { default as DocumentIconFilled } from \"@heroicons/react/24/solid/DocumentIcon\";\nimport { default as EllipsisHorizontalCircleIconFilled } from \"@heroicons/react/24/solid/EllipsisHorizontalCircleIcon\";\nimport { default as EllipsisHorizontalIconFilled } from \"@heroicons/react/24/solid/EllipsisHorizontalIcon\";\nimport { default as EllipsisVerticalIconFilled } from \"@heroicons/react/24/solid/EllipsisVerticalIcon\";\nimport { default as EnvelopeOpenIconFilled } from \"@heroicons/react/24/solid/EnvelopeOpenIcon\";\nimport { default as EnvelopeIconFilled } from \"@heroicons/react/24/solid/EnvelopeIcon\";\nimport { default as ExclamationCircleIconFilled } from \"@heroicons/react/24/solid/ExclamationCircleIcon\";\nimport { default as ExclamationTriangleIconFilled } from \"@heroicons/react/24/solid/ExclamationTriangleIcon\";\nimport { default as EyeDropperIconFilled } from \"@heroicons/react/24/solid/EyeDropperIcon\";\nimport { default as EyeSlashIconFilled } from \"@heroicons/react/24/solid/EyeSlashIcon\";\nimport { default as EyeIconFilled } from \"@heroicons/react/24/solid/EyeIcon\";\nimport { default as FaceFrownIconFilled } from \"@heroicons/react/24/solid/FaceFrownIcon\";\nimport { default as FaceSmileIconFilled } from \"@heroicons/react/24/solid/FaceSmileIcon\";\nimport { default as FilmIconFilled } from \"@heroicons/react/24/solid/FilmIcon\";\nimport { default as FingerPrintIconFilled } from \"@heroicons/react/24/solid/FingerPrintIcon\";\nimport { default as FireIconFilled } from \"@heroicons/react/24/solid/FireIcon\";\nimport { default as FlagIconFilled } from \"@heroicons/react/24/solid/FlagIcon\";\nimport { default as FolderArrowDownIconFilled } from \"@heroicons/react/24/solid/FolderArrowDownIcon\";\nimport { default as FolderMinusIconFilled } from \"@heroicons/react/24/solid/FolderMinusIcon\";\nimport { default as FolderOpenIconFilled } from \"@heroicons/react/24/solid/FolderOpenIcon\";\nimport { default as FolderPlusIconFilled } from \"@heroicons/react/24/solid/FolderPlusIcon\";\nimport { default as FolderIconFilled } from \"@heroicons/react/24/solid/FolderIcon\";\nimport { default as ForwardIconFilled } from \"@heroicons/react/24/solid/ForwardIcon\";\nimport { default as FunnelIconFilled } from \"@heroicons/react/24/solid/FunnelIcon\";\nimport { default as GifIconFilled } from \"@heroicons/react/24/solid/GifIcon\";\nimport { default as GiftTopIconFilled } from \"@heroicons/react/24/solid/GiftTopIcon\";\nimport { default as GiftIconFilled } from \"@heroicons/react/24/solid/GiftIcon\";\nimport { default as GlobeAltIconFilled } from \"@heroicons/react/24/solid/GlobeAltIcon\";\nimport { default as GlobeAmericasIconFilled } from \"@heroicons/react/24/solid/GlobeAmericasIcon\";\nimport { default as GlobeAsiaAustraliaIconFilled } from \"@heroicons/react/24/solid/GlobeAsiaAustraliaIcon\";\nimport { default as GlobeEuropeAfricaIconFilled } from \"@heroicons/react/24/solid/GlobeEuropeAfricaIcon\";\nimport { default as HandRaisedIconFilled } from \"@heroicons/react/24/solid/HandRaisedIcon\";\nimport { default as HandThumbDownIconFilled } from \"@heroicons/react/24/solid/HandThumbDownIcon\";\nimport { default as HandThumbUpIconFilled } from \"@heroicons/react/24/solid/HandThumbUpIcon\";\nimport { default as HashtagIconFilled } from \"@heroicons/react/24/solid/HashtagIcon\";\nimport { default as HeartIconFilled } from \"@heroicons/react/24/solid/HeartIcon\";\nimport { default as HomeModernIconFilled } from \"@heroicons/react/24/solid/HomeModernIcon\";\nimport { default as HomeIconFilled } from \"@heroicons/react/24/solid/HomeIcon\";\nimport { default as IdentificationIconFilled } from \"@heroicons/react/24/solid/IdentificationIcon\";\nimport { default as InboxArrowDownIconFilled } from \"@heroicons/react/24/solid/InboxArrowDownIcon\";\nimport { default as InboxStackIconFilled } from \"@heroicons/react/24/solid/InboxStackIcon\";\nimport { default as InboxIconFilled } from \"@heroicons/react/24/solid/InboxIcon\";\nimport { default as InformationCircleIconFilled } from \"@heroicons/react/24/solid/InformationCircleIcon\";\nimport { default as KeyIconFilled } from \"@heroicons/react/24/solid/KeyIcon\";\nimport { default as LanguageIconFilled } from \"@heroicons/react/24/solid/LanguageIcon\";\nimport { default as LifebuoyIconFilled } from \"@heroicons/react/24/solid/LifebuoyIcon\";\nimport { default as LightBulbIconFilled } from \"@heroicons/react/24/solid/LightBulbIcon\";\nimport { default as LinkIconFilled } from \"@heroicons/react/24/solid/LinkIcon\";\nimport { default as ListBulletIconFilled } from \"@heroicons/react/24/solid/ListBulletIcon\";\nimport { default as LockClosedIconFilled } from \"@heroicons/react/24/solid/LockClosedIcon\";\nimport { default as LockOpenIconFilled } from \"@heroicons/react/24/solid/LockOpenIcon\";\nimport { default as MagnifyingGlassCircleIconFilled } from \"@heroicons/react/24/solid/MagnifyingGlassCircleIcon\";\nimport { default as MagnifyingGlassMinusIconFilled } from \"@heroicons/react/24/solid/MagnifyingGlassMinusIcon\";\nimport { default as MagnifyingGlassPlusIconFilled } from \"@heroicons/react/24/solid/MagnifyingGlassPlusIcon\";\nimport { default as MagnifyingGlassIconFilled } from \"@heroicons/react/24/solid/MagnifyingGlassIcon\";\nimport { default as MapPinIconFilled } from \"@heroicons/react/24/solid/MapPinIcon\";\nimport { default as MapIconFilled } from \"@heroicons/react/24/solid/MapIcon\";\nimport { default as MegaphoneIconFilled } from \"@heroicons/react/24/solid/MegaphoneIcon\";\nimport { default as MicrophoneIconFilled } from \"@heroicons/react/24/solid/MicrophoneIcon\";\nimport { default as MinusCircleIconFilled } from \"@heroicons/react/24/solid/MinusCircleIcon\";\nimport { default as MinusSmallIconFilled } from \"@heroicons/react/24/solid/MinusSmallIcon\";\nimport { default as MinusIconFilled } from \"@heroicons/react/24/solid/MinusIcon\";\nimport { default as MoonIconFilled } from \"@heroicons/react/24/solid/MoonIcon\";\nimport { default as MusicalNoteIconFilled } from \"@heroicons/react/24/solid/MusicalNoteIcon\";\nimport { default as NewspaperIconFilled } from \"@heroicons/react/24/solid/NewspaperIcon\";\nimport { default as NoSymbolIconFilled } from \"@heroicons/react/24/solid/NoSymbolIcon\";\nimport { default as PaintBrushIconFilled } from \"@heroicons/react/24/solid/PaintBrushIcon\";\nimport { default as PaperAirplaneIconFilled } from \"@heroicons/react/24/solid/PaperAirplaneIcon\";\nimport { default as PaperClipIconFilled } from \"@heroicons/react/24/solid/PaperClipIcon\";\nimport { default as PauseCircleIconFilled } from \"@heroicons/react/24/solid/PauseCircleIcon\";\nimport { default as PauseIconFilled } from \"@heroicons/react/24/solid/PauseIcon\";\nimport { default as PencilSquareIconFilled } from \"@heroicons/react/24/solid/PencilSquareIcon\";\nimport { default as PencilIconFilled } from \"@heroicons/react/24/solid/PencilIcon\";\nimport { default as PhoneArrowDownLeftIconFilled } from \"@heroicons/react/24/solid/PhoneArrowDownLeftIcon\";\nimport { default as PhoneArrowUpRightIconFilled } from \"@heroicons/react/24/solid/PhoneArrowUpRightIcon\";\nimport { default as PhoneXMarkIconFilled } from \"@heroicons/react/24/solid/PhoneXMarkIcon\";\nimport { default as PhoneIconFilled } from \"@heroicons/react/24/solid/PhoneIcon\";\nimport { default as PhotoIconFilled } from \"@heroicons/react/24/solid/PhotoIcon\";\nimport { default as PlayCircleIconFilled } from \"@heroicons/react/24/solid/PlayCircleIcon\";\nimport { default as PlayPauseIconFilled } from \"@heroicons/react/24/solid/PlayPauseIcon\";\nimport { default as PlayIconFilled } from \"@heroicons/react/24/solid/PlayIcon\";\nimport { default as PlusCircleIconFilled } from \"@heroicons/react/24/solid/PlusCircleIcon\";\nimport { default as PlusSmallIconFilled } from \"@heroicons/react/24/solid/PlusSmallIcon\";\nimport { default as PlusIconFilled } from \"@heroicons/react/24/solid/PlusIcon\";\nimport { default as PowerIconFilled } from \"@heroicons/react/24/solid/PowerIcon\";\nimport { default as PresentationChartBarIconFilled } from \"@heroicons/react/24/solid/PresentationChartBarIcon\";\nimport { default as PresentationChartLineIconFilled } from \"@heroicons/react/24/solid/PresentationChartLineIcon\";\nimport { default as PrinterIconFilled } from \"@heroicons/react/24/solid/PrinterIcon\";\nimport { default as PuzzlePieceIconFilled } from \"@heroicons/react/24/solid/PuzzlePieceIcon\";\nimport { default as QrCodeIconFilled } from \"@heroicons/react/24/solid/QrCodeIcon\";\nimport { default as QuestionMarkCircleIconFilled } from \"@heroicons/react/24/solid/QuestionMarkCircleIcon\";\nimport { default as QueueListIconFilled } from \"@heroicons/react/24/solid/QueueListIcon\";\nimport { default as RadioIconFilled } from \"@heroicons/react/24/solid/RadioIcon\";\nimport { default as ReceiptPercentIconFilled } from \"@heroicons/react/24/solid/ReceiptPercentIcon\";\nimport { default as ReceiptRefundIconFilled } from \"@heroicons/react/24/solid/ReceiptRefundIcon\";\nimport { default as RectangleGroupIconFilled } from \"@heroicons/react/24/solid/RectangleGroupIcon\";\nimport { default as RectangleStackIconFilled } from \"@heroicons/react/24/solid/RectangleStackIcon\";\nimport { default as RocketLaunchIconFilled } from \"@heroicons/react/24/solid/RocketLaunchIcon\";\nimport { default as RssIconFilled } from \"@heroicons/react/24/solid/RssIcon\";\nimport { default as ScaleIconFilled } from \"@heroicons/react/24/solid/ScaleIcon\";\nimport { default as ScissorsIconFilled } from \"@heroicons/react/24/solid/ScissorsIcon\";\nimport { default as ServerStackIconFilled } from \"@heroicons/react/24/solid/ServerStackIcon\";\nimport { default as ServerIconFilled } from \"@heroicons/react/24/solid/ServerIcon\";\nimport { default as ShareIconFilled } from \"@heroicons/react/24/solid/ShareIcon\";\nimport { default as ShieldCheckIconFilled } from \"@heroicons/react/24/solid/ShieldCheckIcon\";\nimport { default as ShieldExclamationIconFilled } from \"@heroicons/react/24/solid/ShieldExclamationIcon\";\nimport { default as ShoppingBagIconFilled } from \"@heroicons/react/24/solid/ShoppingBagIcon\";\nimport { default as ShoppingCartIconFilled } from \"@heroicons/react/24/solid/ShoppingCartIcon\";\nimport { default as SignalSlashIconFilled } from \"@heroicons/react/24/solid/SignalSlashIcon\";\nimport { default as SignalIconFilled } from \"@heroicons/react/24/solid/SignalIcon\";\nimport { default as SparklesIconFilled } from \"@heroicons/react/24/solid/SparklesIcon\";\nimport { default as SpeakerWaveIconFilled } from \"@heroicons/react/24/solid/SpeakerWaveIcon\";\nimport { default as SpeakerXMarkIconFilled } from \"@heroicons/react/24/solid/SpeakerXMarkIcon\";\nimport { default as Square2StackIconFilled } from \"@heroicons/react/24/solid/Square2StackIcon\";\nimport { default as Square3Stack3DIconFilled } from \"@heroicons/react/24/solid/Square3Stack3DIcon\";\nimport { default as Squares2X2IconFilled } from \"@heroicons/react/24/solid/Squares2X2Icon\";\nimport { default as SquaresPlusIconFilled } from \"@heroicons/react/24/solid/SquaresPlusIcon\";\nimport { default as StarIconFilled } from \"@heroicons/react/24/solid/StarIcon\";\nimport { default as StopCircleIconFilled } from \"@heroicons/react/24/solid/StopCircleIcon\";\nimport { default as StopIconFilled } from \"@heroicons/react/24/solid/StopIcon\";\nimport { default as SunIconFilled } from \"@heroicons/react/24/solid/SunIcon\";\nimport { default as SwatchIconFilled } from \"@heroicons/react/24/solid/SwatchIcon\";\nimport { default as TableCellsIconFilled } from \"@heroicons/react/24/solid/TableCellsIcon\";\nimport { default as TagIconFilled } from \"@heroicons/react/24/solid/TagIcon\";\nimport { default as TicketIconFilled } from \"@heroicons/react/24/solid/TicketIcon\";\nimport { default as TrashIconFilled } from \"@heroicons/react/24/solid/TrashIcon\";\nimport { default as TrophyIconFilled } from \"@heroicons/react/24/solid/TrophyIcon\";\nimport { default as TruckIconFilled } from \"@heroicons/react/24/solid/TruckIcon\";\nimport { default as TvIconFilled } from \"@heroicons/react/24/solid/TvIcon\";\nimport { default as UserCircleIconFilled } from \"@heroicons/react/24/solid/UserCircleIcon\";\nimport { default as UserGroupIconFilled } from \"@heroicons/react/24/solid/UserGroupIcon\";\nimport { default as UserMinusIconFilled } from \"@heroicons/react/24/solid/UserMinusIcon\";\nimport { default as UserPlusIconFilled } from \"@heroicons/react/24/solid/UserPlusIcon\";\nimport { default as UserIconFilled } from \"@heroicons/react/24/solid/UserIcon\";\nimport { default as UsersIconFilled } from \"@heroicons/react/24/solid/UsersIcon\";\nimport { default as VariableIconFilled } from \"@heroicons/react/24/solid/VariableIcon\";\nimport { default as VideoCameraSlashIconFilled } from \"@heroicons/react/24/solid/VideoCameraSlashIcon\";\nimport { default as VideoCameraIconFilled } from \"@heroicons/react/24/solid/VideoCameraIcon\";\nimport { default as ViewColumnsIconFilled } from \"@heroicons/react/24/solid/ViewColumnsIcon\";\nimport { default as ViewfinderCircleIconFilled } from \"@heroicons/react/24/solid/ViewfinderCircleIcon\";\nimport { default as WalletIconFilled } from \"@heroicons/react/24/solid/WalletIcon\";\nimport { default as WifiIconFilled } from \"@heroicons/react/24/solid/WifiIcon\";\nimport { default as WindowIconFilled } from \"@heroicons/react/24/solid/WindowIcon\";\nimport { default as WrenchScrewdriverIconFilled } from \"@heroicons/react/24/solid/WrenchScrewdriverIcon\";\nimport { default as WrenchIconFilled } from \"@heroicons/react/24/solid/WrenchIcon\";\nimport { default as XCircleIconFilled } from \"@heroicons/react/24/solid/XCircleIcon\";\nimport { default as XMarkIconFilled } from \"@heroicons/react/24/solid/XMarkIcon\";\nconst UIIconMap = {\n line: {\n AcademicCap: AcademicCapIconLine,\n AdjustmentsHorizontal: AdjustmentsHorizontalIconLine,\n AdjustmentsVertical: AdjustmentsVerticalIconLine,\n ArchiveBoxArrowDown: ArchiveBoxArrowDownIconLine,\n ArchiveBoxXMark: ArchiveBoxXMarkIconLine,\n ArchiveBox: ArchiveBoxIconLine,\n ArrowDownCircle: ArrowDownCircleIconLine,\n ArrowDownLeft: ArrowDownLeftIconLine,\n ArrowDownOnSquareStack: ArrowDownOnSquareStackIconLine,\n ArrowDownOnSquare: ArrowDownOnSquareIconLine,\n ArrowDownRight: ArrowDownRightIconLine,\n ArrowDownTray: ArrowDownTrayIconLine,\n ArrowDown: ArrowDownIconLine,\n ArrowLeftCircle: ArrowLeftCircleIconLine,\n ArrowLeftOnRectangle: ArrowLeftOnRectangleIconLine,\n ArrowLeft: ArrowLeftIconLine,\n ArrowLongDown: ArrowLongDownIconLine,\n ArrowLongLeft: ArrowLongLeftIconLine,\n ArrowLongRight: ArrowLongRightIconLine,\n ArrowLongUp: ArrowLongUpIconLine,\n ArrowPathRoundedSquare: ArrowPathRoundedSquareIconLine,\n ArrowPath: ArrowPathIconLine,\n ArrowRightCircle: ArrowRightCircleIconLine,\n ArrowRightOnRectangle: ArrowRightOnRectangleIconLine,\n ArrowRight: ArrowRightIconLine,\n ArrowSmallDown: ArrowSmallDownIconLine,\n ArrowSmallLeft: ArrowSmallLeftIconLine,\n ArrowSmallRight: ArrowSmallRightIconLine,\n ArrowSmallUp: ArrowSmallUpIconLine,\n ArrowTopRightOnSquare: ArrowTopRightOnSquareIconLine,\n ArrowTrendingDown: ArrowTrendingDownIconLine,\n ArrowTrendingUp: ArrowTrendingUpIconLine,\n ArrowUpCircle: ArrowUpCircleIconLine,\n ArrowUpLeft: ArrowUpLeftIconLine,\n ArrowUpOnSquareStack: ArrowUpOnSquareStackIconLine,\n ArrowUpOnSquare: ArrowUpOnSquareIconLine,\n ArrowUpRight: ArrowUpRightIconLine,\n ArrowUpTray: ArrowUpTrayIconLine,\n ArrowUp: ArrowUpIconLine,\n ArrowUturnDown: ArrowUturnDownIconLine,\n ArrowUturnLeft: ArrowUturnLeftIconLine,\n ArrowUturnRight: ArrowUturnRightIconLine,\n ArrowUturnUp: ArrowUturnUpIconLine,\n ArrowsPointingIn: ArrowsPointingInIconLine,\n ArrowsPointingOut: ArrowsPointingOutIconLine,\n ArrowsRightLeft: ArrowsRightLeftIconLine,\n ArrowsUpDown: ArrowsUpDownIconLine,\n AtSymbol: AtSymbolIconLine,\n Backspace: BackspaceIconLine,\n Backward: BackwardIconLine,\n Banknotes: BanknotesIconLine,\n Bars2: Bars2IconLine,\n Bars3BottomLeft: Bars3BottomLeftIconLine,\n Bars3BottomRight: Bars3BottomRightIconLine,\n Bars3CenterLeft: Bars3CenterLeftIconLine,\n Bars3: Bars3IconLine,\n Bars4: Bars4IconLine,\n BarsArrowDown: BarsArrowDownIconLine,\n BarsArrowUp: BarsArrowUpIconLine,\n Battery0: Battery0IconLine,\n Battery100: Battery100IconLine,\n Battery50: Battery50IconLine,\n Beaker: BeakerIconLine,\n BellAlert: BellAlertIconLine,\n BellSlash: BellSlashIconLine,\n BellSnooze: BellSnoozeIconLine,\n Bell: BellIconLine,\n BoltSlash: BoltSlashIconLine,\n Bolt: BoltIconLine,\n BookOpen: BookOpenIconLine,\n BookmarkSlash: BookmarkSlashIconLine,\n BookmarkSquare: BookmarkSquareIconLine,\n Bookmark: BookmarkIconLine,\n Briefcase: BriefcaseIconLine,\n BugAnt: BugAntIconLine,\n BuildingLibrary: BuildingLibraryIconLine,\n BuildingOffice2: BuildingOffice2IconLine,\n BuildingOffice: BuildingOfficeIconLine,\n BuildingStorefront: BuildingStorefrontIconLine,\n Cake: CakeIconLine,\n Calculator: CalculatorIconLine,\n CalendarDays: CalendarDaysIconLine,\n Calendar: CalendarIconLine,\n Camera: CameraIconLine,\n ChartBarSquare: ChartBarSquareIconLine,\n ChartBar: ChartBarIconLine,\n ChartPie: ChartPieIconLine,\n ChatBubbleBottomCenterText: ChatBubbleBottomCenterTextIconLine,\n ChatBubbleBottomCenter: ChatBubbleBottomCenterIconLine,\n ChatBubbleLeftEllipsis: ChatBubbleLeftEllipsisIconLine,\n ChatBubbleLeftRight: ChatBubbleLeftRightIconLine,\n ChatBubbleLeft: ChatBubbleLeftIconLine,\n ChatBubbleOvalLeftEllipsis: ChatBubbleOvalLeftEllipsisIconLine,\n ChatBubbleOvalLeft: ChatBubbleOvalLeftIconLine,\n CheckBadge: CheckBadgeIconLine,\n CheckCircle: CheckCircleIconLine,\n Check: CheckIconLine,\n ChevronDoubleDown: ChevronDoubleDownIconLine,\n ChevronDoubleLeft: ChevronDoubleLeftIconLine,\n ChevronDoubleRight: ChevronDoubleRightIconLine,\n ChevronDoubleUp: ChevronDoubleUpIconLine,\n ChevronDown: ChevronDownIconLine,\n ChevronLeft: ChevronLeftIconLine,\n ChevronRight: ChevronRightIconLine,\n ChevronUpDown: ChevronUpDownIconLine,\n ChevronUp: ChevronUpIconLine,\n CircleStack: CircleStackIconLine,\n ClipboardDocumentCheck: ClipboardDocumentCheckIconLine,\n ClipboardDocumentList: ClipboardDocumentListIconLine,\n ClipboardDocument: ClipboardDocumentIconLine,\n Clipboard: ClipboardIconLine,\n Clock: ClockIconLine,\n CloudArrowDown: CloudArrowDownIconLine,\n CloudArrowUp: CloudArrowUpIconLine,\n Cloud: CloudIconLine,\n CodeBracketSquare: CodeBracketSquareIconLine,\n CodeBracket: CodeBracketIconLine,\n Cog6Tooth: Cog6ToothIconLine,\n Cog8Tooth: Cog8ToothIconLine,\n Cog: CogIconLine,\n CommandLine: CommandLineIconLine,\n ComputerDesktop: ComputerDesktopIconLine,\n CpuChip: CpuChipIconLine,\n CreditCard: CreditCardIconLine,\n CubeTransparent: CubeTransparentIconLine,\n Cube: CubeIconLine,\n CurrencyBangladeshi: CurrencyBangladeshiIconLine,\n CurrencyDollar: CurrencyDollarIconLine,\n CurrencyEuro: CurrencyEuroIconLine,\n CurrencyPound: CurrencyPoundIconLine,\n CurrencyRupee: CurrencyRupeeIconLine,\n CurrencyYen: CurrencyYenIconLine,\n CursorArrowRays: CursorArrowRaysIconLine,\n CursorArrowRipple: CursorArrowRippleIconLine,\n DevicePhoneMobile: DevicePhoneMobileIconLine,\n DeviceTablet: DeviceTabletIconLine,\n DocumentArrowDown: DocumentArrowDownIconLine,\n DocumentArrowUp: DocumentArrowUpIconLine,\n DocumentChartBar: DocumentChartBarIconLine,\n DocumentCheck: DocumentCheckIconLine,\n DocumentDuplicate: DocumentDuplicateIconLine,\n DocumentMagnifyingGlass: DocumentMagnifyingGlassIconLine,\n DocumentMinus: DocumentMinusIconLine,\n DocumentPlus: DocumentPlusIconLine,\n DocumentText: DocumentTextIconLine,\n Document: DocumentIconLine,\n EllipsisHorizontalCircle: EllipsisHorizontalCircleIconLine,\n EllipsisHorizontal: EllipsisHorizontalIconLine,\n EllipsisVertical: EllipsisVerticalIconLine,\n EnvelopeOpen: EnvelopeOpenIconLine,\n Envelope: EnvelopeIconLine,\n ExclamationCircle: ExclamationCircleIconLine,\n ExclamationTriangle: ExclamationTriangleIconLine,\n EyeDropper: EyeDropperIconLine,\n EyeSlash: EyeSlashIconLine,\n Eye: EyeIconLine,\n FaceFrown: FaceFrownIconLine,\n FaceSmile: FaceSmileIconLine,\n Film: FilmIconLine,\n FingerPrint: FingerPrintIconLine,\n Fire: FireIconLine,\n Flag: FlagIconLine,\n FolderArrowDown: FolderArrowDownIconLine,\n FolderMinus: FolderMinusIconLine,\n FolderOpen: FolderOpenIconLine,\n FolderPlus: FolderPlusIconLine,\n Folder: FolderIconLine,\n Forward: ForwardIconLine,\n Funnel: FunnelIconLine,\n Gif: GifIconLine,\n GiftTop: GiftTopIconLine,\n Gift: GiftIconLine,\n GlobeAlt: GlobeAltIconLine,\n GlobeAmericas: GlobeAmericasIconLine,\n GlobeAsiaAustralia: GlobeAsiaAustraliaIconLine,\n GlobeEuropeAfrica: GlobeEuropeAfricaIconLine,\n HandRaised: HandRaisedIconLine,\n HandThumbDown: HandThumbDownIconLine,\n HandThumbUp: HandThumbUpIconLine,\n Hashtag: HashtagIconLine,\n Heart: HeartIconLine,\n HomeModern: HomeModernIconLine,\n Home: HomeIconLine,\n Identification: IdentificationIconLine,\n InboxArrowDown: InboxArrowDownIconLine,\n InboxStack: InboxStackIconLine,\n Inbox: InboxIconLine,\n InformationCircle: InformationCircleIconLine,\n Key: KeyIconLine,\n Language: LanguageIconLine,\n Lifebuoy: LifebuoyIconLine,\n LightBulb: LightBulbIconLine,\n Link: LinkIconLine,\n ListBullet: ListBulletIconLine,\n LockClosed: LockClosedIconLine,\n LockOpen: LockOpenIconLine,\n MagnifyingGlassCircle: MagnifyingGlassCircleIconLine,\n MagnifyingGlassMinus: MagnifyingGlassMinusIconLine,\n MagnifyingGlassPlus: MagnifyingGlassPlusIconLine,\n MagnifyingGlass: MagnifyingGlassIconLine,\n MapPin: MapPinIconLine,\n Map: MapIconLine,\n Megaphone: MegaphoneIconLine,\n Microphone: MicrophoneIconLine,\n MinusCircle: MinusCircleIconLine,\n MinusSmall: MinusSmallIconLine,\n Minus: MinusIconLine,\n Moon: MoonIconLine,\n MusicalNote: MusicalNoteIconLine,\n Newspaper: NewspaperIconLine,\n NoSymbol: NoSymbolIconLine,\n PaintBrush: PaintBrushIconLine,\n PaperAirplane: PaperAirplaneIconLine,\n PaperClip: PaperClipIconLine,\n PauseCircle: PauseCircleIconLine,\n Pause: PauseIconLine,\n PencilSquare: PencilSquareIconLine,\n Pencil: PencilIconLine,\n PhoneArrowDownLeft: PhoneArrowDownLeftIconLine,\n PhoneArrowUpRight: PhoneArrowUpRightIconLine,\n PhoneXMark: PhoneXMarkIconLine,\n Phone: PhoneIconLine,\n Photo: PhotoIconLine,\n PlayCircle: PlayCircleIconLine,\n PlayPause: PlayPauseIconLine,\n Play: PlayIconLine,\n PlusCircle: PlusCircleIconLine,\n PlusSmall: PlusSmallIconLine,\n Plus: PlusIconLine,\n Power: PowerIconLine,\n PresentationChartBar: PresentationChartBarIconLine,\n PresentationChartLine: PresentationChartLineIconLine,\n Printer: PrinterIconLine,\n PuzzlePiece: PuzzlePieceIconLine,\n QrCode: QrCodeIconLine,\n QuestionMarkCircle: QuestionMarkCircleIconLine,\n QueueList: QueueListIconLine,\n Radio: RadioIconLine,\n ReceiptPercent: ReceiptPercentIconLine,\n ReceiptRefund: ReceiptRefundIconLine,\n RectangleGroup: RectangleGroupIconLine,\n RectangleStack: RectangleStackIconLine,\n RocketLaunch: RocketLaunchIconLine,\n Rss: RssIconLine,\n Scale: ScaleIconLine,\n Scissors: ScissorsIconLine,\n ServerStack: ServerStackIconLine,\n Server: ServerIconLine,\n Share: ShareIconLine,\n ShieldCheck: ShieldCheckIconLine,\n ShieldExclamation: ShieldExclamationIconLine,\n ShoppingBag: ShoppingBagIconLine,\n ShoppingCart: ShoppingCartIconLine,\n SignalSlash: SignalSlashIconLine,\n Signal: SignalIconLine,\n Sparkles: SparklesIconLine,\n SpeakerWave: SpeakerWaveIconLine,\n SpeakerXMark: SpeakerXMarkIconLine,\n Square2Stack: Square2StackIconLine,\n Square3Stack3D: Square3Stack3DIconLine,\n Squares2X2: Squares2X2IconLine,\n SquaresPlus: SquaresPlusIconLine,\n Star: StarIconLine,\n StopCircle: StopCircleIconLine,\n Stop: StopIconLine,\n Sun: SunIconLine,\n Swatch: SwatchIconLine,\n TableCells: TableCellsIconLine,\n Tag: TagIconLine,\n Ticket: TicketIconLine,\n Trash: TrashIconLine,\n Trophy: TrophyIconLine,\n Truck: TruckIconLine,\n Tv: TvIconLine,\n UserCircle: UserCircleIconLine,\n UserGroup: UserGroupIconLine,\n UserMinus: UserMinusIconLine,\n UserPlus: UserPlusIconLine,\n User: UserIconLine,\n Users: UsersIconLine,\n Variable: VariableIconLine,\n VideoCameraSlash: VideoCameraSlashIconLine,\n VideoCamera: VideoCameraIconLine,\n ViewColumns: ViewColumnsIconLine,\n ViewfinderCircle: ViewfinderCircleIconLine,\n Wallet: WalletIconLine,\n Wifi: WifiIconLine,\n Window: WindowIconLine,\n WrenchScrewdriver: WrenchScrewdriverIconLine,\n Wrench: WrenchIconLine,\n XCircle: XCircleIconLine,\n XMark: XMarkIconLine,\n },\n filled: {\n AcademicCap: AcademicCapIconFilled,\n AdjustmentsHorizontal: AdjustmentsHorizontalIconFilled,\n AdjustmentsVertical: AdjustmentsVerticalIconFilled,\n ArchiveBoxArrowDown: ArchiveBoxArrowDownIconFilled,\n ArchiveBoxXMark: ArchiveBoxXMarkIconFilled,\n ArchiveBox: ArchiveBoxIconFilled,\n ArrowDownCircle: ArrowDownCircleIconFilled,\n ArrowDownLeft: ArrowDownLeftIconFilled,\n ArrowDownOnSquareStack: ArrowDownOnSquareStackIconFilled,\n ArrowDownOnSquare: ArrowDownOnSquareIconFilled,\n ArrowDownRight: ArrowDownRightIconFilled,\n ArrowDownTray: ArrowDownTrayIconFilled,\n ArrowDown: ArrowDownIconFilled,\n ArrowLeftCircle: ArrowLeftCircleIconFilled,\n ArrowLeftOnRectangle: ArrowLeftOnRectangleIconFilled,\n ArrowLeft: ArrowLeftIconFilled,\n ArrowLongDown: ArrowLongDownIconFilled,\n ArrowLongLeft: ArrowLongLeftIconFilled,\n ArrowLongRight: ArrowLongRightIconFilled,\n ArrowLongUp: ArrowLongUpIconFilled,\n ArrowPathRoundedSquare: ArrowPathRoundedSquareIconFilled,\n ArrowPath: ArrowPathIconFilled,\n ArrowRightCircle: ArrowRightCircleIconFilled,\n ArrowRightOnRectangle: ArrowRightOnRectangleIconFilled,\n ArrowRight: ArrowRightIconFilled,\n ArrowSmallDown: ArrowSmallDownIconFilled,\n ArrowSmallLeft: ArrowSmallLeftIconFilled,\n ArrowSmallRight: ArrowSmallRightIconFilled,\n ArrowSmallUp: ArrowSmallUpIconFilled,\n ArrowTopRightOnSquare: ArrowTopRightOnSquareIconFilled,\n ArrowTrendingDown: ArrowTrendingDownIconFilled,\n ArrowTrendingUp: ArrowTrendingUpIconFilled,\n ArrowUpCircle: ArrowUpCircleIconFilled,\n ArrowUpLeft: ArrowUpLeftIconFilled,\n ArrowUpOnSquareStack: ArrowUpOnSquareStackIconFilled,\n ArrowUpOnSquare: ArrowUpOnSquareIconFilled,\n ArrowUpRight: ArrowUpRightIconFilled,\n ArrowUpTray: ArrowUpTrayIconFilled,\n ArrowUp: ArrowUpIconFilled,\n ArrowUturnDown: ArrowUturnDownIconFilled,\n ArrowUturnLeft: ArrowUturnLeftIconFilled,\n ArrowUturnRight: ArrowUturnRightIconFilled,\n ArrowUturnUp: ArrowUturnUpIconFilled,\n ArrowsPointingIn: ArrowsPointingInIconFilled,\n ArrowsPointingOut: ArrowsPointingOutIconFilled,\n ArrowsRightLeft: ArrowsRightLeftIconFilled,\n ArrowsUpDown: ArrowsUpDownIconFilled,\n AtSymbol: AtSymbolIconFilled,\n Backspace: BackspaceIconFilled,\n Backward: BackwardIconFilled,\n Banknotes: BanknotesIconFilled,\n Bars2: Bars2IconFilled,\n Bars3BottomLeft: Bars3BottomLeftIconFilled,\n Bars3BottomRight: Bars3BottomRightIconFilled,\n Bars3CenterLeft: Bars3CenterLeftIconFilled,\n Bars3: Bars3IconFilled,\n Bars4: Bars4IconFilled,\n BarsArrowDown: BarsArrowDownIconFilled,\n BarsArrowUp: BarsArrowUpIconFilled,\n Battery0: Battery0IconFilled,\n Battery100: Battery100IconFilled,\n Battery50: Battery50IconFilled,\n Beaker: BeakerIconFilled,\n BellAlert: BellAlertIconFilled,\n BellSlash: BellSlashIconFilled,\n BellSnooze: BellSnoozeIconFilled,\n Bell: BellIconFilled,\n BoltSlash: BoltSlashIconFilled,\n Bolt: BoltIconFilled,\n BookOpen: BookOpenIconFilled,\n BookmarkSlash: BookmarkSlashIconFilled,\n BookmarkSquare: BookmarkSquareIconFilled,\n Bookmark: BookmarkIconFilled,\n Briefcase: BriefcaseIconFilled,\n BugAnt: BugAntIconFilled,\n BuildingLibrary: BuildingLibraryIconFilled,\n BuildingOffice2: BuildingOffice2IconFilled,\n BuildingOffice: BuildingOfficeIconFilled,\n BuildingStorefront: BuildingStorefrontIconFilled,\n Cake: CakeIconFilled,\n Calculator: CalculatorIconFilled,\n CalendarDays: CalendarDaysIconFilled,\n Calendar: CalendarIconFilled,\n Camera: CameraIconFilled,\n ChartBarSquare: ChartBarSquareIconFilled,\n ChartBar: ChartBarIconFilled,\n ChartPie: ChartPieIconFilled,\n ChatBubbleBottomCenterText: ChatBubbleBottomCenterTextIconFilled,\n ChatBubbleBottomCenter: ChatBubbleBottomCenterIconFilled,\n ChatBubbleLeftEllipsis: ChatBubbleLeftEllipsisIconFilled,\n ChatBubbleLeftRight: ChatBubbleLeftRightIconFilled,\n ChatBubbleLeft: ChatBubbleLeftIconFilled,\n ChatBubbleOvalLeftEllipsis: ChatBubbleOvalLeftEllipsisIconFilled,\n ChatBubbleOvalLeft: ChatBubbleOvalLeftIconFilled,\n CheckBadge: CheckBadgeIconFilled,\n CheckCircle: CheckCircleIconFilled,\n Check: CheckIconFilled,\n ChevronDoubleDown: ChevronDoubleDownIconFilled,\n ChevronDoubleLeft: ChevronDoubleLeftIconFilled,\n ChevronDoubleRight: ChevronDoubleRightIconFilled,\n ChevronDoubleUp: ChevronDoubleUpIconFilled,\n ChevronDown: ChevronDownIconFilled,\n ChevronLeft: ChevronLeftIconFilled,\n ChevronRight: ChevronRightIconFilled,\n ChevronUpDown: ChevronUpDownIconFilled,\n ChevronUp: ChevronUpIconFilled,\n CircleStack: CircleStackIconFilled,\n ClipboardDocumentCheck: ClipboardDocumentCheckIconFilled,\n ClipboardDocumentList: ClipboardDocumentListIconFilled,\n ClipboardDocument: ClipboardDocumentIconFilled,\n Clipboard: ClipboardIconFilled,\n Clock: ClockIconFilled,\n CloudArrowDown: CloudArrowDownIconFilled,\n CloudArrowUp: CloudArrowUpIconFilled,\n Cloud: CloudIconFilled,\n CodeBracketSquare: CodeBracketSquareIconFilled,\n CodeBracket: CodeBracketIconFilled,\n Cog6Tooth: Cog6ToothIconFilled,\n Cog8Tooth: Cog8ToothIconFilled,\n Cog: CogIconFilled,\n CommandLine: CommandLineIconFilled,\n ComputerDesktop: ComputerDesktopIconFilled,\n CpuChip: CpuChipIconFilled,\n CreditCard: CreditCardIconFilled,\n CubeTransparent: CubeTransparentIconFilled,\n Cube: CubeIconFilled,\n CurrencyBangladeshi: CurrencyBangladeshiIconFilled,\n CurrencyDollar: CurrencyDollarIconFilled,\n CurrencyEuro: CurrencyEuroIconFilled,\n CurrencyPound: CurrencyPoundIconFilled,\n CurrencyRupee: CurrencyRupeeIconFilled,\n CurrencyYen: CurrencyYenIconFilled,\n CursorArrowRays: CursorArrowRaysIconFilled,\n CursorArrowRipple: CursorArrowRippleIconFilled,\n DevicePhoneMobile: DevicePhoneMobileIconFilled,\n DeviceTablet: DeviceTabletIconFilled,\n DocumentArrowDown: DocumentArrowDownIconFilled,\n DocumentArrowUp: DocumentArrowUpIconFilled,\n DocumentChartBar: DocumentChartBarIconFilled,\n DocumentCheck: DocumentCheckIconFilled,\n DocumentDuplicate: DocumentDuplicateIconFilled,\n DocumentMagnifyingGlass: DocumentMagnifyingGlassIconFilled,\n DocumentMinus: DocumentMinusIconFilled,\n DocumentPlus: DocumentPlusIconFilled,\n DocumentText: DocumentTextIconFilled,\n Document: DocumentIconFilled,\n EllipsisHorizontalCircle: EllipsisHorizontalCircleIconFilled,\n EllipsisHorizontal: EllipsisHorizontalIconFilled,\n EllipsisVertical: EllipsisVerticalIconFilled,\n EnvelopeOpen: EnvelopeOpenIconFilled,\n Envelope: EnvelopeIconFilled,\n ExclamationCircle: ExclamationCircleIconFilled,\n ExclamationTriangle: ExclamationTriangleIconFilled,\n EyeDropper: EyeDropperIconFilled,\n EyeSlash: EyeSlashIconFilled,\n Eye: EyeIconFilled,\n FaceFrown: FaceFrownIconFilled,\n FaceSmile: FaceSmileIconFilled,\n Film: FilmIconFilled,\n FingerPrint: FingerPrintIconFilled,\n Fire: FireIconFilled,\n Flag: FlagIconFilled,\n FolderArrowDown: FolderArrowDownIconFilled,\n FolderMinus: FolderMinusIconFilled,\n FolderOpen: FolderOpenIconFilled,\n FolderPlus: FolderPlusIconFilled,\n Folder: FolderIconFilled,\n Forward: ForwardIconFilled,\n Funnel: FunnelIconFilled,\n Gif: GifIconFilled,\n GiftTop: GiftTopIconFilled,\n Gift: GiftIconFilled,\n GlobeAlt: GlobeAltIconFilled,\n GlobeAmericas: GlobeAmericasIconFilled,\n GlobeAsiaAustralia: GlobeAsiaAustraliaIconFilled,\n GlobeEuropeAfrica: GlobeEuropeAfricaIconFilled,\n HandRaised: HandRaisedIconFilled,\n HandThumbDown: HandThumbDownIconFilled,\n HandThumbUp: HandThumbUpIconFilled,\n Hashtag: HashtagIconFilled,\n Heart: HeartIconFilled,\n HomeModern: HomeModernIconFilled,\n Home: HomeIconFilled,\n Identification: IdentificationIconFilled,\n InboxArrowDown: InboxArrowDownIconFilled,\n InboxStack: InboxStackIconFilled,\n Inbox: InboxIconFilled,\n InformationCircle: InformationCircleIconFilled,\n Key: KeyIconFilled,\n Language: LanguageIconFilled,\n Lifebuoy: LifebuoyIconFilled,\n LightBulb: LightBulbIconFilled,\n Link: LinkIconFilled,\n ListBullet: ListBulletIconFilled,\n LockClosed: LockClosedIconFilled,\n LockOpen: LockOpenIconFilled,\n MagnifyingGlassCircle: MagnifyingGlassCircleIconFilled,\n MagnifyingGlassMinus: MagnifyingGlassMinusIconFilled,\n MagnifyingGlassPlus: MagnifyingGlassPlusIconFilled,\n MagnifyingGlass: MagnifyingGlassIconFilled,\n MapPin: MapPinIconFilled,\n Map: MapIconFilled,\n Megaphone: MegaphoneIconFilled,\n Microphone: MicrophoneIconFilled,\n MinusCircle: MinusCircleIconFilled,\n MinusSmall: MinusSmallIconFilled,\n Minus: MinusIconFilled,\n Moon: MoonIconFilled,\n MusicalNote: MusicalNoteIconFilled,\n Newspaper: NewspaperIconFilled,\n NoSymbol: NoSymbolIconFilled,\n PaintBrush: PaintBrushIconFilled,\n PaperAirplane: PaperAirplaneIconFilled,\n PaperClip: PaperClipIconFilled,\n PauseCircle: PauseCircleIconFilled,\n Pause: PauseIconFilled,\n PencilSquare: PencilSquareIconFilled,\n Pencil: PencilIconFilled,\n PhoneArrowDownLeft: PhoneArrowDownLeftIconFilled,\n PhoneArrowUpRight: PhoneArrowUpRightIconFilled,\n PhoneXMark: PhoneXMarkIconFilled,\n Phone: PhoneIconFilled,\n Photo: PhotoIconFilled,\n PlayCircle: PlayCircleIconFilled,\n PlayPause: PlayPauseIconFilled,\n Play: PlayIconFilled,\n PlusCircle: PlusCircleIconFilled,\n PlusSmall: PlusSmallIconFilled,\n Plus: PlusIconFilled,\n Power: PowerIconFilled,\n PresentationChartBar: PresentationChartBarIconFilled,\n PresentationChartLine: PresentationChartLineIconFilled,\n Printer: PrinterIconFilled,\n PuzzlePiece: PuzzlePieceIconFilled,\n QrCode: QrCodeIconFilled,\n QuestionMarkCircle: QuestionMarkCircleIconFilled,\n QueueList: QueueListIconFilled,\n Radio: RadioIconFilled,\n ReceiptPercent: ReceiptPercentIconFilled,\n ReceiptRefund: ReceiptRefundIconFilled,\n RectangleGroup: RectangleGroupIconFilled,\n RectangleStack: RectangleStackIconFilled,\n RocketLaunch: RocketLaunchIconFilled,\n Rss: RssIconFilled,\n Scale: ScaleIconFilled,\n Scissors: ScissorsIconFilled,\n ServerStack: ServerStackIconFilled,\n Server: ServerIconFilled,\n Share: ShareIconFilled,\n ShieldCheck: ShieldCheckIconFilled,\n ShieldExclamation: ShieldExclamationIconFilled,\n ShoppingBag: ShoppingBagIconFilled,\n ShoppingCart: ShoppingCartIconFilled,\n SignalSlash: SignalSlashIconFilled,\n Signal: SignalIconFilled,\n Sparkles: SparklesIconFilled,\n SpeakerWave: SpeakerWaveIconFilled,\n SpeakerXMark: SpeakerXMarkIconFilled,\n Square2Stack: Square2StackIconFilled,\n Square3Stack3D: Square3Stack3DIconFilled,\n Squares2X2: Squares2X2IconFilled,\n SquaresPlus: SquaresPlusIconFilled,\n Star: StarIconFilled,\n StopCircle: StopCircleIconFilled,\n Stop: StopIconFilled,\n Sun: SunIconFilled,\n Swatch: SwatchIconFilled,\n TableCells: TableCellsIconFilled,\n Tag: TagIconFilled,\n Ticket: TicketIconFilled,\n Trash: TrashIconFilled,\n Trophy: TrophyIconFilled,\n Truck: TruckIconFilled,\n Tv: TvIconFilled,\n UserCircle: UserCircleIconFilled,\n UserGroup: UserGroupIconFilled,\n UserMinus: UserMinusIconFilled,\n UserPlus: UserPlusIconFilled,\n User: UserIconFilled,\n Users: UsersIconFilled,\n Variable: VariableIconFilled,\n VideoCameraSlash: VideoCameraSlashIconFilled,\n VideoCamera: VideoCameraIconFilled,\n ViewColumns: ViewColumnsIconFilled,\n ViewfinderCircle: ViewfinderCircleIconFilled,\n Wallet: WalletIconFilled,\n Wifi: WifiIconFilled,\n Window: WindowIconFilled,\n WrenchScrewdriver: WrenchScrewdriverIconFilled,\n Wrench: WrenchIconFilled,\n XCircle: XCircleIconFilled,\n XMark: XMarkIconFilled,\n },\n};\nexport const UIIcon = (_a) => {\n var { name, variant = \"line\" } = _a,\n props = __rest(_a, [\"name\", \"variant\"]);\n const Icon = UIIconMap[variant][name];\n return React.createElement(\n Icon,\n Object.assign({}, props, {\n className: `h-4 w-4 flex-shrink-0 stroke-[2.25] ${props.className}`,\n })\n );\n};\n//# sourceMappingURL=UIIcon.js.map\n","import React from \"react\";\nexport const UINavbarProfileDivider = () => (React.createElement(\"div\", { className: \"py-1 -mx-2\" },\n React.createElement(\"div\", { className: \"\", \"aria-hidden\": \"true\" })));\n//# sourceMappingURL=UINavbarProfileDivider.js.map","import React, { useContext } from \"react\";\nimport { UIContext } from \"../index\";\nimport { Disclosure, Menu } from \"@headlessui/react\";\nimport { UINavbarProfileItem } from \"./UINavbarProfileItem\";\nimport { UINavbarProfileDivider } from \"./UINavbarProfileDivider\";\nimport { UINavbarProfileShortcut } from \"./UINavbarProfileShortcut\";\nimport { UINavbarProfileThemeSelect } from \"./UINavbarProfileThemeSelect\";\nconst DEFAULT_USER = {\n username: \"Guest User\",\n email: \"guest@alpaca.markets\",\n};\nexport const UINavbarProfile = (props) => {\n const { username, email, children } = props;\n const { setIsProfileExpanded } = useContext(UIContext);\n return (React.createElement(Disclosure, { as: \"nav\", className: \"bg-transparent\" },\n React.createElement(Menu, { as: \"div\", className: \"relative flex-shrink-0\" }, ({ open }) => {\n var _a;\n setIsProfileExpanded(open);\n document\n // set the opacity of the ghost elements to 50% when the profile is expanded\n .querySelectorAll(\".ui-navbar-profile-ghost\")\n .forEach((element) => element.classList[open ? \"add\" : \"remove\"](\"opacity-25\"));\n return (React.createElement(React.Fragment, null,\n React.createElement(Menu.Button, { className: \"flex items-center rounded-md\", onClick: () => setIsProfileExpanded(open) },\n React.createElement(\"div\", { className: `flex items-center justify-center h-9 w-9 rounded-lg hover:shadow text-gray-900/60 border border-gray-900/30 bg-gray-200/30` },\n React.createElement(\"span\", { className: \"font-medium leading-none\" }, (_a = (username || DEFAULT_USER.username)) === null || _a === void 0 ? void 0 : _a.split(\" \").map((word) => word[0]).join(\"\").toUpperCase()))),\n React.createElement(Menu.Items, { className: \"absolute right-0 z-10 p-2 w-48 mt-3.5 origin-top-right rounded-md bg-white border border-gray-200 text-gray-900 shadow focus:outline-none dark:bg-gray-800 dark:text-gray-200\" },\n React.createElement(\"div\", { className: \"mx-2 my-1\" },\n React.createElement(\"p\", { className: \"font-semibold truncate\" }, username || DEFAULT_USER.username),\n React.createElement(\"p\", { className: \"text-gray-500 font-medium truncate\" }, email || DEFAULT_USER.email)),\n React.createElement(UINavbarProfileDivider, null),\n React.createElement(\"div\", { className: \"space-y-1\" }, children))));\n })));\n};\nexport default Object.assign(UINavbarProfile, {\n Item: UINavbarProfileItem,\n Divider: UINavbarProfileDivider,\n Shortcut: UINavbarProfileShortcut,\n ThemeSelect: UINavbarProfileThemeSelect,\n});\n//# sourceMappingURL=UINavbarProfile.js.map","import { Menu } from \"@headlessui/react\";\nimport React from \"react\";\nexport const UINavbarProfileItem = (props) => {\n const { label, href, onClick } = props;\n return (React.createElement(Menu.Item, null,\n React.createElement(\"a\", { href: href, onClick: onClick, className: \"block px-2 py-1 flex font-medium rounded-md items-center text-gray-900 hover:bg-gray-100 dark:hover:bg-gray-900 dark:text-gray-200 whitespace-nowrap\" }, label)));\n};\n//# sourceMappingURL=UINavbarProfileItem.js.map","import { Menu } from \"@headlessui/react\";\nimport React from \"react\";\nexport const UINavbarProfileShortcut = (props) => {\n const { label, keys } = props;\n return (React.createElement(Menu.Item, null,\n React.createElement(\"div\", { className: \"block px-2 py-1 flex font-medium items-center text-gray-800 whitespace-nowrap\" },\n React.createElement(\"span\", null, label),\n React.createElement(\"span\", { className: \"ml-auto flex\" }, keys.map((key, index) => (React.createElement(\"kbd\", { key: index, style: { lineHeight: 1, aspectRatio: \"1/1\" }, className: \"text-gray-800 rounded px-1.5 py-0.5 flex items-center text-xs bg-gray-100\" }, key)))))));\n};\n//# sourceMappingURL=UINavbarProfileShortcut.js.map","import { Menu } from \"@headlessui/react\";\nimport React from \"react\";\n/**\n * @name UINavbarProfileThemeSelect\n * @description The props for the UINavbarProfileThemeSelect component\n * @property {string[]} themes - The themes of the application\n * @property {string} currentTheme - The current theme of the application\n * @property {(theme: string) => void} onChange - The function to call when the theme changes\n * @example\n * console.log(theme)}\n * />\n */\nexport const UINavbarProfileThemeSelect = (props) => {\n const { themes, currentTheme, onChange } = props;\n return (React.createElement(Menu.Item, null,\n React.createElement(\"div\", { className: \"block px-2 py-1 font-medium flex items-center text-gray-700 whitespace-nowrap\" },\n React.createElement(\"span\", null, \"Theme\"),\n React.createElement(\"select\", { value: currentTheme, style: { backgroundPosition: \"right 3px bottom 0\" }, onChange: (e) => onChange(e.target.value), className: \"w-full text-gray-700 rounded px-1.5 py-0.5 text-xs ml-12 bg-gray-100 border-none focus:outline-none focus:ring-transparent\" }, themes.map((theme) => (React.createElement(\"option\", { key: theme, value: theme }, theme)))))));\n};\n//# sourceMappingURL=UINavbarProfileThemeSelect.js.map","import React, { useContext } from \"react\";\nimport { UINavbarItem } from \"./UINavbarItem\";\nimport { UINavbarSpacer } from \"./UINavbarSpacer\";\nimport { UINavbarSearch } from \"./UINavbarSearch\";\nimport { UINavbarProfile } from \"./UINavbarProfile\";\nimport { UIContext, UIIcon, UIButton } from \"../index\";\nconst UINavbar = ({ children }) => {\n const { isSidebarExpanded, setIsSidebarExpanded } = useContext(UIContext);\n return React.createElement(\n \"div\",\n {\n className: \"flex flex-1 items-center space-x-2 p-8 xs:pl-0 md:pr-8 z-5\",\n },\n !isSidebarExpanded &&\n React.createElement(\n UIButton,\n {\n className: \"justify-center aspect-square w-8\",\n onClick: () => setIsSidebarExpanded(true),\n },\n React.createElement(UIIcon, { name: \"Bars3\" })\n ),\n children\n );\n};\nexport default Object.assign(UINavbar, {\n Profile: UINavbarProfile,\n Item: UINavbarItem,\n Spacer: UINavbarSpacer,\n Search: UINavbarSearch,\n});\n//# sourceMappingURL=UINavbar.js.map\n","import React from \"react\";\nexport const UINavbarItem = ({ children }) => (React.createElement(\"div\", null, children));\n//# sourceMappingURL=UINavbarItem.js.map","import React from \"react\";\nexport const UINavbarSpacer = () => React.createElement(\"div\", { className: \"flex-1\" });\n//# sourceMappingURL=UINavbarSpacer.js.map","import React, { useState, useMemo, useEffect } from \"react\";\nimport { UIIcon } from \"./UIIcon\";\nimport { Combobox } from \"@headlessui/react\";\nimport { useKeyPress } from \"../index\";\nexport const UINavbarSearch = (props) => {\n const { placeholder = \"Search\", onSearch, shortcut } = props;\n const [query, setQuery] = useState(\"\");\n const didOpen = useKeyPress(shortcut);\n const didEscape = useKeyPress(\"Escape\");\n // get the suggestions from the onSearch function\n const suggestions = useMemo(() => onSearch(query), [query]);\n useEffect(() => {\n // get the input element\n const input = document.getElementById(\"ui-navbar-search-input\");\n // if there is no input, return\n if (!input) {\n return;\n }\n // if the user pressed the shortcut, focus the input\n if (didOpen) {\n input.focus();\n }\n // if the user pressed escape, blur the input\n else if (didEscape) {\n setQuery(\"\");\n input.blur();\n }\n }, [didEscape, didOpen]);\n return React.createElement(\n Combobox,\n {\n as: \"div\",\n className: \"w-full\",\n style: {\n maxWidth: \"300px\",\n },\n onChange: ({ href }) => !!href && window.open(href, \"_blank\"),\n },\n ({ open }) =>\n React.createElement(\n \"div\",\n { className: \"relative flex-1 rounded\" },\n React.createElement(\n \"div\",\n {\n className:\n \"absolute inset-y-0 left-0 flex items-center pl-4 text-cool-gray-600 hover:text-cool-gray-600\",\n },\n React.createElement(UIIcon, { name: \"MagnifyingGlass\" })\n ),\n React.createElement(Combobox.Input, {\n id: \"ui-navbar-search-input\",\n placeholder: placeholder,\n onChange: (event) => setQuery(event.target.value),\n className: `block hover:cursor-pointer bg-white border border-cool-gray-200 shadow-sm w-full text-cool-gray-900 text-sm placeholder:text-cool-gray-600 rounded-md py-1 pl-10 font-medium focus:border-cool-gray-100 focus:outline-none focus:ring-transparent h-10 focus:placeholder-transparent ${\n open && query.length > 0\n ? \"rounded-b-none\"\n : \"hover:opacity-50 focus:opacity-100\"\n }`,\n }),\n query.length > 0 &&\n React.createElement(\n Combobox.Options,\n {\n className:\n \"absolute max-h-60 pt-2 px-2 w-full space-y-1 pb-2 overflow-auto rounded-t-none rounded-b-md bg-cool-gray-100 border border-cool-gray-100 border-t-0 focus:outline-none\",\n },\n suggestions.length === 0 &&\n React.createElement(\n Combobox.Option,\n {\n value: \"none\",\n className: \"pl-3 pr-9 text-cool-gray-900 font-medium\",\n },\n \"No results found\"\n ),\n suggestions.map((suggestion, index) =>\n React.createElement(\n Combobox.Option,\n {\n key: index,\n value: suggestion,\n className: \"relative cursor-pointer select-none\",\n },\n ({ active }) =>\n React.createElement(\n \"div\",\n {\n className: `flex justify-between hover:bg-cool-gray-200 space-x-4 rounded px-2 py-1 text-cool-gray-900 ${\n active ? \"bg-cool-gray-200\" : \"\"\n }`,\n },\n React.createElement(\n \"span\",\n { className: \"block font-semibold whitespace-nowrap\" },\n suggestion.label\n ),\n React.createElement(\n \"span\",\n {\n className: \"text-right font-medium truncate opacity-60\",\n },\n suggestion.description\n )\n )\n )\n )\n )\n )\n );\n};\n//# sourceMappingURL=UINavbarSearch.js.map\n","import React, { useContext, useCallback } from \"react\";\nimport { useHistory } from \"react-router\";\nimport { Disclosure } from \"@headlessui/react\";\nimport { UIContext, classes } from \"../index\";\nexport const UISidebarItem = (props) => {\n var _a;\n const history = useHistory();\n // destructure the props\n const { label, icon, href, externalLink } = props;\n // destructure the UI context\n const { isMobile, isSidebarExpanded, setIsSidebarExpanded } = useContext(UIContext);\n // a function to check if the partial is present in the href\n const hasPartial = useCallback((partial) => window.location.href.includes(partial), []);\n // check if the item is active\n const active = props.active || (href && hasPartial(href));\n // filter out falsy values (for conditional rendering)\n const subItems = (_a = props.subItems) === null || _a === void 0 ? void 0 : _a.filter(Boolean);\n // check if any of the subItems is active\n const expanded = subItems === null || subItems === void 0 ? void 0 : subItems.some((item) => hasPartial(item.props.href));\n // a function to handle the click event on the item\n const onClick = useCallback(() => {\n // if href is not provided, do nothing\n if (!href) {\n return;\n }\n // if mobile, close the sidebar\n if (isMobile && isSidebarExpanded) {\n setIsSidebarExpanded(false);\n }\n // if tab is true, open the href in a new tab\n if (externalLink) {\n window.open(href, \"_blank\");\n return;\n }\n // navigate to the href\n history.push(href);\n }, [href, isMobile, isSidebarExpanded, setIsSidebarExpanded, externalLink]);\n return (React.createElement(Disclosure, { as: \"div\", defaultOpen: expanded, className: \"flex flex-col justify-center\" }, ({ open }) => (React.createElement(React.Fragment, null,\n React.createElement(Disclosure.Button, { onClick: onClick, className: classes(active ? \"bg-gray-100\" : \"\", \"min-w-full max-w-fit w-full flex items-center focus:outline-none font-medium rounded px-2 h-8 hover:opacity-50 transition-opacity duration-50 ease-in-out\") },\n React.cloneElement(icon, {\n className: \"h-5 w-5\",\n }),\n React.createElement(\"span\", { className: \"ml-2 text-base\" }, label),\n (subItems === null || subItems === void 0 ? void 0 : subItems.length) > 0 && (\n // chevron right svg\n React.createElement(\"svg\", { className: \"h-5 w-5 ml-auto transition-transform duration-200 ease-in-out\", style: {\n transform: !open ? \"rotate(270deg)\" : \"rotate(360deg)\",\n }, xmlns: \"http://www.w3.org/2000/svg\", viewBox: \"0 0 20 20\", fill: \"currentColor\", \"aria-hidden\": \"true\" },\n React.createElement(\"path\", { fillRule: \"evenodd\", d: \"M6.293 7.293a1 1 0 011.414 0L10 9.586l2.293-2.293a1 1 0 111.414 1.414l-3 3a1 1 0 01-1.414 0l-3-3a1 1 0 010-1.414z\", clipRule: \"evenodd\" })))),\n React.createElement(Disclosure.Panel, { className: \"ml-2\" }, subItems === null || subItems === void 0 ? void 0 : subItems.map((item, index) => (React.createElement(\"div\", { key: index }, item))))))));\n};\nexport default UISidebarItem;\n//# sourceMappingURL=UISidebarItem.js.map","import React from \"react\";\nexport const UISidebarSpacer = () => React.createElement(\"div\", { className: \"grow\" });\n//# sourceMappingURL=UISidebarSpacer.js.map","import React from \"react\";\nexport const UISidebarDivider = () => React.createElement(\"div\", { className: \"py-2\" });\n//# sourceMappingURL=UISidebarDivider.js.map","import React from \"react\";\nimport { useHistory } from \"react-router\";\nimport { UIIcon } from \"../index\";\nexport const UISidebarMenuItem = (props) => {\n const history = useHistory();\n const { icon, label, href, onClick } = props;\n return React.createElement(\n \"div\",\n {\n className:\n \"px-2 h-8 mx-2 flex items-center rounded hover:opacity-50 cursor-pointer transition-opacity duration-50 ease-in-out\",\n onClickCapture: () => {\n if (onClick) {\n onClick();\n } else if (href) {\n history.push(href);\n }\n },\n },\n React.createElement(UIIcon, { name: icon, className: \"h-5 w-5 mr-2\" }),\n label\n );\n};\n//# sourceMappingURL=UISidebarMenuItem.js.map\n","import React, { useRef, useState, useEffect } from \"react\";\nimport { classes } from \"../index\";\nexport const UIPage = ({ banner, title, subtitle, children, className }) => {\n const titleRef = useRef(null);\n const contentRef = useRef(null);\n const [isScrolling, setIsScrolling] = useState(false);\n const handleScroll = (e) => {\n const target = e.target;\n if (target.scrollTop > 0 && !isScrolling) {\n setIsScrolling(true);\n } else if (target.scrollTop === 0 && isScrolling) {\n setIsScrolling(false);\n }\n };\n useEffect(() => {\n const resizeObserver = new ResizeObserver(() => {\n var _a, _b;\n const titleHeight =\n (_b =\n (_a = titleRef.current) === null || _a === void 0\n ? void 0\n : _a.getBoundingClientRect().height) !== null && _b !== void 0\n ? _b\n : 0;\n const pageHeaderHeight = \"68px\";\n const pageHeight = `calc(100vh - ${pageHeaderHeight} - ${titleHeight}px)`;\n if (contentRef.current) {\n contentRef.current.style.height = pageHeight;\n }\n });\n if (titleRef.current) {\n resizeObserver.observe(titleRef.current);\n }\n return () => {\n if (titleRef.current) {\n resizeObserver.unobserve(titleRef.current);\n }\n };\n }, [titleRef]);\n return React.createElement(\n React.Fragment,\n null,\n React.createElement(\n \"div\",\n { ref: titleRef, className: \"w-full pt-6\" },\n React.createElement(\n \"div\",\n { className: \"px-6\" },\n banner &&\n React.createElement(\"div\", { className: \"mb-6 w-full\" }, banner),\n React.createElement(\n \"div\",\n { className: \"font-semibold text-2xl\" },\n title\n ),\n subtitle &&\n React.createElement(\n \"div\",\n { className: \"text-gray-500 text-md pt-1\" },\n subtitle\n )\n ),\n React.createElement(\"div\", { className: \"pb-6 mx-6\" })\n ),\n React.createElement(\n \"div\",\n {\n ref: contentRef,\n onScroll: handleScroll,\n className: \"overflow-y-scroll\",\n },\n React.createElement(\n \"div\",\n { className: classes(\"m-6\", className) },\n children\n )\n )\n );\n};\nexport default UIPage;\n//# sourceMappingURL=UIPage.js.map\n","import React, { useContext, useEffect } from \"react\";\nimport { UISidebarItem } from \"./UISidebarItem\";\nimport { UISidebarSpacer } from \"./UISidebarSpacer\";\nimport { classes, UIIcon, UISkeleton } from \"../index\";\nimport { Menu, Transition } from \"@headlessui/react\";\nimport { UISidebarDivider } from \"./UISidebarDivider\";\nimport { UIContext, UIBrandingLogo, UIButton } from \"../index\";\nimport { UISidebarMenuItem } from \"./UISidebarMenuItem\";\nconst Root = (props) => {\n const { children, appVersion, menuItems, accounts, getAccountId } = props;\n const {\n isSidebarExpanded,\n isMobile,\n isAccountExpanded,\n setIsAccountExpanded,\n setIsSidebarCollapsed,\n } = useContext(UIContext);\n const account = accounts.find(({ id }) => id === getAccountId());\n const portalTarget = document.createElement(\"div\");\n portalTarget.classList.add(\"dropdown-portal\");\n document.body.appendChild(portalTarget);\n React.useEffect(() => {\n return () => {\n document.body.removeChild(portalTarget);\n };\n }, []);\n return React.createElement(\n Transition,\n {\n show: isSidebarExpanded,\n enter: \"transition-all duration-300 ease\",\n enterFrom: \"-ml-56\",\n enterTo: \"ml-0\",\n leave: \"transition-all duration-300 ease\",\n leaveFrom: \"ml-0\",\n leaveTo: isMobile ? `-ml-[${window.innerWidth}px]` : \"-ml-56\",\n className: classes(isMobile ? \"fixed inset-0\" : \"\", \"z-50\"),\n },\n React.createElement(\n \"div\",\n {\n className: classes(\n \"h-screen p-4 flex flex-grow flex-col content-space-between overflow-y-auto overflow-x-hidden border-r dark:bg-gray-800 dark:border-gray-700 z-20\",\n isMobile ? \"w-screen bg-white\" : \"w-56 max-w-56 h-full\"\n ),\n },\n React.createElement(\n UIButton,\n {\n className: \"ml-auto mb-4 justify-center aspect-square w-8\",\n onClick: () => setIsSidebarCollapsed(true),\n style: {\n // prevent squishing of button\n minHeight: \"32px\",\n },\n },\n React.createElement(UIIcon, { name: \"ArrowSmallLeft\" })\n ),\n React.createElement(\n Menu,\n { as: \"div\", className: \"relative inline-block text-left z-50\" },\n ({ open }) => {\n // setIsAccountExpanded\n useEffect(() => {\n setIsAccountExpanded(open);\n }, [open]);\n return React.createElement(\n React.Fragment,\n null,\n React.createElement(\n UISkeleton,\n {\n className: \"w-full\",\n isLoading:\n !(account === null || account === void 0\n ? void 0\n : account.username) ||\n !(account === null || account === void 0\n ? void 0\n : account.label),\n },\n React.createElement(\n Menu.Button,\n {\n className: \"group w-full text-left font-medium text-gray-900\",\n },\n React.createElement(\n \"div\",\n {\n className:\n \"flex h-fit items-center justify-between space-x-2 py-1.5 rounded\",\n },\n React.createElement(\n \"div\",\n { className: \"flex flex-1 items-center\" },\n React.createElement(\n \"div\",\n { className: \"rounded-md overflow-clip\" },\n React.createElement(UIBrandingLogo, null)\n ),\n React.createElement(\n \"div\",\n { className: \"ml-2\" },\n React.createElement(\n \"div\",\n {\n className:\n \"truncate text-sm dark:text-gray-100 flex items-center font-semibold\",\n },\n account === null || account === void 0\n ? void 0\n : account.username,\n \"\\u00A0\"\n ),\n React.createElement(\n \"div\",\n { className: \"text-sm font-medium text-gray-500\" },\n account === null || account === void 0\n ? void 0\n : account.label\n )\n )\n ),\n React.createElement(UIIcon, {\n name: \"ChevronUpDown\",\n className:\n \"h-5 w-5 text-gray-900 dark:text-gray-200 my-auto\",\n })\n )\n )\n ),\n React.createElement(\n Transition,\n {\n show: open,\n enter: \"transition ease-in-out duration-100 transform opacity\",\n enterFrom: \"translate-y-1 opacity-0\",\n enterTo: \"translate-y-0 opacity-100\",\n leave: \"transition ease-in-out duration-100 transform opacity\",\n leaveFrom: \"translate-y-0 opacity-100\",\n leaveTo: \"translate-y-1 opacity-0\",\n },\n React.createElement(\n \"div\",\n {\n className: classes(\n \"absolute origin-top bg-white dark:bg-gray-900 shadow-sm py-2 border dark:border-gray-700 rounded mt-1 min-w-full\",\n accounts.length === 1 ? \"pb-1\" : \"\"\n ),\n },\n accounts.map(({ id, username, label, callback }) =>\n React.createElement(\n \"div\",\n { onClickCapture: callback },\n React.createElement(\n Menu.Item,\n { key: id },\n React.createElement(\n \"div\",\n {\n className: classes(\n getAccountId() === id ? \"bg-gray-100\" : \"\",\n \"flex items-center mx-2 px-2 py-2 rounded cursor-pointer hover:opacity-50 transition-opacity duration-50 ease-in-out\"\n ),\n },\n React.createElement(\n \"div\",\n { className: \"flex-1\" },\n React.createElement(\n \"div\",\n { className: \"font-semibold text-sm\" },\n username\n ),\n React.createElement(\n \"a\",\n { className: \"text-sm font-medium text-gray-500\" },\n label\n )\n ),\n getAccountId() === id &&\n React.createElement(UIIcon, {\n name: \"CheckCircle\",\n variant: \"filled\",\n className: \"h-5 w-5 text-yellow-400\",\n })\n )\n )\n )\n ),\n (menuItems === null || menuItems === void 0\n ? void 0\n : menuItems.length) > 0 &&\n React.createElement(\n React.Fragment,\n null,\n React.createElement(\n Menu.Item,\n null,\n React.createElement(\n \"div\",\n { className: \"pt-2 pb-1.5\" },\n React.createElement(\"hr\", null)\n )\n ),\n React.createElement(\n Menu.Item,\n null,\n React.createElement(\n \"div\",\n { className: \"flex flex-col font-medium\" },\n menuItems.map((item, index) =>\n React.createElement(UISidebarMenuItem, {\n key: index,\n href: item.href,\n icon: item.icon,\n label: item.label,\n onClick: item.onClick,\n })\n )\n )\n )\n )\n )\n )\n );\n }\n ),\n React.createElement(UISidebarDivider, null),\n React.createElement(\n \"nav\",\n { className: \"flex flex-col flex-1\", \"aria-label\": \"Sidebar\" },\n React.createElement(\n \"div\",\n {\n className: classes(\n \"whitespace-nowrap transition-opacity duration-100\",\n isAccountExpanded ? \"opacity-25\" : \"\"\n ),\n },\n children\n ),\n React.createElement(UISidebarSpacer, null),\n React.createElement(UISidebarDivider, null),\n React.createElement(\n \"span\",\n {\n className:\n \"font-medium text-sm text-gray-200 dark:text-gray-700 my-1\",\n },\n \"app_version \",\n appVersion\n )\n )\n )\n );\n};\nexport default Object.assign(Root, {\n Item: UISidebarItem,\n Spacer: UISidebarSpacer,\n Divider: UISidebarDivider,\n});\n//# sourceMappingURL=UISidebar.js.map\n","var __rest = (this && this.__rest) || function (s, e) {\n var t = {};\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\n t[p] = s[p];\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\n t[p[i]] = s[p[i]];\n }\n return t;\n};\nimport React from \"react\";\nimport { classes } from \"../index\";\nexport const UISkeleton = (props) => {\n const { children, className, isLoading } = props, extra = __rest(props, [\"children\", \"className\", \"isLoading\"]);\n return isLoading ? (React.createElement(\"div\", Object.assign({ className: classes(\"flex animate-pulse bg-gray-200 dark:bg-gray-700 rounded-md\", !!children ? \"w-fit\" : \"\", className) }, extra),\n React.createElement(\"span\", { className: \"block invisible\" }, children || \"unknown\"))) : (React.createElement(React.Fragment, null, children));\n};\n//# sourceMappingURL=UISkeleton.js.map","import React from \"react\";\n// todo: light/dark variant for logo\n/**\n * @name UIBrandingLogo\n * @description Alpaca icon, rounded by default with a medium border and 32x32 size, can be customized with props.\n * @param {React.SVGProps} props\n * @returns {JSX.Element}\n * @example\n * \n * \n * \n */\nexport const UIBrandingLogo = (props) => (React.createElement(\"svg\", Object.assign({ viewBox: \"0 0 200 200\", fill: \"none\", xmlns: \"http://www.w3.org/2000/svg\", className: \"h-8 w-8\" }, props),\n React.createElement(\"path\", { fillRule: \"evenodd\", clipRule: \"evenodd\", d: \"M200 0H0V200H70.3297L78.2679 115.944H77.5265C70.9978 115.945 65.5978 113.605 60.6286 109.345C55.6595 105.084 52.3617 99.1813 51.3269 92.6953L66.7172 82.6848V82.5605C66.7167 75.7379 69.3342 69.1785 74.0238 64.2506C78.7133 59.3227 85.1127 56.4069 91.8871 56.1114V56.0838H96.4634V39.9676C99.7079 39.9676 102.847 41.1237 105.325 43.231C107.803 45.3382 109.46 48.2603 110 51.4792H110.192V39.9676C112.631 39.9676 115.026 40.6213 117.131 41.8615C119.235 43.1016 120.973 44.8834 122.166 47.0236C123.359 49.1638 123.964 51.5852 123.919 54.0386C123.874 56.4921 123.179 58.8891 121.908 60.9832C126.042 63.7014 129.437 67.4136 131.786 71.784C134.135 76.1545 135.364 81.0453 135.362 86.014V190.194C135.362 191.721 135.965 193.185 137.038 194.264C138.111 195.343 139.566 195.95 141.083 195.95H200V0Z\", fill: \"#FCD72B\" }),\n React.createElement(\"mask\", { id: \"mask0_1_3\", style: { maskType: \"alpha\" }, maskUnits: \"userSpaceOnUse\", x: \"0\", y: \"0\", width: \"200\", height: \"200\" },\n React.createElement(\"path\", { d: \"M100 200C155.228 200 200 155.228 200 100C200 44.7715 155.228 0 100 0C44.7715 0 0 44.7715 0 100C0 155.228 44.7715 200 100 200Z\", fill: \"#FCD72B\" })),\n React.createElement(\"g\", { mask: \"url(#mask0_1_3)\" },\n React.createElement(\"path\", { d: \"M80.5537 84.5046C80.5548 83.695 80.8769 82.9189 81.4493 82.3464C82.0216 81.7739 82.7976 81.4518 83.607 81.4506H92.4959C92.4959 83.0717 91.8521 84.6264 90.706 85.7727C89.56 86.919 88.0056 87.563 86.3848 87.563H80.2737L80.5537 84.5046Z\", fill: \"#FCD72B\" }))));\n//# sourceMappingURL=UIBranding.js.map","var __rest =\n (this && this.__rest) ||\n function (s, e) {\n var t = {};\n for (var p in s)\n if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\n t[p] = s[p];\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\n if (\n e.indexOf(p[i]) < 0 &&\n Object.prototype.propertyIsEnumerable.call(s, p[i])\n )\n t[p[i]] = s[p[i]];\n }\n return t;\n };\nimport React from \"react\";\nimport { classes } from \"../index\";\n// define the font size, height, padding, and border radius for each button size\nconst sizeMap = {\n sm: {\n fontSize: \"xs\",\n height: \"6\",\n paddingX: \"2\",\n borderRadius: \"sm\",\n },\n md: {\n fontSize: \"sm\",\n height: \"10\",\n paddingX: \"2\",\n borderRadius: \"md\",\n },\n lg: {\n fontSize: \"base\",\n height: \"10\",\n paddingX: \"4\",\n borderRadius: \"lg\",\n },\n};\nexport const UIButton = (_a) => {\n var { variant = \"default\", className, size = \"md\", children } = _a,\n more = __rest(_a, [\"variant\", \"className\", \"size\", \"children\"]);\n // get the font size, height, padding, and border radius for the selected size\n const sizeStyles = sizeMap[size];\n // generate the appropriate class names based on the selected variant and size\n return React.createElement(\n \"button\",\n Object.assign(\n {\n className: classes(\n // base styles for all buttons\n \"font-medium focus:outline-none focus:ring-0 focus:ring-transparent whitespace-nowrap flex items-center transition-opacity duration-50 ease-in-out\",\n // variant-specific styles\n variant === \"default\"\n ? \"bg-white border-cool-gray-200 border shadow-sm text-cool-gray-800 hover:opacity-50\"\n : \"bg-transparent border border-cool-gray-200 text-cool-gray-800 hover:shadow\",\n // size-specific styles\n `text-${sizeStyles.fontSize} h-${sizeStyles.height} px-${sizeStyles.paddingX} rounded-${sizeStyles.borderRadius}`,\n // additional class names from props\n className\n ),\n },\n more\n ),\n children\n );\n};\n//# sourceMappingURL=UIButton.js.map\n","var __rest = (this && this.__rest) || function (s, e) {\n var t = {};\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\n t[p] = s[p];\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\n t[p[i]] = s[p[i]];\n }\n return t;\n};\nexport * from \"./hooks\";\nexport * from \"./components\";\nimport React, { useState, useEffect, useCallback, useRef } from \"react\";\nimport { createContext } from \"react\";\nexport const DEFAULT_MOBILE = false;\nexport const DEFAULT_ACCOUNT_EXPANDED = false;\nexport const DEFAULT_SIDEBAR_EXPANDED = true;\nexport const DEFAULT_DARK_MODE = false;\nexport const SIDEBAR_MOBILE_WIDTH = 480;\nexport const SIDEBAR_EXPANDED_WIDTH = 960;\nexport const DARK_MODE_STORAGE_KEY = \"darkMode\";\nconst DEFAULTS = {\n isMobile: DEFAULT_MOBILE,\n isProfileExpanded: false,\n isSidebarExpanded: DEFAULT_SIDEBAR_EXPANDED,\n isAccountExpanded: DEFAULT_ACCOUNT_EXPANDED,\n isDarkMode: DEFAULT_DARK_MODE,\n setIsMobile: () => null,\n setIsProfileExpanded: () => null,\n setIsSidebarExpanded: () => null,\n setIsAccountExpanded: () => null,\n setIsSidebarCollapsed: () => null,\n setIsDarkMode: () => null,\n};\nexport const UIContext = createContext(DEFAULTS);\nconst Provider = (_a) => {\n var { children } = _a, overrides = __rest(_a, [\"children\"]);\n const didMount = useRef(false);\n const [isDarkMode, setIsDarkMode] = useState(Boolean(localStorage.getItem(DARK_MODE_STORAGE_KEY)));\n const [isMobile, setIsMobile] = useState(DEFAULTS.isMobile);\n const [isProfileExpanded, setIsProfileExpanded] = useState(false);\n const [isAccountExpanded, setIsAccountExpanded] = useState(DEFAULT_MOBILE);\n const [isSidebarExpanded, setIsSidebarExpanded] = useState(window.innerWidth > SIDEBAR_MOBILE_WIDTH ? DEFAULT_SIDEBAR_EXPANDED : false);\n const [isSidebarCollapsed, setIsSidebarCollapsed] = useState(Boolean(localStorage.getItem(\"isSidebarCollapsed\")) || false);\n const onBeforeSetIsSidebarCollapsed = useCallback((value) => {\n if (value && !isMobile) {\n localStorage.setItem(\"isSidebarCollapsed\", \"true\");\n }\n setIsSidebarCollapsed(value);\n setIsSidebarExpanded(!value && !isMobile);\n }, [isMobile]);\n const onBeforeSetIsSidebarExpanded = useCallback((value) => {\n if (window.innerWidth < SIDEBAR_MOBILE_WIDTH) {\n setIsMobile(true);\n }\n if (value) {\n setIsSidebarCollapsed(false);\n localStorage.removeItem(\"isSidebarCollapsed\");\n }\n setIsSidebarExpanded(value);\n }, [isSidebarCollapsed]);\n const onBeforeSetDarkMode = useCallback((value) => {\n setIsDarkMode(value);\n if (value) {\n localStorage.setItem(DARK_MODE_STORAGE_KEY, \"true\");\n // add dark class to root element\n document.documentElement.classList.add(\"dark\");\n }\n else {\n localStorage.removeItem(DARK_MODE_STORAGE_KEY);\n // remove dark class from root element\n document.documentElement.classList.remove(\"dark\");\n }\n }, []);\n useEffect(() => {\n const onResize = () => {\n // use a switch\n switch (true) {\n // everything else\n case window.innerWidth > SIDEBAR_EXPANDED_WIDTH:\n setIsMobile(false);\n if (!isSidebarCollapsed) {\n setIsSidebarExpanded(true);\n }\n break;\n // mobile\n case window.innerWidth < SIDEBAR_EXPANDED_WIDTH:\n setIsSidebarExpanded(false);\n break;\n }\n };\n if (!didMount.current) {\n onResize();\n }\n didMount.current = true;\n window.addEventListener(\"resize\", onResize);\n return () => window.removeEventListener(\"resize\", onResize);\n }, [isSidebarCollapsed]);\n return (React.createElement(UIContext.Provider, { value: Object.assign({ isMobile,\n isSidebarExpanded,\n isAccountExpanded,\n isProfileExpanded,\n isDarkMode,\n setIsMobile,\n setIsProfileExpanded,\n setIsAccountExpanded, setIsSidebarExpanded: onBeforeSetIsSidebarExpanded, setIsSidebarCollapsed: onBeforeSetIsSidebarCollapsed, setIsDarkMode: onBeforeSetDarkMode }, overrides) }, children));\n};\nexport const classes = (...c) => c.filter(Boolean).join(\" \");\nexport default { Provider };\n//# sourceMappingURL=index.js.map","import { createAction as baseCreateAction, createReducer } from \"redux-act\";\nimport * as Sentry from \"@sentry/browser\";\nimport { getCurrentAuthenticatedUser, UserNotAuthenticated } from \"../../utils\";\n\nconst REDUCER = \"cognito\";\nconst NS = `@@${REDUCER}`;\nconst createAction = (name) => baseCreateAction(`${NS}/${name}`);\n\nexport const _receive = createAction(\"RECEIVE\");\nexport const _fetch = createAction(\"FETCH\");\nexport const _error = createAction(\"ERROR\");\nexport const _invalidate = createAction(\"INVALIDATE\");\n\nconst initialState = {\n status: \"invalid\",\n payload: null,\n error: null,\n};\n\nexport const load = () => (dispatch, getState) => {\n const state = getState().cognito;\n if (state.status === \"invalid\") {\n dispatch(_fetch());\n return getCurrentAuthenticatedUser()\n .then((data) => {\n Sentry.setUser({ email: data.attributes?.email });\n dispatch(_receive(data));\n return data;\n })\n .catch((error) => {\n if (error instanceof UserNotAuthenticated) {\n dispatch(_receive(null));\n return null;\n }\n dispatch(_error(error));\n throw error;\n });\n } else if (state.status === \"error\") {\n return Promise.reject(state.error);\n } else if (state.status === \"loaded\") {\n return Promise.resolve(state.payload);\n }\n // } else if (state.status === 'loading') {\n // // TODO:\n // return Promise.resolve(state.payload)\n // }\n};\n\nexport default createReducer(\n {\n [_receive]: (state, param) => ({\n ...state,\n status: \"loaded\",\n payload: param,\n }),\n [_fetch]: (state) => ({\n ...state,\n status: \"loading\",\n payload: null,\n error: null,\n }),\n [_error]: (state, param) => ({\n ...state,\n status: \"error\",\n error: param,\n }),\n [_invalidate]: (state) => ({\n ...state,\n status: \"invalid\",\n payload: null,\n error: null,\n }),\n },\n initialState\n);\n","import React from \"react\";\nimport moment from \"moment-timezone\";\nimport iso3166 from \"iso-3166-2\";\n\nimport { Timeframe } from \"../routes/dashboard/home/cards/chart\";\nimport { ControllerRenderProps } from \"react-hook-form\";\n\nconst FRACTION_DIGITS_CONFIG = [\n { threshold: 1, digits: 2 },\n { threshold: 0.01, digits: 4 },\n { threshold: 0.0001, digits: 6 },\n];\nconst DEFAULT_DIGITS = 9;\n\nconst timeframeFormats: Record = {\n \"1D\": \"hh:mm A z\",\n \"1W\": \"MMM DD, yyyy hh:mm A z\",\n \"1M\": \"MMM DD, yyyy\",\n \"1A\": \"MMM DD, yyyy\",\n all: \"MMM DD, yyyy\",\n};\n\nexport const getPrettyDate = (value: string | Date | number = 0) => {\n const date = moment(value);\n if (date.isValid()) {\n return date.format(\"MMM DD, YYYY, hh:mm:ss A z\");\n } else {\n return \"-\";\n }\n};\n\nexport const getPrettyDateFromTimeframe = (\n timeframe: Timeframe,\n epoch?: number\n) => {\n const format = timeframeFormats[timeframe] || timeframeFormats.all;\n return `${moment(epoch).tz(moment.tz.guess()).format(format)}`;\n};\n\nexport const getPrettyDateFormatted = (\n value = 0,\n format = \"MMM DD, yyyy, hh:mm A\"\n) => `${moment(value).format(format)}`;\n\nexport const getPrettyTime = (value: number = 0) =>\n `${moment(value).format(\"hh:mm A\")}`;\n\nconst getMaxFractionDigits = (value: number) => {\n const num = Math.abs(value);\n for (const config of FRACTION_DIGITS_CONFIG) {\n if (num === 0 || num > config.threshold) {\n return config.digits;\n }\n }\n return DEFAULT_DIGITS;\n};\n\nexport const getPrettyCash = (\n value: number | string | undefined = 0,\n options?: {\n withPrefix?: boolean;\n forcePrecision?: number;\n minimumFractionDigits?: number;\n acceptZero?: boolean;\n }\n): string => {\n const parsed = parseFloat(value?.toString().replace(\",\", \"\"));\n\n if (\n isNaN(parsed) ||\n !isFinite(parsed) ||\n (parsed === 0 && !options?.acceptZero)\n ) {\n return \"-\";\n }\n\n const sign = options?.withPrefix ? (parsed > 0 ? \"+\" : \"-\") : \"\";\n const prefix = parsed < 0 ? \"-\" : sign;\n const absValue = Math.abs(parsed).toLocaleString(\"en-US\", {\n minimumFractionDigits: options?.minimumFractionDigits || 0,\n maximumFractionDigits:\n options?.forcePrecision || getMaxFractionDigits(parsed),\n });\n\n return `${prefix}$${absValue}`;\n};\n\nexport const getPrettyAmount = (\n value: number | string = 0,\n minimumFractionDigits = 0,\n maximumFractionDigits = 4\n): string => {\n const parsed = parseFloat(value?.toString());\n\n if (isNaN(parsed) || !isFinite(parsed) || parsed === 0) {\n return \"-\";\n }\n\n return `${(parsed > 0 ? \"\" : \"-\").concat(\n Math.abs(parsed).toLocaleString(\"en-US\", {\n minimumFractionDigits,\n maximumFractionDigits,\n })\n )}`;\n};\n\nexport const getPrettyPercent = (\n value: number | string | undefined = 0,\n noPrefix: boolean = false,\n multiply: boolean = false\n): string => {\n const parsed = parseFloat(value?.toString());\n\n if (isNaN(parsed) || !isFinite(parsed) || parsed === 0) {\n return \"-\";\n }\n\n return `${parsed > 0 && !noPrefix ? \"+\" : \"\"}${(multiply\n ? parsed * 100\n : parsed\n ).toLocaleString(\"en-US\", {\n minimumFractionDigits: 2,\n maximumFractionDigits: 2,\n })}%`;\n};\n\nexport const getProfitLossColor = (value: string | number) => {\n const parsed = parseFloat(value?.toString());\n\n if (isNaN(parsed) || !isFinite(parsed) || parsed === 0) {\n return \"text-gray-500\";\n }\n\n // if the value is positive, return green\n if (parsed >= 0) {\n return \"text-emerald-500\";\n }\n\n // if the value is negative, return red\n return \"text-rose-500\";\n};\n\n/**\n * @name getNumberOnly\n * @description removes all non-numeric characters from a string\n *\n * @param {string} value\n * @return {number}\n */\n\nexport const getNumberOnly = (value = \"\") =>\n Number(value.replace(/[^0-9.]/g, \"\"));\n\n/**\n * @name getCashTransformer\n * @description a function that modifies the input of a number value to a currency format (e.g. $1,000.00)\n *\n * @param {object} field - the field object from react-hook-form\n * @param {string} field.value - the value of the field\n * @param {function} field.onChange - the onChange function for the field\n */\n\nexport const getCashTransformer = ({\n field,\n}: {\n field: ControllerRenderProps;\n}) => {\n const transform = {\n // this will probably always be a pass-through\n input: (value: string) => value,\n // this will get called every time the input changes\n output: (event: React.ChangeEvent) => {\n const value = event.target?.value?.replace(/[^0-9.]/g, \"\") || \"\";\n const separator = value.includes(\".\") ? \".\" : \"\";\n const split = value.split(\".\");\n const base = parseInt(split[0]);\n const cents = split[1] || \"\";\n\n return base\n ? `$${base.toLocaleString(\"en-US\")}${separator}${cents.slice(0, 2)}`\n : \"\";\n },\n };\n\n return {\n ...field,\n placeholder: \"$0.00\",\n value: transform.input(field.value),\n onChange: (event: React.ChangeEvent) =>\n field.onChange(transform.output(event)),\n };\n};\n\n/**\n * @name getISO3166Alpha3FormatMapping\n * @description a function that returns ISO3166-ALPHA-2 to ISO3166-ALPHA-3 format\n *\n */\n\nexport const getISO3166Alpha3FormatMapping = () => {\n let iso3166Alpha3FormatMapping: any = {};\n\n Object.keys(iso3166.codes).map((key) => {\n const value = iso3166.codes[key];\n iso3166Alpha3FormatMapping[value] = key;\n });\n\n return iso3166Alpha3FormatMapping;\n};\n","import get from \"lodash/get\";\n\n/**\n * Selectors are helper functions that generalize common questions about state.\n *\n * It introduces an extra layer of indirection, but it pays for this\n * by providing a single source of truth for how to interpret the state.\n *\n * This makes it easier to reduce duplication and bad assumptions,\n * and to change the shape of state in the future.\n *\n * A note on functions that return boolean values:\n * If the function is written as `isAccountInSomeState`, it should only be used\n * to determine if that specific condition true. A false value should not be used to infer\n * some other state. For example, if `isMicrodeposit` is false for some relationship,\n * you should not assume that it is a Plaid relationship. There could be some third type\n * of relationship in the future, or the relationship could just be null.\n */\n\n// account stuff\n\nexport const isAlpacaAccountCreated = (state) =>\n !!(state.account && state.account.account);\n\nexport const getAlpacaAccount = (state) => get(state, \"account.account\");\n\nexport const getAlpacaAccountId = (state) => get(state, \"account.account.id\");\n\nexport const getAlpacaOwnerId = (state) =>\n get(state, \"account.details.owner_id\");\n\n/**\n * getTradeDetails is a selector for trade details ( state.trade.{accId} )\n * for example:\n * state.trade.ab0e59fd-0485-42e6-8d3c-cd5e2cbb5ae3.cash_withdrawable for\n * cash withdrawable of specified account\n *\n * @param {object} state state of the app.\n * @param {String} product 'live' or 'paper'\n * @returns {object} the trade details object.\n */\nexport const getTradeDetails = (state, product = \"live\") => {\n const accId = getAccountIdForProduct(state, product);\n return get(state, `trade.${accId}`);\n};\n\nexport const getAccountDetails = (state) => get(state, \"account.details\");\n\nexport const getName = (state) => get(state, \"account.account.name\");\n\nexport const getEmail = (state) => get(state, \"account.account.email\");\n\nexport const getAccountStatus = (state) => get(state, \"account.account.status\");\n\nexport const getAccountNumber = (state) =>\n get(state, \"account.account.account_number\");\n\nexport const getPaperAccountId = (state) => get(state, \"account.paper.current\");\n\nexport const isPaperOnly = (state) =>\n get(state, \"account.account.status\") === \"PAPER_ONLY\";\n\nexport const getApiToken = (state) =>\n get(state, \"auth.userState.signInUserSession.idToken.jwtToken\");\n\nexport const isOAuthAccount = (account) =>\n ((account && account.details) || {}).signup_source !== null;\n\nexport const getOAuthClients = (state) => get(state, \"oauth.clients\") || [];\n\n// A helper to return access token, account id and paper account id.\nexport const getAccountIdAndJWT = (state) => {\n const account = getAlpacaAccount(state) || {};\n const accountId = account.id || \"\";\n const paperAccountId = getPaperAccountId(state);\n const token = getApiToken(state);\n\n return { accountId, paperAccountId, token };\n};\n\nexport const getLiveApiKey = (state) => {\n const keyId = Object.keys(state.accessKeys).find(\n (id) => state.accessKeys[id].product === \"live\"\n );\n return state.accessKeys[keyId];\n};\n\n// banking stuff\n\nexport const getRelationships = (state) => state.account.relationships;\nexport const getWireBanks = (state) => state.account.wireBanks;\n\nexport const getRelationshipById = (state, relationshipId) => {\n const relationships = getRelationships(state);\n if (!relationships) return null;\n return relationships.find((rel) => rel.id === relationshipId);\n};\n\nexport const getPrimaryWireBank = (state) => get(state, \"account.wireBanks[0]\");\n\nexport const getPrimaryRelationship = (state) =>\n get(state, \"account.relationships[0]\");\n\nexport const isLegacyMicrodeposit = (relationship) =>\n relationship && relationship.plaid_institution === \"micro_deposit\";\n\nexport const isMicrodeposit = (relationship) =>\n relationship &&\n relationship.plaid_verification_status &&\n relationship.plaid_verification_status.includes(\"manual\");\n\nexport const isPendingMicrodeposit = (relationship) =>\n isMicrodeposit(relationship) &&\n relationship.plaid_verification_status.includes(\"pending\");\n\nexport const getInstitutionOfRelationship = (state, relationship) => {\n if (!relationship) return null;\n if (isMicrodeposit(relationship) || isLegacyMicrodeposit(relationship)) {\n return {\n name: relationship.account_name,\n logoUrl: \"/resources/images/bank.svg\",\n };\n }\n return state.account.institutions\n ? state.account.institutions[relationship.plaid_institution]\n : null;\n};\n\n/**\n * This will return the account ID for the given product.\n * Currently there is only one account per product, but this\n * will change in the future.\n *\n * @param {Object} state\n * @param {String} product\n */\nexport const getAccountIdForProduct = (state, product) => {\n if (product && state) {\n // Figure out the account id to use\n const { account } = state;\n let accountId = \"\";\n if (product === \"paper\") {\n accountId = (account.paper && account.paper.current) || accountId;\n }\n if (product === \"live\") {\n accountId = (account.account && account.account.id) || accountId;\n }\n\n return accountId;\n }\n};\n\n/**\n * Given a live account object, return if the account is in a state\n * of beinga be to be used.\n *\n * @param {Object} account\n */\nexport const isLiveAccountActive = (account) => {\n const accountStatus = (account && account.status) || false;\n\n // A full list of status values here:\n // https://github.com/alpacahq/gobroker/blob/develop/models/enum/enum.go#L17\n //\n // An 'ACTIVE' status will have an account_number so no need to check that.\n // SUBMITTED - action is required on client side, some sort of rejection\n // RESUBMITTED - request has been re-submitted to Apex after account update\n // APPROVAL_PENDING - account awaiting approval\n // REAPPROVAL_PENDING - indeterminate state once apex approves a re-submission\n // ACTION_REQUIRED - account did not pass automatic cip check or failed watchlist check, waiting for admin action\n // SUBMISSION_FAILED - something happened on our server and didn't complete\n // REJECTED - APEX flat out rejected the account (the user must re-apply somehow - new email/login)\n // ::: the following admin actions can change status :::\n // ACCOUNT_UPDATED - if the account was previously in an ACTIVE status\n // EDITED - temporary status when an admin has edited an account\n // ACCOUNT_CLOSED - the account is closed (rare)\n // DISABLED - ETC account is disabled by admin\n return accountStatus === \"ACTIVE\";\n};\n\n/**\n * Given an account object, this will return true if the\n * account is PAPER_ONLY or ONBOARDING\n *\n * @param {Object} account\n */\nexport const isPaperOrOnboarding = (account) => {\n const liveAccount = account.account || {};\n const { status = \"\" } = liveAccount;\n return (\n status === \"ONBOARDING\" || status === \"PAPER_ONLY\" || status === \"SIGNED_UP\"\n );\n};\n\n/**\n * Given an account object, this will return true if\n * the account is in onboarding.\n *\n * @param {Object} account\n */\nexport const isOnboarding = (account) => {\n const liveAccount = account.account || {};\n const { status = \"\" } = liveAccount;\n return (\n status === \"PAPER_ONLY\" || status === \"ONBOARDING\" || status === \"SIGNED_UP\"\n );\n};\n\n/**\n * Given an account object, this will return true if\n * the account is in `SUBMITTED` status, meaning they\n * submitted their application and completed onboarding\n * moving out of the `ONBOARDING` status.\n *\n * @param {Object} account\n */\nexport const isSubmitted = (account) => {\n const liveAccount = account.account || {};\n const { status = \"\" } = liveAccount;\n return status === \"SUBMITTED\";\n};\n\n// Check on name for disabled\nexport const isLiveAccountClosedOrDisabled = (account) => {\n const liveAccount = account.account || {};\n const { status = \"\" } = liveAccount;\n return status === \"ACCOUNT_CLOSED\" || status === \"DISABLED\";\n};\n\n// Returns true if either a live API key is generate or an app is configured\nexport const isTradingConnected = (accessKeys, oauthClients) => {\n let hasLiveAccessKey = false;\n Object.keys(accessKeys).forEach((ak) => {\n if (accessKeys[ak] && accessKeys[ak].product === \"live\") {\n hasLiveAccessKey = true;\n }\n });\n\n return (\n (accessKeys && hasLiveAccessKey) ||\n (oauthClients && oauthClients.length > 0)\n );\n};\n","import * as auth from \"./common\";\nimport Auth from \"@aws-amplify/auth\";\nimport { eraseCookie } from \"lib/cookies\";\nimport { getCurrentAuthenticatedUser } from \"../../utils\";\n\n/**\n * Logs the user out from Cognito (clears cookies, and wipes local storage if needed because\n * it's apparently too much to ask of Amplify rofl).\n */\nexport const logout = () => (dispatch) => {\n getCurrentAuthenticatedUser()\n .then((currentUser) => {\n // make sure to delete cookie for subdomain\n eraseCookie(\"dashboard.authtoken\");\n // Try to get fresh data (setting bypassCache true)\n // https://github.com/aws-amplify/amplify-js/issues/2627\n currentUser.getUserData(() => dispatch(signOutGlobal()), {\n bypassCache: true,\n });\n })\n .catch((e) => {\n console.debug(\n \"Error getting current user before trying to log out. Log out anyway.\",\n e\n );\n dispatch(signOutGlobal());\n });\n};\n\n// By using `global: true`, all the auth tokens are revoked (id token, access token and refresh token)\n// which means the user is signed out from all the devices\n// Note: although the tokens are revoked, the AWS credentials will remain valid until they expire (which by default is 1 hour)\nconst signOutGlobal = () => (dispatch) => {\n Auth.signOut({ global: true })\n .then(() => dispatch(cleanUpAndRedirect()))\n .catch(() => dispatch(signOutLocal()));\n};\n\n// If signOut with `global: true` throws, then we're probably already logged out globally so just log out this session\nconst signOutLocal = () => (dispatch) => {\n Auth.signOut()\n .catch(() => dispatch(clearCookieStorage()))\n .finally(() => dispatch(cleanUpAndRedirect()));\n};\n\n/**\n * Friendlier cleanup tasks.\n */\nexport const cleanUpAndRedirect = () => (dispatch) => {\n dispatch(\n auth.setUserState({\n userState: {},\n })\n );\n const { pathname, search } = window.location;\n window.sessionStorage.setItem(\"requested_path\", pathname + search);\n window.localStorage.setItem(\"user\", \"\");\n window.location = \"/login\";\n};\n\n/**\n * Kill it all with fire. Sometimes its safer to wipe all cookies.\n * See: https://github.com/aws-amplify/amplify-js/issues/614\n * and: https://github.com/aws-amplify/amplify-js/issues/2605\n */\nexport const clearCookieStorage = () => {\n console.debug(\"Removing Cognito cookies.\");\n try {\n const cookies = document.cookie.split(\";\");\n cookies\n .filter((value) => value.match(/CognitoIdentityService.*/))\n .forEach((value) => {\n eraseCookie(value.split(\"=\")[0]);\n });\n // make sure to delete cookie for subdomain\n eraseCookie(\"dashboard.authtoken\");\n } catch (e) {\n console.error(`An error occured clearing cookies: ${e}`);\n }\n\n // paciam check\n try {\n eraseCookie(\"paciamRefreshToken\");\n eraseCookie(\"paciamAccessToken\");\n } catch (e) {\n console.error(`An error occured clearing Paciam cookies: ${e}`);\n }\n};\n","import instance from \"..\";\n\nexport interface Quote {\n symbol: string;\n bid_timestamp: string;\n bid: number;\n bid_size: number;\n bid_exchange: string;\n ask_timestamp: string;\n ask: number;\n ask_size: number;\n ask_exchange: string;\n last_timestamp: string;\n last: number;\n last_size: number;\n last_exchange: string;\n volume: number;\n highest_price: number;\n lowest_price: number;\n last_day_closing: string;\n}\n\nexport const getQuotes = async (symbols: string[]): Promise => {\n const res = await instance.get(`/quotes?symbols=${symbols.join(\",\")}`);\n\n return res.data;\n};\n\nexport interface Clock {\n timestamp: string;\n is_open: boolean;\n next_open: string;\n next_close: string;\n}\n\nexport const getClock = async (): Promise => {\n const res = await instance.get(\"/clock\");\n return res.data;\n};\n\n// get orderbooks\nexport const getOrderbooks = async (symbols: string[]): Promise => {\n const res = await instance.get(\n `/latest/orderbooks?symbols=${symbols.join(\",\")}`,\n {\n baseURL: window.env.CRYPTO_DATA_API_URL,\n }\n );\n return res.data;\n};\n\n/**\nexport const getTrades = async (symbols: string[]): Promise => {\n const meow: any = [];\n const limit = 500;\n\n const next: any = async (token?: string) => {\n const { data } = await instance.get(\n `/trades?symbols=${symbols.join(\",\")}&limit=${limit}${\n !token ? `&start=${moment().subtract(1, \"minutes\").toISOString()}` : \"\"\n }${token ? `&page_token=${token}` : \"\"}`,\n {\n baseURL: window.env.CRYPTO_DATA_B2_API_URL,\n }\n );\n\n if (data.trades[symbols[0]]) {\n meow.push(...data.trades[symbols[0]]);\n }\n\n const next_page_token = data.next_page_token;\n\n return await next(next_page_token);\n };\n\n if (meow.length == 0) {\n await next();\n }\n\n console.log(meow);\n\n return meow;\n};\n **/\n\nexport interface CryptoSnapshot {\n dailyBar: {\n c: number;\n h: number;\n l: number;\n n: number;\n o: number;\n t: string;\n v: number;\n vw: number;\n };\n latestQuote: {\n ap: number;\n as: number;\n bp: number;\n bs: number;\n t: string;\n };\n latestTrade: {\n i: number;\n p: number;\n s: number;\n t: string;\n tks: string;\n };\n minuteBar: {\n c: number;\n h: number;\n l: number;\n n: number;\n o: number;\n t: string;\n v: number;\n vw: number;\n };\n prevDailyBar: {\n c: number;\n h: number;\n l: number;\n n: number;\n o: number;\n t: string;\n v: number;\n vw: number;\n };\n}\n\nexport interface CryptoSnapshots {\n snapshots: {\n [key: string]: CryptoSnapshot;\n };\n}\n\nexport interface GetCryptoSnapshotParams {\n symbols: string[];\n}\n\n// get crypto snapshot\nexport const getCryptoSnapshots = async (\n params: GetCryptoSnapshotParams\n): Promise => {\n const res = await instance.get(\n `/snapshots?symbols=${params.symbols.join(\",\")}`,\n {\n baseURL: window.env.CRYPTO_DATA_API_URL,\n }\n );\n return res.data;\n};\n\nexport interface CryptoAsset {\n id: string;\n class: string;\n exchange: string;\n symbol: string;\n name: string;\n status: string;\n tradable: boolean;\n marginable: boolean;\n maintenance_margin_requirement: number;\n shortable: boolean;\n easy_to_borrow: boolean;\n fractionable: boolean;\n min_order_size: string;\n min_trade_increment: string;\n price_increment: string;\n}\n\n// we have to use this for now; not exposed on staging\nexport const getCryptoAssets = async (): Promise => {\n const res = await instance.get(\"/assets/public/beta\", {\n baseURL: \"https://api.alpaca.markets/v2\",\n });\n return res.data || [];\n};\n","import React from \"react\";\nimport { connect } from \"react-redux\";\nimport { Redirect } from \"react-router-dom\";\nimport * as cognitoActions from \"reducers/auth/cognito\";\nimport * as accountListActions from \"reducers/auth/accountList\";\nimport { getCookie } from \"src/lib/cookies\";\nimport api from \"./api\";\nimport { initAmplify } from \"./reducers/auth/common\";\nimport { locationTracker } from \"./utils/eventTracker\";\n\nconst fireLinkedInPixel = () => {\n const partnerId = window._linkedin_partner_id;\n const element = document.createElement(\"img\");\n element.alt = \"\";\n element.height = 1;\n element.width = 1;\n element.src = `https://px.ads.linkedin.com/collect/?pid=${partnerId}&fmt=gif`;\n};\n\nconst mapStateToProps = ({ cognito, accountList }) => ({\n cognitoUser: cognito,\n accountList,\n});\n\n// AuthCheck is a layer to load current login state into redux state\n// before mounting the actual components. All mounted child components can expect\n// cognito/accountList to be the loaded state.\n@connect(mapStateToProps)\nclass AuthCheck extends React.Component {\n load() {\n const { dispatch, cognitoUser, accountList } = this.props;\n // funny way to check that cognito state is loaded\n if (cognitoUser.status !== \"invalid\") {\n return;\n }\n\n const paciamToken = getCookie(\"paciamAccessToken\");\n if (paciamToken) {\n dispatch(accountListActions.load());\n return;\n }\n initAmplify();\n dispatch(cognitoActions.load()).then((cognitoResponse) => {\n if (accountList.status !== \"invalid\") {\n return;\n }\n\n if (!cognitoResponse) {\n dispatch(accountListActions._receive(null));\n return;\n }\n dispatch(accountListActions.load()).catch((e) => {\n // bail out to create a new account in case this is not done yet.\n // this is not expected as a normal flow\n if (e?.name === \"NotFoundException\") {\n const attrs = cognitoResponse.attributes;\n const utm_params = JSON.parse(\n attrs[\"custom:utm_params\"] ||\n localStorage.getItem(\"signup-utm-params\")\n );\n dispatch(\n api.account.create(\n {},\n {\n email: attrs.email,\n clearing_broker: \"VELOX\",\n crypto_broker: attrs[\"custom:crypto_broker\"],\n source: attrs[\"custom:signup_source\"],\n utm_params,\n }\n )\n ).then(() => {\n dispatch(accountListActions._invalidate());\n dispatch(cognitoActions._invalidate());\n });\n } else {\n dispatch(accountListActions._receive(null));\n }\n });\n });\n }\n\n componentDidMount() {\n this.load();\n }\n\n componentDidUpdate() {\n this.load();\n }\n\n render() {\n const { cognitoUser, accountList, routeProps } = this.props;\n const paciamToken = getCookie(\"paciamAccessToken\");\n if (paciamToken) {\n // down the line we'll support onboarding between the mobile and web app\n // but for now, non-ACTIVE mobile created users will have to complete onbo on the app before coming here.\n const nonActivePaciamAcct =\n accountList.payload &&\n accountList.payload.length > 0 &&\n accountList.payload[0].status !== \"ACTIVE\";\n\n if (nonActivePaciamAcct) {\n return ;\n }\n\n const Component = this.props.component;\n return (\n \n );\n }\n // first time log-in where the cognito entry exists but no entry exists in our DB\n if (\n cognitoUser.status === \"loaded\" &&\n accountList.error?.name === \"NotFoundException\"\n ) {\n return ;\n }\n if (cognitoUser.status === \"error\") {\n console.error(\"cognitoUser error: \", cognitoUser.error);\n return ;\n }\n if (accountList.status === \"error\") {\n console.error(\"accountList error: \", accountList.error);\n return ;\n }\n if (cognitoUser.status !== \"loaded\" || accountList.status !== \"loaded\") {\n return <>;\n }\n\n // todo: need to expose each no-login-required page\n // no payload means the user is not logged in\n // if (!cognitoUser.payload && !this.props.exposed) {\n // return ;\n // }\n\n let destination = null;\n if (this.props.redirector) {\n destination = this.props.redirector(\n cognitoUser.payload,\n accountList.payload,\n routeProps\n );\n }\n\n if (destination && destination !== routeProps.location.pathname) {\n return ;\n }\n\n const pathname = routeProps.location.pathname;\n if (pathname != this.prevPathname) {\n fireLinkedInPixel();\n if (cognitoUser.payload || pathname === \"/signup\") {\n locationTracker(location);\n }\n this.prevPathname = pathname;\n }\n const Component = this.props.component;\n return (\n \n );\n }\n}\nexport default AuthCheck;\n","import React from \"react\";\nimport { Link } from \"react-router-dom\";\nimport Layout from \"components/AlpacaComponents/Layout\";\n\nconst NotFoundPage = () => (\n \n
\n
\n

\n Error 404\n

\n

\n The page you are looking for does not exist or has been removed.\n

\n \n Go back to the main page\n \n
\n
\n
\n);\n\nexport default NotFoundPage;\n","import React from \"react\";\nimport { Redirect } from \"react-router-dom\";\nimport { connect } from \"react-redux\";\nimport LoadingSpinner from \"components/LoadingSpinner\";\nimport { initUser } from \"reducers/auth/common\";\n\nconst mapStateToProps = (state) => ({\n accountState: state.account,\n});\n\n@connect(mapStateToProps)\nclass RootRedirect extends React.Component {\n load() {\n this.props.dispatch(initUser(false));\n }\n\n componentDidMount() {\n this.load();\n }\n\n componentDidUpdate() {\n this.load();\n }\n\n render() {\n const { accountState } = this.props;\n const { account, details } = accountState;\n if (account && details) {\n switch (account.status) {\n case \"PAPER_ONLY\":\n case \"ONBOARDING\":\n return ;\n default:\n return ;\n }\n }\n return <>;\n }\n}\nexport default RootRedirect;\n","const setRequestedPath = ({ pathname, search }) => {\n window.sessionStorage.setItem(\"requested_path\", pathname + search);\n};\n\nexport const requireLogin = (cognitoUser, accountList, routeProps) => {\n if (!cognitoUser || !accountList) {\n setRequestedPath(routeProps.location);\n return \"/login\";\n }\n const emailVerified =\n cognitoUser.attributes && cognitoUser.attributes.email_verified;\n if (!emailVerified) {\n setRequestedPath(routeProps.location);\n return \"/login\";\n }\n};\n\nexport const requireLiveActive = (cognitoUser, accountList, routeProps) => {\n let loginCheck = requireLogin(cognitoUser, accountList, routeProps);\n if (loginCheck) {\n return loginCheck;\n }\n\n const liveAccount = accountList[0];\n switch (liveAccount.status) {\n case \"PAPER_ONLY\":\n case \"REJECTED\":\n return \"/paper/dashboard/overview\";\n case \"ONBOARDING\":\n return \"/brokerage/new-account\";\n }\n};\n\nexport const requireCrytpoActive = (cognitoUser, accountList, routeProps) => {\n let loginCheck = requireLogin(cognitoUser, accountList, routeProps);\n if (loginCheck) {\n return loginCheck;\n }\n\n const liveAccount = accountList[0];\n const enableCryptoTransfers = window.env.ENABLE_COIN_TRANSFERS ?? false;\n if (!enableCryptoTransfers) {\n return \"/brokerage/dashboard/overview\";\n }\n\n switch (liveAccount.crypto_status) {\n case \"REJECTED\":\n return \"/paper/dashboard/overview\";\n case \"ONBOARDING\":\n return \"/brokerage/new-account\";\n }\n};\n\nexport const checkLogin = (cognitoUser, accountList) => {\n if (cognitoUser) {\n const emailVerified =\n cognitoUser.attributes && cognitoUser.attributes.email_verified;\n if (!emailVerified) {\n return \"/login\";\n }\n if (accountList) {\n return \"/\";\n }\n }\n};\n","import * as Sentry from \"@sentry/browser\";\nimport * as SecondaryIntegrations from \"@sentry/integrations\";\nimport { Integrations } from \"@sentry/tracing\";\n\nexport function init() {\n Sentry.init({\n dsn: window.env.SENTRY_DSN,\n release: process.env.REACT_APP_VERSION,\n environment: window.env.ENV,\n integrations: [\n new Integrations.BrowserTracing(),\n new SecondaryIntegrations.Dedupe(),\n new SecondaryIntegrations.ExtraErrorData(),\n ],\n ignoreErrors: [\n // network failure\n \"Failed to fetch\",\n /Loading chunk [\\d]+ failed/,\n /Loading CSS chunk [\\d]+ failed/,\n /NetworkError when attempting to fetch resource/,\n // elm\n \"Cannot read property 'childNodes' of undefined\",\n 'Can\\'t access property \"childNodes\"',\n \".replaceData is not a function\",\n ],\n });\n}\n","import UI from \"../src/local_libraries/@alpacahq:ui-deprecated\";\nimport enGB from \"antd/lib/locale-provider/en_GB\";\nimport Layout from \"./components/AlpacaComponents/Layout\";\nimport ReactDOM from \"react-dom\";\nimport loadable from \"@loadable/component\";\nimport AuthCheck from \"./AuthCheck\";\nimport CookieConsent from \"react-cookie-consent\";\nimport NotFoundPage from \"./pages/NotFoundPage\";\nimport RootRedirect from \"./pages/RootRedirect\";\nimport AmplitudeProvider from \"./AmplitudeProvider\";\n\nimport React, { useCallback } from \"react\";\n\nimport {\n checkLogin,\n requireCrytpoActive,\n requireLiveActive,\n requireLogin,\n} from \"./authMethods\";\n\nimport { Link } from \"./components/AlpacaComponents/Text\";\nimport { store } from \"./store\";\nimport { history } from \"./utils\";\nimport { useFlag } from \"@alpacahq/flag-service\";\nimport { Provider } from \"react-redux\";\nimport { Location } from \"history\";\nimport { initAmplify } from \"./reducers/auth/common\";\nimport { ConfigProvider } from \"antd\";\nimport { locationTracker } from \"./utils/eventTracker\";\nimport { ConnectedRouter } from \"connected-react-router\";\nimport { init as initSentry } from \"./Sentry\";\nimport { init as initWebsocket } from \"./websocket\";\nimport { Redirect, Route, Switch } from \"react-router-dom\";\nimport { QueryClient, QueryClientProvider } from \"react-query\";\n\nimport \"resources/_antd.less\";\nimport \"resources/AntStyles/AntDesign/antd.override.scss\";\nimport \"resources/AlpacaStyles/alpaca.scss\";\nimport { Toaster } from \"react-hot-toast\";\n\ninitSentry();\n\nconst AuthCheckRoute = (props: any) => {\n const component = useCallback(\n (routeProps) => (\n \n ),\n [props.redirector, props.component]\n );\n return ;\n};\n\n// super gross but really easy way to disable our stupid debug logs in prod\nif (process.env.NODE_ENV !== \"development\") {\n console.log = () => {};\n}\n\ninitWebsocket();\n\nconst queryClient = new QueryClient();\n\nhistory.listen((location: Location) => {\n locationTracker(location);\n});\n\nconst render = () => {\n const NewAccountV2Importer = () =>\n import(\"./v2-deprecated/routes/dashboard/onboarding\");\n\n const NewAccount = () => (\n \n );\n\n // check Amplify vs. Paciam (remove when full transition to Paciam happens)\n const hasCognitoCookies =\n document.cookie &&\n document.cookie\n .split(\";\")\n .filter((value) => value.match(/CognitoIdentityService.*/)).length > 0;\n if (hasCognitoCookies) {\n initAmplify();\n }\n\n ReactDOM.render(\n \n \n \n \n \n
\n \n \n Alpaca and selected third parties use cookies on this website\n as specified in the\n \n cookie policy\n \n . You accept the use of these cookies or other identifiers by\n pressing ‘Accept’, closing this notice, or logging into your\n account.\n \n \n import(\"./v2/pages/auth/AuthPage\")\n )}\n />\n import(\"./pages/ExchangeQuestions\")\n )}\n />\n import(\"./pages/LogoutPage\"))}\n redirector={checkLogin}\n />\n import(\"./v2-deprecated/routes/signup\")\n )}\n redirector={checkLogin}\n />\n import(\"./v2-deprecated/routes/signup\")\n )}\n redirector={checkLogin}\n />\n import(\"./v2-deprecated/routes/signup\")\n )}\n redirector={checkLogin}\n />\n import(\"./v2-deprecated/routes/signup\")\n )}\n />\n \n import(\"./v2-deprecated/routes/dashboard/onboarding\")\n )}\n />\n \n import(\"./v2-deprecated/routes/dashboard/onboarding\")\n )}\n />\n \n import(\"./v2-deprecated/routes/dashboard/onboarding\")\n )}\n />\n \n import(\"./v2-deprecated/routes/dashboard/onboarding\")\n )}\n />\n \n import(\"./v2-deprecated/routes/dashboard/onboarding\")\n )}\n />\n (\n \n )}\n />\n }\n />\n }\n />\n }\n />\n import(\"./v2-deprecated/routes/sign/W8-BEN\")\n )}\n />\n import(\"./pages/MobileRedirect\"))}\n />\n \n {/* OAuth */}\n (\n \n import(\"./pages/OAuth/AuthorizationPage\")\n }\n />\n )}\n redirector={requireLogin}\n />\n {/* USER & ALPACA ACCOUNT ROUTES */}\n (\n import(\"./pages/User/EditProfilePage\")}\n />\n )}\n redirector={requireLogin}\n />\n (\n \n useFlag(\"uix-v2\")\n ? import(\"./v2-deprecated/routes/dashboard/profile\")\n : import(\"./pages/User/ProfilePage\")\n }\n />\n )}\n redirector={requireLogin}\n />\n (\n import(\"./pages/User/SubscriptionPage\")}\n />\n )}\n redirector={requireLogin}\n />\n {/* PAPER ROUTES */}\n (\n \n import(\n \"./pages/Dashboard/Product/BrokerageAccount/Overview\"\n )\n }\n />\n )}\n redirector={requireLogin}\n />\n (\n \n import(\n \"./pages/Dashboard/Product/PaperTrading/Orders\"\n )\n }\n />\n )}\n redirector={requireLogin}\n />\n (\n \n import(\"./pages/Dashboard/Product/PaperTrading/Order\")\n }\n />\n )}\n redirector={requireLogin}\n />\n (\n \n import(\n \"./pages/Dashboard/Product/PaperTrading/Balances\"\n )\n }\n />\n )}\n redirector={requireLogin}\n />\n (\n \n useFlag(\"uix-v2\")\n ? import(\n \"./v2-deprecated/routes/dashboard/activities\"\n )\n : import(\n \"./pages/Dashboard/Product/PaperTrading/AccountActivities\"\n )\n }\n />\n )}\n redirector={requireLogin}\n />\n (\n \n import(\n \"./pages/Dashboard/Product/PaperTrading/AccountConfig\"\n )\n }\n />\n )}\n redirector={requireLogin}\n />\n (\n \n import(\n \"./pages/Dashboard/Product/PaperTrading/StockPage\"\n )\n }\n />\n )}\n redirector={requireLogin}\n />\n (\n \n import(\n \"./pages/Dashboard/Product/BrokerageAccount/StockPage\"\n )\n }\n />\n )}\n redirector={requireLogin}\n />\n {/* BROKERAGE ROUTES */}\n (\n import(\"./pages/SignUpBrokeragePage\")}\n />\n )}\n redirector={requireLogin}\n />\n (\n import(\"./pages/DataAgreementPage\")}\n />\n )}\n redirector={requireLogin}\n />\n (\n \n import(\"./v2-deprecated/routes/dashboard/developers\")\n }\n />\n )}\n redirector={requireLogin}\n />\n \n \n (\n \n import(\n \"./pages/Dashboard/Product/BrokerageAccount/Overview\"\n )\n }\n />\n )}\n redirector={requireLiveActive}\n />\n (\n \n import(\n \"./pages/Dashboard/Product/BrokerageAccount/Balances\"\n )\n }\n />\n )}\n redirector={requireLiveActive}\n />\n (\n \n useFlag(\"uix-v2\")\n ? import(\n \"./v2-deprecated/routes/dashboard/positions\"\n )\n : import(\n \"./pages/Dashboard/Product/BrokerageAccount/Portfolio\"\n )\n }\n />\n )}\n redirector={requireLogin}\n />\n (\n \n useFlag(\"uix-v2\")\n ? import(\"./v2-deprecated/routes/dashboard/orders\")\n : import(\n \"./pages/Dashboard/Product/BrokerageAccount/Orders\"\n )\n }\n />\n )}\n redirector={requireLogin}\n />\n (\n \n useFlag(\"uix-v2\")\n ? import(\n \"./v2-deprecated/routes/dashboard/account/configuration\"\n )\n : import(\n \"./pages/Dashboard/Product/BrokerageAccount/AccountConfig\"\n )\n }\n />\n )}\n redirector={requireLogin}\n />\n (\n \n useFlag(\"uix-v2\")\n ? import(\n \"./v2-deprecated/routes/dashboard/account/documents\"\n )\n : import(\n \"./pages/Dashboard/Product/BrokerageAccount/Documents\"\n )\n }\n />\n )}\n redirector={requireLogin}\n />\n (\n \n import(\n \"./pages/Dashboard/Product/BrokerageAccount/Orders\"\n )\n }\n />\n )}\n redirector={requireLiveActive}\n />\n (\n \n import(\n \"./pages/Dashboard/Product/BrokerageAccount/Order\"\n )\n }\n />\n )}\n redirector={requireLogin}\n />\n (\n \n import(\n \"./pages/Dashboard/Product/BrokerageAccount/Balances\"\n )\n }\n />\n )}\n redirector={requireLiveActive}\n />\n (\n \n import(\n \"./pages/Dashboard/Product/BrokerageAccount/AccountConfig\"\n )\n }\n />\n )}\n redirector={requireLogin}\n />\n (\n \n import(\n \"./pages/Dashboard/Product/BrokerageAccount/Account\"\n )\n }\n />\n )}\n redirector={requireLiveActive}\n />\n (\n \n import(\n \"./pages/Dashboard/Product/BrokerageAccount/Documents\"\n )\n }\n />\n )}\n redirector={requireLiveActive}\n />\n (\n \n import(\n \"./pages/Dashboard/Product/BrokerageAccount/DocumentRequests\"\n )\n }\n />\n )}\n redirector={requireLogin}\n />\n (\n \n import(\n \"./pages/Dashboard/Product/BrokerageAccount/Banking\"\n )\n }\n />\n )}\n redirector={requireLiveActive}\n />\n (\n \n useFlag(\"uix-v2\")\n ? import(\n \"./v2-deprecated/routes/dashboard/activities\"\n )\n : import(\n \"./pages/Dashboard/Product/BrokerageAccount/AccountActivities\"\n )\n }\n />\n )}\n redirector={requireLiveActive}\n />\n (\n \n import(\n \"./pages/Dashboard/Product/BrokerageAccount/Agreement\"\n )\n }\n />\n )}\n redirector={requireLogin}\n />\n (\n \n import(\n \"./pages/Dashboard/Product/BrokerageAccount/StockPage\"\n )\n }\n />\n )}\n />\n (\n \n import(\n \"./pages/Dashboard/Product/BrokerageAccount/OauthApps/OauthAppGrid\"\n )\n }\n />\n )}\n redirector={requireLogin}\n />\n (\n \n import(\"./pages/Dashboard/Product/Connect/SubmitApp\")\n }\n />\n )}\n redirector={requireLogin}\n />\n (\n \n import(\"./pages/Dashboard/Product/Connect/SubmitApp\")\n }\n />\n )}\n redirector={requireLogin}\n />\n (\n \n useFlag(\"uix-v2\")\n ? import(\"./v2/pages/connect/AppDetailsPage\")\n : import(\"./pages/Dashboard/Product/Connect/App\")\n }\n />\n )}\n redirector={requireLogin}\n />\n (\n \n useFlag(\"uix-v2\")\n ? import(\"./v2/pages/connect/AppPage\")\n : import(\"./pages/Dashboard/Product/Connect/Apps\")\n }\n />\n )}\n redirector={requireLogin}\n />\n (\n \n import(\n \"./pages/Dashboard/Product/BrokerageAccount/OauthApps/OauthAppGrid/OauthAppAgreement\"\n )\n }\n />\n )}\n redirector={requireLogin}\n />\n (\n \n import(\n \"./pages/Dashboard/Product/BrokerageAccount/OauthApps/OauthContainer\"\n )\n }\n />\n )}\n redirector={requireLogin}\n />\n (\n \n import(\n \"./pages/Dashboard/Product/BrokerageAccount/CoinTransfers\"\n )\n }\n />\n )}\n redirector={requireCrytpoActive}\n />\n {/* BUSINESS ROUTES */}\n import(\"./pages/Business\"))}\n redirector={requireLogin}\n />\n {/* CONTEST ROUTES */}\n import(\"./pages/Contest/Participant\")\n )}\n />\n import(\"./pages/Contest\"))}\n />\n {/* TODO: redirect based on account status */}\n }\n redirector={requireLogin}\n />\n {/* REDIRECTS */}\n (\n \n )}\n />\n (\n \n )}\n />\n (\n \n )}\n />\n (\n \n )}\n />\n }\n />\n }\n />\n {/* CATCH ALL, NOT FOUND - this creates a loop */}\n \n \n
\n
\n
\n
\n
\n
,\n document.getElementById(\"root\")\n );\n};\n\nrender();\n\n// Webpack Hot Module Replacement API\nif (module.hot) {\n module.hot.accept(\"components/AlpacaComponents/Layout\", () => {\n render();\n });\n}\n\nexport default history;\n","import Auth from \"@aws-amplify/auth\";\n\nimport axios, { AxiosRequestConfig } from \"axios\";\n\nconst instance = axios.create({ baseURL: (window as any).env.API_URL });\n\n// set auth header\ninstance.interceptors.request.use(async (config: AxiosRequestConfig) => {\n try {\n // check if authenticated\n const session = await Auth.currentSession();\n const idToken = session.getIdToken();\n config.headers.Authorization = `Bearer ${idToken.getJwtToken()}`;\n } catch (err) {\n // do nothing if not authenticated\n }\n return config;\n});\n\nexport default instance;\n","import React from \"react\";\n\nimport {\n BoxProps,\n Spinner as ChakraSpinner,\n SpinnerProps,\n Flex,\n} from \"@chakra-ui/react\";\n\nexport const Spinner = ({\n size,\n thickness,\n ...more\n}: BoxProps & SpinnerProps) => (\n \n \n \n);\n\nexport default Spinner;\n","// todo: move this into formatting utils file\n\nimport CryptoJS from \"crypto-js\";\n\nimport { GeocodeResult, getGeocode } from \"use-places-autocomplete\";\nimport { Account, OwnerDetails } from \"./api/rest/account\";\n\nexport interface ParsedAddress {\n street_address?: string;\n city?: string;\n state?: string;\n country?: string;\n postal_code?: string;\n}\n\nexport const emailIsValid = (email: string) => {\n return /\\S+@\\S+\\.\\S+/.test(email);\n};\n\nexport const weakEncrypt = (str: any) => {\n const encrypted = CryptoJS.AES.encrypt(str, window.env.SHARED_SECRET);\n return encrypted.toString();\n};\n\nexport const parseAddress = async (address: string): Promise => {\n const geocode: GeocodeResult[] = await getGeocode({ address });\n if (geocode.length === 0) {\n throw new Error(\"could not find address\");\n }\n\n const components = geocode[0].address_components;\n\n const getField = (name: string) => {\n for (const entry of components) {\n if (entry.types.includes(name)) {\n // State has to be the 2 or 3 character long version\n if (name === \"administrative_area_level_1\") {\n return entry.short_name;\n }\n return entry.long_name;\n }\n }\n console.error(\n `parse address: ${name} cannot be parsed. Please try another address.`\n );\n return null;\n };\n\n return {\n street_address: [getField(\"street_number\"), getField(\"route\")]\n .join(\" \")\n .trim(),\n city: getField(\"locality\") || getField(\"administrative_area_level_3\"),\n state: getField(\"administrative_area_level_1\"),\n country: getField(\"country\"),\n postal_code: getField(\"postal_code\"),\n } as ParsedAddress;\n};\n\nexport const normalizeTaxID = (\n val: string,\n country: string | undefined | null\n) => {\n if (country !== \"USA\") return val.replace(/\\W/g, \"\");\n const stripped = val.replace(/\\D/g, \"\");\n return `${stripped.slice(0, 3)}-${stripped.slice(3, 5)}-${stripped.slice(\n 5,\n 9\n )}`.replace(/-+$/, \"\");\n};\n\nexport const isDisclosed = (details: OwnerDetails) => {\n // possible fields\n const keys: Array = [\n \"is_politically_exposed\",\n \"is_discretionary\",\n \"is_affiliated_exchange_or_finra\",\n \"immediate_family_exposed\",\n \"is_control_person\",\n ];\n\n // are some or all of the fields populated\n return keys.some((key) => !!details[key]);\n};\n\nexport const isPaperOrOnboarding = (account: Account | undefined) => {\n // hotfix: override errant last_onboarding_step values\n if (account?.status === \"ACTIVE\") {\n return false;\n }\n\n const step = account?.last_onboarding_step;\n\n // if v2, check if we've reached the last step\n if (!!step) {\n return step !== \"finished\";\n }\n\n // for v1, check the account status\n return [\"ONBOARDING\", \"PAPER_ONLY\", \"SIGNED_UP\"].includes(\n account?.status || \"\"\n );\n};\n\nexport function getPercentageChange(\n oldNumber: string | number,\n newNumber: string | number\n) {\n const parsedOldNumber =\n typeof oldNumber === \"string\" ? parseFloat(oldNumber) : oldNumber;\n const parsedNewNumber =\n typeof newNumber === \"string\" ? parseFloat(newNumber) : newNumber;\n\n const decreaseValue = parsedOldNumber - parsedNewNumber;\n const increaseValue = parsedNewNumber - parsedOldNumber;\n const value = ((a: number) => (parsedNewNumber < parsedOldNumber ? -a : a))(\n ((parsedNewNumber > parsedOldNumber ? increaseValue : decreaseValue) /\n parsedOldNumber) *\n 100\n );\n\n if (!isFinite(value) || isNaN(value)) {\n return 0;\n }\n\n return value;\n}\n\nexport const renameFile = (file: File, name: string) =>\n new File([file], name, {\n type: file.type,\n lastModified: file.lastModified,\n });\n","import instance from \"../\";\n\nimport {\n CognitoUser,\n ISignUpResult,\n CognitoUserAttribute,\n} from \"amazon-cognito-identity-js\";\n\nimport { Auth } from \"aws-amplify\";\nimport { Path } from \"../../path\";\nimport { clearCookieStorage } from \"../../../reducers/auth/logout\";\nimport { parseUtmParams } from \"../../../utils\";\n\nexport type CognitoUserExtended = CognitoUser & {\n username?: string;\n challengeName?: string;\n challengeParam?: {\n CODE_DELIVERY_DESTINATION: string;\n userAttributes: {\n email: string;\n [attrName: string]: string;\n };\n codeParameter: string;\n };\n};\n\nexport const getAttributes = async (\n user: CognitoUser\n): Promise =>\n new Promise((resolve, reject) => {\n user.getUserAttributes((err, data) => {\n if (err || !data) return reject(err);\n resolve(data);\n });\n });\n\nexport const getCustomAttribute = (\n attributes: CognitoUserAttribute[],\n attr: string,\n defaultValue?: string\n): string => {\n for (const a of attributes) {\n if (a.Name === `custom:${attr}`) return a.Value;\n if (a.Name === attr) return a.Value;\n }\n\n if (defaultValue == undefined) {\n throw new Error(`cannot find custom attribute custom:${attr}`);\n }\n\n return defaultValue;\n};\n\nexport const UserActions = {\n async getCurrentUser(): Promise {\n return await Auth.currentAuthenticatedUser();\n },\n async confirmMultiFactorAuth(\n user: CognitoUser,\n code: string,\n mfaType: string\n ): Promise {\n return await Auth.confirmSignIn(user, code, mfaType as any);\n },\n async checkLoggedInStatus(): Promise {\n try {\n const user = await this.getCurrentUser();\n return Boolean(user);\n } catch (e) {\n console.error(e);\n return false;\n }\n },\n verifyRecoveryCode: async (\n cognitoId: string,\n verifyId: string,\n userPool: string\n ): Promise => {\n const path = `/accounts/${cognitoId}/account-recovery/${verifyId}?userpool=${userPool}`;\n const response = await fetch(`${window.env.API_URL}${path}`);\n\n if (!response.ok) {\n const errorData = await response.json();\n throw new Error(errorData.message || \"Invalid recovery code provided\");\n }\n },\n async registerUser(\n firstName: string,\n lastName: string,\n country: string,\n email: string,\n password: string,\n countryOfCitizenship: string,\n validationResponse: string,\n signupIPAddress: string\n ): Promise {\n const params = new URLSearchParams(window.location.search);\n const utmParams = parseUtmParams(params);\n\n return await Auth.signUp({\n username: email,\n password,\n attributes: {\n \"custom:firstName\": firstName,\n \"custom:lastName\": lastName,\n \"custom:country\": country,\n \"custom:citizenship\": countryOfCitizenship,\n \"custom:onboardingVersion\": \"v2\",\n \"custom:accountCreated\": \"no\",\n \"custom:crypto_broker\": params.has(\"xcrypto\") ? \"BS\" : undefined,\n \"custom:validationResponse\": validationResponse,\n \"custom:signupIPAddress\": signupIPAddress,\n ...(Object.keys(utmParams).length && {\n \"custom:utm_params\": JSON.stringify(utmParams),\n }),\n },\n });\n },\n userLogin(email: string, password: string): Promise {\n return Auth.signIn(email, password);\n },\n async userLogout(): Promise {\n await Auth.signOut();\n clearCookieStorage();\n window.sessionStorage.clear();\n window.location.href = Path.ROUTE_LOGIN;\n },\n async confirmUserSignUp(email: string, code: string): Promise {\n await Auth.confirmSignUp(email, code, {\n forceAliasCreation: true,\n });\n },\n async resendUserSignUp(username: string) {\n await Auth.resendSignUp(username);\n },\n async createUserAccountIfNotExist(user: CognitoUser) {\n const attributes = await getAttributes(user);\n const getAttr = (key: string, defaultValue?: string) =>\n getCustomAttribute(attributes, key, defaultValue);\n\n if (\n (await getAttr(\"onboardingVersion\", \"v1\")) === \"v2\" &&\n (await getAttr(\"accountCreated\")) !== \"yes\"\n ) {\n await instance.post(\"/accounts\", {\n email: getAttr(\"email\"),\n first_name: getAttr(\"firstName\"),\n last_name: getAttr(\"lastName\"),\n country: getAttr(\"country\"),\n country_of_citizenship: getAttr(\"citizenship\"),\n source: getAttr(\"signup_source\", \"\"),\n crypto_broker: getAttr(\"crypto_broker\", \"\"),\n utm_params: getAttr(\"utm_params\", \"\"),\n clearing_broker: \"VELOX\",\n version: \"v2\",\n });\n\n // update attribute if account created\n await Auth.updateUserAttributes(user, {\n \"custom:accountCreated\": \"yes\",\n });\n }\n },\n};\n\n// @deprecated use UserActions instead\nexport const getCurrentUser = UserActions.getCurrentUser;\n// @deprecated use UserActions instead\nexport const confirmMFA = UserActions.confirmMultiFactorAuth;\n\n// @deprecated use UserActions instead\nexport const isLoggedIn = UserActions.checkLoggedInStatus;\n\n// @deprecated use UserActions instead\nexport const register = UserActions.registerUser;\n\n// @deprecated use UserActions instead\nexport const login = UserActions.userLogin;\n\n// @deprecated use UserActions instead\nexport const signOut = UserActions.userLogout;\n\n// @deprecated use UserActions instead\nexport const confirmSignUp = UserActions.confirmUserSignUp;\n\n// @deprecated use UserActions instead\nexport const resendSignUp = UserActions.resendUserSignUp;\n\n// @deprecated use UserActions instead\nexport const createAccountIfNotExist = UserActions.createUserAccountIfNotExist;\n\n// @deprecated use UserActions instead\nexport const getCustomAttr = getCustomAttribute;\n\n// @deprecated use UserActions instead\nexport const AuthService = {\n getCurrentUser,\n confirmMFA,\n isLoggedIn,\n register,\n login,\n signOut,\n confirmSignUp,\n resendSignUp,\n createAccountIfNotExist,\n getAttributes,\n getCustomAttr,\n};\n","export const initializeIntercom = (account) => {\n window.Intercom('boot', {\n app_id: \"p7a9jdob\",\n user_id: account.details.owner_id, \n status: account.details.status,\n firstName: account.details.given_name,\n lastName: account.details.family_name,\n portfolioValue: account.account.equity,\n tradingBlocked: account.account.trading_blocked,\n country: account.details.country_of_tax_residence,\n state: account.details.state,\n clearing_broker: account.account.clearing_broker,\n created_at: account.account.created_at,\n id: account.details.owner_id,\n name: account.account.name,\n });\n}\n\nexport const updateIntercom = (ownerId, data) => {\n window.Intercom('update', {\n user_id: ownerId, \n ...data\n });\n};\n\n","/**\n * The left sidebar main nav menu data.\n *\n * EXTERNAL LINKS\n * To make an external link work, have `url` be some external http/https link.\n * Then ensure the `key` value starts with \"http\" (ie. \"httpMyExternalLink\").\n * Optionally set `target` (will be \"_blank\" by default).\n *\n * DYNAMIC MENU ITEM TITLES\n * Certain menu item titles need to change, for example if a user has not yet\n * created a brokerage account, it should say \"Start\" instead of \"Go to...\"\n * So a function can be used for the `title` key's value where it will be given\n * the props (which includes info like the product, accounts, etc.) to help make\n * the determination.\n *\n * PRODUCTS\n * The dashboard is now taking on a product \"context\" that is to indicate which Alpaca\n * product/service (and account within that product) the user is working with. While we\n * could load different menuData.js files (TODO: maybe a good refactor), we can choose when\n * to show menu items by setting a `product` key value. It's just an array of names for now.\n *\n * HIDE IF...\n * Menu items can be completely hidden under certain circumstances as well. If a `hideIf`\n * key is provided for a menu item, it's function value will be given props. It then can\n * make the determination to hide the item if it returns true.\n *\n * Remember: If async data from props is needed, it may be good to test if that data is\n * available yet. It will prevent \"flicker\" where a menu item appears and then hides\n * on a re-render after data loads from the API or something.\n *\n * MODALS\n * To use a modal for a link, ensure `url` is set to \"modal\"\n * Currently, these are handled manually in MenuLeft/index.js\n * So a new modal will need to be created there and shown.\n * TODO: Allow another key here like `modalContent` to return a component or at least link to one.\n * Keeping this file cleaner, maybe loadable() ?\n *\n */\nimport { isPaperOrOnboarding, isLiveAccountClosedOrDisabled } from \"selectors\";\nimport { inSupportedLocation } from \"src/utils/crypto\";\n\nconst enableCryptoTransfers =\n JSON.parse(window.env.ENABLE_COIN_TRANSFERS) === true;\n\nexport const isNotFullActiveAccount = (account) =>\n !account.account ||\n isPaperOrOnboarding(account) ||\n isLiveAccountClosedOrDisabled(account);\n\nconst menuData = [\n {\n title: \"Overview\",\n key: \"brokerageOverviewDashboard\",\n url: \"/brokerage/dashboard/overview\",\n icon: \"fa fa-home\",\n additionalClassNames: \"brokerage-item\",\n product: [\"live\"],\n hideIf: (props) => {\n const { account = {} } = props;\n return isNotFullActiveAccount(account);\n },\n },\n {\n title: \"Paper Overview\",\n key: \"paperOverviewDashboard\",\n url: \"/paper/dashboard/overview\",\n icon: \"fa fa-home\",\n product: [\"paper\"],\n },\n {\n title: \"Positions\",\n key: \"brokeragePortfolio\",\n url: \"/brokerage/dashboard/portfolio\",\n icon: \"fa fa-briefcase\",\n additionalClassNames: \"brokerage-item\",\n product: [\"live\"],\n hideIf: (props) => {\n const { account = {} } = props;\n return isNotFullActiveAccount(account);\n },\n },\n {\n title: \"Orders\",\n key: \"brokerageOrders\",\n url: \"/brokerage/dashboard/orders\",\n icon: \"fa fa-file\",\n additionalClassNames: \"brokerage-item\",\n product: [\"live\"],\n hideIf: (props) => {\n const { account = {} } = props;\n return isNotFullActiveAccount(account);\n },\n },\n {\n title: \"Account\",\n key: \"liveAccount\",\n product: [\"live\"],\n icon: \"fa fa-id-card\",\n additionalClassNames: \"brokerage-item\",\n items: [\n {\n title: \"Activities\",\n key: \"brokerageAccountActivities\",\n url: \"/brokerage/dashboard/account-activities\",\n icon: \"fa fa-file-alt\",\n additionalClassNames: \"brokerage-item\",\n product: [\"live\"],\n },\n {\n title: \"Balances\",\n key: \"brokerageBalances\",\n url: \"/brokerage/dashboard/balances\",\n additionalClassNames: \"brokerage-item\",\n icon: \"fa fa-wallet\",\n product: [\"live\"],\n },\n {\n title: \"Profile\",\n key: \"brokerageProfile\",\n url: \"/brokerage/dashboard/profile\",\n additionalClassNames: \"brokerage-item\",\n icon: \"fa fa-user\",\n product: [\"live\"],\n },\n {\n title: \"Documents\",\n key: \"brokerageDoc\",\n url: \"/brokerage/dashboard/documents\",\n icon: \"fa fa-file-alt\",\n additionalClassNames: \"brokerage-item\",\n product: [\"live\"],\n },\n {\n title: \"Configuration\",\n key: \"accountConfiguration\",\n url: \"/brokerage/dashboard/config\",\n additionalClassNames: \"brokerage-item\",\n icon: \"fa fa-cog\",\n product: [\"live\"],\n },\n ],\n hideIf: (props) => {\n const { account = {} } = props;\n return isNotFullActiveAccount(account);\n },\n },\n {\n title: \"Paper Positions\",\n key: \"paperPortfolio\",\n url: \"/paper/dashboard/portfolio\",\n icon: \"fa fa-briefcase\",\n product: [\"paper\"],\n },\n {\n title: \"Paper Orders\",\n key: \"paperOrders\",\n url: \"/paper/dashboard/orders\",\n icon: \"fa fa-file\",\n product: [\"paper\"],\n },\n {\n title: \"Paper Account\",\n key: \"paperAccount\",\n icon: \"fa fa-id-card\",\n product: [\"paper\"],\n items: [\n {\n title: \"Activities\",\n key: \"paperAccountActivities\",\n url: \"/paper/dashboard/account-activities\",\n icon: \"fa fa-file-alt\",\n product: [\"paper\"],\n },\n {\n title: \"Balances\",\n key: \"paperBalances\",\n url: \"/paper/dashboard/balances\",\n icon: \"fa fa-wallet\",\n product: [\"paper\"],\n },\n {\n title: \"Configuration\",\n key: \"accountConfiguration\",\n url: \"/paper/dashboard/config\",\n icon: \"fa fa-cog\",\n product: [\"paper\"],\n },\n ],\n },\n\n {\n title: \"Banking\",\n key: \"brokerageBanking\",\n url: \"/brokerage/banking\",\n icon: \"fa fa-landmark\",\n additionalClassNames: \"brokerage-item\",\n product: [\"live\"],\n hideIf: (props) => {\n const { account = {} } = props;\n return isNotFullActiveAccount(account);\n },\n },\n // allows users with closed accounts to still access old documents\n {\n title: \"Documents\",\n key: \"brokerageDoc\",\n url: \"/brokerage/dashboard/documents\",\n icon: \"fa fa-file-alt\",\n additionalClassNames: \"brokerage-item\",\n product: [\"live\"],\n hideIf: (props) => {\n const { account = {} } = props;\n return !account.account || !isLiveAccountClosedOrDisabled(account);\n },\n },\n {\n divider: true,\n product: [\"paper\"],\n },\n {\n divider: true,\n product: [\"live\"],\n hideIf: (props) => {\n const { account = {} } = props;\n return (\n !account.account ||\n isPaperOrOnboarding(account) ||\n (props.clearingBroker &&\n props.clearingBroker !== \"ETC\" &&\n props.clearingBroker !== \"VELOX\")\n );\n },\n },\n {\n title: \"Alpaca Connect\",\n key: \"brokerageApps\",\n url: \"/apps\",\n icon: \"fa fa-th\",\n product: [\"live\", \"paper\"],\n },\n {\n divider: true,\n product: [\"paper\", \"live\"],\n },\n {\n title: \"Documentation\",\n key: \"httpResourcesDashboard\",\n url: \"https://docs.alpaca.markets\",\n target: \"_blank\",\n icon: \"fa fa-book\",\n },\n {\n title: \"Status Page\",\n key: \"httpResourcesStatusPage\",\n url: \"https://status.alpaca.markets\",\n target: \"_blank\",\n icon: \"fa fa-notes-medical\",\n },\n {\n title: \"Community Slack\",\n key: \"httpSlackCommunity\",\n url: \"https://alpaca.markets/slack\",\n target: \"_blank\",\n icon: \"fab fa-slack-hash\",\n additionalClassNames: \"slack-community-link\",\n },\n {\n title: \"Community Forum\",\n key: \"httpForumCommunity\",\n url: \"https://forum.alpaca.markets/\",\n target: \"_blank\",\n icon: \"fas fa-users\",\n additionalClassNames: \"forum-community-link\",\n },\n];\n\nif (enableCryptoTransfers) {\n menuData.splice(9, 0, {\n title: \"Crypto Transfers\",\n key: \"brokerageCryptoTransfers\",\n url: \"/brokerage/dashboard/crypto-transfers\",\n icon: \"fas fa-exchange-alt\",\n additionalClassNames: \"brokerage-item\",\n isNew: true,\n product: [\"live\"],\n hideIf: (props) => {\n const { accountDetails, account = {} } = props;\n\n if (!inSupportedLocation(accountDetails)) {\n return true;\n }\n\n return isNotFullActiveAccount(account);\n },\n });\n}\nexport default menuData;\n","export const isCryptoEnabled = (countryCode, state, infoMap) => {\n if (countryCode === \"USA\") {\n const supportedStates = window.env.SUPPORTED_CRYPTO_STATES || \"\";\n return supportedStates.split(\",\").includes(state?.toUpperCase());\n }\n\n return Boolean(infoMap?.[countryCode]?.crypto_enabled);\n};\n\nexport const inSupportedLocation = (accountDetails) => {\n const supportedCountries =\n window.env.SUPPORTED_CRYPTO_TRANSFER_COUNTRIES?.split(\",\") ?? [];\n\n const supportedStates =\n window.env.SUPPORTED_CRYPTO_STATES?.split(\",\") ?? [];\n\n return _inSupportedLocation(\n accountDetails,\n supportedCountries,\n supportedStates\n );\n};\n\nexport const _inSupportedLocation = (\n accountDetails,\n supportedCountries,\n supportedStates\n) => {\n if (!accountDetails) return false;\n const { state, country_of_tax_residence } = accountDetails;\n\n if (supportedCountries.includes(country_of_tax_residence)) {\n if (country_of_tax_residence === \"USA\") {\n return supportedStates.includes(state);\n }\n return true;\n }\n\n return false;\n};\n","import styled, { css } from \"styled-components\";\nimport Loader from \"react-loader-spinner\";\nimport { Button, Input, Modal, notification, Select } from \"antd\";\nimport { currencyCloud, tradeAccount } from \"src/api\";\n\nexport const BaseCopy =\n \"Alpaca has partnered with CurrencyCloud to facilitate \";\nexport const IntroCopy =\n BaseCopy + \"cross border payments as fast and as cheap as local rails.\";\n\n// General Transfer\nexport const TransferHeadCopy =\n BaseCopy +\n \"international deposits and withdrawals, faster and cheaper than traditional wire.\";\n\n// Deposits\nexport const DepositHeadCopy =\n BaseCopy +\n \"you funding your account faster and cheaper than traditional wire.\";\nexport const DepositBodyText = `Please make a local transfer from your favorite bank account / mobile banking app to the account details above.\n Your funds will be sent to Alpaca’s bank account in your country, and as soon as the funds hit our account we will credit your Alpaca account with the funds.`;\nexport const DepositFee =\n \"Alpaca charges a 1.5% (maximum $25) transaction fee on deposits. Minimum deposit equivalent to $2.00.\";\nexport const DepositFeeNote = `Note: For European users, your bank may charge you to send over SWIFT. Due to Brexit some banks may charge additional fees, even though the European Payment Council has extended the UK's membership to SEPA (European rails). For any questions please reach out to support@alpaca.markets.`;\n\n// Withdrawals\nexport const WithdrawalHeadCopy =\n BaseCopy + \"withdrawing your funds faster and cheaper than traditional wire.\";\nexport const WithdrawalBodyText =\n \"Your funds will be sent to your bank account.\";\nexport const WithdrawalFee = `Alpaca charges a 1.5% transaction (maximum $25) fee on withdrawals. Minimim withdrawal equivalent to $2.00.`;\n\nexport const BaseContainer = styled.div`\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n max-width: ${(props) => (props.nonModalMode ? \"none\" : \"528px\")};\n border-radius: 5px;\n text-align: center;\n margin-top: 2.25rem;\n`;\n\nconst compactBreakPoint = `@media only screen and (min-width: 991px) and (max-width: 1600px)`;\n\nexport const TransferButton = styled.div`\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n border: 2px solid #ffd700;\n border-radius: 4px;\n padding: 32px 45px;\n max-height: 108px;\n max-width: 248px;\n cursor: pointer;\n width: ${(props) => (props.compact ? \"45%\" : \"\")};\n\n ${compactBreakPoint} {\n width: 100%;\n margin-top: 1rem;\n }\n`;\n\nexport const TransferButtonRow = styled.div`\n display: flex;\n flex-direction: row;\n width: 100%;\n justify-content: space-between;\n margin-top: 2.25rem;\n\n ${compactBreakPoint} {\n ${(props) =>\n props.compact ? \"flex-direction: column; align-items: center;\" : \"\"}\n }\n`;\n\nexport const GenerateContainer = styled(BaseContainer)`\n border: 1px solid #000000;\n padding: 40px 64px;\n`;\n\nexport const TransferContainer = styled(BaseContainer)``;\n\nexport const GenerateButton = styled(Button)`\n max-height: 36px;\n margin-top: 3rem;\n`;\n\nexport const GenerateLoader = styled(Loader)`\n margin-bottom: 3rem;\n margin-top: 1rem;\n`;\n\nexport const CCTextNormal = styled.span`\n font-size: 14px;\n color: #000;\n`;\n\nexport const CCTextBold = styled.span`\n font-size: 20px;\n font-weight: 500;\n color: #000;\n`;\n\nexport const CCModalContainer = styled.div`\n padding: 1rem;\n display: flex;\n flex-direction: column;\n align-items: center;\n ${(props) => (props.nonModalMode ? \"text-align:left;\" : \"\")}\n`;\n\nexport const BankDetailsContainer = styled(CCModalContainer)`\n border: 1px solid #000000;\n margin-top: 1rem;\n max-width: 400px;\n border-radius: 5px;\n min-width: auto;\n`;\n\nexport const CCModal = styled(Modal)`\n min-width: 604px;\n`;\n\nexport const ModalCopy = styled(CCTextNormal)`\n margin-bottom: 0.75rem;\n align-self: start;\n ${(props) =>\n props.isError &&\n css`\n color: #cc2f3c;\n `}\n`;\n\nexport const ModalHeader = styled(CCTextBold)`\n font-size: 24px;\n margin-bottom: 1.5rem;\n`;\n\nexport const ModalSubcontainer = styled.div`\n display: flex;\n flex-direction: column;\n align-items: center;\n padding: 24px;\n border: 1px solid #000000;\n border-radius: 5px;\n width: 100%;\n margin-bottom: 2rem;\n`;\n\nexport const DepositInfoRow = styled.div`\n width: 100%;\n margin-bottom: 0.75rem;\n display: flex;\n`;\n\nexport const DepositInfo = styled.div`\n display: flex;\n flex-direction: column;\n max-width: 60%;\n`;\n\nexport const CCInput = styled(Input)`\n border: 1px solid #000000;\n min-height: 37px;\n margin-bottom: 2.25rem;\n margin-top: 0.25rem;\n\n ${(props) => (!props.$valid ? \"border: 1px solid #fb434a;\" : \"\")}\n`;\n\nexport const CopyButtonIcon = styled.img`\n max-height: 18px;\n cursor: pointer;\n margin-left: 0.75rem;\n`;\n\nexport const CopyButton = styled.div`\n align-self: end;\n`;\n\nexport const CountrySelect = styled(Select)`\n width: 100%;\n min-height: 37px;\n border: 1px solid #000;\n border-radius: 4px;\n margin-bottom: 2.25rem;\n`;\n\nexport const ButtonRow = styled.div`\n display: flex;\n`;\n\nexport const BenefDetailsContainer = styled.div`\n width: 100%;\n`;\n\nexport const BenefDetailHeader = styled.span`\n font-size: 14px;\n margin-left: 0.75rem;\n\n ${(props) => (!props.$valid ? \"color: #fb434a;\" : \"\")}\n`;\n\nexport const WithdrawableText = styled.span`\n opacity: 60%;\n font-size: 14px;\n margin-right: 0.5rem;\n`;\nexport const WithdrawableBold = styled(WithdrawableText)`\n font-weight: 600;\n opacity: 100%;\n margin-left: 0.5rem;\n`;\n\nexport const BenefDetailsPlaceholders = {\n account_number: \"e.g. 123xxxx\",\n iban: \"e.g. AABBCCCCDDDDDDEEEEEEEE\",\n bic_swift: \"e.g. ABCD\",\n sort_code: \"e.g. 123456\",\n aba: \"e.g. 123456789\",\n bsb_code: \"e.g. XXYZZZ\",\n bank_code: \"e.g. ABCD\",\n branch_code: \"e.g. 1234\",\n clabe: \"e.g. AAABBBCCCCCCCCCCCD\",\n cnaps: \"e.g. 123412341234\",\n ifsc: \"e.g. ABCD1A2B3CD\",\n};\n\n// creates an associated CC sub account along with a beneficiary\nexport const generateCurrencyCloudAccount = (\n accountId,\n benefReq,\n setDepositDetails\n) => {\n const path = `/currency_cloud/${accountId}/funding_account`;\n fetch(window.env.API_URL + path, { method: \"post\" })\n .then(() => {\n createBeneficiary(accountId, benefReq, setDepositDetails);\n })\n .catch(console.error);\n};\n\nexport const getCurrencyCloudAccount = (accountId, setDepositDetails) => {\n const endpoint = currencyCloud.get({\n accountId,\n });\n endpoint()\n .then((resp) => {\n setDepositDetails(resp);\n })\n .catch((e) => {\n console.error(e);\n });\n};\n\nexport const getBeneficiaryDetails = (\n accountId,\n setBenefDetails,\n setLoading\n) => {\n const endpoint = currencyCloud.beneficiary.get({\n accountId,\n });\n endpoint()\n .then((resp) => {\n setBenefDetails(resp.required_details[0]);\n setLoading(false);\n })\n .catch((e) => {\n console.error(e);\n });\n};\n\nexport const createBeneficiary = (accountId, req, setDepositDetails) => {\n const endpoint = currencyCloud.beneficiary.create(\n {\n accountId,\n },\n req\n );\n endpoint()\n .catch(console.error)\n .finally(() => getCurrencyCloudAccount(accountId, setDepositDetails));\n};\n\nexport const getStatus = (accountId, setBeneficiaryExists, setLoading) => {\n const endpoint = currencyCloud.status({\n accountId,\n });\n endpoint().then((resp) => {\n // bool value comes as a string in the response\n setBeneficiaryExists(resp.beneficiary_exists === \"true\");\n setLoading(false);\n });\n};\n\nexport const createWithdrawal = (accountId, amount, onSuccess) => {\n // TODO: update to use the general API object we use for CC. This is a workaround as this\n // endpoint currently returns nothing as a response for 200s and the resp.json() in rest.js throws an error.\n const path = `/currency_cloud/${accountId}/transfers`;\n fetch(window.env.API_URL + path, {\n method: \"post\",\n body: JSON.stringify({ amount }),\n })\n .then(() => {\n notification.open({\n type: \"success\",\n message: \"Transfer successfully initiated!\",\n });\n onSuccess();\n })\n .catch((e) => {\n console.error(e);\n });\n};\n\nexport const getCashWithdrawable = (accountId, setCashWithdrawable) => {\n const endpoint = tradeAccount.getETC({\n accountId,\n });\n endpoint().then((resp) => {\n setCashWithdrawable(resp.cash_withdrawable);\n });\n};\n","import instance from \"..\";\n\nexport interface Billing {\n lifetimeSubCount: number;\n}\n\nexport const getBillingOverview = async (): Promise => {\n const res = await instance.get(\"/billing/overview\");\n\n return res.data;\n};\n\nexport interface CryptoFeeStructure {\n fee_structure: {\n [key: string]: {\n volume: string;\n maker: string;\n taker: string;\n };\n };\n}\n\nexport const getCryptoFeeStructure = async (): Promise => {\n const res = await instance.get(\"/crypto/fee-structure\");\n return res.data;\n};\n\nexport interface CryptoMonthlyVolume {\n volume: string;\n}\n\nexport const getCryptoMonthlyVolume = async (\n accountID: string\n): Promise => {\n const res = await instance.get(\n `/accounts/${accountID}/crypto/monthly-volume`\n );\n return res.data;\n};\n","import { useToast } from \"@chakra-ui/toast\";\nimport { defaultToastSettings, getErrorMessage } from \".\";\nimport { useMutation, MutationFunction, UseMutationOptions } from \"react-query\";\n\nexport function useMutationRequest(\n request: MutationFunction,\n options?: UseMutationOptions\n) {\n const toast = useToast();\n const mutation = useMutation(request, {\n onError: (e) => {\n const key = \"errorToastKey\";\n const message = getErrorMessage(e);\n toast({\n id: key,\n description: message,\n ...defaultToastSettings,\n });\n },\n ...options,\n });\n\n return mutation;\n}\n\nexport default useMutationRequest;\n","// todo: support v2\nexport const getHasFinishedOnboarding = (details) =>\n details?.margin_agreement_signed_at || details?.customer_agreement_signed_at;\n\nexport const getAgreementPending = (details, cryptoEnabled) => {\n // if crypto enabled and agreement not yet signed\n if (cryptoEnabled && !details?.crypto_agreement_signed_at) {\n return true;\n }\n\n // if margin or customer agreement not yet signed\n if (!getHasFinishedOnboarding(details)) {\n return true;\n }\n\n // no pending agreements\n return false;\n};\n\nexport const getScrolledToBottom = (id, element) => {\n const parent = element.target.getBoundingClientRect();\n const child = document.getElementById(id).getBoundingClientRect();\n\n return child.y <= parent.y + parent.height;\n};\n","import instance from \"../\";\n\nimport { CountryInfo } from \"src/v2-deprecated/types\";\n\nexport interface PreviousStepResponse {\n new_step: string;\n}\n\nexport type CountryInfos = {\n [key: string]: CountryInfo;\n};\n\nexport type DisclosureData = {\n is_control_person: boolean;\n is_politically_exposed: boolean;\n immediate_family_exposed: boolean;\n is_discretionary: boolean;\n non_solicitation_answer: string;\n};\n\nexport interface AddressStepPayload {\n last_name?: string;\n first_name?: string;\n postal_code?: string;\n city?: string;\n state?: string;\n phone_number?: string;\n tax_id?: string;\n date_of_birth?: string;\n tax_id_type?: string;\n unit?: string;\n country?: string;\n street_address?: string[];\n permanent_resident?: boolean;\n signup_step?: string;\n country_of_citizenship?: string;\n country_of_tax_residence?: string;\n margin_agreement_signed?: boolean;\n customer_agreement_signed?: boolean;\n customer_agreement_revision?: string;\n visa_type?: string;\n visa_expiration_date?: string;\n country_of_birth?: string;\n}\n\nexport interface ESignAudit {\n agreement: string;\n signed_at: string;\n}\n\nexport interface AffiliateData {\n type: string;\n street_address?: string[];\n city?: string;\n state?: string;\n postal_code?: string;\n country?: string;\n company_name?: string;\n company_symbol?: string;\n additional_name?: string;\n compliance_email?: string;\n given_name?: string;\n family_name?: string;\n}\n\nexport const acceptW8 = (accountID: string) =>\n instance.post(`/accounts/${accountID}/taxfiles/w_8ben/accept`, {});\n\nexport const createAffiliate = (accountID: string, payload: AffiliateData) =>\n instance.post(`/accounts/${accountID}/affiliates`, payload);\n\nexport const addressPatch = (accountID: string, payload: AddressStepPayload) =>\n instance.patch(`/accounts/${accountID}/steps/next/address_step`, payload);\n\nexport const disclosuresPatch = (\n accountID: string,\n payload: Partial\n) =>\n instance.patch(`/accounts/${accountID}/steps/next/disclosures_step`, payload);\n\nexport const confirmDetails = (accountID: string) =>\n instance.patch(`/accounts/${accountID}/steps/next/confirmation_step`, {});\n\nexport const kycPatch = (accountID: string) =>\n instance.patch(`/accounts/${accountID}/steps/next/kyc_step`, {});\n\nexport const getRestrictedCountries = async (): Promise =>\n (await instance.get(\"/restricted-countries\")).data;\n\nexport const getCountryInfos = async (): Promise =>\n (await instance.get(\"/country-infos\")).data;\n\nexport const previousStepPatch = (\n accountID: string\n): Promise =>\n instance.patch(`/accounts/${accountID}/steps/previous`, {});\n\nexport const resetPatch = (accountID: string, payload: AddressStepPayload) =>\n instance.patch(`/accounts/${accountID}/steps/reset`, payload);\n","import { createAction, createReducer } from \"redux-act\";\nimport api from \"api\";\n\n/**\n * ACTIONS\n */\nconst _setCountryInfo = createAction(\"COUNTRY_CONFIG\");\n\n/**\n * API CALLS\n */\nexport const getCountryInfos = () => (dispatch) => {\n dispatch(api.countries.getCountryInfos())\n .then((infoMap) => dispatch(_setCountryInfo({ infoMap })))\n .catch(() => console.error(\"error fetching country info map\"));\n};\n\n/**\n * REDUCER\n */\nconst initialState = {};\nexport default createReducer(\n {\n [_setCountryInfo]: (state, { infoMap }) => ({ ...state, infoMap }),\n },\n initialState\n);\n","import { createAction, createReducer } from \"redux-act\";\nimport { handleSessionExpire } from \"./alpacaAuth/session\";\nimport { billing } from \"api\";\n\nconst REDUCER = \"billing\";\nconst NS = `@@${REDUCER}/`;\n\nconst _setPlans = createAction(`${NS}SET_PLANS`);\nconst _billingCreated = createAction(`${NS}BILLING_CREATED`);\nconst _billingCanceled = createAction(`${NS}BILLING_CANCELED`);\nconst _billingUpdated = createAction(`${NS}BILLING_UPDATED`);\nconst _getOverview = createAction(`${NS}BILLING_OVERVIEW`);\n\nconst _processStripeResponse = async (stripe, overview) => {\n const { paymentIntentSecret, setupIntentSecret } = overview;\n\n if (paymentIntentSecret) {\n const { error, paymentIntent } = await stripe.confirmCardPayment(\n paymentIntentSecret\n );\n\n if (error) {\n return Promise.reject(error);\n }\n\n if (paymentIntent.status === \"succeeded\") {\n return Promise.resolve(overview);\n } else if (paymentIntent.status === \"requires_payment_method\") {\n return Promise.reject(paymentIntent.last_payment_error);\n }\n }\n\n if (setupIntentSecret) {\n const { error, setupIntent } = await stripe.confirmCardSetup(\n setupIntentSecret\n );\n\n if (error) {\n return Promise.reject(error);\n }\n\n if (setupIntent.status === \"succeeded\") {\n return Promise.resolve(overview);\n } else if (setupIntent.status === \"requires_payment_method\") {\n return Promise.reject(setupIntent.last_setup_error);\n }\n }\n\n return Promise.resolve(overview);\n};\n\n/**\n * getPlans will retrieve a list of all plans\n */\nexport const getPlans = () => (dispatch) =>\n dispatch(billing.plans()).then((plans) => dispatch(_setPlans({ plans })));\n\n/**\n * createStripeSubscription will create a stripe subscription for the user\n */\nexport const createStripeSubscription = (\n stripe,\n token,\n plan,\n address,\n coupon\n) => (dispatch, getState) => {\n return handleSessionExpire(\n billing.stripe\n .create({}, { token, plan, address, coupon })(dispatch, getState)\n .then((overview) => _processStripeResponse(stripe, overview))\n .then((overview) => dispatch(_billingCreated({ overview }))),\n dispatch\n );\n};\n\n/**\n * createAlpacaSubscription will create a subscription via brokerage for the user\n */\nexport const createAlpacaSubscription = (plan, coupon) => (\n dispatch,\n getState\n) => {\n return handleSessionExpire(\n billing.alpaca\n .create({}, { plan, coupon })(dispatch, getState)\n .then(() => dispatch(getBillingOverview())),\n dispatch\n );\n};\n\n/**\n * cancelstripeSubscription will cancel the subscription via brokerage for the user\n */\nexport const cancelStripeSubscription = (reason) => (dispatch, getState) => {\n return handleSessionExpire(\n billing.stripe\n .cancel({}, { reason })(dispatch, getState)\n .then(async (overview) => dispatch(_billingCanceled({ overview }))),\n dispatch\n );\n};\n\n/**\n * cancelAlpacaSubscription will cancel the subscription via brokerage for the user\n */\nexport const cancelAlpacaSubscription = (reason) => (dispatch, getState) => {\n return handleSessionExpire(\n billing.alpaca\n .cancel({}, { reason })(dispatch, getState)\n .then(async (overview) => dispatch(_billingCanceled({ overview }))),\n dispatch\n );\n};\n\n/**\n * updateStripeSubscription will update the subscription via stripe for the user\n */\nexport const updateStripeSubscription = (stripe, token) => (\n dispatch,\n getState\n) => {\n return handleSessionExpire(\n billing.stripe\n .update({}, { token })(dispatch, getState)\n .then((overview) => _processStripeResponse(stripe, overview))\n .then((overview) => dispatch(_billingUpdated({ overview }))),\n dispatch\n );\n};\n\n/**\n * getBillingOverview will retrieve the billing overview for the user\n */\nexport const getBillingOverview = () => (dispatch, getState) => {\n return handleSessionExpire(\n billing\n .overview({})(dispatch, getState)\n .then(async (overview) => dispatch(_getOverview({ overview })))\n .catch(console.error),\n dispatch\n );\n};\n\n// Export this reducer\nconst initialState = {};\nexport default createReducer(\n {\n [_setPlans]: (state, { plans }) => {\n return { ...state, plans };\n },\n [_billingCreated]: (state, { overview }) => {\n return { ...state, overview };\n },\n [_getOverview]: (state, { overview }) => {\n return { ...state, overview };\n },\n [_billingCanceled]: (state, { overview }) => {\n return { ...state, overview };\n },\n [_billingUpdated]: (state, { overview }) => {\n return { ...state, overview };\n },\n },\n initialState\n);\n","import { createAction, createReducer } from \"redux-act\";\nimport api from \"api\";\nimport { handleSessionExpire } from \"./alpacaAuth/session\";\nimport { getAccountIdAndJWT, getAccountIdForProduct } from \"selectors\";\nimport { eventTracker } from \"src/utils/eventTracker\";\n\n// access keys\nconst _setAccessKeys = createAction(`SET_ACCESS_KEYS`);\n// call when creating new paper account because an access key for the old paper account\n// would still be in state\nexport const unsetAccessKeys = createAction(`UNSET_ACCESS_KEYS`);\n\n/**\n * listAccessKeys will retrieve all API access keys for a user\n */\nexport const listAccessKeys = () => (dispatch, getState) => {\n const { token } = getAccountIdAndJWT(getState());\n\n const accountId = getAccountIdForProduct(getState(), \"live\");\n const paperAccountId = getAccountIdForProduct(getState(), \"paper\");\n\n // If you don't get this reference, figure it out immediately.\n const nakedEyes = [];\n if (accountId) {\n nakedEyes.push(\n handleSessionExpire(\n api.accessKeys\n .list(accountId, token)\n .then((payload) =>\n dispatch(_setAccessKeys({ accessKeys: payload, product: \"live\" }))\n )\n .catch(console.error),\n dispatch\n )\n );\n }\n\n if (paperAccountId) {\n nakedEyes.push(\n handleSessionExpire(\n api.paperAccessKeys\n .list(paperAccountId, token)\n .then((payload) =>\n dispatch(_setAccessKeys({ accessKeys: payload, product: \"paper\" }))\n )\n .catch(console.error),\n dispatch\n )\n );\n }\n\n return Promise.all(nakedEyes);\n};\n\n/**\n * createAccessKey will re/create an API access key for an account\n *\n * @param {String} product The product (paper or live)\n */\nexport const createAccessKey = (product) => (dispatch, getState) => {\n const { token } = getAccountIdAndJWT(getState());\n\n const accountId = getAccountIdForProduct(getState(), \"live\");\n const paperAccountId = getAccountIdForProduct(getState(), \"paper\");\n\n if (product) {\n eventTracker(\"Created Access Key\", {\n category: \"API\",\n label: product,\n });\n\n if (product === \"paper\") {\n // Intercom can not use event labels like GA and other things can.\n // So it needs its own special event in order to build e-mail campaign rules.\n eventTracker(\"Created Paper Access Key\", {\n category: \"API\",\n });\n return handleSessionExpire(\n api.paperAccessKeys.create(paperAccountId, token),\n dispatch\n );\n }\n if (product === \"live\") {\n // Intercom can not use event labels like GA and other things can.\n // So it needs its own special event in order to build e-mail campaign rules.\n eventTracker(\"Created Live Access Key\", {\n category: \"API\",\n });\n return handleSessionExpire(\n api.accessKeys.create(accountId, token),\n dispatch\n );\n }\n }\n return;\n};\n\n/**\n * deleteAccessKey will delete an API key\n */\nexport const deleteAccessKey = (key) => (dispatch, getState) => {\n const { token } = getAccountIdAndJWT(getState());\n\n // Removing based on product. Paper/live, more in the future.\n if (key && key.product && key.id) {\n eventTracker(\"Deleted Access Key\", {\n category: \"API\",\n label: key.product,\n });\n\n if (key.product === \"live\") {\n return handleSessionExpire(\n // NOTE: key.account_id could be either the paper account id or the live trade account id\n // Each product can theoretically have multiple accounts\n api.accessKeys.delete(key.account_id, key.id, token),\n dispatch\n );\n }\n if (key.product === \"paper\") {\n return handleSessionExpire(\n api.paperAccessKeys.delete(key.account_id, key.id, token),\n dispatch\n );\n }\n }\n return;\n};\n\n// Export this reducer\nconst initialState = {};\nexport default createReducer(\n {\n // Account access keys, these can be added to or updated\n [_setAccessKeys]: (state, payload) => {\n // Likely only one key at a time. When we regenerate we delete the old.\n // However, if not, this can certainly expose an issue.\n const currentKeys = state.accessKeys || {};\n if (payload.product && payload.accessKeys) {\n payload.accessKeys.forEach((key) => {\n currentKeys[key.account_id] = { ...key, product: payload.product };\n });\n }\n return { ...state, ...currentKeys };\n },\n [unsetAccessKeys]: () => {\n return {};\n },\n },\n initialState\n);\n","import { createAction, createReducer } from \"redux-act\";\nimport { notification } from \"antd\";\nimport Auth from \"@aws-amplify/auth\";\n\nimport { push } from \"connected-react-router\";\nimport * as app from \"../app\";\nimport * as auth from \"./common\";\nimport * as cognitoActions from \"reducers/auth/cognito\";\nimport * as accountListActions from \"reducers/auth/accountList\";\nimport * as logout from \"./logout\";\nimport { createAccountIfNotExist } from \"../../v2-deprecated/api/auth\";\nimport { paciamLogin } from \"src/v2-deprecated/api/auth/paciam\";\nimport { eventTracker } from \"src/utils/eventTracker\";\n\nexport const REDUCER = \"login\";\nconst NS = `@@${REDUCER}/`;\n\nconst _setFrom = createAction(`${NS}SET_FROM`);\nconst _setHideLogin = createAction(`${NS}SET_HIDE_LOGIN`);\nexport const setFailedLogin = createAction(`${NS}SET_FAILED_LOGIN`);\nconst _setForgotPasswordVerification = createAction(\n `${NS}SET_FORGOT_PASSWORD_VERIFICATION`\n);\nexport const setMFAVerificationRequired = createAction(\n `${NS}SET_MFA_VERIFICATION_REQUIRED`\n);\nexport const setMFAVerificationError = createAction(\n `${NS}SET_MFA_VERIFICATION_ERROR`\n);\n\nexport const resetHideLogin = () => (dispatch, getState) => {\n const state = getState();\n if (state.pendingTasks === 0 && state.app.isHideLogin) {\n dispatch(_setHideLogin(false));\n }\n return Promise.resolve();\n};\n\n/**\n * Logs a user in using Cognito.\n *\n * @param {string} username\n * @param {string} password\n * @param {Function} dispatch\n */\nasync function login(username, password, redirect, dispatch) {\n // To make sure we have only one cognito cookie at a time\n logout.clearCookieStorage();\n username = username.toLowerCase();\n\n try {\n const resp = await paciamLogin(username, password);\n\n if (resp.account_source !== \"\" && resp.account_source !== \"brokerdash\") {\n dispatch(app.deleteSubmitForm(REDUCER));\n dispatch(_setHideLogin(true));\n // invalidate accountList and cognito to force reload the data at AuthCheck\n dispatch(accountListActions._invalidate());\n dispatch(cognitoActions._invalidate());\n\n // a session token used by oauth authorization page to know if we were already logged in or not\n window.sessionStorage.setItem(\"oauth_login\", \"1\");\n dispatch(push(\"/brokerage/dashboard/overview\"));\n\n return true;\n }\n\n auth.initAmplify();\n const user = await Auth.signIn(username, password);\n\n if (user.challengeName === \"SELECT_MFA_TYPE\") {\n user.sendMFASelectionAnswer(\"SOFTWARE_TOKEN_MFA\", () => {});\n dispatch(setMFAVerificationRequired({ id: \"login\", user }));\n } else {\n dispatch(completeChallengeAndRedirect({ user, username, redirect }));\n // check if v2 account needs to be created\n await createAccountIfNotExist(user);\n }\n } catch (e) {\n console.error(e);\n dispatch(app.deleteSubmitForm(REDUCER));\n if (e.code === \"UserNotConfirmedException\") {\n dispatch(auth.setAccountVerificationRequired({ id: \"login\", username }));\n } else {\n dispatch(setFailedLogin(e));\n }\n }\n\n dispatch(_setFrom(\"\"));\n}\n\n/**\n * completeChallengeAndRedirect will complete the MFA challenge response\n * and redirect the aswer after a successful login.\n *\n * This is broken out of the Auth.signIn() in the login() above because\n * there could be the need to choose the MFA method (if multiple are enabled).\n * The Auth class apparently does not have this, it's older and on the CognitoUser\n * object which has a callback function argument.\n */\nconst completeChallengeAndRedirect = ({ user, username, redirect }) => (\n dispatch\n) => {\n username = username.toLowerCase();\n // TODO: Redesign all of these forms/pages. It would be nice to show extra fields as needed on same form page.\n // Not sure the MFA one will be needed for now since MFA is off. Add it in later.\n // That basically leaves just the NEW_PASSWORD_REQUIRED one for now.\n if (\n user.challengeName === \"SMS_MFA\" ||\n user.challengeName === \"SOFTWARE_TOKEN_MFA\"\n ) {\n // Note: This is the full CognitoUser object, as it has methods needed by Amplify, not just the username string.\n dispatch(setMFAVerificationRequired({ id: \"login\", user }));\n } else if (user.challengeName === \"NEW_PASSWORD_REQUIRED\") {\n // dispatch(_newFuncThatShowsMoreFields())\n // TODO: same kinda thing as verifying the account/email. Show a different form.\n // This would allow admins to forcibly require password resets for users.\n // this.changeState('requireNewPassword', user);\n } else if (user.challengeName === \"MFA_SETUP\") {\n // This shouldn't be seen on login page. This means the MFA set up isn't complete yet.\n // Theoretically it could be if the user enabled TOTP MFA and then left then came back to\n // the login page. They still need to confirm their TOTP code.\n dispatch(setMFAVerificationRequired({ id: \"login\", user }));\n } else {\n // See if the user's account has been verified\n Auth.verifiedContact(user).then((data) => {\n // Set the user state (this is important for the app to use the data, but also helps verificaiton codes, etc.)\n // This entire data object that's returned has a lot of useful info not just the 'user' key within it.\n user = Object.assign(user, data);\n // Is the user verified? The verified object could contain various items to be verified. email key is one.\n // Presumably phone is another...But we're not using phone number login right now.\n user.userConfirmed = false;\n if (Object.keys(data.verified).length > 0) {\n user.userConfirmed = true;\n }\n\n if (user.userConfirmed) {\n // User logged in, send event to Segment to help track DAU/MAU\n eventTracker(\"Logged In\", {\n category: \"Account\",\n });\n\n // Hide the login and redirect to the user's overview dashboard\n dispatch(app.deleteSubmitForm(REDUCER));\n dispatch(_setHideLogin(true));\n\n // Note: Can not redirect to '/' here.\n let requestedPath = undefined;\n const requestedPathVal = window.sessionStorage.getItem(\n \"requested_path\"\n );\n if (requestedPathVal !== \"/\" && requestedPathVal !== \"/login\") {\n requestedPath = requestedPathVal;\n }\n // invalidate accountList and cognito to force reload the data at AuthCheck\n dispatch(accountListActions._invalidate());\n dispatch(cognitoActions._invalidate());\n\n // a session token used by oauth authorization page to know if we were already logged in or not\n window.sessionStorage.setItem(\"oauth_login\", \"1\");\n\n const destination = redirect || requestedPath || \"/\";\n if (destination) {\n dispatch(push(destination));\n }\n return true;\n } else {\n // So dispatch that action for the login reducer.\n // Like the signup form, the login form also has the fields necessary to verify the account.\n dispatch(app.deleteSubmitForm(REDUCER));\n dispatch(\n auth.setAccountVerificationRequired({ id: \"login\", username })\n );\n }\n });\n }\n};\n\nexport const submit = ({ username, password, redirect }) => (dispatch) => {\n dispatch(app.addSubmitForm(REDUCER));\n login(username, password, redirect, dispatch);\n};\n\nexport const verify = ({ username, code }) => (dispatch, getState) => {\n username = username.toLowerCase();\n const state = getState();\n\n if (!username || !code) {\n // This should flip the form back.\n dispatch(app.deleteSubmitForm(REDUCER));\n dispatch(\n auth.setAccountVerificationRequired({ id: \"login\", username: false })\n );\n } else {\n // TODO: Probably move the signup to in here too. I don't like these very specific reducer files calling back to app.\n // It makes no sense. Nothing else will do that. Unless there's something app provides that this doesn't, I don't see the point.\n // There's some actions... ie. signup() will call auth.setAccountVerificationRequired\n // But that could even be moved I suppose. OR exported. If app controls all of the state management from one point, great...\n // But we can at least call those actions rather than moving the guts and logic of each reducer into a central place.\n // Just good organization and separation. Maybe there's some other stateful things, but should be able to move a lot of this.\n\n // After retrieveing the confirmatieon code from the user\n Auth.confirmSignUp(username, code, {\n // Optional. Force user confirmation irrespective of existing alias. By default set to True.\n forceAliasCreation: true,\n })\n .then(() => {\n // Track event to Segment that someone created and verified their account\n eventTracker(\"Verified Email\", {\n category: \"Account\",\n });\n\n // I think this only comes back as \"SUCCESS\"\n // No need to set the user state now other than the verified part.\n dispatch(\n auth.setUserState({\n userState: {\n ...state.auth.userState,\n userConfirmed: true,\n },\n })\n );\n\n // Clears the form (deletes from state - note: delete keyword).\n dispatch(app.deleteSubmitForm(REDUCER));\n\n // Unlike the signing reducer, we can't just push /login here.\n // We're already at login. So clear out the verification requirement and that should flip the login form back.\n dispatch(\n // if for some reason there was a problem maybe display that?\n // need a resend code link\n auth.setAccountVerificationRequired({\n id: \"login\",\n username: false,\n })\n );\n // Ensure error is cleared\n dispatch(auth.setAccountVerificationError(false));\n })\n .catch((err) => {\n console.error(err);\n dispatch(auth.setAccountVerificationError(err));\n // if for some reason there was a problem maybe display that?\n // need a resend code link\n });\n }\n};\n\n/**\n * Requests a password reset because the user forgot it.\n * This will send a verification code to the user so they can reset their password.\n *\n * @param {string} username\n */\nexport const forgotPassword = (username) => (dispatch) => {\n // _setForgotPasswordVerification() wil lbe used either way here.\n // The error will send an object with a message to show.\n Auth.forgotPassword(username.toLowerCase())\n .then((data) => {\n dispatch(_setForgotPasswordVerification(data));\n })\n .catch((err) => {\n dispatch(_setForgotPasswordVerification(err));\n });\n};\n\n/**\n * Submits a MFA verification code to Cognito.\n * The MFA type is 'SMS_MFA' for now, though could be 'SMS_MFA' or 'SOFTWARE_TOKEN_MFA'\n *\n * @param {Object} user: {CognitoUser} The Cognito user object\n * code: {string} Verification code (numbers for SMS)\n * mfaType: {string} The MFA type\n * redirect: {string} Optional redirect for login (same as login())\n */\nexport const MFAVerify = ({ user, code, mfaType = \"SMS_MFA\", redirect }) => (\n dispatch\n) => {\n // After retrieveing the confirmatieon code from the user\n Auth.confirmSignIn(user, code, mfaType)\n .then(() => {\n // User logged in, send event to Segment to help track DAU/MAU\n eventTracker(\"Logged In\", {\n category: \"Account\",\n });\n\n // Hide the login and redirect to the user's overview dashboard\n dispatch(_setHideLogin(true));\n\n // a session token used by oauth authorization page to know if we were already logged in or not\n window.sessionStorage.setItem(\"oauth_login\", \"1\");\n\n // Note: Can not redirect to '/' here.\n let requestedPath = undefined;\n const requestedPathVal = window.sessionStorage.getItem(\"requested_path\");\n if (requestedPathVal !== \"/\" && requestedPathVal !== \"/login\") {\n requestedPath = requestedPathVal;\n }\n\n // invalidate accountList and cognito to force reload the data at AuthCheck\n dispatch(accountListActions._invalidate());\n dispatch(cognitoActions._invalidate());\n\n if (\n !requestedPath &&\n window.localStorage.getItem(\"live-redirect\") === \"true\"\n ) {\n dispatch(push(\"/brokerage/dashboard/overview\"));\n } else {\n dispatch(\n push(redirect || requestedPath || \"/paper/dashboard/overview\")\n );\n }\n\n // Send a notification\n // TODO: Maybe make a random message or tip here\n notification.open({\n type: \"success\",\n message: \"You have successfully logged in.\",\n description: \"Welcome to Alpaca!\",\n });\n\n // MFA no longer required\n dispatch(setMFAVerificationRequired({ id: \"login\", user: false }));\n // Ensure any error is cleared\n dispatch(setMFAVerificationError(false));\n\n // The forms\n dispatch(app.deleteSubmitForm(REDUCER));\n\n return true;\n })\n .catch((err) => {\n console.error(err);\n // An error will be displayed to the user but, note there is no resend MFA code method\n dispatch(setMFAVerificationError(err));\n });\n};\n\n// Helper to clear out login forms and state, used for MFA verification failure\nexport const clearLoginForms = () => (dispatch) => {\n dispatch(app.deleteSubmitForm(REDUCER));\n dispatch(setMFAVerificationRequired({ id: \"login\", user: false }));\n dispatch(resetHideLogin());\n};\n\nconst initialState = {\n MFAVerificationRequired: {},\n MFAVerificationError: false,\n};\nexport default createReducer(\n {\n [_setFrom]: (state, from) => ({ ...state, from }),\n [_setHideLogin]: (state, isHideLogin) => ({ ...state, isHideLogin }),\n [setFailedLogin]: (state, param) => ({ ...state, failedLogin: param }),\n [_setForgotPasswordVerification]: (state, param) => ({\n ...state,\n forgotPasswordVerification: param,\n }),\n [setMFAVerificationRequired]: (state, param) => {\n // like invalid forms, this requires a form id and (otherwise default 'all' forms)\n // however the key value here will be whatever was passed\n const MFAVerificationRequired = param\n ? {\n ...state.submitForms,\n [param.id || \"all\"]: param,\n }\n : false;\n return { ...state, MFAVerificationRequired };\n },\n [setMFAVerificationError]: (state, param) => {\n return { ...state, MFAVerificationError: param };\n },\n },\n initialState\n);\n","import useRequest, { QueryOptions } from \"./useRequest\";\n\nimport { getPaperAccounts, PaperAccount } from \"../rest/account\";\n\nexport const useGetPaperAccounts = (\n key: any | any[] = \"\",\n accountID: string = \"\",\n options?: QueryOptions\n) => {\n const { data: paper_accounts } = useRequest(\n key,\n () => getPaperAccounts(accountID),\n {\n enabled: !!accountID,\n ...options,\n }\n );\n\n return { paper_accounts: paper_accounts || [] };\n};\n\nexport default useGetPaperAccounts;\n","import useRequest, { QueryOptions } from \"./useRequest\";\n\nimport { getMargin, Margin } from \"../rest/account\";\n\nexport const useGetMargin = (\n key: any | any[] = \"\",\n accountID: string = \"\",\n paper: boolean,\n options?: QueryOptions\n) => {\n const { data: margin } = useRequest(key, () => getMargin(accountID, paper), {\n ...options,\n });\n\n return { margin };\n};\n\nexport default useGetMargin;\n","import {\n useQuery,\n QueryFunction,\n UseQueryResult,\n UseQueryOptions,\n QueryKey,\n} from \"react-query\";\n\nimport { useToast } from \"@chakra-ui/toast\";\nimport { defaultToastSettings, getErrorMessage } from \".\";\n\nexport type QueryOptions = UseQueryOptions;\n\nexport function useRequest(\n queryKey: QueryKey,\n queryFn: QueryFunction,\n options: QueryOptions = {}\n): UseQueryResult {\n const toast = useToast();\n\n const defaultQueryOptions: QueryOptions = {\n onError: (err) => {\n // todo: suppress account errors for /trade auth check (for now)\n if (queryKey?.includes(\"account\")) {\n return;\n }\n const key = \"errorToastKey\";\n if (toast.isActive(key)) return;\n const message = getErrorMessage(err);\n\n toast({ id: key, description: message, ...defaultToastSettings });\n },\n };\n\n const data = useQuery(queryKey, queryFn, {\n ...defaultQueryOptions,\n ...options,\n });\n\n return data;\n}\n\nexport default useRequest;\n","import Auth from \"@aws-amplify/auth\";\nimport { createBrowserHistory } from \"history\";\nimport { getCookie } from \"src/lib/cookies\";\nimport CryptoJS from \"crypto-js\";\nimport { getPaciamJwt } from \"src/v2-deprecated/api/auth/paciam\";\n\nexport const history = createBrowserHistory();\n\nexport const push = history.push;\nexport const replace = history.replace;\nexport const goBack = history.goBack;\n\nexport const isUrl = (url) => {\n const protocol = \"(?:(?:[a-z\\\\u00a1-\\\\uffff0-9\\\\-]+)://)\";\n const ipv4 =\n \"(?:[1-9]\\\\d?|1\\\\d\\\\d|2[01]\\\\d|22[0-3])(?:\\\\.(?:1?\\\\d{1,2}|2[0-4]\\\\d|25[0-5])){2}(?:\\\\.(?:[1-9]\\\\d?|1\\\\d\\\\d|2[0-4]\\\\d|25[0-4]))\";\n const hostname = \"(?:(?:[a-z\\\\u00a1-\\\\uffff0-9]-*)*[a-z\\\\u00a1-\\\\uffff0-9]+)\";\n const domain =\n \"(?:\\\\.(?:[a-z\\\\u00a1-\\\\uffff0-9]-*)*[a-z\\\\u00a1-\\\\uffff0-9]+)*\";\n const tld = \"(?:\\\\.(?:[a-z\\\\u00a1-\\\\uffff]{2,}))\";\n const port = \"(?::\\\\d{2,5})?\";\n const resourcePath = \"(?:[/?#]\\\\S*)?\";\n const regex = `${protocol}(?:(?:localhost|${ipv4}|${hostname}(?:${domain}(?:${tld}\\\\.?))?)?${port}${resourcePath})?`;\n const isUrl = new RegExp(`^${regex}$`, \"i\");\n\n return isUrl.test(url);\n};\n\nexport const weakEncrypt = (str) => {\n const encrypted = CryptoJS.AES.encrypt(str, window.env.SHARED_SECRET);\n return encrypted.toString();\n};\n\nexport class UserNotAuthenticated extends Error {\n name = \"UserNotAuthenticated\";\n constructor() {\n super(\"The user is not authenticated\");\n }\n}\n\n// will load from local storage so\n// not guaranteed to return valid token\nexport const getCurrentAuthenticatedUser = async () => {\n try {\n return await Auth.currentAuthenticatedUser();\n } catch (e) {\n if (e === \"The user is not authenticated\") {\n throw new UserNotAuthenticated();\n }\n throw e;\n }\n};\n\n// will refresh token automatically\nexport const getSessionJWT = async () => {\n try {\n if (getCookie(\"paciamRefreshToken\")) {\n const token = await getPaciamJwt();\n return token;\n }\n\n const session = await Auth.currentSession();\n const token = session.getIdToken();\n return token.getJwtToken();\n } catch (e) {\n throw new UserNotAuthenticated();\n }\n};\n\nexport const parseUtmParams = (params) => {\n const utm_params = {};\n for (const utm_key of [\"utm_source\", \"utm_medium\", \"utm_campaign\"]) {\n if (params.has(utm_key)) {\n utm_params[utm_key] = params.get(utm_key);\n }\n }\n return utm_params;\n};\n","// The API will return a response if the JWT is invalid, but Amplify should also handle that.\n// There is also a rate limit that apparently throws this error too.\nexport const handleSessionExpire = (promise) =>\n promise.catch((e) => {\n if (e.name === \"InvalidCredentialException\") {\n // Not necessarily a lotout event here.\n // TODO: logout\n }\n throw e;\n });\n","export const Path = {\n // routes\n ROUTE_LOGIN: \"/account/login\",\n ROUTE_DASHBOARD: \"/:product/dashboard/overview\",\n ROUTE_POSITIONS: \"/positions\",\n ROUTE_ORDERS: \"/orders\",\n ROUTE_TRADE: \"/trade/:symbol\",\n ROUTE_ACCOUNT_ACTIVITIES: \"/:product/dashboard/account-activities\",\n ROUTE_DOCUMENTS: \"/account/documents\",\n ROUTE_BALANCES: \"/:product/dashboard/balances\",\n ROUTE_CONFIGURATION: \"/account/configuration\",\n ROUTE_CRYPTO_TRANSFERS: \"/:product/dashboard/crypto-transfers\",\n ROUTE_BANKING: \"/brokerage/banking\",\n ROUTE_DEVELOPERS: \"/developers\",\n ROUTE_ALPACA_CONNECT: \"/apps\",\n ROUTE_ALPACA_CONNECT_SUBMIT: \"/apps/submit\",\n ROUTE_ALPACA_CONNECT_APP: \"/apps/:client_id\",\n ROUTE_ALPACA_PROFILE: \"/user/profile#:tab\",\n ROUTE_NEW_ACCOUNT: \"/brokerage/new-account\",\n ROUTE_BANKING_DEPOSIT: \"/brokerage/banking?transfer=deposit\",\n ROUTE_USER_SUBSCRIPTION: \"/user/subscription\",\n ROUTE_USER_SUBSCRIPTION_NEW: \"/brokerage/new-account/data-subscription?upd=1\",\n // urls\n URL_DOCS: \"https://alpaca.markets/docs\",\n URL_DOCS_ACCOUNT_ACTIVITIES: \"https://docs.alpaca.markets/docs/account-activities\",\n URL_SLACK:\n \"https://join.slack.com/t/alpaca-community/shared_invite/zt-1z02tahfn-Q8Ma~lqazcDyJ~O9VrGIHg\",\n URL_FORUM: \"https://forum.alpaca.markets\",\n URL_SUPPORT: \"https://alpaca.markets/support\",\n URL_DISCLOSURES: \"https://alpaca.markets/disclosures\",\n // helpers\n format: (path: string, params: { [key: string]: string }) =>\n Object.keys(params).reduce(\n (acc, key) =>\n acc.replace(`:${key}`, params[key].replace(\"live\", \"brokerage\")),\n path\n ),\n};\n","import React from \"react\";\n\nexport default class MenuLabel extends React.Component {\n static defaultProps = {\n product: \"paper\",\n label: \"\",\n };\n\n render() {\n const variableLabels = {};\n const { label, product } = this.props;\n // Only gets a label if looking at live brokerage view\n variableLabels.accountType =\n product === \"live\" ? \"Brokerage\" : \"Paper Trading\";\n\n let interpolatedLabel = null;\n\n if (label && label.match(\"{\")) {\n const labelKey = label.replace(\"{\", \"\").replace(\"}\", \"\");\n interpolatedLabel = variableLabels[labelKey] || null;\n } else {\n interpolatedLabel = label;\n }\n\n return interpolatedLabel ? (\n
  • \n {interpolatedLabel}\n
  • \n ) : null;\n }\n}\n","import React from \"react\";\nimport reduce from \"lodash/reduce\";\nimport MenuLabel from \"./menuLabel\";\nimport NewLabel from \"src/components/AlpacaComponents/Label/New\";\nimport \"./style.scss\";\n\nimport { connect } from \"react-redux\";\nimport { isBrowser } from \"react-device-detect\";\nimport { Link, withRouter } from \"react-router-dom\";\nimport { getAccountIdForProduct, isPaperOrOnboarding } from \"selectors\";\nimport { default as menuData } from \"./menuData\";\nimport { setLayoutState, setOpenKeys } from \"reducers/app\";\nimport { Card, Layout, Menu, Modal, Select } from \"antd\";\n\nconst { Option, OptGroup } = Select;\nconst { Sider } = Layout;\n\nconst SubMenu = Menu.SubMenu;\nconst Divider = Menu.Divider;\n\nconst mapStateToProps = (state, ownProps) => {\n const { app, account } = state;\n const accountId = getAccountIdForProduct(state, ownProps.product);\n\n const { layoutState, openKeys } = app;\n return {\n // TODO: Fix menu logic based on pathname, remove dependency on path\n pathname: \"\", //router.location.pathname,\n collapsed: layoutState.menuCollapsed,\n openKeys: openKeys,\n theme: layoutState.themeLight ? \"light\" : \"dark\",\n settingsOpened: layoutState.settingsOpened,\n userState: app.userState,\n account: account,\n accountDetails: account.details,\n paperAccount: (account && account.paper) || {},\n accountId,\n clearingBroker:\n (account && account.account && account.account.clearing_broker) || null,\n };\n};\n\n@connect(mapStateToProps)\n@withRouter\nclass MenuLeft extends React.Component {\n constructor(props) {\n super(props);\n this.state = {\n visible: false,\n pathname: this.props.pathname,\n collapsed: this.props.collapsed,\n theme: this.props.theme,\n selectedKeys: \"\",\n settingsOpened: this.props.settingsOpened,\n };\n }\n\n handleClick = (e) => {\n const { dispatch, isMobile } = this.props;\n if (isMobile) {\n // collapse menu on isMobile state\n dispatch(setLayoutState({ menuMobileOpened: false }));\n }\n if (e.key === \"settings\") {\n // prevent click and toggle settings block on theme settings link\n dispatch(setLayoutState({ settingsOpened: !this.state.settingsOpened }));\n return;\n }\n\n // set current selected keys (unless its denoted as an external one - must start with http)\n if (!e.key.match(\"http\")) {\n this.setState({\n selectedKeys: e.key,\n });\n }\n };\n\n onOpenChange = (openKeys) => {\n const { dispatch } = this.props;\n dispatch(setOpenKeys(openKeys));\n };\n\n getPath(data, id, parents = []) {\n const { selectedKeys } = this.state;\n let items = reduce(\n data,\n (result, entry) => {\n if (entry && entry.key) {\n if (result.length) {\n return result;\n } else if (entry.url === id && selectedKeys === \"\") {\n return [entry].concat(parents);\n } else if (entry.key === id && selectedKeys !== \"\") {\n return [entry].concat(parents);\n } else if (entry.children) {\n let nested = this.getPath(\n entry.children,\n id,\n [entry].concat(parents)\n );\n return nested || result;\n }\n }\n return result;\n },\n []\n );\n return items;\n }\n\n getActiveMenuItem = (props, items) => {\n const { selectedKeys, pathname = \"\" } = this.state;\n let { collapsed } = props;\n // Note: Items that have keys with the word \"switch\" in them aren't eligible to be active.\n const eligibleItems = items.filter((item) => {\n return item.key && !item.key.match(\"switch\") ? item : false;\n });\n let [activeMenuItem] = this.getPath(\n eligibleItems,\n !selectedKeys ? pathname : selectedKeys\n );\n\n // Special case here. Most menu items starting with 'switch' are intended to change product context.\n // Therefore it makes no sense to set them as active.\n // However, \"Start Paper Trading\" is also a switch, shared with \"Go to Live Trading\"\n // Could probably use a refactor here too.\n // Also note: this menu item has an additional class that helps it maintain a different color than normal\n // regardless of product context.\n // TODO: Refactor. Likely will make menuData per product (and allow them to share common items).\n if (pathname.match(\"brokerage/new-account\")) {\n eligibleItems.forEach((item) => {\n if (item.key === \"goToLiveAccount\") {\n activeMenuItem = item;\n }\n });\n }\n\n this.setState({\n selectedKeys: activeMenuItem ? activeMenuItem.key : \"\",\n collapsed,\n });\n };\n\n UNSAFE_componentWillReceiveProps(nextProps) {\n this.setState(\n {\n selectedKeys: \"\",\n pathname: nextProps.pathname,\n theme: nextProps.theme,\n settingsOpened: nextProps.settingsOpened,\n clearingBroker: nextProps.clearingBroker,\n },\n () => {\n if (!nextProps.isMobile) {\n this.getActiveMenuItem(nextProps, menuData);\n }\n }\n );\n }\n\n hidePaperTradingBackground() {\n Array.prototype.forEach.call(\n window.document.getElementsByClassName(\"ant-layout\"),\n function (elem) {\n elem.style.background = \"\";\n }\n );\n }\n\n generateMenuPartitions(items) {\n return items.map((menuItem, index) => {\n if (menuItem.children) {\n let subMenuTitle = (\n \n {menuItem.title}\n {menuItem.icon && (\n \n )}\n \n );\n return (\n \n {this.generateMenuPartitions(menuItem.children)}\n \n );\n }\n return this.generateMenuItem(menuItem, index);\n });\n }\n\n renderMenuItem = (\n url,\n title,\n target,\n modal,\n icon,\n additionalClassNames,\n isNew = false\n ) => {\n if (url.indexOf(\"http\") === 0) {\n return (\n \n {title}\n {icon && }\n \n );\n } else if (url.indexOf(\"modal\") === 0) {\n return (\n
    \n
    \n {title}\n {icon && }\n
    \n {modal}\n
    \n );\n } else {\n return (\n \n this.props.dispatch(setLayoutState({ menuCollapsed: false }))\n : null\n }\n className={additionalClassNames}\n >\n \n {title} {isNew ? : undefined}\n \n {icon && }\n {window.location.pathname === url && }\n \n );\n }\n };\n\n generateMenuItem(item, indexKey) {\n const { product } = this.props;\n const { key, target, icon, disabled, track, isNew } = item;\n let { title, url, additionalClassNames } = item;\n let modal;\n\n // Special menu item titles - based on a user and the product, things can change.\n // So a function can be used. It will be given props.\n const interpolatedTitle =\n typeof title === \"function\" ? title(this.props) : title;\n\n // Special menu item urls - based on a user and the product, things can change.\n // So a function can be used. It will be given props.\n const interpolatedUrl = typeof url === \"function\" ? url(this.props) : url;\n\n // Allows the menu definition file (menuData.js) to determine if an item should be hidden.\n // Product context only gets us so far.\n if (typeof item.hideIf === \"function\" && item.hideIf(this.props)) {\n return null;\n }\n\n // Labels\n if (item.label) {\n return (\n \n );\n }\n\n if (item.divider) {\n return ;\n }\n\n // is submenu item\n if (item.items) {\n return (\n \n {title}\n {icon && }\n \n }\n >\n {item.items.map((subitem, index) =>\n this.generateMenuItem(subitem, index)\n )}\n \n );\n }\n\n return item.url ? (\n \n {this.renderMenuItem(\n interpolatedUrl,\n interpolatedTitle,\n target,\n modal,\n icon,\n additionalClassNames,\n isNew\n )}\n \n ) : (\n \n {interpolatedTitle}\n {icon && }\n \n );\n }\n\n onCollapse = (value, type) => {\n const { dispatch } = this.props;\n const { collapsed } = this.state;\n if (type === \"responsive\" && collapsed) {\n return;\n }\n dispatch(setLayoutState({ menuCollapsed: !collapsed }));\n };\n\n componentDidMount() {\n this.getActiveMenuItem(this.props, menuData);\n }\n\n render() {\n const { collapsed, selectedKeys, theme } = this.state;\n const { isMobile, product, openKeys } = this.props;\n\n // Filter menu items b product.\n const menuItems = this.generateMenuPartitions(\n menuData.filter((item) => {\n // First, ensure the item is eligible to be displayed in the current product.\n // Items without this field are ok too, they are not bound to any product.\n if (!item.product || item.product.includes(product)) {\n // If the product matches, the menu item appears.\n return item;\n }\n })\n );\n\n const trigger = this.props.collapsed ? (\n \n ) : (\n <>\n this.setState({ visible: true })}\n >\n \n   View Important Disclosures\n \n
    \n \n \n );\n\n const paramsMobile = {\n width: 256,\n collapsible: false,\n collapsed: false,\n onCollapse: this.onCollapse,\n trigger,\n };\n\n const paramsDesktop = {\n width: 256,\n collapsible: true,\n collapsed: collapsed,\n onCollapse: this.onCollapse,\n breakpoint: \"lg\",\n trigger,\n };\n\n const params = isMobile ? paramsMobile : paramsDesktop;\n const menuStyle =\n product === \"live\"\n ? \"menuLeft__navigationBrokerage\"\n : \"menuLeft__navigationPaper\";\n const menuClassName = `menuLeft product-${product}`;\n const menuLogo = \"/resources/images/logo.svg\";\n const menuLogoCollapsed = \"/resources/images/logo-collapsed.svg\";\n\n const { account } = this.props;\n const liveActs = [];\n const paperActs = [account.paper?.current?.split(\"-\")[0].toUpperCase()];\n const accountLabel = product === \"live\" ? \"Live Trading\" : \"Paper Trading\";\n const isOnboarding = isPaperOrOnboarding(account);\n const AlpacaSecurities = `Alpaca Securities`;\n const currentYear = new Date().getFullYear();\n\n if (account.account?.account_number && !isOnboarding)\n liveActs.push(account.account?.account_number);\n\n return (\n {\n // if not broken and collapsed is true, then toggle\n if (!broken && collapsed) {\n this.onCollapse();\n }\n }}\n >\n
    \n
    \n \"\"\n
    \n
    \n this.props.history.push(`/${v}/dashboard/overview`)}\n >\n \n {liveActs.map((act) =>\n act ? (\n \n {act}\n \n ) : null\n )}\n \n \n {paperActs?.map((act) =>\n act ? (\n \n {act}\n \n ) : null\n )}\n \n \n \n {isOnboarding && product === \"paper\" && !isBrowser && (\n \n \n \n Open Live Trading Account\n \n \n )}\n {menuItems}\n {!params.collapsed && }\n \n\n this.setState({ visible: false })}\n >\n \n Brokerage services are provided by {AlpacaSecurities}, member{\" \"}\n \n FINRA\n \n /\n \n SIPC\n \n , a wholly-owned subsidiary of AlpacaDB, Inc. Technology and\n services are offered by AlpacaDB, Inc.\n
    \n
    \n Brokerage services are provided to customers who can write automated\n investment code and self-direct their own investments. Alpaca\n brokerage services are only provided to customers who agree to\n electronically sign agreements and agree to receive messages,\n confirmations, and statements electronically.{\" \"}\n \n Is Alpaca right for me?\n \n
    \n
    \n This is not an offer, solicitation of an offer, or advice to buy or\n sell securities or cryptocurrencies, or open a brokerage account or\n cryptocurrency account in any jurisdiction where Alpaca Securities,\n Alpaca Crypto, are not registered or licensed, as applicable.\n
    \n
    \n The Paper Trading API is offered by AlpacaDB, Inc. and does not\n require real money or permit a user to transact in real securities\n in the market. Providing use of the Paper Trading API is not an\n offer or solicitation to buy or sell securities, securities\n derivative or futures products of any kind, or any type of trading\n or investment advice, recommendation or strategy, given or in any\n manner endorsed by AlpacaDB, Inc. or any AlpacaDB, Inc. affiliate\n and the information made available through the Paper Trading API is\n not an offer or solicitation of any kind in any jurisdiction where\n AlpacaDB, Inc. or any AlpacaDB, Inc. affiliate (collectively,\n "Alpaca") is not authorized to do business.\n
    \n
    \n You should know that the use or granting of any third party access\n to your account information or place transactions in your account at\n your direction is solely at your risk. Alpaca does not warrant\n against loss of use or any direct, indirect or consequential damages\n or losses to you caused by your assent, expressed or implied, to a\n third party accessing your account or information, including access\n provided through any other third party apps, systems, or sites.\n
    \n
    \n Market prices, data and other information available through Alpaca\n are not warranted as to completeness or accuracy and are subject to\n change without notice.\n \n System response and account access times may vary due to a variety\n of factors, including trading volumes, market conditions, system\n performance, and other factors.\n \n A more complete description of the impact these factors may have can\n be found in our{\" \"}\n \n risks of automated trading systems section\n \n .\n
    \n
    \n All investments involve risk and the past performance of a security,\n or financial product does not guarantee future results or returns.\n Keep in mind that while diversification may help spread risk it does\n not assure a profit, or protect against loss, in a down market.\n There is always the potential of losing money when you invest in\n securities, or other financial products. Investors should consider\n their investment objectives and risks carefully before investing.\n
    \n
    \n There are risks unique to automated trading algorithms that you\n should know about and plan for. You should setup a method or system\n of continuous monitoring or alerting to let you know if there is a\n mechanical failure, such as connectivity issues, power loss, a\n computer crash, or system quirk. You should also monitor for\n instances where your automated trading system experiences anomalies\n that could result in errant, missing, or duplicated orders. A more\n complete description of these and other risks can be found in our{\" \"}\n \n FAQ section.\n \n
    \n
    \n Conditional orders may have increased risk as a result of their\n reliance on trigger processing, market data, and other internal and\n external systems. Such orders are not sent to the market until\n specified conditions are met. During that time, issues such as\n system outages with downstream technologies or third parties may\n occur. Conditional orders triggering near the market close may fail\n to execute that day. Furthermore, our executing partner may impose\n controls on conditional orders to limit erroneous trades triggering\n downstream orders. Alpaca Securities may not always be made aware of\n such changes to external controls immediately, which may lead to\n some conditional orders not being executed. As such, it is important\n to monitor conditional orders for reasonability. Conditional orders\n are “Not Held” orders whose execution instructions are on a best\n efforts basis upon being triggered. Furthermore, conditional orders\n may be subject to the increased risks of stop orders and market\n orders outlined above. Given the increased potential risk of using\n conditional orders, the client agrees that Alpaca Securities cannot\n be held responsible for losses, damages, or missed opportunity costs\n associated with market data problems, systems issues, and user\n error, among other factors. By using conditional orders the client\n understands and accepts the risks outlined above. Alpaca Securities\n encourages leveraging the use of Paper accounts to become more\n comfortable with the intricacies associated with these orders.\n
    \n
    \n ETFs can entail risks similar to direct stock ownership, including\n market, sector, or industry risks. Some ETFs may involve\n international risk, currency risk, commodity risk, and interest rate\n risk. Trading prices may not reflect the net asset value of the\n underlying securities.\n
    \n
    \n All accounts are opened as limited purpose margin accounts. You\n should know that margin trading involves interest charges and risks,\n including the potential to lose more than deposited or the need to\n deposit additional collateral in a falling market. Before using\n margin, customers must determine whether this type of trading\n strategy is right for them given their specific investment\n objectives, experience, risk tolerance, and financial situation. For\n more information please see{\" \"}\n \n Alpaca's Margin Disclosure Statement\n {\" \"}\n and{\" \"}\n \n Margin Agreement.\n \n These disclosures contain information on Alpaca Securities's\n lending policies, interest charges, and the risks associated with\n margin accounts.\n
    \n
    \n Commission-Free trading means that there are no commission charges\n for Alpaca Securities self-directed individual brokerage accounts\n that trade U.S. listed securities through an API.{\" \"}\n \n Relevant SEC and FINRA fees may apply.\n \n
    \n
    \n Cryptocurrency is highly speculative in nature, involves a high\n degree of risks, such as volatile market price swings, market\n manipulation, flash crashes, and cybersecurity risks. Cryptocurrency\n is not regulated or is lightly regulated in most countries.\n Cryptocurrency trading can lead to large, immediate and permanent\n loss of financial value. You should have appropriate knowledge and\n experience before engaging in cryptocurrency trading. For additional\n information please click{\" \"}\n \n here\n \n .\n
    \n
    \n Cryptocurrency services are made available by Alpaca Crypto, a\n FinCEN registered money services business (NMLS # 2160858), and a\n wholly-owned subsidiary of AlpacaDB, Inc. Alpaca Crypto is not a\n member of SIPC or FINRA. Cryptocurrencies are not stocks and your\n cryptocurrency investments are not protected by either FDIC or SIPC.\n Depending on your location. Please see the{\" \"}\n \n Disclosure Library\n {\" \"}\n for more information.\n
    \n
    \n © {currentYear} Alpaca Securities LLC All rights reserved.\n
    \n © {currentYear} Alpaca Crypto LLC All rights reserved.\n
    \n © {currentYear} AlpacaDB, Inc All rights reserved.\n
    \n \n
    \n );\n }\n}\n\nexport { MenuLeft, menuData };\n","export default [\n {\n title: \"Empty Page\",\n key: \"empty\",\n url: \"/empty\",\n icon: \"icmn icmn-books\",\n },\n];\n","import React from \"react\";\nimport { connect } from \"react-redux\";\nimport { Menu } from \"antd\";\nimport { Link, withRouter } from \"react-router-dom\";\nimport reduce from \"lodash/reduce\";\nimport { setLayoutState } from \"reducers/app\";\nimport { default as menuData } from \"./menuData\";\nimport \"./style.scss\";\n\nconst SubMenu = Menu.SubMenu;\nconst Divider = Menu.Divider;\n\nconst mapStateToProps = ({ app, router }) => {\n const { layoutState } = app;\n return {\n pathname: router.location.pathname,\n collapsed: layoutState.menuCollapsed,\n theme: layoutState.themeLight ? \"light\" : \"dark\",\n settingsOpened: layoutState.settingsOpened,\n };\n};\n\n@connect(mapStateToProps)\n@withRouter\nclass MenuTop extends React.Component {\n state = {\n pathname: this.props.pathname,\n collapsed: this.props.collapsed,\n theme: this.props.theme,\n selectedKeys: \"\",\n openKeys: [\"\"],\n settingsOpened: this.props.settingsOpened,\n };\n\n handleClick = (e) => {\n const { dispatch, isMobile } = this.props;\n if (isMobile) {\n // collapse menu on isMobile state\n dispatch(setLayoutState({ menuMobileOpened: false }));\n }\n if (e.key === \"settings\") {\n // prevent click and toggle settings block on theme settings link\n dispatch(setLayoutState({ settingsOpened: !this.state.settingsOpened }));\n return;\n }\n // set current selected keys\n this.setState({\n selectedKeys: e.key,\n openKeys: e.keyPath,\n });\n };\n\n onOpenChange = (openKeys) => {\n this.setState({\n openKeys,\n });\n };\n\n getPath(data, id, parents = []) {\n const { selectedKeys } = this.state;\n let items = reduce(\n data,\n (result, entry) => {\n if (result.length) {\n return result;\n } else if (entry.url === id && selectedKeys === \"\") {\n return [entry].concat(parents);\n } else if (entry.key === id && selectedKeys !== \"\") {\n return [entry].concat(parents);\n } else if (entry.children) {\n let nested = this.getPath(\n entry.children,\n id,\n [entry].concat(parents)\n );\n return nested || result;\n }\n return result;\n },\n []\n );\n return items.length > 0 ? items : false;\n }\n\n getActiveMenuItem = (props, items) => {\n const { selectedKeys, pathname } = this.state;\n let { collapsed } = props;\n let [activeMenuItem] = this.getPath(\n items,\n !selectedKeys ? pathname : selectedKeys\n );\n\n this.setState({\n selectedKeys: activeMenuItem ? activeMenuItem.key : \"\",\n collapsed,\n });\n };\n\n generateMenuPartitions(items) {\n return items.map((menuItem) => {\n if (menuItem.children) {\n let subMenuTitle = (\n \n {menuItem.title}\n {menuItem.icon && (\n \n )}\n \n );\n return (\n \n {this.generateMenuPartitions(menuItem.children)}\n \n );\n }\n return this.generateMenuItem(menuItem);\n });\n }\n\n generateMenuItem(item) {\n const { key, title, url, icon, disabled } = item;\n const { dispatch } = this.props;\n return item.divider ? (\n \n ) : item.url ? (\n \n \n this.props.isMobile\n ? () => {\n dispatch(setLayoutState({ menuCollapsed: false }));\n }\n : undefined\n }\n >\n {title}\n {icon && }\n \n \n ) : (\n \n {title}\n {icon && }\n \n );\n }\n\n UNSAFE_componentWillMount() {\n this.getActiveMenuItem(this.props, menuData);\n }\n\n UNSAFE_componentWillReceiveProps(newProps) {\n this.setState(\n {\n pathname: newProps.pathname,\n theme: newProps.theme,\n settingsOpened: newProps.settingsOpened,\n },\n () => {\n if (!newProps.isMobile) {\n this.getActiveMenuItem(newProps, menuData);\n }\n }\n );\n }\n\n render() {\n const { selectedKeys, openKeys, theme } = this.state;\n const menuItems = this.generateMenuPartitions(menuData);\n return (\n
    \n
    \n
    \n \n
    \n
    \n \n \n Settings\n \n \n {menuItems}\n \n
    \n );\n }\n}\n\nexport { MenuTop, menuData };\n","import React, { useCallback } from \"react\";\nimport { useDispatch, useSelector } from \"react-redux\";\n\nimport { setLayoutState } from \"reducers/app\";\nimport { MenuLeft } from \"./MenuLeft\";\nimport { MenuTop } from \"./MenuTop\";\nimport { Icon, Drawer } from \"antd\";\nimport \"./style.scss\";\n\nconst selector = ({ app: { layoutState } }) => ({\n open: layoutState.menuMobileOpened,\n isMenuTop: layoutState.isMenuTop,\n});\n\nconst AppMenu = (props) => {\n const { isMobile } = props;\n const dispatch = useDispatch();\n const { open, isMenuTop } = useSelector(selector);\n const toggleOpen = useCallback(() => {\n dispatch(setLayoutState({ menuMobileOpened: !open }));\n }, [dispatch, open]);\n\n return isMobile ? (\n <>\n \n \n \n \n \n ) : isMenuTop ? (\n \n ) : (\n \n );\n};\n\nexport default AppMenu;\n","import React from \"react\";\nimport { connect } from \"react-redux\";\nimport { withRouter } from \"react-router-dom\";\nimport qs from \"querystring\";\nimport { setLayoutState } from \"reducers/app\";\nimport merge from \"lodash/merge\";\nimport classNames from \"classnames\";\n\nconst mapStateToProps = (state) => ({\n layoutState: state.app.layoutState,\n});\n\n@connect(mapStateToProps)\n@withRouter\nclass LayoutState extends React.PureComponent {\n bootstrapLayoutSettings() {\n const { dispatch } = this.props;\n const urlParams = qs.parse(this.props.location.search.replace(\"?\", \"\"));\n const storageParams = JSON.parse(\n window.localStorage.getItem(\"app.layoutState\")\n );\n if (storageParams) {\n delete storageParams.settingsOpened;\n }\n const mergedParams = merge({}, storageParams, urlParams);\n const booleanMergedParams = JSON.parse(\n JSON.stringify(mergedParams),\n (key, value) =>\n value === \"true\" ? true : value === \"false\" ? false : value\n );\n dispatch(setLayoutState({ ...booleanMergedParams }));\n }\n\n UNSAFE_componentWillReceiveProps(newProps) {\n this.updateBodyClass(newProps.layoutState);\n }\n\n UNSAFE_componentWillMount() {\n this.bootstrapLayoutSettings();\n }\n\n updateBodyClass(layoutState) {\n document.body.className = classNames(layoutState);\n }\n\n render() {\n return null;\n }\n}\n\nexport default LayoutState;\n","import React from \"react\";\nimport PropTypes from \"prop-types\";\nimport App from \"src/v2-deprecated/routes\";\nimport Page from \"src/v2-deprecated/components/common/page\";\nimport TopBar from \"components/LayoutComponents/TopBar\";\nimport Menu from \"components/LayoutComponents/Menu\";\nimport LayoutState from \"components/LayoutComponents/LayoutState\";\nimport classNames from \"classnames\";\nimport loadable from \"@loadable/component\";\nimport LoadingSpinner from \"components/LoadingSpinner\";\n\nimport { useFlag } from \"@alpacahq/flag-service\";\nimport { enquireScreen } from \"enquire-js\";\nimport { cond, stubTrue } from \"lodash/fp\";\nimport { ContainerQuery } from \"react-container-query\";\nimport { Layout as AntLayout } from \"antd\";\n\nconst AntContent = AntLayout.Content;\nconst AntHeader = AntLayout.Header;\n\nconst query = {\n \"screen-xs\": {\n maxWidth: 575,\n },\n \"screen-sm\": {\n minWidth: 576,\n maxWidth: 767,\n },\n \"screen-md\": {\n minWidth: 768,\n maxWidth: 991,\n },\n \"screen-lg\": {\n minWidth: 992,\n maxWidth: 1199,\n },\n \"screen-xl\": {\n minWidth: 1200,\n maxWidth: 1599,\n },\n \"screen-xxl\": {\n minWidth: 1600,\n },\n};\n\nlet isMobile;\nenquireScreen((b) => {\n isMobile = b;\n});\n\nclass Layout extends React.Component {\n static defaultProps = {\n disableAppMenu: false,\n headerContent: null,\n noHeader: false,\n showBrandInHeader: false,\n showSearchInHeader: true,\n product: \"alpaca\",\n };\n\n static propTypes = {\n disableAppMenu: PropTypes.bool,\n headerContent: PropTypes.any,\n noHeader: PropTypes.bool,\n showBrandInHeader: PropTypes.bool,\n showSearchInHeader: PropTypes.bool,\n product: PropTypes.string,\n };\n\n child = null;\n importer = null;\n\n state = {\n isMobile,\n };\n\n componentDidMount() {\n this.enquireHandler = enquireScreen((mobile) => {\n this.setState({\n isMobile: mobile,\n });\n });\n }\n\n render() {\n if (useFlag(\"uix-v2\")) {\n const { product } = this.props;\n\n // only save non-dynamic product state to local storage\n if (product !== \"dynamic\") {\n window.localStorage.setItem(\"product\", product);\n }\n\n // set product from local storage to mimic a persistent state\n if ((this.props = { ...this.props }).product === \"dynamic\") {\n this.props.product = window.localStorage.getItem(\"product\") || \"paper\";\n }\n\n const isMobile = !!this.state.isMobile;\n const {\n disableAppMenu,\n headerContent,\n noHeader,\n importer,\n ...more\n } = this.props;\n\n // Accept a loadable component using the `importer` prop.\n // Normal composition follows with `this.props.children`. See for example NotFoundPage.\n // We are imitating useMemo to preserve loadable between updates if we are\n // given the same importer\n const LoadableChild = cond([\n [() => importer && this.importer === importer, () => this.child],\n [\n () => importer,\n () =>\n loadable(() => this.props.importer(), {\n // todo: better loading indicator\n fallback: <>,\n }),\n ],\n [stubTrue, () => false],\n ])();\n this.importer = importer;\n this.child = LoadableChild;\n return (\n \n \n {LoadableChild && }\n {this.props.children}\n \n \n );\n }\n\n const { product } = this.props;\n // only save non-dynamic product state to local storage\n if (product !== \"dynamic\") {\n window.localStorage.setItem(\"product\", product);\n }\n // set product from local storage to mimic a persistent state\n if ((this.props = { ...this.props }).product === \"dynamic\") {\n this.props.product = window.localStorage.getItem(\"product\") || \"paper\";\n }\n\n const isMobile = !!this.state.isMobile;\n const { disableAppMenu, headerContent, importer, ...more } = this.props;\n\n // Accept a loadable component using the `importer` prop.\n // Normal composition follows with `this.props.children`. See for example NotFoundPage.\n // We are imitating useMemo to preserve loadable between updates if we are\n // given the same importer\n const LoadableChild = cond([\n [() => importer && this.importer === importer, () => this.child],\n [\n () => importer,\n () =>\n loadable(() => this.props.importer(), {\n fallback: ,\n }),\n ],\n [stubTrue, () => false],\n ])();\n this.importer = importer;\n this.child = LoadableChild;\n return (\n \n {(params) => (\n
    \n \n \n {!disableAppMenu && }\n \n {!this.props.noHeader && (\n \n {headerContent ? headerContent : }\n \n )}\n \n {LoadableChild && }\n {this.props.children}\n \n \n \n
    \n )}\n
    \n );\n }\n}\n\nexport default Layout;\n","import ReactGA from \"react-ga\";\n\nconst trackingID = window.env.GOOGLE_ANALYTICS_ID;\n\n\nif (trackingID) {\n ReactGA.initialize(trackingID);\n}\n\nexport const locationTracker = (location) => {\n if (trackingID) {\n ReactGA.pageview(location.pathname);\n }\n};\n\nexport const eventTracker = (action, data) => {\n if (trackingID && data) {\n ReactGA.event({\n action: action,\n category: data.category,\n label: data.label,\n value: data.value,\n });\n }\n};","import { CountryInfo, Nullable } from \"src/v2-deprecated/types\";\n\ntype CountryInfoMap = {\n [key: string]: CountryInfo;\n};\n\n// we use a hook in-case we want to fetch backend data in the future\nexport const useGetCryptoEnabled = (\n country: Nullable,\n state: Nullable,\n infoMap: Nullable\n) => {\n if (country && country !== \"USA\") {\n return Boolean(infoMap?.[country]?.crypto_enabled);\n }\n\n // need both country and state to be defined for U.S.\n if (!country || !state) {\n return false;\n }\n\n const supported = window.env.SUPPORTED_CRYPTO_STATES || \"\";\n return supported.split(\",\").includes(state?.toUpperCase());\n};\n\nexport default useGetCryptoEnabled;\n","import useRequest, { QueryOptions } from \"./useRequest\";\nimport { getDetails, OwnerDetails } from \"../rest/account\";\n\nexport const useGetAccountDetails = (\n key: any | any[] = \"\",\n accountID: string = \"\",\n options?: QueryOptions\n) => {\n const { data: details, refetch } = useRequest(\n key,\n () => getDetails(accountID),\n { refetchInterval: false, enabled: !!accountID, ...options }\n );\n\n return { details, refetch };\n};\n\nexport default useGetAccountDetails;\n","import { CountryInfo } from \"src/v2-deprecated/types\";\nimport { useEffect, useState } from \"react\";\nimport { getCountryInfos } from \"../rest/onboarding\";\n\nexport const useGetCountryInfos = () => {\n const [infos, setInfos] = useState<{ [key: string]: CountryInfo }>({});\n\n useEffect(() => {\n async function fetch() {\n setInfos(await getCountryInfos());\n }\n fetch();\n }, []);\n\n return {\n infos,\n canLimitedFund: (alpha3: string) => alpha3 === \"USA\",\n };\n};\n\nexport default useGetCountryInfos;\n","import { useCallback, useState } from \"react\";\n\nexport const useLock = () => {\n // initially unlocked\n const [locked, setLocked] = useState(false);\n\n // a function that locks\n const lock = useCallback(() => setLocked(true), []);\n\n // a function that unlocks\n const unlock = useCallback(() => setLocked(false), []);\n\n // a function that toggles\n const toggle = useCallback(() => setLocked(!locked), [locked]);\n\n // a function that locks for a given duration\n const lockFor = useCallback(\n (duration: number) => {\n setLocked(true);\n setTimeout(unlock, duration);\n },\n [unlock]\n );\n\n // a function that locks until a given date\n const lockUntil = useCallback(\n (until: number) => {\n setLocked(true);\n setTimeout(unlock, until - Date.now());\n },\n [unlock]\n );\n\n return {\n locked,\n lock,\n unlock,\n toggle,\n lockFor,\n lockUntil,\n };\n};\n\nexport default useLock;\n","import { useRequest } from \".\";\nimport { getPositions } from \"../rest/account\";\n\n// todo: parameter-ize this hook\nexport const useGetPositions = (\n accountID?: string,\n product?: string,\n options = {}\n) => {\n const { data, ...rest } = useRequest(\n [\"position\", accountID],\n () => getPositions({ accountID: accountID || \"\", product }),\n {\n ...options,\n // todo: revisit this override of default behavior (duplicate error handling)\n onError: () => null,\n }\n );\n\n return { positions: data || [], ...rest };\n};\n\nexport default useGetPositions;\n","import { useRequest } from \".\";\nimport { getOrderbooks } from \"../rest/data\";\n\nexport const useGetOrderbooks = (symbols: string[]) => {\n const { data } = useRequest(\n [symbols, \"orderbook\"],\n () => getOrderbooks(symbols),\n {\n staleTime: 1000,\n refetchInterval: 1000,\n }\n );\n return { orderbooks: data?.orderbooks };\n};\n\nexport default useGetOrderbooks;\n","import { useRequest } from \".\";\nimport { getPosition } from \"../rest/account\";\n\nexport const useGetPosition = (\n accountID?: string,\n symbol?: string,\n product?: string,\n options = {}\n) => {\n const { data } = useRequest(\n [\"position\", symbol, accountID],\n () =>\n getPosition({\n accountID: accountID || \"\",\n symbol: (symbol || \"\").replace(\"/\", \"\"),\n paper: product === \"paper\",\n }),\n {\n ...options,\n onError: (error) => {\n // do nothing\n },\n }\n );\n return { position: data };\n};\n\nexport default useGetPosition;\n","import { useRequest } from \".\";\nimport { getOrders } from \"../rest/account\";\n\nexport const useGetOrders = (\n accountID: string,\n product: string,\n symbols?: string[],\n options?: any\n) => {\n const { data, refetch } = useRequest(\n [\"orders\", accountID, symbols],\n () =>\n getOrders({\n accountID: accountID || \"\",\n symbols,\n paper: product === \"paper\",\n }),\n { ...(options || {}) }\n );\n return { orders: data || [], refetch };\n};\n\nexport default useGetOrders;\n","import { useRequest } from \".\";\nimport { getCryptoSnapshots } from \"../rest/data\";\n\nexport const useGetCryptoSnapshots = (symbols: (string | any)[]) => {\n const { data } = useRequest(\n [symbols, \"snapshots\"],\n () => getCryptoSnapshots({ symbols }),\n {\n enabled: !!symbols.length,\n refetchInterval: 10000,\n staleTime: 10000,\n }\n );\n\n return { ...data?.snapshots };\n};\n\nexport default useGetCryptoSnapshots;\n","import { useContext, useMemo } from \"react\";\nimport {\n BankingContext,\n PendingRelationshipType,\n} from \"../../routes/dashboard/banking\";\n\nexport const useGetAchRelationshipsPending = () => {\n const ctx = useContext(BankingContext);\n\n return useMemo(() => {\n const item = localStorage.getItem(\"relationship:pending\");\n const queued = ctx.relationships?.[0]?.status.includes(\"QUEUED\");\n const cancelled = ctx.relationships?.[0]?.status.includes(\"CANCEL\");\n const len = (ctx.relationships || []).length;\n\n // guaranteed pending\n if (queued || cancelled) {\n return true;\n }\n\n if (!item) {\n return false;\n }\n\n // no longer pending due to expiration\n const didExpire = () => {\n ctx.setRelationshipPending(false);\n localStorage.removeItem(\"relationship:pending\");\n return false;\n };\n\n const meta = JSON.parse(item);\n\n if (meta.expires < Date.now()) {\n return didExpire();\n } else if (meta.type === PendingRelationshipType.ADDED) {\n if (len > 0) {\n return didExpire();\n }\n } else if (meta.type === PendingRelationshipType.DELETED) {\n if (len === 0) {\n return didExpire();\n }\n }\n\n return true;\n }, [ctx.relationshipPending, ctx.relationships]);\n};\n\nexport default useGetAchRelationshipsPending;\n","import useRequest, { QueryOptions } from \"./useRequest\";\n\nimport { getAccessKeys, AccessKey } from \"../rest/account\";\n\nexport const useGetAccessKeys = (\n options?: QueryOptions & { accountID?: string }\n) => {\n const { data, ...rest } = useRequest(\n [\"access-keys\", options?.accountID],\n () => getAccessKeys({ accountID: options?.accountID }),\n {\n ...options,\n cacheTime: 1000 * 60 * 5,\n }\n );\n\n return { access_keys: data || [], ...rest };\n};\n\nexport default useGetAccessKeys;\n","import useRequest, { QueryOptions } from \"./useRequest\";\nimport { Billing, getBillingOverview } from \"../rest/billing\";\nimport { QueryObserverResult } from \"react-query\";\n\ntype UseGetBillingOverview = {\n billing?: Billing;\n refetch: () => Promise>;\n};\n\nexport const useGetBillingOverview = (\n key: any | any[] = \"\",\n options?: QueryOptions\n): UseGetBillingOverview => {\n const { data: billing, isError, isSuccess, refetch } = useRequest(\n \"billing\" + key,\n getBillingOverview,\n { refetchInterval: false, ...options }\n );\n\n return { billing, refetch };\n};\n","import local from \"../../utils/countries.json\";\n\nimport { useState } from \"react\";\nimport { useQuery } from \"react-query\";\nimport { getRestrictedCountries } from \"../rest/onboarding\";\n\ntype Country = {\n name: string;\n \"alpha-3\": string;\n \"country-code\": string;\n};\n\nexport const useGetCountries = () => {\n const [countries, setCountries] = useState([]);\n\n useQuery(\"restricted-countries\", getRestrictedCountries, {\n cacheTime: 0,\n onSuccess: (data) =>\n setCountries(local.filter((c) => !data.includes(c[\"alpha-3\"]))),\n });\n\n return {\n countries,\n countriesRaw: local as Country[],\n alpha3ToName: (alpha3: string) =>\n local.find(({ [\"alpha-3\"]: short }) => short === alpha3)?.name,\n nameToAlpha3: (name: string) =>\n local.find(({ name: n }) => n === name)?.[\"alpha-3\"],\n };\n};\n\nexport default useGetCountries;\n","import useRequest, { QueryOptions } from \"./useRequest\";\nimport {\n getDetails,\n getTrustedAccount,\n OwnerDetails,\n TrustedContact,\n} from \"../rest/account\";\n\nexport const useGetTrustedContact = (\n key: any | any[] = \"\",\n accountID: string = \"\",\n options?: QueryOptions\n) => {\n const { data: details, refetch, isFetched } = useRequest(\n key,\n () => getTrustedAccount(accountID),\n { ...options, refetchInterval: false }\n );\n\n return { trusted_contact: details, refetch, isFetched };\n};\n\nexport default useGetTrustedContact;\n","import { useRequest } from \".\";\nimport { getActivities, GetActivitiesParams } from \"../rest/account\";\n\nexport const useGetActivities = (\n { accountID, paper, activityTypes, after, date, until }: GetActivitiesParams,\n options = {}\n) => {\n const { data, ...rest } = useRequest(\n [\n \"activity\",\n accountID,\n paper,\n activityTypes?.join(\",\"),\n after,\n date,\n until,\n ],\n () =>\n getActivities({\n accountID: accountID || \"\",\n paper,\n activityTypes,\n after,\n date,\n until,\n }),\n {\n ...options,\n // todo: revisit this override of default behavior (duplicate error handling)\n onError: () => null,\n }\n );\n\n return { activities: data || [], ...rest };\n};\n\nexport default useGetActivities;\n","import useRequest, { QueryOptions } from \"./useRequest\";\n\nimport { QueryObserverResult } from \"react-query\";\nimport { AchRelationship, getAchRelationships } from \"../rest/banking\";\n\ntype UseGetAchRelationships = {\n achRelationships?: AchRelationship[];\n refetch: () => Promise>;\n};\n\nexport const useGetAchRelationships = (\n accountId?: string,\n key: any | any[] = \"\",\n options?: QueryOptions\n): UseGetAchRelationships => {\n const { data: achRelationships, refetch } = useRequest(\n \"ach-relationships\" + key,\n () => getAchRelationships(accountId || \"\"),\n {\n ...options,\n }\n );\n\n return { achRelationships, refetch };\n};\n","import useRequest, { QueryOptions } from \"./useRequest\";\n\nimport { Transfer, getAchTransfers } from \"../rest/banking\";\nimport { QueryObserverResult } from \"react-query\";\n\ntype UseGetAchTransfers = {\n achTransfers?: Transfer[];\n refetch: () => Promise>;\n};\n\nexport const useGetAchTransfers = (\n accountId: string,\n key: any | any[] = \"\",\n options?: QueryOptions\n): UseGetAchTransfers => {\n const { data: achTransfers, isError, isSuccess, refetch } = useRequest(\n \"transfers\" + key,\n () => getAchTransfers(accountId),\n {\n ...options,\n refetchInterval: false,\n }\n );\n\n return { achTransfers, refetch };\n};\n","import useRequest, { QueryOptions } from \"./useRequest\";\n\nimport { BankInstitution, getBankInstitution } from \"../rest/banking\";\nimport { QueryObserverResult } from \"react-query\";\n\ntype UseGetBankInstitution = {\n institution?: BankInstitution;\n refetch: () => Promise>;\n};\n\nexport const useGetBankInstitution = (\n institutionId: string,\n key: any | any[] = \"\",\n options?: QueryOptions\n): UseGetBankInstitution => {\n const { data: institution, refetch } = useRequest(\n \"bank-institution\" + key,\n () => getBankInstitution(institutionId),\n {\n ...options,\n refetchInterval: false,\n }\n );\n\n return { institution, refetch };\n};\n","import useRequest, { QueryOptions } from \"./useRequest\";\n\nimport { QueryObserverResult } from \"react-query\";\nimport { Transfer, getRapydTransfers } from \"../rest/banking\";\n\ntype UseGetRapydTransfers = {\n rapydTransfers?: Transfer[];\n refetch: () => Promise>;\n};\n\nexport const useGetRapydTransfers = (\n accountId: string,\n key: any | any[] = \"\",\n options?: QueryOptions\n): UseGetRapydTransfers => {\n const { data: rapydTransfers, isError, isSuccess, refetch } = useRequest(\n \"rapyd-transfers\" + key,\n () => getRapydTransfers(accountId),\n {\n ...options,\n refetchInterval: false,\n }\n );\n\n return { rapydTransfers, refetch };\n};\n","import useRequest, { QueryOptions } from \"./useRequest\";\nimport { getWatchlists, Watchlist } from \"../rest/account\";\n\nexport const useGetWatchlists = (\n key: any | any[] = \"\",\n accountID: string = \"\",\n options?: QueryOptions\n) => {\n const { data: watchlists, refetch, isFetched } = useRequest(\n key,\n () => getWatchlists({ accountID }),\n { ...options, refetchInterval: false }\n );\n\n return { watchlists, refetch, isFetched };\n};\n\nexport default useGetWatchlists;\n","import useRequest, { QueryOptions } from \"./useRequest\";\nimport { getWatchlist, Watchlist } from \"../rest/account\";\n\nexport const useGetWatchlist = (\n key: any | any[] = \"\",\n accountID: string = \"\",\n name: string = \"Primary Watchlist\",\n options?: QueryOptions\n) => {\n const { data: watchlist, refetch, isFetched } = useRequest(\n key,\n () => getWatchlist({ accountID, name }),\n { ...options, refetchInterval: false }\n );\n\n return { watchlist, refetch, isFetched };\n};\n\nexport default useGetWatchlist;\n","import { getQuotes, Quote } from \"../rest/data\";\nimport useRequest, { QueryOptions } from \"./useRequest\";\n\nexport const useGetQuotes = (\n key: any | any[] = \"\",\n symbols: string[] = [],\n options?: QueryOptions\n) => {\n const { data: quotes, refetch, isFetched } = useRequest(\n key,\n () => getQuotes(symbols),\n { ...options, refetchInterval: false }\n );\n\n return { quotes, refetch, isFetched };\n};\n\nexport default useGetQuotes;\n","export type IpAddressResponse = {\n ip_address: string;\n};\n\nexport const getIpAddress = async () => {\n const response = await fetch(\n \"https://alpaca.markets/_ip_address\"\n );\n const data = await response.json();\n\n return data;\n};\n","import { getIpAddress, IpAddressResponse } from \"../rest/ip\";\n\nimport { useState } from \"react\";\nimport { useQuery } from \"react-query\";\n\nexport const useGetIpAddress = () => {\n const [ipAddress, setIpAddress] = useState(\"\");\n\n useQuery(\"ip-address\", getIpAddress, {\n cacheTime: 0,\n onSuccess: (data) =>\n setIpAddress(data.ip_address),\n });\n\n return {\n ipAddress,\n };\n};\n\nexport default useGetIpAddress;\n","import axios, { AxiosError } from \"axios\";\n\nimport { UseToastOptions } from \"@chakra-ui/react\";\n\nexport { useGetCitizenship } from \"./useGetCitizenship\";\nexport { useMutationRequest } from \"./useMutationRequest\";\nexport { useGetCryptoEnabled } from \"./useGetCryptoEnabled\";\nexport { useGetAccountDetails } from \"./useGetAccountDetails\";\nexport { useGetCountryInfos } from \"./useGetCountryInfos\";\nexport { useKeyPress } from \"./useKeyPress\";\nexport { useLock } from \"./useLock\";\n\nexport { useGetPositions } from \"./useGetPositions\";\nexport { useGetPaperAccounts } from \"./useGetPaperAccounts\";\nexport { useGetStatus } from \"./useGetStatus\";\nexport { useGetMargin } from \"./useGetMargin\";\nexport { useGetAsset } from \"./useGetAsset\";\nexport { useGetOrderbooks } from \"./useGetOrderbooks\";\nexport { useGetPosition } from \"./useGetPosition\";\nexport { useGetClock } from \"./useGetClock\";\nexport { useGetOrders } from \"./useGetOrders\";\nexport { useGetCryptoSnapshots } from \"./useGetCryptoSnapshots\";\nexport { useGetAchRelationshipsPending } from \"./useGetAchRelationshipsPending\";\nexport { useGetAccessKeys } from \"./useGetAccessKeys\";\n\nexport { usePlaid } from \"./usePlaid\";\nexport { useGetBillingOverview } from \"./useGetBillingOverview\";\nexport { useOnfido } from \"./useOnfido\";\nexport { useRequest } from \"./useRequest\";\nexport { useGetCountries } from \"./useGetCountries\";\nexport { useGetAccount } from \"./useGetAccount\";\nexport { useGetTrustedContact } from \"./useGetTrustedAccount\";\nexport { useGetActivities } from \"./useGetActivities\";\n\nexport { useGetAchRelationships } from \"./useGetAchRelationships\";\nexport { useGetAchTransfers } from \"./useGetAchTransfers\";\nexport { useGetBankInstitution } from \"./useGetBankInstitution\";\nexport { useGetRapydTransfers } from \"./useGetRapydTransfers\";\n\nexport { useGetWatchlists } from \"./useGetWatchlists\";\nexport { useGetWatchlist } from \"./useGetWatchlist\";\nexport { useGetQuotes } from \"./useGetQuotes\";\n\nexport { useGetCryptoFeeStructure } from \"./useGetCryptoFeeStructure\";\nexport { useGetCryptoMonthlyVolume } from \"./useGetCryptoMonthlyVolume\";\n\nexport { useGetIpAddress } from \"./useGetIpAddress\";\n\nexport const defaultToastSettings: UseToastOptions = {\n title: \"An error occurred\",\n status: \"error\",\n duration: 3000,\n isClosable: true,\n};\n\nexport const getErrorMessage = (err: Error | AxiosError): string => {\n if (axios.isAxiosError(err)) {\n const resp = err.response?.data;\n return resp?.debug || resp?.message;\n }\n return err.message;\n};\n","import { createAction, createReducer } from \"redux-act\";\nimport { pendingTask, begin, end } from \"react-redux-spinner\";\n\nconst REDUCER = \"app\";\nconst NS = `@@${REDUCER}/`;\n\nconst _setLoading = createAction(`${NS}SET_LOADING`);\n\nexport const setFormInvalid = createAction(`${NS}SET_FORM_INVALID`);\nexport const setUpdatingContent = createAction(`${NS}SET_UPDATING_CONTENT`);\nexport const setActiveDialog = createAction(`${NS}SET_ACTIVE_DIALOG`);\nexport const deleteDialogForm = createAction(`${NS}DELETE_DIALOG_FORM`);\nexport const addSubmitForm = createAction(`${NS}ADD_SUBMIT_FORM`);\nexport const deleteSubmitForm = createAction(`${NS}DELETE_SUBMIT_FORM`);\nexport const setLayoutState = createAction(`${NS}SET_LAYOUT_STATE`);\nexport const setOpenKeys = createAction(`${NS}SET_OPENKEYS_STATE`);\n\nexport const setLoading = (isLoading) => {\n const action = _setLoading(isLoading);\n action[pendingTask] = isLoading ? begin : end;\n return action;\n};\n\nconst initialState = {\n // APP STATE\n from: \"\",\n isUpdatingContent: false,\n isLoading: false,\n activeDialog: \"\",\n dialogForms: {},\n submitForms: {},\n invalidForms: {},\n openKeys: [],\n\n // LAYOUT STATE\n layoutState: {\n isMenuTop: false,\n disableAppMenu: false,\n menuMobileOpened: false,\n menuCollapsed: false,\n menuShadow: true,\n showBrandInHeader: false,\n themeLight: false,\n settingsOpened: false,\n },\n};\n\nexport default createReducer(\n {\n [_setLoading]: (state, isLoading) => ({ ...state, isLoading }),\n [setFormInvalid]: (state, param) => {\n // Sets forms (by id) invalid with a message or just boolean true.\n const invalidForms = {\n ...state.submitForms,\n [param.id || \"all\"]: param.message || true,\n };\n return { ...state, invalidForms };\n },\n [setUpdatingContent]: (state, isUpdatingContent) => ({\n ...state,\n isUpdatingContent,\n }),\n [setLayoutState]: (state, param) => {\n const layoutState = { ...state.layoutState, ...param };\n const newState = { ...state, layoutState };\n window.localStorage.setItem(\n \"app.layoutState\",\n JSON.stringify(newState.layoutState)\n );\n return newState;\n },\n [setOpenKeys]: (state, openKeys) => ({ ...state, openKeys }),\n [setActiveDialog]: (state, activeDialog) => {\n const result = { ...state, activeDialog };\n if (activeDialog !== \"\") {\n const id = activeDialog;\n result.dialogForms = { ...state.dialogForms, [id]: true };\n }\n return result;\n },\n [deleteDialogForm]: (state, id) => {\n const dialogForms = { ...state.dialogForms };\n delete dialogForms[id];\n return { ...state, dialogForms };\n },\n [addSubmitForm]: (state, id) => {\n const submitForms = { ...state.submitForms, [id]: true };\n return { ...state, submitForms };\n },\n [deleteSubmitForm]: (state, id) => {\n const submitForms = { ...state.submitForms };\n delete submitForms[id];\n return { ...state, submitForms };\n },\n },\n initialState\n);\n","import { createAction, createReducer } from \"redux-act\";\nimport Auth from \"@aws-amplify/auth\";\nimport Amplify from \"@aws-amplify/core\";\nimport { get } from \"lodash\";\nimport { getCurrentAuthenticatedUser } from \"../../utils\";\n\nimport {\n getAccount,\n paciamGetAccount,\n loadAccountDetails,\n loadPaperAccounts,\n updateAccountDetails,\n updateAccountOwner,\n} from \"../account\";\nimport * as accountListActions from \"reducers/auth/accountList\";\nimport { logout } from \"./logout\"\nimport { getCookie } from \"src/lib/cookies\";\nimport sha1 from \"js-sha1\";\nimport { updateIntercom } from \"src/utils/intercom\";\n\nconst COGNITO_OK_RESPONSE = \"SUCCESS\";\n\nconst REDUCER = \"auth\";\nconst NS = `@@${REDUCER}/`;\n\nconst _setFrom = createAction(`${NS}SET_FROM`);\nconst _setPasswordWasReset = createAction(`${NS}SET_PASSWORD_WAS_RESET`);\n// TODO: Implement this.\n// const _setNewPasswordRequired = createAction(`${NS}SET_NEW_PASSWORD`)\nexport const setUserState = createAction(`${NS}SET_USER_STATE`);\nexport const setAccountVerificationRequired = createAction(\n `${NS}SET_ACCOUNT_VERIFICATION_REQUIRED`\n);\nexport const setResentAccountVerification = createAction(\n `${NS}SET_RESENT_ACCOUNT_VERIFICATION`\n);\nexport const setAccountVerificationError = createAction(\n `${NS}SET_ACCOUNT_VERIFICATION_ERROR`\n);\nexport const setEmailUpdateVerificationRequired = createAction(\n `${NS}SET_EMAIL_UPDATE_VERIFICATION_REQUIRED`\n);\n\nexport const initAmplify = () => {\n Amplify.configure({\n Auth: {\n // REQUIRED only for Federated Authentication - Amazon Cognito Identity Pool ID\n // (for accessing services like Storage)\n // (Federated Identities > Selected Identity Pool/Create new > Sample code > Select Javascript > Get AWS Credentials)\n identityPoolId: window.env.COGNITO_IDENTITY_POOL_ID,\n\n // REQUIRED - Amazon Cognito Region\n region: window.env.COGNITO_REGION,\n\n // OPTIONAL - Amazon Cognito User Pool ID\n // (User pools > General Settings > Pool Id)\n userPoolId: window.env.COGNITO_USER_POOL_ID,\n\n // OPTIONAL - Amazon Cognito Web Client ID (26-char alphanumeric string)\n // (User pools > General Settings > App clients > App client id)\n userPoolWebClientId: window.env.COGNITO_CLIENT_ID,\n\n // OPTIONAL - Enforce user authentication prior to accessing AWS resources or not\n mandatorySignIn: false,\n\n // OPTIONAL - Configuration for cookie storage\n cookieStorage: {\n // REQUIRED - Cookie domain (only required if cookieStorage is provided)\n domain: window.location.hostname,\n // OPTIONAL - Cookie path\n path: \"/\",\n // OPTIONAL - Cookie expiration in days\n expires: 7,\n // OPTIONAL - Cookie secure flag\n secure: window.env.ENV === \"PROD\",\n },\n },\n Storage: {\n bucket: window.env.COGNITO_BUCKET,\n },\n // AppSync can power the API with GraphQL simply by proxying HTTP requests to the REST API\n // 'aws_appsync_graphqlEndpoint': 'https://xxxxxx.appsync-api.us-east-1.amazonaws.com/graphql',\n // 'aws_appsync_region': 'us-east-1',\n // 'aws_appsync_authenticationType': 'AMAZON_COGNITO_USER_POOLS', // You have configured Auth with Amazon Cognito User Pool ID and Web Client Id\n });\n};\n\n/**\n * initUser will initialize a new user, setting up their account for\n * the first time if necessary. It will also identify the user in Segment.\n * Mandatory to call after first login. Good to always call after login\n * or after any change in user data so it can report to Segment.\n *\n * @param {Boolean} refreshAccountInfo Pass true to get updated account info\n */\nexport const initUser = (refreshAccountInfo = false) => (\n dispatch,\n getState\n) => {\n const getCookieValue = (a) => {\n var b = document.cookie.match(\"(^|;)\\\\s*\" + a + \"\\\\s*=\\\\s*([^;]+)\");\n return b ? b.pop() : \"\";\n };\n\n // Just call this to get the session.\n // Note: Unless `allowAccess` is given, access will be permitted if `getCurrentAuthenticatedUser()`\n // comes back with a response/user.\n return getCurrentAuthenticatedUser()\n .then((data) => {\n dispatch(\n setUserState({\n userState: data,\n })\n );\n\n setDomainJWT(data);\n // Don't fetch account more than necessary\n const { account = false } = getState().account;\n\n // Note: One challenge is that in order to redirect, we need to have the account details.\n // So if we do not have account info, return the dispatch(getAccount()) and within there, get details.\n // Then check auth after having those details.\n // This is a good bit of info that needs to be retrieved before a user gets redirected.\n // Given how much gets loaded anyway, this may not even be needed. We might just dispatch getAccount()\n // all the time.\n if (!account || !account.id || refreshAccountInfo) {\n return dispatch(getAccount()).then(async (action) => {\n // Sync tasks.\n const accountId =\n (action &&\n action.payload &&\n action.payload.account &&\n action.payload.account.id) ||\n false;\n const cognitoAccountIdAttr =\n (data && data.attributes && data.attributes[\"custom:account_id\"]) ||\n false;\n const accountEmail =\n (action &&\n action.payload &&\n action.payload.account &&\n action.payload.account.email) ||\n false;\n const cognitoAccountEmail =\n (data && data.attributes && data.attributes[\"email\"]) || false;\n if (accountId) {\n // If, for some reason, the Cognito user does not have its account_id attribute set, do so.\n // This should never be the case. It was the case during testing/migration. It's harmless to set.\n // Maybe a migration script failed to update the account id? This would catch it.\n if (!cognitoAccountIdAttr) {\n Auth.updateUserAttributes(data, {\n \"custom:account_id\": accountId,\n });\n }\n\n // In the case where a cognito email is not synced up with the email for this account in GoBroker:\n // Sleep the thread for a moment and then retry to see if it resolves a potential race case that happened,\n // If it's still happening, update the email, which will set the status as ACCOUNT_UPDATED and we will need to resolve the issue.\n if (\n accountEmail &&\n cognitoAccountEmail &&\n accountEmail.toLowerCase() !== cognitoAccountEmail.toLowerCase()\n ) {\n setTimeout(() => {\n // retry call after sleep\n dispatch(getAccount()).then((action) => {\n const retryGbEmail =\n (action &&\n action.payload &&\n action.payload.account &&\n action.payload.account.email) ||\n false;\n const retryCognitoEmail =\n (data && data.attributes && data.attributes[\"email\"]) ||\n false;\n\n // if still out of sync, update mark as needing attention\n if (\n retryGbEmail &&\n retryCognitoEmail &&\n retryGbEmail.toLowerCase() !==\n retryCognitoEmail.toLowerCase()\n ) {\n dispatch(updateAccountOwner({ email: retryCognitoEmail }));\n }\n });\n }, 5000);\n }\n }\n\n // Once the account has been retrieved (and possibly created for first time users)\n // The account_id will be set in the state. The following calls are useful for all areas\n // of the dashboard (and for segment), so retrieve the data from them now.\n return Promise.all([\n dispatch(loadAccountDetails()),\n dispatch(loadPaperAccounts()),\n ])\n .then(() => {\n const state = getState();\n const account = state.account || false;\n\n // TODO: track the following:\n // last order executed date (*not currently sent, may not come from dashboard)\n // first order executed date (*not currently sent, may not come from dashboard)\n\n if (account) {\n // Age\n let age = 0;\n if (account.details) {\n const thisYear = new Date().getFullYear();\n const birthYear = new Date(\n account.details.date_of_birth\n ).getFullYear();\n age = thisYear - birthYear;\n }\n\n // The algoId in this case will just be the current account\n // We won't report the paper account's trade details (portfolio_value, cash, buying_power to Segment)\n const algoId = account.account.id;\n const trade = state.trade || {};\n const ownerIdHash = sha1(account.details.owner_id) || \"\";\n const ownerRefId = ownerIdHash.substring(0, 10);\n // refBy will be pushed during new account sign up\n // This way it doesn't always get applied even for existing accounts\n\n // Follow the spec. Segment has to properly map attributes to various destinations.\n // https://segment.com/docs/spec/identify/#traits\n let traits = {\n // Technically, this may not matter. Segment should be good with snake or camel case.\n createdAt: account.account.created_at,\n apexApprovalStatus: account.account.apex_approval_status,\n status: account.account.status,\n ownerId: account.details.owner_id,\n // The user's referrer ID is first 10 of sha1 of their owner_id\n refId: ownerRefId,\n email: account.account.email,\n name: account.account.name,\n firstName: account.details.given_name,\n lastName: account.details.family_name,\n age,\n buyingPower: Number.parseFloat(\n (trade && trade[algoId] && trade[algoId].buying_power) || 0\n ),\n cash: Number.parseFloat(\n (trade && trade[algoId] && trade[algoId].cash) || 0\n ),\n portfolioValue: Number.parseFloat(\n (trade && trade[algoId] && trade[algoId].portfolio_value) ||\n 0\n ),\n tradingBlocked: account.account.trading_blocked,\n transfersBlocked: account.account.transfers_blocked,\n // Want both the address object (as per Segment spec) as well as easier to target fields (for now).\n country: \"US\",\n state: account.details.state,\n address: {\n country: \"US\",\n state: account.details.state,\n },\n };\n\n // Optional clearing broker\n if (account.account && account.account.clearing_broker) {\n traits.clearing_broker = account.account.clearing_broker;\n }\n\n // Optional profile pic / avatar\n if (state.profile && state.profile.picUrl) {\n traits.avatar = state.profile.picUrl;\n }\n\n // This will be recorded by another call under the profitloss reducer. No need to always load profit loss.\n // May also move paper account identify call as well.\n // traits.profitLossDay = profitloss.day_plpc;\n // traits.profitLossTotal = profitloss.total_plpc;\n\n // IMPORTANT: From where did our users come from?\n // These come from cookies. These only get sent while the user's status is not 'ACTIVE'\n // Note on attribution: This models a \"last click/came from\" type of model. Meaning, a user\n // could come from one ad campaign, sign up, then come back from another ad later before\n // being approved. In this case, it would be the second ad that was attributed with the conversion.\n // Unless cookies aren't overwritten/set again. Could control that outside of here.\n // Note: These are also tracked as events during onboarding. However, this allows us to target users\n // based on this information.\n if (account.account.status !== \"ACTIVE\") {\n traits.referrerCampaignName = getCookieValue(\n \"alpaca_referrer_campaign_name\"\n );\n traits.referrerCampaignSource = getCookieValue(\n \"alpaca_referrer_campaign_source\"\n );\n traits.referrerCampaignMedium = getCookieValue(\n \"alpaca_referrer_campaign_medium\"\n );\n traits.referrerURL = getCookieValue(\"alpaca_referrer_url\");\n }\n\n // NOTE: Segment is given our ownerId for the user id.\n // This does mean any user signing up for a newsletter, handled by Intercom, could have two records.\n // Once they are converted to an Alpaca user, the old entry in Intercom can be archived.\n // Easy to filter out that \"old\" record with any of the above props too (since it won't have them).\n updateIntercom(traits.ownerId, traits);\n }\n return;\n }) // end then() for Promise.all() - retrieval of account info\n .catch((err) => {\n console.error(err);\n }); // end catch() for Proimise.all() - retrieval of account info\n }); // end dispatch getAccount()\n }\n return;\n })\n .catch(() => {\n const paciamToken = getCookie(\"paciamAccessToken\");\n\n if (paciamToken) {\n dispatch(paciamGetAccount()).then(() => {\n dispatch(accountListActions.load());\n });\n return Promise.all([dispatch(loadAccountDetails())]);\n }\n return Promise.reject();\n });\n};\n\n// Copy JWT cookie to the current domain to share the\n// login info to the subdomain apps such as zaam.\nconst setDomainJWT = (user) => {\n const jwt = get(user, \"signInUserSession.idToken.jwtToken\", user);\n if (jwt) {\n document.cookie = [\n \"dashboard.authtoken=\" + jwt,\n // needs to have this leading dot to propagate to subdomain\n \"domain=.\" + location.hostname,\n \"max-age=\" + 30 * 24 * 60 * 60,\n \"path=/\",\n ].join(\"; \");\n }\n};\n\n/**\n * Resends a user's account verification code.\n * This can be used in a variety of places including\n * during signup verification or forgot password verification.\n *\n * @param {string} username\n */\nexport const resendSignUp = (username) => (dispatch) => {\n // TODO: Maybe handle the error using the same dispatch... one will just have an error instead\n // Then what? It shouldn't fail, but will it? Have to see.\n Auth.resendSignUp(username.toLowerCase())\n .then((data) => {\n dispatch(setResentAccountVerification(data));\n })\n .catch((err) => console.error(\"error resending signup:\", err));\n};\n\n/**\n * Resets the user's password in Cognito\n *\n * @param {string} username\n * @param {string} password\n * @param {string} code\n */\nexport const resetPassword = (username, code, password) => (dispatch) => {\n Auth.forgotPasswordSubmit(username.toLowerCase(), code, password)\n .then(() => {\n // workaround we have to do because there's no Cognito support for global session invalidation on pw reset\n Auth.signIn(username, password).then(() => {\n dispatch(logout())\n })\n dispatch(_setPasswordWasReset(true));\n })\n .catch((err) => {\n console.error(\"error resetting password: \", err);\n dispatch(_setPasswordWasReset(false));\n });\n};\n\n/**\n * Verifies a user attribute change using a code.\n * This action should not be called unless the user is logged in with a valid session.\n * This is useful for attribute changes for which Cognito sends a verification code to confirm.\n * For example, an e-mail update.\n *\n * Note: Not all attributes need to be verified - `email` does.\n *\n * @param {string} attribute The Cognito user attribute name being updated/verified\n * @param {string} code The verification code that was sent to the user\n */\nexport const verifyAsCurrentUser = (attribute, code) => async (dispatch) => {\n if (attribute && code) {\n let result = await Auth.verifyCurrentUserAttributeSubmit(attribute, code);\n if (result === COGNITO_OK_RESPONSE) {\n // Get the user again with fresh attributes.\n let user = await getCurrentAuthenticatedUser();\n const newEmail =\n (user && user.attributes && user.attributes.email) || false;\n // Certainly do not update email if something went wrong here.\n if (newEmail) {\n return Promise.all([\n dispatch(setEmailUpdateVerificationRequired(false)),\n // update in gobroker\n dispatch(updateAccountDetails({ email: newEmail.toLowerCase() })),\n ]);\n }\n }\n }\n};\n\n// Export this reducer\nconst initialState = {\n // an initial account verification\n accountVerificationRequired: {},\n accountVerificationError: false,\n // when updating email Cognito attributes, user must re-verify (the email part triggers it)\n emailUpdateVerificationRequired: false,\n resentAccountVerification: false,\n failedLogin: false,\n forgotPasswordVerification: false,\n passwordWasReset: false,\n isHideLogin: false,\n // USER STATE\n userState: {},\n};\nexport default createReducer(\n {\n [_setFrom]: (state, from) => ({ ...state, from }),\n [_setPasswordWasReset]: (state, param) => ({\n ...state,\n passwordWasReset: param,\n }),\n [setUserState]: (state, { userState }) => ({ ...state, userState }),\n [setAccountVerificationRequired]: (state, param) => {\n // like invalid forms, this requires a form id and (otherwise default 'all' forms)\n // however the key value here will be whatever was passed\n const accountVerificationRequired = param\n ? {\n ...state.submitForms,\n [param.id || \"all\"]: param,\n }\n : false;\n return { ...state, accountVerificationRequired };\n },\n [setAccountVerificationError]: (state, param) => {\n return { ...state, accountVerificationError: param };\n },\n [setResentAccountVerification]: (state, param) => ({\n ...state,\n resentAccountVerification: param,\n }),\n [setEmailUpdateVerificationRequired]: (state, param) => ({\n ...state,\n emailUpdateVerificationRequired: param,\n }),\n // TODO: There will be a case where Cognito requires users to set a new password.\n // It could perhaps be if an admin sets up an account with the requirement for the user to set a new password on first login.\n // Implement this.\n // [_setNewPasswordRequired]: (state, needsNewPassword) => ({ ...state, needsNewPassword }),\n },\n initialState\n);\n","import instance from \"..\";\nimport moment from \"moment\";\n\nimport { AuthService, getAttributes, getCustomAttr } from \"../auth\";\nimport { renameFile } from \"../../utils\";\n\nexport interface TradeAccount {\n id: string;\n account_number: string;\n status: string;\n crypto_status: string;\n currency: string;\n buying_power: string;\n regt_buying_power: string;\n daytrading_buying_power: string;\n effective_buying_power: string;\n non_marginable_buying_power: string;\n bod_dtbp: string;\n cash: string;\n cash_withdrawable: string;\n cash_transferable: string;\n accrued_fees: string;\n pending_transfer_out: string;\n pending_transfer_in: string;\n portfolio_value: string;\n pattern_day_trader: boolean;\n trading_blocked: boolean;\n transfers_blocked: boolean;\n account_blocked: boolean;\n created_at: Date;\n trade_suspended_by_user: boolean;\n multiplier: string;\n shorting_enabled: boolean;\n equity: string;\n last_equity: string;\n long_market_value: string;\n short_market_value: string;\n position_market_value: string;\n initial_margin: string;\n maintenance_margin: string;\n last_maintenance_margin: string;\n sma: string;\n daytrade_count: number;\n balance_asof: string;\n clearing_broker: string;\n}\n\nexport interface UserConfigurations {\n max_margin_multiplier: string;\n dtbp_check: string;\n no_shorting: boolean;\n suspend_trade: boolean;\n fractional_trading: boolean;\n pdt_check: string;\n trade_confirm_email: string;\n trade_suspended_by_user: boolean;\n ptp_no_exception_entry: boolean;\n}\n\nexport interface Account {\n account_number: string;\n balance_asof: string;\n clearing_broker: string;\n created_at: string;\n crypto_broker: string;\n crypto_status: string;\n crypto_tier: number;\n correspondent: string;\n day_trade_count: number;\n email: string;\n equity: string;\n id: string;\n kyc_provider: string;\n user_configurations: UserConfigurations;\n admin_configurations: {\n allow_instant_ach: boolean;\n };\n last_onboarding_step: string;\n maintenance_margin: string;\n marked_pattern_day_trader_at: string;\n marked_risky_transfers_at: string;\n multiplier: string;\n name: string;\n shorting_enabled: string;\n status: string;\n onfido_applicant_id?: string;\n onfido_details?: Record;\n can_limited_fund: boolean;\n}\n\nexport type Portfolio = {\n [key: string]: {\n // date, profit_loss, profit_loss_pct, portfolio_value\n arrays: [[], [], [], []];\n };\n};\nexport interface Position {\n asset_id: string;\n symbol: string;\n exchange: string;\n asset_class: string;\n asset_marginable: boolean;\n qty: string;\n avg_entry_price: string;\n side: string;\n market_value: string;\n cost_basis: string;\n unrealized_pl: string;\n unrealized_plpc: string;\n unrealized_intraday_pl: string;\n unrealized_intraday_plpc: string;\n current_price: string;\n lastday_price: string;\n change_today: string;\n qty_available: string;\n}\n\nexport interface OwnerDetails {\n permanent_resident: boolean;\n annual_income_max: number;\n annual_income_min: number;\n liquid_net_worth: number;\n total_net_worth: number;\n city: string;\n unit: string;\n country_of_citizenship: string;\n country_of_tax_residence: string;\n created_at: string;\n crypto_agreement_signed_at?: Date | null;\n crypto_agreement_revision?: string;\n customer_agreement_signed_at?: Date;\n date_of_birth: string;\n employer_address: string;\n employer: string;\n employment_status: string;\n country_of_birth: string;\n visa_type: string;\n visa_expiration_date?: Date;\n family_name: string;\n function: string;\n funding_source: string[];\n given_name: string;\n immediate_family_exposed: boolean;\n is_affiliated_exchange_or_finra: null;\n is_control_person: boolean;\n is_discretionary: boolean;\n is_politically_exposed: boolean;\n is_professional: boolean;\n legal_name: string;\n liquid_net_worth_max: number;\n liquid_net_worth_min: number;\n owner_id: string;\n phone_number: string;\n position: string;\n postal_code: string;\n state: string;\n street_address: string[];\n tax_id_type: string;\n total_net_worth_max: number;\n total_net_worth_min: number;\n}\n\nexport interface TrustedContact {\n account_id: string;\n email_address: string;\n phone_number: string;\n street_address: string;\n city: string;\n state: string;\n postal_code: string;\n country: string;\n given_name: string;\n family_name: string;\n}\n\nexport type DocUploadData = {\n doc_type: string;\n doc_sub_type: string;\n content: any;\n};\n\nexport interface GetAccountParams {\n product: string;\n}\n\nexport const getAccount = async ({\n product = \"live\",\n}: GetAccountParams): Promise => {\n // fetch the live account no matter what\n const accounts = await instance.get(\"/accounts\");\n const live = accounts.data[0];\n\n // if not paper we can stop here and return the live account\n if (product !== \"paper\") {\n return live;\n }\n\n // if paper we need to fetch the paper account\n const paperAccounts = await getPaperAccounts(live.id);\n const paper = await instance.get(\n \"/paper_accounts/\"\n .concat(paperAccounts[0].paper_account_id)\n .concat(\"/trade_account\")\n );\n\n return paper.data;\n};\n\nexport const getDetails = async (\n accountID: string,\n product = \"live\"\n): Promise => {\n const res = await instance.get(\n product === \"paper\" ? \"/paper_accounts/\" : `/accounts/${accountID}/details`\n );\n\n return res.data;\n};\n\nexport const patchDetails = async (\n accountID: string,\n payload: Partial\n) => {\n const res = await instance.patch(\n `/accounts/${accountID}/details`,\n payload\n );\n return res.data;\n};\n\nexport const setUserConfigurations = async (\n accountID: string,\n product = \"live\",\n payload: Partial\n) => {\n const res = await instance.patch(\n `/${getPathForProduct(product)}/${accountID}/configurations`,\n payload\n );\n\n return res.data;\n};\n\nexport interface UserConfigurationsParams {\n accountID: string;\n product?: string;\n}\n\nexport const getUserConfigurations = async ({\n accountID = \"\",\n product = \"live\",\n}: UserConfigurationsParams): Promise => {\n const res = await instance.get(\n `/${getPathForProduct(product)}/${accountID}/configurations`\n );\n\n return res.data;\n};\n\nexport const patchFinancialProfile = async (\n accountID: string,\n payload: Partial\n) => {\n const res = await instance.patch(\n `/accounts/${accountID}/steps/next/financial_profile_step`,\n payload\n );\n return res.data;\n};\n\nexport const patchEmploymentStatus = async (\n accountID: string,\n payload: Partial\n) => {\n const res = await instance.patch(\n `/accounts/${accountID}/steps/next/employment_step`,\n payload\n );\n return res.data;\n};\n\nexport const getTrustedContact = async (\n accountID: string\n): Promise => {\n const res = await instance.get(`/accounts/${accountID}/trusted_contact`);\n return res.data;\n};\n\nexport type Product = \"live\" | \"paper\";\n\nexport interface LiquidatePositionParams {\n accountID: string;\n product: Product;\n symbol: string;\n cancelOrders?: boolean;\n}\n\nexport const liquidatePosition = async ({\n product,\n accountID,\n symbol,\n cancelOrders,\n}: LiquidatePositionParams) => {\n const res = await instance.delete(\n `/${\n product === \"live\" ? \"accounts\" : \"paper_accounts\"\n }/${accountID}/positions/${symbol}?cancel_orders=${cancelOrders}`,\n {\n data: {\n allow_out_of_markets: false,\n symbols: [symbol],\n },\n }\n );\n\n return res.data;\n};\n\nexport interface Order {\n id: string;\n client_order_id: string;\n created_at: Date;\n updated_at: Date;\n submitted_at: Date;\n filled_at: Date;\n expired_at?: any;\n canceled_at?: any;\n failed_at?: any;\n replaced_at?: any;\n replaced_by?: any;\n replaces?: any;\n asset_id: string;\n symbol: string;\n asset_class: string;\n notional?: any;\n qty: string;\n filled_qty: string;\n filled_avg_price: string;\n order_class: string;\n order_type: string;\n type: string;\n side: string;\n time_in_force: string;\n limit_price?: any;\n stop_price?: any;\n status: string;\n extended_hours: boolean;\n legs?: any;\n trail_percent?: any;\n trail_price?: any;\n hwm?: any;\n subtag?: any;\n source: string;\n}\n\nexport interface CancelOrderParams {\n accountID: string;\n product: string;\n orderID: string;\n}\n\nexport const cancelOrder = async ({\n product,\n accountID,\n orderID,\n}: CancelOrderParams) => {\n const res = await instance.delete(\n `/${\n product === \"live\" ? \"accounts\" : \"paper_accounts\"\n }/${accountID}/orders/${orderID}`\n );\n\n return res.data;\n};\n\nexport const patchTrustedAccount = async (\n accountID: string,\n payload: Partial\n) => {\n const res = await instance.patch(\n `/accounts/${accountID}/trusted_contact`,\n {\n ...payload,\n // todo: fix this, i'll get to it later\n street_address: \"\",\n city: \"\",\n state: \"\",\n postal_code: \"\",\n country: \"\",\n }\n );\n return res.data;\n};\n\nexport const getTrustedAccount = async (\n accountID: string\n): Promise => {\n const res = await instance\n .get(`/accounts/${accountID}/trusted_contact`)\n .catch(() => null);\n\n // todo: handle this better later, I don't have time to do it now\n return res?.data || ({} as TrustedContact);\n};\n\nexport const postTrustedAccount = async (\n accountID: string,\n payload: Partial\n) => {\n const res = await instance.post(\n `/accounts/${accountID}/trusted_contact`,\n {\n ...payload,\n // todo: fix this, i'll get to it later\n street_address: \"\",\n city: \"\",\n state: \"\",\n postal_code: \"\",\n country: \"\",\n }\n );\n return res.data;\n};\n\nexport interface NonIdentityAccountDocumentURL {\n id: string;\n url: string;\n}\n\nexport const getNonIdentityAccountDocumentURL = async (\n accountID: string,\n documentID: string\n): Promise => {\n const res = await instance.get(\n `accounts/${accountID}/documents/${documentID}/url`,\n {\n headers: {\n Accept: \"*/*\",\n },\n }\n );\n\n return res.data;\n};\n\nexport interface NonIdentityAccountDocument {\n id: string;\n name: string;\n type: string;\n sub_type: string;\n date: string;\n}\n\nconst DEFAULT_DOCUMENTS_RANGE_IN_YEARS = 1;\n\nexport const getNonIdentityAccountDocuments = async (\n accountID: string\n): Promise> => {\n const res = await instance.get(\n `accounts/${accountID}/documents`.concat(\n `?start=${moment()\n .subtract(DEFAULT_DOCUMENTS_RANGE_IN_YEARS, \"year\")\n .format(\"YYYY-MM-DD\")}&end=${moment().format(\"YYYY-MM-DD\")}`\n )\n );\n return res.data;\n};\n\nexport const getAccountDocuments = async (\n accountID: string\n): Promise> => {\n const res = await instance.get(`documents/accounts/${accountID}`);\n return res.data;\n};\n\nexport const uploadAccountDocument = async (\n accountID: string,\n payload: DocUploadData\n): Promise => {\n var formData = new FormData();\n formData.append(\"uploadfile\", payload.content);\n const res = await instance.post(\n `documents/accounts/${accountID}/upload/${payload.doc_type}/${payload.doc_sub_type}`,\n formData,\n { headers: { \"Content-Type\": \"multipart/form-data\" } }\n );\n return res.data;\n};\n\nexport const fetchAccountAgreement = async (\n accountID: string,\n agreement: string\n): Promise => {\n const res = await instance.get(\n `/accounts/${accountID}/taxfiles/${agreement}/preview`,\n { responseType: \"blob\" }\n );\n return res.data;\n};\n\nexport const requestEmail = async (\n email: string,\n a: string\n): Promise => {\n const res = await instance.post(\"/owner/email\", { email, a });\n return res.data;\n};\n\nexport const confirmEmail = async (code: string): Promise => {\n const res = await instance.post(\"/owner/email-confirm\", { code });\n return res.data;\n};\n\nexport const getCountryOfCitizenship = async () => {\n const user = await AuthService.getCurrentUser();\n const attr = await getAttributes(user);\n return getCustomAttr(attr, \"citizenship\", \"\");\n};\n\n// adding a symbol to the watchlist\n// POST https://staging-app.tradetalk.us/internal/accounts/b501fb34-56cd-4a2a-80cd-a9a37bf16e10/watchlists:by_name?name=Primary Watchlist\n// {\"symbol\":\"GME\"}\n\n// removing a symbol from a watchlist\n// PUT https://staging-app.tradetalk.us/internal/accounts/b501fb34-56cd-4a2a-80cd-a9a37bf16e10/watchlists:by_name?name=Primary Watchlist\n// {\"name\":\"Primary Watchlist\",\"symbols\":[\"SPY\",\"FB\"]}\n\nexport interface Asset {\n id: string;\n class: string;\n exchange: string;\n symbol: string;\n name: string;\n status: string;\n tradable: boolean;\n marginable: boolean;\n maintenance_margin_requirement: number;\n shortable: boolean;\n easy_to_borrow: boolean;\n fractionable: boolean;\n}\n\nexport interface Watchlist {\n id: string;\n account_id: string;\n created_at: Date;\n updated_at: Date;\n name: string;\n assets: Asset[];\n}\n\nexport interface GetWatchlistParams {\n accountID: string;\n name: string;\n}\n\nexport const getWatchlist = async ({\n accountID,\n name,\n}: GetWatchlistParams): Promise => {\n const res = await instance.get(\n `/accounts/${accountID}/watchlists:by_name?name=${name}`\n );\n return res.data;\n};\n\nexport interface AddSymbolToWatchlistParams {\n accountID: string;\n name: string;\n symbol: string;\n}\n\nexport const addSymbolToWatchlist = async ({\n accountID,\n name,\n symbol,\n}: AddSymbolToWatchlistParams): Promise => {\n const res = await instance.post(\n `/accounts/${accountID}/watchlists:by_name?name=${name}`,\n { symbol }\n );\n return res.data;\n};\n\nexport interface RemoveSymbolFromWatchlistParams {\n accountID: string;\n name: string;\n symbols: string[];\n}\n\nexport const removeSymbolFromWatchlist = async ({\n accountID,\n name,\n symbols,\n}: RemoveSymbolFromWatchlistParams): Promise => {\n const res = await instance.put(\n `/accounts/${accountID}/watchlists:by_name?name=${name}`,\n { name, symbols }\n );\n return res.data;\n};\n\nexport interface CreateWatchlistParams {\n accountID: string;\n name: string;\n symbols: string[];\n}\n\nexport const createWatchlist = async ({\n accountID,\n name,\n symbols,\n}: CreateWatchlistParams): Promise => {\n const res = await instance.post(`/accounts/${accountID}/watchlists`, {\n name,\n symbols,\n });\n return res.data;\n};\n\nexport interface GetWatchlistsParams {\n accountID: string;\n}\n\nexport const getWatchlists = async ({\n accountID,\n}: GetWatchlistsParams): Promise => {\n const res = await instance.get(`/accounts/${accountID}/watchlists`);\n return res.data;\n};\n\nexport interface ResetPaperAccountParams {\n accountID: string;\n paperAccountID: string;\n cash: number;\n}\n\nexport const resetPaperAccount = async ({\n accountID,\n paperAccountID,\n cash,\n}: ResetPaperAccountParams): Promise => {\n const res = await instance.post(\n `/accounts/${accountID}/paper_accounts/${paperAccountID}`,\n { cash }\n );\n\n return res.data;\n};\n\nexport interface PaperAccount {\n account_id: string;\n paper_account_id: string;\n created_at: string;\n updated_at: string;\n}\n\nexport const getPaperAccounts = async (\n accountID: string\n): Promise => {\n const res = await instance.get(`/accounts/${accountID}/paper_accounts`);\n return res.data;\n};\n\nexport interface Margin {\n id: string;\n account_number: string;\n status: string;\n crypto_status: string;\n currency: string;\n buying_power: string;\n regt_buying_power: string;\n daytrading_buying_power: string;\n effective_buying_power: string;\n non_marginable_buying_power: string;\n bod_dtbp: string;\n cash: string;\n cash_withdrawable: string;\n cash_transferable: string;\n accrued_fees: string;\n pending_transfer_out: string;\n pending_transfer_in: string;\n portfolio_value: string;\n pattern_day_trader: boolean;\n trading_blocked: false;\n transfers_blocked: false;\n account_blocked: false;\n created_at: string;\n trade_suspended_by_user: false;\n multiplier: string;\n shorting_enabled: boolean;\n equity: string;\n last_equity: string;\n long_market_value: string;\n short_market_value: string;\n position_market_value: string;\n initial_margin: string;\n maintenance_margin: string;\n last_maintenance_margin: string;\n sma: string;\n daytrade_count: number;\n balance_asof: string;\n clearing_broker: string;\n}\n\nexport const getMargin = async (\n accountID: string,\n paper?: boolean\n): Promise => {\n const res = await instance.get(\n `/${\n paper ? \"paper_accounts\" : \"accounts\"\n }/${accountID}/trade_account/margin`\n );\n return res.data;\n};\n\nexport interface GetOrdersParams {\n accountID: string;\n paper?: boolean;\n symbols?: string[];\n}\n\nexport const getOrders = async ({\n accountID,\n paper,\n symbols,\n}: GetOrdersParams): Promise => {\n const res = await instance.get(\n `/${\n paper ? \"paper_accounts\" : \"accounts\"\n }/${accountID}/orders?limit=500&status=all&symbols=${symbols?.join(\",\")}`\n );\n return res.data;\n};\n\nexport interface GetPositionParams {\n accountID: string;\n symbol: string;\n paper?: boolean;\n}\n\nexport const getPosition = async ({\n accountID,\n symbol,\n paper,\n}: GetPositionParams): Promise => {\n const res = await instance.get(\n `/${paper ? \"paper_accounts\" : \"accounts\"}/${accountID}/positions/${symbol}`\n );\n return res.data;\n};\n\nexport interface GetPositionsParams {\n accountID: string;\n product?: string;\n}\n\nexport const getPositions = async ({\n accountID,\n product = \"paper\",\n}: GetPositionsParams): Promise => {\n const res = await instance.get(\n `/${\n product === \"paper\" ? \"paper_accounts\" : \"accounts\"\n }/${accountID}/positions`\n );\n\n return res.data;\n};\n\nexport interface Activity {\n id: string;\n activity_type: string;\n date: string;\n transaction_time: string;\n net_amount: string;\n description: string;\n symbol: string;\n side: string;\n price: string;\n qty: string;\n per_share_amount: string;\n status: string;\n}\n\nexport interface GetActivitiesParams {\n accountID: string;\n paper?: boolean;\n activityTypes?: string[];\n after?: string;\n date?: string;\n until?: string;\n}\n\nexport const getActivities = async ({\n accountID,\n paper,\n activityTypes,\n after,\n date,\n until,\n}: GetActivitiesParams): Promise => {\n const base = paper ? \"/paper_accounts\" : \"/accounts\";\n const queryParams = {\n activity_types: activityTypes?.join(\",\"),\n after,\n date,\n until,\n };\n\n const res = await instance.get(`${base}/${accountID}/activities`, {\n params: queryParams,\n });\n\n return res.data;\n};\n\nexport interface Bank {\n id: string;\n account_id: string;\n name: string;\n status: string;\n country: string;\n state_province: string;\n postal_code: string;\n city: string;\n street_address: string;\n account_number: string;\n bank_code: string;\n bank_code_type: string;\n created_at: Date;\n updated_at: Date;\n}\n\nexport interface GetBanksParams {\n accountID: string;\n}\n\nexport const getBanks = async ({\n accountID,\n}: GetBanksParams): Promise => {\n const res = await instance.get(`/accounts/${accountID}/banks`);\n return res.data;\n};\n\nexport interface CreateBankParams {\n accountID: string;\n bank: Bank;\n}\n\nexport const createBank = async ({\n accountID,\n bank,\n}: CreateBankParams): Promise => {\n const res = await instance.post(`/accounts/${accountID}/banks`, bank);\n return res.data;\n};\n\nexport const uploadBankStatement = async ({\n accountID,\n file,\n}: {\n accountID: string;\n file: File;\n}): Promise => {\n const now = moment().format(\"YYYY-MM-DD HH:mm:ss\");\n const bankStatement = renameFile(file, `bank_statement_${now}`);\n const formData = new FormData();\n formData.append(\"uploadfile\", bankStatement);\n\n const res = await instance.post(\n `/documents/accounts/${accountID}/upload/identity_verification/bank_statement`,\n formData,\n { headers: { \"Content-Type\": \"multipart/form-data\" } }\n );\n return res.data;\n};\n\nexport interface DeleteBankParams {\n accountID: string;\n bankID: string;\n}\n\nexport const deleteBank = async ({\n accountID,\n bankID,\n}: DeleteBankParams): Promise => {\n const res = await instance.delete(`/accounts/${accountID}/banks/${bankID}`);\n return res.data;\n};\n\nexport interface AccessKey {\n id: string;\n account_id: string;\n secret: string;\n status: string;\n created_at: string;\n updated_at: string;\n deleted_at: string;\n}\n\nexport interface GetAccessKeysParams {\n accountID?: string;\n}\n\nexport const getAccessKeys = async ({\n accountID,\n}: GetAccessKeysParams = {}): Promise => {\n const res = await instance.get(\n !!accountID ? `/paper_accounts/${accountID}/access_keys` : `/access_keys`\n );\n\n return res.data;\n};\n\nexport interface DeleteAccessKeyParams {\n accessKeyID: string;\n accountID?: string;\n}\n\nexport const deleteAccessKey = async ({\n accountID,\n accessKeyID,\n}: DeleteAccessKeyParams): Promise => {\n const res = await instance.delete(\n !!accountID\n ? `/paper_accounts/${accountID}/access_keys/${accessKeyID}`\n : `/access_keys/${accessKeyID}`\n );\n\n return res.data;\n};\n\nexport interface CreateNewAccessKeyParams {\n accountID?: string;\n}\n\nexport const createNewAccessKey = async ({\n accountID,\n}: CreateNewAccessKeyParams = {}): Promise => {\n const res = await instance.post(\n !!accountID ? `/paper_accounts/${accountID}/access_keys` : `/access_keys`\n );\n\n return res.data;\n};\n\nconst getPathForProduct = (product: string) => {\n return product === \"paper\" ? \"paper_accounts\" : \"accounts\";\n};\n","export function setCookie(name, value, days) {\n let expires = \"\";\n if (days) {\n let date = new Date();\n date.setTime(date.getTime() + days * 24 * 60 * 60 * 1000);\n expires = \"; expires=\" + date.toUTCString();\n }\n document.cookie = name + \"=\" + (value || \"\") + expires + \"; path=/\";\n}\n\nexport function getCookie(name) {\n const nameEQ = name + \"=\";\n const cookies = document.cookie.split(\";\");\n for (let i = 0; i < cookies.length; i++) {\n let cookie = cookies[i];\n while (cookie.charAt(0) == \" \") cookie = cookie.substring(1, cookie.length);\n if (cookie.indexOf(nameEQ) == 0)\n return cookie.substring(nameEQ.length, cookie.length);\n }\n return null;\n}\n\nexport function eraseCookie(name) {\n document.cookie = name + \"=; Max-Age=-99999999;\";\n}\n"],"sourceRoot":""}