@ministryofjustice/hmpps-digital-prison-reporting-frontend 6.0.2 → 6.0.3
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/cjs/dpr/components/my-reports/my-reports-list-item/utils.js +2 -2
- package/cjs/dpr/components/my-reports/my-reports-list-item/utils.js.map +1 -1
- package/cjs/dpr/setUpNunjucksFilters.js +1 -1
- package/cjs/dpr/setUpNunjucksFilters.js.map +1 -1
- package/cjs/dpr/utils/ReportStatus/getReportStatus.js +1 -1
- package/cjs/dpr/utils/ReportStatus/getReportStatus.js.map +1 -1
- package/dpr/components/my-reports/my-reports-list-item/utils.js +2 -2
- package/dpr/components/my-reports/my-reports-list-item/utils.js.map +1 -1
- package/dpr/setUpNunjucksFilters.js +1 -1
- package/dpr/setUpNunjucksFilters.js.map +1 -1
- package/dpr/utils/ReportStatus/getReportStatus.js +1 -1
- package/dpr/utils/ReportStatus/getReportStatus.js.map +1 -1
- package/package.json +1 -1
|
@@ -32,8 +32,8 @@ const buildMyReportListRow = (data, status, req, res, listType) => {
|
|
|
32
32
|
*/
|
|
33
33
|
const buildTitleCell = (data) => {
|
|
34
34
|
return {
|
|
35
|
-
productName: data.reportName,
|
|
36
|
-
reportName: data.name,
|
|
35
|
+
productName: data.reportName ?? 'unknown-product',
|
|
36
|
+
reportName: data.name ?? data.variantName ?? 'unknown-report',
|
|
37
37
|
reportType: data.type,
|
|
38
38
|
timestamp: buildTimestamp(data),
|
|
39
39
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"utils.js","sources":["../../../../../../../../../../../src/dpr/components/my-reports/my-reports-list-item/utils.ts"],"sourcesContent":["import { Request, Response } from 'express'\n\nimport { RequestStatus, StoredReportData } from 'src/dpr/types/UserReports'\nimport {\n DprMyReportActions,\n DprMyReportFilters,\n DprMyReportTitle,\n LinkAction,\n ListType,\n NameValuePair,\n RemoveAction,\n ViewAction,\n} from '../types'\nimport { apiTimestampToUiDateTime, todayAsUiDateTime } from '../../../utils/dateHelper'\nimport { getRouteLocals } from '../../../utils/localsHelper'\n\n/**\n * Builds the row\n *\n * @param {StoredReportData} data\n * @param {RequestStatus} status\n * @param {Request} req\n * @param {Response} res\n * @param {ListType} listType\n * @return {*}\n */\nexport const buildMyReportListRow = (\n data: StoredReportData,\n status: RequestStatus,\n req: Request,\n res: Response,\n listType: ListType,\n) => {\n return {\n title: buildTitleCell(data),\n filters: buildFiltersCell(data),\n status,\n actions: buildActionsCell(data, res, req, listType),\n meta: buildMeta(data, res, listType),\n }\n}\n\n/**\n * Builds the titls cell data\n *\n * @param {StoredReportData} data\n * @return {*} {DprMyReportTitle}\n */\nconst buildTitleCell = (data: StoredReportData): DprMyReportTitle => {\n return {\n productName: data.reportName,\n reportName: data.name,\n reportType: data.type,\n timestamp: buildTimestamp(data),\n }\n}\n\n/**\n * Builds the timestamp to display\n *\n * @param {StoredReportData} data\n * @return {*}\n */\nconst buildTimestamp = (data: StoredReportData) => {\n const { status, timestamp } = data\n\n const now = todayAsUiDateTime()\n switch (status) {\n case RequestStatus.FAILED: {\n const { failed } = timestamp\n const ts = failed ? apiTimestampToUiDateTime(failed) : now\n return `Failed at ${ts}`\n }\n\n case RequestStatus.ABORTED: {\n const { aborted } = timestamp\n const ts = aborted ? apiTimestampToUiDateTime(aborted) : now\n return `Aborted at ${ts}`\n }\n\n case RequestStatus.FINISHED: {\n const { completed } = timestamp\n const ts = completed ? apiTimestampToUiDateTime(completed) : now\n return `Ready at ${ts}`\n }\n\n case RequestStatus.EXPIRED: {\n const { expired } = timestamp\n const ts = expired ? apiTimestampToUiDateTime(expired) : now\n return `Expired at ${ts}`\n }\n\n case RequestStatus.READY: {\n const { lastViewed } = timestamp\n const ts = lastViewed ? apiTimestampToUiDateTime(lastViewed) : now\n return `Last viewed at ${ts}`\n }\n\n case RequestStatus.SUBMITTED:\n case RequestStatus.STARTED:\n case RequestStatus.PICKED: {\n const { requested } = timestamp\n const ts = requested ? apiTimestampToUiDateTime(requested) : now\n return `Requested at ${ts}`\n }\n\n default: {\n const { lastViewed } = timestamp\n const ts = lastViewed ? apiTimestampToUiDateTime(lastViewed) : now\n return `Last viewed at ${ts}`\n }\n }\n}\n\n/**\n * Builds the filters cell data\n *\n * @param {StoredReportData} data\n * @return {*} {DprMyReportFilters}\n */\nconst buildFiltersCell = (data: StoredReportData): DprMyReportFilters => {\n const prerequest = (data.query?.summary as NameValuePair[] | undefined) || []\n const interactive = (data.interactiveQuery?.summary as NameValuePair[] | undefined) || []\n\n return {\n ...(prerequest && { prerequest }),\n ...(interactive && { interactive }),\n }\n}\n\n/**\n * Builds the action cell data\n *\n * @param {StoredReportData} data\n * @param {Response} res\n * @return {*} {DprMyReportActions}\n */\nconst buildActionsCell = (\n data: StoredReportData,\n res: Response,\n req: Request,\n listType: ListType,\n): DprMyReportActions => {\n const { status, type, url } = data\n\n let retry: LinkAction | undefined\n let refresh: LinkAction | undefined\n let polling: LinkAction | undefined\n let view: ViewAction | undefined\n let remove: RemoveAction | undefined\n\n const pollingPageUrl = url?.polling?.fullUrl || ''\n const requestPageUrl = url?.request?.fullUrl || ''\n const reportPageUrl = url?.report?.fullUrl || ''\n\n switch (status) {\n case RequestStatus.FAILED:\n retry = { href: pollingPageUrl }\n remove = buildRemoveAction(data, res, req, listType)\n break\n\n case RequestStatus.EXPIRED:\n refresh = { href: requestPageUrl }\n remove = buildRemoveAction(data, res, req, listType)\n break\n\n case RequestStatus.ABORTED:\n retry = { href: requestPageUrl }\n remove = buildRemoveAction(data, res, req, listType)\n break\n\n case RequestStatus.READY:\n case RequestStatus.FINISHED:\n view = {\n href: reportPageUrl,\n reportType: type,\n }\n remove = buildRemoveAction(data, res, req, listType)\n break\n\n case RequestStatus.PICKED:\n case RequestStatus.SUBMITTED:\n case RequestStatus.STARTED:\n polling = { href: pollingPageUrl }\n break\n default:\n break\n }\n\n return {\n ...(retry && { retry }),\n ...(refresh && { refresh }),\n ...(remove && { remove }),\n ...(view && { view }),\n ...(polling && { polling }),\n }\n}\n\n/**\n * Builds the remove action\n *\n * @param {StoredReportData} data\n * @param {Response} res\n * @return {*}\n */\nconst buildRemoveAction = (data: StoredReportData, res: Response, req: Request, listType: ListType): RemoveAction => {\n const { reportId, id, executionId, tableId } = data\n const { requestedListPath, recentlyViewedListPath } = getRouteLocals(res)\n\n let action = ''\n\n if (listType === ListType.REQUESTED) {\n // ASYNC report - only executionId is needed\n action = `${requestedListPath}/remove-item/${executionId}`\n } else if (tableId && executionId) {\n // ASYNC report - tableId and executionId needed\n action = `${recentlyViewedListPath}/remove-item/${executionId}/table-id/${tableId}`\n } else {\n // SYNC report - reportId and Id needed\n action = `${recentlyViewedListPath}/remove-item/report-id/${reportId}/id/${id}`\n }\n\n return {\n action,\n csrfToken: res.locals.csrfToken,\n returnTo: req.originalUrl,\n }\n}\n\n/**\n * Builds the meta data needed by the polling class\n *\n * @param {StoredReportData} data\n * @param {Response} res\n * @return {*}\n */\nconst buildMeta = (data: StoredReportData, res: Response, listType: ListType) => {\n const { userReportsList } = getRouteLocals(res)\n return {\n id: data.id,\n reportId: data.reportId,\n tableId: data.tableId,\n executionId: data.executionId,\n path: userReportsList,\n listType,\n }\n}\n"],"names":["todayAsUiDateTime","RequestStatus","apiTimestampToUiDateTime","getRouteLocals","ListType"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"utils.js","sources":["../../../../../../../../../../../src/dpr/components/my-reports/my-reports-list-item/utils.ts"],"sourcesContent":["import { Request, Response } from 'express'\n\nimport { RequestStatus, StoredReportData } from 'src/dpr/types/UserReports'\nimport {\n DprMyReportActions,\n DprMyReportFilters,\n DprMyReportTitle,\n LinkAction,\n ListType,\n NameValuePair,\n RemoveAction,\n ViewAction,\n} from '../types'\nimport { apiTimestampToUiDateTime, todayAsUiDateTime } from '../../../utils/dateHelper'\nimport { getRouteLocals } from '../../../utils/localsHelper'\n\n/**\n * Builds the row\n *\n * @param {StoredReportData} data\n * @param {RequestStatus} status\n * @param {Request} req\n * @param {Response} res\n * @param {ListType} listType\n * @return {*}\n */\nexport const buildMyReportListRow = (\n data: StoredReportData,\n status: RequestStatus,\n req: Request,\n res: Response,\n listType: ListType,\n) => {\n return {\n title: buildTitleCell(data),\n filters: buildFiltersCell(data),\n status,\n actions: buildActionsCell(data, res, req, listType),\n meta: buildMeta(data, res, listType),\n }\n}\n\n/**\n * Builds the titls cell data\n *\n * @param {StoredReportData} data\n * @return {*} {DprMyReportTitle}\n */\nconst buildTitleCell = (data: StoredReportData): DprMyReportTitle => {\n return {\n productName: data.reportName ?? 'unknown-product',\n reportName: data.name ?? data.variantName ?? 'unknown-report',\n reportType: data.type,\n timestamp: buildTimestamp(data),\n }\n}\n\n/**\n * Builds the timestamp to display\n *\n * @param {StoredReportData} data\n * @return {*}\n */\nconst buildTimestamp = (data: StoredReportData) => {\n const { status, timestamp } = data\n\n const now = todayAsUiDateTime()\n switch (status) {\n case RequestStatus.FAILED: {\n const { failed } = timestamp\n const ts = failed ? apiTimestampToUiDateTime(failed) : now\n return `Failed at ${ts}`\n }\n\n case RequestStatus.ABORTED: {\n const { aborted } = timestamp\n const ts = aborted ? apiTimestampToUiDateTime(aborted) : now\n return `Aborted at ${ts}`\n }\n\n case RequestStatus.FINISHED: {\n const { completed } = timestamp\n const ts = completed ? apiTimestampToUiDateTime(completed) : now\n return `Ready at ${ts}`\n }\n\n case RequestStatus.EXPIRED: {\n const { expired } = timestamp\n const ts = expired ? apiTimestampToUiDateTime(expired) : now\n return `Expired at ${ts}`\n }\n\n case RequestStatus.READY: {\n const { lastViewed } = timestamp\n const ts = lastViewed ? apiTimestampToUiDateTime(lastViewed) : now\n return `Last viewed at ${ts}`\n }\n\n case RequestStatus.SUBMITTED:\n case RequestStatus.STARTED:\n case RequestStatus.PICKED: {\n const { requested } = timestamp\n const ts = requested ? apiTimestampToUiDateTime(requested) : now\n return `Requested at ${ts}`\n }\n\n default: {\n const { lastViewed } = timestamp\n const ts = lastViewed ? apiTimestampToUiDateTime(lastViewed) : now\n return `Last viewed at ${ts}`\n }\n }\n}\n\n/**\n * Builds the filters cell data\n *\n * @param {StoredReportData} data\n * @return {*} {DprMyReportFilters}\n */\nconst buildFiltersCell = (data: StoredReportData): DprMyReportFilters => {\n const prerequest = (data.query?.summary as NameValuePair[] | undefined) || []\n const interactive = (data.interactiveQuery?.summary as NameValuePair[] | undefined) || []\n\n return {\n ...(prerequest && { prerequest }),\n ...(interactive && { interactive }),\n }\n}\n\n/**\n * Builds the action cell data\n *\n * @param {StoredReportData} data\n * @param {Response} res\n * @return {*} {DprMyReportActions}\n */\nconst buildActionsCell = (\n data: StoredReportData,\n res: Response,\n req: Request,\n listType: ListType,\n): DprMyReportActions => {\n const { status, type, url } = data\n\n let retry: LinkAction | undefined\n let refresh: LinkAction | undefined\n let polling: LinkAction | undefined\n let view: ViewAction | undefined\n let remove: RemoveAction | undefined\n\n const pollingPageUrl = url?.polling?.fullUrl || ''\n const requestPageUrl = url?.request?.fullUrl || ''\n const reportPageUrl = url?.report?.fullUrl || ''\n\n switch (status) {\n case RequestStatus.FAILED:\n retry = { href: pollingPageUrl }\n remove = buildRemoveAction(data, res, req, listType)\n break\n\n case RequestStatus.EXPIRED:\n refresh = { href: requestPageUrl }\n remove = buildRemoveAction(data, res, req, listType)\n break\n\n case RequestStatus.ABORTED:\n retry = { href: requestPageUrl }\n remove = buildRemoveAction(data, res, req, listType)\n break\n\n case RequestStatus.READY:\n case RequestStatus.FINISHED:\n view = {\n href: reportPageUrl,\n reportType: type,\n }\n remove = buildRemoveAction(data, res, req, listType)\n break\n\n case RequestStatus.PICKED:\n case RequestStatus.SUBMITTED:\n case RequestStatus.STARTED:\n polling = { href: pollingPageUrl }\n break\n default:\n break\n }\n\n return {\n ...(retry && { retry }),\n ...(refresh && { refresh }),\n ...(remove && { remove }),\n ...(view && { view }),\n ...(polling && { polling }),\n }\n}\n\n/**\n * Builds the remove action\n *\n * @param {StoredReportData} data\n * @param {Response} res\n * @return {*}\n */\nconst buildRemoveAction = (data: StoredReportData, res: Response, req: Request, listType: ListType): RemoveAction => {\n const { reportId, id, executionId, tableId } = data\n const { requestedListPath, recentlyViewedListPath } = getRouteLocals(res)\n\n let action = ''\n\n if (listType === ListType.REQUESTED) {\n // ASYNC report - only executionId is needed\n action = `${requestedListPath}/remove-item/${executionId}`\n } else if (tableId && executionId) {\n // ASYNC report - tableId and executionId needed\n action = `${recentlyViewedListPath}/remove-item/${executionId}/table-id/${tableId}`\n } else {\n // SYNC report - reportId and Id needed\n action = `${recentlyViewedListPath}/remove-item/report-id/${reportId}/id/${id}`\n }\n\n return {\n action,\n csrfToken: res.locals.csrfToken,\n returnTo: req.originalUrl,\n }\n}\n\n/**\n * Builds the meta data needed by the polling class\n *\n * @param {StoredReportData} data\n * @param {Response} res\n * @return {*}\n */\nconst buildMeta = (data: StoredReportData, res: Response, listType: ListType) => {\n const { userReportsList } = getRouteLocals(res)\n return {\n id: data.id,\n reportId: data.reportId,\n tableId: data.tableId,\n executionId: data.executionId,\n path: userReportsList,\n listType,\n }\n}\n"],"names":["todayAsUiDateTime","RequestStatus","apiTimestampToUiDateTime","getRouteLocals","ListType"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"setUpNunjucksFilters.js","sources":["../../../../../../../../src/dpr/setUpNunjucksFilters.ts"],"sourcesContent":["import nunjucks from 'nunjucks'\nimport nunjucksDate from 'nunjucks-date'\nimport { FilterOption } from './components/_filters/filter-input/types'\n\nexport const setUpNunjucksFilters = (env: nunjucks.Environment) => {\n env.addFilter('addRequiredAttributeToAll', addRequiredAttributeToAll)\n env.addFilter('json', stringifyJson)\n env.addFilter('capitaliseSentence', capitaliseSentence)\n // Namespace our own filters\n env.addFilter('dpr.findError', findError)\n env.addFilter('dpr.spacesToDash', spacesToDash)\n nunjucksDate.setDefaultFormat('DD/MM/YYYY')\n nunjucksDate.install(env, 'dprDate')\n}\n\nconst findError = (errs: { text: string; href: string }[] | undefined, errToFind: string) => {\n const error = errs?.find((err) => err.href.slice(1) === errToFind)?.text\n return error ? { text: error } : null\n}\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nconst stringifyJson = (jsonObj: any) => {\n return JSON.stringify(jsonObj, null, 2)\n}\n\nconst capitaliseSentence = (text: string) => {\n return text.charAt(0).toUpperCase() + text.substring(1).toLowerCase()\n}\n\nconst addRequiredAttributeToAll = (items: Array<FilterOption>) => {\n return items.map((i) => ({\n ...i,\n attributes: {\n required: true,\n },\n }))\n}\n\nconst spacesToDash = (text: string) => {\n return text
|
|
1
|
+
{"version":3,"file":"setUpNunjucksFilters.js","sources":["../../../../../../../../src/dpr/setUpNunjucksFilters.ts"],"sourcesContent":["import nunjucks from 'nunjucks'\nimport nunjucksDate from 'nunjucks-date'\nimport { FilterOption } from './components/_filters/filter-input/types'\n\nexport const setUpNunjucksFilters = (env: nunjucks.Environment) => {\n env.addFilter('addRequiredAttributeToAll', addRequiredAttributeToAll)\n env.addFilter('json', stringifyJson)\n env.addFilter('capitaliseSentence', capitaliseSentence)\n // Namespace our own filters\n env.addFilter('dpr.findError', findError)\n env.addFilter('dpr.spacesToDash', spacesToDash)\n nunjucksDate.setDefaultFormat('DD/MM/YYYY')\n nunjucksDate.install(env, 'dprDate')\n}\n\nconst findError = (errs: { text: string; href: string }[] | undefined, errToFind: string) => {\n const error = errs?.find((err) => err.href.slice(1) === errToFind)?.text\n return error ? { text: error } : null\n}\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nconst stringifyJson = (jsonObj: any) => {\n return JSON.stringify(jsonObj, null, 2)\n}\n\nconst capitaliseSentence = (text: string) => {\n return text.charAt(0).toUpperCase() + text.substring(1).toLowerCase()\n}\n\nconst addRequiredAttributeToAll = (items: Array<FilterOption>) => {\n return items.map((i) => ({\n ...i,\n attributes: {\n required: true,\n },\n }))\n}\n\nconst spacesToDash = (text: string) => {\n return text?.replace(/ /g, '-') ?? ''\n}\n\nexport default setUpNunjucksFilters\n"],"names":[],"mappings":";;;;;;AAIO,MAAM,oBAAoB,GAAG,CAAC,GAAyB,KAAI;AAChE,IAAA,GAAG,CAAC,SAAS,CAAC,2BAA2B,EAAE,yBAAyB,CAAC;AACrE,IAAA,GAAG,CAAC,SAAS,CAAC,MAAM,EAAE,aAAa,CAAC;AACpC,IAAA,GAAG,CAAC,SAAS,CAAC,oBAAoB,EAAE,kBAAkB,CAAC;;AAEvD,IAAA,GAAG,CAAC,SAAS,CAAC,eAAe,EAAE,SAAS,CAAC;AACzC,IAAA,GAAG,CAAC,SAAS,CAAC,kBAAkB,EAAE,YAAY,CAAC;AAC/C,IAAA,YAAY,CAAC,gBAAgB,CAAC,YAAY,CAAC;AAC3C,IAAA,YAAY,CAAC,OAAO,CAAC,GAAG,EAAE,SAAS,CAAC;AACtC;AAEA,MAAM,SAAS,GAAG,CAAC,IAAkD,EAAE,SAAiB,KAAI;IAC1F,MAAM,KAAK,GAAG,IAAI,EAAE,IAAI,CAAC,CAAC,GAAG,KAAK,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,SAAS,CAAC,EAAE,IAAI;AACxE,IAAA,OAAO,KAAK,GAAG,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,IAAI;AACvC,CAAC;AAED;AACA,MAAM,aAAa,GAAG,CAAC,OAAY,KAAI;IACrC,OAAO,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC;AACzC,CAAC;AAED,MAAM,kBAAkB,GAAG,CAAC,IAAY,KAAI;AAC1C,IAAA,OAAO,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE;AACvE,CAAC;AAED,MAAM,yBAAyB,GAAG,CAAC,KAA0B,KAAI;IAC/D,OAAO,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM;AACvB,QAAA,GAAG,CAAC;AACJ,QAAA,UAAU,EAAE;AACV,YAAA,QAAQ,EAAE,IAAI;AACf,SAAA;AACF,KAAA,CAAC,CAAC;AACL,CAAC;AAED,MAAM,YAAY,GAAG,CAAC,IAAY,KAAI;IACpC,OAAO,IAAI,EAAE,OAAO,CAAC,IAAI,EAAE,GAAG,CAAC,IAAI,EAAE;AACvC,CAAC;;;;;"}
|
|
@@ -29,7 +29,7 @@ var reportStoreHelper = require('../reportStoreHelper.js');
|
|
|
29
29
|
async function getStatusByType({ reportType, services, token, reportId, id, executionId, definitionsPath, tableId, }) {
|
|
30
30
|
try {
|
|
31
31
|
const response = reportType === UserReports.ReportType.DASHBOARD
|
|
32
|
-
? await services.dashboardService.getAsyncStatus(token, reportId, id, executionId,
|
|
32
|
+
? await services.dashboardService.getAsyncStatus(token, reportId, id, executionId, tableId, definitionsPath)
|
|
33
33
|
: await services.reportingService.getAsyncReportStatus(token, reportId, id, executionId, definitionsPath, tableId);
|
|
34
34
|
const data = response;
|
|
35
35
|
if (!data.status) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"getReportStatus.js","sources":["../../../../../../../../../../src/dpr/utils/ReportStatus/getReportStatus.ts"],"sourcesContent":["import {\n RequestStatus,\n UpstreamSignal,\n StatusResolution,\n FailureInfo,\n EvaluateAndUpdateReportStatusOptions,\n GetReportStatusOptions,\n TERMINAL_STATUSES,\n FIFTEEN_MINUTES_MS,\n ExpireFinishedReportsOptions,\n} from './types'\nimport ErrorHandler, { DprErrorMessage } from '../ErrorHandler/ErrorHandler'\nimport { Services } from '../../types/Services'\nimport { StoredReportData, ReportType, RequestedReport } from '../../types/UserReports'\nimport { getValues } from '../localsHelper'\nimport { getAllMyReports } from '../reportStoreHelper'\n\n/**\n * ------------------------------------------------------------\n * API\n * ------------------------------------------------------------\n */\n\n/**\n * Get the status by report type\n *\n * @param {GetReportStatusOptions} {\n * reportType,\n * services,\n * token,\n * reportId,\n * id,\n * executionId,\n * definitionsPath,\n * tableId,\n * }\n * @return {*} {Promise<UpstreamSignal>}\n */\nasync function getStatusByType({\n reportType,\n services,\n token,\n reportId,\n id,\n executionId,\n definitionsPath,\n tableId,\n}: GetReportStatusOptions): Promise<UpstreamSignal> {\n try {\n const response =\n reportType === ReportType.DASHBOARD\n ? await services.dashboardService.getAsyncStatus(token, reportId, id, executionId, definitionsPath, tableId)\n : await services.reportingService.getAsyncReportStatus(\n token,\n reportId,\n id,\n executionId,\n definitionsPath,\n tableId,\n )\n\n const data = response as {\n status?: string\n error: string\n errorCategory?: number\n stateChangeReason?: string\n }\n\n if (!data.status) {\n return { kind: 'EMPTY' }\n }\n\n if (data.status === RequestStatus.FAILED) {\n const formatted = failedPayloadToDprError(data)\n return {\n kind: 'ERROR',\n failure: toFailureInfo(formatted),\n }\n }\n\n return {\n kind: 'STATUS',\n status: data.status as RequestStatus,\n }\n } catch (error) {\n const formatted = new ErrorHandler(error).formatError()\n\n return {\n kind: 'ERROR',\n failure: toFailureInfo(formatted),\n }\n }\n}\n\n/**\n * ------------------------------------------------------------\n * ORCHESTRATION\n * ------------------------------------------------------------\n */\n\n/**\n * Gets the status for a reports and its child reports\n *\n * @param {{\n * stored: StoredReportData\n * services: Services\n * token: string\n * }} {\n * stored,\n * services,\n * token,\n * }\n * @return {*} {Promise<{\n * parentSignal: UpstreamSignal\n * childSignals: UpstreamSignal[]\n * }>}\n */\nasync function getStatus({\n stored,\n services,\n token,\n}: {\n stored: StoredReportData\n services: Services\n token: string\n}): Promise<{\n parentSignal: UpstreamSignal\n childSignals: UpstreamSignal[]\n}> {\n const { reportId, id, tableId, executionId, dataProductDefinitionsPath } = stored\n const definitionsPath = dataProductDefinitionsPath || ''\n\n if (!executionId || !tableId) {\n throw new Error('Stored report missing executionId or tableId')\n }\n\n const parentSignal = await getStatusByType({\n reportType: stored.type,\n services,\n token,\n reportId,\n id,\n executionId,\n definitionsPath,\n tableId,\n })\n\n const childSignals = stored.childExecutionData\n ? await Promise.all(\n stored.childExecutionData.map((child) => {\n const { tableId: childTableId, executionId: childExecutionId } = child\n\n if (!childExecutionId || !childTableId) {\n throw new Error('Stored child report missing executionId or tableId')\n }\n\n return getStatusByType({\n services,\n reportType: ReportType.REPORT,\n token,\n reportId,\n id,\n executionId: childExecutionId,\n definitionsPath,\n tableId: childTableId,\n })\n }),\n )\n : []\n\n return {\n parentSignal,\n childSignals,\n }\n}\n\n/**\n * Converts a normalized internal error (`DprErrorMessage`) into a `FailureInfo`\n * object that is safe and consistent to store and return to clients.\n *\n * @param {DprErrorMessage} error\n * @return {*} {FailureInfo}\n */\nfunction toFailureInfo(error: DprErrorMessage): FailureInfo {\n const normalize = (msg?: string | string[]): string =>\n Array.isArray(msg) ? msg.join('. ') : msg || 'An unexpected error occurred'\n\n return {\n userMessage: normalize(error.userMessage),\n ...(error.developerMessage && {\n developerMessage: normalize(error.developerMessage),\n }),\n ...(error.moreInfo && { moreInfo: error.moreInfo }),\n ...(typeof error.status === 'number' && {\n errorCode: error.status,\n }),\n }\n}\n\n/**\n * Adapts a successful (200 OK) response that represents a semantic\n * failure (`status: FAILED`) into the standard `DprErrorMessage` shape.\n *\n * @param {*} raw\n * @return {*} {DprErrorMessage}\n */\nfunction failedPayloadToDprError(raw: {\n status?: string\n error: string\n errorCategory?: number\n stateChangeReason?: string\n}): DprErrorMessage {\n const { error, stateChangeReason } = raw\n\n return {\n userMessage: 'An unexpected error occurred',\n developerMessage: error,\n ...(stateChangeReason && { moreInfo: stateChangeReason }),\n }\n}\n\n/**\n * ------------------------------------------------------------\n * RESOLVER\n * ------------------------------------------------------------\n */\n\nfunction isTerminal(status?: RequestStatus): boolean {\n return status ? TERMINAL_STATUSES.has(status) : false\n}\n\n/**\n * Decides the authoritative status of a report.\n *\n * @export\n * @param {{\n * stored: StoredReportData\n * parentSignal: UpstreamSignal\n * childSignals: UpstreamSignal[]\n * now: number\n * }} {\n * stored,\n * parentSignal,\n * childSignals,\n * now,\n * }\n * @return {*} {StatusResolution}\n */\nfunction resolveReportStatus({\n stored,\n parentSignal,\n childSignals,\n now,\n}: {\n stored: StoredReportData\n parentSignal: UpstreamSignal\n childSignals: UpstreamSignal[]\n now: number\n}): StatusResolution {\n const currentStatus = stored.status ?? RequestStatus.SUBMITTED\n\n /**\n * ------------------------------------------------------------\n * TERMINAL GUARD\n * ------------------------------------------------------------\n * Once a report is terminal, it never changes again.\n */\n if (isTerminal(currentStatus)) {\n return { type: 'NO_CHANGE' }\n }\n\n /**\n * ------------------------------------------------------------\n * TIMEOUT\n * ------------------------------------------------------------\n * If polling exceeds 15 minutes, we decide it has failed.\n */\n const requestedAt = stored.timestamp?.requested\n if (requestedAt) {\n const requestedTime = new Date(requestedAt).getTime()\n if (now - requestedTime >= FIFTEEN_MINUTES_MS) {\n return {\n type: 'UPDATE',\n newStatus: RequestStatus.FAILED,\n failureInfo: {\n userMessage: 'Report generation timed out',\n developerMessage: 'Polling exceeded 15 minutes',\n },\n }\n }\n }\n\n /**\n * ------------------------------------------------------------\n * API ERROR\n * ------------------------------------------------------------\n * The API failed.\n */\n if (parentSignal.kind === 'ERROR' || childSignals.some((signal) => signal.kind === 'ERROR')) {\n const failure =\n parentSignal.kind === 'ERROR' ? parentSignal.failure : childSignals.find((s) => s.kind === 'ERROR')!.failure\n\n return {\n type: 'UPDATE',\n newStatus: RequestStatus.FAILED,\n failureInfo: failure,\n }\n }\n\n /**\n * ------------------------------------------------------------\n * CHILD AGGREGATION\n * ------------------------------------------------------------\n * Execution identity comes from stored.childExecutionData,\n * execution truth comes from childSignals.\n */\n const childStatuses = childSignals.filter((s) => s.kind === 'STATUS').map((s) => s.status)\n\n if (childStatuses.some((status) => status === RequestStatus.FAILED)) {\n return {\n type: 'UPDATE',\n newStatus: RequestStatus.FAILED,\n }\n }\n\n if (childStatuses.length > 0 && childStatuses.every((status) => status === RequestStatus.FINISHED)) {\n return {\n type: 'UPDATE',\n newStatus: RequestStatus.FINISHED,\n }\n }\n\n /**\n * ------------------------------------------------------------\n * NORMAL STATUS TRANSITION\n * ------------------------------------------------------------\n * Parent progressed (SUBMITTED → STARTED → PICKED → FINISHED)\n */\n if (parentSignal.kind === 'STATUS' && parentSignal.status !== currentStatus) {\n return {\n type: 'UPDATE',\n newStatus: parentSignal.status,\n }\n }\n\n /**\n * ------------------------------------------------------------\n * NOTHING CHANGED\n * ------------------------------------------------------------\n */\n return { type: 'NO_CHANGE' }\n}\n\n/**\n * ------------------------------------------------------------\n * EVALUATE STATUS\n * ------------------------------------------------------------\n */\n\ntype EvaluateReportStatusOptions = {\n stored: StoredReportData\n services: Services\n token: string\n now?: number\n}\n\n/**\n * Evaluates the current authoritative report status.\n */\nasync function evaluateReportStatus({\n stored,\n services,\n token,\n now = Date.now(),\n}: EvaluateReportStatusOptions): Promise<StatusResolution> {\n // 1. Get the status data.\n const { parentSignal, childSignals } = await getStatus({\n stored,\n services,\n token,\n })\n\n // 2. Apply and resolve status rules.\n return resolveReportStatus({\n stored,\n parentSignal,\n childSignals,\n now,\n })\n}\n\n/**\n * Ensures the stored report status is correct.\n */\nexport async function evaluateAndUpdateReportStatus({\n stored,\n services,\n token,\n res,\n}: EvaluateAndUpdateReportStatusOptions): Promise<{\n resolution: StatusResolution\n updated?: RequestedReport\n}> {\n const { dprUser } = getValues(res)\n const { executionId } = stored\n\n if (!executionId) {\n throw new Error('Stored report missing executionId')\n }\n\n const resolution = await evaluateReportStatus({\n stored,\n services,\n token,\n })\n\n if (resolution.type === 'NO_CHANGE') {\n return { resolution }\n }\n\n // Set the error message if any to a string\n const errorMessage = resolution.failureInfo ? JSON.stringify(resolution.failureInfo) : undefined\n\n // Update the status\n await services.requestedReportService.updateStatus(executionId, dprUser.id, resolution.newStatus, errorMessage)\n\n // Get the updated stored state\n const updated = await services.requestedReportService.getReportByExecutionId(executionId, dprUser.id)\n if (!updated) {\n return { resolution }\n }\n\n return {\n resolution,\n updated,\n }\n}\n\n/**\n * ------------------------------------------------------------\n * PREFLIGHT / INITIALISATION\n * ------------------------------------------------------------\n */\n\nasync function detectExpiredFinishedReports({\n reports,\n services,\n token,\n}: {\n reports: StoredReportData[]\n services: Services\n token: string\n}): Promise<\n {\n executionId: string\n }[]\n> {\n const finishedWithTables = reports.filter(\n (r) =>\n (r.status === RequestStatus.FINISHED || r.status === RequestStatus.READY) &&\n Boolean(r.executionId) &&\n Boolean(r.tableId),\n )\n\n if (finishedWithTables.length === 0) {\n return []\n }\n\n // de‑duplicate tableIds for batch lookup\n const tableIds = [...new Set(finishedWithTables.map((r) => r.tableId!))]\n\n const expiryStates = await services.reportingService.getTableExpiryState(token, tableIds)\n\n const expiredTableIds = new Set(expiryStates.filter((s) => s.expired).map((s) => s.tableId))\n\n return finishedWithTables.filter((r) => expiredTableIds.has(r.tableId!)).map((r) => ({ executionId: r.executionId! }))\n}\n\n/**\n * Checks the expired status of reports and updates the state\n *\n * @export\n * @param {ExpireFinishedReportsOptions} {\n * reports,\n * services,\n * token,\n * res,\n * }\n * @return {*} {Promise<StoredReportData[]>}\n */\nexport async function expireFinishedReports({\n requestedReports,\n recentlyViewedReports,\n services,\n res,\n}: ExpireFinishedReportsOptions): Promise<{\n requestedReports: RequestedReport[]\n recentlyViewedReports: StoredReportData[]\n}> {\n const { dprUser, token } = getValues(res)\n\n const reports = [...requestedReports, ...recentlyViewedReports]\n\n const expired = await detectExpiredFinishedReports({\n reports,\n services,\n token,\n })\n\n if (expired.length === 0) {\n return {\n requestedReports,\n recentlyViewedReports,\n }\n }\n\n // de-duplicate executionIds\n const uniqueExpired = [...new Map(expired.map((e) => [e.executionId, e])).values()]\n\n // If any expired then update the state\n await uniqueExpired.reduce(async (prev, { executionId }) => {\n await prev\n await services.requestedReportService.setToExpired(executionId, dprUser.id)\n await services.recentlyViewedService.setToExpired(executionId, dprUser.id)\n }, Promise.resolve())\n\n // get a fresh version of all reports\n return getAllMyReports(res, services, dprUser.id)\n}\n\nconst EXPIRED_CHECK_INTERVAL_MS = 30 * 60 * 1000 // 30 mins\n\n/**\n * Checks if the expiry check should run\n *\n * @export\n * @param {*} session\n * @return {*} {boolean}\n */\nexport function shouldRunExpiryCheck(session: { lastExpiredReportsCheckAt?: number }): boolean {\n const lastRun = session.lastExpiredReportsCheckAt\n if (!lastRun) return true\n\n return Date.now() - lastRun > EXPIRED_CHECK_INTERVAL_MS\n}\n\nexport function recordExpiryCheck(session: { lastExpiredReportsCheckAt?: number }) {\n // eslint-disable-next-line no-param-reassign\n session.lastExpiredReportsCheckAt = Date.now()\n}\n"],"names":["ReportType","RequestStatus","ErrorHandler","TERMINAL_STATUSES","FIFTEEN_MINUTES_MS","getValues","getAllMyReports"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"getReportStatus.js","sources":["../../../../../../../../../../src/dpr/utils/ReportStatus/getReportStatus.ts"],"sourcesContent":["import {\n RequestStatus,\n UpstreamSignal,\n StatusResolution,\n FailureInfo,\n EvaluateAndUpdateReportStatusOptions,\n GetReportStatusOptions,\n TERMINAL_STATUSES,\n FIFTEEN_MINUTES_MS,\n ExpireFinishedReportsOptions,\n} from './types'\nimport ErrorHandler, { DprErrorMessage } from '../ErrorHandler/ErrorHandler'\nimport { Services } from '../../types/Services'\nimport { StoredReportData, ReportType, RequestedReport } from '../../types/UserReports'\nimport { getValues } from '../localsHelper'\nimport { getAllMyReports } from '../reportStoreHelper'\n\n/**\n * ------------------------------------------------------------\n * API\n * ------------------------------------------------------------\n */\n\n/**\n * Get the status by report type\n *\n * @param {GetReportStatusOptions} {\n * reportType,\n * services,\n * token,\n * reportId,\n * id,\n * executionId,\n * definitionsPath,\n * tableId,\n * }\n * @return {*} {Promise<UpstreamSignal>}\n */\nasync function getStatusByType({\n reportType,\n services,\n token,\n reportId,\n id,\n executionId,\n definitionsPath,\n tableId,\n}: GetReportStatusOptions): Promise<UpstreamSignal> {\n try {\n const response =\n reportType === ReportType.DASHBOARD\n ? await services.dashboardService.getAsyncStatus(token, reportId, id, executionId, tableId, definitionsPath)\n : await services.reportingService.getAsyncReportStatus(\n token,\n reportId,\n id,\n executionId,\n definitionsPath,\n tableId,\n )\n\n const data = response as {\n status?: string\n error: string\n errorCategory?: number\n stateChangeReason?: string\n }\n\n if (!data.status) {\n return { kind: 'EMPTY' }\n }\n\n if (data.status === RequestStatus.FAILED) {\n const formatted = failedPayloadToDprError(data)\n return {\n kind: 'ERROR',\n failure: toFailureInfo(formatted),\n }\n }\n\n return {\n kind: 'STATUS',\n status: data.status as RequestStatus,\n }\n } catch (error) {\n const formatted = new ErrorHandler(error).formatError()\n\n return {\n kind: 'ERROR',\n failure: toFailureInfo(formatted),\n }\n }\n}\n\n/**\n * ------------------------------------------------------------\n * ORCHESTRATION\n * ------------------------------------------------------------\n */\n\n/**\n * Gets the status for a reports and its child reports\n *\n * @param {{\n * stored: StoredReportData\n * services: Services\n * token: string\n * }} {\n * stored,\n * services,\n * token,\n * }\n * @return {*} {Promise<{\n * parentSignal: UpstreamSignal\n * childSignals: UpstreamSignal[]\n * }>}\n */\nasync function getStatus({\n stored,\n services,\n token,\n}: {\n stored: StoredReportData\n services: Services\n token: string\n}): Promise<{\n parentSignal: UpstreamSignal\n childSignals: UpstreamSignal[]\n}> {\n const { reportId, id, tableId, executionId, dataProductDefinitionsPath } = stored\n const definitionsPath = dataProductDefinitionsPath || ''\n\n if (!executionId || !tableId) {\n throw new Error('Stored report missing executionId or tableId')\n }\n\n const parentSignal = await getStatusByType({\n reportType: stored.type,\n services,\n token,\n reportId,\n id,\n executionId,\n definitionsPath,\n tableId,\n })\n\n const childSignals = stored.childExecutionData\n ? await Promise.all(\n stored.childExecutionData.map((child) => {\n const { tableId: childTableId, executionId: childExecutionId } = child\n\n if (!childExecutionId || !childTableId) {\n throw new Error('Stored child report missing executionId or tableId')\n }\n\n return getStatusByType({\n services,\n reportType: ReportType.REPORT,\n token,\n reportId,\n id,\n executionId: childExecutionId,\n definitionsPath,\n tableId: childTableId,\n })\n }),\n )\n : []\n\n return {\n parentSignal,\n childSignals,\n }\n}\n\n/**\n * Converts a normalized internal error (`DprErrorMessage`) into a `FailureInfo`\n * object that is safe and consistent to store and return to clients.\n *\n * @param {DprErrorMessage} error\n * @return {*} {FailureInfo}\n */\nfunction toFailureInfo(error: DprErrorMessage): FailureInfo {\n const normalize = (msg?: string | string[]): string =>\n Array.isArray(msg) ? msg.join('. ') : msg || 'An unexpected error occurred'\n\n return {\n userMessage: normalize(error.userMessage),\n ...(error.developerMessage && {\n developerMessage: normalize(error.developerMessage),\n }),\n ...(error.moreInfo && { moreInfo: error.moreInfo }),\n ...(typeof error.status === 'number' && {\n errorCode: error.status,\n }),\n }\n}\n\n/**\n * Adapts a successful (200 OK) response that represents a semantic\n * failure (`status: FAILED`) into the standard `DprErrorMessage` shape.\n *\n * @param {*} raw\n * @return {*} {DprErrorMessage}\n */\nfunction failedPayloadToDprError(raw: {\n status?: string\n error: string\n errorCategory?: number\n stateChangeReason?: string\n}): DprErrorMessage {\n const { error, stateChangeReason } = raw\n\n return {\n userMessage: 'An unexpected error occurred',\n developerMessage: error,\n ...(stateChangeReason && { moreInfo: stateChangeReason }),\n }\n}\n\n/**\n * ------------------------------------------------------------\n * RESOLVER\n * ------------------------------------------------------------\n */\n\nfunction isTerminal(status?: RequestStatus): boolean {\n return status ? TERMINAL_STATUSES.has(status) : false\n}\n\n/**\n * Decides the authoritative status of a report.\n *\n * @export\n * @param {{\n * stored: StoredReportData\n * parentSignal: UpstreamSignal\n * childSignals: UpstreamSignal[]\n * now: number\n * }} {\n * stored,\n * parentSignal,\n * childSignals,\n * now,\n * }\n * @return {*} {StatusResolution}\n */\nfunction resolveReportStatus({\n stored,\n parentSignal,\n childSignals,\n now,\n}: {\n stored: StoredReportData\n parentSignal: UpstreamSignal\n childSignals: UpstreamSignal[]\n now: number\n}): StatusResolution {\n const currentStatus = stored.status ?? RequestStatus.SUBMITTED\n\n /**\n * ------------------------------------------------------------\n * TERMINAL GUARD\n * ------------------------------------------------------------\n * Once a report is terminal, it never changes again.\n */\n if (isTerminal(currentStatus)) {\n return { type: 'NO_CHANGE' }\n }\n\n /**\n * ------------------------------------------------------------\n * TIMEOUT\n * ------------------------------------------------------------\n * If polling exceeds 15 minutes, we decide it has failed.\n */\n const requestedAt = stored.timestamp?.requested\n if (requestedAt) {\n const requestedTime = new Date(requestedAt).getTime()\n if (now - requestedTime >= FIFTEEN_MINUTES_MS) {\n return {\n type: 'UPDATE',\n newStatus: RequestStatus.FAILED,\n failureInfo: {\n userMessage: 'Report generation timed out',\n developerMessage: 'Polling exceeded 15 minutes',\n },\n }\n }\n }\n\n /**\n * ------------------------------------------------------------\n * API ERROR\n * ------------------------------------------------------------\n * The API failed.\n */\n if (parentSignal.kind === 'ERROR' || childSignals.some((signal) => signal.kind === 'ERROR')) {\n const failure =\n parentSignal.kind === 'ERROR' ? parentSignal.failure : childSignals.find((s) => s.kind === 'ERROR')!.failure\n\n return {\n type: 'UPDATE',\n newStatus: RequestStatus.FAILED,\n failureInfo: failure,\n }\n }\n\n /**\n * ------------------------------------------------------------\n * CHILD AGGREGATION\n * ------------------------------------------------------------\n * Execution identity comes from stored.childExecutionData,\n * execution truth comes from childSignals.\n */\n const childStatuses = childSignals.filter((s) => s.kind === 'STATUS').map((s) => s.status)\n\n if (childStatuses.some((status) => status === RequestStatus.FAILED)) {\n return {\n type: 'UPDATE',\n newStatus: RequestStatus.FAILED,\n }\n }\n\n if (childStatuses.length > 0 && childStatuses.every((status) => status === RequestStatus.FINISHED)) {\n return {\n type: 'UPDATE',\n newStatus: RequestStatus.FINISHED,\n }\n }\n\n /**\n * ------------------------------------------------------------\n * NORMAL STATUS TRANSITION\n * ------------------------------------------------------------\n * Parent progressed (SUBMITTED → STARTED → PICKED → FINISHED)\n */\n if (parentSignal.kind === 'STATUS' && parentSignal.status !== currentStatus) {\n return {\n type: 'UPDATE',\n newStatus: parentSignal.status,\n }\n }\n\n /**\n * ------------------------------------------------------------\n * NOTHING CHANGED\n * ------------------------------------------------------------\n */\n return { type: 'NO_CHANGE' }\n}\n\n/**\n * ------------------------------------------------------------\n * EVALUATE STATUS\n * ------------------------------------------------------------\n */\n\ntype EvaluateReportStatusOptions = {\n stored: StoredReportData\n services: Services\n token: string\n now?: number\n}\n\n/**\n * Evaluates the current authoritative report status.\n */\nasync function evaluateReportStatus({\n stored,\n services,\n token,\n now = Date.now(),\n}: EvaluateReportStatusOptions): Promise<StatusResolution> {\n // 1. Get the status data.\n const { parentSignal, childSignals } = await getStatus({\n stored,\n services,\n token,\n })\n\n // 2. Apply and resolve status rules.\n return resolveReportStatus({\n stored,\n parentSignal,\n childSignals,\n now,\n })\n}\n\n/**\n * Ensures the stored report status is correct.\n */\nexport async function evaluateAndUpdateReportStatus({\n stored,\n services,\n token,\n res,\n}: EvaluateAndUpdateReportStatusOptions): Promise<{\n resolution: StatusResolution\n updated?: RequestedReport\n}> {\n const { dprUser } = getValues(res)\n const { executionId } = stored\n\n if (!executionId) {\n throw new Error('Stored report missing executionId')\n }\n\n const resolution = await evaluateReportStatus({\n stored,\n services,\n token,\n })\n\n if (resolution.type === 'NO_CHANGE') {\n return { resolution }\n }\n\n // Set the error message if any to a string\n const errorMessage = resolution.failureInfo ? JSON.stringify(resolution.failureInfo) : undefined\n\n // Update the status\n await services.requestedReportService.updateStatus(executionId, dprUser.id, resolution.newStatus, errorMessage)\n\n // Get the updated stored state\n const updated = await services.requestedReportService.getReportByExecutionId(executionId, dprUser.id)\n if (!updated) {\n return { resolution }\n }\n\n return {\n resolution,\n updated,\n }\n}\n\n/**\n * ------------------------------------------------------------\n * PREFLIGHT / INITIALISATION\n * ------------------------------------------------------------\n */\n\nasync function detectExpiredFinishedReports({\n reports,\n services,\n token,\n}: {\n reports: StoredReportData[]\n services: Services\n token: string\n}): Promise<\n {\n executionId: string\n }[]\n> {\n const finishedWithTables = reports.filter(\n (r) =>\n (r.status === RequestStatus.FINISHED || r.status === RequestStatus.READY) &&\n Boolean(r.executionId) &&\n Boolean(r.tableId),\n )\n\n if (finishedWithTables.length === 0) {\n return []\n }\n\n // de‑duplicate tableIds for batch lookup\n const tableIds = [...new Set(finishedWithTables.map((r) => r.tableId!))]\n\n const expiryStates = await services.reportingService.getTableExpiryState(token, tableIds)\n\n const expiredTableIds = new Set(expiryStates.filter((s) => s.expired).map((s) => s.tableId))\n\n return finishedWithTables.filter((r) => expiredTableIds.has(r.tableId!)).map((r) => ({ executionId: r.executionId! }))\n}\n\n/**\n * Checks the expired status of reports and updates the state\n *\n * @export\n * @param {ExpireFinishedReportsOptions} {\n * reports,\n * services,\n * token,\n * res,\n * }\n * @return {*} {Promise<StoredReportData[]>}\n */\nexport async function expireFinishedReports({\n requestedReports,\n recentlyViewedReports,\n services,\n res,\n}: ExpireFinishedReportsOptions): Promise<{\n requestedReports: RequestedReport[]\n recentlyViewedReports: StoredReportData[]\n}> {\n const { dprUser, token } = getValues(res)\n\n const reports = [...requestedReports, ...recentlyViewedReports]\n\n const expired = await detectExpiredFinishedReports({\n reports,\n services,\n token,\n })\n\n if (expired.length === 0) {\n return {\n requestedReports,\n recentlyViewedReports,\n }\n }\n\n // de-duplicate executionIds\n const uniqueExpired = [...new Map(expired.map((e) => [e.executionId, e])).values()]\n\n // If any expired then update the state\n await uniqueExpired.reduce(async (prev, { executionId }) => {\n await prev\n await services.requestedReportService.setToExpired(executionId, dprUser.id)\n await services.recentlyViewedService.setToExpired(executionId, dprUser.id)\n }, Promise.resolve())\n\n // get a fresh version of all reports\n return getAllMyReports(res, services, dprUser.id)\n}\n\nconst EXPIRED_CHECK_INTERVAL_MS = 30 * 60 * 1000 // 30 mins\n\n/**\n * Checks if the expiry check should run\n *\n * @export\n * @param {*} session\n * @return {*} {boolean}\n */\nexport function shouldRunExpiryCheck(session: { lastExpiredReportsCheckAt?: number }): boolean {\n const lastRun = session.lastExpiredReportsCheckAt\n if (!lastRun) return true\n\n return Date.now() - lastRun > EXPIRED_CHECK_INTERVAL_MS\n}\n\nexport function recordExpiryCheck(session: { lastExpiredReportsCheckAt?: number }) {\n // eslint-disable-next-line no-param-reassign\n session.lastExpiredReportsCheckAt = Date.now()\n}\n"],"names":["ReportType","RequestStatus","ErrorHandler","TERMINAL_STATUSES","FIFTEEN_MINUTES_MS","getValues","getAllMyReports"],"mappings":"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"}
|
|
@@ -30,8 +30,8 @@ const buildMyReportListRow = (data, status, req, res, listType) => {
|
|
|
30
30
|
*/
|
|
31
31
|
const buildTitleCell = (data) => {
|
|
32
32
|
return {
|
|
33
|
-
productName: data.reportName,
|
|
34
|
-
reportName: data.name,
|
|
33
|
+
productName: data.reportName ?? 'unknown-product',
|
|
34
|
+
reportName: data.name ?? data.variantName ?? 'unknown-report',
|
|
35
35
|
reportType: data.type,
|
|
36
36
|
timestamp: buildTimestamp(data),
|
|
37
37
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"utils.js","sources":["../../../../../../../../../../src/dpr/components/my-reports/my-reports-list-item/utils.ts"],"sourcesContent":["import { Request, Response } from 'express'\n\nimport { RequestStatus, StoredReportData } from 'src/dpr/types/UserReports'\nimport {\n DprMyReportActions,\n DprMyReportFilters,\n DprMyReportTitle,\n LinkAction,\n ListType,\n NameValuePair,\n RemoveAction,\n ViewAction,\n} from '../types'\nimport { apiTimestampToUiDateTime, todayAsUiDateTime } from '../../../utils/dateHelper'\nimport { getRouteLocals } from '../../../utils/localsHelper'\n\n/**\n * Builds the row\n *\n * @param {StoredReportData} data\n * @param {RequestStatus} status\n * @param {Request} req\n * @param {Response} res\n * @param {ListType} listType\n * @return {*}\n */\nexport const buildMyReportListRow = (\n data: StoredReportData,\n status: RequestStatus,\n req: Request,\n res: Response,\n listType: ListType,\n) => {\n return {\n title: buildTitleCell(data),\n filters: buildFiltersCell(data),\n status,\n actions: buildActionsCell(data, res, req, listType),\n meta: buildMeta(data, res, listType),\n }\n}\n\n/**\n * Builds the titls cell data\n *\n * @param {StoredReportData} data\n * @return {*} {DprMyReportTitle}\n */\nconst buildTitleCell = (data: StoredReportData): DprMyReportTitle => {\n return {\n productName: data.reportName,\n reportName: data.name,\n reportType: data.type,\n timestamp: buildTimestamp(data),\n }\n}\n\n/**\n * Builds the timestamp to display\n *\n * @param {StoredReportData} data\n * @return {*}\n */\nconst buildTimestamp = (data: StoredReportData) => {\n const { status, timestamp } = data\n\n const now = todayAsUiDateTime()\n switch (status) {\n case RequestStatus.FAILED: {\n const { failed } = timestamp\n const ts = failed ? apiTimestampToUiDateTime(failed) : now\n return `Failed at ${ts}`\n }\n\n case RequestStatus.ABORTED: {\n const { aborted } = timestamp\n const ts = aborted ? apiTimestampToUiDateTime(aborted) : now\n return `Aborted at ${ts}`\n }\n\n case RequestStatus.FINISHED: {\n const { completed } = timestamp\n const ts = completed ? apiTimestampToUiDateTime(completed) : now\n return `Ready at ${ts}`\n }\n\n case RequestStatus.EXPIRED: {\n const { expired } = timestamp\n const ts = expired ? apiTimestampToUiDateTime(expired) : now\n return `Expired at ${ts}`\n }\n\n case RequestStatus.READY: {\n const { lastViewed } = timestamp\n const ts = lastViewed ? apiTimestampToUiDateTime(lastViewed) : now\n return `Last viewed at ${ts}`\n }\n\n case RequestStatus.SUBMITTED:\n case RequestStatus.STARTED:\n case RequestStatus.PICKED: {\n const { requested } = timestamp\n const ts = requested ? apiTimestampToUiDateTime(requested) : now\n return `Requested at ${ts}`\n }\n\n default: {\n const { lastViewed } = timestamp\n const ts = lastViewed ? apiTimestampToUiDateTime(lastViewed) : now\n return `Last viewed at ${ts}`\n }\n }\n}\n\n/**\n * Builds the filters cell data\n *\n * @param {StoredReportData} data\n * @return {*} {DprMyReportFilters}\n */\nconst buildFiltersCell = (data: StoredReportData): DprMyReportFilters => {\n const prerequest = (data.query?.summary as NameValuePair[] | undefined) || []\n const interactive = (data.interactiveQuery?.summary as NameValuePair[] | undefined) || []\n\n return {\n ...(prerequest && { prerequest }),\n ...(interactive && { interactive }),\n }\n}\n\n/**\n * Builds the action cell data\n *\n * @param {StoredReportData} data\n * @param {Response} res\n * @return {*} {DprMyReportActions}\n */\nconst buildActionsCell = (\n data: StoredReportData,\n res: Response,\n req: Request,\n listType: ListType,\n): DprMyReportActions => {\n const { status, type, url } = data\n\n let retry: LinkAction | undefined\n let refresh: LinkAction | undefined\n let polling: LinkAction | undefined\n let view: ViewAction | undefined\n let remove: RemoveAction | undefined\n\n const pollingPageUrl = url?.polling?.fullUrl || ''\n const requestPageUrl = url?.request?.fullUrl || ''\n const reportPageUrl = url?.report?.fullUrl || ''\n\n switch (status) {\n case RequestStatus.FAILED:\n retry = { href: pollingPageUrl }\n remove = buildRemoveAction(data, res, req, listType)\n break\n\n case RequestStatus.EXPIRED:\n refresh = { href: requestPageUrl }\n remove = buildRemoveAction(data, res, req, listType)\n break\n\n case RequestStatus.ABORTED:\n retry = { href: requestPageUrl }\n remove = buildRemoveAction(data, res, req, listType)\n break\n\n case RequestStatus.READY:\n case RequestStatus.FINISHED:\n view = {\n href: reportPageUrl,\n reportType: type,\n }\n remove = buildRemoveAction(data, res, req, listType)\n break\n\n case RequestStatus.PICKED:\n case RequestStatus.SUBMITTED:\n case RequestStatus.STARTED:\n polling = { href: pollingPageUrl }\n break\n default:\n break\n }\n\n return {\n ...(retry && { retry }),\n ...(refresh && { refresh }),\n ...(remove && { remove }),\n ...(view && { view }),\n ...(polling && { polling }),\n }\n}\n\n/**\n * Builds the remove action\n *\n * @param {StoredReportData} data\n * @param {Response} res\n * @return {*}\n */\nconst buildRemoveAction = (data: StoredReportData, res: Response, req: Request, listType: ListType): RemoveAction => {\n const { reportId, id, executionId, tableId } = data\n const { requestedListPath, recentlyViewedListPath } = getRouteLocals(res)\n\n let action = ''\n\n if (listType === ListType.REQUESTED) {\n // ASYNC report - only executionId is needed\n action = `${requestedListPath}/remove-item/${executionId}`\n } else if (tableId && executionId) {\n // ASYNC report - tableId and executionId needed\n action = `${recentlyViewedListPath}/remove-item/${executionId}/table-id/${tableId}`\n } else {\n // SYNC report - reportId and Id needed\n action = `${recentlyViewedListPath}/remove-item/report-id/${reportId}/id/${id}`\n }\n\n return {\n action,\n csrfToken: res.locals.csrfToken,\n returnTo: req.originalUrl,\n }\n}\n\n/**\n * Builds the meta data needed by the polling class\n *\n * @param {StoredReportData} data\n * @param {Response} res\n * @return {*}\n */\nconst buildMeta = (data: StoredReportData, res: Response, listType: ListType) => {\n const { userReportsList } = getRouteLocals(res)\n return {\n id: data.id,\n reportId: data.reportId,\n tableId: data.tableId,\n executionId: data.executionId,\n path: userReportsList,\n listType,\n }\n}\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"utils.js","sources":["../../../../../../../../../../src/dpr/components/my-reports/my-reports-list-item/utils.ts"],"sourcesContent":["import { Request, Response } from 'express'\n\nimport { RequestStatus, StoredReportData } from 'src/dpr/types/UserReports'\nimport {\n DprMyReportActions,\n DprMyReportFilters,\n DprMyReportTitle,\n LinkAction,\n ListType,\n NameValuePair,\n RemoveAction,\n ViewAction,\n} from '../types'\nimport { apiTimestampToUiDateTime, todayAsUiDateTime } from '../../../utils/dateHelper'\nimport { getRouteLocals } from '../../../utils/localsHelper'\n\n/**\n * Builds the row\n *\n * @param {StoredReportData} data\n * @param {RequestStatus} status\n * @param {Request} req\n * @param {Response} res\n * @param {ListType} listType\n * @return {*}\n */\nexport const buildMyReportListRow = (\n data: StoredReportData,\n status: RequestStatus,\n req: Request,\n res: Response,\n listType: ListType,\n) => {\n return {\n title: buildTitleCell(data),\n filters: buildFiltersCell(data),\n status,\n actions: buildActionsCell(data, res, req, listType),\n meta: buildMeta(data, res, listType),\n }\n}\n\n/**\n * Builds the titls cell data\n *\n * @param {StoredReportData} data\n * @return {*} {DprMyReportTitle}\n */\nconst buildTitleCell = (data: StoredReportData): DprMyReportTitle => {\n return {\n productName: data.reportName ?? 'unknown-product',\n reportName: data.name ?? data.variantName ?? 'unknown-report',\n reportType: data.type,\n timestamp: buildTimestamp(data),\n }\n}\n\n/**\n * Builds the timestamp to display\n *\n * @param {StoredReportData} data\n * @return {*}\n */\nconst buildTimestamp = (data: StoredReportData) => {\n const { status, timestamp } = data\n\n const now = todayAsUiDateTime()\n switch (status) {\n case RequestStatus.FAILED: {\n const { failed } = timestamp\n const ts = failed ? apiTimestampToUiDateTime(failed) : now\n return `Failed at ${ts}`\n }\n\n case RequestStatus.ABORTED: {\n const { aborted } = timestamp\n const ts = aborted ? apiTimestampToUiDateTime(aborted) : now\n return `Aborted at ${ts}`\n }\n\n case RequestStatus.FINISHED: {\n const { completed } = timestamp\n const ts = completed ? apiTimestampToUiDateTime(completed) : now\n return `Ready at ${ts}`\n }\n\n case RequestStatus.EXPIRED: {\n const { expired } = timestamp\n const ts = expired ? apiTimestampToUiDateTime(expired) : now\n return `Expired at ${ts}`\n }\n\n case RequestStatus.READY: {\n const { lastViewed } = timestamp\n const ts = lastViewed ? apiTimestampToUiDateTime(lastViewed) : now\n return `Last viewed at ${ts}`\n }\n\n case RequestStatus.SUBMITTED:\n case RequestStatus.STARTED:\n case RequestStatus.PICKED: {\n const { requested } = timestamp\n const ts = requested ? apiTimestampToUiDateTime(requested) : now\n return `Requested at ${ts}`\n }\n\n default: {\n const { lastViewed } = timestamp\n const ts = lastViewed ? apiTimestampToUiDateTime(lastViewed) : now\n return `Last viewed at ${ts}`\n }\n }\n}\n\n/**\n * Builds the filters cell data\n *\n * @param {StoredReportData} data\n * @return {*} {DprMyReportFilters}\n */\nconst buildFiltersCell = (data: StoredReportData): DprMyReportFilters => {\n const prerequest = (data.query?.summary as NameValuePair[] | undefined) || []\n const interactive = (data.interactiveQuery?.summary as NameValuePair[] | undefined) || []\n\n return {\n ...(prerequest && { prerequest }),\n ...(interactive && { interactive }),\n }\n}\n\n/**\n * Builds the action cell data\n *\n * @param {StoredReportData} data\n * @param {Response} res\n * @return {*} {DprMyReportActions}\n */\nconst buildActionsCell = (\n data: StoredReportData,\n res: Response,\n req: Request,\n listType: ListType,\n): DprMyReportActions => {\n const { status, type, url } = data\n\n let retry: LinkAction | undefined\n let refresh: LinkAction | undefined\n let polling: LinkAction | undefined\n let view: ViewAction | undefined\n let remove: RemoveAction | undefined\n\n const pollingPageUrl = url?.polling?.fullUrl || ''\n const requestPageUrl = url?.request?.fullUrl || ''\n const reportPageUrl = url?.report?.fullUrl || ''\n\n switch (status) {\n case RequestStatus.FAILED:\n retry = { href: pollingPageUrl }\n remove = buildRemoveAction(data, res, req, listType)\n break\n\n case RequestStatus.EXPIRED:\n refresh = { href: requestPageUrl }\n remove = buildRemoveAction(data, res, req, listType)\n break\n\n case RequestStatus.ABORTED:\n retry = { href: requestPageUrl }\n remove = buildRemoveAction(data, res, req, listType)\n break\n\n case RequestStatus.READY:\n case RequestStatus.FINISHED:\n view = {\n href: reportPageUrl,\n reportType: type,\n }\n remove = buildRemoveAction(data, res, req, listType)\n break\n\n case RequestStatus.PICKED:\n case RequestStatus.SUBMITTED:\n case RequestStatus.STARTED:\n polling = { href: pollingPageUrl }\n break\n default:\n break\n }\n\n return {\n ...(retry && { retry }),\n ...(refresh && { refresh }),\n ...(remove && { remove }),\n ...(view && { view }),\n ...(polling && { polling }),\n }\n}\n\n/**\n * Builds the remove action\n *\n * @param {StoredReportData} data\n * @param {Response} res\n * @return {*}\n */\nconst buildRemoveAction = (data: StoredReportData, res: Response, req: Request, listType: ListType): RemoveAction => {\n const { reportId, id, executionId, tableId } = data\n const { requestedListPath, recentlyViewedListPath } = getRouteLocals(res)\n\n let action = ''\n\n if (listType === ListType.REQUESTED) {\n // ASYNC report - only executionId is needed\n action = `${requestedListPath}/remove-item/${executionId}`\n } else if (tableId && executionId) {\n // ASYNC report - tableId and executionId needed\n action = `${recentlyViewedListPath}/remove-item/${executionId}/table-id/${tableId}`\n } else {\n // SYNC report - reportId and Id needed\n action = `${recentlyViewedListPath}/remove-item/report-id/${reportId}/id/${id}`\n }\n\n return {\n action,\n csrfToken: res.locals.csrfToken,\n returnTo: req.originalUrl,\n }\n}\n\n/**\n * Builds the meta data needed by the polling class\n *\n * @param {StoredReportData} data\n * @param {Response} res\n * @return {*}\n */\nconst buildMeta = (data: StoredReportData, res: Response, listType: ListType) => {\n const { userReportsList } = getRouteLocals(res)\n return {\n id: data.id,\n reportId: data.reportId,\n tableId: data.tableId,\n executionId: data.executionId,\n path: userReportsList,\n listType,\n }\n}\n"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"setUpNunjucksFilters.js","sources":["../../../../../../../src/dpr/setUpNunjucksFilters.ts"],"sourcesContent":["import nunjucks from 'nunjucks'\nimport nunjucksDate from 'nunjucks-date'\nimport { FilterOption } from './components/_filters/filter-input/types'\n\nexport const setUpNunjucksFilters = (env: nunjucks.Environment) => {\n env.addFilter('addRequiredAttributeToAll', addRequiredAttributeToAll)\n env.addFilter('json', stringifyJson)\n env.addFilter('capitaliseSentence', capitaliseSentence)\n // Namespace our own filters\n env.addFilter('dpr.findError', findError)\n env.addFilter('dpr.spacesToDash', spacesToDash)\n nunjucksDate.setDefaultFormat('DD/MM/YYYY')\n nunjucksDate.install(env, 'dprDate')\n}\n\nconst findError = (errs: { text: string; href: string }[] | undefined, errToFind: string) => {\n const error = errs?.find((err) => err.href.slice(1) === errToFind)?.text\n return error ? { text: error } : null\n}\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nconst stringifyJson = (jsonObj: any) => {\n return JSON.stringify(jsonObj, null, 2)\n}\n\nconst capitaliseSentence = (text: string) => {\n return text.charAt(0).toUpperCase() + text.substring(1).toLowerCase()\n}\n\nconst addRequiredAttributeToAll = (items: Array<FilterOption>) => {\n return items.map((i) => ({\n ...i,\n attributes: {\n required: true,\n },\n }))\n}\n\nconst spacesToDash = (text: string) => {\n return text
|
|
1
|
+
{"version":3,"file":"setUpNunjucksFilters.js","sources":["../../../../../../../src/dpr/setUpNunjucksFilters.ts"],"sourcesContent":["import nunjucks from 'nunjucks'\nimport nunjucksDate from 'nunjucks-date'\nimport { FilterOption } from './components/_filters/filter-input/types'\n\nexport const setUpNunjucksFilters = (env: nunjucks.Environment) => {\n env.addFilter('addRequiredAttributeToAll', addRequiredAttributeToAll)\n env.addFilter('json', stringifyJson)\n env.addFilter('capitaliseSentence', capitaliseSentence)\n // Namespace our own filters\n env.addFilter('dpr.findError', findError)\n env.addFilter('dpr.spacesToDash', spacesToDash)\n nunjucksDate.setDefaultFormat('DD/MM/YYYY')\n nunjucksDate.install(env, 'dprDate')\n}\n\nconst findError = (errs: { text: string; href: string }[] | undefined, errToFind: string) => {\n const error = errs?.find((err) => err.href.slice(1) === errToFind)?.text\n return error ? { text: error } : null\n}\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nconst stringifyJson = (jsonObj: any) => {\n return JSON.stringify(jsonObj, null, 2)\n}\n\nconst capitaliseSentence = (text: string) => {\n return text.charAt(0).toUpperCase() + text.substring(1).toLowerCase()\n}\n\nconst addRequiredAttributeToAll = (items: Array<FilterOption>) => {\n return items.map((i) => ({\n ...i,\n attributes: {\n required: true,\n },\n }))\n}\n\nconst spacesToDash = (text: string) => {\n return text?.replace(/ /g, '-') ?? ''\n}\n\nexport default setUpNunjucksFilters\n"],"names":[],"mappings":";;AAIO,MAAM,oBAAoB,GAAG,CAAC,GAAyB,KAAI;AAChE,IAAA,GAAG,CAAC,SAAS,CAAC,2BAA2B,EAAE,yBAAyB,CAAC;AACrE,IAAA,GAAG,CAAC,SAAS,CAAC,MAAM,EAAE,aAAa,CAAC;AACpC,IAAA,GAAG,CAAC,SAAS,CAAC,oBAAoB,EAAE,kBAAkB,CAAC;;AAEvD,IAAA,GAAG,CAAC,SAAS,CAAC,eAAe,EAAE,SAAS,CAAC;AACzC,IAAA,GAAG,CAAC,SAAS,CAAC,kBAAkB,EAAE,YAAY,CAAC;AAC/C,IAAA,YAAY,CAAC,gBAAgB,CAAC,YAAY,CAAC;AAC3C,IAAA,YAAY,CAAC,OAAO,CAAC,GAAG,EAAE,SAAS,CAAC;AACtC;AAEA,MAAM,SAAS,GAAG,CAAC,IAAkD,EAAE,SAAiB,KAAI;IAC1F,MAAM,KAAK,GAAG,IAAI,EAAE,IAAI,CAAC,CAAC,GAAG,KAAK,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,SAAS,CAAC,EAAE,IAAI;AACxE,IAAA,OAAO,KAAK,GAAG,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,IAAI;AACvC,CAAC;AAED;AACA,MAAM,aAAa,GAAG,CAAC,OAAY,KAAI;IACrC,OAAO,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC;AACzC,CAAC;AAED,MAAM,kBAAkB,GAAG,CAAC,IAAY,KAAI;AAC1C,IAAA,OAAO,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE;AACvE,CAAC;AAED,MAAM,yBAAyB,GAAG,CAAC,KAA0B,KAAI;IAC/D,OAAO,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM;AACvB,QAAA,GAAG,CAAC;AACJ,QAAA,UAAU,EAAE;AACV,YAAA,QAAQ,EAAE,IAAI;AACf,SAAA;AACF,KAAA,CAAC,CAAC;AACL,CAAC;AAED,MAAM,YAAY,GAAG,CAAC,IAAY,KAAI;IACpC,OAAO,IAAI,EAAE,OAAO,CAAC,IAAI,EAAE,GAAG,CAAC,IAAI,EAAE;AACvC,CAAC;;;;"}
|
|
@@ -27,7 +27,7 @@ import { getAllMyReports } from '../reportStoreHelper.js';
|
|
|
27
27
|
async function getStatusByType({ reportType, services, token, reportId, id, executionId, definitionsPath, tableId, }) {
|
|
28
28
|
try {
|
|
29
29
|
const response = reportType === ReportType.DASHBOARD
|
|
30
|
-
? await services.dashboardService.getAsyncStatus(token, reportId, id, executionId,
|
|
30
|
+
? await services.dashboardService.getAsyncStatus(token, reportId, id, executionId, tableId, definitionsPath)
|
|
31
31
|
: await services.reportingService.getAsyncReportStatus(token, reportId, id, executionId, definitionsPath, tableId);
|
|
32
32
|
const data = response;
|
|
33
33
|
if (!data.status) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"getReportStatus.js","sources":["../../../../../../../../../src/dpr/utils/ReportStatus/getReportStatus.ts"],"sourcesContent":["import {\n RequestStatus,\n UpstreamSignal,\n StatusResolution,\n FailureInfo,\n EvaluateAndUpdateReportStatusOptions,\n GetReportStatusOptions,\n TERMINAL_STATUSES,\n FIFTEEN_MINUTES_MS,\n ExpireFinishedReportsOptions,\n} from './types'\nimport ErrorHandler, { DprErrorMessage } from '../ErrorHandler/ErrorHandler'\nimport { Services } from '../../types/Services'\nimport { StoredReportData, ReportType, RequestedReport } from '../../types/UserReports'\nimport { getValues } from '../localsHelper'\nimport { getAllMyReports } from '../reportStoreHelper'\n\n/**\n * ------------------------------------------------------------\n * API\n * ------------------------------------------------------------\n */\n\n/**\n * Get the status by report type\n *\n * @param {GetReportStatusOptions} {\n * reportType,\n * services,\n * token,\n * reportId,\n * id,\n * executionId,\n * definitionsPath,\n * tableId,\n * }\n * @return {*} {Promise<UpstreamSignal>}\n */\nasync function getStatusByType({\n reportType,\n services,\n token,\n reportId,\n id,\n executionId,\n definitionsPath,\n tableId,\n}: GetReportStatusOptions): Promise<UpstreamSignal> {\n try {\n const response =\n reportType === ReportType.DASHBOARD\n ? await services.dashboardService.getAsyncStatus(token, reportId, id, executionId, definitionsPath, tableId)\n : await services.reportingService.getAsyncReportStatus(\n token,\n reportId,\n id,\n executionId,\n definitionsPath,\n tableId,\n )\n\n const data = response as {\n status?: string\n error: string\n errorCategory?: number\n stateChangeReason?: string\n }\n\n if (!data.status) {\n return { kind: 'EMPTY' }\n }\n\n if (data.status === RequestStatus.FAILED) {\n const formatted = failedPayloadToDprError(data)\n return {\n kind: 'ERROR',\n failure: toFailureInfo(formatted),\n }\n }\n\n return {\n kind: 'STATUS',\n status: data.status as RequestStatus,\n }\n } catch (error) {\n const formatted = new ErrorHandler(error).formatError()\n\n return {\n kind: 'ERROR',\n failure: toFailureInfo(formatted),\n }\n }\n}\n\n/**\n * ------------------------------------------------------------\n * ORCHESTRATION\n * ------------------------------------------------------------\n */\n\n/**\n * Gets the status for a reports and its child reports\n *\n * @param {{\n * stored: StoredReportData\n * services: Services\n * token: string\n * }} {\n * stored,\n * services,\n * token,\n * }\n * @return {*} {Promise<{\n * parentSignal: UpstreamSignal\n * childSignals: UpstreamSignal[]\n * }>}\n */\nasync function getStatus({\n stored,\n services,\n token,\n}: {\n stored: StoredReportData\n services: Services\n token: string\n}): Promise<{\n parentSignal: UpstreamSignal\n childSignals: UpstreamSignal[]\n}> {\n const { reportId, id, tableId, executionId, dataProductDefinitionsPath } = stored\n const definitionsPath = dataProductDefinitionsPath || ''\n\n if (!executionId || !tableId) {\n throw new Error('Stored report missing executionId or tableId')\n }\n\n const parentSignal = await getStatusByType({\n reportType: stored.type,\n services,\n token,\n reportId,\n id,\n executionId,\n definitionsPath,\n tableId,\n })\n\n const childSignals = stored.childExecutionData\n ? await Promise.all(\n stored.childExecutionData.map((child) => {\n const { tableId: childTableId, executionId: childExecutionId } = child\n\n if (!childExecutionId || !childTableId) {\n throw new Error('Stored child report missing executionId or tableId')\n }\n\n return getStatusByType({\n services,\n reportType: ReportType.REPORT,\n token,\n reportId,\n id,\n executionId: childExecutionId,\n definitionsPath,\n tableId: childTableId,\n })\n }),\n )\n : []\n\n return {\n parentSignal,\n childSignals,\n }\n}\n\n/**\n * Converts a normalized internal error (`DprErrorMessage`) into a `FailureInfo`\n * object that is safe and consistent to store and return to clients.\n *\n * @param {DprErrorMessage} error\n * @return {*} {FailureInfo}\n */\nfunction toFailureInfo(error: DprErrorMessage): FailureInfo {\n const normalize = (msg?: string | string[]): string =>\n Array.isArray(msg) ? msg.join('. ') : msg || 'An unexpected error occurred'\n\n return {\n userMessage: normalize(error.userMessage),\n ...(error.developerMessage && {\n developerMessage: normalize(error.developerMessage),\n }),\n ...(error.moreInfo && { moreInfo: error.moreInfo }),\n ...(typeof error.status === 'number' && {\n errorCode: error.status,\n }),\n }\n}\n\n/**\n * Adapts a successful (200 OK) response that represents a semantic\n * failure (`status: FAILED`) into the standard `DprErrorMessage` shape.\n *\n * @param {*} raw\n * @return {*} {DprErrorMessage}\n */\nfunction failedPayloadToDprError(raw: {\n status?: string\n error: string\n errorCategory?: number\n stateChangeReason?: string\n}): DprErrorMessage {\n const { error, stateChangeReason } = raw\n\n return {\n userMessage: 'An unexpected error occurred',\n developerMessage: error,\n ...(stateChangeReason && { moreInfo: stateChangeReason }),\n }\n}\n\n/**\n * ------------------------------------------------------------\n * RESOLVER\n * ------------------------------------------------------------\n */\n\nfunction isTerminal(status?: RequestStatus): boolean {\n return status ? TERMINAL_STATUSES.has(status) : false\n}\n\n/**\n * Decides the authoritative status of a report.\n *\n * @export\n * @param {{\n * stored: StoredReportData\n * parentSignal: UpstreamSignal\n * childSignals: UpstreamSignal[]\n * now: number\n * }} {\n * stored,\n * parentSignal,\n * childSignals,\n * now,\n * }\n * @return {*} {StatusResolution}\n */\nfunction resolveReportStatus({\n stored,\n parentSignal,\n childSignals,\n now,\n}: {\n stored: StoredReportData\n parentSignal: UpstreamSignal\n childSignals: UpstreamSignal[]\n now: number\n}): StatusResolution {\n const currentStatus = stored.status ?? RequestStatus.SUBMITTED\n\n /**\n * ------------------------------------------------------------\n * TERMINAL GUARD\n * ------------------------------------------------------------\n * Once a report is terminal, it never changes again.\n */\n if (isTerminal(currentStatus)) {\n return { type: 'NO_CHANGE' }\n }\n\n /**\n * ------------------------------------------------------------\n * TIMEOUT\n * ------------------------------------------------------------\n * If polling exceeds 15 minutes, we decide it has failed.\n */\n const requestedAt = stored.timestamp?.requested\n if (requestedAt) {\n const requestedTime = new Date(requestedAt).getTime()\n if (now - requestedTime >= FIFTEEN_MINUTES_MS) {\n return {\n type: 'UPDATE',\n newStatus: RequestStatus.FAILED,\n failureInfo: {\n userMessage: 'Report generation timed out',\n developerMessage: 'Polling exceeded 15 minutes',\n },\n }\n }\n }\n\n /**\n * ------------------------------------------------------------\n * API ERROR\n * ------------------------------------------------------------\n * The API failed.\n */\n if (parentSignal.kind === 'ERROR' || childSignals.some((signal) => signal.kind === 'ERROR')) {\n const failure =\n parentSignal.kind === 'ERROR' ? parentSignal.failure : childSignals.find((s) => s.kind === 'ERROR')!.failure\n\n return {\n type: 'UPDATE',\n newStatus: RequestStatus.FAILED,\n failureInfo: failure,\n }\n }\n\n /**\n * ------------------------------------------------------------\n * CHILD AGGREGATION\n * ------------------------------------------------------------\n * Execution identity comes from stored.childExecutionData,\n * execution truth comes from childSignals.\n */\n const childStatuses = childSignals.filter((s) => s.kind === 'STATUS').map((s) => s.status)\n\n if (childStatuses.some((status) => status === RequestStatus.FAILED)) {\n return {\n type: 'UPDATE',\n newStatus: RequestStatus.FAILED,\n }\n }\n\n if (childStatuses.length > 0 && childStatuses.every((status) => status === RequestStatus.FINISHED)) {\n return {\n type: 'UPDATE',\n newStatus: RequestStatus.FINISHED,\n }\n }\n\n /**\n * ------------------------------------------------------------\n * NORMAL STATUS TRANSITION\n * ------------------------------------------------------------\n * Parent progressed (SUBMITTED → STARTED → PICKED → FINISHED)\n */\n if (parentSignal.kind === 'STATUS' && parentSignal.status !== currentStatus) {\n return {\n type: 'UPDATE',\n newStatus: parentSignal.status,\n }\n }\n\n /**\n * ------------------------------------------------------------\n * NOTHING CHANGED\n * ------------------------------------------------------------\n */\n return { type: 'NO_CHANGE' }\n}\n\n/**\n * ------------------------------------------------------------\n * EVALUATE STATUS\n * ------------------------------------------------------------\n */\n\ntype EvaluateReportStatusOptions = {\n stored: StoredReportData\n services: Services\n token: string\n now?: number\n}\n\n/**\n * Evaluates the current authoritative report status.\n */\nasync function evaluateReportStatus({\n stored,\n services,\n token,\n now = Date.now(),\n}: EvaluateReportStatusOptions): Promise<StatusResolution> {\n // 1. Get the status data.\n const { parentSignal, childSignals } = await getStatus({\n stored,\n services,\n token,\n })\n\n // 2. Apply and resolve status rules.\n return resolveReportStatus({\n stored,\n parentSignal,\n childSignals,\n now,\n })\n}\n\n/**\n * Ensures the stored report status is correct.\n */\nexport async function evaluateAndUpdateReportStatus({\n stored,\n services,\n token,\n res,\n}: EvaluateAndUpdateReportStatusOptions): Promise<{\n resolution: StatusResolution\n updated?: RequestedReport\n}> {\n const { dprUser } = getValues(res)\n const { executionId } = stored\n\n if (!executionId) {\n throw new Error('Stored report missing executionId')\n }\n\n const resolution = await evaluateReportStatus({\n stored,\n services,\n token,\n })\n\n if (resolution.type === 'NO_CHANGE') {\n return { resolution }\n }\n\n // Set the error message if any to a string\n const errorMessage = resolution.failureInfo ? JSON.stringify(resolution.failureInfo) : undefined\n\n // Update the status\n await services.requestedReportService.updateStatus(executionId, dprUser.id, resolution.newStatus, errorMessage)\n\n // Get the updated stored state\n const updated = await services.requestedReportService.getReportByExecutionId(executionId, dprUser.id)\n if (!updated) {\n return { resolution }\n }\n\n return {\n resolution,\n updated,\n }\n}\n\n/**\n * ------------------------------------------------------------\n * PREFLIGHT / INITIALISATION\n * ------------------------------------------------------------\n */\n\nasync function detectExpiredFinishedReports({\n reports,\n services,\n token,\n}: {\n reports: StoredReportData[]\n services: Services\n token: string\n}): Promise<\n {\n executionId: string\n }[]\n> {\n const finishedWithTables = reports.filter(\n (r) =>\n (r.status === RequestStatus.FINISHED || r.status === RequestStatus.READY) &&\n Boolean(r.executionId) &&\n Boolean(r.tableId),\n )\n\n if (finishedWithTables.length === 0) {\n return []\n }\n\n // de‑duplicate tableIds for batch lookup\n const tableIds = [...new Set(finishedWithTables.map((r) => r.tableId!))]\n\n const expiryStates = await services.reportingService.getTableExpiryState(token, tableIds)\n\n const expiredTableIds = new Set(expiryStates.filter((s) => s.expired).map((s) => s.tableId))\n\n return finishedWithTables.filter((r) => expiredTableIds.has(r.tableId!)).map((r) => ({ executionId: r.executionId! }))\n}\n\n/**\n * Checks the expired status of reports and updates the state\n *\n * @export\n * @param {ExpireFinishedReportsOptions} {\n * reports,\n * services,\n * token,\n * res,\n * }\n * @return {*} {Promise<StoredReportData[]>}\n */\nexport async function expireFinishedReports({\n requestedReports,\n recentlyViewedReports,\n services,\n res,\n}: ExpireFinishedReportsOptions): Promise<{\n requestedReports: RequestedReport[]\n recentlyViewedReports: StoredReportData[]\n}> {\n const { dprUser, token } = getValues(res)\n\n const reports = [...requestedReports, ...recentlyViewedReports]\n\n const expired = await detectExpiredFinishedReports({\n reports,\n services,\n token,\n })\n\n if (expired.length === 0) {\n return {\n requestedReports,\n recentlyViewedReports,\n }\n }\n\n // de-duplicate executionIds\n const uniqueExpired = [...new Map(expired.map((e) => [e.executionId, e])).values()]\n\n // If any expired then update the state\n await uniqueExpired.reduce(async (prev, { executionId }) => {\n await prev\n await services.requestedReportService.setToExpired(executionId, dprUser.id)\n await services.recentlyViewedService.setToExpired(executionId, dprUser.id)\n }, Promise.resolve())\n\n // get a fresh version of all reports\n return getAllMyReports(res, services, dprUser.id)\n}\n\nconst EXPIRED_CHECK_INTERVAL_MS = 30 * 60 * 1000 // 30 mins\n\n/**\n * Checks if the expiry check should run\n *\n * @export\n * @param {*} session\n * @return {*} {boolean}\n */\nexport function shouldRunExpiryCheck(session: { lastExpiredReportsCheckAt?: number }): boolean {\n const lastRun = session.lastExpiredReportsCheckAt\n if (!lastRun) return true\n\n return Date.now() - lastRun > EXPIRED_CHECK_INTERVAL_MS\n}\n\nexport function recordExpiryCheck(session: { lastExpiredReportsCheckAt?: number }) {\n // eslint-disable-next-line no-param-reassign\n session.lastExpiredReportsCheckAt = Date.now()\n}\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"getReportStatus.js","sources":["../../../../../../../../../src/dpr/utils/ReportStatus/getReportStatus.ts"],"sourcesContent":["import {\n RequestStatus,\n UpstreamSignal,\n StatusResolution,\n FailureInfo,\n EvaluateAndUpdateReportStatusOptions,\n GetReportStatusOptions,\n TERMINAL_STATUSES,\n FIFTEEN_MINUTES_MS,\n ExpireFinishedReportsOptions,\n} from './types'\nimport ErrorHandler, { DprErrorMessage } from '../ErrorHandler/ErrorHandler'\nimport { Services } from '../../types/Services'\nimport { StoredReportData, ReportType, RequestedReport } from '../../types/UserReports'\nimport { getValues } from '../localsHelper'\nimport { getAllMyReports } from '../reportStoreHelper'\n\n/**\n * ------------------------------------------------------------\n * API\n * ------------------------------------------------------------\n */\n\n/**\n * Get the status by report type\n *\n * @param {GetReportStatusOptions} {\n * reportType,\n * services,\n * token,\n * reportId,\n * id,\n * executionId,\n * definitionsPath,\n * tableId,\n * }\n * @return {*} {Promise<UpstreamSignal>}\n */\nasync function getStatusByType({\n reportType,\n services,\n token,\n reportId,\n id,\n executionId,\n definitionsPath,\n tableId,\n}: GetReportStatusOptions): Promise<UpstreamSignal> {\n try {\n const response =\n reportType === ReportType.DASHBOARD\n ? await services.dashboardService.getAsyncStatus(token, reportId, id, executionId, tableId, definitionsPath)\n : await services.reportingService.getAsyncReportStatus(\n token,\n reportId,\n id,\n executionId,\n definitionsPath,\n tableId,\n )\n\n const data = response as {\n status?: string\n error: string\n errorCategory?: number\n stateChangeReason?: string\n }\n\n if (!data.status) {\n return { kind: 'EMPTY' }\n }\n\n if (data.status === RequestStatus.FAILED) {\n const formatted = failedPayloadToDprError(data)\n return {\n kind: 'ERROR',\n failure: toFailureInfo(formatted),\n }\n }\n\n return {\n kind: 'STATUS',\n status: data.status as RequestStatus,\n }\n } catch (error) {\n const formatted = new ErrorHandler(error).formatError()\n\n return {\n kind: 'ERROR',\n failure: toFailureInfo(formatted),\n }\n }\n}\n\n/**\n * ------------------------------------------------------------\n * ORCHESTRATION\n * ------------------------------------------------------------\n */\n\n/**\n * Gets the status for a reports and its child reports\n *\n * @param {{\n * stored: StoredReportData\n * services: Services\n * token: string\n * }} {\n * stored,\n * services,\n * token,\n * }\n * @return {*} {Promise<{\n * parentSignal: UpstreamSignal\n * childSignals: UpstreamSignal[]\n * }>}\n */\nasync function getStatus({\n stored,\n services,\n token,\n}: {\n stored: StoredReportData\n services: Services\n token: string\n}): Promise<{\n parentSignal: UpstreamSignal\n childSignals: UpstreamSignal[]\n}> {\n const { reportId, id, tableId, executionId, dataProductDefinitionsPath } = stored\n const definitionsPath = dataProductDefinitionsPath || ''\n\n if (!executionId || !tableId) {\n throw new Error('Stored report missing executionId or tableId')\n }\n\n const parentSignal = await getStatusByType({\n reportType: stored.type,\n services,\n token,\n reportId,\n id,\n executionId,\n definitionsPath,\n tableId,\n })\n\n const childSignals = stored.childExecutionData\n ? await Promise.all(\n stored.childExecutionData.map((child) => {\n const { tableId: childTableId, executionId: childExecutionId } = child\n\n if (!childExecutionId || !childTableId) {\n throw new Error('Stored child report missing executionId or tableId')\n }\n\n return getStatusByType({\n services,\n reportType: ReportType.REPORT,\n token,\n reportId,\n id,\n executionId: childExecutionId,\n definitionsPath,\n tableId: childTableId,\n })\n }),\n )\n : []\n\n return {\n parentSignal,\n childSignals,\n }\n}\n\n/**\n * Converts a normalized internal error (`DprErrorMessage`) into a `FailureInfo`\n * object that is safe and consistent to store and return to clients.\n *\n * @param {DprErrorMessage} error\n * @return {*} {FailureInfo}\n */\nfunction toFailureInfo(error: DprErrorMessage): FailureInfo {\n const normalize = (msg?: string | string[]): string =>\n Array.isArray(msg) ? msg.join('. ') : msg || 'An unexpected error occurred'\n\n return {\n userMessage: normalize(error.userMessage),\n ...(error.developerMessage && {\n developerMessage: normalize(error.developerMessage),\n }),\n ...(error.moreInfo && { moreInfo: error.moreInfo }),\n ...(typeof error.status === 'number' && {\n errorCode: error.status,\n }),\n }\n}\n\n/**\n * Adapts a successful (200 OK) response that represents a semantic\n * failure (`status: FAILED`) into the standard `DprErrorMessage` shape.\n *\n * @param {*} raw\n * @return {*} {DprErrorMessage}\n */\nfunction failedPayloadToDprError(raw: {\n status?: string\n error: string\n errorCategory?: number\n stateChangeReason?: string\n}): DprErrorMessage {\n const { error, stateChangeReason } = raw\n\n return {\n userMessage: 'An unexpected error occurred',\n developerMessage: error,\n ...(stateChangeReason && { moreInfo: stateChangeReason }),\n }\n}\n\n/**\n * ------------------------------------------------------------\n * RESOLVER\n * ------------------------------------------------------------\n */\n\nfunction isTerminal(status?: RequestStatus): boolean {\n return status ? TERMINAL_STATUSES.has(status) : false\n}\n\n/**\n * Decides the authoritative status of a report.\n *\n * @export\n * @param {{\n * stored: StoredReportData\n * parentSignal: UpstreamSignal\n * childSignals: UpstreamSignal[]\n * now: number\n * }} {\n * stored,\n * parentSignal,\n * childSignals,\n * now,\n * }\n * @return {*} {StatusResolution}\n */\nfunction resolveReportStatus({\n stored,\n parentSignal,\n childSignals,\n now,\n}: {\n stored: StoredReportData\n parentSignal: UpstreamSignal\n childSignals: UpstreamSignal[]\n now: number\n}): StatusResolution {\n const currentStatus = stored.status ?? RequestStatus.SUBMITTED\n\n /**\n * ------------------------------------------------------------\n * TERMINAL GUARD\n * ------------------------------------------------------------\n * Once a report is terminal, it never changes again.\n */\n if (isTerminal(currentStatus)) {\n return { type: 'NO_CHANGE' }\n }\n\n /**\n * ------------------------------------------------------------\n * TIMEOUT\n * ------------------------------------------------------------\n * If polling exceeds 15 minutes, we decide it has failed.\n */\n const requestedAt = stored.timestamp?.requested\n if (requestedAt) {\n const requestedTime = new Date(requestedAt).getTime()\n if (now - requestedTime >= FIFTEEN_MINUTES_MS) {\n return {\n type: 'UPDATE',\n newStatus: RequestStatus.FAILED,\n failureInfo: {\n userMessage: 'Report generation timed out',\n developerMessage: 'Polling exceeded 15 minutes',\n },\n }\n }\n }\n\n /**\n * ------------------------------------------------------------\n * API ERROR\n * ------------------------------------------------------------\n * The API failed.\n */\n if (parentSignal.kind === 'ERROR' || childSignals.some((signal) => signal.kind === 'ERROR')) {\n const failure =\n parentSignal.kind === 'ERROR' ? parentSignal.failure : childSignals.find((s) => s.kind === 'ERROR')!.failure\n\n return {\n type: 'UPDATE',\n newStatus: RequestStatus.FAILED,\n failureInfo: failure,\n }\n }\n\n /**\n * ------------------------------------------------------------\n * CHILD AGGREGATION\n * ------------------------------------------------------------\n * Execution identity comes from stored.childExecutionData,\n * execution truth comes from childSignals.\n */\n const childStatuses = childSignals.filter((s) => s.kind === 'STATUS').map((s) => s.status)\n\n if (childStatuses.some((status) => status === RequestStatus.FAILED)) {\n return {\n type: 'UPDATE',\n newStatus: RequestStatus.FAILED,\n }\n }\n\n if (childStatuses.length > 0 && childStatuses.every((status) => status === RequestStatus.FINISHED)) {\n return {\n type: 'UPDATE',\n newStatus: RequestStatus.FINISHED,\n }\n }\n\n /**\n * ------------------------------------------------------------\n * NORMAL STATUS TRANSITION\n * ------------------------------------------------------------\n * Parent progressed (SUBMITTED → STARTED → PICKED → FINISHED)\n */\n if (parentSignal.kind === 'STATUS' && parentSignal.status !== currentStatus) {\n return {\n type: 'UPDATE',\n newStatus: parentSignal.status,\n }\n }\n\n /**\n * ------------------------------------------------------------\n * NOTHING CHANGED\n * ------------------------------------------------------------\n */\n return { type: 'NO_CHANGE' }\n}\n\n/**\n * ------------------------------------------------------------\n * EVALUATE STATUS\n * ------------------------------------------------------------\n */\n\ntype EvaluateReportStatusOptions = {\n stored: StoredReportData\n services: Services\n token: string\n now?: number\n}\n\n/**\n * Evaluates the current authoritative report status.\n */\nasync function evaluateReportStatus({\n stored,\n services,\n token,\n now = Date.now(),\n}: EvaluateReportStatusOptions): Promise<StatusResolution> {\n // 1. Get the status data.\n const { parentSignal, childSignals } = await getStatus({\n stored,\n services,\n token,\n })\n\n // 2. Apply and resolve status rules.\n return resolveReportStatus({\n stored,\n parentSignal,\n childSignals,\n now,\n })\n}\n\n/**\n * Ensures the stored report status is correct.\n */\nexport async function evaluateAndUpdateReportStatus({\n stored,\n services,\n token,\n res,\n}: EvaluateAndUpdateReportStatusOptions): Promise<{\n resolution: StatusResolution\n updated?: RequestedReport\n}> {\n const { dprUser } = getValues(res)\n const { executionId } = stored\n\n if (!executionId) {\n throw new Error('Stored report missing executionId')\n }\n\n const resolution = await evaluateReportStatus({\n stored,\n services,\n token,\n })\n\n if (resolution.type === 'NO_CHANGE') {\n return { resolution }\n }\n\n // Set the error message if any to a string\n const errorMessage = resolution.failureInfo ? JSON.stringify(resolution.failureInfo) : undefined\n\n // Update the status\n await services.requestedReportService.updateStatus(executionId, dprUser.id, resolution.newStatus, errorMessage)\n\n // Get the updated stored state\n const updated = await services.requestedReportService.getReportByExecutionId(executionId, dprUser.id)\n if (!updated) {\n return { resolution }\n }\n\n return {\n resolution,\n updated,\n }\n}\n\n/**\n * ------------------------------------------------------------\n * PREFLIGHT / INITIALISATION\n * ------------------------------------------------------------\n */\n\nasync function detectExpiredFinishedReports({\n reports,\n services,\n token,\n}: {\n reports: StoredReportData[]\n services: Services\n token: string\n}): Promise<\n {\n executionId: string\n }[]\n> {\n const finishedWithTables = reports.filter(\n (r) =>\n (r.status === RequestStatus.FINISHED || r.status === RequestStatus.READY) &&\n Boolean(r.executionId) &&\n Boolean(r.tableId),\n )\n\n if (finishedWithTables.length === 0) {\n return []\n }\n\n // de‑duplicate tableIds for batch lookup\n const tableIds = [...new Set(finishedWithTables.map((r) => r.tableId!))]\n\n const expiryStates = await services.reportingService.getTableExpiryState(token, tableIds)\n\n const expiredTableIds = new Set(expiryStates.filter((s) => s.expired).map((s) => s.tableId))\n\n return finishedWithTables.filter((r) => expiredTableIds.has(r.tableId!)).map((r) => ({ executionId: r.executionId! }))\n}\n\n/**\n * Checks the expired status of reports and updates the state\n *\n * @export\n * @param {ExpireFinishedReportsOptions} {\n * reports,\n * services,\n * token,\n * res,\n * }\n * @return {*} {Promise<StoredReportData[]>}\n */\nexport async function expireFinishedReports({\n requestedReports,\n recentlyViewedReports,\n services,\n res,\n}: ExpireFinishedReportsOptions): Promise<{\n requestedReports: RequestedReport[]\n recentlyViewedReports: StoredReportData[]\n}> {\n const { dprUser, token } = getValues(res)\n\n const reports = [...requestedReports, ...recentlyViewedReports]\n\n const expired = await detectExpiredFinishedReports({\n reports,\n services,\n token,\n })\n\n if (expired.length === 0) {\n return {\n requestedReports,\n recentlyViewedReports,\n }\n }\n\n // de-duplicate executionIds\n const uniqueExpired = [...new Map(expired.map((e) => [e.executionId, e])).values()]\n\n // If any expired then update the state\n await uniqueExpired.reduce(async (prev, { executionId }) => {\n await prev\n await services.requestedReportService.setToExpired(executionId, dprUser.id)\n await services.recentlyViewedService.setToExpired(executionId, dprUser.id)\n }, Promise.resolve())\n\n // get a fresh version of all reports\n return getAllMyReports(res, services, dprUser.id)\n}\n\nconst EXPIRED_CHECK_INTERVAL_MS = 30 * 60 * 1000 // 30 mins\n\n/**\n * Checks if the expiry check should run\n *\n * @export\n * @param {*} session\n * @return {*} {boolean}\n */\nexport function shouldRunExpiryCheck(session: { lastExpiredReportsCheckAt?: number }): boolean {\n const lastRun = session.lastExpiredReportsCheckAt\n if (!lastRun) return true\n\n return Date.now() - lastRun > EXPIRED_CHECK_INTERVAL_MS\n}\n\nexport function recordExpiryCheck(session: { lastExpiredReportsCheckAt?: number }) {\n // eslint-disable-next-line no-param-reassign\n session.lastExpiredReportsCheckAt = Date.now()\n}\n"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@ministryofjustice/hmpps-digital-prison-reporting-frontend",
|
|
3
|
-
"version": "6.0.
|
|
3
|
+
"version": "6.0.3",
|
|
4
4
|
"description": "The Digital Prison Reporting Frontend contains templates and code to help display data effectively in UI applications.",
|
|
5
5
|
"main": "./cjs/index.js",
|
|
6
6
|
"module": "./index.js",
|