{"version":3,"file":"6650.chunk.js?c77e6f2d4bad413ae8ac","mappings":"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","sources":["webpack://@capitalise/container/../common/src/hooks/useOrigin.tsx","webpack://@capitalise/container/../common/src/hooks/useLocalStorage.tsx","webpack://@capitalise/container/../common/src/hooks/useRedirectTrackingPaymentOrigin.tsx","webpack://@capitalise/container/../common/src/utils/asyncRetry.ts","webpack://@capitalise/container/../common/src/utils/SSEHandler.tsx","webpack://@capitalise/container/../common/src/hooks/useLocalStorageFlag.tsx","webpack://@capitalise/container/../common/src/hooks/useQueryState.tsx","webpack://@capitalise/container/../common/src/utils/ABTesting.ts"],"sourcesContent":["import useLocalStorage from \"./useLocalStorage\";\nimport { useEffect } from \"react\";\n\nexport enum OriginContext {\n PAYMENT = \"PAYMENT\",\n}\n\nconst buildKeyName = (context: OriginContext) => {\n return `capitalise/origin-${context}`;\n};\n\nfunction useOrigin(\n context: OriginContext,\n initialOrigin?: T,\n initialMetadata?: S\n) {\n const [origin, setOrigin] = useLocalStorage(\n buildKeyName(context),\n undefined\n ) as [\n { value: T; metadata: S },\n (valueMetadata: { value: T; metadata: S }) => void\n ];\n\n useEffect(() => {\n if (initialOrigin) {\n setOrigin({ value: initialOrigin, metadata: initialMetadata });\n }\n }, [initialOrigin]);\n\n const clearOrigin = () => {\n setOrigin({ value: undefined, metadata: undefined });\n };\n\n const { value, metadata } = origin || {};\n\n return { origin: value, metadata, setOrigin, clearOrigin };\n}\n\nexport default useOrigin;\n","import { useState } from \"react\";\n\nexport default function useLocalStorage(\n key: string,\n defaultValue: T\n): [T, (value: T) => void] {\n const [storedValue, setStoredValue] = useState(() => {\n try {\n const value = window.localStorage.getItem(key);\n\n if (value) {\n return JSON.parse(value);\n } else {\n window.localStorage.setItem(key, JSON.stringify(defaultValue));\n return defaultValue;\n }\n } catch (err) {\n return defaultValue;\n }\n });\n\n const setValue = (value: T) => {\n try {\n setStoredValue(value);\n\n localStorage.setItem(key, JSON.stringify(value));\n if (typeof window !== \"undefined\") {\n window.dispatchEvent(new StorageEvent(\"storage\", { key }));\n }\n } catch (err) {}\n };\n\n return [storedValue, setValue];\n}\n","import useOrigin, { OriginContext } from \"./useOrigin\";\nimport { useHistory } from \"react-router-dom\";\n\nexport enum PaymentOrigin {\n FUNDING = \"FUNDING\",\n APPLICATIONS = \"APPLICATIONS\",\n CREDIT_PROFILE = \"CREDIT_PROFILE\",\n MONITOR = \"MONITOR\",\n CRS = \"CRS\",\n MAPPING_SCREEN = \"MAPPING_SCREEN\",\n}\n\ninterface Metadata {\n path?: string;\n id?: number;\n}\n\nconst redirectOptions = {\n [PaymentOrigin.APPLICATIONS]: {\n title: \"Back to funding\",\n path: \"/business/funding\",\n },\n [PaymentOrigin.FUNDING]: {\n title: \"Back to application\",\n path: \"/business/funding/search/[id]/profile\",\n },\n [PaymentOrigin.CREDIT_PROFILE]: {\n title: \"Back to credit profile\",\n path: \"/business/credit-profile\",\n },\n [PaymentOrigin.MONITOR]: {\n title: \"Back to credit checks\",\n path: \"/business/monitor\",\n },\n [PaymentOrigin.CRS]: {\n title: \"Back to credit review\",\n path: \"/business/review\",\n },\n [PaymentOrigin.MAPPING_SCREEN]: {\n title: \"Back to mapping screen\",\n path: \"/business/cloud/mapping\",\n },\n};\n\nfunction useRedirectTrackingPaymentOrigin(\n defaultOrigin: PaymentOrigin = PaymentOrigin.CREDIT_PROFILE,\n redirectToChangePlan: boolean = false\n) {\n const history = useHistory();\n const { origin, metadata, setOrigin, clearOrigin } = useOrigin<\n PaymentOrigin,\n Metadata\n >(OriginContext.PAYMENT);\n const currentOrigin = origin || defaultOrigin;\n\n const redirectToPaymentFlow = (\n origin: PaymentOrigin,\n metadata?: Record & { path?: string }\n ) => {\n setOrigin({ value: origin, metadata });\n history.push(\n `/business/${redirectToChangePlan ? \"change-plan\" : \"upgrade\"}`\n );\n };\n\n const redirectToOrigin = (keepOrigin = false) => {\n if (!keepOrigin) {\n clearOrigin();\n }\n if (metadata?.path) {\n return history.push(metadata?.path);\n }\n const redirectInfo = redirectOptions[currentOrigin];\n history.push(redirectInfo.path);\n };\n\n const info = redirectOptions[currentOrigin];\n\n return {\n info: { origin: currentOrigin, ...info },\n redirectToPaymentFlow,\n redirectToOrigin,\n clearOrigin,\n };\n}\n\nexport default useRedirectTrackingPaymentOrigin;\n","function asyncRetry(fn: () => Promise, ms: number): Promise {\n return new Promise((resolve) => {\n fn()\n .then(resolve)\n .catch(() => {\n setTimeout(() => {\n asyncRetry(fn, ms).then(resolve);\n }, ms);\n });\n });\n}\n\nexport default asyncRetry;\n","import { NativeEventSource, EventSourcePolyfill } from \"event-source-polyfill\";\nimport { useEffect, useRef, useState } from \"react\";\nimport asyncRetry from \"./asyncRetry\";\nlet instance: SSEHandler;\nconst EventSource = NativeEventSource || EventSourcePolyfill;\n\nconst EVENT_ACCESS_URL = `${window._env_.PLATFORM_API_DOMAIN}/v1/events/access`;\nconst EVENT_STREAM_URL = `${window._env_.PLATFORM_API_DOMAIN}/v1/events`;\nconst LOCAL_STORAGE_KEY = \"platfi-ui-app/SESSION\";\n\nexport enum EventsAvailable {\n membershipUpgraded = \"entity/membership/upgraded\",\n membershipUpdated = \"entity/membership/updated\",\n snapshotGeneration = \"entity/ledger/snapshot/generation\",\n snapshotTimeline = \"entity/ledger/snapshot/timeline\",\n profileUpdate = \"entity/ledger/profile/update\",\n casePaid = \"payment/completed\",\n matchResultUpdate = \"funding/match/status_update\",\n relatedCompaniesUpdate = \"entity/ledger/snapshot/related/synced\",\n}\n\ninterface Data extends Record {\n entityId: string;\n companyNumber: string;\n finished: boolean;\n provider: \"experian\";\n percentage: number;\n withFacilities?: boolean;\n message?: string;\n error?: boolean;\n}\n\nexport interface EventStreamPayloadData {\n message: string;\n data: Data;\n event: EventsAvailable;\n metadata?: {\n createdAt?: string;\n };\n}\n\ninterface EventStreamPayload {\n id?: string;\n type: string | \"message\";\n target: EventSourcePolyfill;\n data: string; //EventStreamPayloadData\n}\n\ninterface AccessTokenResponse {\n id: string;\n expiresIn: number;\n expiresAt: string;\n createdAt: string;\n scope: \"SSE_ACCESS_SCOPE\";\n value: string;\n generatedBy: string;\n generatedByEntityId: number;\n}\n\nexport interface Store {\n id: string;\n onMessage: (event: EventStreamPayload) => void;\n onError: (eventError: unknown) => void;\n}\n\nconst getUserSession = (): Promise =>\n new Promise((resolve, reject) => {\n if (localStorage.getItem(\"anonymous-user\") === \"true\") {\n reject(\"Anonymous user error\");\n }\n\n try {\n const userSession = localStorage.getItem(LOCAL_STORAGE_KEY);\n const { accessToken } = JSON.parse(userSession);\n resolve(accessToken);\n } catch (error) {\n reject(error);\n }\n });\n\nconst requestAccessTokenDefault = (): Promise => {\n return new Promise((resolve, reject) => {\n try {\n asyncRetry(getUserSession, 700).then((accessToken) => {\n resolve(\n fetch(EVENT_ACCESS_URL, {\n headers: {\n \"Content-Type\": \"application/json\",\n Authorization: `Bearer ${accessToken}`,\n },\n }).then((response) => response.json())\n );\n });\n } catch (error) {\n reject((error as Error).message);\n }\n });\n};\n\ntype EventSourceType = typeof EventSourcePolyfill;\n\nclass SSEHandler {\n started: boolean;\n token: string;\n private eventSource: typeof EventSource;\n stores: Store[];\n\n constructor() {\n if (instance) {\n throw new Error(\"SSEHandler instance already created\");\n }\n this.stores = [];\n this.started = false;\n instance = this;\n }\n\n private onMessage(event: EventStreamPayload) {\n instance.stores.forEach((store) => store.onMessage(event));\n }\n\n private onError(eventError: unknown) {\n instance.stores.forEach((store) => store.onError(eventError));\n }\n\n private onOpen() {}\n\n private openConnection(token: string) {\n const eventSourceInstance = new EventSource(\n `${EVENT_STREAM_URL}?token=${token}`\n );\n eventSourceInstance.onmessage = this.onMessage;\n eventSourceInstance.onerror = this.onError;\n eventSourceInstance.onopen = this.onOpen;\n this.eventSource = eventSourceInstance as unknown as EventSourceType;\n }\n\n private appendStore(store: Store) {\n const storeIndex = this.stores.findIndex(\n (persistStore) => persistStore.id === store.id\n );\n if (storeIndex === -1) {\n this.stores.push(store);\n } else {\n this.stores[storeIndex] = store;\n }\n }\n\n init(\n store?: Store,\n requestAccessToken: () => Promise = requestAccessTokenDefault\n ) {\n if (store) {\n this.appendStore(store);\n }\n if (this.eventSource || this.started) {\n return;\n }\n this.started = true;\n requestAccessToken()\n .then((result) => this.openConnection(result.value))\n .catch((error) => console.warn(error));\n }\n\n closeStore(storeKey: string) {\n this.stores = this.stores.filter((store) => store.id !== storeKey);\n }\n}\n\nconst SSEHandlerInstance = new SSEHandler();\nexport default SSEHandlerInstance;\n\nexport const adapterReduxStore = (store: { dispatch: Function }): Store => ({\n id: \"reduxStore\",\n onMessage: (event) => {\n const objEvent = JSON.parse(event.data);\n store.dispatch({\n type: `@@SSE/${objEvent.event}`,\n payload: objEvent.data,\n });\n },\n onError: () => {},\n});\n\nexport const SSEReduxMiddleware =\n ({ dispatch }: { dispatch: Function; getState: Function }) =>\n (next: Function) =>\n (action: unknown) => {\n SSEHandlerInstance.init({\n id: \"redux\",\n onMessage: (event) => {\n const objEvent = JSON.parse(event.data);\n\n const sendSSEEvent = () => {\n return {\n type: `@@SSE/${objEvent.event}`,\n payload: objEvent.data,\n };\n };\n\n dispatch(sendSSEEvent());\n },\n onError: () => {},\n });\n next(action);\n };\n\nexport const useSSEEvents = (\n id?: string,\n applyFilter?: (eventData: EventStreamPayloadData) => boolean\n) => {\n const [eventData, setEventData] =\n useState();\n const curentId = useRef(\n id || Math.floor(Math.random() * Date.now()).toString(16)\n );\n\n const onMessage = (event: EventStreamPayload) => {\n try {\n const eventData =\n event?.data && (JSON.parse(event?.data) as EventStreamPayloadData);\n const shouldDispatchEvent = applyFilter ? applyFilter(eventData) : true;\n if (shouldDispatchEvent) {\n setEventData(eventData);\n }\n } catch (e) {}\n };\n\n const onError = (error: unknown) => {\n setEventData(error.data);\n };\n\n useEffect(() => {\n SSEHandlerInstance.init({\n id: curentId.current,\n onMessage,\n onError,\n });\n return () => {\n SSEHandlerInstance.closeStore(curentId.current);\n };\n }, []);\n\n return eventData;\n};\n","import useLocalStorage from \"./useLocalStorage\";\n\nexport enum FeatureFlagsAvailable {\n}\n\nexport default function useLocalStorageFlag(\n key: FeatureFlagsAvailable,\n defaultValue: boolean = false\n): boolean {\n const [flag] = useLocalStorage(`@capitalise/flag/${key}`, defaultValue);\n\n return flag;\n}\n","import { useCallback } from \"react\";\nimport { useHistory, useLocation } from \"react-router-dom\";\n\nimport qs from \"qs\";\n\nexport const useQueryState = (\n query: string,\n defaultValue?: T\n): [T, (value: T) => void] => {\n const location = useLocation();\n const history = useHistory();\n\n const setQuery = useCallback(\n (value: T) => {\n const existingQueries = qs.parse(location.search, {\n ignoreQueryPrefix: true,\n });\n\n const queryString = qs.stringify(\n { ...existingQueries, [query]: value },\n { skipNulls: true }\n );\n\n history.push(`${location.pathname}?${queryString}`);\n },\n [history, location, query]\n );\n\n return [\n (qs.parse(location.search, { ignoreQueryPrefix: true })[query] ||\n defaultValue) as T,\n setQuery,\n ];\n};\n","import {\n emitter,\n experimentDebugger,\n useExperiment,\n} from \"@marvelapp/react-ab-test\";\n\nexport interface UseExperiment {\n experimentName: string;\n activeVariant: string;\n emitWin: (experimentName: string) => void;\n selectVariant: (variants: { [variantName: string]: unknown }) => unknown;\n}\n\nexport enum Experiments {\n socialSignon = \"Social signon\",\n houseLookup = \"company lookup\",\n fundingCalculatorDriver = \"funding calculator driver\",\n todayOffers = \"today personalised offers\",\n}\n\ntype ValuesOfExperiments = `${Experiments}`;\n\nexport enum SocialSignonExperimentVariants {\n none = \"none\",\n ssoTop = \"sso on top\",\n ssoBottom = \"sso on bottom\",\n}\n\ntype ValuesOfSocialSignonExperimentVariants =\n `${SocialSignonExperimentVariants}`;\n\nexport enum CompanyVariants {\n houseLookup = \"companies house lookup\",\n experianLookup = \"experian lookup\",\n}\n\ntype ValuesOfCompanyVariants = `${CompanyVariants}`;\n\nexport enum FundingCalculatorDriverVariants {\n boostCashflow = \"boost cashflow\",\n goodCredit = \"good credit\",\n}\n\ntype ValuesOfFundingCalculatorDriverVariants =\n `${FundingCalculatorDriverVariants}`;\n\nexport enum PersonalizedOffersVariants {\n none = \"none\",\n fundingCalculatorDriver = \"funding calculator driver\",\n}\n\ntype ValuesOfPersonalizedOffersVariants = `${PersonalizedOffersVariants}`;\n\ninterface Variant {\n variant: T;\n weight: number;\n}\n\nexport const Variants: Record<\n Experiments,\n Variant<\n | ValuesOfSocialSignonExperimentVariants\n | ValuesOfCompanyVariants\n | ValuesOfFundingCalculatorDriverVariants\n | ValuesOfPersonalizedOffersVariants\n >[]\n> = Object.freeze({\n [Experiments.socialSignon]: [\n {\n variant: SocialSignonExperimentVariants.none,\n weight: 80,\n },\n {\n variant: SocialSignonExperimentVariants.ssoTop,\n weight: 10,\n },\n {\n variant: SocialSignonExperimentVariants.ssoBottom,\n weight: 10,\n },\n ],\n [Experiments.houseLookup]: [\n {\n variant: CompanyVariants.houseLookup,\n weight: 0,\n },\n {\n variant: CompanyVariants.experianLookup,\n weight: 100,\n },\n ],\n [Experiments.fundingCalculatorDriver]: [\n {\n variant: FundingCalculatorDriverVariants.boostCashflow,\n weight: 50,\n },\n {\n variant: FundingCalculatorDriverVariants.goodCredit,\n weight: 50,\n },\n ],\n [Experiments.todayOffers]: [\n {\n variant: PersonalizedOffersVariants.none,\n weight: 50,\n },\n {\n variant: PersonalizedOffersVariants.fundingCalculatorDriver,\n weight: 50,\n },\n ],\n});\n\nconst ABTesting = {\n init: (debug = false) => {\n Object.entries(Variants).forEach(([experiment, variants]) => {\n const variantNames = variants.map((variant) => variant.variant);\n const variantWeights = variants.map((variant) => variant.weight);\n emitter.defineVariants(experiment, variantNames, variantWeights);\n });\n if (debug) {\n experimentDebugger.setDebuggerAvailable(true);\n experimentDebugger.enable();\n }\n },\n useExperiment: (experiment: ValuesOfExperiments): UseExperiment => {\n const { experimentName, activeVariant, emitWin, selectVariant } =\n useExperiment(experiment);\n const defaultVariant = Variants?.[experiment]?.[0].variant;\n let variantExists = false;\n try {\n variantExists = Variants[experiment].some(\n (experimentVariant) => experimentVariant.variant === activeVariant\n );\n } catch (e) {\n variantExists = false;\n }\n\n return {\n experimentName,\n activeVariant: variantExists ? activeVariant : defaultVariant,\n emitWin,\n selectVariant: variantExists\n ? selectVariant\n : (variants: { [variantName: string]: unknown }) => {\n return variants[defaultVariant];\n },\n };\n },\n};\n\nexport default ABTesting;\n"],"names":["useLocalStorage","key","defaultValue","useState","value","window","localStorage","getItem","JSON","parse","setItem","stringify","err","storedValue","setStoredValue","setValue","dispatchEvent","StorageEvent","OriginContext","PAYMENT","buildKeyName","context","useOrigin","initialOrigin","initialMetadata","undefined","origin","setOrigin","useEffect","metadata","clearOrigin","PaymentOrigin","FUNDING","APPLICATIONS","CREDIT_PROFILE","MONITOR","CRS","MAPPING_SCREEN","redirectOptions","title","path","useRedirectTrackingPaymentOrigin","defaultOrigin","redirectToChangePlan","history","useHistory","currentOrigin","redirectToPaymentFlow","push","redirectToOrigin","keepOrigin","redirectInfo","info","asyncRetry","fn","ms","Promise","resolve","then","catch","setTimeout","instance","EventSource","NativeEventSource","EventSourcePolyfill","EVENT_ACCESS_URL","_env_","PLATFORM_API_DOMAIN","EVENT_STREAM_URL","LOCAL_STORAGE_KEY","EventsAvailable","membershipUpgraded","membershipUpdated","snapshotGeneration","snapshotTimeline","profileUpdate","casePaid","matchResultUpdate","relatedCompaniesUpdate","getUserSession","reject","userSession","accessToken","error","requestAccessTokenDefault","fetch","headers","Authorization","response","json","message","SSEHandlerInstance","SSEHandler","Error","this","stores","started","onMessage","event","forEach","store","onError","eventError","onOpen","openConnection","token","eventSourceInstance","onmessage","onerror","onopen","eventSource","appendStore","storeIndex","findIndex","persistStore","id","init","requestAccessToken","result","console","warn","closeStore","storeKey","filter","adapterReduxStore","objEvent","data","dispatch","type","payload","SSEReduxMiddleware","next","action","sendSSEEvent","useSSEEvents","applyFilter","eventData","setEventData","curentId","useRef","Math","floor","random","Date","now","toString","shouldDispatchEvent","e","current","useLocalStorageFlag","flag","FeatureFlagsAvailable","useQueryState","query","location","useLocation","setQuery","useCallback","existingQueries","qs","search","ignoreQueryPrefix","queryString","skipNulls","pathname","Experiments","socialSignon","houseLookup","fundingCalculatorDriver","todayOffers","SocialSignonExperimentVariants","none","ssoTop","ssoBottom","CompanyVariants","experianLookup","FundingCalculatorDriverVariants","boostCashflow","goodCredit","PersonalizedOffersVariants","Variants","Object","freeze","variant","weight","ABTesting","debug","entries","experiment","variants","variantNames","map","variantWeights","emitter","experimentDebugger","useExperiment","experimentName","activeVariant","emitWin","selectVariant","defaultVariant","variantExists","some","experimentVariant"],"sourceRoot":""}