@ministryofjustice/hmpps-digital-prison-reporting-frontend 4.18.3 → 4.20.0
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/dpr/components/_async/async-filters-form/view.njk +1 -1
- package/dpr/components/_async/async-polling/clientClass.mjs +0 -22
- package/dpr/components/_async/async-polling/view.njk +11 -8
- package/dpr/components/_catalogue/catalogue-list/utils.js +1 -1
- package/dpr/components/_catalogue/catalogue-list/utils.js.map +3 -3
- package/dpr/components/_catalogue/catalogue-list/utils.ts +50 -57
- package/dpr/components/_charts/utils.js +1 -1
- package/dpr/components/_charts/utils.js.map +3 -3
- package/dpr/components/_charts/utils.ts +17 -9
- package/dpr/components/_sync/sync-load/view.njk +1 -1
- package/dpr/components/user-reports/utils.js +1 -1
- package/dpr/components/user-reports/utils.js.map +2 -2
- package/dpr/components/user-reports/utils.ts +4 -4
- package/dpr/data/dashboardClient.js +1 -1
- package/dpr/data/dashboardClient.js.map +2 -2
- package/dpr/data/dashboardClient.ts +17 -0
- package/dpr/data/reportingClient.js +1 -1
- package/dpr/data/reportingClient.js.map +3 -3
- package/dpr/data/reportingClient.ts +1 -24
- package/dpr/middleware/setUpDprResources.js +1 -1
- package/dpr/middleware/setUpDprResources.js.map +3 -3
- package/dpr/middleware/setUpDprResources.ts +21 -3
- package/dpr/routes/authError.njk +10 -0
- package/dpr/routes/index.js +1 -1
- package/dpr/routes/index.js.map +3 -3
- package/dpr/routes/index.ts +7 -1
- package/dpr/routes/journeys/api-failures.cy.js +2 -0
- package/dpr/routes/journeys/api-failures.cy.js.map +7 -0
- package/dpr/routes/journeys/api-failures.cy.ts +377 -0
- package/dpr/routes/journeys/my-reports/bookmarks/service.js.map +2 -2
- package/dpr/routes/journeys/my-reports/bookmarks/service.ts +1 -0
- package/dpr/routes/journeys/request-report/controller.js +1 -1
- package/dpr/routes/journeys/request-report/controller.js.map +3 -3
- package/dpr/routes/journeys/request-report/controller.ts +25 -5
- package/dpr/routes/journeys/request-report/filters/controller.js +1 -1
- package/dpr/routes/journeys/request-report/filters/controller.js.map +2 -2
- package/dpr/routes/journeys/request-report/filters/controller.ts +1 -1
- package/dpr/routes/journeys/request-report/routes.js +1 -1
- package/dpr/routes/journeys/request-report/routes.js.map +3 -3
- package/dpr/routes/journeys/request-report/routes.ts +16 -0
- package/dpr/routes/journeys/request-report/status/controller.js +1 -1
- package/dpr/routes/journeys/request-report/status/controller.js.map +3 -3
- package/dpr/routes/journeys/request-report/status/controller.ts +0 -17
- package/dpr/routes/journeys/request-report/status/routes.js +1 -1
- package/dpr/routes/journeys/request-report/status/routes.js.map +2 -2
- package/dpr/routes/journeys/request-report/status/routes.ts +0 -1
- package/dpr/routes/journeys/view-report/async/dashboard/utils.js +1 -1
- package/dpr/routes/journeys/view-report/async/dashboard/utils.js.map +2 -2
- package/dpr/routes/journeys/view-report/async/dashboard/utils.ts +12 -4
- package/dpr/routes/journeys/view-report/sync/dashboard/controller.js +2 -0
- package/dpr/routes/journeys/view-report/sync/dashboard/controller.js.map +7 -0
- package/dpr/routes/journeys/view-report/sync/dashboard/controller.ts +39 -0
- package/dpr/routes/journeys/view-report/sync/dashboard/routes.js +2 -0
- package/dpr/routes/journeys/view-report/sync/dashboard/routes.js.map +7 -0
- package/dpr/routes/journeys/view-report/sync/dashboard/routes.ts +18 -0
- package/dpr/routes/journeys/view-report/sync/dashboard/utils.js +2 -0
- package/dpr/routes/journeys/view-report/sync/dashboard/utils.js.map +7 -0
- package/dpr/routes/journeys/view-report/sync/dashboard/utils.ts +149 -0
- package/dpr/routes/journeys/view-report/sync/load-report/controller.js +1 -1
- package/dpr/routes/journeys/view-report/sync/load-report/controller.js.map +3 -3
- package/dpr/routes/journeys/view-report/sync/load-report/controller.ts +43 -13
- package/dpr/routes/journeys/view-report/sync/report/routes.js +1 -1
- package/dpr/routes/journeys/view-report/sync/report/routes.js.map +3 -3
- package/dpr/routes/journeys/view-report/sync/report/routes.ts +2 -2
- package/dpr/routes/journeys/view-report/sync/routes.js +1 -1
- package/dpr/routes/journeys/view-report/sync/routes.js.map +3 -3
- package/dpr/routes/journeys/view-report/sync/routes.ts +2 -0
- package/dpr/routes/journeys/view-report/sync/tests.cy.js +1 -1
- package/dpr/routes/journeys/view-report/sync/tests.cy.js.map +2 -2
- package/dpr/routes/journeys/view-report/sync/tests.cy.ts +21 -1
- package/dpr/routes/serviceProblem.njk +10 -0
- package/dpr/services/dashboardService.js +1 -1
- package/dpr/services/dashboardService.js.map +2 -2
- package/dpr/services/dashboardService.ts +9 -0
- package/dpr/types/ReportQuery.js +1 -1
- package/dpr/types/ReportQuery.js.map +2 -2
- package/dpr/types/ReportQuery.ts +1 -1
- package/dpr/types/api.d.js +1 -1
- package/dpr/types/api.d.js.map +1 -1
- package/dpr/types/api.d.ts +139 -3
- package/dpr/utils/datasetHelper.js +1 -1
- package/dpr/utils/datasetHelper.js.map +3 -3
- package/dpr/utils/datasetHelper.ts +18 -9
- package/package.json +6 -7
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../../src/dpr/components/user-reports/utils.ts"],
|
|
4
|
-
"sourcesContent": ["import { Response, Request } from 'express'\nimport dayjs from 'dayjs'\nimport { RenderTableListResponse } from './types'\nimport Dict = NodeJS.Dict\nimport {\n FormattedUserReportData,\n UserReportData,\n RequestStatus,\n ReportType,\n RequestedReport,\n StoredReportData,\n meta,\n} from '../../types/UserReports'\nimport { FilterValue } from '../_filters/types'\nimport { Services } from '../../types/Services'\n\nimport { AsyncReportUtilsParams } from '../../types/AsyncReportUtils'\nimport { getExpiredStatus } from '../../utils/requestStatusHelper'\nimport SelectedFiltersUtils from '../_filters/filters-selected/utils'\nimport FiltersUtils from '../_filters/utils'\nimport { itemActionsHtml, createListItemProduct } from '../../utils/reportListsHelper'\nimport RequestedReportUtils from './requested/utils'\nimport RecentlyViewedCardGroupUtils from './viewed/utils'\nimport BookmarklistUtils from './bookmarks/utils'\nimport LocalsHelper from '../../utils/localsHelper'\nimport DateMapper from '../../utils/DateMapper/DateMapper'\nimport UserStoreItemBuilder from '../../utils/UserStoreItemBuilder'\n\nconst formatData = (reportData: UserReportData): FormattedUserReportData => {\n const reportDataCopy: UserReportData = JSON.parse(JSON.stringify(reportData))\n\n const {\n executionId,\n tableId,\n variantName,\n name,\n reportId,\n variantId,\n id,\n description,\n query,\n interactiveQuery,\n status,\n reportName,\n dataProductDefinitionsPath,\n type: reportType,\n url,\n } = reportDataCopy\n\n let summary: { name: string; value: string }[] = []\n if (query) {\n summary = query.summary as { name: string; value: string }[]\n }\n let interactiveSummary: { name: string; value: string }[] = []\n if (interactiveQuery) {\n interactiveSummary = interactiveQuery.summary as { name: string; value: string }[]\n }\n\n const type = reportType || ReportType.REPORT\n\n return {\n id: executionId,\n text: name || variantName || '',\n reportName,\n description,\n tag: 'MIS',\n summary,\n interactiveSummary,\n status,\n type,\n ...(status && setDataFromStatus(status, reportDataCopy)),\n meta: {\n reportId,\n id: variantId || id,\n executionId,\n tableId,\n status,\n type,\n dataProductDefinitionsPath,\n pollingUrl: url?.polling?.pathname,\n reportUrl: url?.report?.pathname,\n },\n }\n}\n\nconst formatTable = (data: FormattedUserReportData[], type: 'requested' | 'viewed') => {\n const rows = data.map((card: FormattedUserReportData) => {\n return formatTableRow(card, type)\n })\n\n return {\n rows,\n head: [\n { text: 'Product', classes: 'dpr-req-product-head' },\n { text: 'Filters', classes: 'dpr-req-filters-head' },\n { text: 'Status', classes: 'dpr-req-status-head' },\n { text: 'Actions', classes: 'dpr-req-actions-head' },\n ],\n }\n}\n\nconst formatTableRow = (data: FormattedUserReportData, type: 'requested' | 'viewed') => {\n let statusClass\n let itemActions = ''\n\n const { href, id, reportName, text, timestamp, type: reportType, status } = data\n if (href && id) {\n switch (status) {\n case RequestStatus.FAILED:\n statusClass = 'govuk-tag--red'\n itemActions = itemActionsHtml(href, id, type, status)\n break\n case RequestStatus.EXPIRED:\n statusClass = 'govuk-tag--grey'\n itemActions = itemActionsHtml(href, id, type, status)\n break\n case RequestStatus.ABORTED:\n statusClass = 'govuk-tag--orange'\n itemActions = itemActionsHtml(href, id, type, status)\n break\n case RequestStatus.READY:\n case RequestStatus.FINISHED:\n itemActions = `<a class=govuk-link govuk-link--no-visited-state dpr-type__${reportType}' href=\"${href}\">Go to ${reportType}</a>`\n statusClass = 'govuk-tag--green'\n break\n case RequestStatus.PICKED:\n case RequestStatus.SUBMITTED:\n case RequestStatus.STARTED:\n itemActions = `<a class='govuk-link govuk-link--no-visited-state dpr-type__${reportType}' href=\"${href}\">Go to status</a>`\n break\n default:\n break\n }\n }\n\n let filtersSummary = ''\n if (data.summary || data.interactiveSummary) {\n filtersSummary = createSummaryHtml(data)\n }\n\n return [\n {\n html: createListItemProduct(reportName, text, reportType, timestamp),\n },\n { html: filtersSummary },\n {\n html: `<strong class=\"govuk-tag dpr-request-status-tag ${statusClass}\">${status}</strong>`,\n classes: 'dpr-req-cell dpr-req-cell__status',\n },\n {\n html: `${itemActions}`,\n classes: 'dpr-req-cell dpr-req-cell__status',\n },\n ]\n}\n\nconst getTotals = (formattedCount: number, maxRows = 20) => {\n return {\n amount: formattedCount,\n shown: maxRows && formattedCount > maxRows ? maxRows : formattedCount,\n max: maxRows,\n }\n}\n\nconst createSummaryHtml = (data: FormattedUserReportData) => {\n const summaryHtml = data.summary\n ?.map((item) => `<li class=\"govuk-body-s dpr-query-summary\"><strong>${item.name}</strong>: ${item.value}</li>`)\n .join('')\n\n const interactiveSummaryHtml = data.interactiveSummary\n ?.map(\n (item) =>\n `<li class=\"govuk-body-s dpr-interactive-query-summary\"><strong>${item.name}</strong>: ${item.value}</li>`,\n )\n .join('')\n\n return `<ul class=\"dpr-card-group__item__filters-list govuk-!-margin-top-0 govuk-!-margin-bottom-0\">${summaryHtml}${interactiveSummaryHtml}</ul>`\n}\n\nconst getMeta = (formattedData: FormattedUserReportData[], res: Response): meta[] => {\n const { nestedBaseUrl } = LocalsHelper.getValues(res)\n\n return formattedData.map((d) => {\n return {\n reportId: d.meta?.reportId,\n id: d.meta.id,\n executionId: d.meta.executionId,\n tableId: d.meta.tableId,\n status: d.meta.status,\n requestedAt: d.meta.requestedAt,\n type: d.meta.type,\n dataProductDefinitionsPath: d.meta.dataProductDefinitionsPath,\n pollingUrl: d.meta.pollingUrl,\n reportUrl: d.meta.reportUrl,\n nestedBaseUrl,\n }\n })\n}\n\nexport const setDataFromStatus = (status: RequestStatus, reportsData: UserReportData) => {\n let timestamp\n let href\n let formattedDate\n const { url, timestamp: time } = reportsData\n const polling = url?.polling\n const request = url?.request\n const report = url?.report\n\n const dateMapper = new DateMapper()\n switch (status) {\n case RequestStatus.FAILED: {\n formattedDate = time.failed\n ? dateMapper.toDateString(<string>(<unknown>time.failed), 'local-date')\n : dayjs().format('DD/MM/YYYY')\n href = polling?.fullUrl\n timestamp = `Failed at: ${formattedDate}`\n break\n }\n case RequestStatus.ABORTED: {\n href = request?.fullUrl\n formattedDate = dateMapper.toDateString(<string>(<unknown>time.aborted), 'local-date')\n timestamp = `Aborted at: ${formattedDate}`\n break\n }\n case RequestStatus.FINISHED:\n href = report?.fullUrl\n formattedDate = dateMapper.toDateString(<string>(<unknown>time.completed), 'local-date')\n timestamp = `Ready at: ${formattedDate}`\n break\n case RequestStatus.EXPIRED: {\n href = request?.fullUrl\n formattedDate = dateMapper.toDateString(<string>(<unknown>time.expired), 'local-date')\n timestamp = `Expired at: ${formattedDate}`\n break\n }\n case RequestStatus.READY: {\n href = report?.fullUrl\n formattedDate = dateMapper.toDateString(<string>(<unknown>time.lastViewed), 'local-date')\n timestamp = `Last viewed: ${formattedDate}`\n break\n }\n case RequestStatus.SUBMITTED:\n case RequestStatus.STARTED:\n case RequestStatus.PICKED:\n href = polling?.fullUrl\n formattedDate = dateMapper.toDateString(<string>(<unknown>time.requested), 'local-date')\n timestamp = `Requested at: ${formattedDate}`\n break\n default:\n formattedDate = dateMapper.toDateString(<string>(<unknown>time.lastViewed), 'local-date')\n timestamp = `Last viewed: ${formattedDate}`\n break\n }\n\n return {\n timestamp,\n href,\n }\n}\n\nexport const renderList = async ({\n res,\n reportsData,\n maxRows,\n filterFunction,\n type,\n}: {\n res: Response\n reportsData: StoredReportData[]\n maxRows?: number\n filterFunction: (report: UserReportData) => boolean\n type: 'requested' | 'viewed'\n}): Promise<RenderTableListResponse> => {\n const { csrfToken } = LocalsHelper.getValues(res)\n\n let formatted = reportsData.filter(filterFunction).map(formatData)\n const formattedCount = formatted.length\n\n if (maxRows) formatted = formatted.slice(0, maxRows)\n const tableData = formatTable(formatted, type)\n\n const path = type === 'requested' ? 'requested-reports' : 'recently-viewed'\n const head = {\n ...(formatted.length && { href: `dpr/my-reports/${path}/list` }),\n ...(!formatted.length && { emptyMessage: `You have 0 ${type} reports` }),\n }\n\n const result: RenderTableListResponse = {\n head,\n tableData,\n total: getTotals(formattedCount, maxRows),\n meta: getMeta(formatted, res),\n csrfToken,\n ...(maxRows && { maxRows }),\n }\n\n return result\n}\n\nexport const updateExpiredStatus = async ({ req, res, services }: AsyncReportUtilsParams) => {\n const { dprUser } = LocalsHelper.getValues(res)\n const report = await getExpiredStatus({ req, res, services })\n\n if (report && report.isExpired) {\n await services.recentlyViewedService.setToExpired(report.executionId, dprUser.id)\n await services.requestedReportService.setToExpired(report.executionId, dprUser.id)\n }\n\n return report ? report.isExpired : false\n}\n\nexport const init = async ({ services, res, maxRows = 6 }: { services: Services; res: Response; maxRows?: number }) => {\n const { requestedReports, recentlyViewedReports, bookmarkingEnabled } = LocalsHelper.getValues(res)\n const requestedReportsList = await renderList({\n res,\n reportsData: requestedReports,\n filterFunction: RequestedReportUtils.filterReports,\n maxRows,\n type: 'requested',\n })\n const viewedReportsList = await renderList({\n res,\n reportsData: recentlyViewedReports,\n filterFunction: RecentlyViewedCardGroupUtils.filterReports,\n maxRows,\n type: 'viewed',\n })\n\n let bookmarks\n if (bookmarkingEnabled) {\n bookmarks = await BookmarklistUtils.renderBookmarkList({\n res,\n services,\n maxRows,\n })\n }\n\n return {\n requestedReports: requestedReportsList,\n viewedReports: viewedReportsList,\n bookmarks,\n }\n}\n\nexport const updateLastViewed = async ({\n req,\n services,\n reportStateData,\n userId,\n filters,\n}: {\n req: Request\n services: Services\n reportStateData: RequestedReport\n userId: string\n filters: FilterValue[]\n}) => {\n const { type, reportId, reportName, description, id, name, executionId, tableId, query, url } = reportStateData\n const reportData = { type, reportId, reportName, description, id, name }\n const executionData = { executionId, tableId }\n const queryData = query ? { query: query.data, querySummary: query.summary } : { query: {}, querySummary: [] }\n\n const columns = <string[]>req.query?.['columns']\n const { selectedPage, pageSize, sortColumn, sortedAsc } = <Dict<string>>req.query\n const filtersQuery = FiltersUtils.setRequestQueryFromFilterValues(filters, true)\n const reqQuery = {\n ...filtersQuery,\n ...(columns && { columns }),\n ...(selectedPage && { selectedPage }),\n ...(pageSize && { pageSize }),\n ...(sortColumn && { sortColumn }),\n ...(sortedAsc && { sortedAsc }),\n }\n const interactiveQueryData: { query: Dict<string | string[]>; querySummary: Array<Dict<string>> } = {\n query: reqQuery,\n querySummary: SelectedFiltersUtils.getQuerySummary(filtersQuery, filters),\n }\n\n const recentlyViewedData = new UserStoreItemBuilder(reportData)\n .addExecutionData(executionData)\n .addQuery(queryData)\n .addInteractiveQuery(interactiveQueryData)\n .addStatus(RequestStatus.READY)\n .addTimestamp()\n .addAsyncUrls(url)\n .addReportUrls(req)\n .build()\n\n if (executionId) await services.requestedReportService.updateLastViewed(executionId, userId)\n await services.recentlyViewedService.setRecentlyViewed(recentlyViewedData, userId)\n}\n\nexport default {\n renderList,\n updateExpiredStatus,\n init,\n updateLastViewed,\n}\n"],
|
|
5
|
-
"mappings": "0jBAAA,IAAAA,GAAA,GAAAC,EAAAD,GAAA,aAAAE,GAAA,SAAAC,EAAA,eAAAC,EAAA,sBAAAC,EAAA,wBAAAC,EAAA,qBAAAC,IAAA,eAAAC,EAAAR,IACA,IAAAS,EAAkB,oBAGlBC,EAQO,mCAKPC,EAAiC,2CACjCC,EAAiC,iDACjCA,EAAyB,gCACzBC,EAAuD,yCACvDD,EAAiC,gCACjCA,EAAyC,6BACzCA,EAA8B,gCAC9BE,EAAyB,uCACzBC,EAAuB,gDACvBC,EAAiC,+CAEjC,MAAMC,EAAcC,GAAwD,CAC1E,MAAMC,EAAiC,KAAK,MAAM,KAAK,UAAUD,CAAU,CAAC,EAEtE,CACJ,YAAAE,EACA,QAAAC,EACA,YAAAC,EACA,KAAAC,EACA,SAAAC,EACA,UAAAC,EACA,GAAAC,EACA,YAAAC,EACA,MAAAC,EACA,iBAAAC,EACA,OAAAC,EACA,WAAAC,EACA,2BAAAC,EACA,KAAMC,EACN,IAAAC,CACF,EAAIf,EAEJ,IAAIgB,EAA6C,CAAC,EAC9CP,IACFO,EAAUP,EAAM,SAElB,IAAIQ,EAAwD,CAAC,EACzDP,IACFO,EAAqBP,EAAiB,SAGxC,MAAMQ,EAAOJ,GAAc,aAAW,OAEtC,MAAO,CACL,GAAIb,EACJ,KAAMG,GAAQD,GAAe,GAC7B,WAAAS,EACA,YAAAJ,EACA,IAAK,MACL,QAAAQ,EACA,mBAAAC,EACA,OAAAN,EACA,KAAAO,EACA,GAAIP,GAAUzB,EAAkByB,EAAQX,CAAc,EACtD,KAAM,CACJ,SAAAK,EACA,GAAIC,GAAaC,EACjB,YAAAN,EACA,QAAAC,EACA,OAAAS,EACA,KAAAO,EACA,2BAAAL,EACA,WAAYE,GAAK,SAAS,SAC1B,UAAWA,GAAK,QAAQ,QAC1B,CACF,CACF,EAEMI,GAAc,CAACC,EAAiCF,KAK7C,CACL,KALWE,EAAK,IAAKC,GACdC,GAAeD,EAAMH,CAAI,CACjC,EAIC,KAAM,CACJ,CAAE,KAAM,UAAW,QAAS,sBAAuB,EACnD,CAAE,KAAM,UAAW,QAAS,sBAAuB,EACnD,CAAE,KAAM,SAAU,QAAS,qBAAsB,EACjD,CAAE,KAAM,UAAW,QAAS,sBAAuB,CACrD,CACF,GAGII,GAAiB,CAACF,EAA+BF,IAAiC,CACtF,IAAIK,EACAC,EAAc,GAElB,KAAM,CAAE,KAAAC,EAAM,GAAAlB,EAAI,WAAAK,EAAY,KAAAc,EAAM,UAAAC,EAAW,KAAMb,EAAY,OAAAH,CAAO,EAAIS,EAC5E,GAAIK,
|
|
4
|
+
"sourcesContent": ["import { Response, Request } from 'express'\nimport dayjs from 'dayjs'\nimport { RenderTableListResponse } from './types'\nimport Dict = NodeJS.Dict\nimport {\n FormattedUserReportData,\n UserReportData,\n RequestStatus,\n ReportType,\n RequestedReport,\n StoredReportData,\n meta,\n} from '../../types/UserReports'\nimport { FilterValue } from '../_filters/types'\nimport { Services } from '../../types/Services'\n\nimport { AsyncReportUtilsParams } from '../../types/AsyncReportUtils'\nimport { getExpiredStatus } from '../../utils/requestStatusHelper'\nimport SelectedFiltersUtils from '../_filters/filters-selected/utils'\nimport FiltersUtils from '../_filters/utils'\nimport { itemActionsHtml, createListItemProduct } from '../../utils/reportListsHelper'\nimport RequestedReportUtils from './requested/utils'\nimport RecentlyViewedCardGroupUtils from './viewed/utils'\nimport BookmarklistUtils from './bookmarks/utils'\nimport LocalsHelper from '../../utils/localsHelper'\nimport DateMapper from '../../utils/DateMapper/DateMapper'\nimport UserStoreItemBuilder from '../../utils/UserStoreItemBuilder'\n\nconst formatData = (reportData: UserReportData): FormattedUserReportData => {\n const reportDataCopy: UserReportData = JSON.parse(JSON.stringify(reportData))\n\n const {\n executionId,\n tableId,\n variantName,\n name,\n reportId,\n variantId,\n id,\n description,\n query,\n interactiveQuery,\n status,\n reportName,\n dataProductDefinitionsPath,\n type: reportType,\n url,\n } = reportDataCopy\n\n let summary: { name: string; value: string }[] = []\n if (query) {\n summary = query.summary as { name: string; value: string }[]\n }\n let interactiveSummary: { name: string; value: string }[] = []\n if (interactiveQuery) {\n interactiveSummary = interactiveQuery.summary as { name: string; value: string }[]\n }\n\n const type = reportType || ReportType.REPORT\n\n return {\n id: executionId,\n text: name || variantName || '',\n reportName,\n description,\n tag: 'MIS',\n summary,\n interactiveSummary,\n status,\n type,\n ...(status && setDataFromStatus(status, reportDataCopy)),\n meta: {\n reportId,\n id: variantId || id,\n executionId,\n tableId,\n status,\n type,\n dataProductDefinitionsPath,\n pollingUrl: url?.polling?.pathname,\n reportUrl: url?.report?.pathname,\n },\n }\n}\n\nconst formatTable = (data: FormattedUserReportData[], type: 'requested' | 'viewed') => {\n const rows = data.map((card: FormattedUserReportData) => {\n return formatTableRow(card, type)\n })\n\n return {\n rows,\n head: [\n { text: 'Product', classes: 'dpr-req-product-head' },\n { text: 'Filters', classes: 'dpr-req-filters-head' },\n { text: 'Status', classes: 'dpr-req-status-head' },\n { text: 'Actions', classes: 'dpr-req-actions-head' },\n ],\n }\n}\n\nconst formatTableRow = (data: FormattedUserReportData, type: 'requested' | 'viewed') => {\n let statusClass\n let itemActions = ''\n\n const { href, id, reportName, text, timestamp, type: reportType, status } = data\n if (href) {\n switch (status) {\n case RequestStatus.FAILED:\n statusClass = 'govuk-tag--red'\n itemActions = id ? itemActionsHtml(href, id, type, status) : ''\n break\n case RequestStatus.EXPIRED:\n statusClass = 'govuk-tag--grey'\n itemActions = id ? itemActionsHtml(href, id, type, status) : ''\n break\n case RequestStatus.ABORTED:\n statusClass = 'govuk-tag--orange'\n itemActions = id ? itemActionsHtml(href, id, type, status) : ''\n break\n case RequestStatus.READY:\n case RequestStatus.FINISHED:\n itemActions = `<a class=govuk-link govuk-link--no-visited-state dpr-type__${reportType}' href=\"${href}\">Go to ${reportType}</a>`\n statusClass = 'govuk-tag--green'\n break\n case RequestStatus.PICKED:\n case RequestStatus.SUBMITTED:\n case RequestStatus.STARTED:\n itemActions = `<a class='govuk-link govuk-link--no-visited-state dpr-type__${reportType}' href=\"${href}\">Go to status</a>`\n break\n default:\n break\n }\n }\n\n let filtersSummary = ''\n if (data.summary || data.interactiveSummary) {\n filtersSummary = createSummaryHtml(data)\n }\n\n return [\n {\n html: createListItemProduct(reportName, text, reportType, timestamp),\n },\n { html: filtersSummary },\n {\n html: `<strong class=\"govuk-tag dpr-request-status-tag ${statusClass}\">${status}</strong>`,\n classes: 'dpr-req-cell dpr-req-cell__status',\n },\n {\n html: `${itemActions}`,\n classes: 'dpr-req-cell dpr-req-cell__status',\n },\n ]\n}\n\nconst getTotals = (formattedCount: number, maxRows = 20) => {\n return {\n amount: formattedCount,\n shown: maxRows && formattedCount > maxRows ? maxRows : formattedCount,\n max: maxRows,\n }\n}\n\nconst createSummaryHtml = (data: FormattedUserReportData) => {\n const summaryHtml = data.summary\n ?.map((item) => `<li class=\"govuk-body-s dpr-query-summary\"><strong>${item.name}</strong>: ${item.value}</li>`)\n .join('')\n\n const interactiveSummaryHtml = data.interactiveSummary\n ?.map(\n (item) =>\n `<li class=\"govuk-body-s dpr-interactive-query-summary\"><strong>${item.name}</strong>: ${item.value}</li>`,\n )\n .join('')\n\n return `<ul class=\"dpr-card-group__item__filters-list govuk-!-margin-top-0 govuk-!-margin-bottom-0\">${summaryHtml}${interactiveSummaryHtml}</ul>`\n}\n\nconst getMeta = (formattedData: FormattedUserReportData[], res: Response): meta[] => {\n const { nestedBaseUrl } = LocalsHelper.getValues(res)\n\n return formattedData.map((d) => {\n return {\n reportId: d.meta?.reportId,\n id: d.meta.id,\n executionId: d.meta.executionId,\n tableId: d.meta.tableId,\n status: d.meta.status,\n requestedAt: d.meta.requestedAt,\n type: d.meta.type,\n dataProductDefinitionsPath: d.meta.dataProductDefinitionsPath,\n pollingUrl: d.meta.pollingUrl,\n reportUrl: d.meta.reportUrl,\n nestedBaseUrl,\n }\n })\n}\n\nexport const setDataFromStatus = (status: RequestStatus, reportsData: UserReportData) => {\n let timestamp\n let href\n let formattedDate\n const { url, timestamp: time } = reportsData\n const polling = url?.polling\n const request = url?.request\n const report = url?.report\n\n const dateMapper = new DateMapper()\n switch (status) {\n case RequestStatus.FAILED: {\n formattedDate = time.failed\n ? dateMapper.toDateString(<string>(<unknown>time.failed), 'local-date')\n : dayjs().format('DD/MM/YYYY')\n href = polling?.fullUrl\n timestamp = `Failed at: ${formattedDate}`\n break\n }\n case RequestStatus.ABORTED: {\n href = request?.fullUrl\n formattedDate = dateMapper.toDateString(<string>(<unknown>time.aborted), 'local-date')\n timestamp = `Aborted at: ${formattedDate}`\n break\n }\n case RequestStatus.FINISHED:\n href = report?.fullUrl\n formattedDate = dateMapper.toDateString(<string>(<unknown>time.completed), 'local-date')\n timestamp = `Ready at: ${formattedDate}`\n break\n case RequestStatus.EXPIRED: {\n href = request?.fullUrl\n formattedDate = dateMapper.toDateString(<string>(<unknown>time.expired), 'local-date')\n timestamp = `Expired at: ${formattedDate}`\n break\n }\n case RequestStatus.READY: {\n href = report?.fullUrl\n formattedDate = dateMapper.toDateString(<string>(<unknown>time.lastViewed), 'local-date')\n timestamp = `Last viewed: ${formattedDate}`\n break\n }\n case RequestStatus.SUBMITTED:\n case RequestStatus.STARTED:\n case RequestStatus.PICKED:\n href = polling?.fullUrl\n formattedDate = dateMapper.toDateString(<string>(<unknown>time.requested), 'local-date')\n timestamp = `Requested at: ${formattedDate}`\n break\n default:\n formattedDate = dateMapper.toDateString(<string>(<unknown>time.lastViewed), 'local-date')\n timestamp = `Last viewed: ${formattedDate}`\n break\n }\n\n return {\n timestamp,\n href,\n }\n}\n\nexport const renderList = async ({\n res,\n reportsData,\n maxRows,\n filterFunction,\n type,\n}: {\n res: Response\n reportsData: StoredReportData[]\n maxRows?: number\n filterFunction: (report: UserReportData) => boolean\n type: 'requested' | 'viewed'\n}): Promise<RenderTableListResponse> => {\n const { csrfToken } = LocalsHelper.getValues(res)\n\n let formatted = reportsData.filter(filterFunction).map(formatData)\n const formattedCount = formatted.length\n\n if (maxRows) formatted = formatted.slice(0, maxRows)\n const tableData = formatTable(formatted, type)\n\n const path = type === 'requested' ? 'requested-reports' : 'recently-viewed'\n const head = {\n ...(formatted.length && { href: `dpr/my-reports/${path}/list` }),\n ...(!formatted.length && { emptyMessage: `You have 0 ${type} reports` }),\n }\n\n const result: RenderTableListResponse = {\n head,\n tableData,\n total: getTotals(formattedCount, maxRows),\n meta: getMeta(formatted, res),\n csrfToken,\n ...(maxRows && { maxRows }),\n }\n\n return result\n}\n\nexport const updateExpiredStatus = async ({ req, res, services }: AsyncReportUtilsParams) => {\n const { dprUser } = LocalsHelper.getValues(res)\n const report = await getExpiredStatus({ req, res, services })\n\n if (report && report.isExpired) {\n await services.recentlyViewedService.setToExpired(report.executionId, dprUser.id)\n await services.requestedReportService.setToExpired(report.executionId, dprUser.id)\n }\n\n return report ? report.isExpired : false\n}\n\nexport const init = async ({ services, res, maxRows = 6 }: { services: Services; res: Response; maxRows?: number }) => {\n const { requestedReports, recentlyViewedReports, bookmarkingEnabled } = LocalsHelper.getValues(res)\n const requestedReportsList = await renderList({\n res,\n reportsData: requestedReports,\n filterFunction: RequestedReportUtils.filterReports,\n maxRows,\n type: 'requested',\n })\n const viewedReportsList = await renderList({\n res,\n reportsData: recentlyViewedReports,\n filterFunction: RecentlyViewedCardGroupUtils.filterReports,\n maxRows,\n type: 'viewed',\n })\n\n let bookmarks\n if (bookmarkingEnabled) {\n bookmarks = await BookmarklistUtils.renderBookmarkList({\n res,\n services,\n maxRows,\n })\n }\n\n return {\n requestedReports: requestedReportsList,\n viewedReports: viewedReportsList,\n bookmarks,\n }\n}\n\nexport const updateLastViewed = async ({\n req,\n services,\n reportStateData,\n userId,\n filters,\n}: {\n req: Request\n services: Services\n reportStateData: RequestedReport\n userId: string\n filters: FilterValue[]\n}) => {\n const { type, reportId, reportName, description, id, name, executionId, tableId, query, url } = reportStateData\n const reportData = { type, reportId, reportName, description, id, name }\n const executionData = { executionId, tableId }\n const queryData = query ? { query: query.data, querySummary: query.summary } : { query: {}, querySummary: [] }\n\n const columns = <string[]>req.query?.['columns']\n const { selectedPage, pageSize, sortColumn, sortedAsc } = <Dict<string>>req.query\n const filtersQuery = FiltersUtils.setRequestQueryFromFilterValues(filters, true)\n const reqQuery = {\n ...filtersQuery,\n ...(columns && { columns }),\n ...(selectedPage && { selectedPage }),\n ...(pageSize && { pageSize }),\n ...(sortColumn && { sortColumn }),\n ...(sortedAsc && { sortedAsc }),\n }\n const interactiveQueryData: { query: Dict<string | string[]>; querySummary: Array<Dict<string>> } = {\n query: reqQuery,\n querySummary: SelectedFiltersUtils.getQuerySummary(filtersQuery, filters),\n }\n\n const recentlyViewedData = new UserStoreItemBuilder(reportData)\n .addExecutionData(executionData)\n .addQuery(queryData)\n .addInteractiveQuery(interactiveQueryData)\n .addStatus(RequestStatus.READY)\n .addTimestamp()\n .addAsyncUrls(url)\n .addReportUrls(req)\n .build()\n\n if (executionId) await services.requestedReportService.updateLastViewed(executionId, userId)\n await services.recentlyViewedService.setRecentlyViewed(recentlyViewedData, userId)\n}\n\nexport default {\n renderList,\n updateExpiredStatus,\n init,\n updateLastViewed,\n}\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
6
|
"names": ["utils_exports", "__export", "utils_default", "init", "renderList", "setDataFromStatus", "updateExpiredStatus", "updateLastViewed", "__toCommonJS", "import_dayjs", "import_UserReports", "import_requestStatusHelper", "import_utils", "import_reportListsHelper", "import_localsHelper", "import_DateMapper", "import_UserStoreItemBuilder", "formatData", "reportData", "reportDataCopy", "executionId", "tableId", "variantName", "name", "reportId", "variantId", "id", "description", "query", "interactiveQuery", "status", "reportName", "dataProductDefinitionsPath", "reportType", "url", "summary", "interactiveSummary", "type", "formatTable", "data", "card", "formatTableRow", "statusClass", "itemActions", "href", "text", "timestamp", "filtersSummary", "createSummaryHtml", "getTotals", "formattedCount", "maxRows", "summaryHtml", "item", "interactiveSummaryHtml", "getMeta", "formattedData", "res", "nestedBaseUrl", "LocalsHelper", "d", "reportsData", "formattedDate", "time", "polling", "request", "report", "dateMapper", "DateMapper", "dayjs", "filterFunction", "csrfToken", "formatted", "tableData", "path", "req", "services", "dprUser", "requestedReports", "recentlyViewedReports", "bookmarkingEnabled", "requestedReportsList", "RequestedReportUtils", "viewedReportsList", "RecentlyViewedCardGroupUtils", "bookmarks", "BookmarklistUtils", "reportStateData", "userId", "filters", "executionData", "queryData", "columns", "selectedPage", "pageSize", "sortColumn", "sortedAsc", "filtersQuery", "FiltersUtils", "interactiveQueryData", "SelectedFiltersUtils", "recentlyViewedData", "UserStoreItemBuilder"]
|
|
7
7
|
}
|
|
@@ -104,19 +104,19 @@ const formatTableRow = (data: FormattedUserReportData, type: 'requested' | 'view
|
|
|
104
104
|
let itemActions = ''
|
|
105
105
|
|
|
106
106
|
const { href, id, reportName, text, timestamp, type: reportType, status } = data
|
|
107
|
-
if (href
|
|
107
|
+
if (href) {
|
|
108
108
|
switch (status) {
|
|
109
109
|
case RequestStatus.FAILED:
|
|
110
110
|
statusClass = 'govuk-tag--red'
|
|
111
|
-
itemActions = itemActionsHtml(href, id, type, status)
|
|
111
|
+
itemActions = id ? itemActionsHtml(href, id, type, status) : ''
|
|
112
112
|
break
|
|
113
113
|
case RequestStatus.EXPIRED:
|
|
114
114
|
statusClass = 'govuk-tag--grey'
|
|
115
|
-
itemActions = itemActionsHtml(href, id, type, status)
|
|
115
|
+
itemActions = id ? itemActionsHtml(href, id, type, status) : ''
|
|
116
116
|
break
|
|
117
117
|
case RequestStatus.ABORTED:
|
|
118
118
|
statusClass = 'govuk-tag--orange'
|
|
119
|
-
itemActions = itemActionsHtml(href, id, type, status)
|
|
119
|
+
itemActions = id ? itemActionsHtml(href, id, type, status) : ''
|
|
120
120
|
break
|
|
121
121
|
case RequestStatus.READY:
|
|
122
122
|
case RequestStatus.FINISHED:
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";var
|
|
1
|
+
"use strict";var f=Object.create;var a=Object.defineProperty;var u=Object.getOwnPropertyDescriptor;var p=Object.getOwnPropertyNames;var b=Object.getPrototypeOf,$=Object.prototype.hasOwnProperty;var C=(i,s)=>{for(var t in s)a(i,t,{get:s[t],enumerable:!0})},m=(i,s,t,n)=>{if(s&&typeof s=="object"||typeof s=="function")for(let e of p(s))!$.call(i,e)&&e!==t&&a(i,e,{get:()=>s[e],enumerable:!(n=u(s,e))||n.enumerable});return i};var l=(i,s,t)=>(t=i!=null?f(b(i)):{},m(s||!i||!i.__esModule?a(t,"default",{value:i,enumerable:!0}):t,i)),d=i=>m(a({},"__esModule",{value:!0}),i);var y={};C(y,{DashboardClient:()=>c,default:()=>R});module.exports=d(y);var h=l(require("../utils/logger")),D=l(require("./restClient"));class c{constructor(s){this.restClient=new D.default("Dashboard API Client",s)}getDefinition(s,t,n,e,r){const o={...r,dataProductDefinitionsPath:e};return this.logInfo("Get definition:",{dpdId:n,dashboardId:t,...o}),this.restClient.get({path:`/definitions/${n}/dashboards/${t}`,query:o,token:s}).then(g=>g)}requestAsyncDashboard(s,t,n,e){return this.logInfo("Request dashboard:",{reportId:t,dashboardId:n}),this.restClient.get({path:`/async/dashboards/${t}/${n}`,token:s,query:e}).then(r=>r)}getAsyncDashboard(s,t,n,e,r){return this.logInfo("Get dashboard:",{reportId:t,dashboardId:n,tableId:e}),this.restClient.get({path:`/reports/${t}/dashboards/${n}/tables/${e}/result`,token:s,query:r}).then(o=>o)}getAsyncStatus(s,t,n,e,r,o){return this.logInfo("Get status:",{reportId:t,dashboardId:n,executionId:e,tableId:r}),this.restClient.get({path:`/reports/${t}/dashboards/${n}/statements/${e}/status`,token:s,query:{dataProductDefinitionsPath:o,tableId:r}}).then(g=>g)}cancelAsyncRequest(s,t,n,e,r){return this.logInfo("Cancel request:",{reportId:t,dashboardId:n,executionId:e}),this.restClient.delete({path:`/reports/${t}/dashboards/${n}/statements/${e}`,token:s,query:{dataProductDefinitionsPath:r}}).then(o=>o)}getSyncDashboard(s,t,n,e){return this.logInfo("Get dashboard:",{reportId:t,dashboardId:n}),this.restClient.get({path:`/reports/${t}/dashboards/${n}`,token:s,query:e}).then(r=>r)}logInfo(s,t){h.default.info(`Dashboard client: ${s}:`),t&&Object.keys(t).length&&h.default.info(JSON.stringify(t,null,2))}}var R=c;0&&(module.exports={DashboardClient});
|
|
2
2
|
//# sourceMappingURL=dashboardClient.js.map
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../src/dpr/data/dashboardClient.ts"],
|
|
4
|
-
"sourcesContent": ["import logger from '../utils/logger'\nimport RestClient from './restClient'\nimport Dict = NodeJS.Dict\nimport { ApiConfig } from './types'\nimport { components } from '../types/api'\nimport { DashboardDataResponse } from '../types/Metrics'\n\nclass DashboardClient {\n restClient: RestClient\n\n constructor(config: ApiConfig) {\n this.restClient = new RestClient('Dashboard API Client', config)\n }\n\n getDefinition(\n token: string,\n dashboardId: string,\n dpdId: string,\n definitionsPath?: string,\n queryData?: Dict<string | string[]> | undefined,\n ): Promise<components['schemas']['DashboardDefinition']> {\n const query = {\n ...queryData,\n dataProductDefinitionsPath: definitionsPath,\n }\n this.logInfo('Get definition:', { dpdId, dashboardId, ...query })\n\n return this.restClient\n .get({\n path: `/definitions/${dpdId}/dashboards/${dashboardId}`,\n query,\n token,\n })\n .then((response) => <components['schemas']['DashboardDefinition']>response)\n }\n\n requestAsyncDashboard(\n token: string,\n reportId: string,\n dashboardId: string,\n query: Record<string, string | boolean | number>,\n ): Promise<Dict<string>> {\n this.logInfo('Request dashboard:', { reportId, dashboardId })\n\n return this.restClient\n .get({\n path: `/async/dashboards/${reportId}/${dashboardId}`,\n token,\n query,\n })\n .then((response) => <Dict<string>>response)\n }\n\n getAsyncDashboard(\n token: string,\n reportId: string,\n dashboardId: string,\n tableId: string,\n query: Record<string, string | string[]>,\n ): Promise<DashboardDataResponse[][]> {\n this.logInfo('Get dashboard:', { reportId, dashboardId, tableId })\n\n return this.restClient\n .get({\n path: `/reports/${reportId}/dashboards/${dashboardId}/tables/${tableId}/result`,\n token,\n query,\n })\n .then((response) => <DashboardDataResponse[][]>response)\n }\n\n getAsyncStatus(\n token: string,\n reportId: string,\n dashboardId: string,\n executionId: string,\n tableId?: string,\n dataProductDefinitionsPath?: string,\n ): Promise<components['schemas']['StatementExecutionStatus']> {\n this.logInfo('Get status:', { reportId, dashboardId, executionId, tableId })\n\n return this.restClient\n .get({\n path: `/reports/${reportId}/dashboards/${dashboardId}/statements/${executionId}/status`,\n token,\n query: {\n dataProductDefinitionsPath,\n tableId,\n },\n })\n .then((response) => <components['schemas']['StatementExecutionStatus']>response)\n }\n\n cancelAsyncRequest(\n token: string,\n reportId: string,\n dashboardId: string,\n executionId: string,\n dataProductDefinitionsPath?: string,\n ): Promise<Dict<string>> {\n this.logInfo('Cancel request:', { reportId, dashboardId, executionId })\n\n return this.restClient\n .delete({\n path: `/reports/${reportId}/dashboards/${dashboardId}/statements/${executionId}`,\n token,\n query: {\n dataProductDefinitionsPath,\n },\n })\n .then((response) => <Dict<string>>response)\n }\n\n logInfo(title: string, args?: Dict<string>) {\n logger.info(`Dashboard client: ${title}:`)\n if (args && Object.keys(args).length) logger.info(JSON.stringify(args, null, 2))\n }\n}\n\nexport { DashboardClient }\nexport default DashboardClient\n"],
|
|
5
|
-
"mappings": "0jBAAA,IAAAA,EAAA,GAAAC,EAAAD,EAAA,qBAAAE,EAAA,YAAAC,IAAA,eAAAC,EAAAJ,GAAA,IAAAK,EAAmB,8BACnBC,EAAuB,2BAMvB,MAAMJ,CAAgB,CAGpB,YAAYK,EAAmB,CAC7B,KAAK,WAAa,IAAI,EAAAC,QAAW,uBAAwBD,CAAM,CACjE,CAEA,cACEE,EACAC,EACAC,EACAC,EACAC,EACuD,CACvD,MAAMC,EAAQ,CACZ,GAAGD,EACH,2BAA4BD,CAC9B,EACA,YAAK,QAAQ,kBAAmB,CAAE,MAAAD,EAAO,YAAAD,EAAa,GAAGI,CAAM,CAAC,EAEzD,KAAK,WACT,IAAI,CACH,KAAM,gBAAgBH,CAAK,eAAeD,CAAW,GACrD,MAAAI,EACA,MAAAL,CACF,CAAC,EACA,KAAMM,GAA2DA,CAAQ,CAC9E,CAEA,sBACEN,EACAO,EACAN,EACAI,EACuB,CACvB,YAAK,QAAQ,qBAAsB,CAAE,SAAAE,EAAU,YAAAN,CAAY,CAAC,EAErD,KAAK,WACT,IAAI,CACH,KAAM,qBAAqBM,CAAQ,IAAIN,CAAW,GAClD,MAAAD,EACA,MAAAK,CACF,CAAC,EACA,KAAMC,GAA2BA,CAAQ,CAC9C,CAEA,kBACEN,EACAO,EACAN,EACAO,EACAH,EACoC,CACpC,YAAK,QAAQ,iBAAkB,CAAE,SAAAE,EAAU,YAAAN,EAAa,QAAAO,CAAQ,CAAC,EAE1D,KAAK,WACT,IAAI,CACH,KAAM,YAAYD,CAAQ,eAAeN,CAAW,WAAWO,CAAO,UACtE,MAAAR,EACA,MAAAK,CACF,CAAC,EACA,KAAMC,GAAwCA,CAAQ,CAC3D,CAEA,eACEN,EACAO,EACAN,EACAQ,EACAD,EACAE,EAC4D,CAC5D,YAAK,QAAQ,cAAe,CAAE,SAAAH,EAAU,YAAAN,EAAa,YAAAQ,EAAa,QAAAD,CAAQ,CAAC,EAEpE,KAAK,WACT,IAAI,CACH,KAAM,YAAYD,CAAQ,eAAeN,CAAW,eAAeQ,CAAW,UAC9E,MAAAT,EACA,MAAO,CACL,2BAAAU,EACA,QAAAF,CACF,CACF,CAAC,EACA,KAAMF,GAAgEA,CAAQ,CACnF,CAEA,mBACEN,EACAO,EACAN,EACAQ,EACAC,EACuB,CACvB,YAAK,QAAQ,kBAAmB,CAAE,SAAAH,EAAU,YAAAN,EAAa,YAAAQ,CAAY,CAAC,EAE/D,KAAK,WACT,OAAO,CACN,KAAM,YAAYF,CAAQ,eAAeN,CAAW,eAAeQ,CAAW,GAC9E,MAAAT,EACA,MAAO,CACL,2BAAAU,CACF,CACF,CAAC,EACA,KAAMJ,GAA2BA,CAAQ,CAC9C,CAEA,QAAQK,EAAeC,EAAqB,CAC1C,EAAAC,QAAO,KAAK,qBAAqBF,CAAK,GAAG,EACrCC,GAAQ,OAAO,KAAKA,CAAI,EAAE,QAAQ,EAAAC,QAAO,KAAK,KAAK,UAAUD,EAAM,KAAM,CAAC,CAAC,CACjF,CACF,CAGA,IAAOlB,EAAQD",
|
|
4
|
+
"sourcesContent": ["import logger from '../utils/logger'\nimport RestClient from './restClient'\nimport Dict = NodeJS.Dict\nimport { ApiConfig } from './types'\nimport { components } from '../types/api'\nimport { DashboardDataResponse } from '../types/Metrics'\n\nclass DashboardClient {\n restClient: RestClient\n\n constructor(config: ApiConfig) {\n this.restClient = new RestClient('Dashboard API Client', config)\n }\n\n getDefinition(\n token: string,\n dashboardId: string,\n dpdId: string,\n definitionsPath?: string,\n queryData?: Dict<string | string[]> | undefined,\n ): Promise<components['schemas']['DashboardDefinition']> {\n const query = {\n ...queryData,\n dataProductDefinitionsPath: definitionsPath,\n }\n this.logInfo('Get definition:', { dpdId, dashboardId, ...query })\n\n return this.restClient\n .get({\n path: `/definitions/${dpdId}/dashboards/${dashboardId}`,\n query,\n token,\n })\n .then((response) => <components['schemas']['DashboardDefinition']>response)\n }\n\n requestAsyncDashboard(\n token: string,\n reportId: string,\n dashboardId: string,\n query: Record<string, string | boolean | number>,\n ): Promise<Dict<string>> {\n this.logInfo('Request dashboard:', { reportId, dashboardId })\n\n return this.restClient\n .get({\n path: `/async/dashboards/${reportId}/${dashboardId}`,\n token,\n query,\n })\n .then((response) => <Dict<string>>response)\n }\n\n getAsyncDashboard(\n token: string,\n reportId: string,\n dashboardId: string,\n tableId: string,\n query: Record<string, string | string[]>,\n ): Promise<DashboardDataResponse[][]> {\n this.logInfo('Get dashboard:', { reportId, dashboardId, tableId })\n\n return this.restClient\n .get({\n path: `/reports/${reportId}/dashboards/${dashboardId}/tables/${tableId}/result`,\n token,\n query,\n })\n .then((response) => <DashboardDataResponse[][]>response)\n }\n\n getAsyncStatus(\n token: string,\n reportId: string,\n dashboardId: string,\n executionId: string,\n tableId?: string,\n dataProductDefinitionsPath?: string,\n ): Promise<components['schemas']['StatementExecutionStatus']> {\n this.logInfo('Get status:', { reportId, dashboardId, executionId, tableId })\n\n return this.restClient\n .get({\n path: `/reports/${reportId}/dashboards/${dashboardId}/statements/${executionId}/status`,\n token,\n query: {\n dataProductDefinitionsPath,\n tableId,\n },\n })\n .then((response) => <components['schemas']['StatementExecutionStatus']>response)\n }\n\n cancelAsyncRequest(\n token: string,\n reportId: string,\n dashboardId: string,\n executionId: string,\n dataProductDefinitionsPath?: string,\n ): Promise<Dict<string>> {\n this.logInfo('Cancel request:', { reportId, dashboardId, executionId })\n\n return this.restClient\n .delete({\n path: `/reports/${reportId}/dashboards/${dashboardId}/statements/${executionId}`,\n token,\n query: {\n dataProductDefinitionsPath,\n },\n })\n .then((response) => <Dict<string>>response)\n }\n\n getSyncDashboard(\n token: string,\n reportId: string,\n dashboardId: string,\n query: Record<string, string | string[]>,\n ): Promise<DashboardDataResponse[][]> {\n this.logInfo('Get dashboard:', { reportId, dashboardId })\n\n return this.restClient\n .get({\n path: `/reports/${reportId}/dashboards/${dashboardId}`,\n token,\n query,\n })\n .then((response) => <DashboardDataResponse[][]>response)\n }\n\n logInfo(title: string, args?: Dict<string>) {\n logger.info(`Dashboard client: ${title}:`)\n if (args && Object.keys(args).length) logger.info(JSON.stringify(args, null, 2))\n }\n}\n\nexport { DashboardClient }\nexport default DashboardClient\n"],
|
|
5
|
+
"mappings": "0jBAAA,IAAAA,EAAA,GAAAC,EAAAD,EAAA,qBAAAE,EAAA,YAAAC,IAAA,eAAAC,EAAAJ,GAAA,IAAAK,EAAmB,8BACnBC,EAAuB,2BAMvB,MAAMJ,CAAgB,CAGpB,YAAYK,EAAmB,CAC7B,KAAK,WAAa,IAAI,EAAAC,QAAW,uBAAwBD,CAAM,CACjE,CAEA,cACEE,EACAC,EACAC,EACAC,EACAC,EACuD,CACvD,MAAMC,EAAQ,CACZ,GAAGD,EACH,2BAA4BD,CAC9B,EACA,YAAK,QAAQ,kBAAmB,CAAE,MAAAD,EAAO,YAAAD,EAAa,GAAGI,CAAM,CAAC,EAEzD,KAAK,WACT,IAAI,CACH,KAAM,gBAAgBH,CAAK,eAAeD,CAAW,GACrD,MAAAI,EACA,MAAAL,CACF,CAAC,EACA,KAAMM,GAA2DA,CAAQ,CAC9E,CAEA,sBACEN,EACAO,EACAN,EACAI,EACuB,CACvB,YAAK,QAAQ,qBAAsB,CAAE,SAAAE,EAAU,YAAAN,CAAY,CAAC,EAErD,KAAK,WACT,IAAI,CACH,KAAM,qBAAqBM,CAAQ,IAAIN,CAAW,GAClD,MAAAD,EACA,MAAAK,CACF,CAAC,EACA,KAAMC,GAA2BA,CAAQ,CAC9C,CAEA,kBACEN,EACAO,EACAN,EACAO,EACAH,EACoC,CACpC,YAAK,QAAQ,iBAAkB,CAAE,SAAAE,EAAU,YAAAN,EAAa,QAAAO,CAAQ,CAAC,EAE1D,KAAK,WACT,IAAI,CACH,KAAM,YAAYD,CAAQ,eAAeN,CAAW,WAAWO,CAAO,UACtE,MAAAR,EACA,MAAAK,CACF,CAAC,EACA,KAAMC,GAAwCA,CAAQ,CAC3D,CAEA,eACEN,EACAO,EACAN,EACAQ,EACAD,EACAE,EAC4D,CAC5D,YAAK,QAAQ,cAAe,CAAE,SAAAH,EAAU,YAAAN,EAAa,YAAAQ,EAAa,QAAAD,CAAQ,CAAC,EAEpE,KAAK,WACT,IAAI,CACH,KAAM,YAAYD,CAAQ,eAAeN,CAAW,eAAeQ,CAAW,UAC9E,MAAAT,EACA,MAAO,CACL,2BAAAU,EACA,QAAAF,CACF,CACF,CAAC,EACA,KAAMF,GAAgEA,CAAQ,CACnF,CAEA,mBACEN,EACAO,EACAN,EACAQ,EACAC,EACuB,CACvB,YAAK,QAAQ,kBAAmB,CAAE,SAAAH,EAAU,YAAAN,EAAa,YAAAQ,CAAY,CAAC,EAE/D,KAAK,WACT,OAAO,CACN,KAAM,YAAYF,CAAQ,eAAeN,CAAW,eAAeQ,CAAW,GAC9E,MAAAT,EACA,MAAO,CACL,2BAAAU,CACF,CACF,CAAC,EACA,KAAMJ,GAA2BA,CAAQ,CAC9C,CAEA,iBACEN,EACAO,EACAN,EACAI,EACoC,CACpC,YAAK,QAAQ,iBAAkB,CAAE,SAAAE,EAAU,YAAAN,CAAY,CAAC,EAEjD,KAAK,WACT,IAAI,CACH,KAAM,YAAYM,CAAQ,eAAeN,CAAW,GACpD,MAAAD,EACA,MAAAK,CACF,CAAC,EACA,KAAMC,GAAwCA,CAAQ,CAC3D,CAEA,QAAQK,EAAeC,EAAqB,CAC1C,EAAAC,QAAO,KAAK,qBAAqBF,CAAK,GAAG,EACrCC,GAAQ,OAAO,KAAKA,CAAI,EAAE,QAAQ,EAAAC,QAAO,KAAK,KAAK,UAAUD,EAAM,KAAM,CAAC,CAAC,CACjF,CACF,CAGA,IAAOlB,EAAQD",
|
|
6
6
|
"names": ["dashboardClient_exports", "__export", "DashboardClient", "dashboardClient_default", "__toCommonJS", "import_logger", "import_restClient", "config", "RestClient", "token", "dashboardId", "dpdId", "definitionsPath", "queryData", "query", "response", "reportId", "tableId", "executionId", "dataProductDefinitionsPath", "title", "args", "logger"]
|
|
7
7
|
}
|
|
@@ -111,6 +111,23 @@ class DashboardClient {
|
|
|
111
111
|
.then((response) => <Dict<string>>response)
|
|
112
112
|
}
|
|
113
113
|
|
|
114
|
+
getSyncDashboard(
|
|
115
|
+
token: string,
|
|
116
|
+
reportId: string,
|
|
117
|
+
dashboardId: string,
|
|
118
|
+
query: Record<string, string | string[]>,
|
|
119
|
+
): Promise<DashboardDataResponse[][]> {
|
|
120
|
+
this.logInfo('Get dashboard:', { reportId, dashboardId })
|
|
121
|
+
|
|
122
|
+
return this.restClient
|
|
123
|
+
.get({
|
|
124
|
+
path: `/reports/${reportId}/dashboards/${dashboardId}`,
|
|
125
|
+
token,
|
|
126
|
+
query,
|
|
127
|
+
})
|
|
128
|
+
.then((response) => <DashboardDataResponse[][]>response)
|
|
129
|
+
}
|
|
130
|
+
|
|
114
131
|
logInfo(title: string, args?: Dict<string>) {
|
|
115
132
|
logger.info(`Dashboard client: ${title}:`)
|
|
116
133
|
if (args && Object.keys(args).length) logger.info(JSON.stringify(args, null, 2))
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";var
|
|
1
|
+
"use strict";var l=Object.create;var u=Object.defineProperty;var f=Object.getOwnPropertyDescriptor;var y=Object.getOwnPropertyNames;var R=Object.getPrototypeOf,C=Object.prototype.hasOwnProperty;var D=(s,e)=>{for(var t in e)u(s,t,{get:e[t],enumerable:!0})},c=(s,e,t,i)=>{if(e&&typeof e=="object"||typeof e=="function")for(let n of y(e))!C.call(s,n)&&n!==t&&u(s,n,{get:()=>e[n],enumerable:!(i=f(e,n))||i.enumerable});return s};var h=(s,e,t)=>(t=s!=null?l(R(s)):{},c(e||!s||!s.__esModule?u(t,"default",{value:s,enumerable:!0}):t,s)),$=s=>c(u({},"__esModule",{value:!0}),s);var A={};D(A,{ReportingClient:()=>m,default:()=>P});module.exports=$(A);var a=h(require("../utils/logger")),p=h(require("./restClient"));class m{constructor(e){this.restClient=new p.default("Reporting API Client",e)}getCount(e,t,i){return a.default.info(`Reporting client: Get count. { resourceName: ${e} }`),this.restClient.get({path:`/${e}/count`,query:i.toRecordWithFilterPrefix(!0),token:t}).then(n=>n.count)}getList(e,t,i){return this.getListWithWarnings(e,t,i).then(n=>n.data)}getListWithWarnings(e,t,i){return a.default.info(`Reporting client: Get list. { resourceName: ${e} }`),this.restClient.getWithHeaders({path:`/${e}`,query:i.toRecordWithFilterPrefix(!0),token:t}).then(n=>({data:n.data,warnings:{noDataAvailable:n.headers["x-no-data-warning"]}}))}getDefinitionSummary(e,t,i){this.logInfo("Get definition summary",{reportId:t});const n={...i&&{dataProductDefinitionsPath:i}};return this.restClient.get({path:`/definitions/${t}`,query:n,token:e}).then(r=>r)}getDefinitions(e,t){this.logInfo("Get definitions");const i={renderMethod:"HTML",...t&&{dataProductDefinitionsPath:t}};return this.restClient.get({path:"/definitions",query:i,token:e}).then(n=>n)}getDefinition(e,t,i,n,r){const o={...r,dataProductDefinitionsPath:n};return this.logInfo("Get definition",{reportId:t,variantId:i,...o}),this.restClient.get({path:`/definitions/${t}/${i}`,query:o,token:e}).then(g=>g)}requestAsyncReport(e,t,i,n){return this.logInfo("Request report",{reportId:t,variantId:i}),this.restClient.get({path:`/async/reports/${t}/${i}`,token:e,query:n}).then(r=>r)}cancelAsyncRequest(e,t,i,n,r){return this.logInfo("Cancel Request",{reportId:t,variantId:i,executionId:n}),this.restClient.delete({path:`/reports/${t}/${i}/statements/${n}`,token:e,query:{dataProductDefinitionsPath:r}}).then(o=>o)}getAsyncReport(e,t,i,n,r){return this.logInfo("Get Data",{reportId:t,variantId:i,tableId:n}),this.restClient.get({path:`/reports/${t}/${i}/tables/${n}/result`,token:e,query:r}).then(o=>o)}getAsyncSummaryReport(e,t,i,n,r,o){return this.logInfo("Get summary data",{reportId:t,variantId:i,tableId:n,summaryId:r}),this.restClient.get({path:`/reports/${t}/${i}/tables/${n}/result/summary/${r}`,token:e,query:o}).then(g=>g)}getAsyncReportStatus(e,t,i,n,r,o){return this.logInfo("Get status",{reportId:t,variantId:i,tableId:o,executionId:n}),this.restClient.get({path:`/reports/${t}/${i}/statements/${n}/status`,token:e,query:{dataProductDefinitionsPath:r,tableId:o}}).then(g=>g)}getAsyncCount(e,t,i){return this.logInfo("Get count",{tableId:t}),this.restClient.get({path:`/report/tables/${t}/count`,token:e,query:{dataProductDefinitionsPath:i}}).then(n=>n.count)}getAsyncInteractiveCount(e,t,i,n,r){return this.logInfo("Get interactive count",{tableId:t,reportId:i,id:n}),this.restClient.get({path:`/reports/${i}/${n}/tables/${t}/count`,token:e,query:r.toRecordWithFilterPrefix(!0)}).then(o=>o.count)}logInfo(e,t){a.default.info(`Reporting Client: ${e}:`),t&&Object.keys(t).length&&a.default.info(JSON.stringify(t,null,2))}}var P=m;0&&(module.exports={ReportingClient});
|
|
2
2
|
//# sourceMappingURL=reportingClient.js.map
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../src/dpr/data/reportingClient.ts"],
|
|
4
|
-
"sourcesContent": ["import ReportQuery from '../types/ReportQuery'\nimport logger from '../utils/logger'\nimport RestClient from './restClient'\nimport Dict = NodeJS.Dict\nimport { components, operations } from '../types/api'\nimport { ApiConfig, Count,
|
|
5
|
-
"mappings": "0jBAAA,IAAAA,EAAA,GAAAC,EAAAD,EAAA,qBAAAE,EAAA,YAAAC,IAAA,eAAAC,EAAAJ,GACA,IAAAK,EAAmB,8BACnBC,EAAuB,2BAMvB,MAAMJ,CAAgB,CAGpB,YAAYK,EAAmB,CAC7B,KAAK,WAAa,IAAI,EAAAC,QAAW,uBAAwBD,CAAM,CACjE,CAEA,SAASE,EAAsBC,EAAeC,EAA4C,CACxF,SAAAC,QAAO,KAAK,gDAAgDH,CAAY,IAAI,EAErE,KAAK,WACT,IAAI,CACH,KAAM,IAAIA,CAAY,SACtB,MAAOE,EAAa,yBAAyB,EAAI,EACjD,MAAAD,CACF,CAAC,EACA,KAAMG,GAAqBA,EAAU,KAAK,CAC/C,CAEA,QAAQJ,EAAsBC,EAAeI,EAAwD,CACnG,OAAO,KAAK,oBAAoBL,EAAcC,EAAOI,CAAW,EAAE,KAAMD,GAAaA,EAAS,IAAI,CACpG,CAEA,oBAAoBJ,EAAsBC,EAAeI,EAAqD,CAC5G,SAAAF,QAAO,KAAK,+CAA+CH,CAAY,IAAI,EAEpE,KAAK,WACT,eAAoC,CACnC,KAAM,IAAIA,CAAY,GACtB,MAAOK,EAAY,yBAAyB,EAAI,EAChD,MAAAJ,CACF,CAAC,EACA,KAAMG,IAAsD,CAC3D,KAAMA,EAAS,KACf,SAAU,CACR,gBAAiBA,EAAS,QAAQ,mBAAmB,CACvD,CACF,EAAE,CACN,CAEA,qBACEH,EACAK,EACAC,EAC2D,CAC3D,KAAK,QAAQ,yBAA0B,CAAE,SAAAD,CAAS,CAAC,EAEnD,MAAME,EAAsE,CAC1E,GAAID,GAAmB,CAAE,2BAA4BA,CAAgB,CACvE,EAEA,OAAO,KAAK,WACT,IAAI,CACH,KAAM,gBAAgBD,CAAQ,GAC9B,MAAOE,EACP,MAAAP,CACF,CAAC,EACA,KAAMG,GAA+DA,CAAQ,CAClF,CAEA,eACEH,EACAM,EACkE,CAClE,KAAK,QAAQ,iBAAiB,EAE9B,MAAMC,EAAkE,CACtE,aAAc,OACd,GAAID,GAAmB,CAAE,2BAA4BA,CAAgB,CACvE,EAEA,OAAO,KAAK,WACT,IAAI,CACH,KAAM,eACN,MAAOC,EACP,MAAAP,CACF,CAAC,EACA,KAAMG,GAAsEA,CAAQ,CACzF,CAEA,cACEH,EACAK,EACAG,EACAF,EACAG,EACiE,CACjE,MAAMC,EAAQ,CACZ,GAAGD,EACH,2BAA4BH,CAC9B,EAEA,YAAK,QAAQ,iBAAkB,CAAE,SAAAD,EAAU,UAAAG,EAAW,GAAGE,CAAM,CAAC,EAEzD,KAAK,WACT,IAAI,CACH,KAAM,gBAAgBL,CAAQ,IAAIG,CAAS,GAC3C,MAAAE,EACA,MAAAV,CACF,CAAC,EACA,KAAMG,GAAqEA,CAAQ,CACxF,CAEA,
|
|
6
|
-
"names": ["reportingClient_exports", "__export", "ReportingClient", "reportingClient_default", "__toCommonJS", "import_logger", "import_restClient", "config", "RestClient", "resourceName", "token", "countRequest", "logger", "response", "listRequest", "reportId", "definitionsPath", "queryParams", "variantId", "queryData", "query", "
|
|
4
|
+
"sourcesContent": ["import ReportQuery from '../types/ReportQuery'\nimport logger from '../utils/logger'\nimport RestClient from './restClient'\nimport Dict = NodeJS.Dict\nimport { components, operations } from '../types/api'\nimport { ApiConfig, Count, ListWithWarnings } from './types'\nimport type { ResultWithHeaders } from './restClient'\n\nclass ReportingClient {\n restClient: RestClient\n\n constructor(config: ApiConfig) {\n this.restClient = new RestClient('Reporting API Client', config)\n }\n\n getCount(resourceName: string, token: string, countRequest: ReportQuery): Promise<number> {\n logger.info(`Reporting client: Get count. { resourceName: ${resourceName} }`)\n\n return this.restClient\n .get({\n path: `/${resourceName}/count`,\n query: countRequest.toRecordWithFilterPrefix(true),\n token,\n })\n .then((response) => (<Count>response).count)\n }\n\n getList(resourceName: string, token: string, listRequest: ReportQuery): Promise<Array<Dict<string>>> {\n return this.getListWithWarnings(resourceName, token, listRequest).then((response) => response.data)\n }\n\n getListWithWarnings(resourceName: string, token: string, listRequest: ReportQuery): Promise<ListWithWarnings> {\n logger.info(`Reporting client: Get list. { resourceName: ${resourceName} }`)\n\n return this.restClient\n .getWithHeaders<Array<Dict<string>>>({\n path: `/${resourceName}`,\n query: listRequest.toRecordWithFilterPrefix(true),\n token,\n })\n .then((response: ResultWithHeaders<Array<Dict<string>>>) => ({\n data: response.data,\n warnings: {\n noDataAvailable: response.headers['x-no-data-warning'],\n },\n }))\n }\n\n getDefinitionSummary(\n token: string,\n reportId: string,\n definitionsPath?: string,\n ): Promise<components['schemas']['ReportDefinitionSummary']> {\n this.logInfo('Get definition summary', { reportId })\n\n const queryParams: operations['definitionSummary']['parameters']['query'] = {\n ...(definitionsPath && { dataProductDefinitionsPath: definitionsPath }),\n }\n\n return this.restClient\n .get({\n path: `/definitions/${reportId}`,\n query: queryParams,\n token,\n })\n .then((response) => <components['schemas']['ReportDefinitionSummary']>response)\n }\n\n getDefinitions(\n token: string,\n definitionsPath?: string,\n ): Promise<Array<components['schemas']['ReportDefinitionSummary']>> {\n this.logInfo('Get definitions')\n\n const queryParams: operations['definitions_1']['parameters']['query'] = {\n renderMethod: 'HTML',\n ...(definitionsPath && { dataProductDefinitionsPath: definitionsPath }),\n }\n\n return this.restClient\n .get({\n path: '/definitions',\n query: queryParams,\n token,\n })\n .then((response) => <Array<components['schemas']['ReportDefinitionSummary']>>response)\n }\n\n getDefinition(\n token: string,\n reportId: string,\n variantId: string,\n definitionsPath?: string,\n queryData?: Dict<string | string[]>,\n ): Promise<components['schemas']['SingleVariantReportDefinition']> {\n const query = {\n ...queryData,\n dataProductDefinitionsPath: definitionsPath,\n }\n\n this.logInfo('Get definition', { reportId, variantId, ...query })\n\n return this.restClient\n .get({\n path: `/definitions/${reportId}/${variantId}`,\n query,\n token,\n })\n .then((response) => <components['schemas']['SingleVariantReportDefinition']>response)\n }\n\n requestAsyncReport(\n token: string,\n reportId: string,\n variantId: string,\n query: Record<string, string | boolean | number>,\n ): Promise<Dict<string>> {\n this.logInfo('Request report', { reportId, variantId })\n\n return this.restClient\n .get({\n path: `/async/reports/${reportId}/${variantId}`,\n token,\n query,\n })\n .then((response) => <Dict<string>>response)\n }\n\n cancelAsyncRequest(\n token: string,\n reportId: string,\n variantId: string,\n executionId: string,\n dataProductDefinitionsPath?: string,\n ): Promise<Dict<string>> {\n this.logInfo('Cancel Request', { reportId, variantId, executionId })\n\n return this.restClient\n .delete({\n path: `/reports/${reportId}/${variantId}/statements/${executionId}`,\n token,\n query: {\n dataProductDefinitionsPath,\n },\n })\n .then((response) => <Dict<string>>response)\n }\n\n getAsyncReport(\n token: string,\n reportId: string,\n variantId: string,\n tableId: string,\n query: Record<string, string | string[]>,\n ): Promise<Array<Dict<string>>> {\n this.logInfo('Get Data', { reportId, variantId, tableId })\n\n return this.restClient\n .get({\n path: `/reports/${reportId}/${variantId}/tables/${tableId}/result`,\n token,\n query,\n })\n .then((response) => <Array<Dict<string>>>response)\n }\n\n getAsyncSummaryReport(\n token: string,\n reportId: string,\n variantId: string,\n tableId: string,\n summaryId: string,\n query: Dict<string | number>,\n ): Promise<Array<Dict<string>>> {\n this.logInfo('Get summary data', { reportId, variantId, tableId, summaryId })\n\n return this.restClient\n .get({\n path: `/reports/${reportId}/${variantId}/tables/${tableId}/result/summary/${summaryId}`,\n token,\n query,\n })\n .then((response) => <Array<Dict<string>>>response)\n }\n\n getAsyncReportStatus(\n token: string,\n reportId: string,\n variantId: string,\n executionId: string,\n dataProductDefinitionsPath?: string,\n tableId?: string,\n ): Promise<components['schemas']['StatementExecutionStatus']> {\n this.logInfo('Get status', { reportId, variantId, tableId, executionId })\n\n return this.restClient\n .get({\n path: `/reports/${reportId}/${variantId}/statements/${executionId}/status`,\n token,\n query: {\n dataProductDefinitionsPath,\n tableId,\n },\n })\n .then((response) => <components['schemas']['StatementExecutionStatus']>response)\n }\n\n getAsyncCount(token: string, tableId: string, dataProductDefinitionsPath?: string): Promise<number> {\n this.logInfo('Get count', { tableId })\n\n return this.restClient\n .get({\n path: `/report/tables/${tableId}/count`,\n token,\n query: {\n dataProductDefinitionsPath,\n },\n })\n .then((response) => (<Count>response).count)\n }\n\n getAsyncInteractiveCount(\n token: string,\n tableId: string,\n reportId: string,\n id: string,\n filters: ReportQuery,\n ): Promise<number> {\n this.logInfo('Get interactive count', { tableId, reportId, id })\n\n return this.restClient\n .get({\n path: `/reports/${reportId}/${id}/tables/${tableId}/count`,\n token,\n query: filters.toRecordWithFilterPrefix(true),\n })\n .then((response) => (<Count>response).count)\n }\n\n logInfo(title: string, args?: Dict<string>) {\n logger.info(`Reporting Client: ${title}:`)\n if (args && Object.keys(args).length) logger.info(JSON.stringify(args, null, 2))\n }\n}\n\nexport { ReportingClient }\nexport default ReportingClient\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
|
+
"names": ["reportingClient_exports", "__export", "ReportingClient", "reportingClient_default", "__toCommonJS", "import_logger", "import_restClient", "config", "RestClient", "resourceName", "token", "countRequest", "logger", "response", "listRequest", "reportId", "definitionsPath", "queryParams", "variantId", "queryData", "query", "executionId", "dataProductDefinitionsPath", "tableId", "summaryId", "id", "filters", "title", "args"]
|
|
7
7
|
}
|
|
@@ -3,7 +3,7 @@ import logger from '../utils/logger'
|
|
|
3
3
|
import RestClient from './restClient'
|
|
4
4
|
import Dict = NodeJS.Dict
|
|
5
5
|
import { components, operations } from '../types/api'
|
|
6
|
-
import { ApiConfig, Count,
|
|
6
|
+
import { ApiConfig, Count, ListWithWarnings } from './types'
|
|
7
7
|
import type { ResultWithHeaders } from './restClient'
|
|
8
8
|
|
|
9
9
|
class ReportingClient {
|
|
@@ -109,29 +109,6 @@ class ReportingClient {
|
|
|
109
109
|
.then((response) => <components['schemas']['SingleVariantReportDefinition']>response)
|
|
110
110
|
}
|
|
111
111
|
|
|
112
|
-
getFieldValues({
|
|
113
|
-
token,
|
|
114
|
-
definitionName,
|
|
115
|
-
variantName,
|
|
116
|
-
fieldName,
|
|
117
|
-
prefix,
|
|
118
|
-
definitionsPath,
|
|
119
|
-
}: FieldValuesRequest): Promise<Array<string>> {
|
|
120
|
-
const query = {
|
|
121
|
-
dataProductDefinitionsPath: definitionsPath,
|
|
122
|
-
prefix,
|
|
123
|
-
}
|
|
124
|
-
this.logInfo('Get field values', { definitionName, variantName, fieldName, prefix })
|
|
125
|
-
|
|
126
|
-
return this.restClient
|
|
127
|
-
.get({
|
|
128
|
-
path: `/reports/${definitionName}/${variantName}/${fieldName}`,
|
|
129
|
-
token,
|
|
130
|
-
query,
|
|
131
|
-
})
|
|
132
|
-
.then((response) => <Array<string>>response)
|
|
133
|
-
}
|
|
134
|
-
|
|
135
112
|
requestAsyncReport(
|
|
136
113
|
token: string,
|
|
137
114
|
reportId: string,
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";var y=Object.create;var
|
|
1
|
+
"use strict";var y=Object.create;var d=Object.defineProperty;var E=Object.getOwnPropertyDescriptor;var w=Object.getOwnPropertyNames;var C=Object.getPrototypeOf,v=Object.prototype.hasOwnProperty;var F=(t,e)=>{for(var o in e)d(t,o,{get:e[o],enumerable:!0})},P=(t,e,o,i)=>{if(e&&typeof e=="object"||typeof e=="function")for(let r of w(e))!v.call(t,r)&&r!==o&&d(t,r,{get:()=>e[r],enumerable:!(i=E(e,r))||i.enumerable});return t};var S=(t,e,o)=>(o=t!=null?y(C(t)):{},P(e||!t||!t.__esModule?d(o,"default",{value:t,enumerable:!0}):o,t)),V=t=>P(d({},"__esModule",{value:!0}),t);var B={};F(B,{default:()=>A,errorRequestHandler:()=>h,populateDefinitions:()=>b,populateRequestedReports:()=>k,setupResources:()=>D});module.exports=V(B);var c=S(require("../utils/definitionUtils")),m=S(require("../utils/localsHelper"));const H=(t,e)=>t[e]?t[e].toString():null,Q=t=>H(t,"dataProductDefinitionsPath"),x=t=>{const e=Q(t);return e||null},h=t=>(e,o,i,r)=>e.status===401||e.status===403?i.render("dpr/routes/authError.njk",{layoutPath:t,message:"Sorry, there is a problem with authenticating your request"}):e.status>=400?i.render("dpr/routes/serviceProblem.njk",{layoutPath:t}):r(),D=(t,e,o)=>async(i,r,a)=>{I(i,r);try{return await b(t,i,r,o),await k(t,r),a()}catch(s){return h(e)(s,i,r,a)}},I=(t,e)=>{const o=t.flash("DPR_ERRORS");o&&o[0]&&(e.locals.validationErrors=JSON.parse(o[0]))},b=async(t,e,o,i)=>{const{token:r,dprUser:a}=m.default.getValues(o),s=x(e.query),n=e.body?.dataProductDefinitionsPath,l=s||n;l&&(o.locals.dpdPathFromQuery=!0);const g=i?.dataProductDefinitionsPath;g&&(o.locals.dpdPathFromConfig=!0),o.locals.definitionsPath=l||g,o.locals.pathSuffix=`?dataProductDefinitionsPath=${o.locals.definitionsPath}`;let u;r&&(u=await t.productCollectionStoreService.getSelectedProductCollectionId(a.id)),o.locals.definitions=await Promise.all([t.reportingService.getDefinitions(r,o.locals.definitionsPath),u&&t.productCollectionService.getProductCollection(r,u)]).then(([R,p])=>{if(p&&p){const q=p.products.map(f=>f.productId);return R.filter(f=>q.includes(f.id))}return R})??[]},k=async(t,e)=>{const{dprUser:o}=m.default.getValues(e);if(o.id){const{definitions:i,definitionsPath:r}=e.locals,a=await t.requestedReportService.getAllReports(o.id);e.locals.requestedReports=r?a.filter(n=>c.default.getCurrentVariantDefinition(i,n.reportId,n.id)):a;const s=await t.recentlyViewedService.getAllReports(o.id);if(e.locals.recentlyViewedReports=r?s.filter(n=>c.default.getCurrentVariantDefinition(i,n.reportId,n.id)):s,e.locals.downloadingEnabled=t.downloadPermissionService.enabled,e.locals.bookmarkingEnabled=t.bookmarkService.enabled,e.locals.collectionsEnabled=t.productCollectionService.enabled,e.locals.requestMissingEnabled=t.missingReportService.enabled,e.locals.saveDefaultsEnabled=t.defaultFilterValuesService.enabled,e.locals.bookmarkingEnabled){const n=await t.bookmarkService.getAllBookmarks(o.id);e.locals.bookmarks=r?n.filter(l=>c.default.getCurrentVariantDefinition(i,l.reportId,l.id)):n}}};var A=D;0&&(module.exports={errorRequestHandler,populateDefinitions,populateRequestedReports,setupResources});
|
|
2
2
|
//# sourceMappingURL=setUpDprResources.js.map
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../src/dpr/middleware/setUpDprResources.ts"],
|
|
4
|
-
"sourcesContent": ["/* eslint-disable @typescript-eslint/no-explicit-any */\nimport { RequestHandler, Response, Request } from 'express'\nimport type { ParsedQs } from 'qs'\nimport { Services } from '../types/Services'\nimport { RequestedReport, StoredReportData } from '../types/UserReports'\nimport DefinitionUtils from '../utils/definitionUtils'\nimport { BookmarkStoreData } from '../types/Bookmark'\nimport { DprConfig } from '../types/DprConfig'\nimport localsHelper from '../utils/localsHelper'\n\nconst getQueryParamAsString = (query: ParsedQs, name: string) => (query[name] ? query[name].toString() : null)\nconst getDefinitionsPath = (query: ParsedQs) => getQueryParamAsString(query, 'dataProductDefinitionsPath')\n\nconst deriveDefinitionsPath = (query: ParsedQs): string | null => {\n const definitionsPath = getDefinitionsPath(query)\n if (definitionsPath) {\n return definitionsPath\n }\n\n return null\n}\n\nexport const setupResources = (services: Services, config?: DprConfig): RequestHandler => {\n return async (req, res, next) => {\n populateValidationErrors(req, res)\n try {\n await populateDefinitions(services, req, res, config)\n await populateRequestedReports(services, res)\n return next()\n } catch (error) {\n return
|
|
5
|
-
"mappings": "0jBAAA,IAAAA,EAAA,GAAAC,EAAAD,EAAA,aAAAE,EAAA,wBAAAC,EAAA,6BAAAC,EAAA,mBAAAC,IAAA,eAAAC,
|
|
6
|
-
"names": ["setUpDprResources_exports", "__export", "setUpDprResources_default", "populateDefinitions", "populateRequestedReports", "setupResources", "__toCommonJS", "import_definitionUtils", "import_localsHelper", "getQueryParamAsString", "query", "name", "getDefinitionsPath", "deriveDefinitionsPath", "definitionsPath", "
|
|
4
|
+
"sourcesContent": ["/* eslint-disable @typescript-eslint/no-explicit-any */\nimport { RequestHandler, Response, Request, ErrorRequestHandler, NextFunction } from 'express'\nimport type { ParsedQs } from 'qs'\nimport { HTTPError } from 'superagent'\nimport { Services } from '../types/Services'\nimport { RequestedReport, StoredReportData } from '../types/UserReports'\nimport DefinitionUtils from '../utils/definitionUtils'\nimport { BookmarkStoreData } from '../types/Bookmark'\nimport { DprConfig } from '../types/DprConfig'\nimport localsHelper from '../utils/localsHelper'\n\nconst getQueryParamAsString = (query: ParsedQs, name: string) => (query[name] ? query[name].toString() : null)\nconst getDefinitionsPath = (query: ParsedQs) => getQueryParamAsString(query, 'dataProductDefinitionsPath')\n\nconst deriveDefinitionsPath = (query: ParsedQs): string | null => {\n const definitionsPath = getDefinitionsPath(query)\n if (definitionsPath) {\n return definitionsPath\n }\n\n return null\n}\n\nexport const errorRequestHandler =\n (layoutPath: string): ErrorRequestHandler =>\n (error: HTTPError, _req: Request, res: Response, next: NextFunction) => {\n if (error.status === 401 || error.status === 403) {\n return res.render('dpr/routes/authError.njk', {\n layoutPath,\n message: 'Sorry, there is a problem with authenticating your request',\n })\n }\n if (error.status >= 400) {\n return res.render('dpr/routes/serviceProblem.njk', {\n layoutPath,\n })\n }\n return next()\n }\n\nexport const setupResources = (services: Services, layoutPath: string, config?: DprConfig): RequestHandler => {\n return async (req, res, next) => {\n populateValidationErrors(req, res)\n try {\n await populateDefinitions(services, req, res, config)\n await populateRequestedReports(services, res)\n return next()\n } catch (error) {\n return errorRequestHandler(layoutPath)(error, req, res, next)\n }\n }\n}\n\nconst populateValidationErrors = (req: Request, res: Response) => {\n const errors = req.flash(`DPR_ERRORS`)\n if (errors && errors[0]) {\n res.locals['validationErrors'] = JSON.parse(errors[0])\n }\n}\n\nexport const populateDefinitions = async (services: Services, req: Request, res: Response, config?: DprConfig) => {\n // Get the DPD path from the query\n const { token, dprUser } = localsHelper.getValues(res)\n\n const dpdPathFromQuery = deriveDefinitionsPath(req.query)\n const dpdPathFromBody = req.body?.dataProductDefinitionsPath\n const definitionsPathFromQuery = dpdPathFromQuery || dpdPathFromBody\n\n if (definitionsPathFromQuery) {\n res.locals['dpdPathFromQuery'] = true\n }\n\n // Get the DPD path from the config\n const dpdPathFromConfig = config?.dataProductDefinitionsPath\n if (dpdPathFromConfig) {\n res.locals['dpdPathFromConfig'] = true\n }\n\n // query takes presedence over config\n res.locals['definitionsPath'] = definitionsPathFromQuery || dpdPathFromConfig\n res.locals['pathSuffix'] = `?dataProductDefinitionsPath=${res.locals['definitionsPath']}`\n\n let selectedProductCollectionId: string | undefined\n if (token) {\n selectedProductCollectionId = await services.productCollectionStoreService.getSelectedProductCollectionId(\n dprUser.id,\n )\n }\n\n res.locals['definitions'] =\n (await Promise.all([\n services.reportingService.getDefinitions(token, res.locals['definitionsPath']),\n selectedProductCollectionId &&\n services.productCollectionService.getProductCollection(token, selectedProductCollectionId),\n ]).then(([defs, selectedProductCollection]) => {\n if (selectedProductCollection && selectedProductCollection) {\n const productIds = selectedProductCollection.products.map((product) => product.productId)\n return defs.filter((def) => productIds.includes(def.id))\n }\n return defs\n })) ?? []\n}\n\nexport const populateRequestedReports = async (services: Services, res: Response) => {\n const { dprUser } = localsHelper.getValues(res)\n if (dprUser.id) {\n const { definitions, definitionsPath } = res.locals\n\n const requested = await services.requestedReportService.getAllReports(dprUser.id)\n res.locals['requestedReports'] = !definitionsPath\n ? requested\n : requested.filter((report: RequestedReport) => {\n return DefinitionUtils.getCurrentVariantDefinition(definitions, report.reportId, report.id)\n })\n\n const recent = await services.recentlyViewedService.getAllReports(dprUser.id)\n res.locals['recentlyViewedReports'] = !definitionsPath\n ? recent\n : recent.filter((report: StoredReportData) => {\n return DefinitionUtils.getCurrentVariantDefinition(definitions, report.reportId, report.id)\n })\n\n res.locals['downloadingEnabled'] = services.downloadPermissionService.enabled\n res.locals['bookmarkingEnabled'] = services.bookmarkService.enabled\n res.locals['collectionsEnabled'] = services.productCollectionService.enabled\n res.locals['requestMissingEnabled'] = services.missingReportService.enabled\n res.locals['saveDefaultsEnabled'] = services.defaultFilterValuesService.enabled\n\n if (res.locals['bookmarkingEnabled']) {\n const bookmarks = await services.bookmarkService.getAllBookmarks(dprUser.id)\n res.locals['bookmarks'] = !definitionsPath\n ? bookmarks\n : bookmarks.filter((bookmark: BookmarkStoreData) => {\n return DefinitionUtils.getCurrentVariantDefinition(definitions, bookmark.reportId, bookmark.id)\n })\n }\n }\n}\n\nexport default setupResources\n"],
|
|
5
|
+
"mappings": "0jBAAA,IAAAA,EAAA,GAAAC,EAAAD,EAAA,aAAAE,EAAA,wBAAAC,EAAA,wBAAAC,EAAA,6BAAAC,EAAA,mBAAAC,IAAA,eAAAC,EAAAP,GAMA,IAAAQ,EAA4B,uCAG5BC,EAAyB,oCAEzB,MAAMC,EAAwB,CAACC,EAAiBC,IAAkBD,EAAMC,CAAI,EAAID,EAAMC,CAAI,EAAE,SAAS,EAAI,KACnGC,EAAsBF,GAAoBD,EAAsBC,EAAO,4BAA4B,EAEnGG,EAAyBH,GAAmC,CAChE,MAAMI,EAAkBF,EAAmBF,CAAK,EAChD,OAAII,GAIG,IACT,EAEaZ,EACVa,GACD,CAACC,EAAkBC,EAAeC,EAAeC,IAC3CH,EAAM,SAAW,KAAOA,EAAM,SAAW,IACpCE,EAAI,OAAO,2BAA4B,CAC5C,WAAAH,EACA,QAAS,4DACX,CAAC,EAECC,EAAM,QAAU,IACXE,EAAI,OAAO,gCAAiC,CACjD,WAAAH,CACF,CAAC,EAEII,EAAK,EAGHd,EAAiB,CAACe,EAAoBL,EAAoBM,IAC9D,MAAOC,EAAKJ,EAAKC,IAAS,CAC/BI,EAAyBD,EAAKJ,CAAG,EACjC,GAAI,CACF,aAAMf,EAAoBiB,EAAUE,EAAKJ,EAAKG,CAAM,EACpD,MAAMjB,EAAyBgB,EAAUF,CAAG,EACrCC,EAAK,CACd,OAASH,EAAO,CACd,OAAOd,EAAoBa,CAAU,EAAEC,EAAOM,EAAKJ,EAAKC,CAAI,CAC9D,CACF,EAGII,EAA2B,CAACD,EAAcJ,IAAkB,CAChE,MAAMM,EAASF,EAAI,MAAM,YAAY,EACjCE,GAAUA,EAAO,CAAC,IACpBN,EAAI,OAAO,iBAAsB,KAAK,MAAMM,EAAO,CAAC,CAAC,EAEzD,EAEarB,EAAsB,MAAOiB,EAAoBE,EAAcJ,EAAeG,IAAuB,CAEhH,KAAM,CAAE,MAAAI,EAAO,QAAAC,CAAQ,EAAI,EAAAC,QAAa,UAAUT,CAAG,EAE/CU,EAAmBf,EAAsBS,EAAI,KAAK,EAClDO,EAAkBP,EAAI,MAAM,2BAC5BQ,EAA2BF,GAAoBC,EAEjDC,IACFZ,EAAI,OAAO,iBAAsB,IAInC,MAAMa,EAAoBV,GAAQ,2BAC9BU,IACFb,EAAI,OAAO,kBAAuB,IAIpCA,EAAI,OAAO,gBAAqBY,GAA4BC,EAC5Db,EAAI,OAAO,WAAgB,+BAA+BA,EAAI,OAAO,eAAkB,GAEvF,IAAIc,EACAP,IACFO,EAA8B,MAAMZ,EAAS,8BAA8B,+BACzEM,EAAQ,EACV,GAGFR,EAAI,OAAO,YACR,MAAM,QAAQ,IAAI,CACjBE,EAAS,iBAAiB,eAAeK,EAAOP,EAAI,OAAO,eAAkB,EAC7Ec,GACEZ,EAAS,yBAAyB,qBAAqBK,EAAOO,CAA2B,CAC7F,CAAC,EAAE,KAAK,CAAC,CAACC,EAAMC,CAAyB,IAAM,CAC7C,GAAIA,GAA6BA,EAA2B,CAC1D,MAAMC,EAAaD,EAA0B,SAAS,IAAKE,GAAYA,EAAQ,SAAS,EACxF,OAAOH,EAAK,OAAQI,GAAQF,EAAW,SAASE,EAAI,EAAE,CAAC,CACzD,CACA,OAAOJ,CACT,CAAC,GAAM,CAAC,CACZ,EAEa7B,EAA2B,MAAOgB,EAAoBF,IAAkB,CACnF,KAAM,CAAE,QAAAQ,CAAQ,EAAI,EAAAC,QAAa,UAAUT,CAAG,EAC9C,GAAIQ,EAAQ,GAAI,CACd,KAAM,CAAE,YAAAY,EAAa,gBAAAxB,CAAgB,EAAII,EAAI,OAEvCqB,EAAY,MAAMnB,EAAS,uBAAuB,cAAcM,EAAQ,EAAE,EAChFR,EAAI,OAAO,iBAAuBJ,EAE9ByB,EAAU,OAAQC,GACT,EAAAC,QAAgB,4BAA4BH,EAAaE,EAAO,SAAUA,EAAO,EAAE,CAC3F,EAHDD,EAKJ,MAAMG,EAAS,MAAMtB,EAAS,sBAAsB,cAAcM,EAAQ,EAAE,EAa5E,GAZAR,EAAI,OAAO,sBAA4BJ,EAEnC4B,EAAO,OAAQF,GACN,EAAAC,QAAgB,4BAA4BH,EAAaE,EAAO,SAAUA,EAAO,EAAE,CAC3F,EAHDE,EAKJxB,EAAI,OAAO,mBAAwBE,EAAS,0BAA0B,QACtEF,EAAI,OAAO,mBAAwBE,EAAS,gBAAgB,QAC5DF,EAAI,OAAO,mBAAwBE,EAAS,yBAAyB,QACrEF,EAAI,OAAO,sBAA2BE,EAAS,qBAAqB,QACpEF,EAAI,OAAO,oBAAyBE,EAAS,2BAA2B,QAEpEF,EAAI,OAAO,mBAAuB,CACpC,MAAMyB,EAAY,MAAMvB,EAAS,gBAAgB,gBAAgBM,EAAQ,EAAE,EAC3ER,EAAI,OAAO,UAAgBJ,EAEvB6B,EAAU,OAAQC,GACT,EAAAH,QAAgB,4BAA4BH,EAAaM,EAAS,SAAUA,EAAS,EAAE,CAC/F,EAHDD,CAIN,CACF,CACF,EAEA,IAAO1C,EAAQI",
|
|
6
|
+
"names": ["setUpDprResources_exports", "__export", "setUpDprResources_default", "errorRequestHandler", "populateDefinitions", "populateRequestedReports", "setupResources", "__toCommonJS", "import_definitionUtils", "import_localsHelper", "getQueryParamAsString", "query", "name", "getDefinitionsPath", "deriveDefinitionsPath", "definitionsPath", "layoutPath", "error", "_req", "res", "next", "services", "config", "req", "populateValidationErrors", "errors", "token", "dprUser", "localsHelper", "dpdPathFromQuery", "dpdPathFromBody", "definitionsPathFromQuery", "dpdPathFromConfig", "selectedProductCollectionId", "defs", "selectedProductCollection", "productIds", "product", "def", "definitions", "requested", "report", "DefinitionUtils", "recent", "bookmarks", "bookmark"]
|
|
7
7
|
}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
/* eslint-disable @typescript-eslint/no-explicit-any */
|
|
2
|
-
import { RequestHandler, Response, Request } from 'express'
|
|
2
|
+
import { RequestHandler, Response, Request, ErrorRequestHandler, NextFunction } from 'express'
|
|
3
3
|
import type { ParsedQs } from 'qs'
|
|
4
|
+
import { HTTPError } from 'superagent'
|
|
4
5
|
import { Services } from '../types/Services'
|
|
5
6
|
import { RequestedReport, StoredReportData } from '../types/UserReports'
|
|
6
7
|
import DefinitionUtils from '../utils/definitionUtils'
|
|
@@ -20,7 +21,24 @@ const deriveDefinitionsPath = (query: ParsedQs): string | null => {
|
|
|
20
21
|
return null
|
|
21
22
|
}
|
|
22
23
|
|
|
23
|
-
export const
|
|
24
|
+
export const errorRequestHandler =
|
|
25
|
+
(layoutPath: string): ErrorRequestHandler =>
|
|
26
|
+
(error: HTTPError, _req: Request, res: Response, next: NextFunction) => {
|
|
27
|
+
if (error.status === 401 || error.status === 403) {
|
|
28
|
+
return res.render('dpr/routes/authError.njk', {
|
|
29
|
+
layoutPath,
|
|
30
|
+
message: 'Sorry, there is a problem with authenticating your request',
|
|
31
|
+
})
|
|
32
|
+
}
|
|
33
|
+
if (error.status >= 400) {
|
|
34
|
+
return res.render('dpr/routes/serviceProblem.njk', {
|
|
35
|
+
layoutPath,
|
|
36
|
+
})
|
|
37
|
+
}
|
|
38
|
+
return next()
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
export const setupResources = (services: Services, layoutPath: string, config?: DprConfig): RequestHandler => {
|
|
24
42
|
return async (req, res, next) => {
|
|
25
43
|
populateValidationErrors(req, res)
|
|
26
44
|
try {
|
|
@@ -28,7 +46,7 @@ export const setupResources = (services: Services, config?: DprConfig): RequestH
|
|
|
28
46
|
await populateRequestedReports(services, res)
|
|
29
47
|
return next()
|
|
30
48
|
} catch (error) {
|
|
31
|
-
return
|
|
49
|
+
return errorRequestHandler(layoutPath)(error, req, res, next)
|
|
32
50
|
}
|
|
33
51
|
}
|
|
34
52
|
}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
{% extends layoutPath %}
|
|
2
|
+
|
|
3
|
+
{% block content %}
|
|
4
|
+
<h1 class="govuk-heading-xl">Sorry, there is a problem with authenticating your request.</h1>
|
|
5
|
+
<p>The problem has been reported to the service team.</p>
|
|
6
|
+
<p>Try again later.</p>
|
|
7
|
+
<h2 class="govuk-heading-m">Get help</h2>
|
|
8
|
+
<p>Contact the helpdesk on 0800 917 5148 or #6598 from inside an establishment.</p>
|
|
9
|
+
<p><a class="govuk-link--no-visited-state" href="{{ digitalPrisonServicesUrl }}">Go to digital services home page</a></p>
|
|
10
|
+
{% endblock %}
|
package/dpr/routes/index.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";var
|
|
1
|
+
"use strict";var l=Object.create;var i=Object.defineProperty;var g=Object.getOwnPropertyDescriptor;var y=Object.getOwnPropertyNames;var R=Object.getPrototypeOf,v=Object.prototype.hasOwnProperty;var d=(e,r)=>{for(var t in r)i(e,t,{get:r[t],enumerable:!0})},m=(e,r,t,u)=>{if(r&&typeof r=="object"||typeof r=="function")for(let o of y(r))!v.call(e,o)&&o!==t&&i(e,o,{get:()=>r[o],enumerable:!(u=g(r,o))||u.enumerable});return e};var s=(e,r,t)=>(t=e!=null?l(R(e)):{},m(r||!e||!e.__esModule?i(t,"default",{value:e,enumerable:!0}):t,e)),P=e=>m(i({},"__esModule",{value:!0}),e);var q={};d(q,{default:()=>h});module.exports=P(q);var n=require("express"),f=s(require("../utils/logger")),p=s(require("./journeys/routes")),a=s(require("../middleware/setUpNestedRoute")),c=require("../middleware/setUpDprResources");function S(e){f.default.info("Initialiasing DPR routes...");const r=(0,n.Router)({mergeParams:!0});return r.use("/",(0,a.default)(),(0,p.default)(e),(0,c.errorRequestHandler)(e.layoutPath)),r}var h=S;
|
|
2
2
|
//# sourceMappingURL=index.js.map
|
package/dpr/routes/index.js.map
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../src/dpr/routes/index.ts"],
|
|
4
|
-
"sourcesContent": ["import { Router } from 'express'\nimport type { Services } from '../types/Services'\nimport logger from '../utils/logger'\nimport JourneyRoutes from './journeys/routes'\n// middleware\nimport setUpNestedRoute from '../middleware/setUpNestedRoute'\n\nfunction routes(routeImportParams: { services: Services; layoutPath: string }) {\n logger.info('Initialiasing DPR routes...')\n const router = Router({ mergeParams: true })\n router.use('/'
|
|
5
|
-
"mappings": "0jBAAA,IAAAA,EAAA,GAAAC,EAAAD,EAAA,aAAAE,IAAA,eAAAC,EAAAH,GAAA,IAAAI,EAAuB,mBAEvBC,EAAmB,8BACnBC,EAA0B,gCAE1BC,EAA6B,
|
|
6
|
-
"names": ["routes_exports", "__export", "routes_default", "__toCommonJS", "import_express", "import_logger", "import_routes", "import_setUpNestedRoute", "routes", "routeImportParams", "logger", "router", "setUpNestedRoute", "JourneyRoutes"]
|
|
4
|
+
"sourcesContent": ["import { Router } from 'express'\nimport type { Services } from '../types/Services'\nimport logger from '../utils/logger'\nimport JourneyRoutes from './journeys/routes'\n// middleware\nimport setUpNestedRoute from '../middleware/setUpNestedRoute'\nimport { errorRequestHandler } from '../middleware/setUpDprResources'\n\nfunction routes(routeImportParams: { services: Services; layoutPath: string }) {\n logger.info('Initialiasing DPR routes...')\n const router = Router({ mergeParams: true })\n router.use(\n '/',\n setUpNestedRoute(),\n JourneyRoutes(routeImportParams),\n errorRequestHandler(routeImportParams.layoutPath),\n )\n return router\n}\n\nexport default routes\n"],
|
|
5
|
+
"mappings": "0jBAAA,IAAAA,EAAA,GAAAC,EAAAD,EAAA,aAAAE,IAAA,eAAAC,EAAAH,GAAA,IAAAI,EAAuB,mBAEvBC,EAAmB,8BACnBC,EAA0B,gCAE1BC,EAA6B,6CAC7BC,EAAoC,2CAEpC,SAASC,EAAOC,EAA+D,CAC7E,EAAAC,QAAO,KAAK,6BAA6B,EACzC,MAAMC,KAAS,UAAO,CAAE,YAAa,EAAK,CAAC,EAC3C,OAAAA,EAAO,IACL,OACA,EAAAC,SAAiB,KACjB,EAAAC,SAAcJ,CAAiB,KAC/B,uBAAoBA,EAAkB,UAAU,CAClD,EACOE,CACT,CAEA,IAAOV,EAAQO",
|
|
6
|
+
"names": ["routes_exports", "__export", "routes_default", "__toCommonJS", "import_express", "import_logger", "import_routes", "import_setUpNestedRoute", "import_setUpDprResources", "routes", "routeImportParams", "logger", "router", "setUpNestedRoute", "JourneyRoutes"]
|
|
7
7
|
}
|
package/dpr/routes/index.ts
CHANGED
|
@@ -4,11 +4,17 @@ import logger from '../utils/logger'
|
|
|
4
4
|
import JourneyRoutes from './journeys/routes'
|
|
5
5
|
// middleware
|
|
6
6
|
import setUpNestedRoute from '../middleware/setUpNestedRoute'
|
|
7
|
+
import { errorRequestHandler } from '../middleware/setUpDprResources'
|
|
7
8
|
|
|
8
9
|
function routes(routeImportParams: { services: Services; layoutPath: string }) {
|
|
9
10
|
logger.info('Initialiasing DPR routes...')
|
|
10
11
|
const router = Router({ mergeParams: true })
|
|
11
|
-
router.use(
|
|
12
|
+
router.use(
|
|
13
|
+
'/',
|
|
14
|
+
setUpNestedRoute(),
|
|
15
|
+
JourneyRoutes(routeImportParams),
|
|
16
|
+
errorRequestHandler(routeImportParams.layoutPath),
|
|
17
|
+
)
|
|
12
18
|
return router
|
|
13
19
|
}
|
|
14
20
|
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
"use strict";var t=require("cypress-tests/cypressUtils");context("Try to run the app with failing and broken api endpoints",()=>{const i="/embedded/platform/";beforeEach(()=>{(0,t.stubBaseTasks)()}),describe("erroring endpoints - reports",()=>{it("should cope with definitions list failing",()=>{(0,t.executeReportStubs)(),cy.task("stubDefinitionRequestExamplesSuccess"),cy.task("stubRequestSuccessResult20"),cy.task("getDefinitionSummariesFailure"),cy.visit(i),cy.findByRole("heading",{name:/Sorry, there is a problem with the service/}).should("be.visible")}),it("should cope with definitions list being unauthd",()=>{(0,t.executeReportStubs)(),cy.task("stubDefinitionRequestExamplesSuccess"),cy.task("stubRequestSuccessResult20"),cy.task("getDefinitionSummariesUnauthenticatedFailure"),cy.visit(i),cy.findByRole("heading",{name:/Sorry, there is a problem with authenticating your request/}).should("be.visible")}),it("should cope with single definition endpoint failing",()=>{(0,t.executeReportStubs)(),cy.task("stubDefinitionRequestExamplesSuccess"),cy.task("stubRequestSuccessResult20"),cy.task("getSingleDefinitionFailure"),cy.visit(i),cy.findByLabelText(/Reports catalogue.*/i).within(()=>{cy.findByRole("row",{name:(s,e)=>!!e?.textContent?.includes("Successful Report")&&!!e?.textContent?.includes("this will succeed")}).within(()=>{cy.findByRole("link",{name:"Request report"}).click()})}),cy.findByRole("heading",{name:/Your report has failed to generate/}).should("be.visible")}),it("should cope with single definition failing",()=>{(0,t.executeReportStubs)(),cy.task("stubDefinitionRequestExamplesSuccess"),cy.task("stubRequestSuccessResult20"),cy.task("getSingleDefinitionFailure"),cy.visit(i),cy.findByLabelText(/Reports catalogue.*/i).within(()=>{cy.findByRole("row",{name:(s,e)=>!!e?.textContent?.includes("Successful Report")&&!!e?.textContent?.includes("this will succeed")}).within(()=>{cy.findByRole("link",{name:"Request report"}).click()})}),cy.findByRole("heading",{name:/Your report has failed to generate/}).should("be.visible")}),it("should cope with single definition variant failing",()=>{(0,t.executeReportStubs)(),cy.task("stubDefinitionRequestExamplesSuccess"),cy.task("stubRequestSuccessResult20"),cy.task("getSingleDefinitionVariantFailure"),cy.visit(i),cy.findByLabelText(/Reports catalogue.*/i).within(()=>{cy.findByRole("row",{name:(s,e)=>!!e?.textContent?.includes("Successful Report")&&!!e?.textContent?.includes("this will succeed")}).within(()=>{cy.findByRole("link",{name:"Request report"}).click()})}),cy.findByRole("heading",{name:/Your report has failed to generate/}).should("be.visible")}),it("should cope with count failing",()=>{(0,t.executeReportStubs)(),cy.task("stubDefinitionRequestExamplesSuccess"),cy.task("stubRequestSuccessResult20"),cy.task("getAsyncCountFailure"),cy.visit(i),cy.findByLabelText(/Reports catalogue.*/i).within(()=>{cy.findByRole("row",{name:(s,e)=>!!e?.textContent?.includes("Successful Report")&&!!e?.textContent?.includes("this will succeed")}).within(()=>{cy.findByRole("link",{name:"Request report"}).click()})}),cy.findByRole("button",{name:/Request/}).click(),cy.findByRole("heading",{name:/Your report has failed to generate/}).should("be.visible")}),it("should cope with requestAsyncReport failing",()=>{(0,t.executeReportStubs)(),cy.task("stubDefinitionRequestExamplesSuccess"),cy.task("stubRequestSuccessResult20"),cy.task("requestAsyncReportFailure"),cy.visit(i),cy.findByLabelText(/Reports catalogue.*/i).within(()=>{cy.findByRole("row",{name:(s,e)=>!!e?.textContent?.includes("Successful Report")&&!!e?.textContent?.includes("this will succeed")}).within(()=>{cy.findByRole("link",{name:"Request report"}).click()})}),cy.findByRole("button",{name:/Request/}).click(),cy.findByRole("heading",{name:/Your report has failed to generate/}).should("be.visible")}),it("should cope with cancelAsyncRequest failing",()=>{(0,t.stubBaseTasks)(),(0,t.stubDefinitionsTasks)(),cy.task("stubViewAsyncReportingResults"),cy.task("stubRequestSuccessReportTablesCount"),cy.task("stubAsyncRequestSuccessReportTablesCount"),cy.task("stubDefinitionRequestExamplesSuccess"),cy.task("stubRequestSuccessResult20"),cy.task("cancelAsyncRequestFailure"),cy.visit(i),cy.findByLabelText(/Reports catalogue.*/i).within(()=>{cy.findByRole("row",{name:(s,e)=>!!e?.textContent?.includes("Successful Report")&&!!e?.textContent?.includes("this will succeed")}).within(()=>{cy.findByRole("link",{name:"Request report"}).click()})}),cy.findByRole("button",{name:/Request/}).click(),cy.findByRole("button",{name:/Cancel request/}).click(),cy.findByRole("heading",{name:/Your report has failed to generate/}).should("be.visible")}),it("should cope with getAsyncReport failing",()=>{(0,t.executeReportStubs)(),cy.task("stubDefinitionRequestExamplesSuccess"),cy.task("stubRequestSuccessResult20"),cy.task("getAsyncReportFailure"),cy.visit(i),cy.findByLabelText(/Reports catalogue.*/i).within(()=>{cy.findByRole("row",{name:(s,e)=>!!e?.textContent?.includes("Successful Report")&&!!e?.textContent?.includes("this will succeed")}).within(()=>{cy.findByRole("link",{name:"Request report"}).click()})}),cy.findByRole("button",{name:/Request/}).click(),cy.findByRole("heading",{name:/Your report has failed to generate/}).should("be.visible")}),it("should cope with getAsyncSummaryReport failing",()=>{(0,t.stubBaseTasks)(),(0,t.stubDefinitionsTasks)(),cy.task("stubViewAsyncReportingResults"),cy.task("getAsyncSummaryReportFailure"),cy.visit(i),cy.findByLabelText(/Reports catalogue.*/i).within(()=>{cy.findByRole("row",{name:(s,e)=>!!e?.textContent?.includes("Successful Report")&&!!e?.textContent?.includes("this will succeed")}).within(()=>{cy.findByRole("link",{name:"Request report"}).click()})}),cy.findByRole("button",{name:/Request/}).click(),cy.findByRole("heading",{name:/Your report has failed to generate/}).should("be.visible")}),it("should cope with getAsyncReportStatus failing",()=>{(0,t.executeReportStubs)(),cy.task("stubDefinitionRequestExamplesSuccess"),cy.task("getAsyncReportStatusFailure"),cy.visit(i),cy.findByLabelText(/Reports catalogue.*/i).within(()=>{cy.findByRole("row",{name:(s,e)=>!!e?.textContent?.includes("Successful Report")&&!!e?.textContent?.includes("this will succeed")}).within(()=>{cy.findByRole("link",{name:"Request report"}).click()})}),cy.findByRole("button",{name:/Request/}).click(),cy.findByRole("heading",{name:/Your report has failed to generate/}).should("be.visible")})}),describe("erroring endpoints - dashboards",()=>{it("should cope with single definition endpoint failing",()=>{(0,t.executeDashboardStubs)(),cy.task("stubDataQualityDashboardsResultMock"),cy.task("stubListExampleDashboard"),cy.task("stubDefinitionFeatureTestingInteractive"),cy.task("getSingleDashboardFailure"),cy.visit(i),cy.findByLabelText(/Reports catalogue.*/i).within(()=>{cy.findByRole("row",{name:(s,e)=>!!e.textContent?.includes("Data quality data set")}).within(()=>{cy.findByRole("link",{name:"Request dashboard"}).click()})}),cy.findByRole("heading",{name:/Your report has failed to generate/}).should("be.visible")}),it("should cope with requestAsyncDashboard failing",()=>{(0,t.executeDashboardStubs)(),cy.task("stubDataQualityDashboardsResultMock"),cy.task("stubListExampleDashboard"),cy.task("stubDefinitionFeatureTestingInteractive"),cy.task("requestAsyncDashboardFailure"),cy.visit(i),cy.findByLabelText(/Reports catalogue.*/i).within(()=>{cy.findByRole("row",{name:(s,e)=>!!e.textContent?.includes("Data quality data set")}).within(()=>{cy.findByRole("link",{name:"Request dashboard"}).click()})}),cy.findByRole("button",{name:"Request dashboard"}).click(),cy.findByRole("heading",{name:/Your report has failed to generate/}).should("be.visible")}),it("should cope with getAsyncDashboard failing",()=>{(0,t.executeDashboardStubs)(),cy.task("stubDataQualityDashboardsResultMock"),cy.task("stubListExampleDashboard"),cy.task("stubDefinitionFeatureTestingInteractive"),cy.task("getAsyncDashboardFailure"),cy.visit(i),cy.findByLabelText(/Reports catalogue.*/i).within(()=>{cy.findByRole("row",{name:(s,e)=>!!e.textContent?.includes("Data quality data set")}).within(()=>{cy.findByRole("link",{name:"Request dashboard"}).click()})}),cy.findByRole("button",{name:"Request dashboard"}).click(),cy.findByRole("heading",{name:/Your report has failed to generate/}).should("be.visible")}),it("should cope with getAsyncDashboardStatus failing",()=>{(0,t.stubBaseTasks)(),(0,t.stubDefinitionsTasks)(),cy.task("stubViewAsyncResults"),cy.task("stubDataQualityDashboardsResultMock"),cy.task("stubListExampleDashboard"),cy.task("stubDefinitionFeatureTestingInteractive"),cy.task("getAsyncDashboardStatusFailure"),cy.visit(i),cy.findByLabelText(/Reports catalogue.*/i).within(()=>{cy.findByRole("row",{name:(s,e)=>!!e.textContent?.includes("Data quality data set")}).within(()=>{cy.findByRole("link",{name:"Request dashboard"}).click()})}),cy.findByRole("button",{name:"Request dashboard"}).click(),cy.findByRole("heading",{name:/Your report has failed to generate/}).should("be.visible")}),it("should cope with cancelAsyncRequest failing",()=>{(0,t.stubBaseTasks)(),(0,t.stubDefinitionsTasks)(),cy.task("stubReportsStartedStatus"),cy.task("stubMockDashboardsStatusStarted"),cy.task("stubViewAsyncResults"),cy.task("stubDataQualityDashboardsResultMock"),cy.task("stubListExampleDashboard"),cy.task("stubDefinitionFeatureTestingInteractive"),cy.task("cancelAsyncRequestDashboardFailure"),cy.visit(i),cy.findByLabelText(/Reports catalogue.*/i).within(()=>{cy.findByRole("row",{name:(s,e)=>!!e.textContent?.includes("Data quality data set")}).within(()=>{cy.findByRole("link",{name:"Request dashboard"}).click()})}),cy.findByRole("button",{name:/Request/}).click(),cy.findByRole("button",{name:/Cancel request/}).click(),cy.task("stubMockDashboardsStatusFinished"),cy.findByRole("heading",{name:/Failed to abort request/}).should("be.visible")})})});
|
|
2
|
+
//# sourceMappingURL=api-failures.cy.js.map
|