@mxenabled/connect-widget 2.5.2 → 2.5.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.es.js CHANGED
@@ -9167,7 +9167,10 @@ const ACTIONABLE_ERROR_CODES = {
9167
9167
  NO_ELIGIBLE_ACCOUNTS: 1e3
9168
9168
  };
9169
9169
  const ACTIVE_ACTIONABLE_ERROR_CODES = Object.values(ACTIONABLE_ERROR_CODES);
9170
- const canHandleActionableError = (errorCode) => {
9170
+ const canHandleActionableError = (errorCode, mode) => {
9171
+ if (errorCode === ACTIONABLE_ERROR_CODES.NO_ELIGIBLE_ACCOUNTS && mode !== VERIFY_MODE) {
9172
+ return false;
9173
+ }
9171
9174
  return ACTIVE_ACTIONABLE_ERROR_CODES.includes(errorCode);
9172
9175
  };
9173
9176
 
@@ -9460,7 +9463,7 @@ const stepToMicrodeposits = (state) => ({
9460
9463
  location: pushLocation(state.location, STEPS.MICRODEPOSITS)
9461
9464
  });
9462
9465
  const jobComplete = (state, action) => {
9463
- const { member, job } = action.payload;
9466
+ const { member, job, mode = AGG_MODE } = action.payload;
9464
9467
  const members = upsertMember(state, { payload: member });
9465
9468
  if (member.connection_status === ReadableStatuses$1.CONNECTED) {
9466
9469
  const scheduledJobs = onJobFinished(state.jobSchedule, job);
@@ -9469,7 +9472,7 @@ const jobComplete = (state, action) => {
9469
9472
  return {
9470
9473
  ...state,
9471
9474
  currentMemberGuid: member.guid,
9472
- location: pushLocation(state.location, getStepFromMember(member)),
9475
+ location: pushLocation(state.location, getStepFromMember(member, mode)),
9473
9476
  members,
9474
9477
  updateCredentials: member.connection_status === ReadableStatuses$1.DENIED || state.updateCredentials
9475
9478
  };
@@ -9597,7 +9600,7 @@ function getStartingStep(members, member, microdeposit, config, institution, wid
9597
9600
  else if (shouldUpdateCredentials)
9598
9601
  return STEPS.ENTER_CREDENTIALS;
9599
9602
  else if (member && config.current_member_guid)
9600
- return shouldStepToConnecting ? STEPS.CONNECTING : getStepFromMember(member);
9603
+ return shouldStepToConnecting ? STEPS.CONNECTING : getStepFromMember(member, config.mode);
9601
9604
  else if (shouldStepToMicrodeposits)
9602
9605
  return STEPS.MICRODEPOSITS;
9603
9606
  else if (widgetProfile.display_disclosure_in_connect)
@@ -9608,11 +9611,11 @@ function getStartingStep(members, member, microdeposit, config, institution, wid
9608
9611
  return getIavMembers(members).length > 0 ? STEPS.VERIFY_EXISTING_MEMBER : STEPS.SEARCH;
9609
9612
  else return STEPS.SEARCH;
9610
9613
  }
9611
- function getStepFromMember(member) {
9614
+ function getStepFromMember(member, mode = AGG_MODE) {
9612
9615
  const connection_status = member.connection_status;
9613
9616
  if (member && memberIsBlockedForCostReasons(member)) {
9614
9617
  return STEPS.INSTITUTION_DISABLED;
9615
- } else if (member?.error?.error_code && canHandleActionableError(member?.error?.error_code) || hasNoSingleAccountSelectOptions(member))
9618
+ } else if (member?.error?.error_code && canHandleActionableError(member?.error?.error_code, mode) || hasNoSingleAccountSelectOptions(member))
9616
9619
  return STEPS.ACTIONABLE_ERROR;
9617
9620
  else if (connection_status === ReadableStatuses$1.CHALLENGED)
9618
9621
  return STEPS.MFA;
@@ -73878,12 +73881,14 @@ const DEFAULT_POLLING_STATE = {
73878
73881
  // previous response from last poll
73879
73882
  currentResponse: {},
73880
73883
  // current response
73881
- jobIsDone: false,
73884
+ pollingIsDone: false,
73882
73885
  // whether or not we should stop polling
73883
- userMessage: CONNECTING_MESSAGES.STARTING
73886
+ userMessage: CONNECTING_MESSAGES.STARTING,
73884
73887
  // message to show the end user
73888
+ initialDataReady: false
73889
+ // whether the initial data ready event has been sent
73885
73890
  };
73886
- function pollMember(memberGuid, api, onPostMessage, sendAnalyticsEvent, clientLocale) {
73891
+ function pollMember(memberGuid, api, clientLocale) {
73887
73892
  return interval(3e3).pipe(
73888
73893
  switchMap(
73889
73894
  () => (
@@ -73892,13 +73897,7 @@ function pollMember(memberGuid, api, onPostMessage, sendAnalyticsEvent, clientLo
73892
73897
  defer(() => api.loadMemberByGuid(memberGuid, clientLocale)).pipe(
73893
73898
  mergeMap(
73894
73899
  (member) => defer(() => api.loadJob(member.most_recent_job_guid)).pipe(
73895
- map((job) => {
73896
- if (job.async_account_data_ready) {
73897
- onPostMessage("connect/initialDataReady", { member_guid: member.guid });
73898
- sendAnalyticsEvent(AnalyticEvents.INITIAL_DATA_READY, { member_guid: member.guid });
73899
- }
73900
- return member;
73901
- })
73900
+ map((job) => ({ member, job }))
73902
73901
  )
73903
73902
  ),
73904
73903
  catchError((error) => of(error))
@@ -73916,13 +73915,18 @@ function pollMember(memberGuid, api, onPostMessage, sendAnalyticsEvent, clientLo
73916
73915
  // dont update previous response if this is an error
73917
73916
  previousResponse: isError ? acc.previousResponse : acc.currentResponse,
73918
73917
  // dont update current response if this is an error
73919
- currentResponse: isError ? acc.currentResponse : response
73918
+ currentResponse: isError ? acc.currentResponse : response,
73919
+ // preserve the initialDataReadySent flag
73920
+ initialDataReady: acc.initialDataReady
73920
73921
  };
73922
+ if (!isError && !acc.initialDataReady && response?.job?.async_account_data_ready) {
73923
+ pollingState.initialDataReady = true;
73924
+ }
73921
73925
  const [shouldStopPolling, messageKey] = handlePollingResponse(pollingState);
73922
73926
  return {
73923
73927
  ...pollingState,
73924
73928
  // we should keep polling based on the member
73925
- jobIsDone: isError ? false : shouldStopPolling,
73929
+ pollingIsDone: isError ? false : shouldStopPolling,
73926
73930
  userMessage: messageKey
73927
73931
  };
73928
73932
  },
@@ -73931,8 +73935,9 @@ function pollMember(memberGuid, api, onPostMessage, sendAnalyticsEvent, clientLo
73931
73935
  );
73932
73936
  }
73933
73937
  function handlePollingResponse(pollingState) {
73934
- const polledMember = pollingState.currentResponse;
73935
- const previousMember = pollingState.previousResponse;
73938
+ const polledMember = pollingState.currentResponse?.member || {};
73939
+ const previousMember = pollingState.previousResponse?.member || {};
73940
+ const polledJob = pollingState.currentResponse?.job || {};
73936
73941
  const justFinishedAggregating = previousMember.is_being_aggregated === true && polledMember.is_being_aggregated === false;
73937
73942
  const isNotAggregatingAtAll = previousMember.is_being_aggregated === false && polledMember.is_being_aggregated === false;
73938
73943
  if (polledMember.connection_status === ReadableStatuses$1.CHALLENGED) {
@@ -73941,6 +73946,9 @@ function handlePollingResponse(pollingState) {
73941
73946
  if (ProcessingStatuses.indexOf(polledMember.connection_status) !== -1) {
73942
73947
  return [false, CONNECTING_MESSAGES.VERIFYING];
73943
73948
  }
73949
+ if (polledJob.async_account_data_ready) {
73950
+ return [true, CONNECTING_MESSAGES.FINISHING];
73951
+ }
73944
73952
  if (polledMember.connection_status === ReadableStatuses$1.CONNECTED) {
73945
73953
  if (polledMember.is_being_aggregated) {
73946
73954
  return [false, CONNECTING_MESSAGES.SYNCING];
@@ -76367,25 +76375,33 @@ const Connecting = (props) => {
76367
76375
  const activeJob = getActiveJob(jobSchedule);
76368
76376
  const needsToInitializeJobSchedule = jobSchedule.isInitialized === false;
76369
76377
  function handleMemberPoll(pollingState) {
76370
- if (pollingState.pollingCount > 15 && pollingState.currentResponse?.connection_status !== ReadableStatuses$1.PENDING) {
76378
+ if (pollingState.pollingCount > 15 && pollingState.currentResponse?.member?.connection_status !== ReadableStatuses$1.PENDING) {
76371
76379
  setTimedOut(true);
76372
76380
  }
76373
76381
  const overrideStatusChanged = postMessageEventOverrides?.memberStatusUpdate?.getHasStatusChanged({
76374
- currentMember: pollingState.currentResponse,
76375
- previousMember: pollingState.previousResponse
76382
+ currentMember: pollingState.currentResponse?.member,
76383
+ previousMember: pollingState.previousResponse?.member
76376
76384
  });
76377
76385
  const overrideEventData = postMessageEventOverrides?.memberStatusUpdate?.createEventData?.({
76378
76386
  institution: selectedInstitution,
76379
- member: pollingState.currentResponse
76387
+ member: pollingState.currentResponse?.member
76380
76388
  });
76381
- const statusChanged = pollingState.previousResponse?.connection_status !== pollingState.currentResponse?.connection_status;
76389
+ const statusChanged = pollingState.previousResponse?.member?.connection_status !== pollingState.currentResponse?.member?.connection_status;
76382
76390
  const eventData = overrideEventData || {
76383
- member_guid: pollingState.currentResponse.guid,
76384
- connection_status: pollingState.currentResponse.connection_status
76391
+ member_guid: pollingState.currentResponse?.member?.guid,
76392
+ connection_status: pollingState.currentResponse?.member?.connection_status
76385
76393
  };
76386
76394
  if (pollingState.previousResponse != null && (statusChanged || overrideStatusChanged)) {
76387
76395
  onPostMessage("connect/memberStatusUpdate", eventData);
76388
76396
  }
76397
+ if (pollingState.initialDataReady) {
76398
+ onPostMessage("connect/initialDataReady", {
76399
+ member_guid: pollingState.currentResponse?.member?.guid
76400
+ });
76401
+ sendAnalyticsEvent(AnalyticEvents.INITIAL_DATA_READY, {
76402
+ member_guid: pollingState.currentResponse?.member?.guid
76403
+ });
76404
+ }
76389
76405
  setMessage(pollingState.userMessage);
76390
76406
  }
76391
76407
  useEffect(() => {
@@ -76485,14 +76501,14 @@ const Connecting = (props) => {
76485
76501
  return needsJobStarted ? startJob$ : of(currentMember);
76486
76502
  }).pipe(
76487
76503
  concatMap(
76488
- (member) => pollMember(member.guid, api, onPostMessage, sendAnalyticsEvent, clientLocale).pipe(
76504
+ (member) => pollMember(member.guid, api, clientLocale).pipe(
76489
76505
  tap((pollingState) => handleMemberPoll(pollingState)),
76490
- filter((pollingState) => pollingState.jobIsDone),
76506
+ filter((pollingState) => pollingState.pollingIsDone),
76491
76507
  pluck("currentResponse"),
76492
76508
  take(1),
76493
- mergeMap((polledMember) => {
76509
+ mergeMap((polledResponse) => {
76494
76510
  const loadLatestJob$ = defer(() => api.loadJob(member.most_recent_job_guid)).pipe(
76495
- map((job) => ({ member: polledMember, job }))
76511
+ map((job) => ({ member: polledResponse.member, job }))
76496
76512
  );
76497
76513
  return loadLatestJob$;
76498
76514
  })
@@ -76504,10 +76520,10 @@ const Connecting = (props) => {
76504
76520
  }
76505
76521
  if (ErrorStatuses$1.includes(member.connection_status)) {
76506
76522
  return fadeOut(connectingRef.current, "down").then(() => {
76507
- dispatch(jobComplete$1(member, job));
76523
+ dispatch(jobComplete$1(member, job, connectConfig.mode));
76508
76524
  });
76509
76525
  } else {
76510
- return dispatch(jobComplete$1(member, job));
76526
+ return dispatch(jobComplete$1(member, job, connectConfig.mode));
76511
76527
  }
76512
76528
  });
76513
76529
  return () => connectMember$.unsubscribe();
@@ -82592,7 +82608,7 @@ const RenderConnectStep = (props) => {
82592
82608
  );
82593
82609
  } else if (step === STEPS.ACTIONABLE_ERROR) {
82594
82610
  const errorCode = currentMember?.error?.error_code ?? null;
82595
- connectStepView = canHandleActionableError(errorCode) ? /* @__PURE__ */ jsxRuntimeExports.jsx(ActionableError, {}) : /* @__PURE__ */ jsxRuntimeExports.jsx(
82611
+ connectStepView = canHandleActionableError(errorCode, connectConfig.mode) ? /* @__PURE__ */ jsxRuntimeExports.jsx(ActionableError, {}) : /* @__PURE__ */ jsxRuntimeExports.jsx(
82596
82612
  LoginError,
82597
82613
  {
82598
82614
  institution: selectedInstitution,