{"version":3,"file":"js/c6cb505ef39945417adf.chunk.js","mappings":"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","sources":["webpack:///./legacy/features/companies/bankLogin/services/secondaryBankLogin.ts","webpack:///./legacy/features/companies/bankLogin/secondary/viewModels.ts","webpack:///./legacy/features/companies/bankLogin/secondary/SecondaryBankLoginFragment.tsx","webpack:///./legacy/services/company/bankLogin.ts"],"sourcesContent":["import * as system from 'durandal/system';\n\nimport * as userService from '@/legacy/services/user';\nimport * as plootoUtils from '@/legacy/utils/plooto';\n\nimport BankLoginSource from '../bankLoginSource';\n\nconst API_PREFIX = 'v1';\n\nexport class SecondaryBankPollAccountDetailsBindingModel {\n public loginId: string;\n\n public accountId: string;\n\n public requestId: string;\n\n public country: string;\n\n public relatedId: string;\n\n public bankLoginSource: BankLoginSource;\n}\n\nexport class SecondaryBankPollResponse {\n public account: SecondaryBankValidBankAccountViewModel;\n\n public statusCode: number;\n\n public requestId: string;\n}\n\nexport class SecondaryBankValidBankAccountViewModel {\n accountOperatingName: string;\n\n hasAccountHolderName: boolean;\n\n isBankingDetailsValid: boolean;\n\n maskedAccountNumber: string;\n\n currency: string;\n\n country: string;\n}\n\nexport interface GetAuthorizationKeyBindingModel {\n country: string;\n bankLoginSource: BankLoginSource;\n relatedId: string;\n}\n\nexport class SecondaryBankLoginService {\n private userService: userService.UserService;\n\n constructor() {\n this.userService = userService.Instance;\n }\n\n public pollSecondaryBankAccountDetails(\n model: SecondaryBankPollAccountDetailsBindingModel\n ): JQueryPromise {\n return system\n .defer((dfd) => {\n this.userService\n .AuthorizedPost(\n `${\n import.meta.env.APP_URLS_API_URL\n }/${API_PREFIX}/bankLogin/payee/secondaryBank/pollAccountDetails`,\n model\n )\n .done((secondaryBankPollResponse) => {\n if (\n plootoUtils.IsNullOrUndefined(secondaryBankPollResponse) ||\n secondaryBankPollResponse.error === true\n ) {\n dfd.reject(secondaryBankPollResponse);\n return;\n }\n\n dfd.resolve(secondaryBankPollResponse);\n })\n .fail((err) => {\n dfd.reject(err);\n });\n })\n .promise();\n }\n\n public getAuthorizationKey(\n model: GetAuthorizationKeyBindingModel\n ): JQueryPromise {\n return system\n .defer((dfd) => {\n this.userService\n .AuthorizedGetFromUri(\n `${\n import.meta.env.APP_URLS_API_URL\n }/${API_PREFIX}/bankLogin/payee/secondaryBank/authorizationKey`,\n model\n )\n .done((data) => {\n if (plootoUtils.IsNullOrUndefined(data) || data.error === true) {\n dfd.reject(data);\n return;\n }\n\n dfd.resolve(data);\n })\n .fail((err) => {\n dfd.reject(err);\n });\n })\n .promise();\n }\n}\n\nexport const Instance = new SecondaryBankLoginService();\n","import { BankAccountDetailsAddModel } from '@/legacy/viewmodels/addModels';\n\ninterface SecondaryBankValidBankAccountViewModel {\n maskedAccountNumber: string;\n accountOperatingName: string;\n hasAccountHolderName: boolean;\n isBankingDetailsValid: boolean;\n country: string;\n currency: string;\n}\n\nexport class SecondaryBankAccountDetailsAddModel extends BankAccountDetailsAddModel {\n public loginId: string;\n\n public relatedId: string;\n\n public requestId: string;\n\n public accountId: string;\n\n public institution: string;\n\n public account: SecondaryBankValidBankAccountViewModel;\n}\n","import * as React from 'react';\nimport { FormattedMessage, useIntl } from 'react-intl';\nimport {\n Box,\n Button,\n Card,\n CardContent,\n Dialog,\n DialogActions,\n DialogContent,\n DialogTitle,\n Grid,\n Hidden,\n IconButton,\n Skeleton,\n Theme,\n Typography,\n} from '@mui/material';\nimport * as analytics from 'analytics';\nimport * as uuid from 'uuid';\n\nimport { SECONDARY_BANK_LOGIN_URLS } from '@/config/env';\nimport { FormEventType } from '@/legacy/features/analytics/helper';\nimport * as secondaryBankLoginService from '@/legacy/features/companies/bankLogin/services/secondaryBankLogin';\nimport * as companyService from '@/legacy/services/company';\nimport * as bankLoginService from '@/legacy/services/company/bankLogin';\nimport CompanyEventService from '@/legacy/services/companyEventService';\nimport { Action } from '@/legacy/utils/reactHelpers';\nimport { invalidateReactQueriesFromDurandal } from '@/utils/invalidateReactQueriesFromDurandal';\n\nimport SecondaryBankLoginEventName from '../analytics/helper';\nimport BankLoginSource from '../bankLoginSource';\n\nimport { SecondaryBankAccountDetailsAddModel } from './viewModels';\n\n/**\n * Set by Product and business requirements.\n */\nconst TAKING_TOO_LONG_TIMEOUT = 180 * 1000;\n\nenum ActionType {\n SelectAccount = 'SelectAccount',\n ProceedWithSelectedAccount = 'ProceedWithSelectedAccount',\n LoadAccountSelection = 'LoadAccountSelection',\n PollAccountDetails = 'PollAccountDetails',\n SelectBankInstitution = 'LoadBankInstitutionSelection',\n\n SubmitCredentials = 'SubmitCredentials',\n LoadCredentials = 'LoadCredentials',\n SubmitMultiFactorAuthentication = 'SubmitMultiFactorAuthentication',\n LoadMultiFactorAuthentication = 'LoadMultiFactorAuthentication',\n InstitutionSelected = 'InstitutionSelected',\n\n SetAuthorizationKey = 'SetAuthorizationKey',\n\n QueryPollAccountDetails = 'QueryPollAccountDetails',\n\n CloseDialog = 'CloseDialog',\n QueryCloseDialogCallback = 'QueryCloseDialogCallback',\n\n ForceVoidCheque = 'ForceVoidCheque',\n QueryForceVoidChequeCallback = 'QueryForceVoidChequeCallback',\n QueryAuthorizationKey = 'QueryAuthorizationKey',\n}\n\ninterface State {\n isBankAccountSelected: boolean;\n loginId: string;\n requestId: string;\n accountId: string;\n secondaryBankPollingResponse: secondaryBankLoginService.SecondaryBankPollResponse;\n pollingCount: number;\n pollingRate: number;\n bankCountry: string;\n relatedId?: string;\n bankLoginSource: BankLoginSource;\n uniqueRequestIdentifer: string;\n authorizationKey?: string;\n\n queries: Array>;\n}\n\nenum SecondaryBankEvent {\n ACCOUNT_SELECTED = 'ACCOUNT_SELECTED',\n REDIRECT = 'REDIRECT',\n INSTITUTION_SELECTED = 'INSTITUTION_SELECTED',\n SUBMIT_CREDENTIAL = 'SUBMIT_CREDENTIAL',\n COMPONENT_LOAD_CREDENTIAL = 'COMPONENT_LOAD_CREDENTIAL',\n SUBMIT_MFA = 'SUBMIT_MFA',\n COMPONENT_LOAD_MFA = 'COMPONENT_LOAD_MFA',\n COMPONENT_LOAD_ACCOUNT_SELECTION = 'COMPONENT_LOAD_ACCOUNT_SELECTION',\n COMPONENT_LOAD_INSTITUTION_SELECTOR = 'COMPONENT_LOAD_INSTITUTION_SELECTOR',\n}\n\nconst localConfig = {\n maxPollingCount: 60,\n\n iframeOptions: {\n version: 2,\n customerName: 'Plooto',\n language: 'en',\n theme: 'light',\n backgroundColor: 'F4F4F4',\n foregroundColor1: '000000',\n fixedHeightEnable: false,\n desktopLayout: true,\n\n /**\n * Remove the lock image and text from the header\n */\n headerEnable: false,\n\n /**\n * To add a search bar into the Institution Selection Menu, you need to specify the parameter institutionFilterEnable=true.\n */\n institutionFilterEnable: true,\n\n /**\n * If set to true enables the Flinks Connect bank for usage\n */\n demo: false,\n\n /**\n * If set to false then don't fetch account transactions (faster)\n */\n withTransactions: false,\n\n /**\n * Flinks Connect extracts Transactions history data for the last 90 days\n */\n daysOfTransactions: 'Days90',\n\n /**\n * Adds user consent step (false to remove)\n */\n consentEnable: false,\n\n /**\n * Add the parameter accountSelectorEnable=true to enable the Account Selection feature in Flinks Connect.\n */\n accountSelectorEnable: true,\n\n /**\n * If you want to present your end user all operations accounts, even those not eligible for EFT, use the parameter showAllOperationsAccounts=true.\n */\n showAllOperationsAccounts: false,\n\n /**\n * By default, Flinks Connect only collects the details of the selected accounts, but it is possible to still gather all accounts details by specifying the parameter fetchAllAccounts=true.\n */\n fetchAllAccounts: false,\n\n /**\n * If your use-cases requires automatic account refresh, we recommended you use the Enhanced MFA flow. To activate this feature, the parameter enhancedMFA=true must be specified.\n */\n enhancedMFA: false,\n\n /**\n * By default, only a single account can be selected. In order to enable multiple accounts to be selected, the parameter accountSelectorMultiple=true needs to be set.\n */\n accountSelectorMultiple: false,\n\n /**\n * This would ignore additional KYC related properties\n */\n withKYC: false,\n\n /**\n * This will not display the account balance when the process is completed\n */\n withBalance: false,\n },\n};\n\nconst Styles = {\n dialogContent: {\n flex: 1,\n\n /**\n * Even though we specify a height the container is limited by max-height.\n * This height ensures the popup spans a minimum height\n */\n height: 1024,\n minHeight: 400,\n padding: 0,\n },\n frameContainer: {\n display: 'flex',\n width: '100%',\n height: 396,\n flexDirection: 'column',\n overflow: 'hidden',\n alignItems: 'center',\n justifyContent: 'center',\n },\n heading: (theme: Theme) => ({\n fontSize: theme.typography.pxToRem(14),\n fontWeight: 600,\n }),\n manualEntry: {\n padding: 0,\n '& .MuiLink-root': {\n fontWeight: 600,\n color: '#fff',\n },\n },\n manualCard: {\n display: 'flex',\n justifyContent: 'space-between',\n padding: 2,\n '&:last-child': {\n pb: 2,\n },\n },\n manualCardContainer: {\n border: '1px solid #DAE1E9',\n margin: 3,\n width: '100%',\n },\n subheading: (theme: Theme) => ({\n fontSize: theme.typography.pxToRem(14),\n fontWeight: 400,\n }),\n typographyContainer: {\n minWidth: 180,\n width: '75%',\n },\n};\n\ninterface BottomCardProps {\n dispatch: React.Dispatch>;\n shouldDisplayTakingTooLong: boolean;\n}\n\nconst BottomCard: React.FC = ({ dispatch, shouldDisplayTakingTooLong }) => {\n const headingText = shouldDisplayTakingTooLong ? (\n \n ) : (\n \n );\n\n const subheadingText = shouldDisplayTakingTooLong ? (\n \n ) : (\n \n );\n\n return (\n \n \n \n {headingText}\n\n {subheadingText}\n \n\n \n \n \n );\n};\n\ninterface RenderProps {\n dispatch: React.Dispatch>;\n isBankAccountSelected: boolean;\n authorizationKey?: string;\n bankCountry: string;\n shouldDisplayTakingTooLong: boolean;\n shouldRenderFrameOnly: boolean;\n}\n\nconst Render: React.FC = ({\n dispatch,\n isBankAccountSelected,\n bankCountry,\n authorizationKey,\n shouldDisplayTakingTooLong,\n shouldRenderFrameOnly,\n}: RenderProps) => {\n const { formatMessage } = useIntl();\n // Combine the iFrame options object into a URI\n const baseUrl = SECONDARY_BANK_LOGIN_URLS[bankCountry];\n\n const iframeOptions = {\n ...localConfig.iframeOptions,\n authorizeToken: authorizationKey,\n };\n const [isIframeLoading, setIsIframeLoading] = React.useState(true);\n const iframeSrc = Object.entries(iframeOptions).reduce(\n (uri, option) => `${uri ? `${uri}&` : `${baseUrl}?`}${option[0]}=${option[1]}`,\n ''\n );\n\n const getDialogContent = (): React.JSX.Element => {\n if (!authorizationKey) {\n return ;\n }\n\n if (isBankAccountSelected) {\n return ;\n }\n\n return (\n \n {isIframeLoading ? : null}\n setIsIframeLoading(false)}\n src={iframeSrc}\n style={{\n border: 'none',\n display: isIframeLoading ? 'none' : 'initial',\n flexGrow: 1,\n margin: 0,\n padding: 0,\n width: '100%',\n height: '100%',\n }}\n title={formatMessage({\n defaultMessage: 'Select your bank and authorize the transaction',\n })}\n />\n \n );\n };\n\n if (shouldRenderFrameOnly) {\n return {getDialogContent()};\n }\n\n return (\n \n \n \n \n \n \n \n \n \n {' '}\n \n \n \n \n dispatch({ type: ActionType.CloseDialog })}>\n \n \n \n \n \n \n {getDialogContent()}\n \n \n \n \n \n );\n};\n\ninterface ProceedWithSelectedAccountPayload {\n institution: string;\n loginId: string;\n requestId: string;\n}\n\ninterface QueryPollAccountDetails {\n loginId: string;\n requestId: string;\n accountId: string;\n pollingRate: number;\n pollingCount: number;\n country: string;\n bankLoginSource: BankLoginSource;\n secondaryBankPollingResponse: secondaryBankLoginService.SecondaryBankPollResponse;\n relatedId?: string;\n institution?: string;\n}\n\nconst getPollingRate = (pollingCount: number) => {\n // First poll is 3 seconds\n if (pollingCount === 0) {\n return 3000;\n }\n\n if (pollingCount > 0 && pollingCount <= 30) {\n return 5000;\n }\n return 10000;\n};\n\nconst trackUserAction = (state: State, action: Action) => {\n const { type, payload } = action;\n const getRelatedIdParam = () => {\n // Add property depending on bank validation source (EMT / Payment Request)\n switch (state.bankLoginSource) {\n case BankLoginSource.EmailMoneyTransfer:\n return { emailMoneyTransferId: state.relatedId };\n case BankLoginSource.PaymentRequest:\n return { paymentRequestId: state.relatedId };\n default:\n break;\n }\n\n return {};\n };\n\n const analyticsPayload = {\n country: state.bankCountry,\n bankLoginSource: state.bankLoginSource,\n data: payload,\n event: type,\n ...getRelatedIdParam(),\n };\n\n const analyticsPayloadJson = JSON.stringify(analyticsPayload);\n\n const trackAction = (message: string) => {\n analytics.send('event', 'Secondary-Bank-Validation', message, analyticsPayloadJson);\n };\n\n const trackSegmentAction = (\n eventType: SecondaryBankLoginEventName | FormEventType,\n eventPayload: object\n ) => {\n CompanyEventService.emit(eventType, eventPayload);\n };\n\n switch (type) {\n case ActionType.ForceVoidCheque: {\n trackSegmentAction(SecondaryBankLoginEventName.AutomaticBankVerificationForceVoidCheque, {\n buttonName: 'Go to Manual Bank Verification',\n companyId: companyService.Instance.CompanyId(),\n parentNodeId: companyService.Instance.AccountingFirmCompanyId(),\n bankVerificationAttemptId: state.uniqueRequestIdentifer,\n context: 'Automatic Bank Verification',\n });\n\n trackAction('Selected void physical check');\n break;\n }\n\n case ActionType.SelectAccount:\n trackAction('Selected bank account');\n break;\n\n case ActionType.CloseDialog: {\n trackAction('Closed bank selection modal');\n\n trackSegmentAction(SecondaryBankLoginEventName.AutomaticBankVerificationCancelled, {\n companyId: companyService.Instance.CompanyId(),\n parentNodeId: companyService.Instance.AccountingFirmCompanyId(),\n bankCountry: state.bankCountry,\n bankVerificationAttemptId: state.uniqueRequestIdentifer,\n });\n\n break;\n }\n\n case ActionType.ProceedWithSelectedAccount:\n trackAction('Proceeded with account selection');\n break;\n\n case ActionType.SubmitCredentials: {\n trackSegmentAction(SecondaryBankLoginEventName.AutomaticBankConnectionSubmitted, {\n companyId: companyService.Instance.CompanyId(),\n parentNodeId: companyService.Instance.AccountingFirmCompanyId(),\n bankCountry: state.bankCountry,\n bankInstitution: payload?.institution,\n bankVerificationAttemptId: state.uniqueRequestIdentifer,\n });\n\n trackAction('Submitted banking credentials');\n\n break;\n }\n case ActionType.SubmitMultiFactorAuthentication:\n trackAction('Submitted multi-factor authentication');\n break;\n\n case ActionType.InstitutionSelected:\n trackAction('Selected banking institution');\n break;\n\n case ActionType.LoadAccountSelection:\n trackAction('Load bank account selection');\n break;\n\n case ActionType.LoadCredentials:\n trackAction('Load bank login credentials');\n break;\n\n case ActionType.LoadMultiFactorAuthentication:\n trackAction('Load multi-factor authentication');\n break;\n\n case ActionType.SelectBankInstitution: {\n trackSegmentAction(SecondaryBankLoginEventName.AutomaticBankConnectionInitiated, {\n companyId: companyService.Instance.CompanyId(),\n parentNodeId: companyService.Instance.AccountingFirmCompanyId() ?? 'N/A',\n bankVerificationAttemptId: state.uniqueRequestIdentifer,\n });\n\n trackAction('Load bank institution selection');\n break;\n }\n\n default:\n break;\n }\n};\n\nconst reducer: React.Reducer> = (state, action) => {\n const { type, payload } = action;\n\n // Track actions in GA\n try {\n trackUserAction(state, action);\n } catch (err) {\n // Silently fail if there was an error tracking a user action instead of breaking the bank login\n }\n\n switch (type) {\n case ActionType.SelectAccount:\n return {\n ...state,\n accountId: payload,\n };\n\n case ActionType.CloseDialog:\n return {\n ...state,\n queries: [{ type: ActionType.QueryCloseDialogCallback }],\n };\n\n case ActionType.ForceVoidCheque:\n return {\n ...state,\n queries: [{ type: ActionType.QueryForceVoidChequeCallback }],\n };\n\n case ActionType.SetAuthorizationKey: {\n const { authorizationKey } = payload;\n\n return {\n ...state,\n authorizationKey,\n };\n }\n\n case ActionType.PollAccountDetails: {\n const { requestId, loginId, pollingCount, secondaryBankPollingResponse } =\n payload as QueryPollAccountDetails;\n\n const updatedPollingRate = getPollingRate(pollingCount);\n\n const queries = [\n {\n type: ActionType.QueryPollAccountDetails,\n payload: {\n ...payload,\n\n pollingRate: updatedPollingRate,\n secondaryBankPollingResponse,\n } as QueryPollAccountDetails,\n },\n ];\n\n return {\n ...state,\n loginId,\n requestId,\n pollingCount,\n pollingRate: updatedPollingRate,\n secondaryBankPollingResponse,\n queries,\n };\n }\n\n case ActionType.ProceedWithSelectedAccount: {\n const { accountId, pollingRate, pollingCount, bankCountry, bankLoginSource, relatedId } =\n state;\n const { loginId, requestId, institution } = payload as ProceedWithSelectedAccountPayload;\n\n return {\n ...state,\n loginId,\n requestId,\n accountId,\n isBankAccountSelected: true,\n queries: [\n {\n // First attempt does not include request id, subsequent calls will have the request id while waiting for final response\n // We're ready to call the polling endpoint\n type: ActionType.QueryPollAccountDetails,\n payload: {\n loginId,\n accountId,\n requestId,\n pollingCount,\n country: bankCountry,\n pollingRate,\n secondaryBankPollingResponse: null,\n bankLoginSource,\n relatedId,\n institution,\n } as QueryPollAccountDetails,\n },\n ],\n };\n }\n\n default:\n break;\n }\n\n return state;\n};\n\ninterface Props {\n // ??? We use these in the queries pattern.\n // eslint-disable-next-line react/no-unused-prop-types\n closeDialogCallback: () => void;\n // ??? We use these in the queries pattern.\n // eslint-disable-next-line react/no-unused-prop-types\n accountSelectedCallback: (\n secondaryBankAccountDetailsAddModel: SecondaryBankAccountDetailsAddModel\n ) => void;\n // ??? We use these in the queries pattern.\n // eslint-disable-next-line react/no-unused-prop-types\n forceVoidChequeCallback: (voidChequeText: string) => void;\n bankCountry: string;\n\n bankLoginSource: BankLoginSource;\n isEmtFlow?: boolean;\n /**\n * What is the related object id based on bankLoginSource?\n *\n * We will pass this relatedId when generating authorization key.\n */\n relatedId: string;\n /**\n * True if only the Flinks iframe should be rendered, versus a dialog container. Used in the FPay\n * Wizard.\n */\n shouldRenderFrameOnly?: boolean;\n /**\n * Custom error-handling callback. Should handle the same cases as\n * BankLoginService.handleAddBankAccountError(). Use this to present errors in a different way,\n * i.e. something other than titleMessageModal.\n */\n // ??? We use these in the queries pattern.\n // eslint-disable-next-line react/no-unused-prop-types\n handleBankError: (error: unknown) => void;\n}\n\nconst handleQueries = async (\n queries: Array>,\n dispatch: React.Dispatch>,\n props: Props\n) => {\n const handleBankError =\n props.handleBankError ??\n ((error: unknown) => {\n const errorDetails = bankLoginService.Instance.handleAddBankAccountError({\n error,\n forceManualEntryCallback: (errorText) => {\n props.forceVoidChequeCallback(errorText);\n },\n });\n\n // Close the popup if there is a dialog and we're not redirecting back to manual entry\n // This is due to the fact that the React dialog blocks the Durandal dialog\n if (\n (errorDetails.dialog && errorDetails.fallbackToManualEntry === undefined) ||\n errorDetails.closeDialog\n ) {\n dispatch({ type: ActionType.CloseDialog });\n }\n });\n\n queries.forEach(async ({ payload, type }) => {\n switch (type) {\n case ActionType.QueryAuthorizationKey:\n try {\n const { relatedId, bankLoginSource, bankCountry } = props;\n\n const authorizationKey = await secondaryBankLoginService.Instance.getAuthorizationKey({\n relatedId,\n bankLoginSource,\n country: bankCountry,\n });\n\n dispatch({ type: ActionType.SetAuthorizationKey, payload: { authorizationKey } });\n } catch (err) {\n handleBankError(err);\n }\n break;\n\n case ActionType.QueryPollAccountDetails: {\n const {\n accountId,\n loginId,\n requestId,\n pollingCount,\n relatedId,\n pollingRate,\n country,\n bankLoginSource,\n institution,\n } = payload as QueryPollAccountDetails;\n\n // After 60 attempts, force to manual upload, bank provider timed out\n if (pollingCount >= localConfig.maxPollingCount) {\n handleBankError({ error: true, type: 'provider.timeout' });\n return;\n }\n\n try {\n const pollRequestId = pollingCount === 0 ? null : requestId; // For the first poll don't use a requestId (this will avoid using wrong requestId from iFrame)\n const pollResponse =\n await secondaryBankLoginService.Instance.pollSecondaryBankAccountDetails({\n loginId,\n requestId: pollRequestId,\n accountId,\n country,\n relatedId,\n bankLoginSource,\n });\n\n // If account was retrieved, then stop polling and submit selected account\n if (!pollResponse.account) {\n const updatedPollingCount = pollingCount + 1;\n\n setTimeout(async () => {\n dispatch({\n type: ActionType.PollAccountDetails,\n payload: {\n ...payload,\n requestId: pollResponse.requestId,\n pollingCount: updatedPollingCount,\n secondaryBankPollingResponse: pollResponse,\n },\n });\n }, pollingRate); // First poll is 3 seconds, subsequent polls are timed 5 to 30 seconds\n } else {\n // Account is now selected, send it to the callback\n const secondaryBankAccountDetailsAddModel = new SecondaryBankAccountDetailsAddModel();\n secondaryBankAccountDetailsAddModel.account = pollResponse.account;\n secondaryBankAccountDetailsAddModel.requestId = pollResponse.requestId;\n secondaryBankAccountDetailsAddModel.currency = pollResponse.account.currency;\n\n secondaryBankAccountDetailsAddModel.discriminator =\n 'SecondaryBankAccountDetailsAddModel';\n secondaryBankAccountDetailsAddModel.loginId = loginId;\n secondaryBankAccountDetailsAddModel.accountNumber = null; // account number not required\n secondaryBankAccountDetailsAddModel.accountId = accountId;\n secondaryBankAccountDetailsAddModel.country = country;\n secondaryBankAccountDetailsAddModel.relatedId = relatedId;\n secondaryBankAccountDetailsAddModel.institution = institution;\n props.accountSelectedCallback(secondaryBankAccountDetailsAddModel);\n }\n } catch (error) {\n handleBankError(error);\n }\n break;\n }\n\n case ActionType.QueryCloseDialogCallback:\n invalidateReactQueriesFromDurandal([\n 'companies',\n companyService.Instance.CompanyId(),\n 'onboarding',\n 'status',\n ]);\n invalidateReactQueriesFromDurandal([\n 'companies',\n companyService.Instance.CompanyId(),\n 'verification',\n 'outstandingVerificationItems',\n ]);\n props.closeDialogCallback();\n break;\n\n case ActionType.QueryForceVoidChequeCallback:\n props.forceVoidChequeCallback(null);\n break;\n\n default:\n break;\n }\n });\n};\n\nconst SecondaryBankLoginFragment: React.FC = (props: Props) => {\n const {\n bankCountry,\n bankLoginSource,\n isEmtFlow = false,\n relatedId,\n shouldRenderFrameOnly,\n } = props;\n\n const [credentialsSubmitted, setCredentialsSubmitted] = React.useState(false);\n\n const [shouldDisplayTakingTooLong, setShouldDisplayTakingTooLong] = React.useState(false);\n\n const [takingTooLongTimeout, setTakingTooLongTimeout] = React.useState();\n\n const [disableTakingTooLongTimeout, setDisableTakingTooLongTimeout] = React.useState(false);\n\n React.useEffect(() => {\n if (credentialsSubmitted && isEmtFlow) {\n const timeoutId = setTimeout(\n () => setShouldDisplayTakingTooLong(true),\n TAKING_TOO_LONG_TIMEOUT\n );\n // ??? Our TS thinks we're in Node land and not browser land.\n setTakingTooLongTimeout(timeoutId as unknown as number);\n }\n }, [credentialsSubmitted, isEmtFlow]);\n\n React.useEffect(() => {\n if (takingTooLongTimeout && disableTakingTooLongTimeout) {\n clearTimeout(takingTooLongTimeout);\n }\n }, [disableTakingTooLongTimeout, takingTooLongTimeout]);\n\n const initialState: State = {\n accountId: '',\n loginId: '',\n requestId: '',\n pollingCount: 0,\n pollingRate: getPollingRate(0),\n secondaryBankPollingResponse: null,\n bankCountry,\n relatedId,\n bankLoginSource,\n isBankAccountSelected: false,\n authorizationKey: null,\n uniqueRequestIdentifer: uuid.v4(),\n queries: [\n // [PLP-34129] For US countries automatically force void check\n // If not US then start by querying for an authorization key\n ...(bankCountry === 'US'\n ? [{ type: ActionType.QueryForceVoidChequeCallback }]\n : [{ type: ActionType.QueryAuthorizationKey }]),\n ],\n };\n\n const [state, dispatch] = React.useReducer(reducer, initialState);\n\n React.useEffect(() => {\n handleQueries(state.queries, dispatch, props);\n }, [state.queries, props]);\n\n React.useEffect(() => {\n const processFlinksMessage = (e) => {\n switch (e.data.step) {\n case SecondaryBankEvent.ACCOUNT_SELECTED:\n setDisableTakingTooLongTimeout(true);\n dispatch({ type: ActionType.SelectAccount, payload: e.data?.accountId });\n break;\n\n case SecondaryBankEvent.REDIRECT:\n setDisableTakingTooLongTimeout(true);\n dispatch({\n type: ActionType.ProceedWithSelectedAccount,\n payload: e.data as ProceedWithSelectedAccountPayload,\n });\n break;\n\n case SecondaryBankEvent.SUBMIT_CREDENTIAL:\n setCredentialsSubmitted(true);\n trackUserAction(state, { type: ActionType.SubmitCredentials, payload: e.data });\n break;\n\n case SecondaryBankEvent.SUBMIT_MFA:\n trackUserAction(state, {\n type: ActionType.SubmitMultiFactorAuthentication,\n payload: e.data,\n });\n break;\n\n case SecondaryBankEvent.INSTITUTION_SELECTED:\n trackUserAction(state, { type: ActionType.InstitutionSelected, payload: e.data });\n break;\n\n case SecondaryBankEvent.COMPONENT_LOAD_CREDENTIAL:\n trackUserAction(state, { type: ActionType.LoadCredentials, payload: e.data });\n break;\n\n case SecondaryBankEvent.COMPONENT_LOAD_MFA:\n setDisableTakingTooLongTimeout(true);\n trackUserAction(state, {\n type: ActionType.LoadMultiFactorAuthentication,\n payload: e.data,\n });\n break;\n\n case SecondaryBankEvent.COMPONENT_LOAD_ACCOUNT_SELECTION:\n trackUserAction(state, { type: ActionType.LoadAccountSelection, payload: e.data });\n break;\n\n case SecondaryBankEvent.COMPONENT_LOAD_INSTITUTION_SELECTOR:\n trackUserAction(state, { type: ActionType.SelectBankInstitution, payload: e.data });\n break;\n\n default:\n break;\n }\n };\n\n const onWindowMessage = (e) => {\n if (!!e && !!e.data && !!e.data.step) {\n processFlinksMessage(e);\n }\n };\n window.addEventListener('message', onWindowMessage);\n\n return () => {\n window.removeEventListener('message', onWindowMessage);\n };\n }, [state]);\n\n return (\n \n );\n};\n\nexport default SecondaryBankLoginFragment;\n","import * as system from 'durandal/system';\nimport * as router from 'plugins/router';\n\nimport titleMessageModal from '@/legacy/modals/styled/titleMessage';\nimport * as companyService from '@/legacy/services/company';\nimport * as bankService from '@/legacy/services/company/bank';\nimport * as banksInfoService from '@/legacy/services/info/banks';\nimport { SessionTimeoutService } from '@/legacy/services/sessionTimeout';\nimport * as userService from '@/legacy/services/user';\nimport * as xhrService from '@/legacy/services/xhrService';\nimport * as plootoUtils from '@/legacy/utils/plooto';\nimport * as viewModels from '@/legacy/viewmodels/viewModels';\n\nimport { BankAccountAddModel } from '../../viewmodels/addModels';\n\nconst API_PREFIX = 'v1';\n\nexport class SessionTokenViewModel {\n public tokenSet: boolean;\n\n public sessionToken: string;\n}\nexport class BankLoginRequirementsBindingModel {\n public bankIdentifier: number;\n\n public sessionToken: string;\n\n public country: string;\n}\n\nexport class BankLoginRequirementsViewModel {\n public name: string;\n\n public logo: string;\n\n public baseUrl: string;\n\n public loginForm: CredentialsLoginForm;\n}\nexport class CredentialsLoginForm {\n public forgetPasswordUrl: string;\n\n public formType: string;\n\n public loginRow: Array;\n}\nexport class LoginRow {\n public label: string;\n\n public fields: Array;\n}\nexport class LoginField {\n public id: number;\n\n public name: string;\n}\n\nexport class PostSubmitRequirementsBindingModel {\n public bankIdentifier: number;\n\n public country: string;\n\n public sessionToken: string;\n\n public fields: Array;\n}\nexport class RequirementsField {\n public fieldId: number;\n\n public fieldValue: string;\n}\n\nexport class PostSubmitRequirementsViewModel {\n public accountLinkId: number;\n\n public aggregationSource: string;\n\n public loginForm: AdditionalLoginViewModel;\n}\nexport class AdditionalLoginViewModel {\n public mfaTimeout: number;\n\n public formType: string;\n\n public questions: Array;\n}\nexport class MfaQuestion {\n public label: string;\n\n public mfaQuestionFields: Array;\n}\nexport class MfaQuestionField {\n public id: string;\n\n public name: string;\n\n public type: string;\n\n public imageBase64: string;\n}\n\nexport class UpdateAccountLinkBindingModel {\n public accountLinkid: number;\n\n public formType: string;\n\n public answer: Array;\n\n public sessionToken: string;\n\n public institution: number;\n}\nexport class MfaAnswerRow {\n public label: string;\n\n public fields: Array;\n}\nexport class MfaAnswerField {\n public id: string;\n\n public value: string;\n}\n\nexport class UpdateAccountLinkViewModel {\n public success: boolean;\n}\n\nexport class GetLinkStatusAndAccountsBindingModel {\n public accountLinkId: number;\n\n public sessionToken: string;\n\n public country: string;\n}\n\nexport class GetLinkStatusAndAccountsViewModel {\n public status: string;\n\n public statusMessage: string;\n\n public storageToken: string;\n\n public loginForm: AdditionalLoginViewModel;\n\n public accounts: Array;\n}\nexport class LinkedAccount {\n public viewId: string;\n\n public accountNumber: string;\n\n public accountName: string;\n\n public balance: LinkedAccountBalance;\n\n public accountType: string;\n\n public bankTransferCode: Array;\n\n public incompleteData: boolean;\n\n public availableBalance: viewModels.Money;\n\n public hasHolderProfile: boolean;\n}\nexport class LinkedAccountBalance {\n public amount: number;\n\n public currency: string;\n}\nexport class BankTransferCode {\n public bankId: string;\n}\n\nexport class PostAddAccountToPlootoBindingModel {\n public viewId: string;\n\n public storageToken: string;\n\n public country: string;\n}\n\nexport class PostAddAccountToPlootoViewModel {\n public name: string;\n\n public bank: string;\n}\n\nexport class SelectedAccountBindingModel {\n public sessionToken: string;\n\n public storageToken: string;\n\n public selectedBankAccountId: string;\n\n public accountName: string;\n\n public country: string;\n\n public hasHolderProfile: boolean;\n}\n\nexport class BankLoginAuthSessionBindingModel {\n public companyId: string;\n\n public country: string;\n\n public bankIdentifier: number;\n\n public bankLoginFormType: string;\n\n public bankLoginRelatedId: string;\n}\n\nexport class BankLoginSearchResultViewModel {\n public name: string;\n\n public providerId: number;\n}\n\nexport interface HandleAddBankAccountErrorParams {\n error: any;\n forceManualEntryCallback?: (errorText: string) => void;\n}\n\nexport class BankLoginService {\n private companyService: companyService.CompanyService;\n\n private userService: userService.UserService;\n\n public loginStatus: string;\n\n constructor() {\n this.companyService = companyService.Instance;\n this.userService = userService.Instance;\n }\n\n public getSession(\n bankLoginAuthSessionBindingModel: BankLoginAuthSessionBindingModel\n ): JQueryPromise {\n const requestUrl = `${\n import.meta.env.APP_URLS_API_URL\n }/${API_PREFIX}/bankLogin/payee/authSession`;\n\n return system\n .defer((dfd) => {\n this.userService\n .AuthorizedGetFromUri(requestUrl, bankLoginAuthSessionBindingModel)\n .done((sessionData) => {\n if (plootoUtils.IsNullOrUndefined(sessionData) || sessionData.error === true) {\n dfd.reject(sessionData);\n return;\n }\n dfd.resolve(sessionData);\n })\n .fail(() => {\n dfd.reject();\n });\n })\n .promise();\n }\n\n public getBankRequirements(\n params: BankLoginRequirementsBindingModel\n ): JQueryPromise {\n const requestUrl = `${import.meta.env.APP_URLS_API_URL}/${API_PREFIX}/bankLogin/payee/${\n params.sessionToken\n }/requirements/${params.bankIdentifier}`;\n\n return system\n .defer((dfd) => {\n this.userService\n .AuthorizedGet(requestUrl)\n .done((requirementsData) => {\n if (\n plootoUtils.IsNullOrUndefined(requirementsData) ||\n requirementsData.error === true\n ) {\n dfd.reject(requirementsData);\n return;\n }\n dfd.resolve(requirementsData);\n })\n .fail(() => {\n dfd.reject();\n });\n })\n .promise();\n }\n\n public postSubmitRequirements(\n params: PostSubmitRequirementsBindingModel\n ): JQueryPromise {\n const requestUrl = `${import.meta.env.APP_URLS_API_URL}/${API_PREFIX}/bankLogin/payee/${\n params.sessionToken\n }/credentials`;\n\n return system\n .defer((dfd) => {\n this.userService\n .AuthorizedPost(requestUrl, params)\n .done((submitResult) => {\n if (plootoUtils.IsNullOrUndefined(submitResult) || submitResult.error === true) {\n dfd.reject(submitResult);\n return;\n }\n dfd.resolve(submitResult);\n })\n .fail(() => {\n dfd.reject();\n });\n })\n .promise();\n }\n\n public getLoginStatus(): string {\n return this.loginStatus;\n }\n\n public postSubmitAccountLinkUpdate(\n params: UpdateAccountLinkBindingModel\n ): JQueryPromise {\n const requestUrl = `${import.meta.env.APP_URLS_API_URL}/${API_PREFIX}/bankLogin/payee/${\n params.sessionToken\n }/updateLinkAccount`;\n\n return system\n .defer((dfd) => {\n this.userService\n .AuthorizedPut(requestUrl, params)\n .done((updateResult) => {\n if (plootoUtils.IsNullOrUndefined(updateResult) || updateResult.error === true) {\n dfd.reject(updateResult);\n return;\n }\n dfd.resolve(updateResult);\n })\n .fail(() => {\n dfd.reject();\n });\n })\n .promise();\n }\n\n public getStatusOrAccounts(\n params: GetLinkStatusAndAccountsBindingModel\n ): JQueryPromise {\n const requestUrl = `${import.meta.env.APP_URLS_API_URL}/${API_PREFIX}/bankLogin/payee/${\n params.sessionToken\n }/getLinkStatusAndGetAccounts/${params.country}/${params.accountLinkId}`;\n\n return system\n .defer((dfd) => {\n this.userService\n .AuthorizedGet(requestUrl)\n .done((statusResult) => {\n if (plootoUtils.IsNullOrUndefined(statusResult) || statusResult.error === true) {\n dfd.reject(statusResult);\n return;\n }\n dfd.resolve(statusResult);\n })\n .fail(() => {\n dfd.reject();\n });\n })\n .promise();\n }\n\n public getBankSearchResultsWithXhr(searchQuery: string, country: string) {\n const dataPromiseWithXhr = new xhrService.PromiseWithXhr<\n Array\n >();\n\n dataPromiseWithXhr.getXhr = () =>\n this.userService.AuthorizedGetFromUri(\n `${import.meta.env.APP_URLS_API_URL}/${API_PREFIX}/bankLogin/payee/providersSearch`,\n { searchQuery, country }\n ) as JQueryXHR;\n\n xhrService.Instance.initiatePromiseWithXhr(dataPromiseWithXhr); // handles both .errors and logout errors\n\n return dataPromiseWithXhr;\n }\n\n public async addBankAccount(\n selectedAccount: SelectedAccountBindingModel,\n bankMetaInfo: banksInfoService.BankInfoMetadata\n ): Promise {\n const bankAccountAddModel = new BankAccountAddModel();\n\n bankAccountAddModel.bank = bankMetaInfo.bankName;\n bankAccountAddModel.name = selectedAccount.accountName;\n\n bankAccountAddModel.accountDetails = selectedAccount as any;\n\n const newBankAccount = await bankService.Instance.CreateAccount(bankAccountAddModel);\n\n return newBankAccount;\n }\n\n public handleAddBankAccountError({\n error,\n forceManualEntryCallback,\n }: HandleAddBankAccountErrorParams): any {\n const getErrorDetails = () => {\n if (error && error.type) {\n switch (error.type) {\n case 'invalid.authentication.relatedId': // This authentication is specific to Flinks that will bypass AuthorizePost\n // We will need to handle session timeouts here as AuthorizedGetFromUri doesn't handle it\n SessionTimeoutService.showTimeout();\n return { closeDialog: true };\n case 'invalid.parameter':\n // This would only happen if transit, routing, account number fields are missing\n // This should never happen as we validate banking details\n return { closeDialog: true };\n\n case 'account.used':\n return {\n dialog: {\n title: 'Bank account in use',\n message:\n 'This bank account is already associated with a Plooto account. You could try a different bank account or contact Plooto Support for further assistance.',\n },\n redirect: 'user/bank',\n };\n case 'blacklisted.account':\n return {\n dialog: {\n title: 'Account Error',\n message:\n 'This account cannot be created at this time. Please contact compliance@plooto.com.',\n },\n };\n case 'invalid.accountId':\n return {\n dialog: {\n title: 'Account in use',\n message: 'This account is already activated.',\n },\n };\n case 'invalid.isCompanyVerificationMandatory':\n return {\n dialog: {\n title: 'Company Verification Pending',\n message:\n 'Your company verification must be approved by Plooto Compliance Department before you can add your company bank account. Please allow 1-2 business days for Plooto Compliance Department to review your company documents upon upload.',\n },\n redirect: 'user/company/compliance/dialog/validateCompany',\n };\n case 'identityVerification.required':\n return {\n dialog: {\n title: 'Identity Verification Outstanding',\n message:\n 'Please complete your identity verification before adding this bank account.',\n },\n redirect: 'user/identityVerification',\n };\n\n case 'failed.generateAuthorizationToken': // From GenerateFlinksAuthorizationToken()\n case 'invalid.secondaryBankResponse': // From HandleFlinksFailedResponse()\n case 'secondaryBank.request.unauthorized':\n case 'secondaryBank.request.bad.response':\n case 'secondaryBank.mfa.required':\n case 'secondaryBank.failed.response':\n case 'secondaryBank.response.none':\n case 'provider.timeout': {\n const message =\n 'Our instant bank validation is currently unavailable. Please use a void check validation option instead. Or you can try bank login option again at a later time.';\n return {\n dialog: {\n title: 'Instant Bank Validation Unavailable',\n message,\n },\n fallbackToManualEntry: message,\n };\n }\n case 'companyCapabilities':\n return {\n fallbackToManualEntry:\n 'This company must complete outstanding verification documents before using bank login functionality. In the mean time, you can try using the void check option below for testing purposes.',\n };\n case 'rateLimit.authSession':\n return {\n fallbackToManualEntry:\n 'Having trouble selecting your bank account? Please use a void check validation option instead. Or you can try bank login option again tomorrow.',\n };\n\n // From ValidateFlinksBankAccount()\n case 'addAccount.notSufficientInfo':\n case 'addAccount.failed': {\n const message =\n 'The selected account did not return certain information that is mandatory in order to be used by Plooto. Please verify your account by entering your cheque details instead.';\n return {\n dialog: {\n title: 'Insufficient Banking Details',\n message,\n },\n fallbackToManualEntry: message,\n };\n }\n\n default: {\n const message = `Having trouble selecting your bank account? Please use a void check validation option instead. Or you can try bank login option again at a later time. (${error.type})`;\n return {\n dialog: {\n title: 'Error Adding Banking',\n message,\n },\n fallbackToManualEntry: message,\n };\n }\n }\n }\n\n return { closeDialog: true }; // For errors without error.type\n };\n\n const errorDetails = getErrorDetails();\n\n if (errorDetails.dialog) {\n const { title, message } = errorDetails.dialog;\n titleMessageModal.show({\n title,\n message,\n svgIconSymbolLarge: 'svg-warning-large',\n } as any);\n }\n\n if (errorDetails.redirect) {\n router.navigate(errorDetails.redirect);\n }\n\n // It is important to understand that we'll redirect to void check even if reason is null (It just won't show the second message area)\n if (errorDetails.fallbackToManualEntry !== undefined) {\n forceManualEntryCallback(errorDetails.fallbackToManualEntry);\n }\n\n return errorDetails;\n }\n}\n\nexport const Instance = new BankLoginService();\n"],"names":["API_PREFIX","SecondaryBankPollAccountDetailsBindingModel","SecondaryBankPollResponse","SecondaryBankValidBankAccountViewModel","SecondaryBankLoginService","constructor","userService","pollSecondaryBankAccountDetails","model","system","dfd","AuthorizedPost","Object","create","globalThis","import_meta_env","APP_URLS_API_URL","done","secondaryBankPollResponse","plootoUtils","error","reject","resolve","fail","err","promise","getAuthorizationKey","AuthorizedGetFromUri","data","Instance","SecondaryBankAccountDetailsAddModel","BankAccountDetailsAddModel","TAKING_TOO_LONG_TIMEOUT","ActionType","SecondaryBankEvent","localConfig","maxPollingCount","iframeOptions","version","customerName","language","theme","backgroundColor","foregroundColor1","fixedHeightEnable","desktopLayout","headerEnable","institutionFilterEnable","demo","withTransactions","daysOfTransactions","consentEnable","accountSelectorEnable","showAllOperationsAccounts","fetchAllAccounts","enhancedMFA","accountSelectorMultiple","withKYC","withBalance","Styles","dialogContent","flex","height","minHeight","padding","frameContainer","display","width","flexDirection","overflow","alignItems","justifyContent","heading","fontSize","typography","pxToRem","fontWeight","manualEntry","color","manualCard","pb","manualCardContainer","border","margin","subheading","typographyContainer","minWidth","BottomCard","dispatch","shouldDisplayTakingTooLong","headingText","_jsx","FormattedMessage","id","defaultMessage","subheadingText","_Card","sx","elevation","children","_jsxs","_CardContent","_Box","_Typography","_Button","onClick","type","ForceVoidCheque","variant","Render","isBankAccountSelected","bankCountry","authorizationKey","shouldRenderFrameOnly","formatMessage","useIntl","baseUrl","SECONDARY_BANK_LOGIN_URLS","authorizeToken","isIframeLoading","setIsIframeLoading","React","iframeSrc","entries","reduce","uri","option","getDialogContent","_Skeleton","flexGrow","onLoad","src","style","title","_Dialog","fullWidth","maxWidth","open","scroll","_DialogTitle","_Grid","container","item","_Hidden","only","className","_IconButton","size","CloseDialog","_DialogContent","dividers","_DialogActions","getPollingRate","pollingCount","trackUserAction","state","action","payload","getRelatedIdParam","bankLoginSource","BankLoginSource","EmailMoneyTransfer","emailMoneyTransferId","relatedId","PaymentRequest","paymentRequestId","analyticsPayload","country","event","analyticsPayloadJson","JSON","stringify","trackAction","message","analytics","trackSegmentAction","eventType","eventPayload","CompanyEventService","emit","SecondaryBankLoginEventName","AutomaticBankVerificationForceVoidCheque","buttonName","companyId","companyService","CompanyId","parentNodeId","AccountingFirmCompanyId","bankVerificationAttemptId","uniqueRequestIdentifer","context","SelectAccount","AutomaticBankVerificationCancelled","ProceedWithSelectedAccount","SubmitCredentials","AutomaticBankConnectionSubmitted","bankInstitution","institution","SubmitMultiFactorAuthentication","InstitutionSelected","LoadAccountSelection","LoadCredentials","LoadMultiFactorAuthentication","SelectBankInstitution","AutomaticBankConnectionInitiated","reducer","accountId","queries","QueryCloseDialogCallback","QueryForceVoidChequeCallback","SetAuthorizationKey","PollAccountDetails","requestId","loginId","secondaryBankPollingResponse","updatedPollingRate","QueryPollAccountDetails","pollingRate","handleQueries","props","handleBankError","errorDetails","bankLoginService","handleAddBankAccountError","forceManualEntryCallback","errorText","forceVoidChequeCallback","dialog","fallbackToManualEntry","undefined","closeDialog","forEach","QueryAuthorizationKey","secondaryBankLoginService","pollRequestId","pollResponse","account","secondaryBankAccountDetailsAddModel","currency","discriminator","accountNumber","accountSelectedCallback","updatedPollingCount","setTimeout","invalidateReactQueriesFromDurandal","closeDialogCallback","isEmtFlow","credentialsSubmitted","setCredentialsSubmitted","setShouldDisplayTakingTooLong","takingTooLongTimeout","setTakingTooLongTimeout","disableTakingTooLongTimeout","setDisableTakingTooLongTimeout","timeoutId","clearTimeout","initialState","uuid","processFlinksMessage","e","step","ACCOUNT_SELECTED","REDIRECT","SUBMIT_CREDENTIAL","SUBMIT_MFA","INSTITUTION_SELECTED","COMPONENT_LOAD_CREDENTIAL","COMPONENT_LOAD_MFA","COMPONENT_LOAD_ACCOUNT_SELECTION","COMPONENT_LOAD_INSTITUTION_SELECTOR","onWindowMessage","window","addEventListener","removeEventListener","SessionTokenViewModel","BankLoginRequirementsBindingModel","BankLoginRequirementsViewModel","CredentialsLoginForm","LoginRow","LoginField","PostSubmitRequirementsBindingModel","RequirementsField","PostSubmitRequirementsViewModel","AdditionalLoginViewModel","MfaQuestion","MfaQuestionField","UpdateAccountLinkBindingModel","MfaAnswerRow","MfaAnswerField","UpdateAccountLinkViewModel","GetLinkStatusAndAccountsBindingModel","GetLinkStatusAndAccountsViewModel","LinkedAccount","LinkedAccountBalance","BankTransferCode","PostAddAccountToPlootoBindingModel","PostAddAccountToPlootoViewModel","SelectedAccountBindingModel","BankLoginAuthSessionBindingModel","BankLoginSearchResultViewModel","BankLoginService","getSession","bankLoginAuthSessionBindingModel","requestUrl","sessionData","getBankRequirements","params","sessionToken","bankIdentifier","AuthorizedGet","requirementsData","postSubmitRequirements","submitResult","getLoginStatus","loginStatus","postSubmitAccountLinkUpdate","AuthorizedPut","updateResult","getStatusOrAccounts","accountLinkId","statusResult","getBankSearchResultsWithXhr","searchQuery","dataPromiseWithXhr","xhrService","getXhr","initiatePromiseWithXhr","addBankAccount","selectedAccount","bankMetaInfo","bankAccountAddModel","BankAccountAddModel","bank","bankName","name","accountName","accountDetails","bankService","CreateAccount","getErrorDetails","SessionTimeoutService","showTimeout","redirect","titleMessageModal","show","svgIconSymbolLarge","router"],"sourceRoot":""}