@researchdatabox/redbox-core 0.0.0-bootstrap.0 → 0.0.1-beta.10213
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/CoreController.d.ts +4 -0
- package/dist/CoreController.d.ts.map +1 -1
- package/dist/CoreController.js +68 -23
- package/dist/CoreService.d.ts +1 -1
- package/dist/CoreService.d.ts.map +1 -1
- package/dist/CoreService.js +1 -1
- package/dist/DatastreamService.d.ts +5 -2
- package/dist/DatastreamService.d.ts.map +1 -1
- package/dist/HarvestRunService.d.ts +49 -0
- package/dist/HarvestRunService.d.ts.map +1 -0
- package/dist/HarvestRunService.js +13 -0
- package/dist/IntegrationAuditParams.d.ts +11 -0
- package/dist/IntegrationAuditParams.js +14 -0
- package/dist/QueueService.d.ts +1 -1
- package/dist/QueueService.d.ts.map +1 -1
- package/dist/RecordAuditParams.d.ts +2 -0
- package/dist/RecordAuditParams.d.ts.map +1 -1
- package/dist/RecordAuditParams.js +3 -1
- package/dist/RecordsService.d.ts +52 -2
- package/dist/RecordsService.d.ts.map +1 -1
- package/dist/StorageService.d.ts +6 -2
- package/dist/StorageService.d.ts.map +1 -1
- package/dist/api-routes/apib.d.ts +7 -0
- package/dist/api-routes/apib.d.ts.map +1 -0
- package/dist/api-routes/apib.js +43 -0
- package/dist/api-routes/define.d.ts +4 -0
- package/dist/api-routes/define.d.ts.map +1 -0
- package/dist/api-routes/define.js +29 -0
- package/dist/api-routes/groups/admin.d.ts +6 -0
- package/dist/api-routes/groups/admin.d.ts.map +1 -0
- package/dist/api-routes/groups/admin.js +53 -0
- package/dist/api-routes/groups/appconfig.d.ts +4 -0
- package/dist/api-routes/groups/appconfig.d.ts.map +1 -0
- package/dist/api-routes/groups/appconfig.js +33 -0
- package/dist/api-routes/groups/branding.d.ts +8 -0
- package/dist/api-routes/groups/branding.d.ts.map +1 -0
- package/dist/api-routes/groups/branding.js +61 -0
- package/dist/api-routes/groups/dashboard-config.d.ts +11 -0
- package/dist/api-routes/groups/dashboard-config.d.ts.map +1 -0
- package/dist/api-routes/groups/dashboard-config.js +90 -0
- package/dist/api-routes/groups/export.d.ts +3 -0
- package/dist/api-routes/groups/export.d.ts.map +1 -0
- package/dist/api-routes/groups/export.js +30 -0
- package/dist/api-routes/groups/forms.d.ts +4 -0
- package/dist/api-routes/groups/forms.d.ts.map +1 -0
- package/dist/api-routes/groups/forms.js +29 -0
- package/dist/api-routes/groups/harvest-runs.d.ts +5 -0
- package/dist/api-routes/groups/harvest-runs.d.ts.map +1 -0
- package/dist/api-routes/groups/harvest-runs.js +79 -0
- package/dist/api-routes/groups/integration-audit.d.ts +3 -0
- package/dist/api-routes/groups/integration-audit.d.ts.map +1 -0
- package/dist/api-routes/groups/integration-audit.js +35 -0
- package/dist/api-routes/groups/named-query.d.ts +8 -0
- package/dist/api-routes/groups/named-query.d.ts.map +1 -0
- package/dist/api-routes/groups/named-query.js +54 -0
- package/dist/api-routes/groups/notifications.d.ts +3 -0
- package/dist/api-routes/groups/notifications.d.ts.map +1 -0
- package/dist/api-routes/groups/notifications.js +20 -0
- package/dist/api-routes/groups/records.d.ts +28 -0
- package/dist/api-routes/groups/records.d.ts.map +1 -0
- package/dist/api-routes/groups/records.js +353 -0
- package/dist/api-routes/groups/recordtypes.d.ts +4 -0
- package/dist/api-routes/groups/recordtypes.d.ts.map +1 -0
- package/dist/api-routes/groups/recordtypes.js +27 -0
- package/dist/api-routes/groups/reports.d.ts +9 -0
- package/dist/api-routes/groups/reports.d.ts.map +1 -0
- package/dist/api-routes/groups/reports.js +63 -0
- package/dist/api-routes/groups/search-query.d.ts +4 -0
- package/dist/api-routes/groups/search-query.d.ts.map +1 -0
- package/dist/api-routes/groups/search-query.js +51 -0
- package/dist/api-routes/groups/search.d.ts +6 -0
- package/dist/api-routes/groups/search.d.ts.map +1 -0
- package/dist/api-routes/groups/search.js +31 -0
- package/dist/api-routes/groups/translation.d.ts +8 -0
- package/dist/api-routes/groups/translation.d.ts.map +1 -0
- package/dist/api-routes/groups/translation.js +82 -0
- package/dist/api-routes/groups/users.d.ts +17 -0
- package/dist/api-routes/groups/users.d.ts.map +1 -0
- package/dist/api-routes/groups/users.js +149 -0
- package/dist/api-routes/groups/vocabulary.d.ts +10 -0
- package/dist/api-routes/groups/vocabulary.d.ts.map +1 -0
- package/dist/api-routes/groups/vocabulary.js +97 -0
- package/dist/api-routes/helpers.d.ts +29 -0
- package/dist/api-routes/helpers.d.ts.map +1 -0
- package/dist/api-routes/helpers.js +485 -0
- package/dist/api-routes/index.d.ts +27 -0
- package/dist/api-routes/index.d.ts.map +1 -0
- package/dist/api-routes/index.js +43 -0
- package/dist/api-routes/openapi.d.ts +26 -0
- package/dist/api-routes/openapi.d.ts.map +1 -0
- package/dist/api-routes/openapi.js +292 -0
- package/dist/api-routes/request-extraction.d.ts +14 -0
- package/dist/api-routes/request-extraction.d.ts.map +1 -0
- package/dist/api-routes/request-extraction.js +100 -0
- package/dist/api-routes/route-factory.d.ts +3 -0
- package/dist/api-routes/route-factory.d.ts.map +1 -0
- package/dist/api-routes/route-factory.js +30 -0
- package/dist/api-routes/route-registry.d.ts +24 -0
- package/dist/api-routes/route-registry.d.ts.map +1 -0
- package/dist/api-routes/route-registry.js +117 -0
- package/dist/api-routes/route-resolution.d.ts +4 -0
- package/dist/api-routes/route-resolution.d.ts.map +1 -0
- package/dist/api-routes/route-resolution.js +71 -0
- package/dist/api-routes/schemas/common.d.ts +35 -0
- package/dist/api-routes/schemas/common.d.ts.map +1 -0
- package/dist/api-routes/schemas/common.js +146 -0
- package/dist/api-routes/schemas/responses.d.ts +972 -0
- package/dist/api-routes/schemas/responses.d.ts.map +1 -0
- package/dist/api-routes/schemas/responses.js +512 -0
- package/dist/api-routes/types.d.ts +70 -0
- package/dist/api-routes/types.d.ts.map +1 -0
- package/dist/api-routes/types.js +3 -0
- package/dist/api-routes/validation.d.ts +32 -0
- package/dist/api-routes/validation.d.ts.map +1 -0
- package/dist/api-routes/validation.js +142 -0
- package/dist/api-routes/zod-openapi.d.ts +3 -0
- package/dist/api-routes/zod-openapi.d.ts.map +1 -0
- package/dist/api-routes/zod-openapi.js +8 -0
- package/dist/bootstrap.d.ts.map +1 -1
- package/dist/bootstrap.js +12 -12
- package/dist/config/agendaQueue.config.d.ts +33 -6
- package/dist/config/agendaQueue.config.d.ts.map +1 -1
- package/dist/config/agendaQueue.config.js +40 -18
- package/dist/config/auth.config.d.ts.map +1 -1
- package/dist/config/auth.config.js +29 -2
- package/dist/config/branding.config.d.ts +2 -1
- package/dist/config/branding.config.d.ts.map +1 -1
- package/dist/config/branding.config.js +5 -95
- package/dist/config/brandingConfigurationDefaults.config.d.ts +3 -0
- package/dist/config/brandingConfigurationDefaults.config.d.ts.map +1 -1
- package/dist/config/brandingConfigurationDefaults.config.js +161 -5
- package/dist/config/custom.config.d.ts +6 -0
- package/dist/config/custom.config.d.ts.map +1 -1
- package/dist/config/custom.config.js +10 -1
- package/dist/config/dashboardtype.config.d.ts +5 -0
- package/dist/config/dashboardtype.config.d.ts.map +1 -1
- package/dist/config/dashboardtype.config.js +1 -1
- package/dist/config/dashboardview.config.d.ts +24 -0
- package/dist/config/dashboardview.config.d.ts.map +1 -0
- package/dist/config/dashboardview.config.js +137 -0
- package/dist/config/dompurify.config.d.ts +1 -0
- package/dist/config/dompurify.config.d.ts.map +1 -1
- package/dist/config/dompurify.config.js +5 -4
- package/dist/config/emailnotification.config.d.ts.map +1 -1
- package/dist/config/emailnotification.config.js +2 -1
- package/dist/config/figshareDev.config.d.ts +12 -0
- package/dist/config/figshareDev.config.js +9 -0
- package/dist/config/form.config.d.ts +4 -0
- package/dist/config/form.config.d.ts.map +1 -1
- package/dist/config/form.config.js +1 -1
- package/dist/config/harvestRuns.config.d.ts +9 -0
- package/dist/config/harvestRuns.config.d.ts.map +1 -0
- package/dist/config/harvestRuns.config.js +11 -0
- package/dist/config/http.config.d.ts +13 -1
- package/dist/config/http.config.d.ts.map +1 -1
- package/dist/config/http.config.js +201 -38
- package/dist/config/index.d.ts +14 -19
- package/dist/config/index.d.ts.map +1 -1
- package/dist/config/index.js +10 -15
- package/dist/config/namedQuery.config.d.ts +26 -4
- package/dist/config/namedQuery.config.d.ts.map +1 -1
- package/dist/config/namedQuery.config.js +7 -350
- package/dist/config/policies.config.d.ts +3 -0
- package/dist/config/policies.config.d.ts.map +1 -1
- package/dist/config/policies.config.js +35 -1
- package/dist/config/record.config.d.ts.map +1 -1
- package/dist/config/record.config.js +2 -1
- package/dist/config/recordtype.config.d.ts +28 -0
- package/dist/config/recordtype.config.d.ts.map +1 -1
- package/dist/config/recordtype.config.js +105 -13
- package/dist/config/redboxSession.config.d.ts +3 -0
- package/dist/config/redboxSession.config.d.ts.map +1 -1
- package/dist/config/redboxSession.config.js +1 -1
- package/dist/config/report.config.d.ts +2 -11
- package/dist/config/report.config.d.ts.map +1 -1
- package/dist/config/report.config.js +3 -49
- package/dist/config/reusableContributorFormDefinitions.config.d.ts +1 -1
- package/dist/config/reusableContributorFormDefinitions.config.d.ts.map +1 -1
- package/dist/config/reusableContributorFormDefinitions.config.js +371 -206
- package/dist/config/reusableViewFormDefinitions.config.js +3 -3
- package/dist/config/routes.config.d.ts +5 -2
- package/dist/config/routes.config.d.ts.map +1 -1
- package/dist/config/routes.config.js +55 -117
- package/dist/config/storage.config.d.ts +20 -2
- package/dist/config/storage.config.d.ts.map +1 -1
- package/dist/config/storage.config.js +2 -1
- package/dist/config/validators.config.d.ts +6 -4
- package/dist/config/validators.config.d.ts.map +1 -1
- package/dist/config/validators.config.js +5 -3
- package/dist/config/vocab.config.d.ts +30 -0
- package/dist/config/vocab.config.d.ts.map +1 -1
- package/dist/config/vocab.config.js +21 -1
- package/dist/config/webpack.config.d.ts.map +1 -1
- package/dist/config/webpack.config.js +18 -12
- package/dist/config/workflow.config.d.ts +0 -1
- package/dist/config/workflow.config.d.ts.map +1 -1
- package/dist/config/workflow.config.js +1 -137
- package/dist/configmodels/AdminSidebarConfig.d.ts.map +1 -1
- package/dist/configmodels/AdminSidebarConfig.js +4 -3
- package/dist/configmodels/AuthorizedDomainsEmails.d.ts +48 -0
- package/dist/configmodels/AuthorizedDomainsEmails.d.ts.map +1 -1
- package/dist/configmodels/AuthorizedDomainsEmails.js +50 -2
- package/dist/configmodels/ConfigModels.d.ts +7 -1
- package/dist/configmodels/ConfigModels.d.ts.map +1 -1
- package/dist/configmodels/ConfigModels.js +41 -1
- package/dist/configmodels/DashboardTableOverrideConfig.d.ts +1011 -0
- package/dist/configmodels/DashboardTableOverrideConfig.d.ts.map +1 -0
- package/dist/configmodels/DashboardTableOverrideConfig.js +138 -0
- package/dist/configmodels/DoiPublishing.d.ts +4711 -0
- package/dist/configmodels/DoiPublishing.js +639 -0
- package/dist/configmodels/FigsharePublishing.d.ts +1376 -0
- package/dist/configmodels/FigsharePublishing.js +630 -0
- package/dist/configmodels/IntegrationNotificationConfig.d.ts +133 -0
- package/dist/configmodels/IntegrationNotificationConfig.d.ts.map +1 -0
- package/dist/configmodels/IntegrationNotificationConfig.js +64 -0
- package/dist/configmodels/SystemMessage.d.ts +32 -0
- package/dist/configmodels/SystemMessage.d.ts.map +1 -1
- package/dist/configmodels/SystemMessage.js +34 -2
- package/dist/controllers/AdminController.d.ts +1 -1
- package/dist/controllers/AdminController.d.ts.map +1 -1
- package/dist/controllers/AdminController.js +6 -32
- package/dist/controllers/AppConfigController.js +3 -3
- package/dist/controllers/BrandingAppController.d.ts.map +1 -1
- package/dist/controllers/BrandingAppController.js +11 -10
- package/dist/controllers/BrandingController.d.ts +11 -5
- package/dist/controllers/BrandingController.d.ts.map +1 -1
- package/dist/controllers/BrandingController.js +116 -48
- package/dist/controllers/DashboardConfigController.d.ts +8 -0
- package/dist/controllers/DashboardConfigController.d.ts.map +1 -0
- package/dist/controllers/DashboardConfigController.js +17 -0
- package/dist/controllers/DynamicAssetController.d.ts +1 -21
- package/dist/controllers/DynamicAssetController.d.ts.map +1 -1
- package/dist/controllers/DynamicAssetController.js +19 -41
- package/dist/controllers/EmailController.d.ts.map +1 -1
- package/dist/controllers/EmailController.js +16 -12
- package/dist/controllers/ExportController.d.ts.map +1 -1
- package/dist/controllers/ExportController.js +3 -8
- package/dist/controllers/FormVocabularyController.d.ts +3 -0
- package/dist/controllers/FormVocabularyController.d.ts.map +1 -1
- package/dist/controllers/FormVocabularyController.js +154 -4
- package/dist/controllers/NamedQueryController.d.ts +8 -0
- package/dist/controllers/NamedQueryController.d.ts.map +1 -0
- package/dist/controllers/NamedQueryController.js +17 -0
- package/dist/controllers/RecordAuditController.d.ts +31 -14
- package/dist/controllers/RecordAuditController.d.ts.map +1 -1
- package/dist/controllers/RecordAuditController.js +509 -57
- package/dist/controllers/RecordController.d.ts +18 -16
- package/dist/controllers/RecordController.d.ts.map +1 -1
- package/dist/controllers/RecordController.js +314 -167
- package/dist/controllers/RenderViewController.d.ts.map +1 -1
- package/dist/controllers/RenderViewController.js +4 -2
- package/dist/controllers/ReportController.d.ts +7 -0
- package/dist/controllers/ReportController.d.ts.map +1 -1
- package/dist/controllers/ReportController.js +75 -2
- package/dist/controllers/ReportsController.d.ts +1 -0
- package/dist/controllers/ReportsController.d.ts.map +1 -1
- package/dist/controllers/ReportsController.js +12 -2
- package/dist/controllers/TranslationController.d.ts.map +1 -1
- package/dist/controllers/TranslationController.js +14 -12
- package/dist/controllers/WorkspaceTypesController.d.ts +3 -2
- package/dist/controllers/WorkspaceTypesController.d.ts.map +1 -1
- package/dist/controllers/WorkspaceTypesController.js +120 -31
- package/dist/controllers/index.d.ts.map +1 -1
- package/dist/controllers/index.js +19 -4
- package/dist/controllers/webservice/AdminController.d.ts.map +1 -1
- package/dist/controllers/webservice/AdminController.js +16 -17
- package/dist/controllers/webservice/AppConfigController.d.ts.map +1 -1
- package/dist/controllers/webservice/AppConfigController.js +17 -18
- package/dist/controllers/webservice/BrandingController.d.ts.map +1 -1
- package/dist/controllers/webservice/BrandingController.js +102 -48
- package/dist/controllers/webservice/DashboardConfigController.d.ts +26 -0
- package/dist/controllers/webservice/DashboardConfigController.d.ts.map +1 -0
- package/dist/controllers/webservice/DashboardConfigController.js +241 -0
- package/dist/controllers/webservice/ExportController.d.ts.map +1 -1
- package/dist/controllers/webservice/ExportController.js +13 -18
- package/dist/controllers/webservice/FormManagementController.d.ts.map +1 -1
- package/dist/controllers/webservice/FormManagementController.js +11 -13
- package/dist/controllers/webservice/HarvestRunController.d.ts +13 -0
- package/dist/controllers/webservice/HarvestRunController.d.ts.map +1 -0
- package/dist/controllers/webservice/HarvestRunController.js +148 -0
- package/dist/controllers/webservice/IntegrationAuditController.d.ts +10 -0
- package/dist/controllers/webservice/IntegrationAuditController.d.ts.map +1 -1
- package/dist/controllers/webservice/IntegrationAuditController.js +98 -0
- package/dist/controllers/webservice/NamedQueryController.d.ts +17 -0
- package/dist/controllers/webservice/NamedQueryController.d.ts.map +1 -0
- package/dist/controllers/webservice/NamedQueryController.js +127 -0
- package/dist/controllers/webservice/RecordController.d.ts +4 -0
- package/dist/controllers/webservice/RecordController.d.ts.map +1 -1
- package/dist/controllers/webservice/RecordController.js +441 -314
- package/dist/controllers/webservice/RecordTypeController.d.ts.map +1 -1
- package/dist/controllers/webservice/RecordTypeController.js +9 -10
- package/dist/controllers/webservice/ReportController.d.ts +7 -0
- package/dist/controllers/webservice/ReportController.d.ts.map +1 -1
- package/dist/controllers/webservice/ReportController.js +125 -19
- package/dist/controllers/webservice/SearchController.d.ts.map +1 -1
- package/dist/controllers/webservice/SearchController.js +28 -35
- package/dist/controllers/webservice/TranslationController.d.ts.map +1 -1
- package/dist/controllers/webservice/TranslationController.js +65 -43
- package/dist/controllers/webservice/UserManagementController.d.ts +1 -1
- package/dist/controllers/webservice/UserManagementController.d.ts.map +1 -1
- package/dist/controllers/webservice/UserManagementController.js +114 -101
- package/dist/controllers/webservice/VocabularyController.d.ts.map +1 -1
- package/dist/controllers/webservice/VocabularyController.js +76 -28
- package/dist/form-config/dataRecord-1.0-draft.js +3 -3
- package/dist/form-config/default-1.0-draft.d.ts.map +1 -1
- package/dist/form-config/default-1.0-draft.js +27 -3
- package/dist/form-config/index.d.ts.map +1 -1
- package/dist/form-config/index.js +1 -1
- package/dist/hooks/defineRedboxHook.d.ts +3 -0
- package/dist/hooks/defineRedboxHook.d.ts.map +1 -1
- package/dist/hooks/defineRedboxHook.js +4 -1
- package/dist/hooks/webpack.d.ts.map +1 -1
- package/dist/hooks/webpack.js +17 -7
- package/dist/index.d.ts +12 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +17 -2
- package/dist/loader/MigrationRunner.d.ts +19 -0
- package/dist/loader/MigrationRunner.d.ts.map +1 -0
- package/dist/loader/MigrationRunner.js +108 -0
- package/dist/loader/bootstrapShimRuntime.d.ts +2 -1
- package/dist/loader/bootstrapShimRuntime.d.ts.map +1 -1
- package/dist/loader/bootstrapShimRuntime.js +7 -2
- package/dist/loader/index.d.ts +17 -0
- package/dist/loader/index.d.ts.map +1 -1
- package/dist/loader/index.js +216 -13
- package/dist/middleware/redboxSession.d.ts +5 -0
- package/dist/middleware/redboxSession.d.ts.map +1 -1
- package/dist/middleware/redboxSession.js +19 -6
- package/dist/model/BuildResponse.d.ts +4 -0
- package/dist/model/BuildResponse.d.ts.map +1 -1
- package/dist/model/DashboardTypeResponseModel.d.ts +13 -1
- package/dist/model/DashboardTypeResponseModel.d.ts.map +1 -1
- package/dist/model/DashboardTypeResponseModel.js +12 -4
- package/dist/model/DashboardViewResponseModel.d.ts +20 -0
- package/dist/model/DashboardViewResponseModel.d.ts.map +1 -0
- package/dist/model/DashboardViewResponseModel.js +38 -0
- package/dist/model/RecordTypeResponseModel.d.ts +3 -1
- package/dist/model/RecordTypeResponseModel.d.ts.map +1 -1
- package/dist/model/RecordTypeResponseModel.js +4 -2
- package/dist/model/RequestDetails.d.ts +1 -1
- package/dist/model/RequestDetails.d.ts.map +1 -1
- package/dist/model/RequestDetails.js +1 -1
- package/dist/model/config/ReportConfig.d.ts +1 -1
- package/dist/model/config/ReportConfig.d.ts.map +1 -1
- package/dist/model/config/ReportConfig.js +2 -2
- package/dist/model/index.d.ts +1 -0
- package/dist/model/index.d.ts.map +1 -1
- package/dist/model/index.js +5 -2
- package/dist/model/storage/BrandingModel.d.ts +0 -16
- package/dist/model/storage/BrandingModel.d.ts.map +1 -1
- package/dist/model/storage/BrandingModel.js +2 -51
- package/dist/model/storage/DashboardTypeModel.d.ts +4 -0
- package/dist/model/storage/DashboardTypeModel.d.ts.map +1 -1
- package/dist/model/storage/HarvestRunModel.d.ts +140 -0
- package/dist/model/storage/HarvestRunModel.d.ts.map +1 -0
- package/dist/model/storage/HarvestRunModel.js +110 -0
- package/dist/model/storage/IntegrationAuditModel.d.ts +49 -0
- package/dist/model/storage/IntegrationAuditModel.d.ts.map +1 -1
- package/dist/model/storage/IntegrationAuditModel.js +106 -0
- package/dist/model/storage/RecordTypeModel.d.ts +16 -0
- package/dist/model/storage/RecordTypeModel.d.ts.map +1 -1
- package/dist/model/storage/RecordTypeModel.js +9 -1
- package/dist/model/storage/ReportModel.d.ts +1 -0
- package/dist/model/storage/ReportModel.d.ts.map +1 -1
- package/dist/model/storage/index.d.ts +2 -0
- package/dist/model/storage/index.d.ts.map +1 -1
- package/dist/model/storage/index.js +15 -2
- package/dist/policies/contentSecurityPolicy.d.ts.map +1 -1
- package/dist/policies/contentSecurityPolicy.js +23 -2
- package/dist/policies/i18nLanguages.d.ts.map +1 -1
- package/dist/policies/i18nLanguages.js +1 -1
- package/dist/policies/index.d.ts +3 -0
- package/dist/policies/index.d.ts.map +1 -1
- package/dist/policies/index.js +6 -2
- package/dist/policies/menuResolver.d.ts.map +1 -1
- package/dist/policies/menuResolver.js +1 -1
- package/dist/policies/setLang.d.ts.map +1 -1
- package/dist/policies/setLang.js +1 -1
- package/dist/policies/validateApiContractRequest.d.ts +3 -0
- package/dist/policies/validateApiContractRequest.d.ts.map +1 -0
- package/dist/policies/validateApiContractRequest.js +74 -0
- package/dist/responses/badRequest.d.ts.map +1 -1
- package/dist/responses/badRequest.js +7 -4
- package/dist/responses/created.d.ts.map +1 -1
- package/dist/responses/created.js +7 -4
- package/dist/responses/forbidden.d.ts.map +1 -1
- package/dist/responses/forbidden.js +7 -4
- package/dist/responses/ok.d.ts.map +1 -1
- package/dist/responses/ok.js +7 -4
- package/dist/responses/serverError.d.ts.map +1 -1
- package/dist/responses/serverError.js +7 -4
- package/dist/responses/siteTitle.d.ts +6 -0
- package/dist/responses/siteTitle.d.ts.map +1 -0
- package/dist/responses/siteTitle.js +28 -0
- package/dist/sails.d.ts +9 -0
- package/dist/sails.d.ts.map +1 -1
- package/dist/services/AgendaQueueService.d.ts +39 -17
- package/dist/services/AgendaQueueService.d.ts.map +1 -1
- package/dist/services/AgendaQueueService.js +328 -87
- package/dist/services/AppConfigService.d.ts +20 -2
- package/dist/services/AppConfigService.d.ts.map +1 -1
- package/dist/services/AppConfigService.js +129 -15
- package/dist/services/AttachmentMetadataService.d.ts +34 -0
- package/dist/services/AttachmentMetadataService.d.ts.map +1 -0
- package/dist/services/AttachmentMetadataService.js +133 -0
- package/dist/services/BrandingLogoService.d.ts +11 -8
- package/dist/services/BrandingLogoService.d.ts.map +1 -1
- package/dist/services/BrandingLogoService.js +71 -72
- package/dist/services/BrandingService.d.ts.map +1 -1
- package/dist/services/BrandingService.js +4 -32
- package/dist/services/BrandingThemeCssService.d.ts +21 -0
- package/dist/services/BrandingThemeCssService.d.ts.map +1 -0
- package/dist/services/BrandingThemeCssService.js +113 -0
- package/dist/services/BrandingThemeTokens.d.ts +16 -0
- package/dist/services/BrandingThemeTokens.d.ts.map +1 -0
- package/dist/services/BrandingThemeTokens.js +82 -0
- package/dist/services/CacheService.d.ts.map +1 -1
- package/dist/services/CacheService.js +37 -29
- package/dist/services/DashboardConfigService.d.ts +71 -0
- package/dist/services/DashboardConfigService.d.ts.map +1 -0
- package/dist/services/DashboardConfigService.js +315 -0
- package/dist/services/DashboardTypesService.d.ts +61 -63
- package/dist/services/DashboardTypesService.d.ts.map +1 -1
- package/dist/services/DashboardTypesService.js +361 -198
- package/dist/services/DoiService.d.ts +30 -25
- package/dist/services/DoiService.d.ts.map +1 -1
- package/dist/services/DoiService.js +448 -393
- package/dist/services/EmailService.d.ts +17 -3
- package/dist/services/EmailService.d.ts.map +1 -1
- package/dist/services/EmailService.js +44 -17
- package/dist/services/FigshareService.d.ts +40 -65
- package/dist/services/FigshareService.d.ts.map +1 -1
- package/dist/services/FigshareService.js +616 -2038
- package/dist/services/FormPayloadPrehydrateService.d.ts +35 -0
- package/dist/services/FormPayloadPrehydrateService.d.ts.map +1 -0
- package/dist/services/FormPayloadPrehydrateService.js +200 -0
- package/dist/services/FormRecordConsistencyService.d.ts +3 -3
- package/dist/services/FormRecordConsistencyService.d.ts.map +1 -1
- package/dist/services/FormRecordConsistencyService.js +21 -19
- package/dist/services/FormVocabularyService.d.ts +45 -0
- package/dist/services/FormVocabularyService.d.ts.map +1 -0
- package/dist/services/FormVocabularyService.js +326 -0
- package/dist/services/FormsService.d.ts.map +1 -1
- package/dist/services/FormsService.js +8 -6
- package/dist/services/HarvestRunService.d.ts +73 -0
- package/dist/services/HarvestRunService.d.ts.map +1 -0
- package/dist/services/HarvestRunService.js +1317 -0
- package/dist/services/I18nEntriesService.d.ts +9 -4
- package/dist/services/I18nEntriesService.d.ts.map +1 -1
- package/dist/services/I18nEntriesService.js +96 -18
- package/dist/services/IntegrationAuditService.d.ts +158 -0
- package/dist/services/IntegrationAuditService.d.ts.map +1 -1
- package/dist/services/IntegrationAuditService.js +838 -0
- package/dist/services/IntegrationNotificationService.d.ts +55 -0
- package/dist/services/IntegrationNotificationService.d.ts.map +1 -0
- package/dist/services/IntegrationNotificationService.js +271 -0
- package/dist/services/NamedQueryService.d.ts +51 -12
- package/dist/services/NamedQueryService.d.ts.map +1 -1
- package/dist/services/NamedQueryService.js +622 -125
- package/dist/services/OniService.d.ts.map +1 -1
- package/dist/services/OniService.js +4 -6
- package/dist/services/RDMPService.d.ts.map +1 -1
- package/dist/services/RDMPService.js +3 -2
- package/dist/services/RecordsService.d.ts +25 -3
- package/dist/services/RecordsService.d.ts.map +1 -1
- package/dist/services/RecordsService.js +119 -19
- package/dist/services/ReportsService.d.ts +57 -1
- package/dist/services/ReportsService.d.ts.map +1 -1
- package/dist/services/ReportsService.js +258 -34
- package/dist/services/SassCompilerService.d.ts +4 -10
- package/dist/services/SassCompilerService.d.ts.map +1 -1
- package/dist/services/SassCompilerService.js +9 -173
- package/dist/services/SolrSearchService.d.ts +1 -0
- package/dist/services/SolrSearchService.d.ts.map +1 -1
- package/dist/services/SolrSearchService.js +14 -3
- package/dist/services/StandardDatastreamService.d.ts +37 -5
- package/dist/services/StandardDatastreamService.d.ts.map +1 -1
- package/dist/services/StandardDatastreamService.js +535 -38
- package/dist/services/StorageManagerService.d.ts +13 -1
- package/dist/services/StorageManagerService.d.ts.map +1 -1
- package/dist/services/StorageManagerService.js +94 -11
- package/dist/services/TemplateService.d.ts +2 -18
- package/dist/services/TemplateService.d.ts.map +1 -1
- package/dist/services/TemplateService.js +9 -53
- package/dist/services/VocabularyService.d.ts +13 -0
- package/dist/services/VocabularyService.d.ts.map +1 -1
- package/dist/services/VocabularyService.js +204 -14
- package/dist/services/doi-v2/audit.d.ts +7 -0
- package/dist/services/doi-v2/audit.d.ts.map +1 -1
- package/dist/services/doi-v2/audit.js +30 -0
- package/dist/services/doi-v2/bindings.d.ts +8 -0
- package/dist/services/doi-v2/bindings.d.ts.map +1 -1
- package/dist/services/doi-v2/bindings.js +79 -0
- package/dist/services/doi-v2/config.d.ts +7 -0
- package/dist/services/doi-v2/config.js +51 -0
- package/dist/services/doi-v2/context.d.ts +18 -0
- package/dist/services/doi-v2/context.js +41 -0
- package/dist/services/doi-v2/http.d.ts +21 -0
- package/dist/services/doi-v2/http.js +88 -0
- package/dist/services/doi-v2/payload.d.ts +4 -0
- package/dist/services/doi-v2/payload.d.ts.map +1 -1
- package/dist/services/doi-v2/payload.js +305 -0
- package/dist/services/doi-v2/profiles.d.ts +5 -0
- package/dist/services/doi-v2/profiles.js +31 -0
- package/dist/services/doi-v2/runtime.d.ts +16 -0
- package/dist/services/doi-v2/runtime.js +173 -0
- package/dist/services/doi-v2/types.d.ts +49 -0
- package/dist/services/doi-v2/types.js +3 -0
- package/dist/services/figshare-v2/assets.d.ts +5 -0
- package/dist/services/figshare-v2/assets.js +297 -0
- package/dist/services/figshare-v2/audit.d.ts +7 -0
- package/dist/services/figshare-v2/audit.d.ts.map +1 -0
- package/dist/services/figshare-v2/audit.js +30 -0
- package/dist/services/figshare-v2/bindings.d.ts +6 -0
- package/dist/services/figshare-v2/bindings.d.ts.map +1 -1
- package/dist/services/figshare-v2/bindings.js +58 -0
- package/dist/services/figshare-v2/config.d.ts +13 -0
- package/dist/services/figshare-v2/config.d.ts.map +1 -1
- package/dist/services/figshare-v2/config.js +105 -0
- package/dist/services/figshare-v2/context.d.ts +4 -0
- package/dist/services/figshare-v2/context.d.ts.map +1 -1
- package/dist/services/figshare-v2/context.js +21 -0
- package/dist/services/figshare-v2/embargo.d.ts +5 -0
- package/dist/services/figshare-v2/embargo.js +36 -0
- package/dist/services/figshare-v2/http.d.ts +42 -0
- package/dist/services/figshare-v2/http.d.ts.map +1 -1
- package/dist/services/figshare-v2/http.js +324 -0
- package/dist/services/figshare-v2/metadata.d.ts +6 -0
- package/dist/services/figshare-v2/metadata.d.ts.map +1 -1
- package/dist/services/figshare-v2/metadata.js +280 -0
- package/dist/services/figshare-v2/observability.d.ts +7 -0
- package/dist/services/figshare-v2/observability.d.ts.map +1 -1
- package/dist/services/figshare-v2/observability.js +87 -0
- package/dist/services/figshare-v2/plan.d.ts +5 -0
- package/dist/services/figshare-v2/plan.js +51 -0
- package/dist/services/figshare-v2/publish.d.ts +5 -0
- package/dist/services/figshare-v2/publish.js +20 -0
- package/dist/services/figshare-v2/queue.d.ts +4 -0
- package/dist/services/figshare-v2/queue.js +11 -0
- package/dist/services/figshare-v2/runtime.d.ts +14 -0
- package/dist/services/figshare-v2/runtime.d.ts.map +1 -1
- package/dist/services/figshare-v2/runtime.js +88 -0
- package/dist/services/figshare-v2/types.d.ts +198 -0
- package/dist/services/figshare-v2/types.d.ts.map +1 -1
- package/dist/services/figshare-v2/types.js +59 -0
- package/dist/services/figshare-v2/workflow.d.ts +3 -0
- package/dist/services/figshare-v2/workflow.js +7 -0
- package/dist/services/figshare-v2/writeback.d.ts +5 -0
- package/dist/services/figshare-v2/writeback.js +45 -0
- package/dist/services/index.d.ts +24 -3
- package/dist/services/index.d.ts.map +1 -1
- package/dist/services/index.js +43 -7
- package/dist/shims/momentShim.d.ts.map +1 -1
- package/dist/shims/momentShim.js +1 -6
- package/dist/storage/GridFSDriver.d.ts +101 -0
- package/dist/storage/GridFSDriver.d.ts.map +1 -0
- package/dist/storage/GridFSDriver.js +291 -0
- package/dist/storage/TusStorageManagerDataStore.d.ts +49 -0
- package/dist/storage/TusStorageManagerDataStore.d.ts.map +1 -0
- package/dist/storage/TusStorageManagerDataStore.js +300 -0
- package/dist/transformers/ExportJSONTransformer.d.ts +1 -1
- package/dist/transformers/ExportJSONTransformer.d.ts.map +1 -1
- package/dist/transformers/ExportJSONTransformer.js +3 -3
- package/dist/utilities/RequestParamUtils.d.ts +3 -0
- package/dist/utilities/RequestParamUtils.d.ts.map +1 -0
- package/dist/utilities/RequestParamUtils.js +13 -0
- package/dist/visitor/attachment-fields.visitor.d.ts +17 -17
- package/dist/visitor/attachment-fields.visitor.d.ts.map +1 -1
- package/dist/visitor/attachment-fields.visitor.js +44 -34
- package/dist/visitor/client.visitor.d.ts +145 -97
- package/dist/visitor/client.visitor.d.ts.map +1 -1
- package/dist/visitor/client.visitor.js +366 -273
- package/dist/visitor/construct.visitor.d.ts +99 -93
- package/dist/visitor/construct.visitor.d.ts.map +1 -1
- package/dist/visitor/construct.visitor.js +304 -227
- package/dist/visitor/context-variables.visitor.d.ts +35 -35
- package/dist/visitor/context-variables.visitor.d.ts.map +1 -1
- package/dist/visitor/context-variables.visitor.js +85 -75
- package/dist/visitor/data-value.visitor.d.ts +99 -93
- package/dist/visitor/data-value.visitor.d.ts.map +1 -1
- package/dist/visitor/data-value.visitor.js +157 -148
- package/dist/visitor/json-type-def.visitor.d.ts +96 -90
- package/dist/visitor/json-type-def.visitor.d.ts.map +1 -1
- package/dist/visitor/json-type-def.visitor.js +158 -149
- package/dist/visitor/migrate-config-v4-v5.visitor.d.ts +101 -94
- package/dist/visitor/migrate-config-v4-v5.visitor.d.ts.map +1 -1
- package/dist/visitor/migrate-config-v4-v5.visitor.js +356 -295
- package/dist/visitor/template.visitor.d.ts +100 -92
- package/dist/visitor/template.visitor.d.ts.map +1 -1
- package/dist/visitor/template.visitor.js +245 -156
- package/dist/visitor/validator.visitor.d.ts +95 -91
- package/dist/visitor/validator.visitor.d.ts.map +1 -1
- package/dist/visitor/validator.visitor.js +184 -152
- package/dist/visitor/visitor-helpers.js +9 -9
- package/dist/visitor/vocab-inline.visitor.d.ts +34 -19
- package/dist/visitor/vocab-inline.visitor.d.ts.map +1 -1
- package/dist/visitor/vocab-inline.visitor.js +157 -48
- package/dist/waterline-models/AttachmentAccessAudit.d.ts +26 -0
- package/dist/waterline-models/AttachmentAccessAudit.d.ts.map +1 -0
- package/dist/waterline-models/AttachmentAccessAudit.js +63 -0
- package/dist/waterline-models/AttachmentMetadata.d.ts +40 -0
- package/dist/waterline-models/AttachmentMetadata.d.ts.map +1 -0
- package/dist/waterline-models/AttachmentMetadata.js +147 -0
- package/dist/waterline-models/BrandingConfig.d.ts +0 -2
- package/dist/waterline-models/BrandingConfig.d.ts.map +1 -1
- package/dist/waterline-models/BrandingConfig.js +5 -9
- package/dist/waterline-models/DashboardType.d.ts +7 -0
- package/dist/waterline-models/DashboardType.d.ts.map +1 -1
- package/dist/waterline-models/DashboardType.js +16 -1
- package/dist/waterline-models/HarvestRecordEvent.d.ts +43 -0
- package/dist/waterline-models/HarvestRecordEvent.d.ts.map +1 -0
- package/dist/waterline-models/HarvestRecordEvent.js +107 -0
- package/dist/waterline-models/HarvestRun.d.ts +51 -0
- package/dist/waterline-models/HarvestRun.d.ts.map +1 -0
- package/dist/waterline-models/HarvestRun.js +125 -0
- package/dist/waterline-models/HarvestRunChunk.d.ts +57 -0
- package/dist/waterline-models/HarvestRunChunk.d.ts.map +1 -0
- package/dist/waterline-models/HarvestRunChunk.js +140 -0
- package/dist/waterline-models/I18nTranslation.d.ts +2 -0
- package/dist/waterline-models/I18nTranslation.d.ts.map +1 -1
- package/dist/waterline-models/I18nTranslation.js +6 -1
- package/dist/waterline-models/Migration.d.ts +24 -0
- package/dist/waterline-models/Migration.d.ts.map +1 -0
- package/dist/waterline-models/Migration.js +52 -0
- package/dist/waterline-models/NamedQuery.d.ts +6 -0
- package/dist/waterline-models/NamedQuery.d.ts.map +1 -1
- package/dist/waterline-models/NamedQuery.js +16 -1
- package/dist/waterline-models/index.d.ts +12 -0
- package/dist/waterline-models/index.d.ts.map +1 -1
- package/dist/waterline-models/index.js +19 -1
- package/package.json +78 -52
- package/redbox-loader-templates/bootstrap-shim.js.hbs +14 -1
- package/dist/config/datacite.config.d.ts +0 -51
- package/dist/config/datacite.config.d.ts.map +0 -1
- package/dist/config/datacite.config.js +0 -44
- package/dist/config/figshareAPI.config.d.ts +0 -116
- package/dist/config/figshareAPI.config.d.ts.map +0 -1
- package/dist/config/figshareAPI.config.js +0 -857
- package/dist/config/figshareAPIEnv.config.d.ts +0 -11
- package/dist/config/figshareAPIEnv.config.d.ts.map +0 -1
- package/dist/config/figshareAPIEnv.config.js +0 -13
- package/dist/config/figshareRedboxFORMapping.config.d.ts +0 -15
- package/dist/config/figshareRedboxFORMapping.config.d.ts.map +0 -1
- package/dist/config/figshareRedboxFORMapping.config.js +0 -7458
- package/dist/config/relatedObjectsFormDefinition.config.d.ts.map +0 -1
- package/dist/controllers/VocabController.d.ts +0 -43
- package/dist/controllers/VocabController.d.ts.map +0 -1
- package/dist/controllers/VocabController.js +0 -190
- package/dist/form-config/dataPublication-1.0-draft.d.ts.map +0 -1
- package/dist/form-config/dataPublication-1.0-embargoed.d.ts.map +0 -1
- package/dist/form-config/dataPublication-1.0-published.d.ts.map +0 -1
- package/dist/form-config/dataPublication-1.0-queued.d.ts.map +0 -1
- package/dist/form-config/dataPublication-1.0-retired.d.ts.map +0 -1
- package/dist/services/VocabService.d.ts +0 -81
- package/dist/services/VocabService.d.ts.map +0 -1
- package/dist/services/VocabService.js +0 -424
|
@@ -1,74 +1,526 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
-
// Copyright (c) 2017 Queensland Cyber Infrastructure Foundation (http://www.qcif.edu.au/)
|
|
3
|
-
//
|
|
4
|
-
// GNU GENERAL PUBLIC LICENSE
|
|
5
|
-
// Version 2, June 1991
|
|
6
|
-
//
|
|
7
|
-
// This program is free software; you can redistribute it and/or modify
|
|
8
|
-
// it under the terms of the GNU General Public License as published by
|
|
9
|
-
// the Free Software Foundation; either version 2 of the License, or
|
|
10
|
-
// (at your option) any later version.
|
|
11
|
-
//
|
|
12
|
-
// This program is distributed in the hope that it will be useful,
|
|
13
|
-
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
14
|
-
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
15
|
-
// GNU General Public License for more details.
|
|
16
|
-
//
|
|
17
|
-
// You should have received a copy of the GNU General Public License along
|
|
18
|
-
// with this program; if not, write to the Free Software Foundation, Inc.,
|
|
19
|
-
// 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
|
|
20
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
21
3
|
exports.Controllers = void 0;
|
|
22
4
|
const CoreController_1 = require("../CoreController");
|
|
23
|
-
const
|
|
24
|
-
const
|
|
5
|
+
const rxjs_1 = require("rxjs");
|
|
6
|
+
const IntegrationAuditParams_1 = require("../IntegrationAuditParams");
|
|
7
|
+
const RecordAuditModel_1 = require("../model/storage/RecordAuditModel");
|
|
8
|
+
const IntegrationAuditModel_1 = require("../model/storage/IntegrationAuditModel");
|
|
9
|
+
const VALID_INTEGRATION_AUDIT_STATUSES = new Set(Object.values(IntegrationAuditModel_1.IntegrationAuditStatus));
|
|
25
10
|
var Controllers;
|
|
26
11
|
(function (Controllers) {
|
|
27
|
-
/**
|
|
28
|
-
* Responsible for all things related to the Dashboard
|
|
29
|
-
*
|
|
30
|
-
* @author <a target='_' href='https://github.com/andrewbrazzatti'>Andrew Brazzatti</a>
|
|
31
|
-
*/
|
|
32
12
|
class RecordAudit extends CoreController_1.Controllers.Core.Controller {
|
|
33
13
|
recordsService;
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
*/
|
|
14
|
+
_exportedMethods = [
|
|
15
|
+
'render',
|
|
16
|
+
'getAuditData',
|
|
17
|
+
'getPermissionsData',
|
|
18
|
+
'getIntegrationAuditData',
|
|
19
|
+
'getIntegrationStatusData',
|
|
20
|
+
'init',
|
|
21
|
+
];
|
|
43
22
|
init() {
|
|
44
23
|
this.recordsService = sails.services.recordsservice;
|
|
45
24
|
}
|
|
46
25
|
bootstrap() { }
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
26
|
+
asError(error) {
|
|
27
|
+
return error instanceof Error ? error : new Error(String(error));
|
|
28
|
+
}
|
|
29
|
+
getReqBrand(req) {
|
|
30
|
+
const requestedBranding = String(req.param('branding') ?? req.session?.branding ?? '').trim();
|
|
31
|
+
return BrandingService.getBrand(requestedBranding) ?? BrandingService.getDefault();
|
|
32
|
+
}
|
|
33
|
+
getSafeRouteSegment(value) {
|
|
34
|
+
const segment = String(value ?? '').trim();
|
|
35
|
+
return /^[A-Za-z0-9_-]+$/.test(segment) ? segment : '';
|
|
36
|
+
}
|
|
37
|
+
resolveRouteSegment(...values) {
|
|
38
|
+
for (const value of values) {
|
|
39
|
+
const segment = this.getSafeRouteSegment(value);
|
|
40
|
+
if (!_.isEmpty(segment)) {
|
|
41
|
+
return segment;
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
return '';
|
|
45
|
+
}
|
|
46
|
+
buildRawAuditUrl(req, oid) {
|
|
47
|
+
const brand = this.getReqBrand(req);
|
|
48
|
+
const branding = this.resolveRouteSegment(req.param('branding'), req.options?.locals?.branding, req.session?.branding, brand?.name, brand?.id);
|
|
49
|
+
const portal = this.resolveRouteSegment(req.param('portal'), req.options?.locals?.portal, req.session?.portal);
|
|
50
|
+
if (_.isEmpty(branding) || _.isEmpty(portal)) {
|
|
51
|
+
return '';
|
|
52
|
+
}
|
|
53
|
+
return `/${branding}/${portal}/api/records/audit/${encodeURIComponent(oid)}`;
|
|
54
|
+
}
|
|
55
|
+
hasViewAccess(brand, user, record) {
|
|
56
|
+
const currentUser = user ?? {};
|
|
57
|
+
return (0, rxjs_1.of)(this.recordsService.hasViewAccess(brand, currentUser, (currentUser['roles'] ?? []), record));
|
|
58
|
+
}
|
|
59
|
+
isBrandAdmin(req) {
|
|
60
|
+
const brand = this.getReqBrand(req);
|
|
61
|
+
const roles = (req.user?.roles ?? []);
|
|
62
|
+
return roles.some(role => {
|
|
63
|
+
const roleBranding = role?.branding;
|
|
64
|
+
const roleBrandId = typeof roleBranding === 'string' ? roleBranding : roleBranding?.id;
|
|
65
|
+
return role?.name === 'Admin' && roleBrandId === brand.id;
|
|
69
66
|
});
|
|
70
67
|
}
|
|
68
|
+
getAuditSortValue(auditRecord) {
|
|
69
|
+
const rawValue = auditRecord['createdAt'] ?? auditRecord['updatedAt'] ?? auditRecord['dateCreated'] ?? null;
|
|
70
|
+
const parsed = rawValue == null ? Number.NaN : new Date(String(rawValue)).getTime();
|
|
71
|
+
return Number.isFinite(parsed) ? parsed : 0;
|
|
72
|
+
}
|
|
73
|
+
getActionLabelKey(action) {
|
|
74
|
+
return `@record-audit-action-${action}`;
|
|
75
|
+
}
|
|
76
|
+
toPathText(path) {
|
|
77
|
+
return path.reduce((value, segment, index) => {
|
|
78
|
+
if (typeof segment === 'number') {
|
|
79
|
+
return `${value}[${segment}]`;
|
|
80
|
+
}
|
|
81
|
+
if (index === 0) {
|
|
82
|
+
return String(segment);
|
|
83
|
+
}
|
|
84
|
+
return `${value}.${String(segment)}`;
|
|
85
|
+
}, '');
|
|
86
|
+
}
|
|
87
|
+
getDisplayPath(pathText) {
|
|
88
|
+
return pathText.startsWith('metadata.') ? pathText.slice('metadata.'.length) : pathText;
|
|
89
|
+
}
|
|
90
|
+
normalizePathForLookup(path) {
|
|
91
|
+
return path
|
|
92
|
+
.filter(segment => segment !== 'metadata' && typeof segment !== 'number')
|
|
93
|
+
.map(segment => String(segment));
|
|
94
|
+
}
|
|
95
|
+
collectLabelMappings(item, mappings, parentPath = []) {
|
|
96
|
+
if (!_.isPlainObject(item) && !Array.isArray(item)) {
|
|
97
|
+
return;
|
|
98
|
+
}
|
|
99
|
+
if (Array.isArray(item)) {
|
|
100
|
+
item.forEach(child => this.collectLabelMappings(child, mappings, parentPath));
|
|
101
|
+
return;
|
|
102
|
+
}
|
|
103
|
+
const itemRecord = item;
|
|
104
|
+
const layout = _.isPlainObject(itemRecord['layout']) ? itemRecord['layout'] : undefined;
|
|
105
|
+
const component = _.isPlainObject(itemRecord['component']) ? itemRecord['component'] : undefined;
|
|
106
|
+
const itemName = String(itemRecord['name'] ?? component?.['name'] ?? layout?.['name'] ?? '').trim();
|
|
107
|
+
const nextPath = itemName ? [...parentPath, itemName] : parentPath;
|
|
108
|
+
const label = String(layout?.['config'] && _.isPlainObject(layout['config']) ? layout['config']['label'] ?? '' : '') ||
|
|
109
|
+
String(component?.['config'] && _.isPlainObject(component['config']) ? component['config']['label'] ?? '' : '');
|
|
110
|
+
if (itemName && label) {
|
|
111
|
+
mappings.set(nextPath.join('.'), label);
|
|
112
|
+
}
|
|
113
|
+
const children = [
|
|
114
|
+
itemRecord['children'],
|
|
115
|
+
itemRecord['fields'],
|
|
116
|
+
itemRecord['items'],
|
|
117
|
+
itemRecord['components'],
|
|
118
|
+
layout?.['children'],
|
|
119
|
+
component?.['children'],
|
|
120
|
+
];
|
|
121
|
+
children.forEach(child => {
|
|
122
|
+
if (Array.isArray(child)) {
|
|
123
|
+
child.forEach(entry => this.collectLabelMappings(entry, mappings, nextPath));
|
|
124
|
+
}
|
|
125
|
+
});
|
|
126
|
+
}
|
|
127
|
+
async buildFieldLabelMap(record, brand) {
|
|
128
|
+
const metaMetadata = (_.isPlainObject(record?.metaMetadata) ? record.metaMetadata : {});
|
|
129
|
+
const formName = String(metaMetadata['form'] ?? metaMetadata['formName'] ?? '').trim();
|
|
130
|
+
if (_.isEmpty(formName)) {
|
|
131
|
+
return new Map();
|
|
132
|
+
}
|
|
133
|
+
const brandId = String(metaMetadata['brandId'] ?? brand.id ?? '');
|
|
134
|
+
const form = await (0, rxjs_1.firstValueFrom)(FormsService.getFormByName(formName, true, brandId));
|
|
135
|
+
const configuration = form?.configuration;
|
|
136
|
+
const labelMap = new Map();
|
|
137
|
+
if (configuration != null) {
|
|
138
|
+
this.collectLabelMappings(configuration, labelMap);
|
|
139
|
+
}
|
|
140
|
+
return labelMap;
|
|
141
|
+
}
|
|
142
|
+
resolveFieldLabel(path, fieldLabelMap) {
|
|
143
|
+
const normalizedPath = this.normalizePathForLookup(path);
|
|
144
|
+
if (normalizedPath.length === 0) {
|
|
145
|
+
return undefined;
|
|
146
|
+
}
|
|
147
|
+
for (let start = 0; start < normalizedPath.length; start++) {
|
|
148
|
+
for (let end = normalizedPath.length; end > start; end--) {
|
|
149
|
+
const candidate = normalizedPath.slice(start, end).join('.');
|
|
150
|
+
const label = fieldLabelMap.get(candidate);
|
|
151
|
+
if (label) {
|
|
152
|
+
return label;
|
|
153
|
+
}
|
|
154
|
+
}
|
|
155
|
+
}
|
|
156
|
+
return undefined;
|
|
157
|
+
}
|
|
158
|
+
mapChange(change, fieldLabelMap) {
|
|
159
|
+
const pathText = this.toPathText(change.path);
|
|
160
|
+
const displayPath = this.getDisplayPath(pathText);
|
|
161
|
+
const label = this.resolveFieldLabel(change.path, fieldLabelMap);
|
|
162
|
+
return {
|
|
163
|
+
...change,
|
|
164
|
+
pathText,
|
|
165
|
+
displayPath,
|
|
166
|
+
label,
|
|
167
|
+
displayName: label ?? displayPath,
|
|
168
|
+
};
|
|
169
|
+
}
|
|
170
|
+
mapActor(user) {
|
|
171
|
+
const auditUser = _.isPlainObject(user) ? user : {};
|
|
172
|
+
const username = String(auditUser['username'] ?? '');
|
|
173
|
+
const name = String(auditUser['name'] ?? '');
|
|
174
|
+
const email = String(auditUser['email'] ?? '');
|
|
175
|
+
return {
|
|
176
|
+
username,
|
|
177
|
+
name,
|
|
178
|
+
email,
|
|
179
|
+
displayName: name || username || 'Unknown',
|
|
180
|
+
};
|
|
181
|
+
}
|
|
182
|
+
buildAuditRowId(auditRecord, index) {
|
|
183
|
+
const persistedId = String(auditRecord['id'] ?? '').trim();
|
|
184
|
+
if (!_.isEmpty(persistedId)) {
|
|
185
|
+
return persistedId;
|
|
186
|
+
}
|
|
187
|
+
const oid = String(auditRecord['redboxOid'] ?? '');
|
|
188
|
+
const timestamp = String(auditRecord['createdAt'] ?? auditRecord['updatedAt'] ?? auditRecord['dateCreated'] ?? '');
|
|
189
|
+
return `${oid}:${timestamp}:${index}`;
|
|
190
|
+
}
|
|
191
|
+
async getRecordOrSendNotFound(req, res, oid) {
|
|
192
|
+
const record = await this.recordsService.getMeta(oid);
|
|
193
|
+
if (_.isEmpty(record)) {
|
|
194
|
+
await this.sendResp(req, res, { status: 404, displayErrors: [{ detail: 'Record not found' }] });
|
|
195
|
+
return null;
|
|
196
|
+
}
|
|
197
|
+
return record;
|
|
198
|
+
}
|
|
199
|
+
parsePositiveInt(value, defaultValue) {
|
|
200
|
+
const parsed = parseInt(String(value ?? ''), 10);
|
|
201
|
+
return Number.isFinite(parsed) && parsed > 0 ? parsed : defaultValue;
|
|
202
|
+
}
|
|
203
|
+
parseDateBoundary(value, boundary) {
|
|
204
|
+
const raw = String(value ?? '').trim();
|
|
205
|
+
if (_.isEmpty(raw)) {
|
|
206
|
+
return null;
|
|
207
|
+
}
|
|
208
|
+
if (/^\d{4}-\d{2}-\d{2}$/.test(raw)) {
|
|
209
|
+
const [year, month, day] = raw.split('-').map(part => parseInt(part, 10));
|
|
210
|
+
const date = boundary === 'start'
|
|
211
|
+
? new Date(year, month - 1, day, 0, 0, 0, 0)
|
|
212
|
+
: new Date(year, month - 1, day, 23, 59, 59, 999);
|
|
213
|
+
return Number.isNaN(date.getTime()) ? null : date;
|
|
214
|
+
}
|
|
215
|
+
const parsed = new Date(raw);
|
|
216
|
+
return Number.isNaN(parsed.getTime()) ? null : parsed;
|
|
217
|
+
}
|
|
218
|
+
async render(req, res) {
|
|
219
|
+
const oid = String(req.param('oid') ?? '').trim();
|
|
220
|
+
if (_.isEmpty(oid)) {
|
|
221
|
+
return this.sendResp(req, res, { status: 400, displayErrors: [{ detail: 'Record oid is required.' }] });
|
|
222
|
+
}
|
|
223
|
+
try {
|
|
224
|
+
const record = await this.recordsService.getMeta(oid);
|
|
225
|
+
if (_.isEmpty(record)) {
|
|
226
|
+
return this.sendResp(req, res, { status: 404, displayErrors: [{ detail: 'Record not found' }] });
|
|
227
|
+
}
|
|
228
|
+
const brand = this.getReqBrand(req);
|
|
229
|
+
const hasViewAccess = await (0, rxjs_1.firstValueFrom)(this.hasViewAccess(brand, req.user ?? {}, record));
|
|
230
|
+
if (!hasViewAccess) {
|
|
231
|
+
return this.sendResp(req, res, {
|
|
232
|
+
status: 403,
|
|
233
|
+
displayErrors: [{ code: 'view-error-no-permissions' }],
|
|
234
|
+
v1: { message: TranslationService.t('view-error-no-permissions') },
|
|
235
|
+
});
|
|
236
|
+
}
|
|
237
|
+
const locals = (req.options?.locals ?? {});
|
|
238
|
+
locals['oid'] = oid;
|
|
239
|
+
locals['appName'] = 'record-audit';
|
|
240
|
+
locals['isAdmin'] = this.isBrandAdmin(req);
|
|
241
|
+
return this.sendView(req, res, 'record/viewAudit');
|
|
242
|
+
}
|
|
243
|
+
catch (error) {
|
|
244
|
+
return this.sendResp(req, res, {
|
|
245
|
+
status: 500,
|
|
246
|
+
errors: [this.asError(error)],
|
|
247
|
+
displayErrors: [{ detail: 'Failed to load record audit page.' }],
|
|
248
|
+
});
|
|
249
|
+
}
|
|
250
|
+
}
|
|
251
|
+
async getAuditData(req, res) {
|
|
252
|
+
const oid = String(req.param('oid') ?? '').trim();
|
|
253
|
+
if (_.isEmpty(oid)) {
|
|
254
|
+
return this.sendResp(req, res, { status: 400, displayErrors: [{ detail: 'Record oid is required.' }] });
|
|
255
|
+
}
|
|
256
|
+
try {
|
|
257
|
+
const brand = this.getReqBrand(req);
|
|
258
|
+
const record = await this.getRecordOrSendNotFound(req, res, oid);
|
|
259
|
+
if (record == null) {
|
|
260
|
+
return;
|
|
261
|
+
}
|
|
262
|
+
const hasViewAccess = await (0, rxjs_1.firstValueFrom)(this.hasViewAccess(brand, req.user ?? {}, record));
|
|
263
|
+
if (!hasViewAccess) {
|
|
264
|
+
return this.sendResp(req, res, {
|
|
265
|
+
status: 403,
|
|
266
|
+
displayErrors: [{ code: 'view-error-no-permissions' }],
|
|
267
|
+
v1: { message: TranslationService.t('view-error-no-permissions') },
|
|
268
|
+
});
|
|
269
|
+
}
|
|
270
|
+
const fieldLabelMap = await this.buildFieldLabelMap(record, brand);
|
|
271
|
+
const action = String(req.param('action') ?? '').trim();
|
|
272
|
+
const workflowState = String(req.param('workflowState') ?? '').trim();
|
|
273
|
+
const rawDateFrom = req.param('dateFrom');
|
|
274
|
+
const rawDateTo = req.param('dateTo');
|
|
275
|
+
const dateFrom = this.parseDateBoundary(rawDateFrom, 'start');
|
|
276
|
+
const dateTo = this.parseDateBoundary(rawDateTo, 'end');
|
|
277
|
+
if (!_.isNil(rawDateFrom) && !_.isEmpty(String(rawDateFrom).trim()) && dateFrom == null) {
|
|
278
|
+
return this.sendResp(req, res, { status: 400, displayErrors: [{ detail: 'Invalid audit start date.' }] });
|
|
279
|
+
}
|
|
280
|
+
if (!_.isNil(rawDateTo) && !_.isEmpty(String(rawDateTo).trim()) && dateTo == null) {
|
|
281
|
+
return this.sendResp(req, res, { status: 400, displayErrors: [{ detail: 'Invalid audit end date.' }] });
|
|
282
|
+
}
|
|
283
|
+
if (dateFrom != null && dateTo != null && dateFrom.getTime() > dateTo.getTime()) {
|
|
284
|
+
return this.sendResp(req, res, {
|
|
285
|
+
status: 400,
|
|
286
|
+
displayErrors: [{ detail: 'Audit start date must be before end date.' }],
|
|
287
|
+
});
|
|
288
|
+
}
|
|
289
|
+
const rawAudit = await this.recordsService.getRecordAudit({
|
|
290
|
+
oid,
|
|
291
|
+
dateFrom,
|
|
292
|
+
dateTo,
|
|
293
|
+
action: !_.isEmpty(action) ? action : undefined,
|
|
294
|
+
workflowState: !_.isEmpty(workflowState) ? workflowState : undefined,
|
|
295
|
+
});
|
|
296
|
+
const ascendingAudit = [...rawAudit].sort((a, b) => this.getAuditSortValue(a) - this.getAuditSortValue(b));
|
|
297
|
+
const rowMap = new Map();
|
|
298
|
+
ascendingAudit.forEach((auditRecord, index) => {
|
|
299
|
+
const currentRecord = _.isPlainObject(auditRecord['record']) ? auditRecord['record'] : {};
|
|
300
|
+
const previousAudit = index > 0 ? ascendingAudit[index - 1] : null;
|
|
301
|
+
const previousRecord = previousAudit && _.isPlainObject(previousAudit['record']) ? previousAudit['record'] : null;
|
|
302
|
+
const action = String(auditRecord['action'] ?? '');
|
|
303
|
+
const currentMetadata = currentRecord['metadata'];
|
|
304
|
+
const previousMetadata = previousRecord?.['metadata'];
|
|
305
|
+
let changeSummary = {
|
|
306
|
+
available: false,
|
|
307
|
+
count: 0,
|
|
308
|
+
changes: [],
|
|
309
|
+
note: '@record-audit-note-update-only',
|
|
310
|
+
};
|
|
311
|
+
if (action === RecordAuditModel_1.RecordAuditActionType.updated) {
|
|
312
|
+
if (previousRecord == null) {
|
|
313
|
+
changeSummary = {
|
|
314
|
+
available: false,
|
|
315
|
+
count: 0,
|
|
316
|
+
changes: [],
|
|
317
|
+
note: '@record-audit-note-no-previous-snapshot',
|
|
318
|
+
};
|
|
319
|
+
}
|
|
320
|
+
else {
|
|
321
|
+
const changes = FormRecordConsistencyService.compareRecords(previousMetadata, currentMetadata, ['metadata'])
|
|
322
|
+
.map(change => this.mapChange(change, fieldLabelMap));
|
|
323
|
+
changeSummary = {
|
|
324
|
+
available: true,
|
|
325
|
+
count: changes.length,
|
|
326
|
+
changes,
|
|
327
|
+
};
|
|
328
|
+
}
|
|
329
|
+
}
|
|
330
|
+
const rowId = this.buildAuditRowId(auditRecord, index);
|
|
331
|
+
rowMap.set(rowId, {
|
|
332
|
+
id: rowId,
|
|
333
|
+
timestamp: auditRecord['createdAt'] ?? auditRecord['updatedAt'] ?? auditRecord['dateCreated'] ?? null,
|
|
334
|
+
action,
|
|
335
|
+
actionLabelKey: this.getActionLabelKey(action),
|
|
336
|
+
workflowStageLabel: String(_.get(auditRecord, 'record.workflow.stageLabel', '')),
|
|
337
|
+
actor: this.mapActor(auditRecord['user']),
|
|
338
|
+
changeSummary,
|
|
339
|
+
rawRecord: _.isPlainObject(currentRecord) ? currentRecord : null,
|
|
340
|
+
_sortValue: this.getAuditSortValue(auditRecord),
|
|
341
|
+
});
|
|
342
|
+
});
|
|
343
|
+
const records = Array.from(rowMap.values())
|
|
344
|
+
.sort((a, b) => Number(b['_sortValue'] ?? 0) - Number(a['_sortValue'] ?? 0))
|
|
345
|
+
.map(row => {
|
|
346
|
+
_.unset(row, '_sortValue');
|
|
347
|
+
return row;
|
|
348
|
+
});
|
|
349
|
+
const rawAuditUrl = this.buildRawAuditUrl(req, oid);
|
|
350
|
+
return this.sendResp(req, res, {
|
|
351
|
+
data: {
|
|
352
|
+
summary: { returnedCount: records.length },
|
|
353
|
+
rawAuditUrl,
|
|
354
|
+
records,
|
|
355
|
+
},
|
|
356
|
+
});
|
|
357
|
+
}
|
|
358
|
+
catch (error) {
|
|
359
|
+
return this.sendResp(req, res, {
|
|
360
|
+
status: 500,
|
|
361
|
+
errors: [this.asError(error)],
|
|
362
|
+
displayErrors: [{ detail: 'Failed to load record audit data.' }],
|
|
363
|
+
});
|
|
364
|
+
}
|
|
365
|
+
}
|
|
366
|
+
async getPermissionsData(req, res) {
|
|
367
|
+
const oid = String(req.param('oid') ?? '').trim();
|
|
368
|
+
if (_.isEmpty(oid)) {
|
|
369
|
+
return this.sendResp(req, res, { status: 400, displayErrors: [{ detail: 'Record oid is required.' }] });
|
|
370
|
+
}
|
|
371
|
+
if (!this.isBrandAdmin(req)) {
|
|
372
|
+
return this.sendResp(req, res, { status: 403, displayErrors: [{ code: 'view-error-no-permissions' }] });
|
|
373
|
+
}
|
|
374
|
+
try {
|
|
375
|
+
const record = await this.getRecordOrSendNotFound(req, res, oid);
|
|
376
|
+
if (record == null) {
|
|
377
|
+
return;
|
|
378
|
+
}
|
|
379
|
+
const permissionsSummary = await this.recordsService.getResolvedPermissionsSummary(oid);
|
|
380
|
+
return this.sendResp(req, res, { data: permissionsSummary });
|
|
381
|
+
}
|
|
382
|
+
catch (error) {
|
|
383
|
+
return this.sendResp(req, res, {
|
|
384
|
+
status: 500,
|
|
385
|
+
errors: [this.asError(error)],
|
|
386
|
+
displayErrors: [{ detail: 'Failed to load record permissions.' }],
|
|
387
|
+
});
|
|
388
|
+
}
|
|
389
|
+
}
|
|
390
|
+
hasEditAccess(brand, user, record) {
|
|
391
|
+
const currentUser = user ?? {};
|
|
392
|
+
return (0, rxjs_1.of)(this.recordsService.hasEditAccess(brand, currentUser, (currentUser['roles'] ?? []), record));
|
|
393
|
+
}
|
|
394
|
+
async getIntegrationStatusData(req, res) {
|
|
395
|
+
const oid = String(req.param('oid') ?? '').trim();
|
|
396
|
+
if (_.isEmpty(oid)) {
|
|
397
|
+
return this.sendResp(req, res, { status: 400, displayErrors: [{ detail: 'Record oid is required.' }] });
|
|
398
|
+
}
|
|
399
|
+
try {
|
|
400
|
+
const brand = this.getReqBrand(req);
|
|
401
|
+
const record = await this.getRecordOrSendNotFound(req, res, oid);
|
|
402
|
+
if (record == null) {
|
|
403
|
+
return;
|
|
404
|
+
}
|
|
405
|
+
const hasView = await (0, rxjs_1.firstValueFrom)(this.hasViewAccess(brand, req.user ?? {}, record));
|
|
406
|
+
if (!hasView) {
|
|
407
|
+
return this.sendResp(req, res, {
|
|
408
|
+
status: 403,
|
|
409
|
+
displayErrors: [{ code: 'view-error-no-permissions' }],
|
|
410
|
+
v1: { message: TranslationService.t('view-error-no-permissions') },
|
|
411
|
+
});
|
|
412
|
+
}
|
|
413
|
+
const integrationName = String(req.param('integrationName') ?? '').trim();
|
|
414
|
+
const params = new IntegrationAuditParams_1.IntegrationAuditParams();
|
|
415
|
+
params.oid = oid;
|
|
416
|
+
if (!_.isEmpty(integrationName)) {
|
|
417
|
+
params.integrationName = integrationName;
|
|
418
|
+
}
|
|
419
|
+
const brandConfig = sails.config.brandingAware(brand.name);
|
|
420
|
+
const citationDoiPath = String(_.get(brandConfig, 'doiPublishing.writeBack.citationDoiPath') ?? 'metadata.citation_doi');
|
|
421
|
+
// Build record context for outcome derivation.
|
|
422
|
+
const recordContext = {
|
|
423
|
+
citationDoi: (() => {
|
|
424
|
+
const val = _.get(record, citationDoiPath);
|
|
425
|
+
return typeof val === 'string' && val.trim() ? val.trim() : undefined;
|
|
426
|
+
})(),
|
|
427
|
+
workflowStage: (() => {
|
|
428
|
+
const val = _.get(record, 'workflow.stage');
|
|
429
|
+
return typeof val === 'string' && val.trim() ? val.trim() : undefined;
|
|
430
|
+
})(),
|
|
431
|
+
};
|
|
432
|
+
const integrations = await IntegrationAuditService.getStatusSummaryWithOutcomes(params, recordContext);
|
|
433
|
+
return this.sendResp(req, res, { data: { integrations } });
|
|
434
|
+
}
|
|
435
|
+
catch (error) {
|
|
436
|
+
return this.sendResp(req, res, {
|
|
437
|
+
status: 500,
|
|
438
|
+
errors: [this.asError(error)],
|
|
439
|
+
displayErrors: [{ detail: 'Failed to load integration status data.' }],
|
|
440
|
+
});
|
|
441
|
+
}
|
|
442
|
+
}
|
|
443
|
+
async getIntegrationAuditData(req, res) {
|
|
444
|
+
const oid = String(req.param('oid') ?? '').trim();
|
|
445
|
+
if (_.isEmpty(oid)) {
|
|
446
|
+
return this.sendResp(req, res, { status: 400, displayErrors: [{ detail: 'Record oid is required.' }] });
|
|
447
|
+
}
|
|
448
|
+
if (!this.isBrandAdmin(req)) {
|
|
449
|
+
return this.sendResp(req, res, { status: 403, displayErrors: [{ code: 'view-error-no-permissions' }] });
|
|
450
|
+
}
|
|
451
|
+
try {
|
|
452
|
+
const record = await this.getRecordOrSendNotFound(req, res, oid);
|
|
453
|
+
if (record == null) {
|
|
454
|
+
return;
|
|
455
|
+
}
|
|
456
|
+
const page = this.parsePositiveInt(req.param('page'), 1);
|
|
457
|
+
const pageSize = Math.min(this.parsePositiveInt(req.param('pageSize'), 20), 100);
|
|
458
|
+
const status = String(req.param('status') ?? '').trim();
|
|
459
|
+
const integrationName = String(req.param('integrationName') ?? '').trim();
|
|
460
|
+
const rawDateFrom = req.param('dateFrom');
|
|
461
|
+
const rawDateTo = req.param('dateTo');
|
|
462
|
+
const dateFrom = this.parseDateBoundary(rawDateFrom, 'start');
|
|
463
|
+
const dateTo = this.parseDateBoundary(rawDateTo, 'end');
|
|
464
|
+
const params = new IntegrationAuditParams_1.IntegrationAuditParams();
|
|
465
|
+
params.oid = oid;
|
|
466
|
+
params.page = page;
|
|
467
|
+
params.pageSize = pageSize;
|
|
468
|
+
if (!_.isNil(rawDateFrom) && !_.isEmpty(String(rawDateFrom).trim()) && dateFrom == null) {
|
|
469
|
+
return this.sendResp(req, res, { status: 400, displayErrors: [{ detail: 'Invalid integration audit start date.' }] });
|
|
470
|
+
}
|
|
471
|
+
if (!_.isNil(rawDateTo) && !_.isEmpty(String(rawDateTo).trim()) && dateTo == null) {
|
|
472
|
+
return this.sendResp(req, res, { status: 400, displayErrors: [{ detail: 'Invalid integration audit end date.' }] });
|
|
473
|
+
}
|
|
474
|
+
if (dateFrom != null && dateTo != null && dateFrom.getTime() > dateTo.getTime()) {
|
|
475
|
+
return this.sendResp(req, res, {
|
|
476
|
+
status: 400,
|
|
477
|
+
displayErrors: [{ detail: 'Integration audit start date must be before end date.' }],
|
|
478
|
+
});
|
|
479
|
+
}
|
|
480
|
+
if (!_.isEmpty(integrationName)) {
|
|
481
|
+
params.integrationName = integrationName;
|
|
482
|
+
}
|
|
483
|
+
if (dateFrom != null) {
|
|
484
|
+
params.dateFrom = dateFrom;
|
|
485
|
+
}
|
|
486
|
+
if (dateTo != null) {
|
|
487
|
+
params.dateTo = dateTo;
|
|
488
|
+
}
|
|
489
|
+
if (!_.isEmpty(status)) {
|
|
490
|
+
if (!VALID_INTEGRATION_AUDIT_STATUSES.has(status)) {
|
|
491
|
+
return this.sendResp(req, res, { status: 400, displayErrors: [{ detail: 'Invalid integration audit status.' }] });
|
|
492
|
+
}
|
|
493
|
+
params.status = status;
|
|
494
|
+
}
|
|
495
|
+
const result = await IntegrationAuditService.getTraceAuditLog(params);
|
|
496
|
+
return this.sendResp(req, res, {
|
|
497
|
+
data: {
|
|
498
|
+
summary: {
|
|
499
|
+
numFound: result.total,
|
|
500
|
+
page,
|
|
501
|
+
pageSize,
|
|
502
|
+
totalPages: Math.ceil(result.total / pageSize),
|
|
503
|
+
},
|
|
504
|
+
records: result.rows.map((row, traceIndex) => ({
|
|
505
|
+
...row,
|
|
506
|
+
id: String(row.id ?? row.traceId ?? `${oid}:trace:${page}:${traceIndex}`),
|
|
507
|
+
events: (row.events ?? []).map((event, eventIndex) => ({
|
|
508
|
+
...event,
|
|
509
|
+
id: String(event['id'] ?? `${row.traceId ?? oid}:event:${eventIndex}`),
|
|
510
|
+
})),
|
|
511
|
+
})),
|
|
512
|
+
},
|
|
513
|
+
});
|
|
514
|
+
}
|
|
515
|
+
catch (error) {
|
|
516
|
+
return this.sendResp(req, res, {
|
|
517
|
+
status: 500,
|
|
518
|
+
errors: [this.asError(error)],
|
|
519
|
+
displayErrors: [{ detail: 'Failed to load integration audit data.' }],
|
|
520
|
+
});
|
|
521
|
+
}
|
|
522
|
+
}
|
|
71
523
|
}
|
|
72
524
|
Controllers.RecordAudit = RecordAudit;
|
|
73
525
|
})(Controllers || (exports.Controllers = Controllers = {}));
|
|
74
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiUmVjb3JkQXVkaXRDb250cm9sbGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2NvbnRyb2xsZXJzL1JlY29yZEF1ZGl0Q29udHJvbGxlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsMEZBQTBGO0FBQzFGLEVBQUU7QUFDRiw2QkFBNkI7QUFDN0IsMEJBQTBCO0FBQzFCLEVBQUU7QUFDRix1RUFBdUU7QUFDdkUsdUVBQXVFO0FBQ3ZFLG9FQUFvRTtBQUNwRSxzQ0FBc0M7QUFDdEMsRUFBRTtBQUNGLGtFQUFrRTtBQUNsRSxpRUFBaUU7QUFDakUsZ0VBQWdFO0FBQ2hFLCtDQUErQztBQUMvQyxFQUFFO0FBQ0YsMEVBQTBFO0FBQzFFLDBFQUEwRTtBQUMxRSw4REFBOEQ7OztBQUU5RCxzREFBK0Q7QUFDL0Qsb0RBQTJEO0FBQzNELG1DQUFpQztBQUdqQyxJQUFpQixXQUFXLENBMkQzQjtBQTNERCxXQUFpQixXQUFXO0lBQzFCOzs7O09BSUc7SUFDSCxNQUFhLFdBQVksU0FBUSw0QkFBVyxDQUFDLElBQUksQ0FBQyxVQUFVO1FBQ2hELGNBQWMsQ0FBa0I7UUFFMUM7O1dBRUc7UUFDZ0IsZ0JBQWdCLEdBQWEsQ0FBQyxRQUFRLEVBQUUsTUFBTSxDQUFDLENBQUM7UUFFbkU7Ozs7V0FJRztRQUVJLElBQUk7WUFDVCxJQUFJLENBQUMsY0FBYyxHQUFHLEtBQUssQ0FBQyxRQUFRLENBQUMsY0FBMkMsQ0FBQztRQUNuRixDQUFDO1FBRU0sU0FBUyxLQUFJLENBQUM7UUFFZCxNQUFNLENBQUMsR0FBYyxFQUFFLEdBQWM7WUFDMUMsTUFBTSxHQUFHLEdBQUcsR0FBRyxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUM3QixNQUFNLE1BQU0sR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFLENBQUM7WUFDMUQseUdBQXlHO1lBQ3pHLGdHQUFnRztZQUNoRyx5Q0FBeUM7WUFDekMsbUZBQW1GO1lBQ25GLG9DQUFvQztZQUNwQyxrRUFBa0U7WUFDbEUscUNBQXFDO1lBQ3JDLHVGQUF1RjtZQUN2Rix3Q0FBd0M7WUFDeEMsNkRBQTZEO1lBQzdELHFFQUFxRTtZQUVyRSw2RUFBNkU7WUFDN0Usd0VBQXdFO1lBQ3hFLDhFQUE4RTtZQUU5RSxJQUFJLENBQUMsY0FBYyxDQUFDLGNBQWMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLEVBQUU7Z0JBQ3hELE1BQU0sY0FBYyxHQUFHLElBQUEsZ0JBQU8sRUFBQyxPQUFPLEVBQUUsQ0FBQyxXQUFXLENBQUMsRUFBRSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7Z0JBQ2hFLEdBQUcsQ0FBQyxPQUFRLENBQUMsTUFBNkMsQ0FBQyxTQUFTLENBQUMsR0FBRyxjQUFjLENBQUM7Z0JBQ3ZGLEdBQUcsQ0FBQyxPQUFRLENBQUMsTUFBNkMsQ0FBQyxRQUFRLENBQUMsR0FBRyx1QkFBTSxDQUFDO2dCQUMvRSxPQUFPLElBQUksQ0FBQyxRQUFRLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxrQkFBa0IsQ0FBQyxDQUFDO1lBQ3JELENBQUMsQ0FBQyxDQUFDO1FBQ0wsQ0FBQztLQU9GO0lBcERZLHVCQUFXLGNBb0R2QixDQUFBO0FBQ0gsQ0FBQyxFQTNEZ0IsV0FBVywyQkFBWCxXQUFXLFFBMkQzQiJ9
|
|
526
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiUmVjb3JkQXVkaXRDb250cm9sbGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2NvbnRyb2xsZXJzL1JlY29yZEF1ZGl0Q29udHJvbGxlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSxzREFBK0Q7QUFFL0QsK0JBQXNEO0FBRXRELHNFQUFtRTtBQUNuRSx3RUFBMEU7QUFDMUUsa0ZBQWdGO0FBa0JoRixNQUFNLGdDQUFnQyxHQUFHLElBQUksR0FBRyxDQUFTLE1BQU0sQ0FBQyxNQUFNLENBQUMsOENBQXNCLENBQUMsQ0FBQyxDQUFDO0FBRWhHLElBQWlCLFdBQVcsQ0Fra0IzQjtBQWxrQkQsV0FBaUIsV0FBVztJQUMxQixNQUFhLFdBQVksU0FBUSw0QkFBVyxDQUFDLElBQUksQ0FBQyxVQUFVO1FBQ2hELGNBQWMsQ0FBa0I7UUFFdkIsZ0JBQWdCLEdBQWE7WUFDOUMsUUFBUTtZQUNSLGNBQWM7WUFDZCxvQkFBb0I7WUFDcEIseUJBQXlCO1lBQ3pCLDBCQUEwQjtZQUMxQixNQUFNO1NBQ1AsQ0FBQztRQUVLLElBQUk7WUFDVCxJQUFJLENBQUMsY0FBYyxHQUFHLEtBQUssQ0FBQyxRQUFRLENBQUMsY0FBMkMsQ0FBQztRQUNuRixDQUFDO1FBRU0sU0FBUyxLQUFLLENBQUM7UUFFZCxPQUFPLENBQUMsS0FBYztZQUM1QixPQUFPLEtBQUssWUFBWSxLQUFLLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsSUFBSSxLQUFLLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7UUFDbkUsQ0FBQztRQUVPLFdBQVcsQ0FBQyxHQUFjO1lBQ2hDLE1BQU0saUJBQWlCLEdBQUcsTUFBTSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsVUFBVSxDQUFDLElBQUksR0FBRyxDQUFDLE9BQU8sRUFBRSxRQUFRLElBQUksRUFBRSxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUM7WUFDOUYsT0FBTyxlQUFlLENB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
|