@zeniai/client-epic-state 5.0.92 → 5.0.93-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.
Files changed (66) hide show
  1. package/lib/commonStateTypes/amount.d.ts +1 -0
  2. package/lib/commonStateTypes/amount.js +3 -1
  3. package/lib/commonStateTypes/workingDayHelper.d.ts +9 -0
  4. package/lib/commonStateTypes/workingDayHelper.js +28 -1
  5. package/lib/entity/tenant/clearAllEpic.d.ts +3 -1
  6. package/lib/entity/tenant/clearAllEpic.js +4 -0
  7. package/lib/epic.d.ts +7 -1
  8. package/lib/epic.js +7 -1
  9. package/lib/esm/commonStateTypes/amount.js +1 -0
  10. package/lib/esm/commonStateTypes/workingDayHelper.js +26 -0
  11. package/lib/esm/entity/tenant/clearAllEpic.js +4 -0
  12. package/lib/esm/epic.js +7 -1
  13. package/lib/esm/index.js +7 -2
  14. package/lib/esm/reducer.js +6 -0
  15. package/lib/esm/view/spendManagement/autotransferRules/autoTransferRulesSelector.js +22 -2
  16. package/lib/esm/view/spendManagement/cashManagement/autoSweepFlow/autoSweepFlowPayload.js +31 -0
  17. package/lib/esm/view/spendManagement/cashManagement/autoSweepFlow/autoSweepFlowReducer.js +69 -0
  18. package/lib/esm/view/spendManagement/cashManagement/autoSweepFlow/autoSweepFlowSelector.js +29 -0
  19. package/lib/esm/view/spendManagement/cashManagement/autoSweepFlow/autoSweepFlowState.js +47 -0
  20. package/lib/esm/view/spendManagement/cashManagement/autoSweepFlow/epics/fetchCashManagementSettingsEpic.js +34 -0
  21. package/lib/esm/view/spendManagement/cashManagement/autoSweepFlow/epics/saveAutoSweepSettingsEpic.js +32 -0
  22. package/lib/esm/view/spendManagement/cashManagement/cashManagementOverview/cashManagementOverviewPayload.js +54 -0
  23. package/lib/esm/view/spendManagement/cashManagement/cashManagementOverview/cashManagementOverviewReducer.js +92 -0
  24. package/lib/esm/view/spendManagement/cashManagement/cashManagementOverview/cashManagementOverviewSelector.js +225 -0
  25. package/lib/esm/view/spendManagement/cashManagement/cashManagementOverview/cashManagementOverviewState.js +10 -0
  26. package/lib/esm/view/spendManagement/cashManagement/cashManagementOverview/epics/fetchCashManagementBannerEpic.js +39 -0
  27. package/lib/esm/view/spendManagement/cashManagement/cashManagementOverview/epics/fetchCashManagementOverviewPageEpic.js +36 -0
  28. package/lib/esm/view/spendManagement/cashManagement/cashManagementOverview/epics/fetchCashManagementRecommendationEpic.js +27 -0
  29. package/lib/esm/view/spendManagement/cashManagement/cashManagementOverview/epics/fetchRecentTransferEpic.js +28 -0
  30. package/lib/index.d.ts +12 -3
  31. package/lib/index.js +34 -14
  32. package/lib/reducer.d.ts +6 -0
  33. package/lib/reducer.js +6 -0
  34. package/lib/view/spendManagement/autotransferRules/autoTransferRulesSelector.d.ts +8 -1
  35. package/lib/view/spendManagement/autotransferRules/autoTransferRulesSelector.js +21 -1
  36. package/lib/view/spendManagement/autotransferRules/autoTransferRulesState.d.ts +22 -0
  37. package/lib/view/spendManagement/cashManagement/autoSweepFlow/autoSweepFlowPayload.d.ts +48 -0
  38. package/lib/view/spendManagement/cashManagement/autoSweepFlow/autoSweepFlowPayload.js +36 -0
  39. package/lib/view/spendManagement/cashManagement/autoSweepFlow/autoSweepFlowReducer.d.ts +21 -0
  40. package/lib/view/spendManagement/cashManagement/autoSweepFlow/autoSweepFlowReducer.js +73 -0
  41. package/lib/view/spendManagement/cashManagement/autoSweepFlow/autoSweepFlowSelector.d.ts +40 -0
  42. package/lib/view/spendManagement/cashManagement/autoSweepFlow/autoSweepFlowSelector.js +33 -0
  43. package/lib/view/spendManagement/cashManagement/autoSweepFlow/autoSweepFlowState.d.ts +37 -0
  44. package/lib/view/spendManagement/cashManagement/autoSweepFlow/autoSweepFlowState.js +53 -0
  45. package/lib/view/spendManagement/cashManagement/autoSweepFlow/epics/fetchCashManagementSettingsEpic.d.ts +14 -0
  46. package/lib/view/spendManagement/cashManagement/autoSweepFlow/epics/fetchCashManagementSettingsEpic.js +38 -0
  47. package/lib/view/spendManagement/cashManagement/autoSweepFlow/epics/saveAutoSweepSettingsEpic.d.ts +7 -0
  48. package/lib/view/spendManagement/cashManagement/autoSweepFlow/epics/saveAutoSweepSettingsEpic.js +36 -0
  49. package/lib/view/spendManagement/cashManagement/cashManagementOverview/cashManagementOverviewPayload.d.ts +56 -0
  50. package/lib/view/spendManagement/cashManagement/cashManagementOverview/cashManagementOverviewPayload.js +60 -0
  51. package/lib/view/spendManagement/cashManagement/cashManagementOverview/cashManagementOverviewReducer.d.ts +22 -0
  52. package/lib/view/spendManagement/cashManagement/cashManagementOverview/cashManagementOverviewReducer.js +96 -0
  53. package/lib/view/spendManagement/cashManagement/cashManagementOverview/cashManagementOverviewSelector.d.ts +59 -0
  54. package/lib/view/spendManagement/cashManagement/cashManagementOverview/cashManagementOverviewSelector.js +230 -0
  55. package/lib/view/spendManagement/cashManagement/cashManagementOverview/cashManagementOverviewState.d.ts +122 -0
  56. package/lib/view/spendManagement/cashManagement/cashManagementOverview/cashManagementOverviewState.js +13 -0
  57. package/lib/view/spendManagement/cashManagement/cashManagementOverview/epics/fetchCashManagementBannerEpic.d.ts +23 -0
  58. package/lib/view/spendManagement/cashManagement/cashManagementOverview/epics/fetchCashManagementBannerEpic.js +43 -0
  59. package/lib/view/spendManagement/cashManagement/cashManagementOverview/epics/fetchCashManagementOverviewPageEpic.d.ts +9 -0
  60. package/lib/view/spendManagement/cashManagement/cashManagementOverview/epics/fetchCashManagementOverviewPageEpic.js +40 -0
  61. package/lib/view/spendManagement/cashManagement/cashManagementOverview/epics/fetchCashManagementRecommendationEpic.d.ts +7 -0
  62. package/lib/view/spendManagement/cashManagement/cashManagementOverview/epics/fetchCashManagementRecommendationEpic.js +31 -0
  63. package/lib/view/spendManagement/cashManagement/cashManagementOverview/epics/fetchRecentTransferEpic.d.ts +15 -0
  64. package/lib/view/spendManagement/cashManagement/cashManagementOverview/epics/fetchRecentTransferEpic.js +32 -0
  65. package/lib/zeniAPI.d.ts +1 -0
  66. package/package.json +1 -1
@@ -0,0 +1,23 @@
1
+ import { ActionsObservable, StateObservable } from 'redux-observable';
2
+ import { Observable } from 'rxjs';
3
+ import { RootState } from '../../../../../reducer';
4
+ import { fetchCashManagementSettings } from '../../autoSweepFlow/autoSweepFlowReducer';
5
+ import { fetchCashManagementBanner, fetchCashManagementRecommendation, fetchRecentTransfer } from '../cashManagementOverviewReducer';
6
+ export type ActionType = ReturnType<typeof fetchCashManagementBanner> | ReturnType<typeof fetchCashManagementRecommendation> | ReturnType<typeof fetchCashManagementSettings> | ReturnType<typeof fetchRecentTransfer>;
7
+ /**
8
+ * Single public entry point for the cash-management banner data. Fans out
9
+ * to the three independent API calls that back the banner — recommendation
10
+ * (`/cash-agent/recommend`), settings (`/cash-management/settings`), and
11
+ * recent transfer (`/cash-management/transfers`) — in parallel. Consumers
12
+ * (`<CashManagementBanner>`, the page-fetch epic, the standalone
13
+ * `useCashManagementBanner` hook) only dispatch this one action; this epic
14
+ * owns the orchestration so the host apps don't have to know which inner
15
+ * endpoints exist.
16
+ *
17
+ * `cacheOverride === true` forces all three inner fetches regardless of
18
+ * slice state — the page-fetch epic relies on this to actually refresh
19
+ * the banner on a hard reload. `cacheOverride === false` keeps per-slice
20
+ * dedup: an inner action is only dispatched when its slice isn't already
21
+ * `Completed` or `In-Progress`.
22
+ */
23
+ export declare const fetchCashManagementBannerEpic: (actions$: ActionsObservable<ActionType>, state$: StateObservable<RootState>) => Observable<ActionType>;
@@ -0,0 +1,43 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.fetchCashManagementBannerEpic = void 0;
4
+ const rxjs_1 = require("rxjs");
5
+ const operators_1 = require("rxjs/operators");
6
+ const autoSweepFlowReducer_1 = require("../../autoSweepFlow/autoSweepFlowReducer");
7
+ const cashManagementOverviewReducer_1 = require("../cashManagementOverviewReducer");
8
+ /**
9
+ * Single public entry point for the cash-management banner data. Fans out
10
+ * to the three independent API calls that back the banner — recommendation
11
+ * (`/cash-agent/recommend`), settings (`/cash-management/settings`), and
12
+ * recent transfer (`/cash-management/transfers`) — in parallel. Consumers
13
+ * (`<CashManagementBanner>`, the page-fetch epic, the standalone
14
+ * `useCashManagementBanner` hook) only dispatch this one action; this epic
15
+ * owns the orchestration so the host apps don't have to know which inner
16
+ * endpoints exist.
17
+ *
18
+ * `cacheOverride === true` forces all three inner fetches regardless of
19
+ * slice state — the page-fetch epic relies on this to actually refresh
20
+ * the banner on a hard reload. `cacheOverride === false` keeps per-slice
21
+ * dedup: an inner action is only dispatched when its slice isn't already
22
+ * `Completed` or `In-Progress`.
23
+ */
24
+ const fetchCashManagementBannerEpic = (actions$, state$) => actions$.pipe((0, operators_1.filter)(cashManagementOverviewReducer_1.fetchCashManagementBanner.match), (0, operators_1.mergeMap)((action) => {
25
+ const { cacheOverride } = action.payload;
26
+ const state = state$.value;
27
+ const actions = [];
28
+ if (cacheOverride === true ||
29
+ needsFetch(state.cashManagementOverviewState.banner.fetchState)) {
30
+ actions.push((0, cashManagementOverviewReducer_1.fetchCashManagementRecommendation)());
31
+ }
32
+ if (cacheOverride === true ||
33
+ needsFetch(state.autoSweepFlowState.fetchState)) {
34
+ actions.push((0, autoSweepFlowReducer_1.fetchCashManagementSettings)());
35
+ }
36
+ if (cacheOverride === true ||
37
+ needsFetch(state.cashManagementOverviewState.recentTransfer.fetchState)) {
38
+ actions.push((0, cashManagementOverviewReducer_1.fetchRecentTransfer)());
39
+ }
40
+ return (0, rxjs_1.from)(actions);
41
+ }));
42
+ exports.fetchCashManagementBannerEpic = fetchCashManagementBannerEpic;
43
+ const needsFetch = (fetchState) => fetchState !== 'Completed' && fetchState !== 'In-Progress';
@@ -0,0 +1,9 @@
1
+ import { ActionsObservable, StateObservable } from 'redux-observable';
2
+ import { Observable } from 'rxjs';
3
+ import { RootState } from '../../../../../reducer';
4
+ import { fetchAutoTransferRules } from '../../../autotransferRules/autoTransferRulesReducer';
5
+ import { fetchTreasuryOverviewDetail } from '../../../treasury/treasuryList/treasuryDetailReducer';
6
+ import { fetchZeniAccountList } from '../../../zeniAccounts/zeniAccountList/zeniAccountListReducer';
7
+ import { fetchCashManagementBanner, fetchCashManagementOverviewPage } from '../cashManagementOverviewReducer';
8
+ export type ActionType = ReturnType<typeof fetchCashManagementOverviewPage> | ReturnType<typeof fetchTreasuryOverviewDetail> | ReturnType<typeof fetchZeniAccountList> | ReturnType<typeof fetchCashManagementBanner> | ReturnType<typeof fetchAutoTransferRules>;
9
+ export declare const fetchCashManagementOverviewPageEpic: (actions$: ActionsObservable<ActionType>, state$: StateObservable<RootState>) => Observable<ActionType>;
@@ -0,0 +1,40 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.fetchCashManagementOverviewPageEpic = void 0;
4
+ const rxjs_1 = require("rxjs");
5
+ const operators_1 = require("rxjs/operators");
6
+ const autoTransferRulesReducer_1 = require("../../../autotransferRules/autoTransferRulesReducer");
7
+ const treasuryDetailReducer_1 = require("../../../treasury/treasuryList/treasuryDetailReducer");
8
+ const zeniAccountListReducer_1 = require("../../../zeniAccounts/zeniAccountList/zeniAccountListReducer");
9
+ const cashManagementOverviewReducer_1 = require("../cashManagementOverviewReducer");
10
+ const fetchCashManagementOverviewPageEpic = (actions$, state$) => actions$.pipe((0, operators_1.filter)(cashManagementOverviewReducer_1.fetchCashManagementOverviewPage.match), (0, operators_1.mergeMap)((action) => {
11
+ const { cacheOverride } = action.payload;
12
+ const state = state$.value;
13
+ const pageActions = [];
14
+ if (cacheOverride === true) {
15
+ // Banner orchestrator (fetchCashManagementBannerEpic) fans out to
16
+ // recommendation + settings + recent-transfer internally.
17
+ pageActions.push((0, treasuryDetailReducer_1.fetchTreasuryOverviewDetail)(true), (0, zeniAccountListReducer_1.fetchZeniAccountList)(true), (0, cashManagementOverviewReducer_1.fetchCashManagementBanner)(true), (0, autoTransferRulesReducer_1.fetchAutoTransferRules)(true));
18
+ }
19
+ else {
20
+ const treasuryDetailState = state.treasuryDetailState;
21
+ if (treasuryDetailState.hasValidState() === false &&
22
+ treasuryDetailState.fetchState !== 'In-Progress') {
23
+ pageActions.push((0, treasuryDetailReducer_1.fetchTreasuryOverviewDetail)(false));
24
+ }
25
+ // zeniAccountListState has no top-level fetchState to dedup against
26
+ // (only `newCheckingAccount.fetchState`), and the downstream epic is
27
+ // cheap. Always re-dispatch so the summary stays fresh on page entry.
28
+ pageActions.push((0, zeniAccountListReducer_1.fetchZeniAccountList)(false));
29
+ // Banner orchestrator handles its own per-slice dedup across
30
+ // recommendation, settings, and recent-transfer.
31
+ pageActions.push((0, cashManagementOverviewReducer_1.fetchCashManagementBanner)(false));
32
+ const autoTransferRules = state.autotransferRulesState;
33
+ if (autoTransferRules.fetchState !== 'Completed' &&
34
+ autoTransferRules.fetchState !== 'In-Progress') {
35
+ pageActions.push((0, autoTransferRulesReducer_1.fetchAutoTransferRules)(false));
36
+ }
37
+ }
38
+ return (0, rxjs_1.concat)((0, rxjs_1.from)(pageActions));
39
+ }));
40
+ exports.fetchCashManagementOverviewPageEpic = fetchCashManagementOverviewPageEpic;
@@ -0,0 +1,7 @@
1
+ import { ActionsObservable, StateObservable } from 'redux-observable';
2
+ import { Observable } from 'rxjs';
3
+ import { RootState } from '../../../../../reducer';
4
+ import { ZeniAPI } from '../../../../../zeniAPI';
5
+ import { fetchCashManagementRecommendation, updateCashManagementRecommendation, updateCashManagementRecommendationFetchStatus } from '../cashManagementOverviewReducer';
6
+ export type ActionType = ReturnType<typeof fetchCashManagementRecommendation> | ReturnType<typeof updateCashManagementRecommendation> | ReturnType<typeof updateCashManagementRecommendationFetchStatus>;
7
+ export declare const fetchCashManagementRecommendationEpic: (actions$: ActionsObservable<ActionType>, _state$: StateObservable<RootState>, zeniAPI: ZeniAPI) => Observable<ActionType>;
@@ -0,0 +1,31 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.fetchCashManagementRecommendationEpic = void 0;
4
+ const rxjs_1 = require("rxjs");
5
+ const operators_1 = require("rxjs/operators");
6
+ const responsePayload_1 = require("../../../../../responsePayload");
7
+ const cashManagementOverviewReducer_1 = require("../cashManagementOverviewReducer");
8
+ /**
9
+ * Hits the cash agent's recommend endpoint and stores the full response on
10
+ * the banner state — `inflows[]`, `outflows[]`, and `money_movements[]` all
11
+ * live there, so consumers can read them directly without an entity-bucket
12
+ * lookup.
13
+ */
14
+ const DEFAULT_RECOMMEND_HORIZON_DAYS = 30;
15
+ const fetchCashManagementRecommendationEpic = (actions$, _state$, zeniAPI) => actions$.pipe((0, operators_1.filter)(cashManagementOverviewReducer_1.fetchCashManagementRecommendation.match), (0, operators_1.switchMap)(() => {
16
+ const endpoint = `${zeniAPI.apiEndPoints.cashManagementAgentBaseUrl}/1.0/cash-agent/recommend?horizon_days=${DEFAULT_RECOMMEND_HORIZON_DAYS}`;
17
+ return zeniAPI.getJSON(endpoint).pipe((0, operators_1.mergeMap)((response) => {
18
+ if ((0, responsePayload_1.isSuccessResponse)(response) && response.data != null) {
19
+ return (0, rxjs_1.of)((0, cashManagementOverviewReducer_1.updateCashManagementRecommendation)({ data: response.data }));
20
+ }
21
+ return (0, rxjs_1.of)((0, cashManagementOverviewReducer_1.updateCashManagementRecommendationFetchStatus)({
22
+ fetchState: 'Error',
23
+ error: response.status,
24
+ }));
25
+ }), (0, operators_1.catchError)((error) => (0, rxjs_1.of)((0, cashManagementOverviewReducer_1.updateCashManagementRecommendationFetchStatus)({
26
+ fetchState: 'Error',
27
+ error: (0, responsePayload_1.createZeniAPIStatus)('Unexpected Error', 'Fetch cash management recommendation REST API call errored out: ' +
28
+ (error?.message ?? String(error))),
29
+ }))));
30
+ }));
31
+ exports.fetchCashManagementRecommendationEpic = fetchCashManagementRecommendationEpic;
@@ -0,0 +1,15 @@
1
+ import { ActionsObservable, StateObservable } from 'redux-observable';
2
+ import { Observable } from 'rxjs';
3
+ import { RootState } from '../../../../../reducer';
4
+ import { ZeniAPI } from '../../../../../zeniAPI';
5
+ import { fetchRecentTransfer, updateRecentTransfer, updateRecentTransferFetchStatus } from '../cashManagementOverviewReducer';
6
+ export type ActionType = ReturnType<typeof fetchRecentTransfer> | ReturnType<typeof updateRecentTransfer> | ReturnType<typeof updateRecentTransferFetchStatus>;
7
+ /**
8
+ * Hits `GET /cash-management/transfers` and stores the most recent actual
9
+ * cash-management transfer on `recentTransfer.data`. Used by the banner
10
+ * surface to render the "transfer scheduled / in-progress / complete"
11
+ * variant for existing users who have a settings id. The API returns the
12
+ * single most-relevant transfer under `transfer`; that field is optional
13
+ * (fresh users with no transfer history get `undefined`).
14
+ */
15
+ export declare const fetchRecentTransferEpic: (actions$: ActionsObservable<ActionType>, _state$: StateObservable<RootState>, zeniAPI: ZeniAPI) => Observable<ActionType>;
@@ -0,0 +1,32 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.fetchRecentTransferEpic = void 0;
4
+ const rxjs_1 = require("rxjs");
5
+ const operators_1 = require("rxjs/operators");
6
+ const responsePayload_1 = require("../../../../../responsePayload");
7
+ const cashManagementOverviewReducer_1 = require("../cashManagementOverviewReducer");
8
+ /**
9
+ * Hits `GET /cash-management/transfers` and stores the most recent actual
10
+ * cash-management transfer on `recentTransfer.data`. Used by the banner
11
+ * surface to render the "transfer scheduled / in-progress / complete"
12
+ * variant for existing users who have a settings id. The API returns the
13
+ * single most-relevant transfer under `transfer`; that field is optional
14
+ * (fresh users with no transfer history get `undefined`).
15
+ */
16
+ const fetchRecentTransferEpic = (actions$, _state$, zeniAPI) => actions$.pipe((0, operators_1.filter)(cashManagementOverviewReducer_1.fetchRecentTransfer.match), (0, operators_1.switchMap)(() => {
17
+ const endpoint = `${zeniAPI.apiEndPoints.cashManagementAgentBaseUrl}/1.0/cash-management/transfers`;
18
+ return zeniAPI.getJSON(endpoint).pipe((0, operators_1.mergeMap)((response) => {
19
+ if ((0, responsePayload_1.isSuccessResponse)(response) && response.data != null) {
20
+ return (0, rxjs_1.of)((0, cashManagementOverviewReducer_1.updateRecentTransfer)({ data: response.data.transfer }));
21
+ }
22
+ return (0, rxjs_1.of)((0, cashManagementOverviewReducer_1.updateRecentTransferFetchStatus)({
23
+ fetchState: 'Error',
24
+ error: response.status,
25
+ }));
26
+ }), (0, operators_1.catchError)((error) => (0, rxjs_1.of)((0, cashManagementOverviewReducer_1.updateRecentTransferFetchStatus)({
27
+ fetchState: 'Error',
28
+ error: (0, responsePayload_1.createZeniAPIStatus)('Unexpected Error', 'Fetch recent cash-management transfer REST API call errored out: ' +
29
+ (error?.message ?? String(error))),
30
+ }))));
31
+ }));
32
+ exports.fetchRecentTransferEpic = fetchRecentTransferEpic;
package/lib/zeniAPI.d.ts CHANGED
@@ -10,6 +10,7 @@ export interface RESTAPIEndpoints {
10
10
  readonly authMicroServiceBaseUrl: string;
11
11
  readonly bankingMicroServiceBaseUrl: string;
12
12
  readonly cardMicroServiceBaseUrl: string;
13
+ readonly cashManagementAgentBaseUrl: string;
13
14
  readonly communicationAgentMicroServiceBaseUrl: string;
14
15
  readonly documentAIMicroServiceBaseUrl: string;
15
16
  readonly fileMicroServiceBaseUrl: string;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@zeniai/client-epic-state",
3
- "version": "5.0.92",
3
+ "version": "5.0.93-betaAK1",
4
4
  "description": "Shared module between Web & Mobile containing required abstractions for state management, async network communication. ",
5
5
  "main": "lib/index.js",
6
6
  "module": "lib/esm/index.js",