@zeniai/client-epic-state 5.3.17 → 5.3.18-betaAK1
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/lib/entity/tenant/epic/fetchAllTenantsEpic.d.ts +2 -4
- package/lib/entity/tenant/epic/fetchAllTenantsEpic.js +45 -42
- package/lib/entity/tenant/tenantPayload.d.ts +17 -1
- package/lib/entity/tenant/tenantReducer.d.ts +2 -2
- package/lib/entity/tenant/tenantReducer.js +29 -18
- package/lib/entity/tenant/tenantSelector.d.ts +14 -6
- package/lib/entity/tenant/tenantSelector.js +98 -97
- package/lib/entity/tenant/tenantState.d.ts +10 -0
- package/lib/epic.d.ts +2 -1
- package/lib/epic.js +2 -0
- package/lib/esm/entity/tenant/epic/fetchAllTenantsEpic.js +49 -46
- package/lib/esm/entity/tenant/tenantReducer.js +28 -17
- package/lib/esm/entity/tenant/tenantSelector.js +94 -96
- package/lib/esm/epic.js +2 -0
- package/lib/esm/index.js +6 -6
- package/lib/esm/view/aiCfoView/aiCfoViewReducer.js +65 -3
- package/lib/esm/view/aiCfoView/aiCfoViewSelector.js +25 -0
- package/lib/esm/view/aiCfoView/epics/transcribeAudioEpic.js +60 -0
- package/lib/esm/view/dashboard/dashboardEpic.js +0 -4
- package/lib/esm/view/dashboard/dashboardSelector.js +2 -3
- package/lib/esm/view/financeStatement/financeStatementEpic.js +1 -5
- package/lib/esm/view/people/peoplePageEpic.js +0 -4
- package/lib/esm/view/transactionDetail/createTransaction/createTransactionPayload.js +19 -3
- package/lib/esm/view/transactionDetail/createTransaction/createTransactionState.js +2 -0
- package/lib/index.d.ts +7 -7
- package/lib/index.js +54 -46
- package/lib/view/aiCfoView/aiCfoViewPayload.d.ts +20 -0
- package/lib/view/aiCfoView/aiCfoViewReducer.d.ts +2 -2
- package/lib/view/aiCfoView/aiCfoViewReducer.js +66 -4
- package/lib/view/aiCfoView/aiCfoViewSelector.d.ts +8 -1
- package/lib/view/aiCfoView/aiCfoViewSelector.js +27 -0
- package/lib/view/aiCfoView/aiCfoViewState.d.ts +9 -0
- package/lib/view/aiCfoView/epics/transcribeAudioEpic.d.ts +19 -0
- package/lib/view/aiCfoView/epics/transcribeAudioEpic.js +64 -0
- package/lib/view/dashboard/dashboardEpic.js +0 -4
- package/lib/view/dashboard/dashboardSelector.d.ts +0 -2
- package/lib/view/dashboard/dashboardSelector.js +1 -2
- package/lib/view/financeStatement/financeStatementEpic.js +1 -5
- package/lib/view/people/peoplePageEpic.js +0 -4
- package/lib/view/transactionDetail/createTransaction/createTransactionPayload.d.ts +6 -3
- package/lib/view/transactionDetail/createTransaction/createTransactionPayload.js +19 -3
- package/lib/view/transactionDetail/createTransaction/createTransactionState.d.ts +7 -2
- package/lib/view/transactionDetail/createTransaction/createTransactionState.js +2 -0
- package/lib/view/transactionDetail/transactionDetailReducer.d.ts +20 -20
- package/package.json +1 -1
package/lib/esm/index.js
CHANGED
|
@@ -73,7 +73,7 @@ import { getSnackbar } from './entity/snackbar/snackbarSelector';
|
|
|
73
73
|
import { ALL_WEEK_DAYS, toDayOfWeek, toPriorityCodeType, toTaskStatusCodeType, } from './entity/task/taskState';
|
|
74
74
|
import { getTaskGroupById } from './entity/taskGroup/taskGroupSelector';
|
|
75
75
|
import { deleteConnection, doMagicLinkSignIn, doSignIn, doSignOut, fetchActiveTenant, fetchAllTenants, fetchExcludedResources as fetchExcludedResourcesForTenant, fetchExternalConnections as fetchExternalConnectionsForTenant, fetchSubscriptionSummaryForTenant, initEmailConnectOAuth, resendVerifyDeviceOTP, resetSignInState, saveAPIKeyConnection, saveConnectorCredentials, saveExternalConnection as saveExternalConnectionForTenant, saveOAuthConnection, sendEmailMagicLinkToUser, sendSessionHeartbeat, toExternalIntegrationType, updateCurrentTenant, updateSignInState, verifyDeviceWithTwoFA, } from './entity/tenant/tenantReducer';
|
|
76
|
-
import { DEFAULT_RECEIPTS_EMAIL, getCurrentTenant, getIsAccountingClassesEnabled, getIsAccountingProjectsEnabled, getIsAutoReviewIncomeWithoutCustomerEnabled, getReceiptsEmail, getTenantBaseById, getTenantBaseViewForTenantId, getTenantBaseViewForTenantView, getTenantsBaseByCheckInDateSelector,
|
|
76
|
+
import { DEFAULT_RECEIPTS_EMAIL, getCurrentTenant, getCurrentTenantId, getIsAccountingClassesEnabled, getIsAccountingProjectsEnabled, getIsAutoReviewIncomeWithoutCustomerEnabled, getReceiptsEmail, getTenantBaseById, getTenantBaseViewForTenantId, getTenantBaseViewForTenantView, getTenantsBaseByCheckInDateSelector, getTenantsCoreDetailsByCheckInDateSelector, isCurrentTenantLoaded, isOtherProductsEnabledForTenant, isTenantBankingOnly, isTenantBookkeepingEnabled, isTenantCardsOnly, isTenantLoaded, isTenantUsingZeniCOA, isZeniDomainTenant, toTenantCoreDetailsView, } from './entity/tenant/tenantSelector';
|
|
77
77
|
import { toExternalSupportedTool } from './entity/tenant/tenantTypes';
|
|
78
78
|
import { pushToastNotification } from './entity/toastNotification/toastNotificationReducer';
|
|
79
79
|
import { getLastNotificationTime, getNotifications, } from './entity/toastNotification/toastNotificationSelector';
|
|
@@ -332,7 +332,7 @@ import { clearInternationalWire, createPaymentInstrument, createPaymentInstrumen
|
|
|
332
332
|
import { getInternationalWireView, } from './view/spendManagement/billPay/internationalWire/internationalWireSelector';
|
|
333
333
|
import { fetchInternationalVerificationForm, submitInternationalVerificationForm, updateVerificationFormLocalData, } from './view/spendManagement/billPay/internationalWireVerification/internationalWireVerificationReducer';
|
|
334
334
|
import { getIntlWireVerificationView, } from './view/spendManagement/billPay/internationalWireVerification/internationalWireVerificationSelector';
|
|
335
|
-
import { fetchBillAttachment, fetchMagicLinkBankNameByRouting, fetchMagicLinkBankNameBySwift, fetchMagicLinkTenant, saveBankAccount, saveMagicLinkAddressInLocalStore, updateMagicLinkBankAccountLocalStoreData, updateMagicLinkInternationalBankAccountLocalStoreData, } from './view/spendManagement/billPay/magicLinkView/magicLinkViewReducer';
|
|
335
|
+
import { fetchBillAttachment, fetchMagicLinkBankNameByRouting, fetchMagicLinkBankNameBySwift, fetchMagicLinkTenant, saveBankAccount, saveMagicLinkAddressInLocalStore, updateMagicLinkBankAccountLocalStoreData, updateMagicLinkInternationalBankAccountLocalStoreData, updateMagicLinkTenantFailure, updateMagicLinkTenantSuccess, } from './view/spendManagement/billPay/magicLinkView/magicLinkViewReducer';
|
|
336
336
|
import { getMagicLinkBankAccountView, getMagicLinkCurrentAddressState, getMagicLinkView, } from './view/spendManagement/billPay/magicLinkView/magicLinkViewSelector';
|
|
337
337
|
import { fetchWiseRedirectStatus } from './view/spendManagement/billPay/wiseRedirectView/wiseRedirectReducer';
|
|
338
338
|
import { getWiseRedirect } from './view/spendManagement/billPay/wiseRedirectView/wiseRedirectSelector';
|
|
@@ -509,7 +509,7 @@ export { toTimeframeTick, mapTimePeriodtoTimeframeTick, toTimePeriod, toAbsolute
|
|
|
509
509
|
export { toVendorSpendTrendFilterTabsTypeStrict, } from './entity/vendorExpense/vendorSpendTrendFilterTabType';
|
|
510
510
|
export { getNumberOfPeriods };
|
|
511
511
|
export { SCHEDULE_DAYS_OF_MONTH, toScheduleDaysOfMonth, toMonth, toMonthStrict, toQuarter, toQuarterStrict, };
|
|
512
|
-
export { getTenantBaseById, getCurrentTenant, getIsAccountingClassesEnabled, getIsAccountingProjectsEnabled, getIsAutoReviewIncomeWithoutCustomerEnabled,
|
|
512
|
+
export { getTenantBaseById, getCurrentTenant, getCurrentTenantId, isCurrentTenantLoaded, isTenantLoaded, getIsAccountingClassesEnabled, getIsAccountingProjectsEnabled, getIsAutoReviewIncomeWithoutCustomerEnabled, getTenantsBaseByCheckInDateSelector, getTenantsCoreDetailsByCheckInDateSelector, toTenantCoreDetailsView, getTenantBaseViewForTenantView, getTenantBaseViewForTenantId, isZeniDomainTenant, isTenantUsingZeniCOA, fetchActiveTenant, fetchAllTenants, updateCurrentTenant, clearAll, doMagicLinkSignIn, verifyDeviceWithTwoFA, resendVerifyDeviceOTP, sendEmailMagicLinkToUser, doSignIn, updateSignInState, doSignOut, sendSessionHeartbeat, resetSignInState, fetchExcludedResourcesForTenant, fetchExternalConnectionsForTenant, saveExternalConnectionForTenant, deleteConnection, saveAPIKeyConnection, saveConnectorCredentials, saveOAuthConnection, initEmailConnectOAuth, toExternalIntegrationType, toExternalSupportedTool, fetchSubscriptionSummaryForTenant, isTenantBankingOnly, isTenantCardsOnly, isTenantBookkeepingEnabled, isOtherProductsEnabledForTenant, DEFAULT_RECEIPTS_EMAIL, getReceiptsEmail, };
|
|
513
513
|
export { toAccountType, toAccountGroupType, getAccountGroupKey, getAllAccounts, getTransactionFilterAccountOptions, };
|
|
514
514
|
export { getAllClasses, getClassById, getClassFilterOptions, } from './entity/class/classSelector';
|
|
515
515
|
export { getForecast };
|
|
@@ -661,7 +661,7 @@ export { isZeniClearingAccountReport, ZENI_CLEARING_ACCOUNT, isZeniClearingAccou
|
|
|
661
661
|
export { fetchOnboardingCustomerView, fetchOnboardingCustomerSetupView, getOnboardingPlaidLinkToken, establishOnboardingPlaidConnection, updateOnboardingCustomerViewAccountDetails, updateOnboardingCustomerViewCompleteStatus, updateOnboardingCustomerViewDashboardLoaded, updateOnboardingPaymentAccountLoginStatus, updateOnboardingPaymentAccountStatus, updateOnboardingCustomerView, updateOnboardingCustomerViewLocalStoreData, updateCurrentStep, updateCurrentSubStep, updateOnboardingCustomerViewUIState, saveOnboardingCompnayOfficerPhoneInLocalStore, saveOnboardingCustomerViewDataInLocalStore, clearOnboardingCustomerViewDataInLocalStore, applyKycDocumentAutofillForOnboarding, applyKybDocumentAutofillForOnboarding, clearKycKybAutofillForOnboarding, acknowledgeOnboardingAiActivationViewed, acknowledgeOnboardingAiFinanceTeam, fetchAiAgentsActivationStatus, aiAgentsActivationCountsUpdated, aiAgentsActivationPhaseChanged, getAiAgentsActivationCounts, getAiAgentsActivationPhases, getAiAgentsActivationSubview, getOnboardingCustomerView, getProductSettingsString, ALL_ONBOARDING_STEPS, ALL_ONBOARDING_SUB_STEPS, toOnboardingStepType, toOnboardingSubStepType, };
|
|
662
662
|
export { saveAccountMapping, saveAccountMappingLocalData, clearAccountMappingLocalData, getAccountMappingView, initializeAccountMappingView, };
|
|
663
663
|
export { getMagicLinkView, getMagicLinkBankAccountView, getMagicLinkCurrentAddressState, };
|
|
664
|
-
export { fetchMagicLinkTenant, fetchBillAttachment, saveBankAccount, updateMagicLinkBankAccountLocalStoreData, updateMagicLinkInternationalBankAccountLocalStoreData, fetchMagicLinkBankNameByRouting, fetchMagicLinkBankNameBySwift, saveMagicLinkAddressInLocalStore, };
|
|
664
|
+
export { fetchMagicLinkTenant, updateMagicLinkTenantSuccess, updateMagicLinkTenantFailure, fetchBillAttachment, saveBankAccount, updateMagicLinkBankAccountLocalStoreData, updateMagicLinkInternationalBankAccountLocalStoreData, fetchMagicLinkBankNameByRouting, fetchMagicLinkBankNameBySwift, saveMagicLinkAddressInLocalStore, };
|
|
665
665
|
export { getWiseRedirect, fetchWiseRedirectStatus };
|
|
666
666
|
export { getInternationalWireView, initializeInternationalWireLocalData, updateInternationalWireLocalStoreData, initializeDynamicForm, fetchInternationalWireDynamicForm, createPaymentInstrument, createPaymentInstrumentUpdateStatus, deletePaymentInstrument, clearInternationalWire, };
|
|
667
667
|
export { fetchUserRoleConfig, getUserRoleConfig };
|
|
@@ -705,8 +705,8 @@ export { updateAiAccountantCustomers, updateAiAccountantCustomer, updateAiAccoun
|
|
|
705
705
|
export { getAiAccountantCustomers, getAiAccountantJobsByTenantId, } from './entity/aiAccountantCustomer/aiAccountantCustomerSelector';
|
|
706
706
|
export { cancelAiAccountantOnboarding, fetchAiAccountantCustomers, fetchAiAccountantJobs, setSelectedTenantIdsForJobTrigger, triggerAiAccountantJob, updateAiAccountantUIState, } from './view/aiAccountantView/aiAccountantViewReducer';
|
|
707
707
|
export { getAiAccountantCockpitView, } from './view/aiAccountantView/aiAccountantViewSelector';
|
|
708
|
-
export { acceptMasterTOS, applyAiCfoSidePanelHostPageTransition, clearAiCfoSidePanelHostPageContext, clearCurrentSessionId, clearDeleteChatSessionStatus, clearLastContextMessage, clearSkillDetail, clearSkillMutation, closeRoutineRuns, closeRoutinesBrowser, closeSkillsBrowser, createSession, createSessionAndSubmit, deleteChatSession, deleteRoutine, deleteSkill, fetchChatHistory, fetchChatSessionsForUser, fetchRoutineRuns, fetchRoutines, fetchSkillDetail, fetchSkills, fetchSkillsFailure, fetchSkillsSuccess, fetchSkillVersionBody, fetchSkillVersions, fetchSuggestedQuestions, fetchSuggestedQuestionsFailure, fetchSuggestedQuestionsSuccess, openRoutinesBrowser, openSkillsBrowser, runRoutine, saveRoutine, saveSkill, setRoutineEnabled, setSession, setSkillVisibility, stopSubmit, stopSubmitQuestion, submitFeedback, submitQuestion, updateAiCfoViewScrollPosition, updateCotCollapsedState, updateCurrentInput, updateResponseState, } from './view/aiCfoView/aiCfoViewReducer';
|
|
709
|
-
export { canCreateRoutine, getAiCfoView, getRoutineMutation, getRoutineRuns, getRoutines, getRoutinesEnabled, getSkillDetail, getSkillMutation, getSkills, getSkillsEnabled, getSkillVersionBody, getSkillVersions, getSuggestedQuestionsForPageContext, } from './view/aiCfoView/aiCfoViewSelector';
|
|
708
|
+
export { acceptMasterTOS, applyAiCfoSidePanelHostPageTransition, clearAiCfoSidePanelHostPageContext, clearCurrentSessionId, clearDeleteChatSessionStatus, clearLastContextMessage, clearSkillDetail, clearSkillMutation, closeRoutineRuns, closeRoutinesBrowser, closeSkillsBrowser, createSession, createSessionAndSubmit, deleteChatSession, deleteRoutine, deleteSkill, fetchChatHistory, fetchChatSessionsForUser, fetchRoutineRuns, fetchRoutines, fetchSkillDetail, fetchSkills, fetchSkillsFailure, fetchSkillsSuccess, fetchSkillVersionBody, fetchSkillVersions, fetchSuggestedQuestions, fetchSuggestedQuestionsFailure, fetchSuggestedQuestionsSuccess, openRoutinesBrowser, openSkillsBrowser, runRoutine, saveRoutine, saveSkill, setRoutineEnabled, setSession, setSkillVisibility, stopSubmit, stopSubmitQuestion, submitFeedback, submitQuestion, transcribeAudio, updateAiCfoViewScrollPosition, updateCotCollapsedState, updateCurrentInput, updateResponseState, } from './view/aiCfoView/aiCfoViewReducer';
|
|
709
|
+
export { canCreateRoutine, getAiCfoView, getIsTranscribing, getRoutineMutation, getRoutineRuns, getRoutines, getRoutinesEnabled, getSkillDetail, getSkillMutation, getSkills, getSkillsEnabled, getSkillVersionBody, getSkillVersions, getSuggestedQuestionsForPageContext, getTranscriptionFailed, } from './view/aiCfoView/aiCfoViewSelector';
|
|
710
710
|
export { setNewSession, setSessions, updateAiCfoAnswerCardPolicyWizardPlan, upsertAnswerPayload, upsertOrAddQuestionAnswerPayload, addQuestionPayload, clearSession, toAiCfoExports, toAiCfoVisualization, appendSyntheticAiCfoAnswer, updateSyntheticAiCfoAnswer, removeSyntheticAiCfoAnswer, } from './entity/aiCfo/aiCfoReducer';
|
|
711
711
|
export { getAllQuestionAnswersForChatSession, getQuestionAnswerByIdForChatSession, getAllQuestionsForChatSession, getAiCfoSelectorView, getSyntheticAiCfoAnswersForChatSession, getSyntheticAiCfoAnswerByQuestionAnswerId, } from './entity/aiCfo/aiCfoSelector';
|
|
712
712
|
export { ALL_AI_CFO_CHARTS_TYPES, ALL_AI_CFO_VISUALIZATION_TYPES, ALL_AI_CFO_ANSWER_STATE_TYPES, ALL_AI_CFO_ANSWER_RESPONSE_TYPES, ALL_INTERACTIVE_FORM_TYPES, toAiCfoVisualizationType, toAiCfoVisualizationTypeStrict, toAiCfoChartType, toAiCfoChartTypeStrict, toAiCfoAnswerStateType, toAiCfoAnswerStateTypeStrict, toAiCfoAnswerResponseType, toAiCfoAnswerResponseTypeStrict, toInteractiveFormType, toInteractiveFormTypeStrict, ALL_SYNTHETIC_AI_CFO_ANSWER_KINDS, toMessageSender, toMessageType, } from './entity/aiCfo/aiCfoState';
|
|
@@ -47,6 +47,8 @@ export const initialAiCfoViewState = {
|
|
|
47
47
|
fetchChatSessionHistoryByChatSessionId: {},
|
|
48
48
|
responseStateByChatSessionId: {},
|
|
49
49
|
stopSubmitStateByChatSessionId: {},
|
|
50
|
+
transcriptionState: { fetchState: 'Not-Started', error: undefined },
|
|
51
|
+
transcribingChatSessionId: undefined,
|
|
50
52
|
suggestedQuestionsByPageContext: {},
|
|
51
53
|
skillDetail: {
|
|
52
54
|
fetchState: 'Not-Started',
|
|
@@ -147,6 +149,19 @@ function closeSkillsBrowserState(draft) {
|
|
|
147
149
|
draft.uiState.isSkillsBrowserOpen = false;
|
|
148
150
|
clearOpenSkillState(draft);
|
|
149
151
|
}
|
|
152
|
+
/**
|
|
153
|
+
* Clear a finished dictation attempt when the conversation moves on, so a failed one
|
|
154
|
+
* stops showing "Could not transcribe that recording" in every later chat. A running
|
|
155
|
+
* take keeps its state — the composer is showing a live "Transcribing…" for it.
|
|
156
|
+
*/
|
|
157
|
+
function resetFinishedTranscription(draft) {
|
|
158
|
+
if (draft.transcriptionState.fetchState === 'In-Progress') {
|
|
159
|
+
return;
|
|
160
|
+
}
|
|
161
|
+
draft.transcriptionState.fetchState = 'Not-Started';
|
|
162
|
+
draft.transcriptionState.error = undefined;
|
|
163
|
+
draft.transcribingChatSessionId = undefined;
|
|
164
|
+
}
|
|
150
165
|
const aiCfoView = createSlice({
|
|
151
166
|
name: 'aiCfoView',
|
|
152
167
|
initialState: initialAiCfoViewState,
|
|
@@ -154,6 +169,7 @@ const aiCfoView = createSlice({
|
|
|
154
169
|
submitQuestion: {
|
|
155
170
|
reducer(draft, action) {
|
|
156
171
|
const { sessionId } = action.payload;
|
|
172
|
+
resetFinishedTranscription(draft);
|
|
157
173
|
// A turn is being sent, so the chat body has to be what the user sees. Doing this
|
|
158
174
|
// here rather than at each call site is deliberate: the composer, the sample
|
|
159
175
|
// chips, Run, and the `/` menu all submit, and every one of them was a separate
|
|
@@ -299,6 +315,7 @@ const aiCfoView = createSlice({
|
|
|
299
315
|
setSession(draft, action) {
|
|
300
316
|
draft.uiState.currentChatSessionId = action.payload.sessionId;
|
|
301
317
|
draft.uiState.agentId = action.payload.agentId;
|
|
318
|
+
resetFinishedTranscription(draft);
|
|
302
319
|
// Picking a session means wanting to see that chat, so the browser cannot stay over
|
|
303
320
|
// it. In the reducer because there are six dispatch sites across three separate
|
|
304
321
|
// rails, and covering them one at a time missed half of them.
|
|
@@ -351,6 +368,7 @@ const aiCfoView = createSlice({
|
|
|
351
368
|
createSessionAndSubmit: {
|
|
352
369
|
reducer(draft, action) {
|
|
353
370
|
draft.uiState.agentId = action.payload.agentId;
|
|
371
|
+
resetFinishedTranscription(draft);
|
|
354
372
|
draft.createSessionAndSubmitState.fetchState = 'In-Progress';
|
|
355
373
|
draft.createSessionAndSubmitState.error = undefined;
|
|
356
374
|
},
|
|
@@ -551,7 +569,49 @@ const aiCfoView = createSlice({
|
|
|
551
569
|
return { payload: { chatMessageId, error } };
|
|
552
570
|
},
|
|
553
571
|
},
|
|
572
|
+
transcribeAudio: {
|
|
573
|
+
reducer(draft, action) {
|
|
574
|
+
draft.transcriptionState.fetchState = 'In-Progress';
|
|
575
|
+
draft.transcriptionState.error = undefined;
|
|
576
|
+
draft.transcribingChatSessionId = action.payload.chatSessionId;
|
|
577
|
+
},
|
|
578
|
+
prepare(audio, language, chatSessionId) {
|
|
579
|
+
return { payload: { audio, chatSessionId, language } };
|
|
580
|
+
},
|
|
581
|
+
},
|
|
582
|
+
transcribeAudioSuccess: {
|
|
583
|
+
reducer(draft, action) {
|
|
584
|
+
draft.transcriptionState.fetchState = 'Completed';
|
|
585
|
+
draft.transcriptionState.error = undefined;
|
|
586
|
+
// The user moved to another session while this was in flight — dropping it
|
|
587
|
+
// is the only safe option, since appending would put their words in a
|
|
588
|
+
// conversation they did not dictate into.
|
|
589
|
+
if (action.payload.chatSessionId !== draft.uiState.currentChatSessionId) {
|
|
590
|
+
return;
|
|
591
|
+
}
|
|
592
|
+
const transcript = action.payload.transcript.trim();
|
|
593
|
+
if (transcript === '') {
|
|
594
|
+
// Silence, not a failure: leave the composer untouched so the user can
|
|
595
|
+
// simply speak again rather than hunting for what went wrong.
|
|
596
|
+
return;
|
|
597
|
+
}
|
|
598
|
+
// Append to whatever is in the box now rather than to a snapshot taken when
|
|
599
|
+
// recording began — a take produces exactly one result, so there is nothing
|
|
600
|
+
// to reconcile, and anything typed while transcribing survives.
|
|
601
|
+
const existing = draft.uiState.currentInput.trim();
|
|
602
|
+
draft.uiState.currentInput =
|
|
603
|
+
existing === '' ? transcript : `${existing} ${transcript}`;
|
|
604
|
+
},
|
|
605
|
+
prepare(transcript, chatSessionId) {
|
|
606
|
+
return { payload: { chatSessionId, transcript } };
|
|
607
|
+
},
|
|
608
|
+
},
|
|
609
|
+
transcribeAudioFailure(draft, action) {
|
|
610
|
+
draft.transcriptionState.fetchState = 'Error';
|
|
611
|
+
draft.transcriptionState.error = action.payload;
|
|
612
|
+
},
|
|
554
613
|
clearCurrentSessionId(draft) {
|
|
614
|
+
resetFinishedTranscription(draft);
|
|
555
615
|
// New Chat: the empty composer is the point, so the browser cannot stay over it.
|
|
556
616
|
if (draft.uiState.isSkillsBrowserOpen === true) {
|
|
557
617
|
closeSkillsBrowserState(draft);
|
|
@@ -835,7 +895,8 @@ const aiCfoView = createSlice({
|
|
|
835
895
|
// The server has it. Nothing it sends from here on will contain this row,
|
|
836
896
|
// so the tombstone has done its job and holding it any longer is what
|
|
837
897
|
// makes a routine recreated under the same id invisible forever.
|
|
838
|
-
draft.routines.deletedScheduleIds =
|
|
898
|
+
draft.routines.deletedScheduleIds =
|
|
899
|
+
draft.routines.deletedScheduleIds.filter((id) => id !== action.payload.scheduleId);
|
|
839
900
|
draft.routineMutation = {
|
|
840
901
|
fetchState: 'Completed',
|
|
841
902
|
error: undefined,
|
|
@@ -847,7 +908,8 @@ const aiCfoView = createSlice({
|
|
|
847
908
|
// is what lets the refetch put the row back — leaving it hidden would
|
|
848
909
|
// tell the user they had stopped something they had not, which is the
|
|
849
910
|
// worst outcome this list can produce.
|
|
850
|
-
draft.routines.deletedScheduleIds =
|
|
911
|
+
draft.routines.deletedScheduleIds =
|
|
912
|
+
draft.routines.deletedScheduleIds.filter((id) => id !== action.payload.scheduleId);
|
|
851
913
|
// Its own slice: the refetch that puts the row back would otherwise wipe
|
|
852
914
|
// this error, leaving the row silently reappearing with no explanation.
|
|
853
915
|
draft.routineMutation = {
|
|
@@ -1183,5 +1245,5 @@ const aiCfoView = createSlice({
|
|
|
1183
1245
|
});
|
|
1184
1246
|
},
|
|
1185
1247
|
});
|
|
1186
|
-
export const { acceptMasterTOS, acceptMasterTOSFailure, acceptMasterTOSSuccess, applyAiCfoSidePanelHostPageTransition, clearAiCfoSidePanelHostPageContext, clearCurrentSessionId, clearDeleteChatSessionStatus, clearLastContextMessage, clearSkillDetail, clearSkillMutation, closeRoutineRuns, closeRoutinesBrowser, closeSkillsBrowser, createSession, createSessionAndSubmit, createSessionAndSubmitFailure, createSessionAndSubmitSuccess, createSessionFailure, createSessionSuccess, deleteChatSession, deleteChatSessionFailure, deleteChatSessionSuccess, deleteRoutine, deleteRoutineFailure, deleteRoutineSuccess, deleteSkill, deleteSkillFailure, deleteSkillSuccess, fetchChatHistory, fetchChatHistoryFailure, fetchChatHistorySuccess, fetchChatSessionsForUser, fetchChatSessionsForUserFailure, fetchChatSessionsForUserSuccess, fetchRoutineRuns, fetchRoutineRunsFailure, fetchRoutineRunsSuccess, fetchRoutines, fetchRoutinesFailure, fetchRoutinesSuccess, fetchSkillDetail, fetchSkillDetailFailure, fetchSkillDetailSuccess, fetchSkills, fetchSkillsFailure, fetchSkillsSuccess, fetchSkillVersionBody, fetchSkillVersionBodyFailure, fetchSkillVersionBodySuccess, fetchSkillVersions, fetchSkillVersionsFailure, fetchSkillVersionsSuccess, fetchSuggestedQuestions, fetchSuggestedQuestionsFailure, fetchSuggestedQuestionsSuccess, initializeNewSessionState, openRoutinesBrowser, openSkillsBrowser, runRoutine, runRoutineFailure, runRoutineSuccess, saveRoutine, saveRoutineFailure, saveRoutineSuccess, saveSkill, saveSkillFailure, saveSkillSuccess, setRoutineEnabled, setSession, setSkillVisibility, setSkillVisibilityFailure, setSkillVisibilitySuccess, stopSubmit, stopSubmitFailure, stopSubmitQuestion, stopSubmitQuestionFailure, stopSubmitQuestionSuccess, stopSubmitSuccess, submitFeedback, submitFeedbackFailure, submitFeedbackSuccess, submitQuestion, submitQuestionFailure, submitQuestionSuccess, updateAiCfoViewScrollPosition, updateCotCollapsedState, updateCurrentInput, updateResponseState, } = aiCfoView.actions;
|
|
1248
|
+
export const { acceptMasterTOS, acceptMasterTOSFailure, acceptMasterTOSSuccess, applyAiCfoSidePanelHostPageTransition, clearAiCfoSidePanelHostPageContext, clearCurrentSessionId, clearDeleteChatSessionStatus, clearLastContextMessage, clearSkillDetail, clearSkillMutation, closeRoutineRuns, closeRoutinesBrowser, closeSkillsBrowser, createSession, createSessionAndSubmit, createSessionAndSubmitFailure, createSessionAndSubmitSuccess, createSessionFailure, createSessionSuccess, deleteChatSession, deleteChatSessionFailure, deleteChatSessionSuccess, deleteRoutine, deleteRoutineFailure, deleteRoutineSuccess, deleteSkill, deleteSkillFailure, deleteSkillSuccess, fetchChatHistory, fetchChatHistoryFailure, fetchChatHistorySuccess, fetchChatSessionsForUser, fetchChatSessionsForUserFailure, fetchChatSessionsForUserSuccess, fetchRoutineRuns, fetchRoutineRunsFailure, fetchRoutineRunsSuccess, fetchRoutines, fetchRoutinesFailure, fetchRoutinesSuccess, fetchSkillDetail, fetchSkillDetailFailure, fetchSkillDetailSuccess, fetchSkills, fetchSkillsFailure, fetchSkillsSuccess, fetchSkillVersionBody, fetchSkillVersionBodyFailure, fetchSkillVersionBodySuccess, fetchSkillVersions, fetchSkillVersionsFailure, fetchSkillVersionsSuccess, fetchSuggestedQuestions, fetchSuggestedQuestionsFailure, fetchSuggestedQuestionsSuccess, initializeNewSessionState, openRoutinesBrowser, openSkillsBrowser, runRoutine, runRoutineFailure, runRoutineSuccess, saveRoutine, saveRoutineFailure, saveRoutineSuccess, saveSkill, saveSkillFailure, saveSkillSuccess, setRoutineEnabled, setSession, setSkillVisibility, setSkillVisibilityFailure, setSkillVisibilitySuccess, stopSubmit, stopSubmitFailure, stopSubmitQuestion, stopSubmitQuestionFailure, stopSubmitQuestionSuccess, stopSubmitSuccess, submitFeedback, submitFeedbackFailure, submitFeedbackSuccess, submitQuestion, submitQuestionFailure, submitQuestionSuccess, transcribeAudio, transcribeAudioFailure, transcribeAudioSuccess, updateAiCfoViewScrollPosition, updateCotCollapsedState, updateCurrentInput, updateResponseState, } = aiCfoView.actions;
|
|
1187
1249
|
export default aiCfoView.reducer;
|
|
@@ -133,3 +133,28 @@ export function getSkillMutation(state) {
|
|
|
133
133
|
export function getSkillsEnabled(state) {
|
|
134
134
|
return getSkills(state).skillsEnabled;
|
|
135
135
|
}
|
|
136
|
+
/** True while a finished voice recording is being transcribed server-side. */
|
|
137
|
+
/**
|
|
138
|
+
* A take belongs to the chat it was dictated into. A new chat has no session id yet on
|
|
139
|
+
* either side, which is a match rather than a mismatch.
|
|
140
|
+
*/
|
|
141
|
+
function isTranscribingCurrentSession(state) {
|
|
142
|
+
if (state.aiCfoViewState == null) {
|
|
143
|
+
return false;
|
|
144
|
+
}
|
|
145
|
+
return (state.aiCfoViewState.transcribingChatSessionId ===
|
|
146
|
+
state.aiCfoViewState.uiState.currentChatSessionId);
|
|
147
|
+
}
|
|
148
|
+
export function getIsTranscribing(state) {
|
|
149
|
+
return (state.aiCfoViewState?.transcriptionState?.fetchState === 'In-Progress' &&
|
|
150
|
+
isTranscribingCurrentSession(state));
|
|
151
|
+
}
|
|
152
|
+
/**
|
|
153
|
+
* Set when a transcription request failed. Without surfacing this the composer
|
|
154
|
+
* would just drop the "Transcribing…" label and sit there silently, leaving the
|
|
155
|
+
* user with no sign their recording went nowhere.
|
|
156
|
+
*/
|
|
157
|
+
export function getTranscriptionFailed(state) {
|
|
158
|
+
return (state.aiCfoViewState?.transcriptionState?.fetchState === 'Error' &&
|
|
159
|
+
isTranscribingCurrentSession(state));
|
|
160
|
+
}
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
import { of } from 'rxjs';
|
|
2
|
+
import { catchError, filter, finalize, map, switchMap, takeUntil, timeout, } from 'rxjs/operators';
|
|
3
|
+
import { createZeniAPIStatus, isSuccessResponse, } from '../../../responsePayload';
|
|
4
|
+
import { clearAll } from '../../../rootActions';
|
|
5
|
+
import { transcribeAudio, transcribeAudioFailure, transcribeAudioSuccess, } from '../aiCfoViewReducer';
|
|
6
|
+
const AUDIO_FIELD = 'audio';
|
|
7
|
+
const LANGUAGE_FIELD = 'language';
|
|
8
|
+
/** Extension only has to match the recorded format; the server reads the part's MIME type. */
|
|
9
|
+
const AUDIO_FILE_NAME = 'dictation.wav';
|
|
10
|
+
/**
|
|
11
|
+
* A hung request would otherwise pin `isTranscribing` true forever, and the composer
|
|
12
|
+
* gates both submit and the mic on it — leaving the user unable to send even typed
|
|
13
|
+
* text until something else resolved it.
|
|
14
|
+
*/
|
|
15
|
+
const TRANSCRIPTION_TIMEOUT_MS = 30000;
|
|
16
|
+
/**
|
|
17
|
+
* Voice dictation for the AI CFO composer. Dispatch `transcribeAudio(blob, language)` with a
|
|
18
|
+
* finished recording to POST it to the AI CFO micro-service `/1.0/transcriptions` endpoint;
|
|
19
|
+
* on success the transcript is appended to the composer input for the user to edit and send.
|
|
20
|
+
*
|
|
21
|
+
* `switchMap` (not `mergeMap`): a newer recording supersedes an older in-flight one, so a
|
|
22
|
+
* slow response can never append a stale transcript after a fresh one has already landed.
|
|
23
|
+
* The AbortController makes that cancellation real — `fetch` wrapped in a promise ignores
|
|
24
|
+
* an RxJS unsubscribe, so without the signal the superseded request would run to completion
|
|
25
|
+
* and still bill a transcription call whose result nothing wants.
|
|
26
|
+
*/
|
|
27
|
+
export const transcribeAudioEpic = (actions$, _state$, zeniAPI) => actions$.pipe(filter(transcribeAudio.match), switchMap((action) => {
|
|
28
|
+
const { audio, chatSessionId, language } = action.payload;
|
|
29
|
+
const abortController = new AbortController();
|
|
30
|
+
const formData = new FormData();
|
|
31
|
+
formData.append(AUDIO_FIELD, audio, AUDIO_FILE_NAME);
|
|
32
|
+
if (language != null && language !== '') {
|
|
33
|
+
formData.append(LANGUAGE_FIELD, language);
|
|
34
|
+
}
|
|
35
|
+
return zeniAPI
|
|
36
|
+
.postFormData(`${zeniAPI.apiEndPoints.aiCfoMicroServiceBaseUrl}/1.0/transcriptions`, formData, abortController.signal)
|
|
37
|
+
.pipe(timeout(TRANSCRIPTION_TIMEOUT_MS),
|
|
38
|
+
// A tenant switch clears the store; a transcript still in flight must not
|
|
39
|
+
// land in the next tenant's composer (both sessions can be `undefined`, so
|
|
40
|
+
// the reducer's session guard would let it through).
|
|
41
|
+
takeUntil(actions$.pipe(filter(clearAll.match))), map((response) => {
|
|
42
|
+
if (!isSuccessResponse(response)) {
|
|
43
|
+
return transcribeAudioFailure(response.status);
|
|
44
|
+
}
|
|
45
|
+
// An EMPTY transcript is a success (the mic caught silence) and the
|
|
46
|
+
// reducer leaves the composer alone. A MISSING one breaks the response
|
|
47
|
+
// contract, so it surfaces as an error rather than being coerced to
|
|
48
|
+
// silence the user cannot distinguish from a quiet room.
|
|
49
|
+
if (response.data?.transcript == null) {
|
|
50
|
+
return transcribeAudioFailure(createZeniAPIStatus('Transcription succeeded but the response carried no transcript', 'Unexpected Error'));
|
|
51
|
+
}
|
|
52
|
+
// The session id rides along so a transcript that lands after the user
|
|
53
|
+
// switched sessions is dropped rather than misfiled.
|
|
54
|
+
return transcribeAudioSuccess(response.data.transcript, chatSessionId);
|
|
55
|
+
}), finalize(() => abortController.abort()), catchError((error) => of(transcribeAudioFailure(createZeniAPIStatus(
|
|
56
|
+
// message (detailed) first, then the short title — per createZeniAPIStatus(message, title).
|
|
57
|
+
// JSON.stringify(Error) drops the (non-enumerable) message — extract it explicitly.
|
|
58
|
+
'Transcription REST API call errored out: ' +
|
|
59
|
+
(error instanceof Error ? error.message : String(error)), 'Unexpected Error')))));
|
|
60
|
+
}));
|
|
@@ -88,10 +88,6 @@ export const fetchDashboardEpic = (actions$, state$) => actions$.pipe(filter(fet
|
|
|
88
88
|
const revenueState = getRevenueReportFetchState(state.revenueState.uiState.selectedForecast?.id, state.revenueState);
|
|
89
89
|
const opExState = getOperatingExpensesReportFetchState(state.opExState.uiState.selectedForecast?.id, state.opExState);
|
|
90
90
|
const netBurnOrIncomeReportFetchState = getNetBurnOrIncomeReportFetchState(state.netBurnOrIncomeState.uiState.selectedForecast?.id, state.netBurnOrIncomeState);
|
|
91
|
-
if (state.tenantState.fetchState !== 'In-Progress' &&
|
|
92
|
-
!state.tenantState.hasValidState()) {
|
|
93
|
-
fetchActions.push(fetchAllTenants(userId));
|
|
94
|
-
}
|
|
95
91
|
if (state.cardBalanceState.fetchState !== 'In-Progress' &&
|
|
96
92
|
!state.cardBalanceState.hasValidState()) {
|
|
97
93
|
fetchActions.push(fetchCardBalance());
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { createSelector } from '@reduxjs/toolkit';
|
|
2
2
|
import { newBalancesFilter } from '../../commonStateTypes/coaBalance/coaBalancesFilter';
|
|
3
3
|
import { reduceFetchState } from '../../commonStateTypes/reduceFetchState';
|
|
4
|
-
import { getCurrentTenant
|
|
4
|
+
import { getCurrentTenant } from '../../entity/tenant/tenantSelector';
|
|
5
5
|
import { hasAdminLevelAccess, hasInvestorBankerLevelAccess, } from '../../entity/userRole/userRoleType';
|
|
6
6
|
import { getApAgingReport } from '../apAgingView/apAgingReport/apAgingSelector';
|
|
7
7
|
import { getArAgingReport } from '../arAgingView/arAgingReport/arAgingSelector';
|
|
@@ -34,8 +34,7 @@ const getCashInCashOutLast4Periods = (state) => getCashInCashOut(state.accountSt
|
|
|
34
34
|
const getNetBurnOrIncomeStoryCard = (state) => getNetBurnOrIncomeStoryCardReport(state);
|
|
35
35
|
const apAgingSelector = (state) => getApAgingReport(state);
|
|
36
36
|
const arAgingSelector = (state) => getArAgingReport(state);
|
|
37
|
-
const tenantSelector = createSelector(
|
|
38
|
-
tenantsOrdered,
|
|
37
|
+
const tenantSelector = createSelector(getCurrentTenant, (currentTenant) => ({
|
|
39
38
|
currentTenant,
|
|
40
39
|
}));
|
|
41
40
|
export const getDashboard = createSelector(tenantSelector, getCardBalance, getCashBalance, getOperatingExpensesForLast5Periods, getRevenueForLast4Periods, getTop6Expenses, getNetBurnOrIncomeForLast4Periods, getNetBurnOrIncomeStoryCard, getCashPositionLast5Periods, getCashInCashOutLast4Periods, getInsights, getCompanyPassportView, getTasksCardReport, getBillPayCardReport, getReimbursementCardReport, apAgingSelector, arAgingSelector, getRewardsPlanCard, getDashboardCardsOrdered, (state) => {
|
|
@@ -15,12 +15,8 @@ export const fetchFinanceStatementEpic = (actions$, state$) => actions$.pipe(fil
|
|
|
15
15
|
return of(fetchAllTenants(userId), fetchProfitAndLoss(), fetchBalanceSheet(), fetchCashFlow());
|
|
16
16
|
}
|
|
17
17
|
else {
|
|
18
|
-
const {
|
|
18
|
+
const { financeStatementState } = state;
|
|
19
19
|
const fetchActions = [];
|
|
20
|
-
if (tenantState.fetchState !== 'In-Progress' &&
|
|
21
|
-
!tenantState.hasValidState()) {
|
|
22
|
-
fetchActions.push(fetchAllTenants(userId));
|
|
23
|
-
}
|
|
24
20
|
const pandLFetchState = getPandLReportFetchState(undefined, state.profitAndLossState);
|
|
25
21
|
const balanceSheetFetchState = getBalanceSheetFetchState(state.balanceSheetState);
|
|
26
22
|
const cashFlowFetchState = getCashFlowReportFetchState(state.cashFlowState);
|
|
@@ -10,10 +10,6 @@ export const fetchPeoplePageEpic = (actions$, state$) => actions$.pipe(filter(fe
|
|
|
10
10
|
else {
|
|
11
11
|
const state = state$.value;
|
|
12
12
|
const fetchActions = [];
|
|
13
|
-
if (state.tenantState.fetchState !== 'In-Progress' &&
|
|
14
|
-
!state.tenantState.hasValidState()) {
|
|
15
|
-
fetchActions.push(fetchAllTenants(userId));
|
|
16
|
-
}
|
|
17
13
|
if (state.peopleState.fetchState != 'In-Progress' &&
|
|
18
14
|
!state.peopleState.hasValidState()) {
|
|
19
15
|
fetchActions.push(fetchPeople());
|
|
@@ -131,13 +131,29 @@ export const prepareCreateTransactionPayload = (state, localData) => {
|
|
|
131
131
|
};
|
|
132
132
|
}
|
|
133
133
|
const lines = localData.lines.map((line) => toLinePayload(state, line, transactionType));
|
|
134
|
+
const documentIdField = localData.documentNumber != null && localData.documentNumber !== ''
|
|
135
|
+
? { document_id: localData.documentNumber }
|
|
136
|
+
: {};
|
|
134
137
|
if (transactionType === 'journal_entry') {
|
|
138
|
+
return { ...base, ...documentIdField, lines };
|
|
139
|
+
}
|
|
140
|
+
// Both post to accounts payable, so they carry no header account or payment type.
|
|
141
|
+
if (transactionType === 'vendor_credit') {
|
|
142
|
+
return {
|
|
143
|
+
...base,
|
|
144
|
+
vendor_id: toQboVendorId(state, localData.vendorId),
|
|
145
|
+
...documentIdField,
|
|
146
|
+
lines,
|
|
147
|
+
};
|
|
148
|
+
}
|
|
149
|
+
if (transactionType === 'bill') {
|
|
135
150
|
return {
|
|
136
151
|
...base,
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
152
|
+
vendor_id: toQboVendorId(state, localData.vendorId),
|
|
153
|
+
...(localData.dueDate != null && {
|
|
154
|
+
due_date: localData.dueDate.format(DEFAULT_DATE_FORMAT),
|
|
140
155
|
}),
|
|
156
|
+
...documentIdField,
|
|
141
157
|
lines,
|
|
142
158
|
};
|
|
143
159
|
}
|
package/lib/index.d.ts
CHANGED
|
@@ -147,7 +147,7 @@ import { getTaskGroupById } from './entity/taskGroup/taskGroupSelector';
|
|
|
147
147
|
import { TaskGroupState } from './entity/taskGroup/taskGroupState';
|
|
148
148
|
import { TaskGroupTemplate } from './entity/taskGroupTemplate/taskGroupTemplateState';
|
|
149
149
|
import { DoSignInPayload, deleteConnection, doMagicLinkSignIn, doSignIn, doSignOut, fetchActiveTenant, fetchAllTenants, fetchExcludedResources as fetchExcludedResourcesForTenant, fetchExternalConnections as fetchExternalConnectionsForTenant, fetchSubscriptionSummaryForTenant, initEmailConnectOAuth, resendVerifyDeviceOTP, resetSignInState, saveAPIKeyConnection, saveConnectorCredentials, saveExternalConnection as saveExternalConnectionForTenant, saveOAuthConnection, sendEmailMagicLinkToUser, sendSessionHeartbeat, toExternalIntegrationType, updateCurrentTenant, updateSignInState, verifyDeviceWithTwoFA } from './entity/tenant/tenantReducer';
|
|
150
|
-
import { CurrentTenant, DEFAULT_RECEIPTS_EMAIL, TenantBaseView, TenantCoreDetailsView, TenantView, TenantsBaseOrdered,
|
|
150
|
+
import { CurrentTenant, DEFAULT_RECEIPTS_EMAIL, TenantBaseView, TenantCoreDetailsView, TenantView, TenantsBaseOrdered, getCurrentTenant, getCurrentTenantId, getIsAccountingClassesEnabled, getIsAccountingProjectsEnabled, getIsAutoReviewIncomeWithoutCustomerEnabled, getReceiptsEmail, getTenantBaseById, getTenantBaseViewForTenantId, getTenantBaseViewForTenantView, getTenantsBaseByCheckInDateSelector, getTenantsCoreDetailsByCheckInDateSelector, isCurrentTenantLoaded, isOtherProductsEnabledForTenant, isTenantBankingOnly, isTenantBookkeepingEnabled, isTenantCardsOnly, isTenantLoaded, isTenantUsingZeniCOA, isZeniDomainTenant, toTenantCoreDetailsView } from './entity/tenant/tenantSelector';
|
|
151
151
|
import { CapitalizableAccount, CapitalizableAccounts, CapitalizableClassificationType, CapitalizableMatchPattern, Connection, LoggedInUser, RoleResource, Tenant, TenantProductSettings } from './entity/tenant/tenantState';
|
|
152
152
|
import { toExternalSupportedTool } from './entity/tenant/tenantTypes';
|
|
153
153
|
import { ToastNotificationPayload } from './entity/toastNotification/toastNotificationPayload';
|
|
@@ -512,7 +512,7 @@ import { InternationalWireSelectorView, getInternationalWireView } from './view/
|
|
|
512
512
|
import { fetchInternationalVerificationForm, submitInternationalVerificationForm, updateVerificationFormLocalData } from './view/spendManagement/billPay/internationalWireVerification/internationalWireVerificationReducer';
|
|
513
513
|
import { InternationalWireVerificationView, getIntlWireVerificationView } from './view/spendManagement/billPay/internationalWireVerification/internationalWireVerificationSelector';
|
|
514
514
|
import { FieldValueType, InternationalWireVerificationState, VerificationFormField, VerificationFormLocalData } from './view/spendManagement/billPay/internationalWireVerification/internationalWireVerificationState';
|
|
515
|
-
import { fetchBillAttachment, fetchMagicLinkBankNameByRouting, fetchMagicLinkBankNameBySwift, fetchMagicLinkTenant, saveBankAccount, saveMagicLinkAddressInLocalStore, updateMagicLinkBankAccountLocalStoreData, updateMagicLinkInternationalBankAccountLocalStoreData } from './view/spendManagement/billPay/magicLinkView/magicLinkViewReducer';
|
|
515
|
+
import { fetchBillAttachment, fetchMagicLinkBankNameByRouting, fetchMagicLinkBankNameBySwift, fetchMagicLinkTenant, saveBankAccount, saveMagicLinkAddressInLocalStore, updateMagicLinkBankAccountLocalStoreData, updateMagicLinkInternationalBankAccountLocalStoreData, updateMagicLinkTenantFailure, updateMagicLinkTenantSuccess } from './view/spendManagement/billPay/magicLinkView/magicLinkViewReducer';
|
|
516
516
|
import { MagicLinkView, getMagicLinkBankAccountView, getMagicLinkCurrentAddressState, getMagicLinkView } from './view/spendManagement/billPay/magicLinkView/magicLinkViewSelector';
|
|
517
517
|
import { PreviousBillsSelectorView } from './view/spendManagement/billPay/previousBills/previousBillsSelector';
|
|
518
518
|
import { fetchWiseRedirectStatus } from './view/spendManagement/billPay/wiseRedirectView/wiseRedirectReducer';
|
|
@@ -754,7 +754,7 @@ export { TimeframeTick, TimeframeTickWithMetaData, toTimeframeTick, mapTimePerio
|
|
|
754
754
|
export { VendorSpendTrendFilterTabType, toVendorSpendTrendFilterTabsTypeStrict, } from './entity/vendorExpense/vendorSpendTrendFilterTabType';
|
|
755
755
|
export { getNumberOfPeriods };
|
|
756
756
|
export { SCHEDULE_DAYS_OF_MONTH, ScheduleDaysOfMonth, toScheduleDaysOfMonth, Day, Month, toMonth, toMonthStrict, Quarter, toQuarter, toQuarterStrict, AbsoluteDay, TimePeriod, };
|
|
757
|
-
export { CapitalizableAccount, CapitalizableAccounts, CapitalizableClassificationType, CapitalizableMatchPattern, Tenant, TenantView, LoggedInUser, TenantBaseView, CurrentTenant, TenantProductSettings, getTenantBaseById, getCurrentTenant, getIsAccountingClassesEnabled, getIsAccountingProjectsEnabled, getIsAutoReviewIncomeWithoutCustomerEnabled,
|
|
757
|
+
export { CapitalizableAccount, CapitalizableAccounts, CapitalizableClassificationType, CapitalizableMatchPattern, Tenant, TenantView, LoggedInUser, TenantBaseView, CurrentTenant, TenantProductSettings, getTenantBaseById, getCurrentTenant, getCurrentTenantId, isCurrentTenantLoaded, isTenantLoaded, getIsAccountingClassesEnabled, getIsAccountingProjectsEnabled, getIsAutoReviewIncomeWithoutCustomerEnabled, getTenantsBaseByCheckInDateSelector, getTenantsCoreDetailsByCheckInDateSelector, toTenantCoreDetailsView, getTenantBaseViewForTenantView, getTenantBaseViewForTenantId, isZeniDomainTenant, isTenantUsingZeniCOA, TenantsBaseOrdered, TenantCoreDetailsView, fetchActiveTenant, fetchAllTenants, updateCurrentTenant, clearAll, doMagicLinkSignIn, verifyDeviceWithTwoFA, resendVerifyDeviceOTP, sendEmailMagicLinkToUser, doSignIn, updateSignInState, DoSignInPayload, doSignOut, sendSessionHeartbeat, resetSignInState, RoleResource, Connection, fetchExcludedResourcesForTenant, fetchExternalConnectionsForTenant, saveExternalConnectionForTenant, deleteConnection, saveAPIKeyConnection, saveConnectorCredentials, saveOAuthConnection, initEmailConnectOAuth, toExternalIntegrationType, toExternalSupportedTool, fetchSubscriptionSummaryForTenant, isTenantBankingOnly, isTenantCardsOnly, isTenantBookkeepingEnabled, isOtherProductsEnabledForTenant, DEFAULT_RECEIPTS_EMAIL, getReceiptsEmail, };
|
|
758
758
|
export { Account, AccountType, AccountBase, StatementCloseDay, toAccountType, AccountReport, NestedAccountReport, AccountWithBalanceReport, AccountGroup, AccountGroupReportV2, AccountGroupType, toAccountGroupType, AccountGroupReport, getAccountGroupKey, AccountGroupKey, RecommendedAccountBase, AccountFilterOption, getAllAccounts, getTransactionFilterAccountOptions, };
|
|
759
759
|
export { Class, ClassBase, RecommendedClassBase, } from './entity/class/classState';
|
|
760
760
|
export { ClassFilterOption, getAllClasses, getClassById, getClassFilterOptions, } from './entity/class/classSelector';
|
|
@@ -952,7 +952,7 @@ export { isZeniClearingAccountReport, ZENI_CLEARING_ACCOUNT, isZeniClearingAccou
|
|
|
952
952
|
export { fetchOnboardingCustomerView, fetchOnboardingCustomerSetupView, getOnboardingPlaidLinkToken, establishOnboardingPlaidConnection, updateOnboardingCustomerViewAccountDetails, updateOnboardingCustomerViewCompleteStatus, updateOnboardingCustomerViewDashboardLoaded, updateOnboardingPaymentAccountLoginStatus, updateOnboardingPaymentAccountStatus, updateOnboardingCustomerView, updateOnboardingCustomerViewLocalStoreData, updateCurrentStep, updateCurrentSubStep, updateOnboardingCustomerViewUIState, saveOnboardingCompnayOfficerPhoneInLocalStore, saveOnboardingCustomerViewDataInLocalStore, clearOnboardingCustomerViewDataInLocalStore, applyKycDocumentAutofillForOnboarding, applyKybDocumentAutofillForOnboarding, clearKycKybAutofillForOnboarding, acknowledgeOnboardingAiActivationViewed, acknowledgeOnboardingAiFinanceTeam, fetchAiAgentsActivationStatus, aiAgentsActivationCountsUpdated, aiAgentsActivationPhaseChanged, getAiAgentsActivationCounts, getAiAgentsActivationPhases, getAiAgentsActivationSubview, getOnboardingCustomerView, getProductSettingsString, OnboardingCustomerView, OnboardingStep, OnboardingSubStep, ALL_ONBOARDING_STEPS, ALL_ONBOARDING_SUB_STEPS, toOnboardingStepType, toOnboardingSubStepType, OnboardingCustomerViewUIState, OnboardingCustomerViewLocalData, OnboardingBusinessProfileUpdate, AiAgentsActivationCounts, AiAgentsActivationPhase, AiAgentsActivationPhaseStatus, AiAgentsActivationSubview, };
|
|
953
953
|
export { saveAccountMapping, saveAccountMappingLocalData, clearAccountMappingLocalData, AccountMappingLocalData, AccountMappingView, VendorAccountMappingView, getAccountMappingView, initializeAccountMappingView, ExpenseCategory1099Filing, };
|
|
954
954
|
export { MagicLinkView, getMagicLinkView, getMagicLinkBankAccountView, getMagicLinkCurrentAddressState, };
|
|
955
|
-
export { fetchMagicLinkTenant, fetchBillAttachment, saveBankAccount, updateMagicLinkBankAccountLocalStoreData, updateMagicLinkInternationalBankAccountLocalStoreData, fetchMagicLinkBankNameByRouting, fetchMagicLinkBankNameBySwift, saveMagicLinkAddressInLocalStore, };
|
|
955
|
+
export { fetchMagicLinkTenant, updateMagicLinkTenantSuccess, updateMagicLinkTenantFailure, fetchBillAttachment, saveBankAccount, updateMagicLinkBankAccountLocalStoreData, updateMagicLinkInternationalBankAccountLocalStoreData, fetchMagicLinkBankNameByRouting, fetchMagicLinkBankNameBySwift, saveMagicLinkAddressInLocalStore, };
|
|
956
956
|
export { getWiseRedirect, fetchWiseRedirectStatus };
|
|
957
957
|
export { getInternationalWireView, InternationalWireSelectorView, DynamicFormField, CreateInternationalWireDetailsLocalData, SupportedAccountType, VendorCurrency, initializeInternationalWireLocalData, updateInternationalWireLocalStoreData, initializeDynamicForm, fetchInternationalWireDynamicForm, createPaymentInstrument, createPaymentInstrumentUpdateStatus, deletePaymentInstrument, clearInternationalWire, };
|
|
958
958
|
export { fetchUserRoleConfig, getUserRoleConfig };
|
|
@@ -1002,12 +1002,12 @@ export { AiAccountantCustomerViewState, AiAccountantSortKey, AiAccountantUIState
|
|
|
1002
1002
|
export { AiAccountantFilterCategoryField } from './view/companyView/types/cockpitTypes';
|
|
1003
1003
|
export { cancelAiAccountantOnboarding, fetchAiAccountantCustomers, fetchAiAccountantJobs, setSelectedTenantIdsForJobTrigger, triggerAiAccountantJob, updateAiAccountantUIState, } from './view/aiAccountantView/aiAccountantViewReducer';
|
|
1004
1004
|
export { AiAccountantCockpitView, getAiAccountantCockpitView, } from './view/aiAccountantView/aiAccountantViewSelector';
|
|
1005
|
-
export { acceptMasterTOS, applyAiCfoSidePanelHostPageTransition, clearAiCfoSidePanelHostPageContext, clearCurrentSessionId, clearDeleteChatSessionStatus, clearLastContextMessage, clearSkillDetail, clearSkillMutation, closeRoutineRuns, closeRoutinesBrowser, closeSkillsBrowser, createSession, createSessionAndSubmit, deleteChatSession, deleteRoutine, deleteSkill, fetchChatHistory, fetchChatSessionsForUser, fetchRoutineRuns, fetchRoutines, fetchSkillDetail, fetchSkills, fetchSkillsFailure, fetchSkillsSuccess, fetchSkillVersionBody, fetchSkillVersions, fetchSuggestedQuestions, fetchSuggestedQuestionsFailure, fetchSuggestedQuestionsSuccess, openRoutinesBrowser, openSkillsBrowser, runRoutine, saveRoutine, saveSkill, setRoutineEnabled, setSession, setSkillVisibility, stopSubmit, stopSubmitQuestion, submitFeedback, submitQuestion, updateAiCfoViewScrollPosition, updateCotCollapsedState, updateCurrentInput, updateResponseState, } from './view/aiCfoView/aiCfoViewReducer';
|
|
1005
|
+
export { acceptMasterTOS, applyAiCfoSidePanelHostPageTransition, clearAiCfoSidePanelHostPageContext, clearCurrentSessionId, clearDeleteChatSessionStatus, clearLastContextMessage, clearSkillDetail, clearSkillMutation, closeRoutineRuns, closeRoutinesBrowser, closeSkillsBrowser, createSession, createSessionAndSubmit, deleteChatSession, deleteRoutine, deleteSkill, fetchChatHistory, fetchChatSessionsForUser, fetchRoutineRuns, fetchRoutines, fetchSkillDetail, fetchSkills, fetchSkillsFailure, fetchSkillsSuccess, fetchSkillVersionBody, fetchSkillVersions, fetchSuggestedQuestions, fetchSuggestedQuestionsFailure, fetchSuggestedQuestionsSuccess, openRoutinesBrowser, openSkillsBrowser, runRoutine, saveRoutine, saveSkill, setRoutineEnabled, setSession, setSkillVisibility, stopSubmit, stopSubmitQuestion, submitFeedback, submitQuestion, transcribeAudio, updateAiCfoViewScrollPosition, updateCotCollapsedState, updateCurrentInput, updateResponseState, } from './view/aiCfoView/aiCfoViewReducer';
|
|
1006
1006
|
export { AiCfoViewState, AiCfoViewUIState, Routine, RoutineDraft, RoutineMutationState, RoutineRecurrence, RoutineRun, RoutineRunsState, RoutineRunStatus, RoutinesState, RoutineStatus, Skill, SkillDetail, SkillDetailState, SkillDraft, SkillMutationState, SkillsState, SkillVersion, SkillVersionBodyState, SkillVersionsState, SkillVisibility, SuggestedQuestionsForPageContext, } from './view/aiCfoView/aiCfoViewState';
|
|
1007
1007
|
export { FetchSuggestedQuestionsResponse, SuggestedQuestionsDataPayload, FetchSkillsResponse, SkillSummaryPayload, SkillListDataPayload, } from './view/aiCfoView/aiCfoViewPayload';
|
|
1008
|
-
export type { FeedbackType, SubmitFeedbackPayload, } from './view/aiCfoView/aiCfoViewPayload';
|
|
1008
|
+
export type { FeedbackType, SubmitFeedbackPayload, TranscribeAudioPayload, TranscriptionResponseData, } from './view/aiCfoView/aiCfoViewPayload';
|
|
1009
1009
|
export type { AiCfoSuggestedQuestionsPageContext } from './common/aiCfo/aiCfoSuggestedQuestionsPageContext';
|
|
1010
|
-
export { AiCfoViewSelector, canCreateRoutine, getAiCfoView, getRoutineMutation, getRoutineRuns, getRoutines, getRoutinesEnabled, getSkillDetail, getSkillMutation, getSkills, getSkillsEnabled, getSkillVersionBody, getSkillVersions, getSuggestedQuestionsForPageContext, } from './view/aiCfoView/aiCfoViewSelector';
|
|
1010
|
+
export { AiCfoViewSelector, canCreateRoutine, getAiCfoView, getIsTranscribing, getRoutineMutation, getRoutineRuns, getRoutines, getRoutinesEnabled, getSkillDetail, getSkillMutation, getSkills, getSkillsEnabled, getSkillVersionBody, getSkillVersions, getSuggestedQuestionsForPageContext, getTranscriptionFailed, } from './view/aiCfoView/aiCfoViewSelector';
|
|
1011
1011
|
export { MessagePayload, ChatSessionPayload, AiCfoAnswerPayload, } from './entity/aiCfo/aiCfoPayload';
|
|
1012
1012
|
export { setNewSession, setSessions, updateAiCfoAnswerCardPolicyWizardPlan, upsertAnswerPayload, upsertOrAddQuestionAnswerPayload, addQuestionPayload, clearSession, toAiCfoExports, toAiCfoVisualization, appendSyntheticAiCfoAnswer, updateSyntheticAiCfoAnswer, removeSyntheticAiCfoAnswer, } from './entity/aiCfo/aiCfoReducer';
|
|
1013
1013
|
export { AiCfoSelectorView, getAllQuestionAnswersForChatSession, getQuestionAnswerByIdForChatSession, getAllQuestionsForChatSession, getAiCfoSelectorView, getSyntheticAiCfoAnswersForChatSession, getSyntheticAiCfoAnswerByQuestionAnswerId, ChatSessionWithOrderedQuestionAnswers, } from './entity/aiCfo/aiCfoSelector';
|